mirror of
https://github.com/hanzoai/datastore.git
synced 2026-10-30 14:48:37 +00:00
614 lines
14 KiB
ArmAsm
614 lines
14 KiB
ArmAsm
.text
|
|
.p2align 3
|
|
.globl gcm_init_rv64i_zbc
|
|
.type gcm_init_rv64i_zbc,@function
|
|
gcm_init_rv64i_zbc:
|
|
ld a2,0(a1)
|
|
ld a3,8(a1)
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a2, 1
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 1
|
|
or a2, t1, a2
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a2, 2
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 2
|
|
or a2, t1, a2
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a2, 4
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 4
|
|
or a2, t1, a2
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a3, 1
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 1
|
|
or a3, t1, a3
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a3, 2
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 2
|
|
or a3, t1, a3
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a3, 4
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 4
|
|
or a3, t1, a3
|
|
|
|
sb a2, 7(a0)
|
|
srli t0, a2, 8
|
|
sb t0, 6(a0)
|
|
srli t0, a2, 16
|
|
sb t0, 5(a0)
|
|
srli t0, a2, 24
|
|
sb t0, 4(a0)
|
|
srli t0, a2, 32
|
|
sb t0, 3(a0)
|
|
srli t0, a2, 40
|
|
sb t0, 2(a0)
|
|
srli t0, a2, 48
|
|
sb t0, 1(a0)
|
|
srli t0, a2, 56
|
|
sb t0, 0(a0)
|
|
|
|
sb a3, 15(a0)
|
|
srli t0, a3, 8
|
|
sb t0, 14(a0)
|
|
srli t0, a3, 16
|
|
sb t0, 13(a0)
|
|
srli t0, a3, 24
|
|
sb t0, 12(a0)
|
|
srli t0, a3, 32
|
|
sb t0, 11(a0)
|
|
srli t0, a3, 40
|
|
sb t0, 10(a0)
|
|
srli t0, a3, 48
|
|
sb t0, 9(a0)
|
|
srli t0, a3, 56
|
|
sb t0, 8(a0)
|
|
|
|
ret
|
|
.size gcm_init_rv64i_zbc,.-gcm_init_rv64i_zbc
|
|
.p2align 3
|
|
.globl gcm_init_rv64i_zbc__zbb
|
|
.type gcm_init_rv64i_zbc__zbb,@function
|
|
gcm_init_rv64i_zbc__zbb:
|
|
ld a2,0(a1)
|
|
ld a3,8(a1)
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a2, 1
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 1
|
|
or a2, t1, a2
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a2, 2
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 2
|
|
or a2, t1, a2
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a2, 4
|
|
and t1, t1, t0
|
|
and a2, a2, t0
|
|
srli a2, a2, 4
|
|
or a2, t1, a2
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a3, 1
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 1
|
|
or a3, t1, a3
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a3, 2
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 2
|
|
or a3, t1, a3
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a3, 4
|
|
and t1, t1, t0
|
|
and a3, a3, t0
|
|
srli a3, a3, 4
|
|
or a3, t1, a3
|
|
|
|
.word 1803965971
|
|
.word 1803998867
|
|
sd a2,0(a0)
|
|
sd a3,8(a0)
|
|
ret
|
|
.size gcm_init_rv64i_zbc__zbb,.-gcm_init_rv64i_zbc__zbb
|
|
.p2align 3
|
|
.globl gcm_init_rv64i_zbc__zbkb
|
|
.type gcm_init_rv64i_zbc__zbkb,@function
|
|
gcm_init_rv64i_zbc__zbkb:
|
|
ld t0,0(a1)
|
|
ld t1,8(a1)
|
|
.word 1752355475
|
|
.word 1752388371
|
|
.word 1803735699
|
|
.word 1803768595
|
|
sd t0,0(a0)
|
|
sd t1,8(a0)
|
|
ret
|
|
.size gcm_init_rv64i_zbc__zbkb,.-gcm_init_rv64i_zbc__zbkb
|
|
.p2align 3
|
|
.globl gcm_gmult_rv64i_zbc
|
|
.type gcm_gmult_rv64i_zbc,@function
|
|
gcm_gmult_rv64i_zbc:
|
|
# Load Xi and bit-reverse it
|
|
ld a4, 0(a0)
|
|
ld a5, 8(a0)
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a4, 1
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 1
|
|
or a4, t1, a4
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a4, 2
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 2
|
|
or a4, t1, a4
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a4, 4
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 4
|
|
or a4, t1, a4
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a5, 1
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 1
|
|
or a5, t1, a5
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a5, 2
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 2
|
|
or a5, t1, a5
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a5, 4
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 4
|
|
or a5, t1, a5
|
|
|
|
|
|
# Load the key (already bit-reversed)
|
|
ld a6, 0(a1)
|
|
ld a7, 8(a1)
|
|
|
|
# Load the reduction constant
|
|
la t6, Lpolymod
|
|
lbu t6, 0(t6)
|
|
|
|
# Multiplication (without Karatsuba)
|
|
.word 186105395
|
|
.word 186094515
|
|
.word 186072883
|
|
.word 186061619
|
|
xor t2, t2, t5
|
|
.word 185057075
|
|
.word 185048755
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 185024307
|
|
.word 185012915
|
|
xor t1, t1, t5
|
|
|
|
# Reduction with clmul
|
|
.word 201211699
|
|
.word 201203379
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 200523571
|
|
.word 200515251
|
|
xor a5, t1, t5
|
|
xor a4, t0, t4
|
|
|
|
# Bit-reverse Xi back and store it
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a4, 1
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 1
|
|
or a4, t1, a4
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a4, 2
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 2
|
|
or a4, t1, a4
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a4, 4
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 4
|
|
or a4, t1, a4
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a5, 1
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 1
|
|
or a5, t1, a5
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a5, 2
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 2
|
|
or a5, t1, a5
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a5, 4
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 4
|
|
or a5, t1, a5
|
|
|
|
sd a4, 0(a0)
|
|
sd a5, 8(a0)
|
|
ret
|
|
.size gcm_gmult_rv64i_zbc,.-gcm_gmult_rv64i_zbc
|
|
.p2align 3
|
|
.globl gcm_gmult_rv64i_zbc__zbkb
|
|
.type gcm_gmult_rv64i_zbc__zbkb,@function
|
|
gcm_gmult_rv64i_zbc__zbkb:
|
|
# Load Xi and bit-reverse it
|
|
ld a4, 0(a0)
|
|
ld a5, 8(a0)
|
|
.word 1752651539
|
|
.word 1752684435
|
|
|
|
# Load the key (already bit-reversed)
|
|
ld a6, 0(a1)
|
|
ld a7, 8(a1)
|
|
|
|
# Load the reduction constant
|
|
la t6, Lpolymod
|
|
lbu t6, 0(t6)
|
|
|
|
# Multiplication (without Karatsuba)
|
|
.word 186105395
|
|
.word 186094515
|
|
.word 186072883
|
|
.word 186061619
|
|
xor t2, t2, t5
|
|
.word 185057075
|
|
.word 185048755
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 185024307
|
|
.word 185012915
|
|
xor t1, t1, t5
|
|
|
|
# Reduction with clmul
|
|
.word 201211699
|
|
.word 201203379
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 200523571
|
|
.word 200515251
|
|
xor a5, t1, t5
|
|
xor a4, t0, t4
|
|
|
|
# Bit-reverse Xi back and store it
|
|
.word 1752651539
|
|
.word 1752684435
|
|
sd a4, 0(a0)
|
|
sd a5, 8(a0)
|
|
ret
|
|
.size gcm_gmult_rv64i_zbc__zbkb,.-gcm_gmult_rv64i_zbc__zbkb
|
|
.p2align 3
|
|
.globl gcm_ghash_rv64i_zbc
|
|
.type gcm_ghash_rv64i_zbc,@function
|
|
gcm_ghash_rv64i_zbc:
|
|
# Load Xi and bit-reverse it
|
|
ld a4, 0(a0)
|
|
ld a5, 8(a0)
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a4, 1
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 1
|
|
or a4, t1, a4
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a4, 2
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 2
|
|
or a4, t1, a4
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a4, 4
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 4
|
|
or a4, t1, a4
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a5, 1
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 1
|
|
or a5, t1, a5
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a5, 2
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 2
|
|
or a5, t1, a5
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a5, 4
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 4
|
|
or a5, t1, a5
|
|
|
|
|
|
# Load the key (already bit-reversed)
|
|
ld a6, 0(a1)
|
|
ld a7, 8(a1)
|
|
|
|
# Load the reduction constant
|
|
la t6, Lpolymod
|
|
lbu t6, 0(t6)
|
|
|
|
Lstep:
|
|
# Load the input data, bit-reverse them, and XOR them with Xi
|
|
ld t4, 0(a2)
|
|
ld t5, 8(a2)
|
|
add a2, a2, 16
|
|
add a3, a3, -16
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, t4, 1
|
|
and t1, t1, t0
|
|
and t4, t4, t0
|
|
srli t4, t4, 1
|
|
or t4, t1, t4
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, t4, 2
|
|
and t1, t1, t0
|
|
and t4, t4, t0
|
|
srli t4, t4, 2
|
|
or t4, t1, t4
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, t4, 4
|
|
and t1, t1, t0
|
|
and t4, t4, t0
|
|
srli t4, t4, 4
|
|
or t4, t1, t4
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, t5, 1
|
|
and t1, t1, t0
|
|
and t5, t5, t0
|
|
srli t5, t5, 1
|
|
or t5, t1, t5
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, t5, 2
|
|
and t1, t1, t0
|
|
and t5, t5, t0
|
|
srli t5, t5, 2
|
|
or t5, t1, t5
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, t5, 4
|
|
and t1, t1, t0
|
|
and t5, t5, t0
|
|
srli t5, t5, 4
|
|
or t5, t1, t5
|
|
|
|
xor a4, a4, t4
|
|
xor a5, a5, t5
|
|
|
|
# Multiplication (without Karatsuba)
|
|
.word 186105395
|
|
.word 186094515
|
|
.word 186072883
|
|
.word 186061619
|
|
xor t2, t2, t5
|
|
.word 185057075
|
|
.word 185048755
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 185024307
|
|
.word 185012915
|
|
xor t1, t1, t5
|
|
|
|
# Reduction with clmul
|
|
.word 201211699
|
|
.word 201203379
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 200523571
|
|
.word 200515251
|
|
xor a5, t1, t5
|
|
xor a4, t0, t4
|
|
|
|
# Iterate over all blocks
|
|
bnez a3, Lstep
|
|
|
|
# Bit-reverse final Xi back and store it
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a4, 1
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 1
|
|
or a4, t1, a4
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a4, 2
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 2
|
|
or a4, t1, a4
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a4, 4
|
|
and t1, t1, t0
|
|
and a4, a4, t0
|
|
srli a4, a4, 4
|
|
or a4, t1, a4
|
|
|
|
la t2, Lbrev8_const
|
|
|
|
ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA
|
|
slli t1, a5, 1
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 1
|
|
or a5, t1, a5
|
|
|
|
ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC
|
|
slli t1, a5, 2
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 2
|
|
or a5, t1, a5
|
|
|
|
ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0
|
|
slli t1, a5, 4
|
|
and t1, t1, t0
|
|
and a5, a5, t0
|
|
srli a5, a5, 4
|
|
or a5, t1, a5
|
|
|
|
sd a4, 0(a0)
|
|
sd a5, 8(a0)
|
|
ret
|
|
.size gcm_ghash_rv64i_zbc,.-gcm_ghash_rv64i_zbc
|
|
.p2align 3
|
|
.globl gcm_ghash_rv64i_zbc__zbkb
|
|
.type gcm_ghash_rv64i_zbc__zbkb,@function
|
|
gcm_ghash_rv64i_zbc__zbkb:
|
|
# Load Xi and bit-reverse it
|
|
ld a4, 0(a0)
|
|
ld a5, 8(a0)
|
|
.word 1752651539
|
|
.word 1752684435
|
|
|
|
# Load the key (already bit-reversed)
|
|
ld a6, 0(a1)
|
|
ld a7, 8(a1)
|
|
|
|
# Load the reduction constant
|
|
la t6, Lpolymod
|
|
lbu t6, 0(t6)
|
|
|
|
Lstep_zkbk:
|
|
# Load the input data, bit-reverse them, and XOR them with Xi
|
|
ld t4, 0(a2)
|
|
ld t5, 8(a2)
|
|
add a2, a2, 16
|
|
add a3, a3, -16
|
|
.word 1753144979
|
|
.word 1753177875
|
|
xor a4, a4, t4
|
|
xor a5, a5, t5
|
|
|
|
# Multiplication (without Karatsuba)
|
|
.word 186105395
|
|
.word 186094515
|
|
.word 186072883
|
|
.word 186061619
|
|
xor t2, t2, t5
|
|
.word 185057075
|
|
.word 185048755
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 185024307
|
|
.word 185012915
|
|
xor t1, t1, t5
|
|
|
|
# Reduction with clmul
|
|
.word 201211699
|
|
.word 201203379
|
|
xor t2, t2, t5
|
|
xor t1, t1, t4
|
|
.word 200523571
|
|
.word 200515251
|
|
xor a5, t1, t5
|
|
xor a4, t0, t4
|
|
|
|
# Iterate over all blocks
|
|
bnez a3, Lstep_zkbk
|
|
|
|
# Bit-reverse final Xi back and store it
|
|
.word 1752651539
|
|
.word 1752684435
|
|
sd a4, 0(a0)
|
|
sd a5, 8(a0)
|
|
ret
|
|
.size gcm_ghash_rv64i_zbc__zbkb,.-gcm_ghash_rv64i_zbc__zbkb
|
|
.p2align 3
|
|
Lbrev8_const:
|
|
.dword 0xAAAAAAAAAAAAAAAA
|
|
.dword 0xCCCCCCCCCCCCCCCC
|
|
.dword 0xF0F0F0F0F0F0F0F0
|
|
.size Lbrev8_const,.-Lbrev8_const
|
|
|
|
Lpolymod:
|
|
.byte 0x87
|
|
.size Lpolymod,.-Lpolymod
|