Merge pull request #10241 from SparkiDev/asm_gen_refactor_1

ASM files: generation script refactor output
This commit is contained in:
David Garske
2026-04-17 09:35:03 -07:00
committed by GitHub
71 changed files with 10295 additions and 12518 deletions
+40 -40
View File
@@ -59,7 +59,7 @@
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_aesni_rev8:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -71,7 +71,7 @@ L_GCM_generate_m0_aesni_rev8:
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_aesni_mod2_128:
.quad 0x0, 0xe100000000000000
.quad 0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl GCM_generate_m0_aesni
@@ -325,7 +325,7 @@ _GCM_generate_m0_aesni:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_one:
.quad 0x0, 0x1
.quad 0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
@@ -337,7 +337,7 @@ L_aes_gcm_one:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_two:
.quad 0x0, 0x2
.quad 0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
@@ -349,7 +349,7 @@ L_aes_gcm_two:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_three:
.quad 0x0, 0x3
.quad 0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
@@ -361,7 +361,7 @@ L_aes_gcm_three:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_four:
.quad 0x0, 0x4
.quad 0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
@@ -373,7 +373,7 @@ L_aes_gcm_four:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_five:
.quad 0x0, 0x5
.quad 0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
@@ -385,7 +385,7 @@ L_aes_gcm_five:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_six:
.quad 0x0, 0x6
.quad 0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
@@ -397,7 +397,7 @@ L_aes_gcm_six:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_seven:
.quad 0x0, 0x7
.quad 0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
@@ -409,7 +409,7 @@ L_aes_gcm_seven:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_eight:
.quad 0x0, 0x8
.quad 0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
@@ -421,7 +421,7 @@ L_aes_gcm_eight:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_bswap_epi64:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
@@ -433,7 +433,7 @@ L_aes_gcm_bswap_epi64:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_bswap_mask:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -445,7 +445,7 @@ L_aes_gcm_bswap_mask:
.p2align 4
#endif /* __APPLE__ */
L_aes_gcm_mod2_128:
.quad 0x1, 0xc200000000000000
.quad 0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl AES_GCM_encrypt_aesni
@@ -6490,7 +6490,7 @@ L_AES_GCM_decrypt_final_aesni_cmp_tag_done:
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx1_rev8:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -6502,7 +6502,7 @@ L_GCM_generate_m0_avx1_rev8:
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx1_mod2_128:
.quad 0x0, 0xe100000000000000
.quad 0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl GCM_generate_m0_avx1
@@ -6722,7 +6722,7 @@ _GCM_generate_m0_avx1:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_one:
.quad 0x0, 0x1
.quad 0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
@@ -6734,7 +6734,7 @@ L_avx1_aes_gcm_one:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_two:
.quad 0x0, 0x2
.quad 0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
@@ -6746,7 +6746,7 @@ L_avx1_aes_gcm_two:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_three:
.quad 0x0, 0x3
.quad 0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
@@ -6758,7 +6758,7 @@ L_avx1_aes_gcm_three:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_four:
.quad 0x0, 0x4
.quad 0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
@@ -6770,7 +6770,7 @@ L_avx1_aes_gcm_four:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_five:
.quad 0x0, 0x5
.quad 0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
@@ -6782,7 +6782,7 @@ L_avx1_aes_gcm_five:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_six:
.quad 0x0, 0x6
.quad 0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
@@ -6794,7 +6794,7 @@ L_avx1_aes_gcm_six:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_seven:
.quad 0x0, 0x7
.quad 0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
@@ -6806,7 +6806,7 @@ L_avx1_aes_gcm_seven:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_eight:
.quad 0x0, 0x8
.quad 0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
@@ -6818,7 +6818,7 @@ L_avx1_aes_gcm_eight:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_bswap_epi64:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
@@ -6830,7 +6830,7 @@ L_avx1_aes_gcm_bswap_epi64:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_bswap_mask:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -6842,7 +6842,7 @@ L_avx1_aes_gcm_bswap_mask:
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_gcm_mod2_128:
.quad 0x1, 0xc200000000000000
.quad 0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl AES_GCM_encrypt_avx1
@@ -11953,7 +11953,7 @@ L_AES_GCM_decrypt_final_avx1_cmp_tag_done:
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx2_rev8:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -11965,7 +11965,7 @@ L_GCM_generate_m0_avx2_rev8:
.p2align 4
#endif /* __APPLE__ */
L_GCM_generate_m0_avx2_mod2_128:
.quad 0x0, 0xe100000000000000
.quad 0x0000000000000000,0xe100000000000000
#ifndef __APPLE__
.text
.globl GCM_generate_m0_avx2
@@ -12185,7 +12185,7 @@ _GCM_generate_m0_avx2:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_one:
.quad 0x0, 0x1
.quad 0x0000000000000000,0x0000000000000001
#ifndef __APPLE__
.data
#else
@@ -12197,7 +12197,7 @@ L_avx2_aes_gcm_one:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_two:
.quad 0x0, 0x2
.quad 0x0000000000000000,0x0000000000000002
#ifndef __APPLE__
.data
#else
@@ -12209,7 +12209,7 @@ L_avx2_aes_gcm_two:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_three:
.quad 0x0, 0x3
.quad 0x0000000000000000,0x0000000000000003
#ifndef __APPLE__
.data
#else
@@ -12221,7 +12221,7 @@ L_avx2_aes_gcm_three:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_four:
.quad 0x0, 0x4
.quad 0x0000000000000000,0x0000000000000004
#ifndef __APPLE__
.data
#else
@@ -12233,7 +12233,7 @@ L_avx2_aes_gcm_four:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_five:
.quad 0x0, 0x5
.quad 0x0000000000000000,0x0000000000000005
#ifndef __APPLE__
.data
#else
@@ -12245,7 +12245,7 @@ L_avx2_aes_gcm_five:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_six:
.quad 0x0, 0x6
.quad 0x0000000000000000,0x0000000000000006
#ifndef __APPLE__
.data
#else
@@ -12257,7 +12257,7 @@ L_avx2_aes_gcm_six:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_seven:
.quad 0x0, 0x7
.quad 0x0000000000000000,0x0000000000000007
#ifndef __APPLE__
.data
#else
@@ -12269,7 +12269,7 @@ L_avx2_aes_gcm_seven:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_eight:
.quad 0x0, 0x8
.quad 0x0000000000000000,0x0000000000000008
#ifndef __APPLE__
.data
#else
@@ -12281,7 +12281,7 @@ L_avx2_aes_gcm_eight:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_one:
.quad 0x0, 0x100000000000000
.quad 0x0000000000000000,0x0100000000000000
#ifndef __APPLE__
.data
#else
@@ -12293,7 +12293,7 @@ L_avx2_aes_gcm_bswap_one:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_epi64:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.data
#else
@@ -12305,7 +12305,7 @@ L_avx2_aes_gcm_bswap_epi64:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_bswap_mask:
.quad 0x8090a0b0c0d0e0f, 0x1020304050607
.quad 0x08090a0b0c0d0e0f,0x0001020304050607
#ifndef __APPLE__
.data
#else
@@ -12317,7 +12317,7 @@ L_avx2_aes_gcm_bswap_mask:
.p2align 4
#endif /* __APPLE__ */
L_avx2_aes_gcm_mod2_128:
.quad 0x1, 0xc200000000000000
.quad 0x0000000000000001,0xc200000000000000
#ifndef __APPLE__
.text
.globl AES_GCM_encrypt_avx2
+147 -106
View File
@@ -18,6 +18,7 @@
; * along with this program; if not, write to the Free Software
; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
; */
IF @Version LT 1200
; AVX2 instructions not recognized by old versions of MASM
IFNDEF NO_AVX2_SUPPORT
@@ -42,15 +43,17 @@ ENDIF
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_aesni_rev8 QWORD 579005069656919567, 283686952306183
L_GCM_generate_m0_aesni_rev8 QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_GCM_generate_m0_aesni_rev8 QWORD L_GCM_generate_m0_aesni_rev8
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_aesni_mod2_128 QWORD 0, 16212958658533785600
L_GCM_generate_m0_aesni_mod2_128 QWORD \
0000000000000000h, 0e100000000000000h
ptr_L_GCM_generate_m0_aesni_mod2_128 QWORD L_GCM_generate_m0_aesni_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
GCM_generate_m0_aesni PROC
sub rsp, 80
movdqu OWORD PTR [rsp], xmm6
@@ -292,63 +295,74 @@ GCM_generate_m0_aesni PROC
add rsp, 80
ret
GCM_generate_m0_aesni ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_one QWORD 0, 1
L_aes_gcm_one QWORD \
0000000000000000h, 0000000000000001h
ptr_L_aes_gcm_one QWORD L_aes_gcm_one
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_two QWORD 0, 2
L_aes_gcm_two QWORD \
0000000000000000h, 0000000000000002h
ptr_L_aes_gcm_two QWORD L_aes_gcm_two
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_three QWORD 0, 3
L_aes_gcm_three QWORD \
0000000000000000h, 0000000000000003h
ptr_L_aes_gcm_three QWORD L_aes_gcm_three
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_four QWORD 0, 4
L_aes_gcm_four QWORD \
0000000000000000h, 0000000000000004h
ptr_L_aes_gcm_four QWORD L_aes_gcm_four
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_five QWORD 0, 5
L_aes_gcm_five QWORD \
0000000000000000h, 0000000000000005h
ptr_L_aes_gcm_five QWORD L_aes_gcm_five
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_six QWORD 0, 6
L_aes_gcm_six QWORD \
0000000000000000h, 0000000000000006h
ptr_L_aes_gcm_six QWORD L_aes_gcm_six
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_seven QWORD 0, 7
L_aes_gcm_seven QWORD \
0000000000000000h, 0000000000000007h
ptr_L_aes_gcm_seven QWORD L_aes_gcm_seven
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_eight QWORD 0, 8
L_aes_gcm_eight QWORD \
0000000000000000h, 0000000000000008h
ptr_L_aes_gcm_eight QWORD L_aes_gcm_eight
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_bswap_epi64 QWORD 283686952306183, 579005069656919567
L_aes_gcm_bswap_epi64 QWORD \
0001020304050607h, 08090a0b0c0d0e0fh
ptr_L_aes_gcm_bswap_epi64 QWORD L_aes_gcm_bswap_epi64
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_bswap_mask QWORD 579005069656919567, 283686952306183
L_aes_gcm_bswap_mask QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_aes_gcm_bswap_mask QWORD L_aes_gcm_bswap_mask
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_aes_gcm_mod2_128 QWORD 1, 13979173243358019584
L_aes_gcm_mod2_128 QWORD \
0000000000000001h, 0c200000000000000h
ptr_L_aes_gcm_mod2_128 QWORD L_aes_gcm_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_aesni PROC
push r13
push rdi
@@ -2218,8 +2232,8 @@ L_AES_GCM_encrypt_aesni_store_tag_done:
pop r13
ret
AES_GCM_encrypt_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_aesni PROC
push r13
push rdi
@@ -3641,8 +3655,8 @@ L_AES_GCM_decrypt_aesni_cmp_tag_done:
pop r13
ret
AES_GCM_decrypt_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_init_aesni PROC
push rdi
push rsi
@@ -3999,8 +4013,8 @@ L_AES_GCM_init_aesni_iv_done:
pop rdi
ret
AES_GCM_init_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_aad_update_aesni PROC
mov rax, rcx
sub rsp, 32
@@ -4076,8 +4090,8 @@ L_AES_GCM_aad_update_aesni_16_loop:
add rsp, 32
ret
AES_GCM_aad_update_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_block_aesni PROC
mov r10, r8
mov r11, r9
@@ -4116,8 +4130,8 @@ L_AES_GCM_encrypt_block_aesni_aesenc_block_aesenc_avx_last:
pshufb xmm0, OWORD PTR L_aes_gcm_bswap_mask
ret
AES_GCM_encrypt_block_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_ghash_block_aesni PROC
sub rsp, 32
movdqu OWORD PTR [rsp], xmm6
@@ -4187,8 +4201,8 @@ AES_GCM_ghash_block_aesni PROC
add rsp, 32
ret
AES_GCM_ghash_block_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_update_aesni PROC
push r13
push r12
@@ -5426,8 +5440,8 @@ L_AES_GCM_encrypt_update_aesni_done_enc:
pop r13
ret
AES_GCM_encrypt_update_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_final_aesni PROC
push r13
push r12
@@ -5538,8 +5552,8 @@ L_AES_GCM_encrypt_final_aesni_store_tag_done:
pop r13
ret
AES_GCM_encrypt_final_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_update_aesni PROC
push r13
push r12
@@ -6321,8 +6335,8 @@ L_AES_GCM_decrypt_update_aesni_done_dec:
pop r13
ret
AES_GCM_decrypt_update_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_final_aesni PROC
push r13
push r12
@@ -6454,19 +6468,21 @@ L_AES_GCM_decrypt_final_aesni_cmp_tag_done:
pop r13
ret
AES_GCM_decrypt_final_aesni ENDP
_text ENDS
_TEXT ENDS
IFDEF HAVE_INTEL_AVX1
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_avx1_rev8 QWORD 579005069656919567, 283686952306183
L_GCM_generate_m0_avx1_rev8 QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_GCM_generate_m0_avx1_rev8 QWORD L_GCM_generate_m0_avx1_rev8
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_avx1_mod2_128 QWORD 0, 16212958658533785600
L_GCM_generate_m0_avx1_mod2_128 QWORD \
0000000000000000h, 0e100000000000000h
ptr_L_GCM_generate_m0_avx1_mod2_128 QWORD L_GCM_generate_m0_avx1_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
GCM_generate_m0_avx1 PROC
sub rsp, 80
vmovdqu OWORD PTR [rsp], xmm6
@@ -6674,63 +6690,74 @@ GCM_generate_m0_avx1 PROC
add rsp, 80
ret
GCM_generate_m0_avx1 ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_one QWORD 0, 1
L_avx1_aes_gcm_one QWORD \
0000000000000000h, 0000000000000001h
ptr_L_avx1_aes_gcm_one QWORD L_avx1_aes_gcm_one
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_two QWORD 0, 2
L_avx1_aes_gcm_two QWORD \
0000000000000000h, 0000000000000002h
ptr_L_avx1_aes_gcm_two QWORD L_avx1_aes_gcm_two
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_three QWORD 0, 3
L_avx1_aes_gcm_three QWORD \
0000000000000000h, 0000000000000003h
ptr_L_avx1_aes_gcm_three QWORD L_avx1_aes_gcm_three
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_four QWORD 0, 4
L_avx1_aes_gcm_four QWORD \
0000000000000000h, 0000000000000004h
ptr_L_avx1_aes_gcm_four QWORD L_avx1_aes_gcm_four
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_five QWORD 0, 5
L_avx1_aes_gcm_five QWORD \
0000000000000000h, 0000000000000005h
ptr_L_avx1_aes_gcm_five QWORD L_avx1_aes_gcm_five
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_six QWORD 0, 6
L_avx1_aes_gcm_six QWORD \
0000000000000000h, 0000000000000006h
ptr_L_avx1_aes_gcm_six QWORD L_avx1_aes_gcm_six
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_seven QWORD 0, 7
L_avx1_aes_gcm_seven QWORD \
0000000000000000h, 0000000000000007h
ptr_L_avx1_aes_gcm_seven QWORD L_avx1_aes_gcm_seven
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_eight QWORD 0, 8
L_avx1_aes_gcm_eight QWORD \
0000000000000000h, 0000000000000008h
ptr_L_avx1_aes_gcm_eight QWORD L_avx1_aes_gcm_eight
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_bswap_epi64 QWORD 283686952306183, 579005069656919567
L_avx1_aes_gcm_bswap_epi64 QWORD \
0001020304050607h, 08090a0b0c0d0e0fh
ptr_L_avx1_aes_gcm_bswap_epi64 QWORD L_avx1_aes_gcm_bswap_epi64
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_bswap_mask QWORD 579005069656919567, 283686952306183
L_avx1_aes_gcm_bswap_mask QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_avx1_aes_gcm_bswap_mask QWORD L_avx1_aes_gcm_bswap_mask
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_gcm_mod2_128 QWORD 1, 13979173243358019584
L_avx1_aes_gcm_mod2_128 QWORD \
0000000000000001h, 0c200000000000000h
ptr_L_avx1_aes_gcm_mod2_128 QWORD L_avx1_aes_gcm_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_avx1 PROC
push r13
push rdi
@@ -8328,8 +8355,8 @@ L_AES_GCM_encrypt_avx1_store_tag_done:
pop r13
ret
AES_GCM_encrypt_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_avx1 PROC
push r13
push rdi
@@ -9521,8 +9548,8 @@ L_AES_GCM_decrypt_avx1_cmp_tag_done:
pop r13
ret
AES_GCM_decrypt_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_init_avx1 PROC
push rdi
push rsi
@@ -9843,8 +9870,8 @@ L_AES_GCM_init_avx1_iv_done:
pop rdi
ret
AES_GCM_init_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_aad_update_avx1 PROC
mov rax, rcx
sub rsp, 32
@@ -9909,8 +9936,8 @@ L_AES_GCM_aad_update_avx1_16_loop:
add rsp, 32
ret
AES_GCM_aad_update_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_block_avx1 PROC
mov r10, r8
mov r11, r9
@@ -9949,8 +9976,8 @@ L_AES_GCM_encrypt_block_avx1_aesenc_block_last:
vzeroupper
ret
AES_GCM_encrypt_block_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_ghash_block_avx1 PROC
sub rsp, 32
vmovdqu OWORD PTR [rsp], xmm6
@@ -10010,8 +10037,8 @@ AES_GCM_ghash_block_avx1 PROC
add rsp, 32
ret
AES_GCM_ghash_block_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_update_avx1 PROC
push r13
push r12
@@ -11052,8 +11079,8 @@ L_AES_GCM_encrypt_update_avx1_done_enc:
pop r13
ret
AES_GCM_encrypt_update_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_final_avx1 PROC
push r13
push r12
@@ -11153,8 +11180,8 @@ L_AES_GCM_encrypt_final_avx1_store_tag_done:
pop r13
ret
AES_GCM_encrypt_final_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_update_avx1 PROC
push r13
push r12
@@ -11779,8 +11806,8 @@ L_AES_GCM_decrypt_update_avx1_done_dec:
pop r13
ret
AES_GCM_decrypt_update_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_final_avx1 PROC
push r13
push r12
@@ -11901,20 +11928,22 @@ L_AES_GCM_decrypt_final_avx1_cmp_tag_done:
pop r13
ret
AES_GCM_decrypt_final_avx1 ENDP
_text ENDS
_TEXT ENDS
ENDIF
IFDEF HAVE_INTEL_AVX2
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_avx2_rev8 QWORD 579005069656919567, 283686952306183
L_GCM_generate_m0_avx2_rev8 QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_GCM_generate_m0_avx2_rev8 QWORD L_GCM_generate_m0_avx2_rev8
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_GCM_generate_m0_avx2_mod2_128 QWORD 0, 16212958658533785600
L_GCM_generate_m0_avx2_mod2_128 QWORD \
0000000000000000h, 0e100000000000000h
ptr_L_GCM_generate_m0_avx2_mod2_128 QWORD L_GCM_generate_m0_avx2_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
GCM_generate_m0_avx2 PROC
sub rsp, 80
vmovdqu OWORD PTR [rsp], xmm6
@@ -12122,68 +12151,80 @@ GCM_generate_m0_avx2 PROC
add rsp, 80
ret
GCM_generate_m0_avx2 ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_one QWORD 0, 1
L_avx2_aes_gcm_one QWORD \
0000000000000000h, 0000000000000001h
ptr_L_avx2_aes_gcm_one QWORD L_avx2_aes_gcm_one
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_two QWORD 0, 2
L_avx2_aes_gcm_two QWORD \
0000000000000000h, 0000000000000002h
ptr_L_avx2_aes_gcm_two QWORD L_avx2_aes_gcm_two
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_three QWORD 0, 3
L_avx2_aes_gcm_three QWORD \
0000000000000000h, 0000000000000003h
ptr_L_avx2_aes_gcm_three QWORD L_avx2_aes_gcm_three
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_four QWORD 0, 4
L_avx2_aes_gcm_four QWORD \
0000000000000000h, 0000000000000004h
ptr_L_avx2_aes_gcm_four QWORD L_avx2_aes_gcm_four
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_five QWORD 0, 5
L_avx2_aes_gcm_five QWORD \
0000000000000000h, 0000000000000005h
ptr_L_avx2_aes_gcm_five QWORD L_avx2_aes_gcm_five
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_six QWORD 0, 6
L_avx2_aes_gcm_six QWORD \
0000000000000000h, 0000000000000006h
ptr_L_avx2_aes_gcm_six QWORD L_avx2_aes_gcm_six
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_seven QWORD 0, 7
L_avx2_aes_gcm_seven QWORD \
0000000000000000h, 0000000000000007h
ptr_L_avx2_aes_gcm_seven QWORD L_avx2_aes_gcm_seven
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_eight QWORD 0, 8
L_avx2_aes_gcm_eight QWORD \
0000000000000000h, 0000000000000008h
ptr_L_avx2_aes_gcm_eight QWORD L_avx2_aes_gcm_eight
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_bswap_one QWORD 0, 72057594037927936
L_avx2_aes_gcm_bswap_one QWORD \
0000000000000000h, 0100000000000000h
ptr_L_avx2_aes_gcm_bswap_one QWORD L_avx2_aes_gcm_bswap_one
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_bswap_epi64 QWORD 283686952306183, 579005069656919567
L_avx2_aes_gcm_bswap_epi64 QWORD \
0001020304050607h, 08090a0b0c0d0e0fh
ptr_L_avx2_aes_gcm_bswap_epi64 QWORD L_avx2_aes_gcm_bswap_epi64
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_bswap_mask QWORD 579005069656919567, 283686952306183
L_avx2_aes_gcm_bswap_mask QWORD \
08090a0b0c0d0e0fh, 0001020304050607h
ptr_L_avx2_aes_gcm_bswap_mask QWORD L_avx2_aes_gcm_bswap_mask
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_avx2_aes_gcm_mod2_128 QWORD 1, 13979173243358019584
L_avx2_aes_gcm_mod2_128 QWORD \
0000000000000001h, 0c200000000000000h
ptr_L_avx2_aes_gcm_mod2_128 QWORD L_avx2_aes_gcm_mod2_128
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_avx2 PROC
push r13
push rdi
@@ -13504,8 +13545,8 @@ L_AES_GCM_encrypt_avx2_store_tag_done:
pop r13
ret
AES_GCM_encrypt_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_avx2 PROC
push r13
push rdi
@@ -14489,8 +14530,8 @@ L_AES_GCM_decrypt_avx2_cmp_tag_done:
pop r13
ret
AES_GCM_decrypt_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_init_avx2 PROC
push rbx
push rdi
@@ -14763,8 +14804,8 @@ L_AES_GCM_init_avx2_iv_done:
pop rbx
ret
AES_GCM_init_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_aad_update_avx2 PROC
mov rax, rcx
sub rsp, 16
@@ -14815,8 +14856,8 @@ L_AES_GCM_aad_update_avx2_16_loop:
add rsp, 16
ret
AES_GCM_aad_update_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_block_avx2 PROC
mov r10, r8
mov r11, r9
@@ -14870,8 +14911,8 @@ L_AES_GCM_encrypt_block_avx2_aesenc_block_last:
add rsp, 152
ret
AES_GCM_encrypt_block_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_ghash_block_avx2 PROC
sub rsp, 16
vmovdqu OWORD PTR [rsp], xmm6
@@ -14916,8 +14957,8 @@ AES_GCM_ghash_block_avx2 PROC
add rsp, 16
ret
AES_GCM_ghash_block_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_update_avx2 PROC
push r12
push r13
@@ -15791,8 +15832,8 @@ L_AES_GCM_encrypt_update_avx2_done_enc:
pop r12
ret
AES_GCM_encrypt_update_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_encrypt_final_avx2 PROC
push r12
push r13
@@ -15862,8 +15903,8 @@ L_AES_GCM_encrypt_final_avx2_store_tag_done:
pop r12
ret
AES_GCM_encrypt_final_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_update_avx2 PROC
push r13
push r12
@@ -16390,8 +16431,8 @@ L_AES_GCM_decrypt_update_avx2_done_dec:
pop r13
ret
AES_GCM_decrypt_update_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_GCM_decrypt_final_avx2 PROC
push r12
push r13
@@ -16475,6 +16516,6 @@ L_AES_GCM_decrypt_final_avx2_cmp_tag_done:
pop r12
ret
AES_GCM_decrypt_final_avx2 ENDP
_text ENDS
_TEXT ENDS
ENDIF
END
+44 -22
View File
@@ -33,71 +33,93 @@
#endif /* NO_AVX2_SUPPORT */
.type data, @object
.align 16
L_aes_gcm_one:
.long 0x0,0x0,0x1,0x0
.long 0x00000000,0x00000000,0x00000001,0x00000000
.type data, @object
.align 16
L_aes_gcm_two:
.long 0x0,0x0,0x2,0x0
.long 0x00000000,0x00000000,0x00000002,0x00000000
.type data, @object
.align 16
L_aes_gcm_three:
.long 0x0,0x0,0x3,0x0
.long 0x00000000,0x00000000,0x00000003,0x00000000
.type data, @object
.align 16
L_aes_gcm_four:
.long 0x0,0x0,0x4,0x0
.long 0x00000000,0x00000000,0x00000004,0x00000000
.type data, @object
.align 16
L_aes_gcm_bswap_epi64:
.long 0x4050607,0x10203,0xc0d0e0f,0x8090a0b
.long 0x04050607,0x00010203,0x0c0d0e0f,0x08090a0b
.type data, @object
.align 16
L_aes_gcm_bswap_mask:
.long 0xc0d0e0f,0x8090a0b,0x4050607,0x10203
.long 0x0c0d0e0f,0x08090a0b,0x04050607,0x00010203
.type data, @object
.align 16
L_aes_gcm_mod2_128:
.long 0x1,0x0,0x0,0xc2000000
.long 0x00000001,0x00000000,0x00000000,0xc2000000
.type data, @object
.align 16
L_aes_gcm_avx1_one:
.long 0x0,0x0,0x1,0x0
.long 0x00000000,0x00000000,0x00000001,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx1_two:
.long 0x0,0x0,0x2,0x0
.long 0x00000000,0x00000000,0x00000002,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx1_three:
.long 0x0,0x0,0x3,0x0
.long 0x00000000,0x00000000,0x00000003,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx1_four:
.long 0x0,0x0,0x4,0x0
.long 0x00000000,0x00000000,0x00000004,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx1_bswap_epi64:
.long 0x4050607,0x10203,0xc0d0e0f,0x8090a0b
.long 0x04050607,0x00010203,0x0c0d0e0f,0x08090a0b
.type data, @object
.align 16
L_aes_gcm_avx1_bswap_mask:
.long 0xc0d0e0f,0x8090a0b,0x4050607,0x10203
.long 0x0c0d0e0f,0x08090a0b,0x04050607,0x00010203
.type data, @object
.align 16
L_aes_gcm_avx1_mod2_128:
.long 0x1,0x0,0x0,0xc2000000
.long 0x00000001,0x00000000,0x00000000,0xc2000000
.type data, @object
.align 16
L_aes_gcm_avx2_one:
.long 0x0,0x0,0x1,0x0
.long 0x00000000,0x00000000,0x00000001,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx2_two:
.long 0x0,0x0,0x2,0x0
.long 0x00000000,0x00000000,0x00000002,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx2_three:
.long 0x0,0x0,0x3,0x0
.long 0x00000000,0x00000000,0x00000003,0x00000000
.type data, @object
.align 16
L_aes_gcm_avx2_four:
.long 0x0,0x0,0x4,0x0
.long 0x00000000,0x00000000,0x00000004,0x00000000
.type data, @object
.align 16
L_avx2_aes_gcm_bswap_one:
.long 0x0,0x0,0x0,0x1000000
.long 0x00000000,0x00000000,0x00000000,0x01000000
.type data, @object
.align 16
L_aes_gcm_avx2_bswap_epi64:
.long 0x4050607,0x10203,0xc0d0e0f,0x8090a0b
.long 0x04050607,0x00010203,0x0c0d0e0f,0x08090a0b
.type data, @object
.align 16
L_aes_gcm_avx2_bswap_mask:
.long 0xc0d0e0f,0x8090a0b,0x4050607,0x10203
.long 0x0c0d0e0f,0x08090a0b,0x04050607,0x00010203
.type data, @object
.align 16
L_aes_gcm_avx2_mod2_128:
.long 0x1,0x0,0x0,0xc2000000
.long 0x00000001,0x00000000,0x00000000,0xc2000000
.text
.globl AES_GCM_encrypt_aesni
.type AES_GCM_encrypt_aesni,@function
+10
View File
@@ -107,6 +107,11 @@ L_AES_XTS_init_aesni_tweak_aes_enc_block_last:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_aes_xts_gc_xts:
.long 0x00000087,0x00000001,0x00000001,0x00000001
#ifndef __APPLE__
@@ -1490,6 +1495,11 @@ L_AES_XTS_init_avx1_tweak_aes_enc_block_last:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx1_aes_xts_gc_xts:
.long 0x00000087,0x00000001,0x00000001,0x00000001
#ifndef __APPLE__
+25 -22
View File
@@ -18,6 +18,7 @@
; * along with this program; if not, write to the Free Software
; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
; */
IF @Version LT 1200
; AVX2 instructions not recognized by old versions of MASM
IFNDEF NO_AVX2_SUPPORT
@@ -40,7 +41,7 @@ IFNDEF _WIN64
_WIN64 = 1
ENDIF
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_XTS_init_aesni PROC
movdqu xmm0, OWORD PTR [rcx]
; aes_enc_block
@@ -81,13 +82,14 @@ L_AES_XTS_init_aesni_tweak_aes_enc_block_last:
movdqu OWORD PTR [rcx], xmm0
ret
AES_XTS_init_aesni ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_aes_xts_gc_xts DWORD 135,1,1,1
L_aes_xts_gc_xts DWORD \
00000087h, 00000001h, 00000001h, 00000001h
ptr_L_aes_xts_gc_xts QWORD L_aes_xts_gc_xts
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_XTS_encrypt_aesni PROC
push rdi
push rsi
@@ -419,8 +421,8 @@ L_AES_XTS_encrypt_aesni_done_enc:
pop rdi
ret
AES_XTS_encrypt_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_encrypt_update_aesni PROC
push rdi
push rsi
@@ -715,8 +717,8 @@ L_AES_XTS_encrypt_update_aesni_done_enc:
pop rdi
ret
AES_XTS_encrypt_update_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_decrypt_aesni PROC
push rdi
push rsi
@@ -1102,8 +1104,8 @@ L_AES_XTS_decrypt_aesni_done_dec:
pop rdi
ret
AES_XTS_decrypt_aesni ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_decrypt_update_aesni PROC
push rdi
push rsi
@@ -1452,9 +1454,9 @@ L_AES_XTS_decrypt_update_aesni_done_dec:
pop rdi
ret
AES_XTS_decrypt_update_aesni ENDP
_text ENDS
_TEXT ENDS
IFDEF HAVE_INTEL_AVX1
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_XTS_init_avx1 PROC
vmovdqu xmm0, OWORD PTR [rcx]
; aes_enc_block
@@ -1495,13 +1497,14 @@ L_AES_XTS_init_avx1_tweak_aes_enc_block_last:
vmovdqu OWORD PTR [rcx], xmm0
ret
AES_XTS_init_avx1 ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_avx1_aes_xts_gc_xts DWORD 135,1,1,1
L_avx1_aes_xts_gc_xts DWORD \
00000087h, 00000001h, 00000001h, 00000001h
ptr_L_avx1_aes_xts_gc_xts QWORD L_avx1_aes_xts_gc_xts
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
AES_XTS_encrypt_avx1 PROC
push rdi
push rsi
@@ -1824,8 +1827,8 @@ L_AES_XTS_encrypt_avx1_done_enc:
pop rdi
ret
AES_XTS_encrypt_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_encrypt_update_avx1 PROC
push rdi
push rsi
@@ -2111,8 +2114,8 @@ L_AES_XTS_encrypt_update_avx1_done_enc:
pop rdi
ret
AES_XTS_encrypt_update_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_decrypt_avx1 PROC
push rdi
push rsi
@@ -2487,8 +2490,8 @@ L_AES_XTS_decrypt_avx1_done_dec:
pop rdi
ret
AES_XTS_decrypt_avx1 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
AES_XTS_decrypt_update_avx1 PROC
push rdi
push rsi
@@ -2826,6 +2829,6 @@ L_AES_XTS_decrypt_update_avx1_done_dec:
pop rdi
ret
AES_XTS_decrypt_update_avx1 ENDP
_text ENDS
_TEXT ENDS
ENDIF
END
+12 -12
View File
@@ -489,7 +489,7 @@ L_chacha_x64_done:
.p2align 4
#endif /* __APPLE__ */
L_chacha20_avx1_rotl8:
.quad 0x605040702010003, 0xe0d0c0f0a09080b
.quad 0x0605040702010003,0x0e0d0c0f0a09080b
#ifndef __APPLE__
.data
#else
@@ -501,7 +501,7 @@ L_chacha20_avx1_rotl8:
.p2align 4
#endif /* __APPLE__ */
L_chacha20_avx1_rotl16:
.quad 0x504070601000302, 0xd0c0f0e09080b0a
.quad 0x0504070601000302,0x0d0c0f0e09080b0a
#ifndef __APPLE__
.data
#else
@@ -513,7 +513,7 @@ L_chacha20_avx1_rotl16:
.p2align 4
#endif /* __APPLE__ */
L_chacha20_avx1_add:
.quad 0x100000000, 0x300000002
.quad 0x0000000100000000,0x0000000300000002
#ifndef __APPLE__
.data
#else
@@ -525,7 +525,7 @@ L_chacha20_avx1_add:
.p2align 4
#endif /* __APPLE__ */
L_chacha20_avx1_four:
.quad 0x400000004, 0x400000004
.quad 0x0000000400000004,0x0000000400000004
#ifndef __APPLE__
.text
.globl chacha_encrypt_avx1
@@ -1057,8 +1057,8 @@ L_chacha20_avx1_partial_done:
.p2align 5
#endif /* __APPLE__ */
L_chacha20_avx2_rotl8:
.quad 0x605040702010003, 0xe0d0c0f0a09080b
.quad 0x605040702010003, 0xe0d0c0f0a09080b
.quad 0x0605040702010003,0x0e0d0c0f0a09080b
.quad 0x0605040702010003,0x0e0d0c0f0a09080b
#ifndef __APPLE__
.data
#else
@@ -1070,8 +1070,8 @@ L_chacha20_avx2_rotl8:
.p2align 5
#endif /* __APPLE__ */
L_chacha20_avx2_rotl16:
.quad 0x504070601000302, 0xd0c0f0e09080b0a
.quad 0x504070601000302, 0xd0c0f0e09080b0a
.quad 0x0504070601000302,0x0d0c0f0e09080b0a
.quad 0x0504070601000302,0x0d0c0f0e09080b0a
#ifndef __APPLE__
.data
#else
@@ -1083,8 +1083,8 @@ L_chacha20_avx2_rotl16:
.p2align 5
#endif /* __APPLE__ */
L_chacha20_avx2_add:
.quad 0x100000000, 0x300000002
.quad 0x500000004, 0x700000006
.quad 0x0000000100000000,0x0000000300000002
.quad 0x0000000500000004,0x0000000700000006
#ifndef __APPLE__
.data
#else
@@ -1096,8 +1096,8 @@ L_chacha20_avx2_add:
.p2align 5
#endif /* __APPLE__ */
L_chacha20_avx2_eight:
.quad 0x800000008, 0x800000008
.quad 0x800000008, 0x800000008
.quad 0x0000000800000008,0x0000000800000008
.quad 0x0000000800000008,0x0000000800000008
#ifndef __APPLE__
.text
.globl chacha_encrypt_avx2
+27 -18
View File
@@ -18,6 +18,7 @@
; * along with this program; if not, write to the Free Software
; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
; */
IF @Version LT 1200
; AVX2 instructions not recognized by old versions of MASM
IFNDEF NO_AVX2_SUPPORT
@@ -40,7 +41,7 @@ IFNDEF _WIN64
_WIN64 = 1
ENDIF
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
chacha_encrypt_x64 PROC
push rbx
push rbp
@@ -457,29 +458,33 @@ L_chacha_x64_done:
pop rbx
ret
chacha_encrypt_x64 ENDP
_text ENDS
_TEXT ENDS
IFDEF HAVE_INTEL_AVX1
_DATA SEGMENT
ALIGN 16
L_chacha20_avx1_rotl8 QWORD 433757367256023043, 1012478749960636427
L_chacha20_avx1_rotl8 QWORD \
0605040702010003h, 0e0d0c0f0a09080bh
ptr_L_chacha20_avx1_rotl8 QWORD L_chacha20_avx1_rotl8
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx1_rotl16 QWORD 361421592464458498, 940142975169071882
L_chacha20_avx1_rotl16 QWORD \
0504070601000302h, 0d0c0f0e09080b0ah
ptr_L_chacha20_avx1_rotl16 QWORD L_chacha20_avx1_rotl16
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx1_add QWORD 4294967296, 12884901890
L_chacha20_avx1_add QWORD \
0000000100000000h, 0000000300000002h
ptr_L_chacha20_avx1_add QWORD L_chacha20_avx1_add
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx1_four QWORD 17179869188, 17179869188
L_chacha20_avx1_four QWORD \
0000000400000004h, 0000000400000004h
ptr_L_chacha20_avx1_four QWORD L_chacha20_avx1_four
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
chacha_encrypt_avx1 PROC
push r12
push r13
@@ -1009,34 +1014,38 @@ L_chacha20_avx1_partial_done:
pop r12
ret
chacha_encrypt_avx1 ENDP
_text ENDS
_TEXT ENDS
ENDIF
IFDEF HAVE_INTEL_AVX2
_DATA SEGMENT
ALIGN 16
L_chacha20_avx2_rotl8 QWORD 433757367256023043, 1012478749960636427,
433757367256023043, 1012478749960636427
L_chacha20_avx2_rotl8 QWORD \
0605040702010003h, 0e0d0c0f0a09080bh,
0605040702010003h, 0e0d0c0f0a09080bh
ptr_L_chacha20_avx2_rotl8 QWORD L_chacha20_avx2_rotl8
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx2_rotl16 QWORD 361421592464458498, 940142975169071882,
361421592464458498, 940142975169071882
L_chacha20_avx2_rotl16 QWORD \
0504070601000302h, 0d0c0f0e09080b0ah,
0504070601000302h, 0d0c0f0e09080b0ah
ptr_L_chacha20_avx2_rotl16 QWORD L_chacha20_avx2_rotl16
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx2_add QWORD 4294967296, 12884901890,
21474836484, 30064771078
L_chacha20_avx2_add QWORD \
0000000100000000h, 0000000300000002h,
0000000500000004h, 0000000700000006h
ptr_L_chacha20_avx2_add QWORD L_chacha20_avx2_add
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_chacha20_avx2_eight QWORD 34359738376, 34359738376,
34359738376, 34359738376
L_chacha20_avx2_eight QWORD \
0000000800000008h, 0000000800000008h,
0000000800000008h, 0000000800000008h
ptr_L_chacha20_avx2_eight QWORD L_chacha20_avx2_eight
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
chacha_encrypt_avx2 PROC
push r12
push r13
@@ -1420,6 +1429,6 @@ L_chacha20_avx2_end256:
pop r12
ret
chacha_encrypt_avx2 ENDP
_text ENDS
_TEXT ENDS
ENDIF
END
+139 -104
View File
@@ -2343,8 +2343,8 @@ _fe_invert_x64:
.p2align 5
#endif /* __APPLE__ */
L_curve25519_base_x64_x2:
.quad 0x5cae469cdd684efb, 0x8f3f5ced1e350b5c
.quad 0xd9750c687d157114, 0x20d342d51873f1b7
.quad 0x5cae469cdd684efb,0x8f3f5ced1e350b5c
.quad 0xd9750c687d157114,0x20d342d51873f1b7
#ifndef __APPLE__
.text
.globl curve25519_base_x64
@@ -8852,7 +8852,7 @@ _ge_p2_dbl_x64:
shldq $0x01, %r11, %r12
shldq $0x01, %r10, %r11
shldq $0x01, %r9, %r10
shlq $0x01, %r9
shlq $1, %r9
movq $0x7fffffffffffffff, %r8
shrq $62, %rax
andq %r8, %r12
@@ -11629,7 +11629,7 @@ _fe_sq2_x64:
shldq $0x01, %r9, %r10
shldq $0x01, %r8, %r9
shldq $0x01, %rcx, %r8
shlq $0x01, %rcx
shlq $1, %rcx
movq $0x7fffffffffffffff, %r15
shrq $62, %rax
andq %r15, %r10
@@ -12157,10 +12157,10 @@ _fe_invert_nct_x64:
testb $0x01, %r11b
jnz fe_invert_nct_v_even_end
fe_invert_nct_v_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
@@ -12185,17 +12185,17 @@ L_fe_invert_nct_uv_u:
sbbq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
testb $0x01, %cl
jnz fe_invert_nct_usubv_even_end
fe_invert_nct_usubv_even_start:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
movb $0x00, (%rsp,%r15,1)
incq %r15
testb $0x01, %cl
@@ -12217,17 +12217,17 @@ L_fe_invert_nct_uv_v:
sbbq %r8, %r12
sbbq %r9, %r13
sbbq %r10, %r14
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
testb $0x01, %r11b
jnz fe_invert_nct_vsubu_even_end
fe_invert_nct_vsubu_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
@@ -12282,10 +12282,10 @@ L_fe_invert_nct_op_div2_b:
movq $0x7fffffffffffffff, %rdx
adcq %rdx, %r10
L_fe_invert_nct_op_div2_b_mod:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
movb (%rsp,%r15,1), %dl
incq %r15
cmpb $0x01, %dl
@@ -12317,10 +12317,10 @@ L_fe_invert_nct_op_div2_d:
movq $0x7fffffffffffffff, %rdx
adcq %rdx, %r14
L_fe_invert_nct_op_div2_d_mod:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
movb (%rsp,%r15,1), %dl
incq %r15
cmpb $0x01, %dl
@@ -13201,8 +13201,8 @@ _fe_invert_avx2:
.p2align 5
#endif /* __APPLE__ */
L_curve25519_base_avx2_x2:
.quad 0x5cae469cdd684efb, 0x8f3f5ced1e350b5c
.quad 0xd9750c687d157114, 0x20d342d51873f1b7
.quad 0x5cae469cdd684efb,0x8f3f5ced1e350b5c
.quad 0xd9750c687d157114,0x20d342d51873f1b7
#ifndef __APPLE__
.text
.globl curve25519_base_avx2
@@ -18609,7 +18609,7 @@ _ge_p2_dbl_avx2:
shldq $0x01, %r12, %r13
shldq $0x01, %r11, %r12
shldq $0x01, %r10, %r11
shlq $0x01, %r10
shlq $1, %r10
movq $0x7fffffffffffffff, %rcx
shrq $62, %r9
andq %rcx, %r13
@@ -20979,7 +20979,7 @@ _fe_sq2_avx2:
shldq $0x01, %r10, %r11
shldq $0x01, %r9, %r10
shldq $0x01, %r8, %r9
shlq $0x01, %r8
shlq $1, %r8
movq $0x7fffffffffffffff, %rcx
shrq $62, %rax
andq %rcx, %r11
@@ -21415,7 +21415,12 @@ _sc_muladd_avx2:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__prime:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_prime:
.long 0x03ffffed,0x03ffffff,0x03ffffff,0x03ffffff
.long 0x03ffffff,0x00000000,0x00000000,0x00000000
.long 0x03ffffff,0x03ffffff,0x03ffffff,0x03ffffff
@@ -21430,15 +21435,20 @@ L_sp_mod_inv_avx2__prime:
#else
.p2align 5
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__one:
.quad 0x1, 0x0
.quad 0x0, 0x0
L_fe_invert_nct_avx2_one:
.quad 0x0000000000000001,0x0000000000000000
.quad 0x0000000000000000,0x0000000000000000
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__all_one:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_all_one:
.long 0x00000001,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000001,0x00000001,0x00000001
#ifndef __APPLE__
@@ -21446,7 +21456,12 @@ L_sp_mod_inv_avx2__all_one:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__mask01111:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_mask01111:
.long 0x00000000,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000000,0x00000000,0x00000000
#ifndef __APPLE__
@@ -21454,7 +21469,12 @@ L_sp_mod_inv_avx2__mask01111:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__down_one_dword:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_down_one_dword:
.long 0x00000001,0x00000002,0x00000003,0x00000004
.long 0x00000005,0x00000006,0x00000007,0x00000007
#ifndef __APPLE__
@@ -21462,7 +21482,12 @@ L_sp_mod_inv_avx2__down_one_dword:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__neg:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_neg:
.long 0x00000000,0x00000000,0x00000000,0x00000000
.long 0x80000000,0x00000000,0x00000000,0x00000000
#ifndef __APPLE__
@@ -21470,7 +21495,12 @@ L_sp_mod_inv_avx2__neg:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__up_one_dword:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_up_one_dword:
.long 0x00000007,0x00000000,0x00000001,0x00000002
.long 0x00000003,0x00000007,0x00000007,0x00000007
#ifndef __APPLE__
@@ -21478,7 +21508,12 @@ L_sp_mod_inv_avx2__up_one_dword:
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp_mod_inv_avx2__mask26:
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_fe_invert_nct_avx2_mask26:
.long 0x03ffffff,0x03ffffff,0x03ffffff,0x03ffffff
.long 0x03ffffff,0x00000000,0x00000000,0x00000000
/* Non-constant time modular inversion.
@@ -21513,39 +21548,39 @@ _fe_invert_nct_avx2:
movq 8(%rsi), %r11
movq 16(%rsi), %r12
movq 24(%rsi), %r13
leaq L_sp_mod_inv_avx2__prime(%rip), %rbx
leaq L_fe_invert_nct_avx2_prime(%rip), %rbx
vmovupd (%rbx), %ymm6
vmovupd 32(%rbx), %ymm7
leaq L_sp_mod_inv_avx2__one(%rip), %rbx
leaq L_fe_invert_nct_avx2_one(%rip), %rbx
vmovupd (%rbx), %ymm8
leaq L_sp_mod_inv_avx2__mask01111(%rip), %rbx
leaq L_fe_invert_nct_avx2_mask01111(%rip), %rbx
vmovupd (%rbx), %ymm9
leaq L_sp_mod_inv_avx2__all_one(%rip), %rbx
leaq L_fe_invert_nct_avx2_all_one(%rip), %rbx
vmovupd (%rbx), %ymm10
leaq L_sp_mod_inv_avx2__down_one_dword(%rip), %rbx
leaq L_fe_invert_nct_avx2_down_one_dword(%rip), %rbx
vmovupd (%rbx), %ymm11
leaq L_sp_mod_inv_avx2__neg(%rip), %rbx
leaq L_fe_invert_nct_avx2_neg(%rip), %rbx
vmovupd (%rbx), %ymm12
leaq L_sp_mod_inv_avx2__up_one_dword(%rip), %rbx
leaq L_fe_invert_nct_avx2_up_one_dword(%rip), %rbx
vmovupd (%rbx), %ymm13
leaq L_sp_mod_inv_avx2__mask26(%rip), %rbx
leaq L_fe_invert_nct_avx2_mask26(%rip), %rbx
vmovupd (%rbx), %ymm14
vpxor %xmm0, %xmm0, %xmm0
vpxor %xmm1, %xmm1, %xmm1
vmovdqu %ymm8, %ymm2
vpxor %xmm3, %xmm3, %xmm3
testb $0x01, %r10b
jnz L__mod_inv_avx2__v_even_end
L__mod_inv_avx2__v_even_start:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
jnz L_fe_invert_nct_avx2_v_even_end
L_fe_invert_nct_avx2_v_even_start:
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
vptest %ymm8, %ymm2
jz L__mod_inv_avx2__v_even_shr1
jz L_fe_invert_nct_avx2_v_even_shr1
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L__mod_inv_avx2__v_even_shr1:
L_fe_invert_nct_avx2_v_even_shr1:
vpand %ymm9, %ymm2, %ymm4
vpand %ymm10, %ymm3, %ymm5
vpermd %ymm4, %ymm11, %ymm4
@@ -21556,21 +21591,21 @@ L__mod_inv_avx2__v_even_shr1:
vpaddd %ymm5, %ymm2, %ymm2
vpaddd %ymm4, %ymm3, %ymm3
testb $0x01, %r10b
jz L__mod_inv_avx2__v_even_start
L__mod_inv_avx2__v_even_end:
L__mod_inv_avx2__uv_start:
jz L_fe_invert_nct_avx2_v_even_start
L_fe_invert_nct_avx2_v_even_end:
L_fe_invert_nct_avx2_uv_start:
cmpq %r13, %r9
jb L__mod_inv_avx2__uv_v
ja L__mod_inv_avx2__uv_u
jb L_fe_invert_nct_avx2_uv_v
ja L_fe_invert_nct_avx2_uv_u
cmpq %r12, %r8
jb L__mod_inv_avx2__uv_v
ja L__mod_inv_avx2__uv_u
jb L_fe_invert_nct_avx2_uv_v
ja L_fe_invert_nct_avx2_uv_u
cmpq %r11, %rcx
jb L__mod_inv_avx2__uv_v
ja L__mod_inv_avx2__uv_u
jb L_fe_invert_nct_avx2_uv_v
ja L_fe_invert_nct_avx2_uv_u
cmpq %r10, %rax
jb L__mod_inv_avx2__uv_v
L__mod_inv_avx2__uv_u:
jb L_fe_invert_nct_avx2_uv_v
L_fe_invert_nct_avx2_uv_u:
subq %r10, %rax
sbbq %r11, %rcx
vpsubd %ymm2, %ymm0, %ymm0
@@ -21578,20 +21613,20 @@ L__mod_inv_avx2__uv_u:
vpsubd %ymm3, %ymm1, %ymm1
sbbq %r13, %r9
vptest %ymm12, %ymm1
jz L__mod_inv_avx2__usubv_done_neg
jz L_fe_invert_nct_avx2_usubv_done_neg
vpaddd %ymm6, %ymm0, %ymm0
vpaddd %ymm7, %ymm1, %ymm1
L__mod_inv_avx2__usubv_done_neg:
L__mod_inv_avx2__usubv_shr1:
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrq $0x01, %r9
L_fe_invert_nct_avx2_usubv_done_neg:
L_fe_invert_nct_avx2_usubv_shr1:
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrq $1, %r9
vptest %ymm8, %ymm0
jz L__mod_inv_avx2__usubv_sub_shr1
jz L_fe_invert_nct_avx2_usubv_sub_shr1
vpaddd %ymm6, %ymm0, %ymm0
vpaddd %ymm7, %ymm1, %ymm1
L__mod_inv_avx2__usubv_sub_shr1:
L_fe_invert_nct_avx2_usubv_sub_shr1:
vpand %ymm9, %ymm0, %ymm4
vpand %ymm10, %ymm1, %ymm5
vpermd %ymm4, %ymm11, %ymm4
@@ -21602,14 +21637,14 @@ L__mod_inv_avx2__usubv_sub_shr1:
vpaddd %ymm5, %ymm0, %ymm0
vpaddd %ymm4, %ymm1, %ymm1
testb $0x01, %al
jz L__mod_inv_avx2__usubv_shr1
jz L_fe_invert_nct_avx2_usubv_shr1
cmpq $0x01, %rax
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
movq %rcx, %rdx
orq %r8, %rdx
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
orq %r9, %rdx
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
vpextrd $0x00, %xmm0, %eax
vpextrd $0x01, %xmm0, %r8d
vpextrd $2, %xmm0, %r10d
@@ -21622,8 +21657,8 @@ L__mod_inv_avx2__usubv_sub_shr1:
vextracti128 $0x01, %ymm1, %xmm1
vpextrd $0x00, %xmm0, %r14d
vpextrd $0x00, %xmm1, %r15d
jmp L__mod_inv_avx2__store_done
L__mod_inv_avx2__uv_v:
jmp L_fe_invert_nct_avx2_store_done
L_fe_invert_nct_avx2_uv_v:
subq %rax, %r10
sbbq %rcx, %r11
vpsubd %ymm0, %ymm2, %ymm2
@@ -21631,20 +21666,20 @@ L__mod_inv_avx2__uv_v:
vpsubd %ymm1, %ymm3, %ymm3
sbbq %r9, %r13
vptest %ymm12, %ymm3
jz L__mod_inv_avx2__vsubu_done_neg
jz L_fe_invert_nct_avx2_vsubu_done_neg
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L__mod_inv_avx2__vsubu_done_neg:
L__mod_inv_avx2__vsubu_shr1:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
L_fe_invert_nct_avx2_vsubu_done_neg:
L_fe_invert_nct_avx2_vsubu_shr1:
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
vptest %ymm8, %ymm2
jz L__mod_inv_avx2__vsubu_sub_shr1
jz L_fe_invert_nct_avx2_vsubu_sub_shr1
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L__mod_inv_avx2__vsubu_sub_shr1:
L_fe_invert_nct_avx2_vsubu_sub_shr1:
vpand %ymm9, %ymm2, %ymm4
vpand %ymm10, %ymm3, %ymm5
vpermd %ymm4, %ymm11, %ymm4
@@ -21655,14 +21690,14 @@ L__mod_inv_avx2__vsubu_sub_shr1:
vpaddd %ymm5, %ymm2, %ymm2
vpaddd %ymm4, %ymm3, %ymm3
testb $0x01, %r10b
jz L__mod_inv_avx2__vsubu_shr1
jz L_fe_invert_nct_avx2_vsubu_shr1
cmpq $0x01, %r10
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
movq %r11, %rdx
orq %r12, %rdx
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
orq %r13, %rdx
jne L__mod_inv_avx2__uv_start
jne L_fe_invert_nct_avx2_uv_start
vpextrd $0x00, %xmm2, %eax
vpextrd $0x01, %xmm2, %r8d
vpextrd $2, %xmm2, %r10d
@@ -21675,7 +21710,7 @@ L__mod_inv_avx2__vsubu_sub_shr1:
vextracti128 $0x01, %ymm3, %xmm3
vpextrd $0x00, %xmm2, %r14d
vpextrd $0x00, %xmm3, %r15d
L__mod_inv_avx2__store_done:
L_fe_invert_nct_avx2_store_done:
movl %eax, %edx
andl $0x3ffffff, %eax
sarl $26, %edx
@@ -21732,7 +21767,7 @@ L__mod_inv_avx2__store_done:
adcq %r13, %r12
movslq %r14d, %r14
adcq %r15, %r14
jge L__mod_inv_avx2__3_no_add_prime
jge L_fe_invert_nct_avx2_uv_start_no_add_prime
movq $0xfffffffffffed, %rcx
movq $0xfffffffffffff, %r9
movq $0xfffffffffffff, %r11
@@ -21760,7 +21795,7 @@ L__mod_inv_avx2__store_done:
andq %rdx, %r12
sarq $52, %r13
addq %r13, %r14
L__mod_inv_avx2__3_no_add_prime:
L_fe_invert_nct_avx2_uv_start_no_add_prime:
movq %r8, %rcx
movq %r10, %r9
movq %r12, %r11
+4 -4
View File
@@ -672,8 +672,8 @@ _poly1305_setkey_avx2:
.p2align 5
#endif /* __APPLE__ */
L_poly1305_avx2_blocks_mask:
.quad 0x3ffffff, 0x3ffffff
.quad 0x3ffffff, 0x3ffffff
.quad 0x0000000003ffffff,0x0000000003ffffff
.quad 0x0000000003ffffff,0x0000000003ffffff
#ifndef __APPLE__
.data
#else
@@ -685,8 +685,8 @@ L_poly1305_avx2_blocks_mask:
.p2align 5
#endif /* __APPLE__ */
L_poly1305_avx2_blocks_hibit:
.quad 0x1000000, 0x1000000
.quad 0x1000000, 0x1000000
.quad 0x0000000001000000,0x0000000001000000
.quad 0x0000000001000000,0x0000000001000000
#ifndef __APPLE__
.text
.globl poly1305_blocks_avx2
+23 -20
View File
@@ -18,6 +18,7 @@
; * along with this program; if not, write to the Free Software
; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
; */
IF @Version LT 1200
; AVX2 instructions not recognized by old versions of MASM
IFNDEF NO_AVX2_SUPPORT
@@ -41,7 +42,7 @@ _WIN64 = 1
ENDIF
IFDEF HAVE_INTEL_AVX1
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
poly1305_setkey_avx PROC
push r12
push r13
@@ -93,8 +94,8 @@ poly1305_setkey_avx PROC
pop r12
ret
poly1305_setkey_avx ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
poly1305_block_avx PROC
push r15
push rbx
@@ -166,8 +167,8 @@ poly1305_block_avx PROC
pop r15
ret
poly1305_block_avx ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
poly1305_blocks_avx PROC
push rdi
push rsi
@@ -249,8 +250,8 @@ L_poly1305_avx_blocks_start:
pop rdi
ret
poly1305_blocks_avx ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
poly1305_final_avx PROC
push rdi
push rbx
@@ -318,10 +319,10 @@ L_poly1305_avx_final_no_more:
pop rdi
ret
poly1305_final_avx ENDP
_text ENDS
_TEXT ENDS
ENDIF
IFDEF HAVE_INTEL_AVX2
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
poly1305_calc_powers_avx2 PROC
push r12
push r13
@@ -581,8 +582,8 @@ poly1305_calc_powers_avx2 PROC
pop r12
ret
poly1305_calc_powers_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
poly1305_setkey_avx2 PROC
call poly1305_setkey_avx
vpxor ymm0, ymm0, ymm0
@@ -595,20 +596,22 @@ poly1305_setkey_avx2 PROC
mov WORD PTR [rcx+616], 0
ret
poly1305_setkey_avx2 ENDP
_text ENDS
_TEXT ENDS
_DATA SEGMENT
ALIGN 16
L_poly1305_avx2_blocks_mask QWORD 67108863, 67108863,
67108863, 67108863
L_poly1305_avx2_blocks_mask QWORD \
0000000003ffffffh, 0000000003ffffffh,
0000000003ffffffh, 0000000003ffffffh
ptr_L_poly1305_avx2_blocks_mask QWORD L_poly1305_avx2_blocks_mask
_DATA ENDS
_DATA SEGMENT
ALIGN 16
L_poly1305_avx2_blocks_hibit QWORD 16777216, 16777216,
16777216, 16777216
L_poly1305_avx2_blocks_hibit QWORD \
0000000001000000h, 0000000001000000h,
0000000001000000h, 0000000001000000h
ptr_L_poly1305_avx2_blocks_hibit QWORD L_poly1305_avx2_blocks_hibit
_DATA ENDS
_text SEGMENT READONLY PARA
_TEXT SEGMENT READONLY PARA
poly1305_blocks_avx2 PROC
push r12
push rdi
@@ -990,8 +993,8 @@ L_poly1305_avx2_blocks_complete:
pop r12
ret
poly1305_blocks_avx2 ENDP
_text ENDS
_text SEGMENT READONLY PARA
_TEXT ENDS
_TEXT SEGMENT READONLY PARA
poly1305_final_avx2 PROC
push rdi
push rsi
@@ -1055,6 +1058,6 @@ L_poly1305_avx2_final_cmp_copy:
pop rdi
ret
poly1305_final_avx2 ENDP
_text ENDS
_TEXT ENDS
ENDIF
END
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+39 -33
View File
@@ -51,19 +51,22 @@ wc_chacha_setiv:
pop {r4, pc}
.size wc_chacha_setiv,.-wc_chacha_setiv
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_chacha_arm32_constants, %object
.size L_chacha_arm32_constants, 32
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha_arm32_constants:
.word 0x61707865
.word 0x3120646e
.word 0x79622d36
.word 0x6b206574
.word 0x61707865
.word 0x3320646e
.word 0x79622d32
.word 0x6b206574
.long 0x61707865,0x3120646e,0x79622d36,0x6b206574
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574
.text
.align 4
.globl wc_chacha_setkey
@@ -969,8 +972,8 @@ L_chacha_crypt_bytes_arm32_round_start_128:
vext.8 q6, q6, q6, #8
bne L_chacha_crypt_bytes_arm32_round_start_128
# Add back state, XOR in message and store (load next block)
vld1.8 {q8, q9}, [r2]!
vld1.8 {q10, q11}, [r2]!
vld1.8 {q8-q9}, [r2]!
vld1.8 {q10-q11}, [r2]!
vadd.i32 q0, q0, q12
vadd.i32 q1, q1, q13
vadd.i32 q2, q2, q14
@@ -979,10 +982,10 @@ L_chacha_crypt_bytes_arm32_round_start_128:
veor q1, q1, q9
veor q2, q2, q10
veor q3, q3, q11
vld1.8 {q8, q9}, [r2]!
vld1.8 {q10, q11}, [r2]!
vst1.8 {q0, q1}, [r1]!
vst1.8 {q2, q3}, [r1]!
vld1.8 {q8-q9}, [r2]!
vld1.8 {q10-q11}, [r2]!
vst1.8 {q0-q1}, [r1]!
vst1.8 {q2-q3}, [r1]!
veor q0, q0, q0
mov r12, #1
vmov.i32 d0[0], r12
@@ -995,8 +998,8 @@ L_chacha_crypt_bytes_arm32_round_start_128:
veor q5, q5, q9
veor q6, q6, q10
veor q7, q7, q11
vst1.8 {q4, q5}, [r1]!
vst1.8 {q6, q7}, [r1]!
vst1.8 {q4-q5}, [r1]!
vst1.8 {q6-q7}, [r1]!
vadd.i32 q15, q15, q0
sub r3, r3, #0x80
# Done 128-byte block
@@ -1075,14 +1078,14 @@ L_chacha_crypt_bytes_arm32_round_64:
vadd.i32 q15, q15, q9
blt L_chacha_crypt_bytes_arm32_lt_64
# Encipher 64 bytes
vld1.8 {q4, q5}, [r2]!
vld1.8 {q6, q7}, [r2]!
vld1.8 {q4-q5}, [r2]!
vld1.8 {q6-q7}, [r2]!
veor q4, q4, q0
veor q5, q5, q1
veor q6, q6, q2
veor q7, q7, q3
vst1.8 {q4, q5}, [r1]!
vst1.8 {q6, q7}, [r1]!
vst1.8 {q4-q5}, [r1]!
vst1.8 {q6-q7}, [r1]!
# Check for more bytes to be enciphered
subs r3, r3, #0x40
bne L_chacha_crypt_bytes_arm32_loop_64
@@ -1097,10 +1100,10 @@ L_chacha_crypt_bytes_arm32_lt_64:
# Encipher 32 bytes
cmp r3, #32
blt L_chacha_crypt_bytes_arm32_lt_32
vld1.8 {q4, q5}, [r2]!
vld1.8 {q4-q5}, [r2]!
veor q4, q4, q0
veor q5, q5, q1
vst1.8 {q4, q5}, [r1]!
vst1.8 {q4-q5}, [r1]!
subs r3, r3, #32
vmov q0, q2
vmov q1, q3
@@ -1153,19 +1156,22 @@ L_chacha_crypt_bytes_arm32_done_all:
vpop {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.size wc_chacha_crypt_bytes,.-wc_chacha_crypt_bytes
#ifndef __APPLE__
.text
.type L_chacha_setkey_arm32_constant, %object
.size L_chacha_setkey_arm32_constant, 32
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha_setkey_arm32_constant:
.word 0x61707865
.word 0x3120646e
.word 0x79622d36
.word 0x6b206574
.word 0x61707865
.word 0x3320646e
.word 0x79622d32
.word 0x6b206574
.long 0x61707865,0x3120646e,0x79622d36,0x6b206574
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574
.text
.align 4
.globl wc_chacha_setkey
@@ -1180,7 +1186,7 @@ wc_chacha_setkey:
#ifdef BIG_ENDIAN_ORDER
vrev32.16 q1, q1
#endif /* BIG_ENDIAN_ORDER */
vstm r0!, {q0, q1}
vstm r0!, {q0-q1}
beq L_chacha_setkey_arm32_done
vld1.8 {q1}, [r1]
#ifdef BIG_ENDIAN_ORDER
+70 -72
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -58,12 +56,12 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x_p, const byte* iv_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x, const byte* iv,
word32 counter)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register word32* x asm ("r0") = (word32*)x_p;
register const byte* iv asm ("r1") = (const byte*)iv_p;
register word32 counter asm ("r2") = (word32)counter_p;
register word32* x __asm__ ("r0") = (word32*)x_p;
register const byte* iv __asm__ ("r1") = (const byte*)iv_p;
register word32 counter __asm__ ("r2") = (word32)counter_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -90,7 +88,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x, const byte* iv,
}
#ifdef WOLFSSL_ARMASM_NO_NEON
static const word32 L_chacha_arm32_constants[] = {
XALIGNED(8) static const word32 L_chacha_arm32_constants[] = {
0x61707865, 0x3120646e, 0x79622d36, 0x6b206574,
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
};
@@ -101,13 +99,13 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x_p, const byte* key_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
word32 keySz)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register word32* x asm ("r0") = (word32*)x_p;
register const byte* key asm ("r1") = (const byte*)key_p;
register word32 keySz asm ("r2") = (word32)keySz_p;
register word32* L_chacha_arm32_constants_c asm ("r3") =
register word32* x __asm__ ("r0") = (word32*)x_p;
register const byte* key __asm__ ("r1") = (const byte*)key_p;
register word32 keySz __asm__ ("r2") = (word32)keySz_p;
register word32* L_chacha_arm32_constants_c __asm__ ("r3") =
(word32*)&L_chacha_arm32_constants;
#else
register word32* L_chacha_arm32_constants_c =
@@ -142,7 +140,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
"ldr r12, [%[key], #8]\n\t"
"ldr lr, [%[key], #12]\n\t"
"\n"
"L_chacha_arm32_setkey_same_key_bytes_%=: \n\t"
"L_chacha_arm32_setkey_same_key_bytes_%=:\n\t"
"stm %[x], {r4, r5, r12, lr}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [x] "+r" (x), [key] "+r" (key), [keySz] "+r" (keySz),
@@ -163,13 +161,13 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
const byte* m, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ChaCha* ctx asm ("r0") = (ChaCha*)ctx_p;
register byte* c asm ("r1") = (byte*)c_p;
register const byte* m asm ("r2") = (const byte*)m_p;
register word32 len asm ("r3") = (word32)len_p;
register ChaCha* ctx __asm__ ("r0") = (ChaCha*)ctx_p;
register byte* c __asm__ ("r1") = (byte*)c_p;
register const byte* m __asm__ ("r2") = (const byte*)m_p;
register word32 len __asm__ ("r3") = (word32)len_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -188,7 +186,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"strd %[m], %[len], [sp, #40]\n\t"
#endif
"\n"
"L_chacha_arm32_crypt_block_%=: \n\t"
"L_chacha_arm32_crypt_block_%=:\n\t"
/* Put x[12]..x[15] onto stack. */
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"ldr r4, [lr, #48]\n\t"
@@ -220,7 +218,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"mov lr, #10\n\t"
"str lr, [sp, #48]\n\t"
"\n"
"L_chacha_arm32_crypt_loop_%=: \n\t"
"L_chacha_arm32_crypt_loop_%=:\n\t"
/* 0, 4, 8, 12 */
/* 1, 5, 9, 13 */
"ldr lr, [sp, #20]\n\t"
@@ -449,7 +447,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"bne L_chacha_arm32_crypt_block_%=\n\t"
"b L_chacha_arm32_crypt_done_%=\n\t"
"\n"
"L_chacha_arm32_crypt_lt_block_%=: \n\t"
"L_chacha_arm32_crypt_lt_block_%=:\n\t"
/* Store in over field of ChaCha. */
"ldr lr, [sp, #32]\n\t"
"add r12, lr, #0x44\n\t"
@@ -467,7 +465,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"str r12, [lr, #64]\n\t"
"add lr, lr, #0x44\n\t"
"\n"
"L_chacha_arm32_crypt_16byte_loop_%=: \n\t"
"L_chacha_arm32_crypt_16byte_loop_%=:\n\t"
"cmp %[len], #16\n\t"
"blt L_chacha_arm32_crypt_word_loop_%=\n\t"
/* 16 bytes of state XORed into message. */
@@ -490,7 +488,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"add %[c], %[c], #16\n\t"
"b L_chacha_arm32_crypt_16byte_loop_%=\n\t"
"\n"
"L_chacha_arm32_crypt_word_loop_%=: \n\t"
"L_chacha_arm32_crypt_word_loop_%=:\n\t"
"cmp %[len], #4\n\t"
"blt L_chacha_arm32_crypt_byte_start_%=\n\t"
/* 4 bytes of state XORed into message. */
@@ -505,10 +503,10 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"add %[c], %[c], #4\n\t"
"b L_chacha_arm32_crypt_word_loop_%=\n\t"
"\n"
"L_chacha_arm32_crypt_byte_start_%=: \n\t"
"L_chacha_arm32_crypt_byte_start_%=:\n\t"
"ldr r4, [lr]\n\t"
"\n"
"L_chacha_arm32_crypt_byte_loop_%=: \n\t"
"L_chacha_arm32_crypt_byte_loop_%=:\n\t"
"ldrb r8, [%[m]]\n\t"
"eor r8, r8, r4\n\t"
"subs %[len], %[len], #1\n\t"
@@ -519,7 +517,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"add %[c], %[c], #1\n\t"
"b L_chacha_arm32_crypt_byte_loop_%=\n\t"
"\n"
"L_chacha_arm32_crypt_done_%=: \n\t"
"L_chacha_arm32_crypt_done_%=:\n\t"
"add sp, sp, #52\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [c] "+r" (c), [m] "+r" (m), [len] "+r" (len)
@@ -539,18 +537,18 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over_p, byte* output_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
const byte* input, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* over asm ("r0") = (byte*)over_p;
register byte* output asm ("r1") = (byte*)output_p;
register const byte* input asm ("r2") = (const byte*)input_p;
register word32 len asm ("r3") = (word32)len_p;
register byte* over __asm__ ("r0") = (byte*)over_p;
register byte* output __asm__ ("r1") = (byte*)output_p;
register const byte* input __asm__ ("r2") = (const byte*)input_p;
register word32 len __asm__ ("r3") = (word32)len_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
"\n"
"L_chacha_arm32_over_16byte_loop_%=: \n\t"
"L_chacha_arm32_over_16byte_loop_%=:\n\t"
"cmp %[len], #16\n\t"
"blt L_chacha_arm32_over_word_loop_%=\n\t"
/* 16 bytes of state XORed into message. */
@@ -577,7 +575,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"add %[output], %[output], #16\n\t"
"b L_chacha_arm32_over_16byte_loop_%=\n\t"
"\n"
"L_chacha_arm32_over_word_loop_%=: \n\t"
"L_chacha_arm32_over_word_loop_%=:\n\t"
"cmp %[len], #4\n\t"
"blt L_chacha_arm32_over_byte_loop_%=\n\t"
/* 4 bytes of state XORed into message. */
@@ -592,7 +590,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"add %[output], %[output], #4\n\t"
"b L_chacha_arm32_over_word_loop_%=\n\t"
"\n"
"L_chacha_arm32_over_byte_loop_%=: \n\t"
"L_chacha_arm32_over_byte_loop_%=:\n\t"
/* 4 bytes of state XORed into message. */
"ldrb r12, [%[over]]\n\t"
"ldrb r6, [%[input]]\n\t"
@@ -605,7 +603,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"add %[output], %[output], #1\n\t"
"b L_chacha_arm32_over_byte_loop_%=\n\t"
"\n"
"L_chacha_arm32_over_done_%=: \n\t"
"L_chacha_arm32_over_done_%=:\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [over] "+r" (over), [output] "+r" (output), [input] "+r" (input),
[len] "+r" (len)
@@ -627,13 +625,13 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
const byte* m, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ChaCha* ctx asm ("r0") = (ChaCha*)ctx_p;
register byte* c asm ("r1") = (byte*)c_p;
register const byte* m asm ("r2") = (const byte*)m_p;
register word32 len asm ("r3") = (word32)len_p;
register ChaCha* ctx __asm__ ("r0") = (ChaCha*)ctx_p;
register byte* c __asm__ ("r1") = (byte*)c_p;
register const byte* m __asm__ ("r2") = (const byte*)m_p;
register word32 len __asm__ ("r3") = (word32)len_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -644,7 +642,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"blt L_chacha_crypt_bytes_arm32_lt_256_%=\n\t"
"str %[ctx], [sp, #28]\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_start_256_%=: \n\t"
"L_chacha_crypt_bytes_arm32_start_256_%=:\n\t"
"str %[m], [sp, #32]\n\t"
"str %[c], [sp, #36]\n\t"
"str %[len], [sp, #40]\n\t"
@@ -676,7 +674,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
/* Set number of odd+even rounds to perform */
"mov lr, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_round_start_256_%=: \n\t"
"L_chacha_crypt_bytes_arm32_round_start_256_%=:\n\t"
"subs lr, lr, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -986,7 +984,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"cmp %[len], #0x100\n\t"
"bge L_chacha_crypt_bytes_arm32_start_256_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_256_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_256_%=:\n\t"
"cmp %[len], #0x80\n\t"
"blt L_chacha_crypt_bytes_arm32_lt_128_%=\n\t"
/* Move state into vector registers */
@@ -1006,7 +1004,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
/* Set number of odd+even rounds to perform */
"mov lr, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_round_start_128_%=: \n\t"
"L_chacha_crypt_bytes_arm32_round_start_128_%=:\n\t"
"subs lr, lr, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -1124,7 +1122,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"sub %[len], %[len], #0x80\n\t"
/* Done 128-byte block */
"\n"
"L_chacha_crypt_bytes_arm32_lt_128_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_128_%=:\n\t"
"cmp %[len], #0\n\t"
"beq L_chacha_crypt_bytes_arm32_done_all_%=\n\t"
"mov r12, #1\n\t"
@@ -1133,7 +1131,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"vmov d18[0], r12\n\t"
"mov r12, #0x40\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_loop_64_%=: \n\t"
"L_chacha_crypt_bytes_arm32_loop_64_%=:\n\t"
/* Move state into vector registers */
"vmov q0, q12\n\t"
"vmov q1, q13\n\t"
@@ -1142,7 +1140,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
/* Set number of odd+even rounds to perform */
"mov lr, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_round_64_%=: \n\t"
"L_chacha_crypt_bytes_arm32_round_64_%=:\n\t"
"subs lr, lr, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -1214,7 +1212,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"bne L_chacha_crypt_bytes_arm32_loop_64_%=\n\t"
"b L_chacha_crypt_bytes_arm32_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_64_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_64_%=:\n\t"
/* Calculate bytes left in block not used */
"sub r12, r12, %[len]\n\t"
/* Store encipher block in over for further operations and left */
@@ -1233,7 +1231,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"vmov q1, q3\n\t"
"beq L_chacha_crypt_bytes_arm32_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_32_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_32_%=:\n\t"
"cmp %[len], #16\n\t"
"blt L_chacha_crypt_bytes_arm32_lt_16_%=\n\t"
/* Encipher 16 bytes */
@@ -1244,7 +1242,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"vmov q0, q1\n\t"
"beq L_chacha_crypt_bytes_arm32_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_16_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_16_%=:\n\t"
"cmp %[len], #8\n\t"
"blt L_chacha_crypt_bytes_arm32_lt_8_%=\n\t"
/* Encipher 8 bytes */
@@ -1255,7 +1253,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"vmov d0, d1\n\t"
"beq L_chacha_crypt_bytes_arm32_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_8_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_8_%=:\n\t"
"cmp %[len], #4\n\t"
"blt L_chacha_crypt_bytes_arm32_lt_4_%=\n\t"
/* Encipher 8 bytes */
@@ -1267,10 +1265,10 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"vshr.u64 d0, d0, #32\n\t"
"beq L_chacha_crypt_bytes_arm32_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_lt_4_%=: \n\t"
"L_chacha_crypt_bytes_arm32_lt_4_%=:\n\t"
"vmov r12, s0\n\t"
"\n"
"L_chacha_crypt_bytes_arm32loop_lt_4_%=: \n\t"
"L_chacha_crypt_bytes_arm32loop_lt_4_%=:\n\t"
/* Encipher 1 byte at a time */
"ldrb r4, [%[m]], #1\n\t"
"eor r4, r4, r12\n\t"
@@ -1279,9 +1277,9 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"lsr r12, r12, #8\n\t"
"bgt L_chacha_crypt_bytes_arm32loop_lt_4_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_done_%=: \n\t"
"L_chacha_crypt_bytes_arm32_done_%=:\n\t"
"\n"
"L_chacha_crypt_bytes_arm32_done_all_%=: \n\t"
"L_chacha_crypt_bytes_arm32_done_all_%=:\n\t"
"vstm.32 %[ctx], {q12-q15}\n\t"
"add sp, sp, #44\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -1297,7 +1295,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
);
}
static const word32 L_chacha_setkey_arm32_constant[] = {
XALIGNED(8) static const word32 L_chacha_setkey_arm32_constant[] = {
0x61707865, 0x3120646e, 0x79622d36, 0x6b206574,
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
};
@@ -1308,13 +1306,13 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x_p, const byte* key_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
word32 keySz)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register word32* x asm ("r0") = (word32*)x_p;
register const byte* key asm ("r1") = (const byte*)key_p;
register word32 keySz asm ("r2") = (word32)keySz_p;
register word32* L_chacha_setkey_arm32_constant_c asm ("r3") =
register word32* x __asm__ ("r0") = (word32*)x_p;
register const byte* key __asm__ ("r1") = (const byte*)key_p;
register word32 keySz __asm__ ("r2") = (word32)keySz_p;
register word32* L_chacha_setkey_arm32_constant_c __asm__ ("r3") =
(word32*)&L_chacha_setkey_arm32_constant;
#else
register word32* L_chacha_setkey_arm32_constant_c =
@@ -1338,7 +1336,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
"vrev32.16 q1, q1\n\t"
#endif /* BIG_ENDIAN_ORDER */
"\n"
"L_chacha_setkey_arm32_done_%=: \n\t"
"L_chacha_setkey_arm32_done_%=:\n\t"
"vstm %[x], {q1}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [x] "+r" (x), [key] "+r" (key), [keySz] "+r" (keySz),
@@ -1359,14 +1357,14 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over_p, byte* output_p,
#else
WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
const byte* input, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* over asm ("r0") = (byte*)over_p;
register byte* output asm ("r1") = (byte*)output_p;
register const byte* input asm ("r2") = (const byte*)input_p;
register word32 len asm ("r3") = (word32)len_p;
register word32* L_chacha_setkey_arm32_constant_c asm ("r12") =
register byte* over __asm__ ("r0") = (byte*)over_p;
register byte* output __asm__ ("r1") = (byte*)output_p;
register const byte* input __asm__ ("r2") = (const byte*)input_p;
register word32 len __asm__ ("r3") = (word32)len_p;
register word32* L_chacha_setkey_arm32_constant_c __asm__ ("r12") =
(word32*)&L_chacha_setkey_arm32_constant;
#else
register word32* L_chacha_setkey_arm32_constant_c =
@@ -1376,7 +1374,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
__asm__ __volatile__ (
"push {%[L_chacha_setkey_arm32_constant]}\n\t"
"\n"
"L_chacha_use_over_arm32_16byte_loop_%=: \n\t"
"L_chacha_use_over_arm32_16byte_loop_%=:\n\t"
"cmp %[len], #16\n\t"
"blt L_chacha_use_over_arm32_word_loop_%=\n\t"
/* 16 bytes of state XORed into message. */
@@ -1388,7 +1386,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"beq L_chacha_use_over_arm32_done_%=\n\t"
"b L_chacha_use_over_arm32_16byte_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm32_word_loop_%=: \n\t"
"L_chacha_use_over_arm32_word_loop_%=:\n\t"
"cmp %[len], #4\n\t"
"blt L_chacha_use_over_arm32_byte_loop_%=\n\t"
/* 4 bytes of state XORed into message. */
@@ -1400,7 +1398,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"beq L_chacha_use_over_arm32_done_%=\n\t"
"b L_chacha_use_over_arm32_word_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm32_byte_loop_%=: \n\t"
"L_chacha_use_over_arm32_byte_loop_%=:\n\t"
/* 1 bytes of state XORed into message. */
"ldrb r12, [%[over]], #1\n\t"
"ldrb lr, [%[input]], #1\n\t"
@@ -1410,7 +1408,7 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
"beq L_chacha_use_over_arm32_done_%=\n\t"
"b L_chacha_use_over_arm32_byte_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm32_done_%=: \n\t"
"L_chacha_use_over_arm32_done_%=:\n\t"
"pop {%[L_chacha_setkey_arm32_constant]}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [over] "+r" (over), [output] "+r" (output), [input] "+r" (input),
+8 -8
View File
@@ -2737,12 +2737,12 @@ fe_mul_op:
lsl r0, r0, #1
orr r0, r0, r10, lsr #31
mul r11, r0, lr
pop {r0, r1, r2}
pop {r0-r2}
mov lr, #38
umaal r0, r11, r12, lr
umaal r1, r11, r4, lr
umaal r2, r11, r5, lr
pop {r3, r4, r5}
pop {r3-r5}
umaal r3, r11, r6, lr
umaal r4, r11, r7, lr
umaal r5, r11, r8, lr
@@ -3147,18 +3147,18 @@ fe_sq_op:
lsl r0, r0, #1
orr r0, r0, r7, lsr #31
mul lr, r0, r6
pop {r0, r1}
pop {r0-r1}
mov r6, #38
umaal r0, lr, r12, r6
umaal r1, lr, r11, r6
mov r12, r3
mov r11, r4
pop {r2, r3, r4}
pop {r2-r4}
umaal r2, lr, r10, r6
umaal r3, lr, r12, r6
umaal r4, lr, r11, r6
mov r12, r6
pop {r5, r6}
pop {r5-r6}
umaal r5, lr, r8, r12
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
bic r7, r7, #0x80000000
@@ -4563,18 +4563,18 @@ fe_sq2:
lsl r0, r0, #1
orr r0, r0, r7, lsr #31
mul lr, r0, r6
pop {r0, r1}
pop {r0-r1}
mov r6, #38
umaal r0, lr, r12, r6
umaal r1, lr, r11, r6
mov r12, r3
mov r11, r4
pop {r2, r3, r4}
pop {r2-r4}
umaal r2, lr, r10, r6
umaal r3, lr, r12, r6
umaal r4, lr, r11, r6
mov r12, r6
pop {r5, r6}
pop {r5-r6}
umaal r5, lr, r8, r12
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
bic r7, r7, #0x80000000
+152 -153
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -64,7 +62,7 @@
WC_OMIT_FRAME_POINTER void fe_init()
#else
WC_OMIT_FRAME_POINTER void fe_init()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -86,7 +84,7 @@ void fe_add_sub_op(void);
WC_OMIT_FRAME_POINTER void fe_add_sub_op()
#else
WC_OMIT_FRAME_POINTER void fe_add_sub_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -305,7 +303,7 @@ void fe_sub_op(void);
WC_OMIT_FRAME_POINTER void fe_sub_op()
#else
WC_OMIT_FRAME_POINTER void fe_sub_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -357,12 +355,12 @@ WC_OMIT_FRAME_POINTER void fe_sub_op()
WC_OMIT_FRAME_POINTER void fe_sub(fe r_p, const fe a_p, const fe b_p)
#else
WC_OMIT_FRAME_POINTER void fe_sub(fe r, const fe a, const fe b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register const sword32* b asm ("r2") = (const sword32*)b_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
register const sword32* b __asm__ ("r2") = (const sword32*)b_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -384,7 +382,7 @@ void fe_add_op(void);
WC_OMIT_FRAME_POINTER void fe_add_op()
#else
WC_OMIT_FRAME_POINTER void fe_add_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -437,12 +435,12 @@ WC_OMIT_FRAME_POINTER void fe_add_op()
WC_OMIT_FRAME_POINTER void fe_add(fe r_p, const fe a_p, const fe b_p)
#else
WC_OMIT_FRAME_POINTER void fe_add(fe r, const fe a, const fe b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register const sword32* b asm ("r2") = (const sword32*)b_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
register const sword32* b __asm__ ("r2") = (const sword32*)b_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -464,11 +462,12 @@ WC_OMIT_FRAME_POINTER void fe_add(fe r, const fe a, const fe b)
WC_OMIT_FRAME_POINTER void fe_frombytes(fe out_p, const unsigned char* in_p)
#else
WC_OMIT_FRAME_POINTER void fe_frombytes(fe out, const unsigned char* in)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* out asm ("r0") = (sword32*)out_p;
register const unsigned char* in asm ("r1") = (const unsigned char*)in_p;
register sword32* out __asm__ ("r0") = (sword32*)out_p;
register const unsigned char* in __asm__ ("r1") =
(const unsigned char*)in_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -508,11 +507,11 @@ WC_OMIT_FRAME_POINTER void fe_frombytes(fe out, const unsigned char* in)
WC_OMIT_FRAME_POINTER void fe_tobytes(unsigned char* out_p, const fe n_p)
#else
WC_OMIT_FRAME_POINTER void fe_tobytes(unsigned char* out, const fe n)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register unsigned char* out asm ("r0") = (unsigned char*)out_p;
register const sword32* n asm ("r1") = (const sword32*)n_p;
register unsigned char* out __asm__ ("r0") = (unsigned char*)out_p;
register const sword32* n __asm__ ("r1") = (const sword32*)n_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -563,10 +562,10 @@ WC_OMIT_FRAME_POINTER void fe_tobytes(unsigned char* out, const fe n)
WC_OMIT_FRAME_POINTER void fe_1(fe n_p)
#else
WC_OMIT_FRAME_POINTER void fe_1(fe n)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* n asm ("r0") = (sword32*)n_p;
register sword32* n __asm__ ("r0") = (sword32*)n_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -595,10 +594,10 @@ WC_OMIT_FRAME_POINTER void fe_1(fe n)
WC_OMIT_FRAME_POINTER void fe_0(fe n_p)
#else
WC_OMIT_FRAME_POINTER void fe_0(fe n)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* n asm ("r0") = (sword32*)n_p;
register sword32* n __asm__ ("r0") = (sword32*)n_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -627,11 +626,11 @@ WC_OMIT_FRAME_POINTER void fe_0(fe n)
WC_OMIT_FRAME_POINTER void fe_copy(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_copy(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -697,11 +696,11 @@ WC_OMIT_FRAME_POINTER void fe_copy(fe r, const fe a)
WC_OMIT_FRAME_POINTER void fe_neg(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_neg(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -735,10 +734,10 @@ WC_OMIT_FRAME_POINTER void fe_neg(fe r, const fe a)
WC_OMIT_FRAME_POINTER int fe_isnonzero(const fe a_p)
#else
WC_OMIT_FRAME_POINTER int fe_isnonzero(const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register const sword32* a asm ("r0") = (const sword32*)a_p;
register const sword32* a __asm__ ("r0") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -790,10 +789,10 @@ WC_OMIT_FRAME_POINTER int fe_isnonzero(const fe a)
WC_OMIT_FRAME_POINTER int fe_isnegative(const fe a_p)
#else
WC_OMIT_FRAME_POINTER int fe_isnegative(const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register const sword32* a asm ("r0") = (const sword32*)a_p;
register const sword32* a __asm__ ("r0") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -831,12 +830,12 @@ WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r_p, const fe* base_p,
signed char b_p)
#else
WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r, const fe* base, signed char b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register fe* r asm ("r0") = (fe*)r_p;
register const fe* base asm ("r1") = (const fe*)base_p;
register signed char b asm ("r2") = (signed char)b_p;
register fe* r __asm__ ("r0") = (fe*)r_p;
register const fe* base __asm__ ("r1") = (const fe*)base_p;
register signed char b __asm__ ("r2") = (signed char)b_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -2377,12 +2376,12 @@ WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r_p, const fe* base_p,
signed char b_p)
#else
WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r, const fe* base, signed char b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register fe* r asm ("r0") = (fe*)r_p;
register const fe* base asm ("r1") = (const fe*)base_p;
register signed char b asm ("r2") = (signed char)b_p;
register fe* r __asm__ ("r0") = (fe*)r_p;
register const fe* base __asm__ ("r1") = (const fe*)base_p;
register signed char b __asm__ ("r2") = (signed char)b_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -2514,7 +2513,7 @@ void fe_mul_op(void);
WC_OMIT_FRAME_POINTER void fe_mul_op()
#else
WC_OMIT_FRAME_POINTER void fe_mul_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -2909,7 +2908,7 @@ void fe_mul_op(void);
WC_OMIT_FRAME_POINTER void fe_mul_op()
#else
WC_OMIT_FRAME_POINTER void fe_mul_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -3062,12 +3061,12 @@ WC_OMIT_FRAME_POINTER void fe_mul_op()
WC_OMIT_FRAME_POINTER void fe_mul(fe r_p, const fe a_p, const fe b_p)
#else
WC_OMIT_FRAME_POINTER void fe_mul(fe r, const fe a, const fe b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register const sword32* b asm ("r2") = (const sword32*)b_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
register const sword32* b __asm__ ("r2") = (const sword32*)b_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3090,7 +3089,7 @@ void fe_sq_op(void);
WC_OMIT_FRAME_POINTER void fe_sq_op()
#else
WC_OMIT_FRAME_POINTER void fe_sq_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -3378,7 +3377,7 @@ void fe_sq_op(void);
WC_OMIT_FRAME_POINTER void fe_sq_op()
#else
WC_OMIT_FRAME_POINTER void fe_sq_op()
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -3517,11 +3516,11 @@ WC_OMIT_FRAME_POINTER void fe_sq_op()
WC_OMIT_FRAME_POINTER void fe_sq(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_sq(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3544,11 +3543,11 @@ WC_OMIT_FRAME_POINTER void fe_sq(fe r, const fe a)
WC_OMIT_FRAME_POINTER void fe_mul121666(fe r_p, fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_mul121666(fe r, fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register sword32* a asm ("r1") = (sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register sword32* a __asm__ ("r1") = (sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3628,11 +3627,11 @@ WC_OMIT_FRAME_POINTER void fe_mul121666(fe r, fe a)
WC_OMIT_FRAME_POINTER void fe_mul121666(fe r_p, fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_mul121666(fe r, fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register sword32* a asm ("r1") = (sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register sword32* a __asm__ ("r1") = (sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3701,12 +3700,12 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r_p, const byte* n_p,
const byte* a_p)
#else
WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* r asm ("r0") = (byte*)r_p;
register const byte* n asm ("r1") = (const byte*)n_p;
register const byte* a asm ("r2") = (const byte*)a_p;
register byte* r __asm__ ("r0") = (byte*)r_p;
register const byte* n __asm__ ("r1") = (const byte*)n_p;
register const byte* a __asm__ ("r2") = (const byte*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3739,9 +3738,9 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"mov %[a], #28\n\t"
"str %[a], [sp, #176]\n\t"
"\n"
"L_curve25519_words_%=: \n\t"
"L_curve25519_words_%=:\n\t"
"\n"
"L_curve25519_bits_%=: \n\t"
"L_curve25519_bits_%=:\n\t"
"ldr %[n], [sp, #164]\n\t"
"ldr %[a], [%[n], r2]\n\t"
"ldr %[n], [sp, #180]\n\t"
@@ -3957,7 +3956,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #4\n\t"
"\n"
"L_curve25519_inv_1_%=: \n\t"
"L_curve25519_inv_1_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -3974,7 +3973,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #9\n\t"
"\n"
"L_curve25519_inv_2_%=: \n\t"
"L_curve25519_inv_2_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -3991,7 +3990,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #19\n\t"
"\n"
"L_curve25519_inv_3_%=: \n\t"
"L_curve25519_inv_3_%=:\n\t"
"add r1, sp, #0x80\n\t"
"add r0, sp, #0x80\n\t"
"push {r12}\n\t"
@@ -4005,7 +4004,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #10\n\t"
"\n"
"L_curve25519_inv_4_%=: \n\t"
"L_curve25519_inv_4_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4022,7 +4021,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #49\n\t"
"\n"
"L_curve25519_inv_5_%=: \n\t"
"L_curve25519_inv_5_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4039,7 +4038,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #0x63\n\t"
"\n"
"L_curve25519_inv_6_%=: \n\t"
"L_curve25519_inv_6_%=:\n\t"
"add r1, sp, #0x80\n\t"
"add r0, sp, #0x80\n\t"
"push {r12}\n\t"
@@ -4053,7 +4052,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #50\n\t"
"\n"
"L_curve25519_inv_7_%=: \n\t"
"L_curve25519_inv_7_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4067,7 +4066,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #5\n\t"
"\n"
"L_curve25519_inv_8_%=: \n\t"
"L_curve25519_inv_8_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4104,12 +4103,12 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r_p, const byte* n_p,
const byte* a_p)
#else
WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* r asm ("r0") = (byte*)r_p;
register const byte* n asm ("r1") = (const byte*)n_p;
register const byte* a asm ("r2") = (const byte*)a_p;
register byte* r __asm__ ("r0") = (byte*)r_p;
register const byte* n __asm__ ("r1") = (const byte*)n_p;
register const byte* a __asm__ ("r2") = (const byte*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4144,7 +4143,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"stm r3, {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
"mov %[a], #0xfe\n\t"
"\n"
"L_curve25519_bits_%=: \n\t"
"L_curve25519_bits_%=:\n\t"
"str %[a], [sp, #168]\n\t"
"ldr %[n], [sp, #160]\n\t"
"and r4, %[a], #31\n\t"
@@ -4264,7 +4263,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #4\n\t"
"\n"
"L_curve25519_inv_1_%=: \n\t"
"L_curve25519_inv_1_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4281,7 +4280,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #9\n\t"
"\n"
"L_curve25519_inv_2_%=: \n\t"
"L_curve25519_inv_2_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4298,7 +4297,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #19\n\t"
"\n"
"L_curve25519_inv_3_%=: \n\t"
"L_curve25519_inv_3_%=:\n\t"
"add r1, sp, #0x80\n\t"
"add r0, sp, #0x80\n\t"
"push {r12}\n\t"
@@ -4312,7 +4311,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #10\n\t"
"\n"
"L_curve25519_inv_4_%=: \n\t"
"L_curve25519_inv_4_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4329,7 +4328,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #49\n\t"
"\n"
"L_curve25519_inv_5_%=: \n\t"
"L_curve25519_inv_5_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4346,7 +4345,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_sq_op\n\t"
"mov r12, #0x63\n\t"
"\n"
"L_curve25519_inv_6_%=: \n\t"
"L_curve25519_inv_6_%=:\n\t"
"add r1, sp, #0x80\n\t"
"add r0, sp, #0x80\n\t"
"push {r12}\n\t"
@@ -4360,7 +4359,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #50\n\t"
"\n"
"L_curve25519_inv_7_%=: \n\t"
"L_curve25519_inv_7_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4374,7 +4373,7 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"bl fe_mul_op\n\t"
"mov r12, #5\n\t"
"\n"
"L_curve25519_inv_8_%=: \n\t"
"L_curve25519_inv_8_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4431,11 +4430,11 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
WC_OMIT_FRAME_POINTER void fe_invert(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4472,7 +4471,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #4\n\t"
"\n"
"L_fe_invert1_%=: \n\t"
"L_fe_invert1_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4489,7 +4488,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #9\n\t"
"\n"
"L_fe_invert2_%=: \n\t"
"L_fe_invert2_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4506,7 +4505,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #19\n\t"
"\n"
"L_fe_invert3_%=: \n\t"
"L_fe_invert3_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4520,7 +4519,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #10\n\t"
"\n"
"L_fe_invert4_%=: \n\t"
"L_fe_invert4_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4537,7 +4536,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #49\n\t"
"\n"
"L_fe_invert5_%=: \n\t"
"L_fe_invert5_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4554,7 +4553,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #0x63\n\t"
"\n"
"L_fe_invert6_%=: \n\t"
"L_fe_invert6_%=:\n\t"
"add r1, sp, #0x60\n\t"
"add r0, sp, #0x60\n\t"
"push {r12}\n\t"
@@ -4568,7 +4567,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #50\n\t"
"\n"
"L_fe_invert7_%=: \n\t"
"L_fe_invert7_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -4582,7 +4581,7 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #5\n\t"
"\n"
"L_fe_invert8_%=: \n\t"
"L_fe_invert8_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -4614,11 +4613,11 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
WC_OMIT_FRAME_POINTER void fe_sq2(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4945,11 +4944,11 @@ WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
WC_OMIT_FRAME_POINTER void fe_sq2(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5135,11 +5134,11 @@ WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
WC_OMIT_FRAME_POINTER void fe_pow22523(fe r_p, const fe a_p)
#else
WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword32* r asm ("r0") = (sword32*)r_p;
register const sword32* a asm ("r1") = (const sword32*)a_p;
register sword32* r __asm__ ("r0") = (sword32*)r_p;
register const sword32* a __asm__ ("r1") = (const sword32*)a_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5176,7 +5175,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #4\n\t"
"\n"
"L_fe_pow22523_1_%=: \n\t"
"L_fe_pow22523_1_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -5193,7 +5192,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #9\n\t"
"\n"
"L_fe_pow22523_2_%=: \n\t"
"L_fe_pow22523_2_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -5210,7 +5209,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #19\n\t"
"\n"
"L_fe_pow22523_3_%=: \n\t"
"L_fe_pow22523_3_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -5224,7 +5223,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #10\n\t"
"\n"
"L_fe_pow22523_4_%=: \n\t"
"L_fe_pow22523_4_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -5241,7 +5240,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #49\n\t"
"\n"
"L_fe_pow22523_5_%=: \n\t"
"L_fe_pow22523_5_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -5258,7 +5257,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_sq_op\n\t"
"mov r12, #0x63\n\t"
"\n"
"L_fe_pow22523_6_%=: \n\t"
"L_fe_pow22523_6_%=:\n\t"
"add r1, sp, #0x40\n\t"
"add r0, sp, #0x40\n\t"
"push {r12}\n\t"
@@ -5272,7 +5271,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #50\n\t"
"\n"
"L_fe_pow22523_7_%=: \n\t"
"L_fe_pow22523_7_%=:\n\t"
"add r1, sp, #32\n\t"
"add r0, sp, #32\n\t"
"push {r12}\n\t"
@@ -5286,7 +5285,7 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"bl fe_mul_op\n\t"
"mov r12, #2\n\t"
"\n"
"L_fe_pow22523_8_%=: \n\t"
"L_fe_pow22523_8_%=:\n\t"
"mov r1, sp\n\t"
"mov r0, sp\n\t"
"push {r12}\n\t"
@@ -5317,11 +5316,11 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
WC_OMIT_FRAME_POINTER void ge_p1p1_to_p2(ge_p2 * r_p, const ge_p1p1 * p_p)
#else
WC_OMIT_FRAME_POINTER void ge_p1p1_to_p2(ge_p2 * r, const ge_p1p1 * p)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p2 * r asm ("r0") = (ge_p2 *)r_p;
register const ge_p1p1 * p asm ("r1") = (const ge_p1p1 *)p_p;
register ge_p2 * r __asm__ ("r0") = (ge_p2 *)r_p;
register const ge_p1p1 * p __asm__ ("r1") = (const ge_p1p1 *)p_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5359,11 +5358,11 @@ WC_OMIT_FRAME_POINTER void ge_p1p1_to_p2(ge_p2 * r, const ge_p1p1 * p)
WC_OMIT_FRAME_POINTER void ge_p1p1_to_p3(ge_p3 * r_p, const ge_p1p1 * p_p)
#else
WC_OMIT_FRAME_POINTER void ge_p1p1_to_p3(ge_p3 * r, const ge_p1p1 * p)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p3 * r asm ("r0") = (ge_p3 *)r_p;
register const ge_p1p1 * p asm ("r1") = (const ge_p1p1 *)p_p;
register ge_p3 * r __asm__ ("r0") = (ge_p3 *)r_p;
register const ge_p1p1 * p __asm__ ("r1") = (const ge_p1p1 *)p_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5406,11 +5405,11 @@ WC_OMIT_FRAME_POINTER void ge_p1p1_to_p3(ge_p3 * r, const ge_p1p1 * p)
WC_OMIT_FRAME_POINTER void ge_p2_dbl(ge_p1p1 * r_p, const ge_p2 * p_p)
#else
WC_OMIT_FRAME_POINTER void ge_p2_dbl(ge_p1p1 * r, const ge_p2 * p)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p1p1 * r asm ("r0") = (ge_p1p1 *)r_p;
register const ge_p2 * p asm ("r1") = (const ge_p2 *)p_p;
register ge_p1p1 * r __asm__ ("r0") = (ge_p1p1 *)r_p;
register const ge_p2 * p __asm__ ("r1") = (const ge_p2 *)p_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5467,12 +5466,12 @@ WC_OMIT_FRAME_POINTER void ge_madd(ge_p1p1 * r_p, const ge_p3 * p_p,
#else
WC_OMIT_FRAME_POINTER void ge_madd(ge_p1p1 * r, const ge_p3 * p,
const ge_precomp * q)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p1p1 * r asm ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p asm ("r1") = (const ge_p3 *)p_p;
register const ge_precomp * q asm ("r2") = (const ge_precomp *)q_p;
register ge_p1p1 * r __asm__ ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p __asm__ ("r1") = (const ge_p3 *)p_p;
register const ge_precomp * q __asm__ ("r2") = (const ge_precomp *)q_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5567,12 +5566,12 @@ WC_OMIT_FRAME_POINTER void ge_msub(ge_p1p1 * r_p, const ge_p3 * p_p,
#else
WC_OMIT_FRAME_POINTER void ge_msub(ge_p1p1 * r, const ge_p3 * p,
const ge_precomp * q)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p1p1 * r asm ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p asm ("r1") = (const ge_p3 *)p_p;
register const ge_precomp * q asm ("r2") = (const ge_precomp *)q_p;
register ge_p1p1 * r __asm__ ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p __asm__ ("r1") = (const ge_p3 *)p_p;
register const ge_precomp * q __asm__ ("r2") = (const ge_precomp *)q_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5668,12 +5667,12 @@ WC_OMIT_FRAME_POINTER void ge_add(ge_p1p1 * r_p, const ge_p3 * p_p,
#else
WC_OMIT_FRAME_POINTER void ge_add(ge_p1p1 * r, const ge_p3 * p,
const ge_cached* q)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p1p1 * r asm ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p asm ("r1") = (const ge_p3 *)p_p;
register const ge_cached* q asm ("r2") = (const ge_cached*)q_p;
register ge_p1p1 * r __asm__ ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p __asm__ ("r1") = (const ge_p3 *)p_p;
register const ge_cached* q __asm__ ("r2") = (const ge_cached*)q_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5769,12 +5768,12 @@ WC_OMIT_FRAME_POINTER void ge_sub(ge_p1p1 * r_p, const ge_p3 * p_p,
#else
WC_OMIT_FRAME_POINTER void ge_sub(ge_p1p1 * r, const ge_p3 * p,
const ge_cached* q)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register ge_p1p1 * r asm ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p asm ("r1") = (const ge_p3 *)p_p;
register const ge_cached* q asm ("r2") = (const ge_cached*)q_p;
register ge_p1p1 * r __asm__ ("r0") = (ge_p1p1 *)r_p;
register const ge_p3 * p __asm__ ("r1") = (const ge_p3 *)p_p;
register const ge_cached* q __asm__ ("r2") = (const ge_cached*)q_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -5871,10 +5870,10 @@ WC_OMIT_FRAME_POINTER void ge_sub(ge_p1p1 * r, const ge_p3 * p,
WC_OMIT_FRAME_POINTER void sc_reduce(byte* s_p)
#else
WC_OMIT_FRAME_POINTER void sc_reduce(byte* s)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* s asm ("r0") = (byte*)s_p;
register byte* s __asm__ ("r0") = (byte*)s_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -6671,10 +6670,10 @@ WC_OMIT_FRAME_POINTER void sc_reduce(byte* s)
WC_OMIT_FRAME_POINTER void sc_reduce(byte* s_p)
#else
WC_OMIT_FRAME_POINTER void sc_reduce(byte* s)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* s asm ("r0") = (byte*)s_p;
register byte* s __asm__ ("r0") = (byte*)s_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -7346,13 +7345,13 @@ WC_OMIT_FRAME_POINTER void sc_muladd(byte* s_p, const byte* a_p,
#else
WC_OMIT_FRAME_POINTER void sc_muladd(byte* s, const byte* a, const byte* b,
const byte* c)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* s asm ("r0") = (byte*)s_p;
register const byte* a asm ("r1") = (const byte*)a_p;
register const byte* b asm ("r2") = (const byte*)b_p;
register const byte* c asm ("r3") = (const byte*)c_p;
register byte* s __asm__ ("r0") = (byte*)s_p;
register const byte* a __asm__ ("r1") = (const byte*)a_p;
register const byte* b __asm__ ("r2") = (const byte*)b_p;
register const byte* c __asm__ ("r3") = (const byte*)c_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -8508,13 +8507,13 @@ WC_OMIT_FRAME_POINTER void sc_muladd(byte* s_p, const byte* a_p,
#else
WC_OMIT_FRAME_POINTER void sc_muladd(byte* s, const byte* a, const byte* b,
const byte* c)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register byte* s asm ("r0") = (byte*)s_p;
register const byte* a asm ("r1") = (const byte*)a_p;
register const byte* b asm ("r2") = (const byte*)b_p;
register const byte* c asm ("r3") = (const byte*)c_p;
register byte* s __asm__ ("r0") = (byte*)s_p;
register const byte* a __asm__ ("r1") = (const byte*)a_p;
register const byte* b __asm__ ("r2") = (const byte*)b_p;
register const byte* c __asm__ ("r3") = (const byte*)c_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
+78 -387
View File
@@ -31,139 +31,36 @@
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#ifndef WOLFSSL_ARMASM_INLINE
#ifdef WOLFSSL_WC_MLKEM
#ifndef __APPLE__
.text
.type L_mlkem_arm32_ntt_zetas, %object
.size L_mlkem_arm32_ntt_zetas, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 4-byte aligned, 32-bit aligned
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_arm32_ntt_zetas:
.short 0x8ed
.short 0xa0b
.short 0xb9a
.short 0x714
.short 0x5d5
.short 0x58e
.short 0x11f
.short 0xca
.short 0xc56
.short 0x26e
.short 0x629
.short 0xb6
.short 0x3c2
.short 0x84f
.short 0x73f
.short 0x5bc
.short 0x23d
.short 0x7d4
.short 0x108
.short 0x17f
.short 0x9c4
.short 0x5b2
.short 0x6bf
.short 0xc7f
.short 0xa58
.short 0x3f9
.short 0x2dc
.short 0x260
.short 0x6fb
.short 0x19b
.short 0xc34
.short 0x6de
.short 0x4c7
.short 0x28c
.short 0xad9
.short 0x3f7
.short 0x7f4
.short 0x5d3
.short 0xbe7
.short 0x6f9
.short 0x204
.short 0xcf9
.short 0xbc1
.short 0xa67
.short 0x6af
.short 0x877
.short 0x7e
.short 0x5bd
.short 0x9ac
.short 0xca7
.short 0xbf2
.short 0x33e
.short 0x6b
.short 0x774
.short 0xc0a
.short 0x94a
.short 0xb73
.short 0x3c1
.short 0x71d
.short 0xa2c
.short 0x1c0
.short 0x8d8
.short 0x2a5
.short 0x806
.short 0x8b2
.short 0x1ae
.short 0x22b
.short 0x34b
.short 0x81e
.short 0x367
.short 0x60e
.short 0x69
.short 0x1a6
.short 0x24b
.short 0xb1
.short 0xc16
.short 0xbde
.short 0xb35
.short 0x626
.short 0x675
.short 0xc0b
.short 0x30a
.short 0x487
.short 0xc6e
.short 0x9f8
.short 0x5cb
.short 0xaa7
.short 0x45f
.short 0x6cb
.short 0x284
.short 0x999
.short 0x15d
.short 0x1a2
.short 0x149
.short 0xc65
.short 0xcb6
.short 0x331
.short 0x449
.short 0x25b
.short 0x262
.short 0x52a
.short 0x7fc
.short 0x748
.short 0x180
.short 0x842
.short 0xc79
.short 0x4c2
.short 0x7ca
.short 0x997
.short 0xdc
.short 0x85e
.short 0x686
.short 0x860
.short 0x707
.short 0x803
.short 0x31a
.short 0x71b
.short 0x9ab
.short 0x99b
.short 0x1de
.short 0xc95
.short 0xbcd
.short 0x3e4
.short 0x3df
.short 0x3be
.short 0x74d
.short 0x5f2
.short 0x65c
.short 0x08ed,0x0a0b,0x0b9a,0x0714,0x05d5,0x058e,0x011f,0x00ca
.short 0x0c56,0x026e,0x0629,0x00b6,0x03c2,0x084f,0x073f,0x05bc
.short 0x023d,0x07d4,0x0108,0x017f,0x09c4,0x05b2,0x06bf,0x0c7f
.short 0x0a58,0x03f9,0x02dc,0x0260,0x06fb,0x019b,0x0c34,0x06de
.short 0x04c7,0x028c,0x0ad9,0x03f7,0x07f4,0x05d3,0x0be7,0x06f9
.short 0x0204,0x0cf9,0x0bc1,0x0a67,0x06af,0x0877,0x007e,0x05bd
.short 0x09ac,0x0ca7,0x0bf2,0x033e,0x006b,0x0774,0x0c0a,0x094a
.short 0x0b73,0x03c1,0x071d,0x0a2c,0x01c0,0x08d8,0x02a5,0x0806
.short 0x08b2,0x01ae,0x022b,0x034b,0x081e,0x0367,0x060e,0x0069
.short 0x01a6,0x024b,0x00b1,0x0c16,0x0bde,0x0b35,0x0626,0x0675
.short 0x0c0b,0x030a,0x0487,0x0c6e,0x09f8,0x05cb,0x0aa7,0x045f
.short 0x06cb,0x0284,0x0999,0x015d,0x01a2,0x0149,0x0c65,0x0cb6
.short 0x0331,0x0449,0x025b,0x0262,0x052a,0x07fc,0x0748,0x0180
.short 0x0842,0x0c79,0x04c2,0x07ca,0x0997,0x00dc,0x085e,0x0686
.short 0x0860,0x0707,0x0803,0x031a,0x071b,0x09ab,0x099b,0x01de
.short 0x0c95,0x0bcd,0x03e4,0x03df,0x03be,0x074d,0x05f2,0x065c
.text
.align 4
.globl mlkem_arm32_ntt
@@ -3155,139 +3052,36 @@ L_mlkem_arm32_ntt_loop_567:
add sp, sp, #8
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.size mlkem_arm32_ntt,.-mlkem_arm32_ntt
#ifndef __APPLE__
.text
.type L_mlkem_invntt_zetas_inv, %object
.size L_mlkem_invntt_zetas_inv, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 4-byte aligned, 32-bit aligned
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_invntt_zetas_inv:
.short 0x6a5
.short 0x70f
.short 0x5b4
.short 0x943
.short 0x922
.short 0x91d
.short 0x134
.short 0x6c
.short 0xb23
.short 0x366
.short 0x356
.short 0x5e6
.short 0x9e7
.short 0x4fe
.short 0x5fa
.short 0x4a1
.short 0x67b
.short 0x4a3
.short 0xc25
.short 0x36a
.short 0x537
.short 0x83f
.short 0x88
.short 0x4bf
.short 0xb81
.short 0x5b9
.short 0x505
.short 0x7d7
.short 0xa9f
.short 0xaa6
.short 0x8b8
.short 0x9d0
.short 0x4b
.short 0x9c
.short 0xbb8
.short 0xb5f
.short 0xba4
.short 0x368
.short 0xa7d
.short 0x636
.short 0x8a2
.short 0x25a
.short 0x736
.short 0x309
.short 0x93
.short 0x87a
.short 0x9f7
.short 0xf6
.short 0x68c
.short 0x6db
.short 0x1cc
.short 0x123
.short 0xeb
.short 0xc50
.short 0xab6
.short 0xb5b
.short 0xc98
.short 0x6f3
.short 0x99a
.short 0x4e3
.short 0x9b6
.short 0xad6
.short 0xb53
.short 0x44f
.short 0x4fb
.short 0xa5c
.short 0x429
.short 0xb41
.short 0x2d5
.short 0x5e4
.short 0x940
.short 0x18e
.short 0x3b7
.short 0xf7
.short 0x58d
.short 0xc96
.short 0x9c3
.short 0x10f
.short 0x5a
.short 0x355
.short 0x744
.short 0xc83
.short 0x48a
.short 0x652
.short 0x29a
.short 0x140
.short 0x8
.short 0xafd
.short 0x608
.short 0x11a
.short 0x72e
.short 0x50d
.short 0x90a
.short 0x228
.short 0xa75
.short 0x83a
.short 0x623
.short 0xcd
.short 0xb66
.short 0x606
.short 0xaa1
.short 0xa25
.short 0x908
.short 0x2a9
.short 0x82
.short 0x642
.short 0x74f
.short 0x33d
.short 0xb82
.short 0xbf9
.short 0x52d
.short 0xac4
.short 0x745
.short 0x5c2
.short 0x4b2
.short 0x93f
.short 0xc4b
.short 0x6d8
.short 0xa93
.short 0xab
.short 0xc37
.short 0xbe2
.short 0x773
.short 0x72c
.short 0x5ed
.short 0x167
.short 0x2f6
.short 0x5a1
.short 0x06a5,0x070f,0x05b4,0x0943,0x0922,0x091d,0x0134,0x006c
.short 0x0b23,0x0366,0x0356,0x05e6,0x09e7,0x04fe,0x05fa,0x04a1
.short 0x067b,0x04a3,0x0c25,0x036a,0x0537,0x083f,0x0088,0x04bf
.short 0x0b81,0x05b9,0x0505,0x07d7,0x0a9f,0x0aa6,0x08b8,0x09d0
.short 0x004b,0x009c,0x0bb8,0x0b5f,0x0ba4,0x0368,0x0a7d,0x0636
.short 0x08a2,0x025a,0x0736,0x0309,0x0093,0x087a,0x09f7,0x00f6
.short 0x068c,0x06db,0x01cc,0x0123,0x00eb,0x0c50,0x0ab6,0x0b5b
.short 0x0c98,0x06f3,0x099a,0x04e3,0x09b6,0x0ad6,0x0b53,0x044f
.short 0x04fb,0x0a5c,0x0429,0x0b41,0x02d5,0x05e4,0x0940,0x018e
.short 0x03b7,0x00f7,0x058d,0x0c96,0x09c3,0x010f,0x005a,0x0355
.short 0x0744,0x0c83,0x048a,0x0652,0x029a,0x0140,0x0008,0x0afd
.short 0x0608,0x011a,0x072e,0x050d,0x090a,0x0228,0x0a75,0x083a
.short 0x0623,0x00cd,0x0b66,0x0606,0x0aa1,0x0a25,0x0908,0x02a9
.short 0x0082,0x0642,0x074f,0x033d,0x0b82,0x0bf9,0x052d,0x0ac4
.short 0x0745,0x05c2,0x04b2,0x093f,0x0c4b,0x06d8,0x0a93,0x00ab
.short 0x0c37,0x0be2,0x0773,0x072c,0x05ed,0x0167,0x02f6,0x05a1
.text
.align 4
.globl mlkem_arm32_invntt
@@ -7673,139 +7467,36 @@ L_mlkem_invntt_loop_321:
add sp, sp, #8
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.size mlkem_arm32_invntt,.-mlkem_arm32_invntt
#ifndef __APPLE__
.text
.type L_mlkem_basemul_mont_zetas, %object
.size L_mlkem_basemul_mont_zetas, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 4-byte aligned, 32-bit aligned
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_basemul_mont_zetas:
.short 0x8ed
.short 0xa0b
.short 0xb9a
.short 0x714
.short 0x5d5
.short 0x58e
.short 0x11f
.short 0xca
.short 0xc56
.short 0x26e
.short 0x629
.short 0xb6
.short 0x3c2
.short 0x84f
.short 0x73f
.short 0x5bc
.short 0x23d
.short 0x7d4
.short 0x108
.short 0x17f
.short 0x9c4
.short 0x5b2
.short 0x6bf
.short 0xc7f
.short 0xa58
.short 0x3f9
.short 0x2dc
.short 0x260
.short 0x6fb
.short 0x19b
.short 0xc34
.short 0x6de
.short 0x4c7
.short 0x28c
.short 0xad9
.short 0x3f7
.short 0x7f4
.short 0x5d3
.short 0xbe7
.short 0x6f9
.short 0x204
.short 0xcf9
.short 0xbc1
.short 0xa67
.short 0x6af
.short 0x877
.short 0x7e
.short 0x5bd
.short 0x9ac
.short 0xca7
.short 0xbf2
.short 0x33e
.short 0x6b
.short 0x774
.short 0xc0a
.short 0x94a
.short 0xb73
.short 0x3c1
.short 0x71d
.short 0xa2c
.short 0x1c0
.short 0x8d8
.short 0x2a5
.short 0x806
.short 0x8b2
.short 0x1ae
.short 0x22b
.short 0x34b
.short 0x81e
.short 0x367
.short 0x60e
.short 0x69
.short 0x1a6
.short 0x24b
.short 0xb1
.short 0xc16
.short 0xbde
.short 0xb35
.short 0x626
.short 0x675
.short 0xc0b
.short 0x30a
.short 0x487
.short 0xc6e
.short 0x9f8
.short 0x5cb
.short 0xaa7
.short 0x45f
.short 0x6cb
.short 0x284
.short 0x999
.short 0x15d
.short 0x1a2
.short 0x149
.short 0xc65
.short 0xcb6
.short 0x331
.short 0x449
.short 0x25b
.short 0x262
.short 0x52a
.short 0x7fc
.short 0x748
.short 0x180
.short 0x842
.short 0xc79
.short 0x4c2
.short 0x7ca
.short 0x997
.short 0xdc
.short 0x85e
.short 0x686
.short 0x860
.short 0x707
.short 0x803
.short 0x31a
.short 0x71b
.short 0x9ab
.short 0x99b
.short 0x1de
.short 0xc95
.short 0xbcd
.short 0x3e4
.short 0x3df
.short 0x3be
.short 0x74d
.short 0x5f2
.short 0x65c
.short 0x08ed,0x0a0b,0x0b9a,0x0714,0x05d5,0x058e,0x011f,0x00ca
.short 0x0c56,0x026e,0x0629,0x00b6,0x03c2,0x084f,0x073f,0x05bc
.short 0x023d,0x07d4,0x0108,0x017f,0x09c4,0x05b2,0x06bf,0x0c7f
.short 0x0a58,0x03f9,0x02dc,0x0260,0x06fb,0x019b,0x0c34,0x06de
.short 0x04c7,0x028c,0x0ad9,0x03f7,0x07f4,0x05d3,0x0be7,0x06f9
.short 0x0204,0x0cf9,0x0bc1,0x0a67,0x06af,0x0877,0x007e,0x05bd
.short 0x09ac,0x0ca7,0x0bf2,0x033e,0x006b,0x0774,0x0c0a,0x094a
.short 0x0b73,0x03c1,0x071d,0x0a2c,0x01c0,0x08d8,0x02a5,0x0806
.short 0x08b2,0x01ae,0x022b,0x034b,0x081e,0x0367,0x060e,0x0069
.short 0x01a6,0x024b,0x00b1,0x0c16,0x0bde,0x0b35,0x0626,0x0675
.short 0x0c0b,0x030a,0x0487,0x0c6e,0x09f8,0x05cb,0x0aa7,0x045f
.short 0x06cb,0x0284,0x0999,0x015d,0x01a2,0x0149,0x0c65,0x0cb6
.short 0x0331,0x0449,0x025b,0x0262,0x052a,0x07fc,0x0748,0x0180
.short 0x0842,0x0c79,0x04c2,0x07ca,0x0997,0x00dc,0x085e,0x0686
.short 0x0860,0x0707,0x0803,0x031a,0x071b,0x09ab,0x099b,0x01de
.short 0x0c95,0x0bcd,0x03e4,0x03df,0x03be,0x074d,0x05f2,0x065c
.text
.align 4
.globl mlkem_arm32_basemul_mont
+99 -149
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -52,50 +50,34 @@
#include <wolfssl/wolfcrypt/wc_mlkem.h>
#ifdef WOLFSSL_WC_MLKEM
static const word16 L_mlkem_arm32_ntt_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714,
0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6,
0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f,
0x09c4, 0x05b2, 0x06bf, 0x0c7f,
0x0a58, 0x03f9, 0x02dc, 0x0260,
0x06fb, 0x019b, 0x0c34, 0x06de,
0x04c7, 0x028c, 0x0ad9, 0x03f7,
0x07f4, 0x05d3, 0x0be7, 0x06f9,
0x0204, 0x0cf9, 0x0bc1, 0x0a67,
0x06af, 0x0877, 0x007e, 0x05bd,
0x09ac, 0x0ca7, 0x0bf2, 0x033e,
0x006b, 0x0774, 0x0c0a, 0x094a,
0x0b73, 0x03c1, 0x071d, 0x0a2c,
0x01c0, 0x08d8, 0x02a5, 0x0806,
0x08b2, 0x01ae, 0x022b, 0x034b,
0x081e, 0x0367, 0x060e, 0x0069,
0x01a6, 0x024b, 0x00b1, 0x0c16,
0x0bde, 0x0b35, 0x0626, 0x0675,
0x0c0b, 0x030a, 0x0487, 0x0c6e,
0x09f8, 0x05cb, 0x0aa7, 0x045f,
0x06cb, 0x0284, 0x0999, 0x015d,
0x01a2, 0x0149, 0x0c65, 0x0cb6,
0x0331, 0x0449, 0x025b, 0x0262,
0x052a, 0x07fc, 0x0748, 0x0180,
0x0842, 0x0c79, 0x04c2, 0x07ca,
0x0997, 0x00dc, 0x085e, 0x0686,
0x0860, 0x0707, 0x0803, 0x031a,
0x071b, 0x09ab, 0x099b, 0x01de,
0x0c95, 0x0bcd, 0x03e4, 0x03df,
0x03be, 0x074d, 0x05f2, 0x065c,
XALIGNED(4) static const word16 L_mlkem_arm32_ntt_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714, 0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6, 0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f, 0x09c4, 0x05b2, 0x06bf, 0x0c7f,
0x0a58, 0x03f9, 0x02dc, 0x0260, 0x06fb, 0x019b, 0x0c34, 0x06de,
0x04c7, 0x028c, 0x0ad9, 0x03f7, 0x07f4, 0x05d3, 0x0be7, 0x06f9,
0x0204, 0x0cf9, 0x0bc1, 0x0a67, 0x06af, 0x0877, 0x007e, 0x05bd,
0x09ac, 0x0ca7, 0x0bf2, 0x033e, 0x006b, 0x0774, 0x0c0a, 0x094a,
0x0b73, 0x03c1, 0x071d, 0x0a2c, 0x01c0, 0x08d8, 0x02a5, 0x0806,
0x08b2, 0x01ae, 0x022b, 0x034b, 0x081e, 0x0367, 0x060e, 0x0069,
0x01a6, 0x024b, 0x00b1, 0x0c16, 0x0bde, 0x0b35, 0x0626, 0x0675,
0x0c0b, 0x030a, 0x0487, 0x0c6e, 0x09f8, 0x05cb, 0x0aa7, 0x045f,
0x06cb, 0x0284, 0x0999, 0x015d, 0x01a2, 0x0149, 0x0c65, 0x0cb6,
0x0331, 0x0449, 0x025b, 0x0262, 0x052a, 0x07fc, 0x0748, 0x0180,
0x0842, 0x0c79, 0x04c2, 0x07ca, 0x0997, 0x00dc, 0x085e, 0x0686,
0x0860, 0x0707, 0x0803, 0x031a, 0x071b, 0x09ab, 0x099b, 0x01de,
0x0c95, 0x0bcd, 0x03e4, 0x03df, 0x03be, 0x074d, 0x05f2, 0x065c,
};
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r_p)
#else
WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* r asm ("r0") = (sword16*)r_p;
register word16* L_mlkem_arm32_ntt_zetas_c asm ("r1") =
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register word16* L_mlkem_arm32_ntt_zetas_c __asm__ ("r1") =
(word16*)&L_mlkem_arm32_ntt_zetas;
#else
register word16* L_mlkem_arm32_ntt_zetas_c =
@@ -121,7 +103,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r)
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH >= 6 */
"mov r2, #16\n\t"
"\n"
"L_mlkem_arm32_ntt_loop_123_%=: \n\t"
"L_mlkem_arm32_ntt_loop_123_%=:\n\t"
"str r2, [sp]\n\t"
"ldrh r11, [r1, #2]\n\t"
"ldr r2, [%[r]]\n\t"
@@ -1238,13 +1220,13 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r)
"sub %[r], %[r], #0x40\n\t"
"mov r3, #0\n\t"
"\n"
"L_mlkem_arm32_ntt_loop_4_j_%=: \n\t"
"L_mlkem_arm32_ntt_loop_4_j_%=:\n\t"
"str r3, [sp, #4]\n\t"
"add r11, r1, r3, lsr #4\n\t"
"mov r2, #4\n\t"
"ldr r11, [r11, #16]\n\t"
"\n"
"L_mlkem_arm32_ntt_loop_4_i_%=: \n\t"
"L_mlkem_arm32_ntt_loop_4_i_%=:\n\t"
"str r2, [sp]\n\t"
"ldr r2, [%[r]]\n\t"
"ldr r3, [%[r], #16]\n\t"
@@ -1639,7 +1621,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r)
"sub %[r], %[r], #0x200\n\t"
"mov r3, #0\n\t"
"\n"
"L_mlkem_arm32_ntt_loop_567_%=: \n\t"
"L_mlkem_arm32_ntt_loop_567_%=:\n\t"
"add r11, r1, r3, lsr #3\n\t"
"str r3, [sp, #4]\n\t"
"ldrh r11, [r11, #32]\n\t"
@@ -3104,50 +3086,34 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_ntt(sword16* r)
);
}
static const word16 L_mlkem_invntt_zetas_inv[] = {
0x06a5, 0x070f, 0x05b4, 0x0943,
0x0922, 0x091d, 0x0134, 0x006c,
0x0b23, 0x0366, 0x0356, 0x05e6,
0x09e7, 0x04fe, 0x05fa, 0x04a1,
0x067b, 0x04a3, 0x0c25, 0x036a,
0x0537, 0x083f, 0x0088, 0x04bf,
0x0b81, 0x05b9, 0x0505, 0x07d7,
0x0a9f, 0x0aa6, 0x08b8, 0x09d0,
0x004b, 0x009c, 0x0bb8, 0x0b5f,
0x0ba4, 0x0368, 0x0a7d, 0x0636,
0x08a2, 0x025a, 0x0736, 0x0309,
0x0093, 0x087a, 0x09f7, 0x00f6,
0x068c, 0x06db, 0x01cc, 0x0123,
0x00eb, 0x0c50, 0x0ab6, 0x0b5b,
0x0c98, 0x06f3, 0x099a, 0x04e3,
0x09b6, 0x0ad6, 0x0b53, 0x044f,
0x04fb, 0x0a5c, 0x0429, 0x0b41,
0x02d5, 0x05e4, 0x0940, 0x018e,
0x03b7, 0x00f7, 0x058d, 0x0c96,
0x09c3, 0x010f, 0x005a, 0x0355,
0x0744, 0x0c83, 0x048a, 0x0652,
0x029a, 0x0140, 0x0008, 0x0afd,
0x0608, 0x011a, 0x072e, 0x050d,
0x090a, 0x0228, 0x0a75, 0x083a,
0x0623, 0x00cd, 0x0b66, 0x0606,
0x0aa1, 0x0a25, 0x0908, 0x02a9,
0x0082, 0x0642, 0x074f, 0x033d,
0x0b82, 0x0bf9, 0x052d, 0x0ac4,
0x0745, 0x05c2, 0x04b2, 0x093f,
0x0c4b, 0x06d8, 0x0a93, 0x00ab,
0x0c37, 0x0be2, 0x0773, 0x072c,
0x05ed, 0x0167, 0x02f6, 0x05a1,
XALIGNED(4) static const word16 L_mlkem_invntt_zetas_inv[] = {
0x06a5, 0x070f, 0x05b4, 0x0943, 0x0922, 0x091d, 0x0134, 0x006c,
0x0b23, 0x0366, 0x0356, 0x05e6, 0x09e7, 0x04fe, 0x05fa, 0x04a1,
0x067b, 0x04a3, 0x0c25, 0x036a, 0x0537, 0x083f, 0x0088, 0x04bf,
0x0b81, 0x05b9, 0x0505, 0x07d7, 0x0a9f, 0x0aa6, 0x08b8, 0x09d0,
0x004b, 0x009c, 0x0bb8, 0x0b5f, 0x0ba4, 0x0368, 0x0a7d, 0x0636,
0x08a2, 0x025a, 0x0736, 0x0309, 0x0093, 0x087a, 0x09f7, 0x00f6,
0x068c, 0x06db, 0x01cc, 0x0123, 0x00eb, 0x0c50, 0x0ab6, 0x0b5b,
0x0c98, 0x06f3, 0x099a, 0x04e3, 0x09b6, 0x0ad6, 0x0b53, 0x044f,
0x04fb, 0x0a5c, 0x0429, 0x0b41, 0x02d5, 0x05e4, 0x0940, 0x018e,
0x03b7, 0x00f7, 0x058d, 0x0c96, 0x09c3, 0x010f, 0x005a, 0x0355,
0x0744, 0x0c83, 0x048a, 0x0652, 0x029a, 0x0140, 0x0008, 0x0afd,
0x0608, 0x011a, 0x072e, 0x050d, 0x090a, 0x0228, 0x0a75, 0x083a,
0x0623, 0x00cd, 0x0b66, 0x0606, 0x0aa1, 0x0a25, 0x0908, 0x02a9,
0x0082, 0x0642, 0x074f, 0x033d, 0x0b82, 0x0bf9, 0x052d, 0x0ac4,
0x0745, 0x05c2, 0x04b2, 0x093f, 0x0c4b, 0x06d8, 0x0a93, 0x00ab,
0x0c37, 0x0be2, 0x0773, 0x072c, 0x05ed, 0x0167, 0x02f6, 0x05a1,
};
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r_p)
#else
WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* r asm ("r0") = (sword16*)r_p;
register word16* L_mlkem_invntt_zetas_inv_c asm ("r1") =
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register word16* L_mlkem_invntt_zetas_inv_c __asm__ ("r1") =
(word16*)&L_mlkem_invntt_zetas_inv;
#else
register word16* L_mlkem_invntt_zetas_inv_c =
@@ -3173,7 +3139,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r)
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH >= 6 */
"mov r3, #0\n\t"
"\n"
"L_mlkem_invntt_loop_765_%=: \n\t"
"L_mlkem_invntt_loop_765_%=:\n\t"
"add r11, r1, r3, lsr #1\n\t"
"str r3, [sp, #4]\n\t"
"ldr r2, [%[r]]\n\t"
@@ -4774,13 +4740,13 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r)
"sub %[r], %[r], #0x200\n\t"
"mov r3, #0\n\t"
"\n"
"L_mlkem_invntt_loop_4_j_%=: \n\t"
"L_mlkem_invntt_loop_4_j_%=:\n\t"
"str r3, [sp, #4]\n\t"
"add r11, r1, r3, lsr #4\n\t"
"mov r2, #4\n\t"
"ldr r11, [r11, #224]\n\t"
"\n"
"L_mlkem_invntt_loop_4_i_%=: \n\t"
"L_mlkem_invntt_loop_4_i_%=:\n\t"
"str r2, [sp]\n\t"
"ldr r2, [%[r]]\n\t"
"ldr r3, [%[r], #16]\n\t"
@@ -5279,7 +5245,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r)
"sub %[r], %[r], #0x200\n\t"
"mov r2, #16\n\t"
"\n"
"L_mlkem_invntt_loop_321_%=: \n\t"
"L_mlkem_invntt_loop_321_%=:\n\t"
"str r2, [sp]\n\t"
"ldrh r11, [r1, #2]\n\t"
"ldr r2, [%[r]]\n\t"
@@ -7550,39 +7516,23 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_invntt(sword16* r)
);
}
static const word16 L_mlkem_basemul_mont_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714,
0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6,
0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f,
0x09c4, 0x05b2, 0x06bf, 0x0c7f,
0x0a58, 0x03f9, 0x02dc, 0x0260,
0x06fb, 0x019b, 0x0c34, 0x06de,
0x04c7, 0x028c, 0x0ad9, 0x03f7,
0x07f4, 0x05d3, 0x0be7, 0x06f9,
0x0204, 0x0cf9, 0x0bc1, 0x0a67,
0x06af, 0x0877, 0x007e, 0x05bd,
0x09ac, 0x0ca7, 0x0bf2, 0x033e,
0x006b, 0x0774, 0x0c0a, 0x094a,
0x0b73, 0x03c1, 0x071d, 0x0a2c,
0x01c0, 0x08d8, 0x02a5, 0x0806,
0x08b2, 0x01ae, 0x022b, 0x034b,
0x081e, 0x0367, 0x060e, 0x0069,
0x01a6, 0x024b, 0x00b1, 0x0c16,
0x0bde, 0x0b35, 0x0626, 0x0675,
0x0c0b, 0x030a, 0x0487, 0x0c6e,
0x09f8, 0x05cb, 0x0aa7, 0x045f,
0x06cb, 0x0284, 0x0999, 0x015d,
0x01a2, 0x0149, 0x0c65, 0x0cb6,
0x0331, 0x0449, 0x025b, 0x0262,
0x052a, 0x07fc, 0x0748, 0x0180,
0x0842, 0x0c79, 0x04c2, 0x07ca,
0x0997, 0x00dc, 0x085e, 0x0686,
0x0860, 0x0707, 0x0803, 0x031a,
0x071b, 0x09ab, 0x099b, 0x01de,
0x0c95, 0x0bcd, 0x03e4, 0x03df,
0x03be, 0x074d, 0x05f2, 0x065c,
XALIGNED(4) static const word16 L_mlkem_basemul_mont_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714, 0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6, 0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f, 0x09c4, 0x05b2, 0x06bf, 0x0c7f,
0x0a58, 0x03f9, 0x02dc, 0x0260, 0x06fb, 0x019b, 0x0c34, 0x06de,
0x04c7, 0x028c, 0x0ad9, 0x03f7, 0x07f4, 0x05d3, 0x0be7, 0x06f9,
0x0204, 0x0cf9, 0x0bc1, 0x0a67, 0x06af, 0x0877, 0x007e, 0x05bd,
0x09ac, 0x0ca7, 0x0bf2, 0x033e, 0x006b, 0x0774, 0x0c0a, 0x094a,
0x0b73, 0x03c1, 0x071d, 0x0a2c, 0x01c0, 0x08d8, 0x02a5, 0x0806,
0x08b2, 0x01ae, 0x022b, 0x034b, 0x081e, 0x0367, 0x060e, 0x0069,
0x01a6, 0x024b, 0x00b1, 0x0c16, 0x0bde, 0x0b35, 0x0626, 0x0675,
0x0c0b, 0x030a, 0x0487, 0x0c6e, 0x09f8, 0x05cb, 0x0aa7, 0x045f,
0x06cb, 0x0284, 0x0999, 0x015d, 0x01a2, 0x0149, 0x0c65, 0x0cb6,
0x0331, 0x0449, 0x025b, 0x0262, 0x052a, 0x07fc, 0x0748, 0x0180,
0x0842, 0x0c79, 0x04c2, 0x07ca, 0x0997, 0x00dc, 0x085e, 0x0686,
0x0860, 0x0707, 0x0803, 0x031a, 0x071b, 0x09ab, 0x099b, 0x01de,
0x0c95, 0x0bcd, 0x03e4, 0x03df, 0x03be, 0x074d, 0x05f2, 0x065c,
};
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -7591,13 +7541,13 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont(sword16* r_p,
#else
WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont(sword16* r,
const sword16* a, const sword16* b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* r asm ("r0") = (sword16*)r_p;
register const sword16* a asm ("r1") = (const sword16*)a_p;
register const sword16* b asm ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register const sword16* a __asm__ ("r1") = (const sword16*)a_p;
register const sword16* b __asm__ ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
@@ -7623,7 +7573,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont(sword16* r,
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH >= 6 */
"mov r8, #0\n\t"
"\n"
"L_mlkem_basemul_mont_loop_%=: \n\t"
"L_mlkem_basemul_mont_loop_%=:\n\t"
"ldm %[a]!, {r4, r5}\n\t"
"ldm %[b]!, {r6, r7}\n\t"
"ldr lr, [r3, r8]\n\t"
@@ -7896,13 +7846,13 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont_add(sword16* r_p,
#else
WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont_add(sword16* r,
const sword16* a, const sword16* b)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* r asm ("r0") = (sword16*)r_p;
register const sword16* a asm ("r1") = (const sword16*)a_p;
register const sword16* b asm ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c asm ("r3") =
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register const sword16* a __asm__ ("r1") = (const sword16*)a_p;
register const sword16* b __asm__ ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
@@ -7928,7 +7878,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont_add(sword16* r,
#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH >= 6 */
"mov r8, #0\n\t"
"\n"
"L_mlkem_arm32_basemul_mont_add_loop_%=: \n\t"
"L_mlkem_arm32_basemul_mont_add_loop_%=:\n\t"
"ldm %[a]!, {r4, r5}\n\t"
"ldm %[b]!, {r6, r7}\n\t"
"ldr lr, [r3, r8]\n\t"
@@ -8233,11 +8183,11 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_basemul_mont_add(sword16* r,
WC_OMIT_FRAME_POINTER void mlkem_arm32_csubq(sword16* p_p)
#else
WC_OMIT_FRAME_POINTER void mlkem_arm32_csubq(sword16* p)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* p asm ("r0") = (sword16*)p_p;
register word16* L_mlkem_basemul_mont_zetas_c asm ("r1") =
register sword16* p __asm__ ("r0") = (sword16*)p_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r1") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
@@ -8273,7 +8223,7 @@ WC_OMIT_FRAME_POINTER void mlkem_arm32_csubq(sword16* p)
#endif
"mov r1, #0x100\n\t"
"\n"
"L_mlkem_arm32_csubq_loop_%=: \n\t"
"L_mlkem_arm32_csubq_loop_%=:\n\t"
"ldm %[p], {r2, r3, r4, r5}\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH >= 6)
"ssub16 r2, r2, lr\n\t"
@@ -8429,14 +8379,14 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p_p,
#else
WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
unsigned int len, const byte* r, unsigned int rLen)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register sword16* p asm ("r0") = (sword16*)p_p;
register unsigned int len asm ("r1") = (unsigned int)len_p;
register const byte* r asm ("r2") = (const byte*)r_p;
register unsigned int rLen asm ("r3") = (unsigned int)rLen_p;
register word16* L_mlkem_basemul_mont_zetas_c asm ("r12") =
register sword16* p __asm__ ("r0") = (sword16*)p_p;
register unsigned int len __asm__ ("r1") = (unsigned int)len_p;
register const byte* r __asm__ ("r2") = (const byte*)r_p;
register unsigned int rLen __asm__ ("r3") = (unsigned int)rLen_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r12") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
@@ -8453,7 +8403,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
#endif
"mov r12, #0\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_loop_no_fail_%=: \n\t"
"L_mlkem_arm32_rej_uniform_loop_no_fail_%=:\n\t"
"cmp %[len], #8\n\t"
"blt L_mlkem_arm32_rej_uniform_done_no_fail_%=\n\t"
"ldm %[r]!, {r4, r5, r6}\n\t"
@@ -8562,11 +8512,11 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"bne L_mlkem_arm32_rej_uniform_loop_no_fail_%=\n\t"
"b L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_done_no_fail_%=: \n\t"
"L_mlkem_arm32_rej_uniform_done_no_fail_%=:\n\t"
"cmp %[len], #0\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_loop_%=: \n\t"
"L_mlkem_arm32_rej_uniform_loop_%=:\n\t"
"ldm %[r]!, {r4, r5, r6}\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsl r7, r4, #20\n\t"
@@ -8581,7 +8531,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_0_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_0_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsl r7, r4, #8\n\t"
"lsr r7, r7, #20\n\t"
@@ -8595,7 +8545,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_1_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_1_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsr r7, r4, #24\n\t"
#else
@@ -8616,7 +8566,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_2_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_2_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsl r7, r5, #16\n\t"
"lsr r7, r7, #20\n\t"
@@ -8630,7 +8580,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_3_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_3_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsl r7, r5, #4\n\t"
"lsr r7, r7, #20\n\t"
@@ -8644,7 +8594,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_4_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_4_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsr r7, r5, #28\n\t"
#else
@@ -8665,7 +8615,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_5_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_5_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsl r7, r6, #12\n\t"
"lsr r7, r7, #20\n\t"
@@ -8679,7 +8629,7 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_6_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_6_%=:\n\t"
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"lsr r7, r6, #20\n\t"
#else
@@ -8692,11 +8642,11 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_arm32_rej_uniform(sword16* p,
"add r12, r12, #2\n\t"
"beq L_mlkem_arm32_rej_uniform_done_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_fail_7_%=: \n\t"
"L_mlkem_arm32_rej_uniform_fail_7_%=:\n\t"
"subs %[rLen], %[rLen], #12\n\t"
"bgt L_mlkem_arm32_rej_uniform_loop_%=\n\t"
"\n"
"L_mlkem_arm32_rej_uniform_done_%=: \n\t"
"L_mlkem_arm32_rej_uniform_done_%=:\n\t"
"lsr r0, r12, #1\n\t"
"pop {%[L_mlkem_basemul_mont_zetas]}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
+26 -14
View File
@@ -246,15 +246,21 @@ L_poly1305_arm32_16_done:
add sp, sp, #28
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.size poly1305_arm32_blocks_16,.-poly1305_arm32_blocks_16
#ifndef __APPLE__
.text
.type L_poly1305_arm32_clamp, %object
.size L_poly1305_arm32_clamp, 16
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_poly1305_arm32_clamp:
.word 0xfffffff
.word 0xffffffc
.word 0xffffffc
.word 0xffffffc
.long 0x0fffffff,0x0ffffffc,0x0ffffffc,0x0ffffffc
.text
.align 4
.globl poly1305_set_key
@@ -822,7 +828,7 @@ L_poly1305_arm32_blocks_start_1:
adcs r9, r9, r4
adcs r10, r10, r5
adc r11, r11, r12
push {r0, r1}
push {r0-r1}
add r1, r0, #0
add lr, r0, #16
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
@@ -996,7 +1002,7 @@ L_poly1305_arm32_blocks_start_1:
adcs r9, r9, r5
adcs r10, r10, r6
adc r11, r11, r12
pop {r0, r1}
pop {r0-r1}
pop {r2}
add r12, r0, #16
stm r12, {r7, r8, r9, r10, r11}
@@ -1004,15 +1010,21 @@ L_poly1305_arm32_blocks_done:
vpop {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.size poly1305_arm32_blocks,.-poly1305_arm32_blocks
#ifndef __APPLE__
.text
.type L_poly1305_arm32_clamp, %object
.size L_poly1305_arm32_clamp, 16
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_poly1305_arm32_clamp:
.word 0xfffffff
.word 0xffffffc
.word 0xffffffc
.word 0xffffffc
.long 0x0fffffff,0x0ffffffc,0x0ffffffc,0x0ffffffc
.text
.align 4
.globl poly1305_set_key
@@ -1059,7 +1071,7 @@ poly1305_set_key:
vmov.i32 s5, r9
vmov.i32 s7, r10
vmov.i32 s9, r11
push {r0, r1}
push {r0-r1}
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
# Square r
umull r1, r6, r2, r3
@@ -1158,7 +1170,7 @@ poly1305_set_key:
vmov.i32 s4, r4
vmov.i32 s6, r5
vmov.i32 s8, r10
pop {r0, r1}
pop {r0-r1}
add lr, r0, #0x7c
vstm.32 lr, {d0-d4}
# Multiply r^2, r by r^2
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -59,13 +57,13 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx_p,
#else
WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
const byte* m, word32 len, int notLast)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register const byte* m asm ("r1") = (const byte*)m_p;
register word32 len asm ("r2") = (word32)len_p;
register int notLast asm ("r3") = (int)notLast_p;
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register const byte* m __asm__ ("r1") = (const byte*)m_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register int notLast __asm__ ("r3") = (int)notLast_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -78,7 +76,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
"add lr, %[ctx], #16\n\t"
"ldm lr, {r4, r5, r6, r7, r8}\n\t"
"\n"
"L_poly1305_arm32_16_loop_%=: \n\t"
"L_poly1305_arm32_16_loop_%=:\n\t"
/* Add m to h */
"ldr %[m], [sp, #16]\n\t"
"ldr %[len], [%[m]]\n\t"
@@ -275,7 +273,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
"bgt L_poly1305_arm32_16_loop_%=\n\t"
"stm lr, {r4, r5, r6, r7, r8}\n\t"
"\n"
"L_poly1305_arm32_16_done_%=: \n\t"
"L_poly1305_arm32_16_done_%=:\n\t"
"add sp, sp, #28\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
@@ -291,7 +289,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
);
}
static const word32 L_poly1305_arm32_clamp[] = {
XALIGNED(8) static const word32 L_poly1305_arm32_clamp[] = {
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
};
@@ -299,12 +297,12 @@ static const word32 L_poly1305_arm32_clamp[] = {
WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
#else
WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register const byte* key asm ("r1") = (const byte*)key_p;
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register const byte* key __asm__ ("r1") = (const byte*)key_p;
register word32* L_poly1305_arm32_clamp_c __asm__ ("r2") =
(word32*)&L_poly1305_arm32_clamp;
#else
register word32* L_poly1305_arm32_clamp_c =
@@ -360,11 +358,11 @@ WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
WC_OMIT_FRAME_POINTER void poly1305_final(Poly1305* ctx_p, byte* mac_p)
#else
WC_OMIT_FRAME_POINTER void poly1305_final(Poly1305* ctx, byte* mac)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register byte* mac asm ("r1") = (byte*)mac_p;
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register byte* mac __asm__ ("r1") = (byte*)mac_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -430,13 +428,13 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx_p,
#else
WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
const byte* m, word32 len, int notLast)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register const byte* m asm ("r1") = (const byte*)m_p;
register word32 len asm ("r2") = (word32)len_p;
register int notLast asm ("r3") = (int)notLast_p;
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register const byte* m __asm__ ("r1") = (const byte*)m_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register int notLast __asm__ ("r3") = (int)notLast_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -449,7 +447,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
"add lr, %[ctx], #16\n\t"
"ldm lr, {r4, r5, r6, r7, r8}\n\t"
"\n"
"L_poly1305_arm32_16_loop_%=: \n\t"
"L_poly1305_arm32_16_loop_%=:\n\t"
/* Add m to h */
"ldr %[m], [sp, #16]\n\t"
"ldr %[len], [%[m]]\n\t"
@@ -646,7 +644,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks_16(Poly1305* ctx,
"bgt L_poly1305_arm32_16_loop_%=\n\t"
"stm lr, {r4, r5, r6, r7, r8}\n\t"
"\n"
"L_poly1305_arm32_16_done_%=: \n\t"
"L_poly1305_arm32_16_done_%=:\n\t"
"add sp, sp, #28\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
@@ -668,12 +666,12 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx_p,
#else
WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
const unsigned char* m, size_t bytes)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register const unsigned char* m asm ("r1") = (const unsigned char*)m_p;
register size_t bytes asm ("r2") = (size_t)bytes_p;
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register const unsigned char* m __asm__ ("r1") = (const unsigned char*)m_p;
register size_t bytes __asm__ ("r2") = (size_t)bytes_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -683,7 +681,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"ldm r12, {r7, r8, r9, r10, r11}\n\t"
"b L_poly1305_arm32_blocks_start_1_%=\n\t"
"\n"
"L_poly1305_arm32_blocks_begin_neon_%=: \n\t"
"L_poly1305_arm32_blocks_begin_neon_%=:\n\t"
"vmov.i16 q15, #0xffff\n\t"
"vshr.u64 q15, q15, #38\n\t"
"vld1.64 {d0-d2}, [r12]\n\t"
@@ -711,11 +709,11 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"vadd.u32 d9, d9, d24\n\t"
"b L_poly1305_arm32_blocks_start_2_%=\n\t"
"\n"
"L_poly1305_arm32_blocks_begin_4_%=: \n\t"
"L_poly1305_arm32_blocks_begin_4_%=:\n\t"
"add r3, %[ctx], #0xa4\n\t"
"vldm.32 r3, {d26-d30}\n\t"
"\n"
"L_poly1305_arm32_blocks_start_4_%=: \n\t"
"L_poly1305_arm32_blocks_start_4_%=:\n\t"
"sub %[bytes], #0x40\n\t"
"vld4.32 {d10-d13}, [%[m]]!\n\t"
"vshl.u32 d6, d27, #2\n\t"
@@ -837,7 +835,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"cmp %[bytes], #32\n\t"
"blt L_poly1305_arm32_blocks_done_neon_%=\n\t"
"\n"
"L_poly1305_arm32_blocks_start_2_%=: \n\t"
"L_poly1305_arm32_blocks_start_2_%=:\n\t"
"sub %[bytes], #32\n\t"
"vld4.32 {d10-d13}, [%[m]]!\n\t"
"vshr.u32 d14, d13, #8\n\t"
@@ -901,7 +899,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"vsra.u64 d1, d0, #26\n\t"
"vand.u64 d0, d0, d31\n\t"
"\n"
"L_poly1305_arm32_blocks_done_neon_%=: \n\t"
"L_poly1305_arm32_blocks_done_neon_%=:\n\t"
"cmp %[bytes], #16\n\t"
"beq L_poly1305_arm32_blocks_begin_1_%=\n\t"
"add r12, %[ctx], #16\n\t"
@@ -914,7 +912,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"vst1.64 {d0-d2}, [r12]\n\t"
"b L_poly1305_arm32_blocks_done_%=\n\t"
"\n"
"L_poly1305_arm32_blocks_begin_1_%=: \n\t"
"L_poly1305_arm32_blocks_begin_1_%=:\n\t"
"vsli.u64 d0, d1, #26\n\t"
"vsli.u64 d0, d2, #52\n\t"
"vshr.u64 d1, d2, #12\n\t"
@@ -925,7 +923,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"vmov r9, r10, d1\n\t"
"vmov r11, d2[0]\n\t"
"\n"
"L_poly1305_arm32_blocks_start_1_%=: \n\t"
"L_poly1305_arm32_blocks_start_1_%=:\n\t"
"mov r12, #1\n\t"
"push {r2}\n\t"
/* Load message */
@@ -1118,7 +1116,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
"add r12, %[ctx], #16\n\t"
"stm r12, {r7, r8, r9, r10, r11}\n\t"
"\n"
"L_poly1305_arm32_blocks_done_%=: \n\t"
"L_poly1305_arm32_blocks_done_%=:\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [m] "+r" (m), [bytes] "+r" (bytes)
:
@@ -1134,7 +1132,7 @@ WC_OMIT_FRAME_POINTER void poly1305_arm32_blocks(Poly1305* ctx,
);
}
static const word32 L_poly1305_arm32_clamp[] = {
XALIGNED(8) static const word32 L_poly1305_arm32_clamp[] = {
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
};
@@ -1142,12 +1140,12 @@ static const word32 L_poly1305_arm32_clamp[] = {
WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx_p, const byte* key_p)
#else
WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register const byte* key asm ("r1") = (const byte*)key_p;
register word32* L_poly1305_arm32_clamp_c asm ("r2") =
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register const byte* key __asm__ ("r1") = (const byte*)key_p;
register word32* L_poly1305_arm32_clamp_c __asm__ ("r2") =
(word32*)&L_poly1305_arm32_clamp;
#else
register word32* L_poly1305_arm32_clamp_c =
@@ -1383,11 +1381,11 @@ WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
WC_OMIT_FRAME_POINTER void poly1305_final(Poly1305* ctx_p, byte* mac_p)
#else
WC_OMIT_FRAME_POINTER void poly1305_final(Poly1305* ctx, byte* mac)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register Poly1305* ctx asm ("r0") = (Poly1305*)ctx_p;
register byte* mac asm ("r1") = (byte*)mac_p;
register Poly1305* ctx __asm__ ("r0") = (Poly1305*)ctx_p;
register byte* mac __asm__ ("r1") = (byte*)mac_p;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
+83 -200
View File
@@ -32,75 +32,36 @@
#ifndef WOLFSSL_ARMASM_INLINE
#ifndef NO_SHA256
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_SHA256_transform_len_k, %object
.size L_SHA256_transform_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0xfc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x6ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.text
.align 4
.globl Transform_Sha256_Len_base
@@ -2568,75 +2529,36 @@ L_SHA256_transform_len_blk_end_15:
.size Transform_Sha256_Len_base,.-Transform_Sha256_Len_base
#else
#ifdef WOLFSSL_ARMASM_NO_HW_CRYPTO
#ifndef __APPLE__
.text
.type L_SHA256_transform_neon_len_k, %object
.size L_SHA256_transform_neon_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_neon_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0xfc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x6ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.text
.align 4
.fpu neon
@@ -3667,75 +3589,36 @@ L_SHA256_transform_neon_len_start:
pop {r4, r5, r6, r7, r8, r9, r10, pc}
.size Transform_Sha256_Len_neon,.-Transform_Sha256_Len_neon
#else
#ifndef __APPLE__
.text
.type L_SHA256_trans_crypto_len_k, %object
.size L_SHA256_trans_crypto_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_trans_crypto_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0xfc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x6ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.text
.align 4
.globl Transform_Sha256_Len_crypto
@@ -3745,14 +3628,14 @@ Transform_Sha256_Len_crypto:
adr r3, L_SHA256_trans_crypto_len_k
# Load K into vector registers
vldm r3!, {q8-q11}
vldm r3!, {q12, q13}
vldm r3!, {q12-q13}
# Load digest into working vars
vldm r0, {q0, q1}
vldm r0, {q0-q1}
# Start of loop processing a block
L_sha256_len_crypto_begin:
# Load W
vld1.8 {q4, q5}, [r1]!
vld1.8 {q6, q7}, [r1]!
vld1.8 {q4-q5}, [r1]!
vld1.8 {q6-q7}, [r1]!
vrev32.8 q4, q4
vrev32.8 q5, q5
vrev32.8 q6, q6
@@ -3882,7 +3765,7 @@ L_sha256_len_crypto_begin:
sub r3, r3, #0xa0
bne L_sha256_len_crypto_begin
# Store digest back
vst1.8 {q0, q1}, [r0]
vst1.8 {q0-q1}, [r0]
vpop {d8-d15}
bx lr
.size Transform_Sha256_Len_crypto,.-Transform_Sha256_Len_crypto
+40 -42
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -53,7 +51,7 @@
#ifndef NO_SHA256
#ifdef WOLFSSL_ARMASM_NO_NEON
static const word32 L_SHA256_transform_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -80,13 +78,13 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256_p,
#else
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
register const byte* data asm ("r1") = (const byte*)data_p;
register word32 len asm ("r2") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c asm ("r3") =
register wc_Sha256* sha256 __asm__ ("r0") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r1") = (const byte*)data_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("r3") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
@@ -146,7 +144,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
#endif
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load, Reverse and Store W - 64 bytes */
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
"ldr r4, [%[data]]\n\t"
@@ -364,7 +362,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"mov r3, #3\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_fast_%=: \n\t"
"L_SHA256_transform_len_start_fast_%=:\n\t"
/* Round 0 */
"ldr r5, [%[sha256], #16]\n\t"
"ldr r6, [%[sha256], #20]\n\t"
@@ -1636,7 +1634,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"mov r3, #4\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_small_%=: \n\t"
"L_SHA256_transform_len_start_small_%=:\n\t"
"sub r3, r3, #1\n\t"
/* Round 0 */
"ldr r5, [%[sha256], #16]\n\t"
@@ -1688,7 +1686,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_0_%=: \n\t"
"L_SHA256_transform_len_blk_end_0_%=:\n\t"
/* Round 1 */
"ldr r5, [%[sha256], #12]\n\t"
"ldr r6, [%[sha256], #16]\n\t"
@@ -1739,7 +1737,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #4]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_1_%=: \n\t"
"L_SHA256_transform_len_blk_end_1_%=:\n\t"
/* Round 2 */
"ldr r5, [%[sha256], #8]\n\t"
"ldr r6, [%[sha256], #12]\n\t"
@@ -1790,7 +1788,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #8]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_2_%=: \n\t"
"L_SHA256_transform_len_blk_end_2_%=:\n\t"
/* Round 3 */
"ldr r5, [%[sha256], #4]\n\t"
"ldr r6, [%[sha256], #8]\n\t"
@@ -1841,7 +1839,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #12]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_3_%=: \n\t"
"L_SHA256_transform_len_blk_end_3_%=:\n\t"
/* Round 4 */
"ldr r5, [%[sha256]]\n\t"
"ldr r6, [%[sha256], #4]\n\t"
@@ -1892,7 +1890,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #16]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_4_%=: \n\t"
"L_SHA256_transform_len_blk_end_4_%=:\n\t"
/* Round 5 */
"ldr r5, [%[sha256], #28]\n\t"
"ldr r6, [%[sha256]]\n\t"
@@ -1943,7 +1941,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #20]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_5_%=: \n\t"
"L_SHA256_transform_len_blk_end_5_%=:\n\t"
/* Round 6 */
"ldr r5, [%[sha256], #24]\n\t"
"ldr r6, [%[sha256], #28]\n\t"
@@ -1994,7 +1992,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #24]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_6_%=: \n\t"
"L_SHA256_transform_len_blk_end_6_%=:\n\t"
/* Round 7 */
"ldr r5, [%[sha256], #20]\n\t"
"ldr r6, [%[sha256], #24]\n\t"
@@ -2045,7 +2043,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #28]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_7_%=: \n\t"
"L_SHA256_transform_len_blk_end_7_%=:\n\t"
/* Round 8 */
"ldr r5, [%[sha256], #16]\n\t"
"ldr r6, [%[sha256], #20]\n\t"
@@ -2096,7 +2094,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #32]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_8_%=: \n\t"
"L_SHA256_transform_len_blk_end_8_%=:\n\t"
/* Round 9 */
"ldr r5, [%[sha256], #12]\n\t"
"ldr r6, [%[sha256], #16]\n\t"
@@ -2147,7 +2145,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #36]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_9_%=: \n\t"
"L_SHA256_transform_len_blk_end_9_%=:\n\t"
/* Round 10 */
"ldr r5, [%[sha256], #8]\n\t"
"ldr r6, [%[sha256], #12]\n\t"
@@ -2198,7 +2196,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #40]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_10_%=: \n\t"
"L_SHA256_transform_len_blk_end_10_%=:\n\t"
/* Round 11 */
"ldr r5, [%[sha256], #4]\n\t"
"ldr r6, [%[sha256], #8]\n\t"
@@ -2249,7 +2247,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #44]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_11_%=: \n\t"
"L_SHA256_transform_len_blk_end_11_%=:\n\t"
/* Round 12 */
"ldr r5, [%[sha256]]\n\t"
"ldr r6, [%[sha256], #4]\n\t"
@@ -2300,7 +2298,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #48]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_12_%=: \n\t"
"L_SHA256_transform_len_blk_end_12_%=:\n\t"
/* Round 13 */
"ldr r5, [%[sha256], #28]\n\t"
"ldr r6, [%[sha256]]\n\t"
@@ -2351,7 +2349,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #52]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_13_%=: \n\t"
"L_SHA256_transform_len_blk_end_13_%=:\n\t"
/* Round 14 */
"ldr r5, [%[sha256], #24]\n\t"
"ldr r6, [%[sha256], #28]\n\t"
@@ -2402,7 +2400,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #56]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_14_%=: \n\t"
"L_SHA256_transform_len_blk_end_14_%=:\n\t"
/* Round 15 */
"ldr r5, [%[sha256], #20]\n\t"
"ldr r6, [%[sha256], #24]\n\t"
@@ -2453,7 +2451,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"add r9, r9, r4\n\t"
"str r9, [sp, #60]\n\t"
"\n"
"L_SHA256_transform_len_blk_end_15_%=: \n\t"
"L_SHA256_transform_len_blk_end_15_%=:\n\t"
"cmp r3, #0\n\t"
"add r12, r12, #0x40\n\t"
"bne L_SHA256_transform_len_start_small_%=\n\t"
@@ -2586,7 +2584,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
#else
#ifdef WOLFSSL_ARMASM_NO_HW_CRYPTO
static const word32 L_SHA256_transform_neon_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_neon_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -2613,13 +2611,13 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_neon(wc_Sha256* sha256_p,
#else
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_neon(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
register const byte* data asm ("r1") = (const byte*)data_p;
register word32 len asm ("r2") = (word32)len_p;
register word32* L_SHA256_transform_neon_len_k_c asm ("r3") =
register wc_Sha256* sha256 __asm__ ("r0") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r1") = (const byte*)data_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register word32* L_SHA256_transform_neon_len_k_c __asm__ ("r3") =
(word32*)&L_SHA256_transform_neon_len_k;
#else
register word32* L_SHA256_transform_neon_len_k_c =
@@ -2661,7 +2659,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_neon(wc_Sha256* sha256,
#endif
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_neon_len_begin_%=: \n\t"
"L_SHA256_transform_neon_len_begin_%=:\n\t"
/* Load W */
"vld1.8 {d0-d3}, [%[data]]!\n\t"
"vld1.8 {d4-d7}, [%[data]]!\n\t"
@@ -2684,7 +2682,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_neon(wc_Sha256* sha256,
"mov lr, #3\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_neon_len_start_%=: \n\t"
"L_SHA256_transform_neon_len_start_%=:\n\t"
/* Round 0 */
"vmov.32 r10, d0[0]\n\t"
"ror %[sha256], r6, #6\n\t"
@@ -3663,7 +3661,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_neon(wc_Sha256* sha256,
}
#else
static const word32 L_SHA256_trans_crypto_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_trans_crypto_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -3690,13 +3688,13 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_crypto(wc_Sha256* sha256_p,
#else
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_crypto(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("r0") = (wc_Sha256*)sha256_p;
register const byte* data asm ("r1") = (const byte*)data_p;
register word32 len asm ("r2") = (word32)len_p;
register word32* L_SHA256_trans_crypto_len_k_c asm ("r3") =
register wc_Sha256* sha256 __asm__ ("r0") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r1") = (const byte*)data_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register word32* L_SHA256_trans_crypto_len_k_c __asm__ ("r3") =
(word32*)&L_SHA256_trans_crypto_len_k;
#else
register word32* L_SHA256_trans_crypto_len_k_c =
@@ -3712,7 +3710,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_crypto(wc_Sha256* sha256,
"vldm %[sha256], {q0-q1}\n\t"
/* Start of loop processing a block */
"\n"
"L_sha256_len_crypto_begin_%=: \n\t"
"L_sha256_len_crypto_begin_%=:\n\t"
/* Load W */
"vld1.8 {q4-q5}, [%[data]]!\n\t"
"vld1.8 {q6-q7}, [%[data]]!\n\t"
+43 -97
View File
@@ -32,59 +32,32 @@
#ifndef WOLFSSL_ARMASM_INLINE
#ifdef WOLFSSL_SHA3
#ifndef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_sha3_arm32_neon_rt, %object
.size L_sha3_arm32_neon_rt, 192
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_arm32_neon_rt:
.word 0x1
.word 0x0
.word 0x8082
.word 0x0
.word 0x808a
.word 0x80000000
.word 0x80008000
.word 0x80000000
.word 0x808b
.word 0x0
.word 0x80000001
.word 0x0
.word 0x80008081
.word 0x80000000
.word 0x8009
.word 0x80000000
.word 0x8a
.word 0x0
.word 0x88
.word 0x0
.word 0x80008009
.word 0x0
.word 0x8000000a
.word 0x0
.word 0x8000808b
.word 0x0
.word 0x8b
.word 0x80000000
.word 0x8089
.word 0x80000000
.word 0x8003
.word 0x80000000
.word 0x8002
.word 0x80000000
.word 0x80
.word 0x80000000
.word 0x800a
.word 0x0
.word 0x8000000a
.word 0x80000000
.word 0x80008081
.word 0x80000000
.word 0x8080
.word 0x80000000
.word 0x80000001
.word 0x0
.word 0x80008008
.word 0x80000000
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
.text
.align 4
.globl BlockSha3
@@ -125,7 +98,7 @@ L_sha3_arm32_neon_begin:
veor d28, d28, d22
veor d29, d29, d23
veor d25, d25, d24
vst1.8 {d25, d26}, [r3]
vst1.8 {d25-d26}, [r3]
# Calc t[0..4] and XOR into s[i*5..i*5+4]
# t[0]
vshr.u64 d30, d27, #63
@@ -353,59 +326,32 @@ L_sha3_arm32_neon_begin:
.size BlockSha3,.-BlockSha3
#endif /* WOLFSSL_ARMASM_NO_NEON */
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_sha3_arm32_rt, %object
.size L_sha3_arm32_rt, 192
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_arm32_rt:
.word 0x1
.word 0x0
.word 0x8082
.word 0x0
.word 0x808a
.word 0x80000000
.word 0x80008000
.word 0x80000000
.word 0x808b
.word 0x0
.word 0x80000001
.word 0x0
.word 0x80008081
.word 0x80000000
.word 0x8009
.word 0x80000000
.word 0x8a
.word 0x0
.word 0x88
.word 0x0
.word 0x80008009
.word 0x0
.word 0x8000000a
.word 0x0
.word 0x8000808b
.word 0x0
.word 0x8b
.word 0x80000000
.word 0x8089
.word 0x80000000
.word 0x8003
.word 0x80000000
.word 0x8002
.word 0x80000000
.word 0x80
.word 0x80000000
.word 0x800a
.word 0x0
.word 0x8000000a
.word 0x80000000
.word 0x80008081
.word 0x80000000
.word 0x8080
.word 0x80000000
.word 0x80000001
.word 0x0
.word 0x80008008
.word 0x80000000
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
.text
.align 4
.globl BlockSha3
+11 -12
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -51,7 +49,7 @@
#ifdef WOLFSSL_SHA3
#ifndef WOLFSSL_ARMASM_NO_NEON
static const word64 L_sha3_arm32_neon_rt[] = {
XALIGNED(16) static const word64 L_sha3_arm32_neon_rt[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
@@ -72,11 +70,11 @@ static const word64 L_sha3_arm32_neon_rt[] = {
WC_OMIT_FRAME_POINTER void BlockSha3(word64* state_p)
#else
WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register word64* state asm ("r0") = (word64*)state_p;
register word64* L_sha3_arm32_neon_rt_c asm ("r1") =
register word64* state __asm__ ("r0") = (word64*)state_p;
register word64* L_sha3_arm32_neon_rt_c __asm__ ("r1") =
(word64*)&L_sha3_arm32_neon_rt;
#else
register word64* L_sha3_arm32_neon_rt_c = (word64*)&L_sha3_arm32_neon_rt;
@@ -96,7 +94,7 @@ WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
"vld1.8 {d24}, [%[state]]\n\t"
"sub %[state], %[state], #0xc0\n\t"
"\n"
"L_sha3_arm32_neon_begin_%=: \n\t"
"L_sha3_arm32_neon_begin_%=:\n\t"
/* Calc b[0..4] */
"veor d26, d0, d5\n\t"
"veor d27, d1, d6\n\t"
@@ -359,7 +357,7 @@ WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
#endif /* WOLFSSL_ARMASM_NO_NEON */
#ifdef WOLFSSL_ARMASM_NO_NEON
static const word64 L_sha3_arm32_rt[] = {
XALIGNED(16) static const word64 L_sha3_arm32_rt[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
@@ -380,11 +378,12 @@ static const word64 L_sha3_arm32_rt[] = {
WC_OMIT_FRAME_POINTER void BlockSha3(word64* state_p)
#else
WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register word64* state asm ("r0") = (word64*)state_p;
register word64* L_sha3_arm32_rt_c asm ("r1") = (word64*)&L_sha3_arm32_rt;
register word64* state __asm__ ("r0") = (word64*)state_p;
register word64* L_sha3_arm32_rt_c __asm__ ("r1") =
(word64*)&L_sha3_arm32_rt;
#else
register word64* L_sha3_arm32_rt_c = (word64*)&L_sha3_arm32_rt;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
@@ -394,7 +393,7 @@ WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
"mov r1, %[L_sha3_arm32_rt]\n\t"
"mov r2, #12\n\t"
"\n"
"L_sha3_arm32_begin_%=: \n\t"
"L_sha3_arm32_begin_%=:\n\t"
"str r2, [sp, #200]\n\t"
/* Round even */
/* Calc b[4] */
+102 -324
View File
@@ -32,171 +32,60 @@
#ifndef WOLFSSL_ARMASM_INLINE
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_SHA512_transform_len_k, %object
.size L_SHA512_transform_len_k, 640
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_SHA512_transform_len_k:
.word 0xd728ae22
.word 0x428a2f98
.word 0x23ef65cd
.word 0x71374491
.word 0xec4d3b2f
.word 0xb5c0fbcf
.word 0x8189dbbc
.word 0xe9b5dba5
.word 0xf348b538
.word 0x3956c25b
.word 0xb605d019
.word 0x59f111f1
.word 0xaf194f9b
.word 0x923f82a4
.word 0xda6d8118
.word 0xab1c5ed5
.word 0xa3030242
.word 0xd807aa98
.word 0x45706fbe
.word 0x12835b01
.word 0x4ee4b28c
.word 0x243185be
.word 0xd5ffb4e2
.word 0x550c7dc3
.word 0xf27b896f
.word 0x72be5d74
.word 0x3b1696b1
.word 0x80deb1fe
.word 0x25c71235
.word 0x9bdc06a7
.word 0xcf692694
.word 0xc19bf174
.word 0x9ef14ad2
.word 0xe49b69c1
.word 0x384f25e3
.word 0xefbe4786
.word 0x8b8cd5b5
.word 0xfc19dc6
.word 0x77ac9c65
.word 0x240ca1cc
.word 0x592b0275
.word 0x2de92c6f
.word 0x6ea6e483
.word 0x4a7484aa
.word 0xbd41fbd4
.word 0x5cb0a9dc
.word 0x831153b5
.word 0x76f988da
.word 0xee66dfab
.word 0x983e5152
.word 0x2db43210
.word 0xa831c66d
.word 0x98fb213f
.word 0xb00327c8
.word 0xbeef0ee4
.word 0xbf597fc7
.word 0x3da88fc2
.word 0xc6e00bf3
.word 0x930aa725
.word 0xd5a79147
.word 0xe003826f
.word 0x6ca6351
.word 0xa0e6e70
.word 0x14292967
.word 0x46d22ffc
.word 0x27b70a85
.word 0x5c26c926
.word 0x2e1b2138
.word 0x5ac42aed
.word 0x4d2c6dfc
.word 0x9d95b3df
.word 0x53380d13
.word 0x8baf63de
.word 0x650a7354
.word 0x3c77b2a8
.word 0x766a0abb
.word 0x47edaee6
.word 0x81c2c92e
.word 0x1482353b
.word 0x92722c85
.word 0x4cf10364
.word 0xa2bfe8a1
.word 0xbc423001
.word 0xa81a664b
.word 0xd0f89791
.word 0xc24b8b70
.word 0x654be30
.word 0xc76c51a3
.word 0xd6ef5218
.word 0xd192e819
.word 0x5565a910
.word 0xd6990624
.word 0x5771202a
.word 0xf40e3585
.word 0x32bbd1b8
.word 0x106aa070
.word 0xb8d2d0c8
.word 0x19a4c116
.word 0x5141ab53
.word 0x1e376c08
.word 0xdf8eeb99
.word 0x2748774c
.word 0xe19b48a8
.word 0x34b0bcb5
.word 0xc5c95a63
.word 0x391c0cb3
.word 0xe3418acb
.word 0x4ed8aa4a
.word 0x7763e373
.word 0x5b9cca4f
.word 0xd6b2b8a3
.word 0x682e6ff3
.word 0x5defb2fc
.word 0x748f82ee
.word 0x43172f60
.word 0x78a5636f
.word 0xa1f0ab72
.word 0x84c87814
.word 0x1a6439ec
.word 0x8cc70208
.word 0x23631e28
.word 0x90befffa
.word 0xde82bde9
.word 0xa4506ceb
.word 0xb2c67915
.word 0xbef9a3f7
.word 0xe372532b
.word 0xc67178f2
.word 0xea26619c
.word 0xca273ece
.word 0x21c0c207
.word 0xd186b8c7
.word 0xcde0eb1e
.word 0xeada7dd6
.word 0xee6ed178
.word 0xf57d4f7f
.word 0x72176fba
.word 0x6f067aa
.word 0xa2c898a6
.word 0xa637dc5
.word 0xbef90dae
.word 0x113f9804
.word 0x131c471b
.word 0x1b710b35
.word 0x23047d84
.word 0x28db77f5
.word 0x40c72493
.word 0x32caab7b
.word 0x15c9bebc
.word 0x3c9ebe0a
.word 0x9c100d4c
.word 0x431d67c4
.word 0xcb3e42b6
.word 0x4cc5d4be
.word 0xfc657e2a
.word 0x597f299c
.word 0x3ad6faec
.word 0x5fcb6fab
.word 0x4a475817
.word 0x6c44198c
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
.text
.align 4
.globl Transform_Sha512_Len_base
@@ -7618,171 +7507,60 @@ L_SHA512_transform_len_start:
.size Transform_Sha512_Len_base,.-Transform_Sha512_Len_base
#endif /* WOLFSSL_ARMASM_NO_NEON */
#ifndef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_SHA512_transform_neon_len_k, %object
.size L_SHA512_transform_neon_len_k, 640
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_SHA512_transform_neon_len_k:
.word 0xd728ae22
.word 0x428a2f98
.word 0x23ef65cd
.word 0x71374491
.word 0xec4d3b2f
.word 0xb5c0fbcf
.word 0x8189dbbc
.word 0xe9b5dba5
.word 0xf348b538
.word 0x3956c25b
.word 0xb605d019
.word 0x59f111f1
.word 0xaf194f9b
.word 0x923f82a4
.word 0xda6d8118
.word 0xab1c5ed5
.word 0xa3030242
.word 0xd807aa98
.word 0x45706fbe
.word 0x12835b01
.word 0x4ee4b28c
.word 0x243185be
.word 0xd5ffb4e2
.word 0x550c7dc3
.word 0xf27b896f
.word 0x72be5d74
.word 0x3b1696b1
.word 0x80deb1fe
.word 0x25c71235
.word 0x9bdc06a7
.word 0xcf692694
.word 0xc19bf174
.word 0x9ef14ad2
.word 0xe49b69c1
.word 0x384f25e3
.word 0xefbe4786
.word 0x8b8cd5b5
.word 0xfc19dc6
.word 0x77ac9c65
.word 0x240ca1cc
.word 0x592b0275
.word 0x2de92c6f
.word 0x6ea6e483
.word 0x4a7484aa
.word 0xbd41fbd4
.word 0x5cb0a9dc
.word 0x831153b5
.word 0x76f988da
.word 0xee66dfab
.word 0x983e5152
.word 0x2db43210
.word 0xa831c66d
.word 0x98fb213f
.word 0xb00327c8
.word 0xbeef0ee4
.word 0xbf597fc7
.word 0x3da88fc2
.word 0xc6e00bf3
.word 0x930aa725
.word 0xd5a79147
.word 0xe003826f
.word 0x6ca6351
.word 0xa0e6e70
.word 0x14292967
.word 0x46d22ffc
.word 0x27b70a85
.word 0x5c26c926
.word 0x2e1b2138
.word 0x5ac42aed
.word 0x4d2c6dfc
.word 0x9d95b3df
.word 0x53380d13
.word 0x8baf63de
.word 0x650a7354
.word 0x3c77b2a8
.word 0x766a0abb
.word 0x47edaee6
.word 0x81c2c92e
.word 0x1482353b
.word 0x92722c85
.word 0x4cf10364
.word 0xa2bfe8a1
.word 0xbc423001
.word 0xa81a664b
.word 0xd0f89791
.word 0xc24b8b70
.word 0x654be30
.word 0xc76c51a3
.word 0xd6ef5218
.word 0xd192e819
.word 0x5565a910
.word 0xd6990624
.word 0x5771202a
.word 0xf40e3585
.word 0x32bbd1b8
.word 0x106aa070
.word 0xb8d2d0c8
.word 0x19a4c116
.word 0x5141ab53
.word 0x1e376c08
.word 0xdf8eeb99
.word 0x2748774c
.word 0xe19b48a8
.word 0x34b0bcb5
.word 0xc5c95a63
.word 0x391c0cb3
.word 0xe3418acb
.word 0x4ed8aa4a
.word 0x7763e373
.word 0x5b9cca4f
.word 0xd6b2b8a3
.word 0x682e6ff3
.word 0x5defb2fc
.word 0x748f82ee
.word 0x43172f60
.word 0x78a5636f
.word 0xa1f0ab72
.word 0x84c87814
.word 0x1a6439ec
.word 0x8cc70208
.word 0x23631e28
.word 0x90befffa
.word 0xde82bde9
.word 0xa4506ceb
.word 0xb2c67915
.word 0xbef9a3f7
.word 0xe372532b
.word 0xc67178f2
.word 0xea26619c
.word 0xca273ece
.word 0x21c0c207
.word 0xd186b8c7
.word 0xcde0eb1e
.word 0xeada7dd6
.word 0xee6ed178
.word 0xf57d4f7f
.word 0x72176fba
.word 0x6f067aa
.word 0xa2c898a6
.word 0xa637dc5
.word 0xbef90dae
.word 0x113f9804
.word 0x131c471b
.word 0x1b710b35
.word 0x23047d84
.word 0x28db77f5
.word 0x40c72493
.word 0x32caab7b
.word 0x15c9bebc
.word 0x3c9ebe0a
.word 0x9c100d4c
.word 0x431d67c4
.word 0xcb3e42b6
.word 0x4cc5d4be
.word 0xfc657e2a
.word 0x597f299c
.word 0x3ad6faec
.word 0x5fcb6fab
.word 0x4a475817
.word 0x6c44198c
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
.text
.align 4
.fpu neon
@@ -7796,10 +7574,10 @@ Transform_Sha512_Len_neon:
# Start of loop processing a block
L_SHA512_transform_neon_len_begin:
# Load W
vld1.8 {q8, q9}, [r1]!
vld1.8 {q10, q11}, [r1]!
vld1.8 {q12, q13}, [r1]!
vld1.8 {q14, q15}, [r1]!
vld1.8 {q8-q9}, [r1]!
vld1.8 {q10-q11}, [r1]!
vld1.8 {q12-q13}, [r1]!
vld1.8 {q14-q15}, [r1]!
#ifndef WOLFSSL_ARM_ARCH_NEON_64BIT
vrev64.8 q8, q8
vrev64.8 q9, q9
+16 -18
View File
@@ -30,8 +30,6 @@
#ifdef WOLFSSL_ARMASM
#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_ARMASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -53,7 +51,7 @@
#include <wolfssl/wolfcrypt/sha512.h>
#ifdef WOLFSSL_ARMASM_NO_NEON
static const word64 L_SHA512_transform_len_k[] = {
XALIGNED(16) static const word64 L_SHA512_transform_len_k[] = {
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL, 0x59f111f1b605d019UL,
@@ -104,13 +102,13 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512_p,
#else
WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
register const byte* data asm ("r1") = (const byte*)data_p;
register word32 len asm ("r2") = (word32)len_p;
register word64* L_SHA512_transform_len_k_c asm ("r3") =
register wc_Sha512* sha512 __asm__ ("r0") = (wc_Sha512*)sha512_p;
register const byte* data __asm__ ("r1") = (const byte*)data_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register word64* L_SHA512_transform_len_k_c __asm__ ("r3") =
(word64*)&L_SHA512_transform_len_k;
#else
register word64* L_SHA512_transform_len_k_c =
@@ -218,7 +216,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
#endif
/* Start of loop processing a block */
"\n"
"L_SHA512_transform_len_begin_%=: \n\t"
"L_SHA512_transform_len_begin_%=:\n\t"
/* Load, Reverse and Store W - 64 bytes */
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
"ldr r4, [%[data]]\n\t"
@@ -529,7 +527,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
"mov r12, #4\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA512_transform_len_start_%=: \n\t"
"L_SHA512_transform_len_start_%=:\n\t"
/* Round 0 */
#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
"ldr r4, [%[sha512], #32]\n\t"
@@ -7549,7 +7547,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
#include <wolfssl/wolfcrypt/sha512.h>
#ifndef WOLFSSL_ARMASM_NO_NEON
static const word64 L_SHA512_transform_neon_len_k[] = {
XALIGNED(16) static const word64 L_SHA512_transform_neon_len_k[] = {
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL, 0x59f111f1b605d019UL,
@@ -7600,13 +7598,13 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_neon(wc_Sha512* sha512_p,
#else
WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_neon(wc_Sha512* sha512,
const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha512* sha512 asm ("r0") = (wc_Sha512*)sha512_p;
register const byte* data asm ("r1") = (const byte*)data_p;
register word32 len asm ("r2") = (word32)len_p;
register word64* L_SHA512_transform_neon_len_k_c asm ("r3") =
register wc_Sha512* sha512 __asm__ ("r0") = (wc_Sha512*)sha512_p;
register const byte* data __asm__ ("r1") = (const byte*)data_p;
register word32 len __asm__ ("r2") = (word32)len_p;
register word64* L_SHA512_transform_neon_len_k_c __asm__ ("r3") =
(word64*)&L_SHA512_transform_neon_len_k;
#else
register word64* L_SHA512_transform_neon_len_k_c =
@@ -7619,7 +7617,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_neon(wc_Sha512* sha512,
"vldm.64 %[sha512], {d0-d7}\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA512_transform_neon_len_begin_%=: \n\t"
"L_SHA512_transform_neon_len_begin_%=:\n\t"
/* Load W */
"vld1.8 {q8-q9}, [%[data]]!\n\t"
"vld1.8 {q10-q11}, [%[data]]!\n\t"
@@ -7655,7 +7653,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_neon(wc_Sha512* sha512,
"mov r12, #4\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA512_transform_neon_len_start_%=: \n\t"
"L_SHA512_transform_neon_len_start_%=:\n\t"
/* Round 0 */
"vld1.64 {d12}, [r3:64]!\n\t"
"vshl.u64 d8, d4, #50\n\t"
+172 -584
View File
@@ -43123,16 +43123,17 @@ L_aes_xts_decrypt_arm64_crypto_done:
defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
#ifndef __APPLE__
.text
.type L_AES_ARM64_NEON_te, %object
.section .rodata
.type L_AES_ARM64_NEON_te, %object
.size L_AES_ARM64_NEON_te, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_NEON_te:
.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
@@ -43169,16 +43170,17 @@ L_AES_ARM64_NEON_te:
.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
#ifndef __APPLE__
.text
.type L_AES_ARM64_NEON_shift_rows_shuffle, %object
.section .rodata
.type L_AES_ARM64_NEON_shift_rows_shuffle, %object
.size L_AES_ARM64_NEON_shift_rows_shuffle, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_NEON_shift_rows_shuffle:
.byte 0x0c,0x09,0x06,0x03,0x00,0x0d,0x0a,0x07
@@ -43249,28 +43251,22 @@ L_AES_invert_key_NEON_mix_loop:
#endif /* HAVE_AES_DECRYPT */
#ifndef __APPLE__
.text
.type L_AES_ARM64_NEON_rcon, %object
.section .rodata
.type L_AES_ARM64_NEON_rcon, %object
.size L_AES_ARM64_NEON_rcon, 40
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_NEON_rcon:
.word 0x01000000
.word 0x02000000
.word 0x04000000
.word 0x08000000
.word 0x10000000
.word 0x20000000
.word 0x40000000
.word 0x80000000
.word 0x1b000000
.word 0x36000000
.long 0x01000000,0x02000000,0x04000000,0x08000000
.long 0x10000000,0x20000000,0x40000000,0x80000000
.long 0x1b000000,0x36000000
#ifndef __APPLE__
.text
.globl AES_set_encrypt_key_NEON
@@ -45307,16 +45303,17 @@ L_AES_CTR_encrypt_NEON_data_done:
defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
#ifndef __APPLE__
.text
.type L_AES_ARM64_NEON_td, %object
.section .rodata
.type L_AES_ARM64_NEON_td, %object
.size L_AES_ARM64_NEON_td, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_NEON_td:
.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
@@ -45353,16 +45350,17 @@ L_AES_ARM64_NEON_td:
.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
#ifndef __APPLE__
.text
.type L_AES_ARM64_NEON_shift_rows_invshuffle, %object
.section .rodata
.type L_AES_ARM64_NEON_shift_rows_invshuffle, %object
.size L_AES_ARM64_NEON_shift_rows_invshuffle, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_NEON_shift_rows_invshuffle:
.byte 0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07
@@ -51289,548 +51287,166 @@ L_AES_XTS_decrypt_NEON_data_done:
#ifdef HAVE_AES_DECRYPT
#ifndef __APPLE__
.text
.type L_AES_ARM64_td, %object
.section .rodata
.type L_AES_ARM64_td, %object
.size L_AES_ARM64_td, 1024
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_td:
.word 0x5051f4a7
.word 0x537e4165
.word 0xc31a17a4
.word 0x963a275e
.word 0xcb3bab6b
.word 0xf11f9d45
.word 0xabacfa58
.word 0x934be303
.word 0x552030fa
.word 0xf6ad766d
.word 0x9188cc76
.word 0x25f5024c
.word 0xfc4fe5d7
.word 0xd7c52acb
.word 0x80263544
.word 0x8fb562a3
.word 0x49deb15a
.word 0x6725ba1b
.word 0x9845ea0e
.word 0xe15dfec0
.word 0x02c32f75
.word 0x12814cf0
.word 0xa38d4697
.word 0xc66bd3f9
.word 0xe7038f5f
.word 0x9515929c
.word 0xebbf6d7a
.word 0xda955259
.word 0x2dd4be83
.word 0xd3587421
.word 0x2949e069
.word 0x448ec9c8
.word 0x6a75c289
.word 0x78f48e79
.word 0x6b99583e
.word 0xdd27b971
.word 0xb6bee14f
.word 0x17f088ad
.word 0x66c920ac
.word 0xb47dce3a
.word 0x1863df4a
.word 0x82e51a31
.word 0x60975133
.word 0x4562537f
.word 0xe0b16477
.word 0x84bb6bae
.word 0x1cfe81a0
.word 0x94f9082b
.word 0x58704868
.word 0x198f45fd
.word 0x8794de6c
.word 0xb7527bf8
.word 0x23ab73d3
.word 0xe2724b02
.word 0x57e31f8f
.word 0x2a6655ab
.word 0x07b2eb28
.word 0x032fb5c2
.word 0x9a86c57b
.word 0xa5d33708
.word 0xf2302887
.word 0xb223bfa5
.word 0xba02036a
.word 0x5ced1682
.word 0x2b8acf1c
.word 0x92a779b4
.word 0xf0f307f2
.word 0xa14e69e2
.word 0xcd65daf4
.word 0xd50605be
.word 0x1fd13462
.word 0x8ac4a6fe
.word 0x9d342e53
.word 0xa0a2f355
.word 0x32058ae1
.word 0x75a4f6eb
.word 0x390b83ec
.word 0xaa4060ef
.word 0x065e719f
.word 0x51bd6e10
.word 0xf93e218a
.word 0x3d96dd06
.word 0xaedd3e05
.word 0x464de6bd
.word 0xb591548d
.word 0x0571c45d
.word 0x6f0406d4
.word 0xff605015
.word 0x241998fb
.word 0x97d6bde9
.word 0xcc894043
.word 0x7767d99e
.word 0xbdb0e842
.word 0x8807898b
.word 0x38e7195b
.word 0xdb79c8ee
.word 0x47a17c0a
.word 0xe97c420f
.word 0xc9f8841e
.word 0x00000000
.word 0x83098086
.word 0x48322bed
.word 0xac1e1170
.word 0x4e6c5a72
.word 0xfbfd0eff
.word 0x560f8538
.word 0x1e3daed5
.word 0x27362d39
.word 0x640a0fd9
.word 0x21685ca6
.word 0xd19b5b54
.word 0x3a24362e
.word 0xb10c0a67
.word 0x0f9357e7
.word 0xd2b4ee96
.word 0x9e1b9b91
.word 0x4f80c0c5
.word 0xa261dc20
.word 0x695a774b
.word 0x161c121a
.word 0x0ae293ba
.word 0xe5c0a02a
.word 0x433c22e0
.word 0x1d121b17
.word 0x0b0e090d
.word 0xadf28bc7
.word 0xb92db6a8
.word 0xc8141ea9
.word 0x8557f119
.word 0x4caf7507
.word 0xbbee99dd
.word 0xfda37f60
.word 0x9ff70126
.word 0xbc5c72f5
.word 0xc544663b
.word 0x345bfb7e
.word 0x768b4329
.word 0xdccb23c6
.word 0x68b6edfc
.word 0x63b8e4f1
.word 0xcad731dc
.word 0x10426385
.word 0x40139722
.word 0x2084c611
.word 0x7d854a24
.word 0xf8d2bb3d
.word 0x11aef932
.word 0x6dc729a1
.word 0x4b1d9e2f
.word 0xf3dcb230
.word 0xec0d8652
.word 0xd077c1e3
.word 0x6c2bb316
.word 0x99a970b9
.word 0xfa119448
.word 0x2247e964
.word 0xc4a8fc8c
.word 0x1aa0f03f
.word 0xd8567d2c
.word 0xef223390
.word 0xc787494e
.word 0xc1d938d1
.word 0xfe8ccaa2
.word 0x3698d40b
.word 0xcfa6f581
.word 0x28a57ade
.word 0x26dab78e
.word 0xa43fadbf
.word 0xe42c3a9d
.word 0x0d507892
.word 0x9b6a5fcc
.word 0x62547e46
.word 0xc2f68d13
.word 0xe890d8b8
.word 0x5e2e39f7
.word 0xf582c3af
.word 0xbe9f5d80
.word 0x7c69d093
.word 0xa96fd52d
.word 0xb3cf2512
.word 0x3bc8ac99
.word 0xa710187d
.word 0x6ee89c63
.word 0x7bdb3bbb
.word 0x09cd2678
.word 0xf46e5918
.word 0x01ec9ab7
.word 0xa8834f9a
.word 0x65e6956e
.word 0x7eaaffe6
.word 0x0821bccf
.word 0xe6ef15e8
.word 0xd9bae79b
.word 0xce4a6f36
.word 0xd4ea9f09
.word 0xd629b07c
.word 0xaf31a4b2
.word 0x312a3f23
.word 0x30c6a594
.word 0xc035a266
.word 0x37744ebc
.word 0xa6fc82ca
.word 0xb0e090d0
.word 0x1533a7d8
.word 0x4af10498
.word 0xf741ecda
.word 0x0e7fcd50
.word 0x2f1791f6
.word 0x8d764dd6
.word 0x4d43efb0
.word 0x54ccaa4d
.word 0xdfe49604
.word 0xe39ed1b5
.word 0x1b4c6a88
.word 0xb8c12c1f
.word 0x7f466551
.word 0x049d5eea
.word 0x5d018c35
.word 0x73fa8774
.word 0x2efb0b41
.word 0x5ab3671d
.word 0x5292dbd2
.word 0x33e91056
.word 0x136dd647
.word 0x8c9ad761
.word 0x7a37a10c
.word 0x8e59f814
.word 0x89eb133c
.word 0xeecea927
.word 0x35b761c9
.word 0xede11ce5
.word 0x3c7a47b1
.word 0x599cd2df
.word 0x3f55f273
.word 0x791814ce
.word 0xbf73c737
.word 0xea53f7cd
.word 0x5b5ffdaa
.word 0x14df3d6f
.word 0x867844db
.word 0x81caaff3
.word 0x3eb968c4
.word 0x2c382434
.word 0x5fc2a340
.word 0x72161dc3
.word 0x0cbce225
.word 0x8b283c49
.word 0x41ff0d95
.word 0x7139a801
.word 0xde080cb3
.word 0x9cd8b4e4
.word 0x906456c1
.word 0x617bcb84
.word 0x70d532b6
.word 0x74486c5c
.word 0x42d0b857
.long 0x5051f4a7,0x537e4165,0xc31a17a4,0x963a275e
.long 0xcb3bab6b,0xf11f9d45,0xabacfa58,0x934be303
.long 0x552030fa,0xf6ad766d,0x9188cc76,0x25f5024c
.long 0xfc4fe5d7,0xd7c52acb,0x80263544,0x8fb562a3
.long 0x49deb15a,0x6725ba1b,0x9845ea0e,0xe15dfec0
.long 0x02c32f75,0x12814cf0,0xa38d4697,0xc66bd3f9
.long 0xe7038f5f,0x9515929c,0xebbf6d7a,0xda955259
.long 0x2dd4be83,0xd3587421,0x2949e069,0x448ec9c8
.long 0x6a75c289,0x78f48e79,0x6b99583e,0xdd27b971
.long 0xb6bee14f,0x17f088ad,0x66c920ac,0xb47dce3a
.long 0x1863df4a,0x82e51a31,0x60975133,0x4562537f
.long 0xe0b16477,0x84bb6bae,0x1cfe81a0,0x94f9082b
.long 0x58704868,0x198f45fd,0x8794de6c,0xb7527bf8
.long 0x23ab73d3,0xe2724b02,0x57e31f8f,0x2a6655ab
.long 0x07b2eb28,0x032fb5c2,0x9a86c57b,0xa5d33708
.long 0xf2302887,0xb223bfa5,0xba02036a,0x5ced1682
.long 0x2b8acf1c,0x92a779b4,0xf0f307f2,0xa14e69e2
.long 0xcd65daf4,0xd50605be,0x1fd13462,0x8ac4a6fe
.long 0x9d342e53,0xa0a2f355,0x32058ae1,0x75a4f6eb
.long 0x390b83ec,0xaa4060ef,0x065e719f,0x51bd6e10
.long 0xf93e218a,0x3d96dd06,0xaedd3e05,0x464de6bd
.long 0xb591548d,0x0571c45d,0x6f0406d4,0xff605015
.long 0x241998fb,0x97d6bde9,0xcc894043,0x7767d99e
.long 0xbdb0e842,0x8807898b,0x38e7195b,0xdb79c8ee
.long 0x47a17c0a,0xe97c420f,0xc9f8841e,0x00000000
.long 0x83098086,0x48322bed,0xac1e1170,0x4e6c5a72
.long 0xfbfd0eff,0x560f8538,0x1e3daed5,0x27362d39
.long 0x640a0fd9,0x21685ca6,0xd19b5b54,0x3a24362e
.long 0xb10c0a67,0x0f9357e7,0xd2b4ee96,0x9e1b9b91
.long 0x4f80c0c5,0xa261dc20,0x695a774b,0x161c121a
.long 0x0ae293ba,0xe5c0a02a,0x433c22e0,0x1d121b17
.long 0x0b0e090d,0xadf28bc7,0xb92db6a8,0xc8141ea9
.long 0x8557f119,0x4caf7507,0xbbee99dd,0xfda37f60
.long 0x9ff70126,0xbc5c72f5,0xc544663b,0x345bfb7e
.long 0x768b4329,0xdccb23c6,0x68b6edfc,0x63b8e4f1
.long 0xcad731dc,0x10426385,0x40139722,0x2084c611
.long 0x7d854a24,0xf8d2bb3d,0x11aef932,0x6dc729a1
.long 0x4b1d9e2f,0xf3dcb230,0xec0d8652,0xd077c1e3
.long 0x6c2bb316,0x99a970b9,0xfa119448,0x2247e964
.long 0xc4a8fc8c,0x1aa0f03f,0xd8567d2c,0xef223390
.long 0xc787494e,0xc1d938d1,0xfe8ccaa2,0x3698d40b
.long 0xcfa6f581,0x28a57ade,0x26dab78e,0xa43fadbf
.long 0xe42c3a9d,0x0d507892,0x9b6a5fcc,0x62547e46
.long 0xc2f68d13,0xe890d8b8,0x5e2e39f7,0xf582c3af
.long 0xbe9f5d80,0x7c69d093,0xa96fd52d,0xb3cf2512
.long 0x3bc8ac99,0xa710187d,0x6ee89c63,0x7bdb3bbb
.long 0x09cd2678,0xf46e5918,0x01ec9ab7,0xa8834f9a
.long 0x65e6956e,0x7eaaffe6,0x0821bccf,0xe6ef15e8
.long 0xd9bae79b,0xce4a6f36,0xd4ea9f09,0xd629b07c
.long 0xaf31a4b2,0x312a3f23,0x30c6a594,0xc035a266
.long 0x37744ebc,0xa6fc82ca,0xb0e090d0,0x1533a7d8
.long 0x4af10498,0xf741ecda,0x0e7fcd50,0x2f1791f6
.long 0x8d764dd6,0x4d43efb0,0x54ccaa4d,0xdfe49604
.long 0xe39ed1b5,0x1b4c6a88,0xb8c12c1f,0x7f466551
.long 0x049d5eea,0x5d018c35,0x73fa8774,0x2efb0b41
.long 0x5ab3671d,0x5292dbd2,0x33e91056,0x136dd647
.long 0x8c9ad761,0x7a37a10c,0x8e59f814,0x89eb133c
.long 0xeecea927,0x35b761c9,0xede11ce5,0x3c7a47b1
.long 0x599cd2df,0x3f55f273,0x791814ce,0xbf73c737
.long 0xea53f7cd,0x5b5ffdaa,0x14df3d6f,0x867844db
.long 0x81caaff3,0x3eb968c4,0x2c382434,0x5fc2a340
.long 0x72161dc3,0x0cbce225,0x8b283c49,0x41ff0d95
.long 0x7139a801,0xde080cb3,0x9cd8b4e4,0x906456c1
.long 0x617bcb84,0x70d532b6,0x74486c5c,0x42d0b857
#endif /* HAVE_AES_DECRYPT */
#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
#ifndef __APPLE__
.text
.type L_AES_ARM64_te, %object
.section .rodata
.type L_AES_ARM64_te, %object
.size L_AES_ARM64_te, 1024
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_te:
.word 0xa5c66363
.word 0x84f87c7c
.word 0x99ee7777
.word 0x8df67b7b
.word 0x0dfff2f2
.word 0xbdd66b6b
.word 0xb1de6f6f
.word 0x5491c5c5
.word 0x50603030
.word 0x03020101
.word 0xa9ce6767
.word 0x7d562b2b
.word 0x19e7fefe
.word 0x62b5d7d7
.word 0xe64dabab
.word 0x9aec7676
.word 0x458fcaca
.word 0x9d1f8282
.word 0x4089c9c9
.word 0x87fa7d7d
.word 0x15effafa
.word 0xebb25959
.word 0xc98e4747
.word 0x0bfbf0f0
.word 0xec41adad
.word 0x67b3d4d4
.word 0xfd5fa2a2
.word 0xea45afaf
.word 0xbf239c9c
.word 0xf753a4a4
.word 0x96e47272
.word 0x5b9bc0c0
.word 0xc275b7b7
.word 0x1ce1fdfd
.word 0xae3d9393
.word 0x6a4c2626
.word 0x5a6c3636
.word 0x417e3f3f
.word 0x02f5f7f7
.word 0x4f83cccc
.word 0x5c683434
.word 0xf451a5a5
.word 0x34d1e5e5
.word 0x08f9f1f1
.word 0x93e27171
.word 0x73abd8d8
.word 0x53623131
.word 0x3f2a1515
.word 0x0c080404
.word 0x5295c7c7
.word 0x65462323
.word 0x5e9dc3c3
.word 0x28301818
.word 0xa1379696
.word 0x0f0a0505
.word 0xb52f9a9a
.word 0x090e0707
.word 0x36241212
.word 0x9b1b8080
.word 0x3ddfe2e2
.word 0x26cdebeb
.word 0x694e2727
.word 0xcd7fb2b2
.word 0x9fea7575
.word 0x1b120909
.word 0x9e1d8383
.word 0x74582c2c
.word 0x2e341a1a
.word 0x2d361b1b
.word 0xb2dc6e6e
.word 0xeeb45a5a
.word 0xfb5ba0a0
.word 0xf6a45252
.word 0x4d763b3b
.word 0x61b7d6d6
.word 0xce7db3b3
.word 0x7b522929
.word 0x3edde3e3
.word 0x715e2f2f
.word 0x97138484
.word 0xf5a65353
.word 0x68b9d1d1
.word 0x00000000
.word 0x2cc1eded
.word 0x60402020
.word 0x1fe3fcfc
.word 0xc879b1b1
.word 0xedb65b5b
.word 0xbed46a6a
.word 0x468dcbcb
.word 0xd967bebe
.word 0x4b723939
.word 0xde944a4a
.word 0xd4984c4c
.word 0xe8b05858
.word 0x4a85cfcf
.word 0x6bbbd0d0
.word 0x2ac5efef
.word 0xe54faaaa
.word 0x16edfbfb
.word 0xc5864343
.word 0xd79a4d4d
.word 0x55663333
.word 0x94118585
.word 0xcf8a4545
.word 0x10e9f9f9
.word 0x06040202
.word 0x81fe7f7f
.word 0xf0a05050
.word 0x44783c3c
.word 0xba259f9f
.word 0xe34ba8a8
.word 0xf3a25151
.word 0xfe5da3a3
.word 0xc0804040
.word 0x8a058f8f
.word 0xad3f9292
.word 0xbc219d9d
.word 0x48703838
.word 0x04f1f5f5
.word 0xdf63bcbc
.word 0xc177b6b6
.word 0x75afdada
.word 0x63422121
.word 0x30201010
.word 0x1ae5ffff
.word 0x0efdf3f3
.word 0x6dbfd2d2
.word 0x4c81cdcd
.word 0x14180c0c
.word 0x35261313
.word 0x2fc3ecec
.word 0xe1be5f5f
.word 0xa2359797
.word 0xcc884444
.word 0x392e1717
.word 0x5793c4c4
.word 0xf255a7a7
.word 0x82fc7e7e
.word 0x477a3d3d
.word 0xacc86464
.word 0xe7ba5d5d
.word 0x2b321919
.word 0x95e67373
.word 0xa0c06060
.word 0x98198181
.word 0xd19e4f4f
.word 0x7fa3dcdc
.word 0x66442222
.word 0x7e542a2a
.word 0xab3b9090
.word 0x830b8888
.word 0xca8c4646
.word 0x29c7eeee
.word 0xd36bb8b8
.word 0x3c281414
.word 0x79a7dede
.word 0xe2bc5e5e
.word 0x1d160b0b
.word 0x76addbdb
.word 0x3bdbe0e0
.word 0x56643232
.word 0x4e743a3a
.word 0x1e140a0a
.word 0xdb924949
.word 0x0a0c0606
.word 0x6c482424
.word 0xe4b85c5c
.word 0x5d9fc2c2
.word 0x6ebdd3d3
.word 0xef43acac
.word 0xa6c46262
.word 0xa8399191
.word 0xa4319595
.word 0x37d3e4e4
.word 0x8bf27979
.word 0x32d5e7e7
.word 0x438bc8c8
.word 0x596e3737
.word 0xb7da6d6d
.word 0x8c018d8d
.word 0x64b1d5d5
.word 0xd29c4e4e
.word 0xe049a9a9
.word 0xb4d86c6c
.word 0xfaac5656
.word 0x07f3f4f4
.word 0x25cfeaea
.word 0xafca6565
.word 0x8ef47a7a
.word 0xe947aeae
.word 0x18100808
.word 0xd56fbaba
.word 0x88f07878
.word 0x6f4a2525
.word 0x725c2e2e
.word 0x24381c1c
.word 0xf157a6a6
.word 0xc773b4b4
.word 0x5197c6c6
.word 0x23cbe8e8
.word 0x7ca1dddd
.word 0x9ce87474
.word 0x213e1f1f
.word 0xdd964b4b
.word 0xdc61bdbd
.word 0x860d8b8b
.word 0x850f8a8a
.word 0x90e07070
.word 0x427c3e3e
.word 0xc471b5b5
.word 0xaacc6666
.word 0xd8904848
.word 0x05060303
.word 0x01f7f6f6
.word 0x121c0e0e
.word 0xa3c26161
.word 0x5f6a3535
.word 0xf9ae5757
.word 0xd069b9b9
.word 0x91178686
.word 0x5899c1c1
.word 0x273a1d1d
.word 0xb9279e9e
.word 0x38d9e1e1
.word 0x13ebf8f8
.word 0xb32b9898
.word 0x33221111
.word 0xbbd26969
.word 0x70a9d9d9
.word 0x89078e8e
.word 0xa7339494
.word 0xb62d9b9b
.word 0x223c1e1e
.word 0x92158787
.word 0x20c9e9e9
.word 0x4987cece
.word 0xffaa5555
.word 0x78502828
.word 0x7aa5dfdf
.word 0x8f038c8c
.word 0xf859a1a1
.word 0x80098989
.word 0x171a0d0d
.word 0xda65bfbf
.word 0x31d7e6e6
.word 0xc6844242
.word 0xb8d06868
.word 0xc3824141
.word 0xb0299999
.word 0x775a2d2d
.word 0x111e0f0f
.word 0xcb7bb0b0
.word 0xfca85454
.word 0xd66dbbbb
.word 0x3a2c1616
.long 0xa5c66363,0x84f87c7c,0x99ee7777,0x8df67b7b
.long 0x0dfff2f2,0xbdd66b6b,0xb1de6f6f,0x5491c5c5
.long 0x50603030,0x03020101,0xa9ce6767,0x7d562b2b
.long 0x19e7fefe,0x62b5d7d7,0xe64dabab,0x9aec7676
.long 0x458fcaca,0x9d1f8282,0x4089c9c9,0x87fa7d7d
.long 0x15effafa,0xebb25959,0xc98e4747,0x0bfbf0f0
.long 0xec41adad,0x67b3d4d4,0xfd5fa2a2,0xea45afaf
.long 0xbf239c9c,0xf753a4a4,0x96e47272,0x5b9bc0c0
.long 0xc275b7b7,0x1ce1fdfd,0xae3d9393,0x6a4c2626
.long 0x5a6c3636,0x417e3f3f,0x02f5f7f7,0x4f83cccc
.long 0x5c683434,0xf451a5a5,0x34d1e5e5,0x08f9f1f1
.long 0x93e27171,0x73abd8d8,0x53623131,0x3f2a1515
.long 0x0c080404,0x5295c7c7,0x65462323,0x5e9dc3c3
.long 0x28301818,0xa1379696,0x0f0a0505,0xb52f9a9a
.long 0x090e0707,0x36241212,0x9b1b8080,0x3ddfe2e2
.long 0x26cdebeb,0x694e2727,0xcd7fb2b2,0x9fea7575
.long 0x1b120909,0x9e1d8383,0x74582c2c,0x2e341a1a
.long 0x2d361b1b,0xb2dc6e6e,0xeeb45a5a,0xfb5ba0a0
.long 0xf6a45252,0x4d763b3b,0x61b7d6d6,0xce7db3b3
.long 0x7b522929,0x3edde3e3,0x715e2f2f,0x97138484
.long 0xf5a65353,0x68b9d1d1,0x00000000,0x2cc1eded
.long 0x60402020,0x1fe3fcfc,0xc879b1b1,0xedb65b5b
.long 0xbed46a6a,0x468dcbcb,0xd967bebe,0x4b723939
.long 0xde944a4a,0xd4984c4c,0xe8b05858,0x4a85cfcf
.long 0x6bbbd0d0,0x2ac5efef,0xe54faaaa,0x16edfbfb
.long 0xc5864343,0xd79a4d4d,0x55663333,0x94118585
.long 0xcf8a4545,0x10e9f9f9,0x06040202,0x81fe7f7f
.long 0xf0a05050,0x44783c3c,0xba259f9f,0xe34ba8a8
.long 0xf3a25151,0xfe5da3a3,0xc0804040,0x8a058f8f
.long 0xad3f9292,0xbc219d9d,0x48703838,0x04f1f5f5
.long 0xdf63bcbc,0xc177b6b6,0x75afdada,0x63422121
.long 0x30201010,0x1ae5ffff,0x0efdf3f3,0x6dbfd2d2
.long 0x4c81cdcd,0x14180c0c,0x35261313,0x2fc3ecec
.long 0xe1be5f5f,0xa2359797,0xcc884444,0x392e1717
.long 0x5793c4c4,0xf255a7a7,0x82fc7e7e,0x477a3d3d
.long 0xacc86464,0xe7ba5d5d,0x2b321919,0x95e67373
.long 0xa0c06060,0x98198181,0xd19e4f4f,0x7fa3dcdc
.long 0x66442222,0x7e542a2a,0xab3b9090,0x830b8888
.long 0xca8c4646,0x29c7eeee,0xd36bb8b8,0x3c281414
.long 0x79a7dede,0xe2bc5e5e,0x1d160b0b,0x76addbdb
.long 0x3bdbe0e0,0x56643232,0x4e743a3a,0x1e140a0a
.long 0xdb924949,0x0a0c0606,0x6c482424,0xe4b85c5c
.long 0x5d9fc2c2,0x6ebdd3d3,0xef43acac,0xa6c46262
.long 0xa8399191,0xa4319595,0x37d3e4e4,0x8bf27979
.long 0x32d5e7e7,0x438bc8c8,0x596e3737,0xb7da6d6d
.long 0x8c018d8d,0x64b1d5d5,0xd29c4e4e,0xe049a9a9
.long 0xb4d86c6c,0xfaac5656,0x07f3f4f4,0x25cfeaea
.long 0xafca6565,0x8ef47a7a,0xe947aeae,0x18100808
.long 0xd56fbaba,0x88f07878,0x6f4a2525,0x725c2e2e
.long 0x24381c1c,0xf157a6a6,0xc773b4b4,0x5197c6c6
.long 0x23cbe8e8,0x7ca1dddd,0x9ce87474,0x213e1f1f
.long 0xdd964b4b,0xdc61bdbd,0x860d8b8b,0x850f8a8a
.long 0x90e07070,0x427c3e3e,0xc471b5b5,0xaacc6666
.long 0xd8904848,0x05060303,0x01f7f6f6,0x121c0e0e
.long 0xa3c26161,0x5f6a3535,0xf9ae5757,0xd069b9b9
.long 0x91178686,0x5899c1c1,0x273a1d1d,0xb9279e9e
.long 0x38d9e1e1,0x13ebf8f8,0xb32b9898,0x33221111
.long 0xbbd26969,0x70a9d9d9,0x89078e8e,0xa7339494
.long 0xb62d9b9b,0x223c1e1e,0x92158787,0x20c9e9e9
.long 0x4987cece,0xffaa5555,0x78502828,0x7aa5dfdf
.long 0x8f038c8c,0xf859a1a1,0x80098989,0x171a0d0d
.long 0xda65bfbf,0x31d7e6e6,0xc6844242,0xb8d06868
.long 0xc3824141,0xb0299999,0x775a2d2d,0x111e0f0f
.long 0xcb7bb0b0,0xfca85454,0xd66dbbbb,0x3a2c1616
#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
#ifdef HAVE_AES_DECRYPT
@@ -51969,28 +51585,22 @@ L_AES_invert_key_mix_loop:
#endif /* HAVE_AES_DECRYPT */
#ifndef __APPLE__
.text
.type L_AES_ARM64_rcon, %object
.section .rodata
.type L_AES_ARM64_rcon, %object
.size L_AES_ARM64_rcon, 40
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_rcon:
.word 0x01000000
.word 0x02000000
.word 0x04000000
.word 0x08000000
.word 0x10000000
.word 0x20000000
.word 0x40000000
.word 0x80000000
.word 0x1b000000
.word 0x36000000
.long 0x01000000,0x02000000,0x04000000,0x08000000
.long 0x10000000,0x20000000,0x40000000,0x80000000
.long 0x1b000000,0x36000000
#ifndef __APPLE__
.text
.globl AES_set_encrypt_key
@@ -53270,16 +52880,17 @@ L_AES_CTR_encrypt_loop_nr:
defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
#ifndef __APPLE__
.text
.type L_AES_ARM64_td4, %object
.section .rodata
.type L_AES_ARM64_td4, %object
.size L_AES_ARM64_td4, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_AES_ARM64_td4:
.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
@@ -54230,50 +53841,27 @@ L_AES_CBC_decrypt_end_dec:
#ifdef HAVE_AESGCM
#ifndef __APPLE__
.text
.type L_GCM_gmult_len_r, %object
.section .rodata
.type L_GCM_gmult_len_r, %object
.size L_GCM_gmult_len_r, 128
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_GCM_gmult_len_r:
.word 0x00000000
.word 0x1c200000
.word 0x38400000
.word 0x24600000
.word 0x70800000
.word 0x6ca00000
.word 0x48c00000
.word 0x54e00000
.word 0xe1000000
.word 0xfd200000
.word 0xd9400000
.word 0xc5600000
.word 0x91800000
.word 0x8da00000
.word 0xa9c00000
.word 0xb5e00000
.word 0x00000000
.word 0x01c20000
.word 0x03840000
.word 0x02460000
.word 0x07080000
.word 0x06ca0000
.word 0x048c0000
.word 0x054e0000
.word 0x0e100000
.word 0x0fd20000
.word 0x0d940000
.word 0x0c560000
.word 0x09180000
.word 0x08da0000
.word 0x0a9c0000
.word 0x0b5e0000
.long 0x00000000,0x1c200000,0x38400000,0x24600000
.long 0x70800000,0x6ca00000,0x48c00000,0x54e00000
.long 0xe1000000,0xfd200000,0xd9400000,0xc5600000
.long 0x91800000,0x8da00000,0xa9c00000,0xb5e00000
.long 0x00000000,0x01c20000,0x03840000,0x02460000
.long 0x07080000,0x06ca0000,0x048c0000,0x054e0000
.long 0x0e100000,0x0fd20000,0x0d940000,0x0c560000
.long 0x09180000,0x08da0000,0x0a9c0000,0x0b5e0000
#ifndef __APPLE__
.text
.globl GCM_gmult_len
File diff suppressed because it is too large Load Diff
+10 -19
View File
@@ -32,40 +32,36 @@
#ifdef HAVE_CHACHA
#ifndef __APPLE__
.text
.type L_chacha20_arm64_ctr, %object
.section .rodata
.type L_chacha20_arm64_ctr, %object
.size L_chacha20_arm64_ctr, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha20_arm64_ctr:
.word 0x00000000
.word 0x00000001
.word 0x00000002
.word 0x00000003
.long 0x00000000,0x00000001,0x00000002,0x00000003
#ifndef __APPLE__
.text
.type L_chacha20_arm64_rol8, %object
.section .rodata
.type L_chacha20_arm64_rol8, %object
.size L_chacha20_arm64_rol8, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha20_arm64_rol8:
.word 0x02010003
.word 0x06050407
.word 0x0a09080b
.word 0x0e0d0c0f
.long 0x02010003,0x06050407,0x0a09080b,0x0e0d0c0f
#ifndef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
@@ -1009,26 +1005,21 @@ _wc_chacha_setiv:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_chacha_setkey_arm64_constant, %object
.section .rodata
.type L_chacha_setkey_arm64_constant, %object
.size L_chacha_setkey_arm64_constant, 32
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha_setkey_arm64_constant:
.word 0x61707865
.word 0x3120646e
.word 0x79622d36
.word 0x6b206574
.word 0x61707865
.word 0x3320646e
.word 0x79622d32
.word 0x6b206574
.long 0x61707865,0x3120646e,0x79622d36,0x6b206574
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574
#ifndef __APPLE__
.text
.globl wc_chacha_setkey
+24 -24
View File
@@ -33,11 +33,11 @@
#ifdef HAVE_CHACHA
#include <wolfssl/wolfcrypt/chacha.h>
static const word32 L_chacha20_arm64_ctr[] = {
XALIGNED(8) static const word32 L_chacha20_arm64_ctr[] = {
0x00000000, 0x00000001, 0x00000002, 0x00000003,
};
static const word32 L_chacha20_arm64_rol8[] = {
XALIGNED(8) static const word32 L_chacha20_arm64_rol8[] = {
0x02010003, 0x06050407, 0x0a09080b, 0x0e0d0c0f,
};
@@ -62,7 +62,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"b.lt L_chacha_crypt_bytes_arm64_lt_320_%=\n\t"
"mov w25, #4\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_loop_320_%=: \n\t"
"L_chacha_crypt_bytes_arm64_loop_320_%=:\n\t"
/* Move state into regular register */
"mov x8, v16.d[0]\n\t"
"mov x10, v16.d[1]\n\t"
@@ -104,7 +104,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
/* Set number of odd+even rounds to perform */
"mov x26, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_round_start_320_%=: \n\t"
"L_chacha_crypt_bytes_arm64_round_start_320_%=:\n\t"
"subs x26, x26, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -436,7 +436,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"b.ge L_chacha_crypt_bytes_arm64_loop_320_%=\n\t"
/* Done doing 320 bytes at a time */
"\n"
"L_chacha_crypt_bytes_arm64_lt_320_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_320_%=:\n\t"
"cmp %w[len], #0x100\n\t"
"b.lt L_chacha_crypt_bytes_arm64_lt_256_%=\n\t"
/* Move state into vector registers */
@@ -461,7 +461,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
/* Set number of odd+even rounds to perform */
"mov x26, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_round_start_256_%=: \n\t"
"L_chacha_crypt_bytes_arm64_round_start_256_%=:\n\t"
"subs x26, x26, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -669,7 +669,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"add v19.4s, v19.4s, v29.4s\n\t"
/* Done 256-byte block */
"\n"
"L_chacha_crypt_bytes_arm64_lt_256_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_256_%=:\n\t"
"cmp %w[len], #0x80\n\t"
"b.lt L_chacha_crypt_bytes_arm64_lt_128_%=\n\t"
"ld1 {v24.16b, v25.16b, v26.16b, v27.16b}, [%x[m]], #0x40\n\t"
@@ -687,7 +687,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
/* Set number of odd+even rounds to perform */
"mov x26, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_round_start_128_%=: \n\t"
"L_chacha_crypt_bytes_arm64_round_start_128_%=:\n\t"
"subs x26, x26, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -793,12 +793,12 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"sub %w[len], %w[len], #0x80\n\t"
/* Done 128-byte block */
"\n"
"L_chacha_crypt_bytes_arm64_lt_128_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_128_%=:\n\t"
"cmp %w[len], #0\n\t"
"b.eq L_chacha_crypt_bytes_arm64_done_all_%=\n\t"
"mov %w[rol8], #0x40\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_loop_64_%=: \n\t"
"L_chacha_crypt_bytes_arm64_loop_64_%=:\n\t"
/* Move state into vector registers */
"mov v0.16b, v16.16b\n\t"
"mov v1.16b, v17.16b\n\t"
@@ -807,7 +807,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
/* Set number of odd+even rounds to perform */
"mov x26, #10\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_round_64_%=: \n\t"
"L_chacha_crypt_bytes_arm64_round_64_%=:\n\t"
"subs x26, x26, #1\n\t"
/* Round odd */
/* a += b; d ^= a; d <<<= 16; */
@@ -875,7 +875,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"b.ne L_chacha_crypt_bytes_arm64_loop_64_%=\n\t"
"b L_chacha_crypt_bytes_arm64_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_lt_64_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_64_%=:\n\t"
/* Calculate bytes left in block not used */
"sub %w[rol8], %w[rol8], %w[len]\n\t"
/* Store encipher block in over for further operations and left */
@@ -893,7 +893,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"mov v1.16b, v3.16b\n\t"
"b.eq L_chacha_crypt_bytes_arm64_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_lt_32_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_32_%=:\n\t"
"cmp %w[len], #16\n\t"
"b.lt L_chacha_crypt_bytes_arm64_lt_16_%=\n\t"
/* Encipher 16 bytes */
@@ -904,7 +904,7 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"mov v0.16b, v1.16b\n\t"
"b.eq L_chacha_crypt_bytes_arm64_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_lt_16_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_16_%=:\n\t"
"cmp %w[len], #8\n\t"
"b.lt L_chacha_crypt_bytes_arm64_lt_8_%=\n\t"
/* Encipher 8 bytes */
@@ -915,10 +915,10 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"mov v0.d[0], v0.d[1]\n\t"
"b.eq L_chacha_crypt_bytes_arm64_done_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_lt_8_%=: \n\t"
"L_chacha_crypt_bytes_arm64_lt_8_%=:\n\t"
"mov %[rol8], v0.d[0]\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_loop_lt_8_%=: \n\t"
"L_chacha_crypt_bytes_arm64_loop_lt_8_%=:\n\t"
/* Encipher 1 byte at a time */
"ldrb %w[ctr], [%x[m]], #1\n\t"
"eor %w[ctr], %w[ctr], %w[rol8]\n\t"
@@ -927,9 +927,9 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
"lsr %[rol8], %[rol8], #8\n\t"
"b.gt L_chacha_crypt_bytes_arm64_loop_lt_8_%=\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_done_%=: \n\t"
"L_chacha_crypt_bytes_arm64_done_%=:\n\t"
"\n"
"L_chacha_crypt_bytes_arm64_done_all_%=: \n\t"
"L_chacha_crypt_bytes_arm64_done_all_%=:\n\t"
"st1 {v16.4s, v17.4s, v18.4s, v19.4s}, [%x[ctx]]\n\t"
: [ctx] "+r" (ctx), [c] "+r" (c), [len] "+r" (len)
: [m] "r" (m), [rol8] "r" (rol8), [ctr] "r" (ctr)
@@ -956,7 +956,7 @@ void wc_chacha_setiv(word32* x, const byte* iv, word32 counter)
);
}
static const word32 L_chacha_setkey_arm64_constant[] = {
XALIGNED(8) static const word32 L_chacha_setkey_arm64_constant[] = {
0x61707865, 0x3120646e, 0x79622d36, 0x6b206574,
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
};
@@ -981,7 +981,7 @@ void wc_chacha_setkey(word32* x, const byte* key, word32 keySz)
"rev32 v1.8h, v1.8h\n\t"
#endif /* BIG_ENDIAN_ORDER */
"\n"
"L_chacha_setkey_arm64_done_%=: \n\t"
"L_chacha_setkey_arm64_done_%=:\n\t"
"st1 {v1.4s}, [%x[x]]\n\t"
: [x] "+r" (x), [keySz] "+r" (keySz)
: [key] "r" (key), [constant] "r" (constant)
@@ -993,7 +993,7 @@ void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
{
__asm__ __volatile__ (
"\n"
"L_chacha_use_over_arm64_16byte_loop_%=: \n\t"
"L_chacha_use_over_arm64_16byte_loop_%=:\n\t"
"cmp %w[len], #16\n\t"
"b.lt L_chacha_use_over_arm64_word_loop_%=\n\t"
/* 16 bytes of state XORed into message. */
@@ -1005,7 +1005,7 @@ void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
"b.eq L_chacha_use_over_arm64_done_%=\n\t"
"b L_chacha_use_over_arm64_16byte_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm64_word_loop_%=: \n\t"
"L_chacha_use_over_arm64_word_loop_%=:\n\t"
"cmp %w[len], #4\n\t"
"b.lt L_chacha_use_over_arm64_byte_loop_%=\n\t"
/* 4 bytes of state XORed into message. */
@@ -1017,7 +1017,7 @@ void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
"b.eq L_chacha_use_over_arm64_done_%=\n\t"
"b L_chacha_use_over_arm64_word_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm64_byte_loop_%=: \n\t"
"L_chacha_use_over_arm64_byte_loop_%=:\n\t"
/* 1 bytes of state XORed into message. */
"ldrb w4, [%x[over]], #1\n\t"
"ldrb w5, [%x[input]], #1\n\t"
@@ -1027,7 +1027,7 @@ void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
"b.eq L_chacha_use_over_arm64_done_%=\n\t"
"b L_chacha_use_over_arm64_byte_loop_%=\n\t"
"\n"
"L_chacha_use_over_arm64_done_%=: \n\t"
"L_chacha_use_over_arm64_done_%=:\n\t"
: [over] "+r" (over), [output] "+r" (output), [len] "+r" (len)
: [input] "r" (input)
: "memory", "cc", "x4", "x5", "v0", "v1"
+6 -5
View File
@@ -1941,20 +1941,21 @@ L_fe_invert8:
#if !defined(HAVE_ED25519) && !defined(WOLFSSL_CURVE25519_USE_ED25519)
#ifndef __APPLE__
.text
.type L_curve25519_base_x2, %object
.section .rodata
.type L_curve25519_base_x2, %object
.size L_curve25519_base_x2, 32
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 5
.align 4
#else
.p2align 5
.p2align 4
#endif /* __APPLE__ */
L_curve25519_base_x2:
.xword 0x5cae469cdd684efb, 0x8f3f5ced1e350b5c
.xword 0xd9750c687d157114, 0x20d342d51873f1b7
.quad 0x5cae469cdd684efb,0x8f3f5ced1e350b5c
.quad 0xd9750c687d157114,0x20d342d51873f1b7
#ifndef __APPLE__
.text
.globl curve25519_base
+64 -64
View File
@@ -501,7 +501,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_0_%=: \n\t"
"L_fe_invert_nct_num_bits_init_v_0_%=:\n\t"
"cmp x8, #0\n\t"
"b.eq L_fe_invert_nct_num_bits_init_v_1_%=\n\t"
"mov x24, #0xc0\n\t"
@@ -509,7 +509,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_1_%=: \n\t"
"L_fe_invert_nct_num_bits_init_v_1_%=:\n\t"
"cmp x7, #0\n\t"
"b.eq L_fe_invert_nct_num_bits_init_v_2_%=\n\t"
"mov x24, #0x80\n\t"
@@ -517,16 +517,16 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_2_%=: \n\t"
"L_fe_invert_nct_num_bits_init_v_2_%=:\n\t"
"mov x24, #0x40\n\t"
"clz x23, x6\n\t"
"sub x23, x24, x23\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_3_%=: \n\t"
"L_fe_invert_nct_num_bits_init_v_3_%=:\n\t"
"tst x6, #1\n\t"
"b.ne L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_even_init_v_0_%=: \n\t"
"L_fe_invert_nct_even_init_v_0_%=:\n\t"
"extr x6, x7, x6, #1\n\t"
"extr x7, x8, x7, #1\n\t"
"extr x8, x9, x8, #1\n\t"
@@ -540,7 +540,7 @@ void fe_invert_nct(fe r, const fe a)
"adcs x17, x17, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_init_v_1_%=: \n\t"
"L_fe_invert_nct_even_init_v_1_%=:\n\t"
"extr x14, x15, x14, #1\n\t"
"extr x15, x16, x15, #1\n\t"
"extr x16, x17, x16, #1\n\t"
@@ -548,7 +548,7 @@ void fe_invert_nct(fe r, const fe a)
"tst x6, #1\n\t"
"b.eq L_fe_invert_nct_even_init_v_0_%=\n\t"
"\n"
"L_fe_invert_nct_loop_%=: \n\t"
"L_fe_invert_nct_loop_%=:\n\t"
"cmp x22, #1\n\t"
"b.eq L_fe_invert_nct_u_done_%=\n\t"
"cmp x23, #1\n\t"
@@ -568,7 +568,7 @@ void fe_invert_nct(fe r, const fe a)
"cmp x2, x6\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"\n"
"L_fe_invert_nct_u_larger_%=: \n\t"
"L_fe_invert_nct_u_larger_%=:\n\t"
"subs x2, x2, x6\n\t"
"sbcs x3, x3, x7\n\t"
"sbcs x4, x4, x8\n\t"
@@ -583,7 +583,7 @@ void fe_invert_nct(fe r, const fe a)
"adcs x12, x12, x20\n\t"
"adc x13, x13, x21\n\t"
"\n"
"L_fe_invert_nct_sub_uv_%=: \n\t"
"L_fe_invert_nct_sub_uv_%=:\n\t"
"cmp x5, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_0_%=\n\t"
"mov x24, #0x100\n\t"
@@ -591,7 +591,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_0_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_u_0_%=:\n\t"
"cmp x4, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_1_%=\n\t"
"mov x24, #0xc0\n\t"
@@ -599,7 +599,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_1_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_u_1_%=:\n\t"
"cmp x3, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_2_%=\n\t"
"mov x24, #0x80\n\t"
@@ -607,14 +607,14 @@ void fe_invert_nct(fe r, const fe a)
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_2_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_u_2_%=:\n\t"
"mov x24, #0x40\n\t"
"clz x22, x2\n\t"
"sub x22, x24, x22\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_3_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_u_3_%=:\n\t"
"\n"
"L_fe_invert_nct_even_u_0_%=: \n\t"
"L_fe_invert_nct_even_u_0_%=:\n\t"
"extr x2, x3, x2, #1\n\t"
"extr x3, x4, x3, #1\n\t"
"extr x4, x5, x4, #1\n\t"
@@ -628,7 +628,7 @@ void fe_invert_nct(fe r, const fe a)
"adcs x13, x13, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_u_1_%=: \n\t"
"L_fe_invert_nct_even_u_1_%=:\n\t"
"extr x10, x11, x10, #1\n\t"
"extr x11, x12, x11, #1\n\t"
"extr x12, x13, x12, #1\n\t"
@@ -637,7 +637,7 @@ void fe_invert_nct(fe r, const fe a)
"b.eq L_fe_invert_nct_even_u_0_%=\n\t"
"b L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_v_larger_%=: \n\t"
"L_fe_invert_nct_v_larger_%=:\n\t"
"subs x6, x6, x2\n\t"
"sbcs x7, x7, x3\n\t"
"sbcs x8, x8, x4\n\t"
@@ -652,7 +652,7 @@ void fe_invert_nct(fe r, const fe a)
"adcs x16, x16, x20\n\t"
"adc x17, x17, x21\n\t"
"\n"
"L_fe_invert_nct_sub_vu_%=: \n\t"
"L_fe_invert_nct_sub_vu_%=:\n\t"
"cmp x9, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_0_%=\n\t"
"mov x24, #0x100\n\t"
@@ -660,7 +660,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_0_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_v_0_%=:\n\t"
"cmp x8, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_1_%=\n\t"
"mov x24, #0xc0\n\t"
@@ -668,7 +668,7 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_1_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_v_1_%=:\n\t"
"cmp x7, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_2_%=\n\t"
"mov x24, #0x80\n\t"
@@ -676,14 +676,14 @@ void fe_invert_nct(fe r, const fe a)
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_2_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_v_2_%=:\n\t"
"mov x24, #0x40\n\t"
"clz x23, x6\n\t"
"sub x23, x24, x23\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_3_%=: \n\t"
"L_fe_invert_nct_nct_num_bits_v_3_%=:\n\t"
"\n"
"L_fe_invert_nct_even_v_0_%=: \n\t"
"L_fe_invert_nct_even_v_0_%=:\n\t"
"extr x6, x7, x6, #1\n\t"
"extr x7, x8, x7, #1\n\t"
"extr x8, x9, x8, #1\n\t"
@@ -697,7 +697,7 @@ void fe_invert_nct(fe r, const fe a)
"adcs x17, x17, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_v_1_%=: \n\t"
"L_fe_invert_nct_even_v_1_%=:\n\t"
"extr x14, x15, x14, #1\n\t"
"extr x15, x16, x15, #1\n\t"
"extr x16, x17, x16, #1\n\t"
@@ -706,20 +706,20 @@ void fe_invert_nct(fe r, const fe a)
"b.eq L_fe_invert_nct_even_v_0_%=\n\t"
"b L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_u_done_%=: \n\t"
"L_fe_invert_nct_u_done_%=:\n\t"
"str x10, [%x[r]]\n\t"
"str x11, [%x[r], #8]\n\t"
"str x12, [%x[r], #16]\n\t"
"str x13, [%x[r], #24]\n\t"
"b L_fe_invert_nct_done_%=\n\t"
"\n"
"L_fe_invert_nct_v_done_%=: \n\t"
"L_fe_invert_nct_v_done_%=:\n\t"
"str x14, [%x[r]]\n\t"
"str x15, [%x[r], #8]\n\t"
"str x16, [%x[r], #16]\n\t"
"str x17, [%x[r], #24]\n\t"
"\n"
"L_fe_invert_nct_done_%=: \n\t"
"L_fe_invert_nct_done_%=:\n\t"
: [r] "+r" (r)
: [a] "r" (a)
: "memory", "cc", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10",
@@ -1041,7 +1041,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_invert1_%=: \n\t"
"L_fe_invert1_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1142,7 +1142,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_invert2_%=: \n\t"
"L_fe_invert2_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1243,7 +1243,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_fe_invert3_%=: \n\t"
"L_fe_invert3_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1344,7 +1344,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_fe_invert4_%=: \n\t"
"L_fe_invert4_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1443,7 +1443,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_invert5_%=: \n\t"
"L_fe_invert5_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1544,7 +1544,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_fe_invert6_%=: \n\t"
"L_fe_invert6_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1645,7 +1645,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_fe_invert7_%=: \n\t"
"L_fe_invert7_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1744,7 +1744,7 @@ void fe_invert(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_invert8_%=: \n\t"
"L_fe_invert8_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -1847,9 +1847,9 @@ void fe_invert(fe r, const fe a)
}
#if !defined(HAVE_ED25519) && !defined(WOLFSSL_CURVE25519_USE_ED25519)
static const word64 L_curve25519_base_x2[] = {
0x5cae469cdd684efb, 0x8f3f5ced1e350b5c,
0xd9750c687d157114, 0x20d342d51873f1b7,
XALIGNED(16) static const word64 L_curve25519_base_x2[] = {
0x5cae469cdd684efbUL, 0x8f3f5ced1e350b5cUL,
0xd9750c687d157114UL, 0x20d342d51873f1b7UL,
};
int curve25519_base(byte* r, const byte* n)
@@ -1876,7 +1876,7 @@ int curve25519_base(byte* r, const byte* n)
"mov x23, %x[r]\n\t"
"mov x24, #0xfd\n\t"
"\n"
"L_curve25519_base_bits_%=: \n\t"
"L_curve25519_base_bits_%=:\n\t"
"lsr x3, x24, #6\n\t"
"and x4, x24, #63\n\t"
"ldr x5, [%x[n], x3, LSL 3]\n\t"
@@ -2885,7 +2885,7 @@ int curve25519_base(byte* r, const byte* n)
"csel x17, x13, x9, ne\n\t"
"csel x13, x9, x13, ne\n\t"
"\n"
"L_curve25519_base_3_%=: \n\t"
"L_curve25519_base_3_%=:\n\t"
/* Add */
"adds x6, x10, x25\n\t"
"adcs x7, x11, x26\n\t"
@@ -3427,7 +3427,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_base_inv_1_%=: \n\t"
"L_curve25519_base_inv_1_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -3528,7 +3528,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_base_inv_2_%=: \n\t"
"L_curve25519_base_inv_2_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -3629,7 +3629,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_base_inv_3_%=: \n\t"
"L_curve25519_base_inv_3_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -3730,7 +3730,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_base_inv_4_%=: \n\t"
"L_curve25519_base_inv_4_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -3829,7 +3829,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_base_inv_5_%=: \n\t"
"L_curve25519_base_inv_5_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -3930,7 +3930,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_base_inv_6_%=: \n\t"
"L_curve25519_base_inv_6_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -4031,7 +4031,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_base_inv_7_%=: \n\t"
"L_curve25519_base_inv_7_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -4130,7 +4130,7 @@ int curve25519_base(byte* r, const byte* n)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_base_inv_8_%=: \n\t"
"L_curve25519_base_inv_8_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -4394,7 +4394,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"stp xzr, xzr, [x29, #32]\n\t"
"mov x24, #0xfe\n\t"
"\n"
"L_curve25519_bits_%=: \n\t"
"L_curve25519_bits_%=:\n\t"
"lsr x3, x24, #6\n\t"
"and x4, x24, #63\n\t"
"ldr x5, [%x[n], x3, LSL 3]\n\t"
@@ -5492,7 +5492,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"csel x17, x13, x9, ne\n\t"
"csel x13, x9, x13, ne\n\t"
"\n"
"L_curve25519_3_%=: \n\t"
"L_curve25519_3_%=:\n\t"
/* Add */
"adds x6, x10, x25\n\t"
"adcs x7, x11, x26\n\t"
@@ -6034,7 +6034,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_inv_1_%=: \n\t"
"L_curve25519_inv_1_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6135,7 +6135,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_inv_2_%=: \n\t"
"L_curve25519_inv_2_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6236,7 +6236,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_inv_3_%=: \n\t"
"L_curve25519_inv_3_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6337,7 +6337,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_inv_4_%=: \n\t"
"L_curve25519_inv_4_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6436,7 +6436,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_inv_5_%=: \n\t"
"L_curve25519_inv_5_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6537,7 +6537,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_inv_6_%=: \n\t"
"L_curve25519_inv_6_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6638,7 +6638,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #112]\n\t"
"ldp x8, x9, [x29, #128]\n\t"
"\n"
"L_curve25519_inv_7_%=: \n\t"
"L_curve25519_inv_7_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -6737,7 +6737,7 @@ int curve25519(byte* r, const byte* n, const byte* a)
"ldp x6, x7, [x29, #80]\n\t"
"ldp x8, x9, [x29, #96]\n\t"
"\n"
"L_curve25519_inv_8_%=: \n\t"
"L_curve25519_inv_8_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7057,7 +7057,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #16]\n\t"
"ldp x8, x9, [x29, #32]\n\t"
"\n"
"L_fe_pow22523_1_%=: \n\t"
"L_fe_pow22523_1_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7160,7 +7160,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #16]\n\t"
"ldp x8, x9, [x29, #32]\n\t"
"\n"
"L_fe_pow22523_2_%=: \n\t"
"L_fe_pow22523_2_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7261,7 +7261,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_pow22523_3_%=: \n\t"
"L_fe_pow22523_3_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7362,7 +7362,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_pow22523_4_%=: \n\t"
"L_fe_pow22523_4_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7461,7 +7461,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #16]\n\t"
"ldp x8, x9, [x29, #32]\n\t"
"\n"
"L_fe_pow22523_5_%=: \n\t"
"L_fe_pow22523_5_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7562,7 +7562,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_pow22523_6_%=: \n\t"
"L_fe_pow22523_6_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
@@ -7663,7 +7663,7 @@ void fe_pow22523(fe r, const fe a)
"ldp x6, x7, [x29, #48]\n\t"
"ldp x8, x9, [x29, #64]\n\t"
"\n"
"L_fe_pow22523_7_%=: \n\t"
"L_fe_pow22523_7_%=:\n\t"
/* Square */
/* A[0] * A[1] */
"umulh x12, x6, x7\n\t"
+76 -72
View File
@@ -31,32 +31,34 @@
#ifndef WOLFSSL_ARMASM_INLINE
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_consts, %object
.section .rodata
.type L_mlkem_aarch64_consts, %object
.size L_mlkem_aarch64_consts, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_consts:
.short 0x0d01,0xf301,0x4ebf,0x0549,0x5049,0x0000,0x0000,0x0000
#ifdef WOLFSSL_WC_MLKEM
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_zetas, %object
.section .rodata
.type L_mlkem_aarch64_zetas, %object
.size L_mlkem_aarch64_zetas, 576
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_zetas:
.short 0x08ed,0x0a0b,0x0b9a,0x0714,0x05d5,0x058e,0x011f,0x00ca
@@ -97,16 +99,17 @@ L_mlkem_aarch64_zetas:
.short 0x03be,0x03be,0x074d,0x074d,0x05f2,0x05f2,0x065c,0x065c
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_zetas_qinv, %object
.section .rodata
.type L_mlkem_aarch64_zetas_qinv, %object
.size L_mlkem_aarch64_zetas_qinv, 576
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_zetas_qinv:
.short 0xffed,0x7b0b,0x399a,0x0314,0x34d5,0xcf8e,0x6e1f,0xbeca
@@ -1441,16 +1444,17 @@ _mlkem_ntt:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_zetas_inv, %object
.section .rodata
.type L_mlkem_aarch64_zetas_inv, %object
.size L_mlkem_aarch64_zetas_inv, 576
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_zetas_inv:
.short 0x06a5,0x06a5,0x070f,0x070f,0x05b4,0x05b4,0x0943,0x0943
@@ -1491,16 +1495,17 @@ L_mlkem_aarch64_zetas_inv:
.short 0x0c37,0x0be2,0x0773,0x072c,0x05ed,0x0167,0x02f6,0x05a1
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_zetas_inv_qinv, %object
.section .rodata
.type L_mlkem_aarch64_zetas_inv_qinv, %object
.size L_mlkem_aarch64_zetas_inv_qinv, 576
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_zetas_inv_qinv:
.short 0xa5a5,0xa5a5,0x440f,0x440f,0xe1b4,0xe1b4,0xa243,0xa243
@@ -5481,16 +5486,17 @@ _mlkem_invntt_sqrdmlsh:
#endif /* WOLFSSL_AARCH64_NO_SQRDMLSH */
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_zetas_mul, %object
.section .rodata
.type L_mlkem_aarch64_zetas_mul, %object
.size L_mlkem_aarch64_zetas_mul, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_zetas_mul:
.short 0x08b2,0xf74e,0x01ae,0xfe52,0x022b,0xfdd5,0x034b,0xfcb5
@@ -6955,16 +6961,17 @@ _mlkem_basemul_mont_add:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_mlkem_aarch64_q, %object
.section .rodata
.type L_mlkem_aarch64_q, %object
.size L_mlkem_aarch64_q, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_aarch64_q:
.short 0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01,0x0d01
@@ -8160,46 +8167,49 @@ _mlkem_to_mont_sqrdmlsh:
#endif /* WOLFSSL_AARCH64_NO_SQRDMLSH */
#ifndef __APPLE__
.text
.type L_mlkem_to_msg_low, %object
.section .rodata
.type L_mlkem_to_msg_low, %object
.size L_mlkem_to_msg_low, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_to_msg_low:
.short 0x0373,0x0373,0x0373,0x0373,0x0373,0x0373,0x0373,0x0373
#ifndef __APPLE__
.text
.type L_mlkem_to_msg_high, %object
.section .rodata
.type L_mlkem_to_msg_high, %object
.size L_mlkem_to_msg_high, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_to_msg_high:
.short 0x09c0,0x09c0,0x09c0,0x09c0,0x09c0,0x09c0,0x09c0,0x09c0
#ifndef __APPLE__
.text
.type L_mlkem_to_msg_bits, %object
.section .rodata
.type L_mlkem_to_msg_bits, %object
.size L_mlkem_to_msg_bits, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_to_msg_bits:
.short 0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080
@@ -8456,31 +8466,33 @@ _mlkem_to_msg_neon:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_mlkem_from_msg_q1half, %object
.section .rodata
.type L_mlkem_from_msg_q1half, %object
.size L_mlkem_from_msg_q1half, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_from_msg_q1half:
.short 0x0681,0x0681,0x0681,0x0681,0x0681,0x0681,0x0681,0x0681
#ifndef __APPLE__
.text
.type L_mlkem_from_msg_bits, %object
.section .rodata
.type L_mlkem_from_msg_bits, %object
.size L_mlkem_from_msg_bits, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_mlkem_from_msg_bits:
.byte 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
@@ -8941,46 +8953,49 @@ L_mlkem_aarch64_cmp_neon_done:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_mlkem_rej_uniform_mask, %object
.section .rodata
.type L_mlkem_rej_uniform_mask, %object
.size L_mlkem_rej_uniform_mask, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_rej_uniform_mask:
.short 0x0fff,0x0fff,0x0fff,0x0fff,0x0fff,0x0fff,0x0fff,0x0fff
#ifndef __APPLE__
.text
.type L_mlkem_rej_uniform_bits, %object
.section .rodata
.type L_mlkem_rej_uniform_bits, %object
.size L_mlkem_rej_uniform_bits, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 2
.align 3
#else
.p2align 2
.p2align 3
#endif /* __APPLE__ */
L_mlkem_rej_uniform_bits:
.short 0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080
#ifndef __APPLE__
.text
.type L_mlkem_rej_uniform_indices, %object
.section .rodata
.type L_mlkem_rej_uniform_indices, %object
.size L_mlkem_rej_uniform_indices, 4096
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 1
.align 3
#else
.p2align 1
.p2align 3
#endif /* __APPLE__ */
L_mlkem_rej_uniform_indices:
.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
@@ -9688,42 +9703,31 @@ L_mlkem_rej_uniform_done:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_sha3_aarch64_r, %object
.section .rodata
.type L_sha3_aarch64_r, %object
.size L_sha3_aarch64_r, 192
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 3
.align 4
#else
.p2align 3
.p2align 4
#endif /* __APPLE__ */
L_sha3_aarch64_r:
.xword 0x0000000000000001
.xword 0x0000000000008082
.xword 0x800000000000808a
.xword 0x8000000080008000
.xword 0x000000000000808b
.xword 0x0000000080000001
.xword 0x8000000080008081
.xword 0x8000000000008009
.xword 0x000000000000008a
.xword 0x0000000000000088
.xword 0x0000000080008009
.xword 0x000000008000000a
.xword 0x000000008000808b
.xword 0x800000000000008b
.xword 0x8000000000008089
.xword 0x8000000000008003
.xword 0x8000000000008002
.xword 0x8000000000000080
.xword 0x000000000000800a
.xword 0x800000008000000a
.xword 0x8000000080008081
.xword 0x8000000000008080
.xword 0x0000000080000001
.xword 0x8000000080008008
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
#ifndef __APPLE__
.text
+39 -39
View File
@@ -30,14 +30,14 @@
#ifdef WOLFSSL_ARMASM
#ifdef __aarch64__
#ifdef WOLFSSL_ARMASM_INLINE
static const word16 L_mlkem_aarch64_consts[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_consts[] = {
0x0d01, 0xf301, 0x4ebf, 0x0549, 0x5049, 0x0000, 0x0000, 0x0000,
};
#include <wolfssl/wolfcrypt/wc_mlkem.h>
#ifdef WOLFSSL_WC_MLKEM
static const word16 L_mlkem_aarch64_zetas[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714, 0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6, 0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f, 0x09c4, 0x05b2, 0x06bf, 0x0c7f,
@@ -76,7 +76,7 @@ static const word16 L_mlkem_aarch64_zetas[] = {
0x03be, 0x03be, 0x074d, 0x074d, 0x05f2, 0x05f2, 0x065c, 0x065c,
};
static const word16 L_mlkem_aarch64_zetas_qinv[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_zetas_qinv[] = {
0xffed, 0x7b0b, 0x399a, 0x0314, 0x34d5, 0xcf8e, 0x6e1f, 0xbeca,
0xae56, 0x6c6e, 0xf129, 0xc2b6, 0x29c2, 0x054f, 0xd43f, 0x79bc,
0xe93d, 0x43d4, 0x9908, 0x8e7f, 0x15c4, 0xfbb2, 0x53bf, 0x997f,
@@ -1376,7 +1376,7 @@ void mlkem_ntt(sword16* r)
);
}
static const word16 L_mlkem_aarch64_zetas_inv[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_zetas_inv[] = {
0x06a5, 0x06a5, 0x070f, 0x070f, 0x05b4, 0x05b4, 0x0943, 0x0943,
0x0922, 0x0922, 0x091d, 0x091d, 0x0134, 0x0134, 0x006c, 0x006c,
0x0b23, 0x0b23, 0x0366, 0x0366, 0x0356, 0x0356, 0x05e6, 0x05e6,
@@ -1415,7 +1415,7 @@ static const word16 L_mlkem_aarch64_zetas_inv[] = {
0x0c37, 0x0be2, 0x0773, 0x072c, 0x05ed, 0x0167, 0x02f6, 0x05a1,
};
static const word16 L_mlkem_aarch64_zetas_inv_qinv[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_zetas_inv_qinv[] = {
0xa5a5, 0xa5a5, 0x440f, 0x440f, 0xe1b4, 0xe1b4, 0xa243, 0xa243,
0x4f22, 0x4f22, 0x901d, 0x901d, 0x5d34, 0x5d34, 0x846c, 0x846c,
0x4423, 0x4423, 0xd566, 0xd566, 0xa556, 0xa556, 0x57e6, 0x57e6,
@@ -5295,7 +5295,7 @@ void mlkem_invntt_sqrdmlsh(sword16* r)
}
#endif /* WOLFSSL_AARCH64_NO_SQRDMLSH */
static const word16 L_mlkem_aarch64_zetas_mul[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_zetas_mul[] = {
0x08b2, 0xf74e, 0x01ae, 0xfe52, 0x022b, 0xfdd5, 0x034b, 0xfcb5,
0x081e, 0xf7e2, 0x0367, 0xfc99, 0x060e, 0xf9f2, 0x0069, 0xff97,
0x01a6, 0xfe5a, 0x024b, 0xfdb5, 0x00b1, 0xff4f, 0x0c16, 0xf3ea,
@@ -6703,7 +6703,7 @@ void mlkem_basemul_mont_add(sword16* r, const sword16* a, const sword16* b)
);
}
static const word16 L_mlkem_aarch64_q[] = {
XALIGNED(4) static const word16 L_mlkem_aarch64_q[] = {
0x0d01, 0x0d01, 0x0d01, 0x0d01, 0x0d01, 0x0d01, 0x0d01, 0x0d01,
};
@@ -7761,15 +7761,15 @@ void mlkem_to_mont_sqrdmlsh(sword16* p)
}
#endif /* WOLFSSL_AARCH64_NO_SQRDMLSH */
static const word16 L_mlkem_to_msg_low[] = {
XALIGNED(4) static const word16 L_mlkem_to_msg_low[] = {
0x0373, 0x0373, 0x0373, 0x0373, 0x0373, 0x0373, 0x0373, 0x0373,
};
static const word16 L_mlkem_to_msg_high[] = {
XALIGNED(4) static const word16 L_mlkem_to_msg_high[] = {
0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0,
};
static const word16 L_mlkem_to_msg_bits[] = {
XALIGNED(4) static const word16 L_mlkem_to_msg_bits[] = {
0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
};
@@ -7990,11 +7990,11 @@ void mlkem_to_msg_neon(byte* msg, sword16* p)
);
}
static const word16 L_mlkem_from_msg_q1half[] = {
XALIGNED(4) static const word16 L_mlkem_from_msg_q1half[] = {
0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681,
};
static const word8 L_mlkem_from_msg_bits[] = {
XALIGNED(4) static const word8 L_mlkem_from_msg_bits[] = {
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
};
@@ -8400,7 +8400,7 @@ int mlkem_cmp_neon(const byte* a, const byte* b, int sz)
"orr v8.16b, v8.16b, v0.16b\n\t"
"orr v9.16b, v9.16b, v1.16b\n\t"
"\n"
"L_mlkem_aarch64_cmp_neon_done_%=: \n\t"
"L_mlkem_aarch64_cmp_neon_done_%=:\n\t"
"orr v8.16b, v8.16b, v9.16b\n\t"
"orr v10.16b, v10.16b, v11.16b\n\t"
"orr v8.16b, v8.16b, v10.16b\n\t"
@@ -8417,15 +8417,15 @@ int mlkem_cmp_neon(const byte* a, const byte* b, int sz)
return (word32)(size_t)a;
}
static const word16 L_mlkem_rej_uniform_mask[] = {
XALIGNED(4) static const word16 L_mlkem_rej_uniform_mask[] = {
0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff, 0x0fff,
};
static const word16 L_mlkem_rej_uniform_bits[] = {
XALIGNED(4) static const word16 L_mlkem_rej_uniform_bits[] = {
0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
};
static const word8 L_mlkem_rej_uniform_indices[] = {
XALIGNED(4) static const word8 L_mlkem_rej_uniform_indices[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
@@ -8963,7 +8963,7 @@ unsigned int mlkem_rej_uniform_neon(sword16* p, unsigned int len, const byte* r,
"subs wzr, %w[len], #16\n\t"
"b.lt L_mlkem_rej_uniform_loop_4_%=\n\t"
"\n"
"L_mlkem_rej_uniform_loop_16_%=: \n\t"
"L_mlkem_rej_uniform_loop_16_%=:\n\t"
"ld3 {v4.8b, v5.8b, v6.8b}, [%x[r]], #24\n\t"
"zip1 v4.16b, v4.16b, v1.16b\n\t"
"zip1 v5.16b, v5.16b, v1.16b\n\t"
@@ -9010,7 +9010,7 @@ unsigned int mlkem_rej_uniform_neon(sword16* p, unsigned int len, const byte* r,
"b.lt L_mlkem_rej_uniform_loop_4_%=\n\t"
"b L_mlkem_rej_uniform_loop_16_%=\n\t"
"\n"
"L_mlkem_rej_uniform_loop_4_%=: \n\t"
"L_mlkem_rej_uniform_loop_4_%=:\n\t"
"subs w10, %w[len], w12\n\t"
"b.eq L_mlkem_rej_uniform_done_%=\n\t"
"subs x10, x10, #4\n\t"
@@ -9047,7 +9047,7 @@ unsigned int mlkem_rej_uniform_neon(sword16* p, unsigned int len, const byte* r,
"b.eq L_mlkem_rej_uniform_done_%=\n\t"
"b L_mlkem_rej_uniform_loop_4_%=\n\t"
"\n"
"L_mlkem_rej_uniform_loop_lt_4_%=: \n\t"
"L_mlkem_rej_uniform_loop_lt_4_%=:\n\t"
"ldr %[mask], [%x[r]], #6\n\t"
"lsr %[q], %[mask], #12\n\t"
"lsr %[bits], %[mask], #24\n\t"
@@ -9088,7 +9088,7 @@ unsigned int mlkem_rej_uniform_neon(sword16* p, unsigned int len, const byte* r,
"b.eq L_mlkem_rej_uniform_done_%=\n\t"
"b L_mlkem_rej_uniform_loop_lt_4_%=\n\t"
"\n"
"L_mlkem_rej_uniform_done_%=: \n\t"
"L_mlkem_rej_uniform_done_%=:\n\t"
"mov x0, x12\n\t"
: [p] "+r" (p), [len] "+r" (len), [rLen] "+r" (rLen)
: [r] "r" (r), [mask] "r" (mask), [q] "r" (q), [bits] "r" (bits),
@@ -9100,19 +9100,19 @@ unsigned int mlkem_rej_uniform_neon(sword16* p, unsigned int len, const byte* r,
return (word32)(size_t)p;
}
static const word64 L_sha3_aarch64_r[] = {
0x0000000000000001, 0x0000000000008082,
0x800000000000808a, 0x8000000080008000,
0x000000000000808b, 0x0000000080000001,
0x8000000080008081, 0x8000000000008009,
0x000000000000008a, 0x0000000000000088,
0x0000000080008009, 0x000000008000000a,
0x000000008000808b, 0x800000000000008b,
0x8000000000008089, 0x8000000000008003,
0x8000000000008002, 0x8000000000000080,
0x000000000000800a, 0x800000008000000a,
0x8000000080008081, 0x8000000000008080,
0x0000000080000001, 0x8000000080008008,
XALIGNED(16) static const word64 L_sha3_aarch64_r[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
0x8000000080008081UL, 0x8000000000008009UL,
0x000000000000008aUL, 0x0000000000000088UL,
0x0000000080008009UL, 0x000000008000000aUL,
0x000000008000808bUL, 0x800000000000008bUL,
0x8000000000008089UL, 0x8000000000008003UL,
0x8000000000008002UL, 0x8000000000000080UL,
0x000000000000800aUL, 0x800000008000000aUL,
0x8000000080008081UL, 0x8000000000008080UL,
0x0000000080000001UL, 0x8000000080008008UL,
};
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
@@ -9155,7 +9155,7 @@ void mlkem_sha3_blocksx3_neon(word64* state)
"mov x28, #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_transform_blocksx3_neon_begin_%=: \n\t"
"L_SHA3_transform_blocksx3_neon_begin_%=:\n\t"
"stp %[r], x28, [x29, #48]\n\t"
/* Col Mix */
"eor3 v31.16b, v0.16b, v5.16b, v10.16b\n\t"
@@ -9476,7 +9476,7 @@ void mlkem_shake128_blocksx3_seed_neon(word64* state, byte* seed)
"mov %x[seed], #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_shake128_blocksx3_seed_neon_begin_%=: \n\t"
"L_SHA3_shake128_blocksx3_seed_neon_begin_%=:\n\t"
"stp %[r], %x[seed], [x29, #48]\n\t"
/* Col Mix */
"eor3 v31.16b, v0.16b, v5.16b, v10.16b\n\t"
@@ -9797,7 +9797,7 @@ void mlkem_shake256_blocksx3_seed_neon(word64* state, byte* seed)
"mov %x[seed], #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_shake256_blocksx3_seed_neon_begin_%=: \n\t"
"L_SHA3_shake256_blocksx3_seed_neon_begin_%=:\n\t"
"stp %[r], %x[seed], [x29, #48]\n\t"
/* Col Mix */
"eor3 v31.16b, v0.16b, v5.16b, v10.16b\n\t"
@@ -10097,7 +10097,7 @@ void mlkem_sha3_blocksx3_neon(word64* state)
"mov x28, #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_transform_blocksx3_neon_begin_%=: \n\t"
"L_SHA3_transform_blocksx3_neon_begin_%=:\n\t"
"stp %[r], x28, [x29, #48]\n\t"
/* Col Mix NEON */
"eor v30.16b, v4.16b, v9.16b\n\t"
@@ -10503,7 +10503,7 @@ void mlkem_shake128_blocksx3_seed_neon(word64* state, byte* seed)
"mov %x[seed], #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_shake128_blocksx3_seed_neon_begin_%=: \n\t"
"L_SHA3_shake128_blocksx3_seed_neon_begin_%=:\n\t"
"stp %[r], %x[seed], [x29, #48]\n\t"
/* Col Mix NEON */
"eor v30.16b, v4.16b, v9.16b\n\t"
@@ -10909,7 +10909,7 @@ void mlkem_shake256_blocksx3_seed_neon(word64* state, byte* seed)
"mov %x[seed], #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_shake256_blocksx3_seed_neon_begin_%=: \n\t"
"L_SHA3_shake256_blocksx3_seed_neon_begin_%=:\n\t"
"stp %[r], %x[seed], [x29, #48]\n\t"
/* Col Mix NEON */
"eor v30.16b, v4.16b, v9.16b\n\t"
+3 -5
View File
@@ -438,22 +438,20 @@ L_poly1305_arm64_blocks_done_all:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.type L_poly1305_set_key_arm64_clamp, %object
.section .rodata
.type L_poly1305_set_key_arm64_clamp, %object
.size L_poly1305_set_key_arm64_clamp, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_poly1305_set_key_arm64_clamp:
.word 0x0fffffff
.word 0x0ffffffc
.word 0x0ffffffc
.word 0x0ffffffc
.long 0x0fffffff,0x0ffffffc,0x0ffffffc,0x0ffffffc
#ifndef __APPLE__
.text
.globl poly1305_set_key
@@ -138,7 +138,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"mul v22.4s, v18.4s, v24.4s\n\t"
"mul v23.4s, v19.4s, v24.4s\n\t"
"\n"
"L_poly1305_arm64_blocks_loop_64_%=: \n\t"
"L_poly1305_arm64_blocks_loop_64_%=:\n\t"
/* Load message of 64 bytes - setting hi bit for not finished */
"ld4 {v5.4s, v6.4s, v7.4s, v8.4s}, [%x[m]], #0x40\n\t"
"sub %x[bytes], %x[bytes], #0x40\n\t"
@@ -314,7 +314,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"usra v4.2d, v3.2d, #26\n\t"
"and v3.16b, v3.16b, v26.16b\n\t"
"\n"
"L_poly1305_arm64_blocks_done_32_%=: \n\t"
"L_poly1305_arm64_blocks_done_32_%=:\n\t"
"cmp %x[bytes], #16\n\t"
"b.eq L_poly1305_arm64_blocks_transfer_%=\n\t"
"add x14, %x[ctx], #0x60\n\t"
@@ -322,7 +322,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"st1 {v4.s}[0], [x14]\n\t"
"b L_poly1305_arm64_blocks_done_all_%=\n\t"
"\n"
"L_poly1305_arm64_blocks_transfer_%=: \n\t"
"L_poly1305_arm64_blocks_transfer_%=:\n\t"
"mov w3, v0.s[0]\n\t"
"mov w4, v1.s[0]\n\t"
"mov w5, v2.s[0]\n\t"
@@ -330,7 +330,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"mov w7, v4.s[0]\n\t"
"b L_poly1305_arm64_blocks_start_%=\n\t"
"\n"
"L_poly1305_arm64_blocks_done_%=: \n\t"
"L_poly1305_arm64_blocks_done_%=:\n\t"
"cmp %x[bytes], #16\n\t"
"b.lt L_poly1305_arm64_blocks_done_all_%=\n\t"
/* Load h */
@@ -338,7 +338,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"ldp w5, w6, [%x[ctx], #104]\n\t"
"ldr w7, [%x[ctx], #112]\n\t"
"\n"
"L_poly1305_arm64_blocks_start_%=: \n\t"
"L_poly1305_arm64_blocks_start_%=:\n\t"
"mov x17, #1\n\t"
/* Load r */
"ldp x8, x9, [%x[ctx]]\n\t"
@@ -350,7 +350,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"lsr x5, x7, #24\n\t"
"add x4, x4, x7, lsl 40\n\t"
"\n"
"L_poly1305_arm64_blocks_loop_%=: \n\t"
"L_poly1305_arm64_blocks_loop_%=:\n\t"
/* Load m */
"ldr x14, [%x[m]]\n\t"
"ldr x15, [%x[m], #8]\n\t"
@@ -413,7 +413,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
"stp w5, w6, [%x[ctx], #104]\n\t"
"str w7, [%x[ctx], #112]\n\t"
"\n"
"L_poly1305_arm64_blocks_done_all_%=: \n\t"
"L_poly1305_arm64_blocks_done_all_%=:\n\t"
: [ctx] "+r" (ctx), [bytes] "+r" (bytes)
: [m] "r" (m)
: "memory", "cc", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10",
@@ -424,7 +424,7 @@ void poly1305_arm64_blocks(Poly1305* ctx, const unsigned char* m, size_t bytes)
);
}
static const word32 L_poly1305_set_key_arm64_clamp[] = {
XALIGNED(8) static const word32 L_poly1305_set_key_arm64_clamp[] = {
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
};
+36 -130
View File
@@ -32,82 +32,35 @@
#if !defined(NO_SHA256) || defined(WOLFSSL_SHA224)
#ifndef __APPLE__
.text
.type L_SHA256_transform_neon_len_k, %object
.section .rodata
.type L_SHA256_transform_neon_len_k, %object
.size L_SHA256_transform_neon_len_k, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_neon_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0x0fc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x06ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
#ifndef __APPLE__
.text
.globl Transform_Sha256_Len_neon
@@ -1101,82 +1054,35 @@ L_sha256_len_neon_start:
#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
#ifndef __APPLE__
.text
.type L_SHA256_trans_crypto_len_k, %object
.section .rodata
.type L_SHA256_trans_crypto_len_k, %object
.size L_SHA256_trans_crypto_len_k, 256
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_trans_crypto_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0x0fc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x06ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
#ifndef __APPLE__
.text
.globl Transform_Sha256_Len_crypto
+5 -5
View File
@@ -33,7 +33,7 @@
#include <wolfssl/wolfcrypt/sha256.h>
#if !defined(NO_SHA256) || defined(WOLFSSL_SHA224)
static const word32 L_SHA256_transform_neon_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_neon_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -67,7 +67,7 @@ void Transform_Sha256_Len_neon(wc_Sha256* sha256, const byte* data, word32 len)
"ldr w11, [%x[sha256], #28]\n\t"
/* Start of loop processing a block */
"\n"
"L_sha256_len_neon_begin_%=: \n\t"
"L_sha256_len_neon_begin_%=:\n\t"
/* Load W */
/* Copy digest to add in at end */
"ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [%x[data]], #32\n\t"
@@ -91,7 +91,7 @@ void Transform_Sha256_Len_neon(wc_Sha256* sha256, const byte* data, word32 len)
"mov x24, #3\n\t"
/* Start of 16 rounds */
"\n"
"L_sha256_len_neon_start_%=: \n\t"
"L_sha256_len_neon_start_%=:\n\t"
/* Round 0 */
"mov w14, v0.s[0]\n\t"
"ror w12, w8, #6\n\t"
@@ -1020,7 +1020,7 @@ void Transform_Sha256_Len_neon(wc_Sha256* sha256, const byte* data, word32 len)
}
#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
static const word32 L_SHA256_trans_crypto_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_trans_crypto_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -1055,7 +1055,7 @@ void Transform_Sha256_Len_crypto(wc_Sha256* sha256, const byte* data,
"ld1 {v0.4s, v1.4s}, [%x[sha256]]\n\t"
/* Start of loop processing a block */
"\n"
"L_sha256_len_crypto_begin_%=: \n\t"
"L_sha256_len_crypto_begin_%=:\n\t"
/* Load W */
"ld1 {v4.4s, v5.4s, v6.4s, v7.4s}, [%x[data]], #0x40\n\t"
"rev32 v4.16b, v4.16b\n\t"
+32 -54
View File
@@ -33,42 +33,31 @@
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
#ifndef __APPLE__
.text
.type L_SHA3_transform_crypto_r, %object
.section .rodata
.type L_SHA3_transform_crypto_r, %object
.size L_SHA3_transform_crypto_r, 192
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 3
.align 4
#else
.p2align 3
.p2align 4
#endif /* __APPLE__ */
L_SHA3_transform_crypto_r:
.xword 0x0000000000000001
.xword 0x0000000000008082
.xword 0x800000000000808a
.xword 0x8000000080008000
.xword 0x000000000000808b
.xword 0x0000000080000001
.xword 0x8000000080008081
.xword 0x8000000000008009
.xword 0x000000000000008a
.xword 0x0000000000000088
.xword 0x0000000080008009
.xword 0x000000008000000a
.xword 0x000000008000808b
.xword 0x800000000000008b
.xword 0x8000000000008089
.xword 0x8000000000008003
.xword 0x8000000000008002
.xword 0x8000000000000080
.xword 0x000000000000800a
.xword 0x800000008000000a
.xword 0x8000000080008081
.xword 0x8000000000008080
.xword 0x0000000080000001
.xword 0x8000000080008008
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
#ifndef __APPLE__
.text
.globl BlockSha3_crypto
@@ -207,42 +196,31 @@ L_sha3_crypto_begin:
#endif /* WOLFSSL_ARMASM_CRYPTO_SHA3 */
#ifndef __APPLE__
.text
.type L_SHA3_transform_base_r, %object
.section .rodata
.type L_SHA3_transform_base_r, %object
.size L_SHA3_transform_base_r, 192
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 3
.align 4
#else
.p2align 3
.p2align 4
#endif /* __APPLE__ */
L_SHA3_transform_base_r:
.xword 0x0000000000000001
.xword 0x0000000000008082
.xword 0x800000000000808a
.xword 0x8000000080008000
.xword 0x000000000000808b
.xword 0x0000000080000001
.xword 0x8000000080008081
.xword 0x8000000000008009
.xword 0x000000000000008a
.xword 0x0000000000000088
.xword 0x0000000080008009
.xword 0x000000008000000a
.xword 0x000000008000808b
.xword 0x800000000000008b
.xword 0x8000000000008089
.xword 0x8000000000008003
.xword 0x8000000000008002
.xword 0x8000000000000080
.xword 0x000000000000800a
.xword 0x800000008000000a
.xword 0x8000000080008081
.xword 0x8000000000008080
.xword 0x0000000080000001
.xword 0x8000000080008008
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
#ifndef __APPLE__
.text
.globl BlockSha3_base
+28 -28
View File
@@ -34,19 +34,19 @@
#ifdef WOLFSSL_SHA3
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA3
static const word64 L_SHA3_transform_crypto_r[] = {
0x0000000000000001, 0x0000000000008082,
0x800000000000808a, 0x8000000080008000,
0x000000000000808b, 0x0000000080000001,
0x8000000080008081, 0x8000000000008009,
0x000000000000008a, 0x0000000000000088,
0x0000000080008009, 0x000000008000000a,
0x000000008000808b, 0x800000000000008b,
0x8000000000008089, 0x8000000000008003,
0x8000000000008002, 0x8000000000000080,
0x000000000000800a, 0x800000008000000a,
0x8000000080008081, 0x8000000000008080,
0x0000000080000001, 0x8000000080008008,
XALIGNED(16) static const word64 L_SHA3_transform_crypto_r[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
0x8000000080008081UL, 0x8000000000008009UL,
0x000000000000008aUL, 0x0000000000000088UL,
0x0000000080008009UL, 0x000000008000000aUL,
0x000000008000808bUL, 0x800000000000008bUL,
0x8000000000008089UL, 0x8000000000008003UL,
0x8000000000008002UL, 0x8000000000000080UL,
0x000000000000800aUL, 0x800000008000000aUL,
0x8000000080008081UL, 0x8000000000008080UL,
0x0000000080000001UL, 0x8000000080008008UL,
};
void BlockSha3_crypto(word64* state)
@@ -67,7 +67,7 @@ void BlockSha3_crypto(word64* state)
"mov x2, #24\n\t"
/* Start of 24 rounds */
"\n"
"L_sha3_crypto_begin_%=: \n\t"
"L_sha3_crypto_begin_%=:\n\t"
/* Col Mix */
"eor3 v31.16b, v0.16b, v5.16b, v10.16b\n\t"
"eor3 v27.16b, v1.16b, v6.16b, v11.16b\n\t"
@@ -165,19 +165,19 @@ void BlockSha3_crypto(word64* state)
}
#endif /* WOLFSSL_ARMASM_CRYPTO_SHA3 */
static const word64 L_SHA3_transform_base_r[] = {
0x0000000000000001, 0x0000000000008082,
0x800000000000808a, 0x8000000080008000,
0x000000000000808b, 0x0000000080000001,
0x8000000080008081, 0x8000000000008009,
0x000000000000008a, 0x0000000000000088,
0x0000000080008009, 0x000000008000000a,
0x000000008000808b, 0x800000000000008b,
0x8000000000008089, 0x8000000000008003,
0x8000000000008002, 0x8000000000000080,
0x000000000000800a, 0x800000008000000a,
0x8000000080008081, 0x8000000000008080,
0x0000000080000001, 0x8000000080008008,
XALIGNED(16) static const word64 L_SHA3_transform_base_r[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
0x8000000080008081UL, 0x8000000000008009UL,
0x000000000000008aUL, 0x0000000000000088UL,
0x0000000080008009UL, 0x000000008000000aUL,
0x000000008000808bUL, 0x800000000000008bUL,
0x8000000000008089UL, 0x8000000000008003UL,
0x8000000000008002UL, 0x8000000000000080UL,
0x000000000000800aUL, 0x800000008000000aUL,
0x8000000080008081UL, 0x8000000000008080UL,
0x0000000080000001UL, 0x8000000080008008UL,
};
void BlockSha3_base(word64* state)
@@ -203,7 +203,7 @@ void BlockSha3_base(word64* state)
"mov x28, #24\n\t"
/* Start of 24 rounds */
"\n"
"L_SHA3_transform_base_begin_%=: \n\t"
"L_SHA3_transform_base_begin_%=:\n\t"
"stp %[r], x28, [x29, #48]\n\t"
"eor %x[state], x5, x10\n\t"
"eor x30, x1, x6\n\t"
+91 -168
View File
@@ -32,113 +32,75 @@
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#ifndef __APPLE__
.text
.type L_SHA512_transform_neon_len_k, %object
.section .rodata
.type L_SHA512_transform_neon_len_k, %object
.size L_SHA512_transform_neon_len_k, 640
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 3
.align 4
#else
.p2align 3
.p2align 4
#endif /* __APPLE__ */
L_SHA512_transform_neon_len_k:
.xword 0x428a2f98d728ae22
.xword 0x7137449123ef65cd
.xword 0xb5c0fbcfec4d3b2f
.xword 0xe9b5dba58189dbbc
.xword 0x3956c25bf348b538
.xword 0x59f111f1b605d019
.xword 0x923f82a4af194f9b
.xword 0xab1c5ed5da6d8118
.xword 0xd807aa98a3030242
.xword 0x12835b0145706fbe
.xword 0x243185be4ee4b28c
.xword 0x550c7dc3d5ffb4e2
.xword 0x72be5d74f27b896f
.xword 0x80deb1fe3b1696b1
.xword 0x9bdc06a725c71235
.xword 0xc19bf174cf692694
.xword 0xe49b69c19ef14ad2
.xword 0xefbe4786384f25e3
.xword 0x0fc19dc68b8cd5b5
.xword 0x240ca1cc77ac9c65
.xword 0x2de92c6f592b0275
.xword 0x4a7484aa6ea6e483
.xword 0x5cb0a9dcbd41fbd4
.xword 0x76f988da831153b5
.xword 0x983e5152ee66dfab
.xword 0xa831c66d2db43210
.xword 0xb00327c898fb213f
.xword 0xbf597fc7beef0ee4
.xword 0xc6e00bf33da88fc2
.xword 0xd5a79147930aa725
.xword 0x06ca6351e003826f
.xword 0x142929670a0e6e70
.xword 0x27b70a8546d22ffc
.xword 0x2e1b21385c26c926
.xword 0x4d2c6dfc5ac42aed
.xword 0x53380d139d95b3df
.xword 0x650a73548baf63de
.xword 0x766a0abb3c77b2a8
.xword 0x81c2c92e47edaee6
.xword 0x92722c851482353b
.xword 0xa2bfe8a14cf10364
.xword 0xa81a664bbc423001
.xword 0xc24b8b70d0f89791
.xword 0xc76c51a30654be30
.xword 0xd192e819d6ef5218
.xword 0xd69906245565a910
.xword 0xf40e35855771202a
.xword 0x106aa07032bbd1b8
.xword 0x19a4c116b8d2d0c8
.xword 0x1e376c085141ab53
.xword 0x2748774cdf8eeb99
.xword 0x34b0bcb5e19b48a8
.xword 0x391c0cb3c5c95a63
.xword 0x4ed8aa4ae3418acb
.xword 0x5b9cca4f7763e373
.xword 0x682e6ff3d6b2b8a3
.xword 0x748f82ee5defb2fc
.xword 0x78a5636f43172f60
.xword 0x84c87814a1f0ab72
.xword 0x8cc702081a6439ec
.xword 0x90befffa23631e28
.xword 0xa4506cebde82bde9
.xword 0xbef9a3f7b2c67915
.xword 0xc67178f2e372532b
.xword 0xca273eceea26619c
.xword 0xd186b8c721c0c207
.xword 0xeada7dd6cde0eb1e
.xword 0xf57d4f7fee6ed178
.xword 0x06f067aa72176fba
.xword 0x0a637dc5a2c898a6
.xword 0x113f9804bef90dae
.xword 0x1b710b35131c471b
.xword 0x28db77f523047d84
.xword 0x32caab7b40c72493
.xword 0x3c9ebe0a15c9bebc
.xword 0x431d67c49c100d4c
.xword 0x4cc5d4becb3e42b6
.xword 0x597f299cfc657e2a
.xword 0x5fcb6fab3ad6faec
.xword 0x6c44198c4a475817
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
#ifndef __APPLE__
.text
.type L_SHA512_transform_neon_len_r8, %object
.section .rodata
.type L_SHA512_transform_neon_len_r8, %object
.size L_SHA512_transform_neon_len_r8, 16
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_SHA512_transform_neon_len_r8:
.xword 0x7060504030201, 0x80f0e0d0c0b0a09
.quad 0x0007060504030201,0x080f0e0d0c0b0a09
#ifndef __APPLE__
.text
.globl Transform_Sha512_Len_neon
@@ -1087,98 +1049,59 @@ L_sha512_len_neon_start:
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA512
#ifndef __APPLE__
.text
.type L_SHA512_trans_crypto_len_k, %object
.section .rodata
.type L_SHA512_trans_crypto_len_k, %object
.size L_SHA512_trans_crypto_len_k, 640
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 16-byte aligned, 128-bit aligned
#ifndef __APPLE__
.align 3
.align 4
#else
.p2align 3
.p2align 4
#endif /* __APPLE__ */
L_SHA512_trans_crypto_len_k:
.xword 0x428a2f98d728ae22
.xword 0x7137449123ef65cd
.xword 0xb5c0fbcfec4d3b2f
.xword 0xe9b5dba58189dbbc
.xword 0x3956c25bf348b538
.xword 0x59f111f1b605d019
.xword 0x923f82a4af194f9b
.xword 0xab1c5ed5da6d8118
.xword 0xd807aa98a3030242
.xword 0x12835b0145706fbe
.xword 0x243185be4ee4b28c
.xword 0x550c7dc3d5ffb4e2
.xword 0x72be5d74f27b896f
.xword 0x80deb1fe3b1696b1
.xword 0x9bdc06a725c71235
.xword 0xc19bf174cf692694
.xword 0xe49b69c19ef14ad2
.xword 0xefbe4786384f25e3
.xword 0x0fc19dc68b8cd5b5
.xword 0x240ca1cc77ac9c65
.xword 0x2de92c6f592b0275
.xword 0x4a7484aa6ea6e483
.xword 0x5cb0a9dcbd41fbd4
.xword 0x76f988da831153b5
.xword 0x983e5152ee66dfab
.xword 0xa831c66d2db43210
.xword 0xb00327c898fb213f
.xword 0xbf597fc7beef0ee4
.xword 0xc6e00bf33da88fc2
.xword 0xd5a79147930aa725
.xword 0x06ca6351e003826f
.xword 0x142929670a0e6e70
.xword 0x27b70a8546d22ffc
.xword 0x2e1b21385c26c926
.xword 0x4d2c6dfc5ac42aed
.xword 0x53380d139d95b3df
.xword 0x650a73548baf63de
.xword 0x766a0abb3c77b2a8
.xword 0x81c2c92e47edaee6
.xword 0x92722c851482353b
.xword 0xa2bfe8a14cf10364
.xword 0xa81a664bbc423001
.xword 0xc24b8b70d0f89791
.xword 0xc76c51a30654be30
.xword 0xd192e819d6ef5218
.xword 0xd69906245565a910
.xword 0xf40e35855771202a
.xword 0x106aa07032bbd1b8
.xword 0x19a4c116b8d2d0c8
.xword 0x1e376c085141ab53
.xword 0x2748774cdf8eeb99
.xword 0x34b0bcb5e19b48a8
.xword 0x391c0cb3c5c95a63
.xword 0x4ed8aa4ae3418acb
.xword 0x5b9cca4f7763e373
.xword 0x682e6ff3d6b2b8a3
.xword 0x748f82ee5defb2fc
.xword 0x78a5636f43172f60
.xword 0x84c87814a1f0ab72
.xword 0x8cc702081a6439ec
.xword 0x90befffa23631e28
.xword 0xa4506cebde82bde9
.xword 0xbef9a3f7b2c67915
.xword 0xc67178f2e372532b
.xword 0xca273eceea26619c
.xword 0xd186b8c721c0c207
.xword 0xeada7dd6cde0eb1e
.xword 0xf57d4f7fee6ed178
.xword 0x06f067aa72176fba
.xword 0x0a637dc5a2c898a6
.xword 0x113f9804bef90dae
.xword 0x1b710b35131c471b
.xword 0x28db77f523047d84
.xword 0x32caab7b40c72493
.xword 0x3c9ebe0a15c9bebc
.xword 0x431d67c49c100d4c
.xword 0x4cc5d4becb3e42b6
.xword 0x597f299cfc657e2a
.xword 0x5fcb6fab3ad6faec
.xword 0x6c44198c4a475817
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
#ifndef __APPLE__
.text
.globl Transform_Sha512_Len_crypto
+87 -87
View File
@@ -33,51 +33,51 @@
#include <wolfssl/wolfcrypt/sha512.h>
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
static const word64 L_SHA512_transform_neon_len_k[] = {
0x428a2f98d728ae22, 0x7137449123ef65cd,
0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,
0x3956c25bf348b538, 0x59f111f1b605d019,
0x923f82a4af194f9b, 0xab1c5ed5da6d8118,
0xd807aa98a3030242, 0x12835b0145706fbe,
0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
0x72be5d74f27b896f, 0x80deb1fe3b1696b1,
0x9bdc06a725c71235, 0xc19bf174cf692694,
0xe49b69c19ef14ad2, 0xefbe4786384f25e3,
0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
0x2de92c6f592b0275, 0x4a7484aa6ea6e483,
0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,
0x983e5152ee66dfab, 0xa831c66d2db43210,
0xb00327c898fb213f, 0xbf597fc7beef0ee4,
0xc6e00bf33da88fc2, 0xd5a79147930aa725,
0x06ca6351e003826f, 0x142929670a0e6e70,
0x27b70a8546d22ffc, 0x2e1b21385c26c926,
0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,
0x650a73548baf63de, 0x766a0abb3c77b2a8,
0x81c2c92e47edaee6, 0x92722c851482353b,
0xa2bfe8a14cf10364, 0xa81a664bbc423001,
0xc24b8b70d0f89791, 0xc76c51a30654be30,
0xd192e819d6ef5218, 0xd69906245565a910,
0xf40e35855771202a, 0x106aa07032bbd1b8,
0x19a4c116b8d2d0c8, 0x1e376c085141ab53,
0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,
0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb,
0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,
0x748f82ee5defb2fc, 0x78a5636f43172f60,
0x84c87814a1f0ab72, 0x8cc702081a6439ec,
0x90befffa23631e28, 0xa4506cebde82bde9,
0xbef9a3f7b2c67915, 0xc67178f2e372532b,
0xca273eceea26619c, 0xd186b8c721c0c207,
0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,
0x06f067aa72176fba, 0x0a637dc5a2c898a6,
0x113f9804bef90dae, 0x1b710b35131c471b,
0x28db77f523047d84, 0x32caab7b40c72493,
0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,
0x4cc5d4becb3e42b6, 0x597f299cfc657e2a,
0x5fcb6fab3ad6faec, 0x6c44198c4a475817,
XALIGNED(16) static const word64 L_SHA512_transform_neon_len_k[] = {
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL, 0x59f111f1b605d019UL,
0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL,
0xd807aa98a3030242UL, 0x12835b0145706fbeUL,
0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL,
0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL,
0x9bdc06a725c71235UL, 0xc19bf174cf692694UL,
0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL,
0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL,
0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL,
0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL,
0x983e5152ee66dfabUL, 0xa831c66d2db43210UL,
0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL,
0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL,
0x06ca6351e003826fUL, 0x142929670a0e6e70UL,
0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL,
0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL,
0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL,
0x81c2c92e47edaee6UL, 0x92722c851482353bUL,
0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL,
0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL,
0xd192e819d6ef5218UL, 0xd69906245565a910UL,
0xf40e35855771202aUL, 0x106aa07032bbd1b8UL,
0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL,
0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL,
0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL,
0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL,
0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL,
0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL,
0x90befffa23631e28UL, 0xa4506cebde82bde9UL,
0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL,
0xca273eceea26619cUL, 0xd186b8c721c0c207UL,
0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL,
0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL,
0x113f9804bef90daeUL, 0x1b710b35131c471bUL,
0x28db77f523047d84UL, 0x32caab7b40c72493UL,
0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL,
0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL,
0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL,
};
static const word64 L_SHA512_transform_neon_len_r8[] = {
0x0007060504030201, 0x080f0e0d0c0b0a09,
XALIGNED(16) static const word64 L_SHA512_transform_neon_len_r8[] = {
0x0007060504030201UL, 0x080f0e0d0c0b0a09UL,
};
void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data, word32 len)
@@ -93,7 +93,7 @@ void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data, word32 len)
"ldp x10, x11, [%x[sha512], #48]\n\t"
/* Start of loop processing a block */
"\n"
"L_sha512_len_neon_begin_%=: \n\t"
"L_sha512_len_neon_begin_%=:\n\t"
/* Load W */
/* Copy digest to add in at end */
"ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [%x[data]], #0x40\n\t"
@@ -119,7 +119,7 @@ void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data, word32 len)
"mov %[r8], #4\n\t"
/* Start of 16 rounds */
"\n"
"L_sha512_len_neon_start_%=: \n\t"
"L_sha512_len_neon_start_%=:\n\t"
/* Round 0 */
"mov x13, v0.d[0]\n\t"
"ldr x15, [%[k]], #8\n\t"
@@ -995,47 +995,47 @@ void Transform_Sha512_Len_neon(wc_Sha512* sha512, const byte* data, word32 len)
}
#ifdef WOLFSSL_ARMASM_CRYPTO_SHA512
static const word64 L_SHA512_trans_crypto_len_k[] = {
0x428a2f98d728ae22, 0x7137449123ef65cd,
0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc,
0x3956c25bf348b538, 0x59f111f1b605d019,
0x923f82a4af194f9b, 0xab1c5ed5da6d8118,
0xd807aa98a3030242, 0x12835b0145706fbe,
0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2,
0x72be5d74f27b896f, 0x80deb1fe3b1696b1,
0x9bdc06a725c71235, 0xc19bf174cf692694,
0xe49b69c19ef14ad2, 0xefbe4786384f25e3,
0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
0x2de92c6f592b0275, 0x4a7484aa6ea6e483,
0x5cb0a9dcbd41fbd4, 0x76f988da831153b5,
0x983e5152ee66dfab, 0xa831c66d2db43210,
0xb00327c898fb213f, 0xbf597fc7beef0ee4,
0xc6e00bf33da88fc2, 0xd5a79147930aa725,
0x06ca6351e003826f, 0x142929670a0e6e70,
0x27b70a8546d22ffc, 0x2e1b21385c26c926,
0x4d2c6dfc5ac42aed, 0x53380d139d95b3df,
0x650a73548baf63de, 0x766a0abb3c77b2a8,
0x81c2c92e47edaee6, 0x92722c851482353b,
0xa2bfe8a14cf10364, 0xa81a664bbc423001,
0xc24b8b70d0f89791, 0xc76c51a30654be30,
0xd192e819d6ef5218, 0xd69906245565a910,
0xf40e35855771202a, 0x106aa07032bbd1b8,
0x19a4c116b8d2d0c8, 0x1e376c085141ab53,
0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8,
0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb,
0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3,
0x748f82ee5defb2fc, 0x78a5636f43172f60,
0x84c87814a1f0ab72, 0x8cc702081a6439ec,
0x90befffa23631e28, 0xa4506cebde82bde9,
0xbef9a3f7b2c67915, 0xc67178f2e372532b,
0xca273eceea26619c, 0xd186b8c721c0c207,
0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178,
0x06f067aa72176fba, 0x0a637dc5a2c898a6,
0x113f9804bef90dae, 0x1b710b35131c471b,
0x28db77f523047d84, 0x32caab7b40c72493,
0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c,
0x4cc5d4becb3e42b6, 0x597f299cfc657e2a,
0x5fcb6fab3ad6faec, 0x6c44198c4a475817,
XALIGNED(16) static const word64 L_SHA512_trans_crypto_len_k[] = {
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL, 0x59f111f1b605d019UL,
0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL,
0xd807aa98a3030242UL, 0x12835b0145706fbeUL,
0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL,
0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL,
0x9bdc06a725c71235UL, 0xc19bf174cf692694UL,
0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL,
0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL,
0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL,
0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL,
0x983e5152ee66dfabUL, 0xa831c66d2db43210UL,
0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL,
0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL,
0x06ca6351e003826fUL, 0x142929670a0e6e70UL,
0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL,
0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL,
0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL,
0x81c2c92e47edaee6UL, 0x92722c851482353bUL,
0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL,
0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL,
0xd192e819d6ef5218UL, 0xd69906245565a910UL,
0xf40e35855771202aUL, 0x106aa07032bbd1b8UL,
0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL,
0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL,
0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL,
0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL,
0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL,
0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL,
0x90befffa23631e28UL, 0xa4506cebde82bde9UL,
0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL,
0xca273eceea26619cUL, 0xd186b8c721c0c207UL,
0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL,
0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL,
0x113f9804bef90daeUL, 0x1b710b35131c471bUL,
0x28db77f523047d84UL, 0x32caab7b40c72493UL,
0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL,
0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL,
0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL,
};
void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data,
@@ -1055,7 +1055,7 @@ void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data,
"ld1 {v24.2d, v25.2d, v26.2d, v27.2d}, [%x[sha512]]\n\t"
/* Start of loop processing a block */
"\n"
"L_sha512_len_crypto_begin_%=: \n\t"
"L_sha512_len_crypto_begin_%=:\n\t"
"mov x3, %[k]\n\t"
/* Load W */
"ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [%x[data]], #0x40\n\t"
File diff suppressed because it is too large Load Diff
+114 -57
View File
@@ -41,12 +41,17 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifndef NO_AES
#include <wolfssl/wolfcrypt/aes.h>
#ifdef HAVE_AES_DECRYPT
XALIGNED(16) static const word32 L_AES_Thumb2_td_data[] = {
XALIGNED(8) static const word32 L_AES_Thumb2_td_data[] = {
0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
@@ -117,7 +122,7 @@ XALIGNED(16) static const word32 L_AES_Thumb2_td_data[] = {
#if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \
defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
XALIGNED(16) static const word32 L_AES_Thumb2_te_data[] = {
XALIGNED(8) static const word32 L_AES_Thumb2_te_data[] = {
0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
@@ -196,7 +201,7 @@ static const word32* L_AES_Thumb2_te = L_AES_Thumb2_te_data;
#endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM ||
* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
#ifdef HAVE_AES_DECRYPT
void AES_invert_key(unsigned char* ks, word32 rounds);
void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
#else
@@ -208,15 +213,11 @@ WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds)
register word32 rounds __asm__ ("r1") = (word32)rounds_p;
register word32* L_AES_Thumb2_te_c __asm__ ("r2") =
(word32*)L_AES_Thumb2_te;
register word32* L_AES_Thumb2_td_c __asm__ ("r3") =
(word32*)L_AES_Thumb2_td;
#else
register word32* L_AES_Thumb2_te_c = (word32*)L_AES_Thumb2_te;
register word32* L_AES_Thumb2_td_c = (word32*)L_AES_Thumb2_td;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -325,24 +326,31 @@ WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds)
#else
"BNE.W L_AES_invert_key_mix_loop_%=\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ks] "+r" (ks), [rounds] "+r" (rounds),
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c),
[L_AES_Thumb2_td] "+r" (L_AES_Thumb2_td_c)
:
#else
:
: [ks] "r" (ks), [rounds] "r" (rounds),
[L_AES_Thumb2_te] "r" (L_AES_Thumb2_te_c),
[L_AES_Thumb2_td] "r" (L_AES_Thumb2_td_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9",
"r10", "r11"
);
}
#endif /* HAVE_AES_DECRYPT */
XALIGNED(16) static const word32 L_AES_Thumb2_rcon[] = {
XALIGNED(8) static const word32 L_AES_Thumb2_rcon[] = {
0x01000000, 0x02000000, 0x04000000, 0x08000000,
0x10000000, 0x20000000, 0x40000000, 0x80000000,
0x1b000000, 0x36000000
};
void AES_set_encrypt_key(const unsigned char* key, word32 len,
unsigned char* ks);
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
unsigned char* ks_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p,
word32 len_p, unsigned char* ks_p)
@@ -358,15 +366,11 @@ WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key,
register unsigned char* ks __asm__ ("r2") = (unsigned char*)ks_p;
register word32* L_AES_Thumb2_te_c __asm__ ("r3") =
(word32*)L_AES_Thumb2_te;
register word32* L_AES_Thumb2_rcon_c __asm__ ("r4") =
(word32*)&L_AES_Thumb2_rcon;
#else
register word32* L_AES_Thumb2_te_c = (word32*)L_AES_Thumb2_te;
register word32* L_AES_Thumb2_rcon_c = (word32*)&L_AES_Thumb2_rcon;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -629,16 +633,24 @@ WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key,
#else
"L_AES_set_encrypt_key_end_%=:\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c),
[L_AES_Thumb2_rcon] "+r" (L_AES_Thumb2_rcon_c)
:
#else
:
: [key] "r" (key), [len] "r" (len), [ks] "r" (ks),
[L_AES_Thumb2_te] "r" (L_AES_Thumb2_te_c),
[L_AES_Thumb2_rcon] "r" (L_AES_Thumb2_rcon_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10"
);
}
#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
void AES_encrypt_block(const word32* te, int nr, int len, const word32* ks);
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
const word32* ks_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te_p, int nr_p,
int len_p, const word32* ks_p)
@@ -869,8 +881,13 @@ WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te, int nr, int len,
"EOR r5, r5, r9\n\t"
"EOR r6, r6, r10\n\t"
"EOR r7, r7, r11\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [te] "+r" (te), [nr] "+r" (nr), [len] "+r" (len), [ks] "+r" (ks)
:
#else
:
: [te] "r" (te), [nr] "r" (nr), [len] "r" (len), [ks] "r" (ks)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -884,8 +901,8 @@ static const word32* L_AES_Thumb2_te_ecb = L_AES_Thumb2_te_data;
#if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \
defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
defined(HAVE_AES_ECB)
void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr);
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -905,10 +922,8 @@ WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
register int nr __asm__ ("r4") = (int)nr_p;
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r5") =
(word32*)L_AES_Thumb2_te_ecb;
#else
register word32* L_AES_Thumb2_te_ecb_c = (word32*)L_AES_Thumb2_te_ecb;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -1749,9 +1764,15 @@ WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
"L_AES_ECB_encrypt_end_%=:\n\t"
#endif
"POP {%[ks]}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
);
}
@@ -1759,8 +1780,9 @@ WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
#endif /* HAVE_AESCCM || HAVE_AESGCM || WOLFSSL_AES_DIRECT ||
* WOLFSSL_AES_COUNTER || HAVE_AES_ECB */
#ifdef HAVE_AES_CBC
void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv);
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p,
unsigned char* iv_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -1782,10 +1804,8 @@ WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
register unsigned char* iv __asm__ ("r5") = (unsigned char*)iv_p;
register word32* L_AES_Thumb2_te_ecb_c __asm__ ("r6") =
(word32*)L_AES_Thumb2_te_ecb;
#else
register word32* L_AES_Thumb2_te_ecb_c = (word32*)L_AES_Thumb2_te_ecb;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -2645,10 +2665,17 @@ WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
#endif
"POP {%[ks], r9}\n\t"
"STM r9, {r4, r5, r6, r7}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [iv] "+r" (iv),
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [iv] "r" (iv),
[L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
);
}
@@ -2656,8 +2683,9 @@ WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
#endif /* HAVE_AES_CBC */
#ifdef WOLFSSL_AES_COUNTER
static const word32* L_AES_Thumb2_te_ctr = L_AES_Thumb2_te_data;
void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr);
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p,
unsigned char* ctr_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -2679,10 +2707,8 @@ WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
register unsigned char* ctr __asm__ ("r5") = (unsigned char*)ctr_p;
register word32* L_AES_Thumb2_te_ctr_c __asm__ ("r6") =
(word32*)L_AES_Thumb2_te_ctr;
#else
register word32* L_AES_Thumb2_te_ctr_c = (word32*)L_AES_Thumb2_te_ctr;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3563,10 +3589,17 @@ WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
"REV r6, r6\n\t"
"REV r7, r7\n\t"
"STM r8, {r4, r5, r6, r7}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [ctr] "+r" (ctr),
[L_AES_Thumb2_te_ctr] "+r" (L_AES_Thumb2_te_ctr_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [ctr] "r" (ctr),
[L_AES_Thumb2_te_ctr] "r" (L_AES_Thumb2_te_ctr_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
);
}
@@ -3576,7 +3609,7 @@ WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB)
#ifndef WOLFSSL_ARMASM_AES_BLOCK_INLINE
void AES_decrypt_block(const word32* td, int nr, const byte* td4);
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td_p, int nr_p,
const byte* td4_p)
@@ -3806,15 +3839,20 @@ WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td, int nr,
"EOR r5, r5, r9\n\t"
"EOR r6, r6, r10\n\t"
"EOR r7, r7, r11\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [td] "+r" (td), [nr] "+r" (nr), [td4] "+r" (td4)
:
#else
:
: [td] "r" (td), [nr] "r" (nr), [td4] "r" (td4)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
#endif /* !WOLFSSL_ARMASM_AES_BLOCK_INLINE */
static const word32* L_AES_Thumb2_td_ecb = L_AES_Thumb2_td_data;
static const byte L_AES_Thumb2_td4[] = {
XALIGNED(4) static const word8 L_AES_Thumb2_td4[] = {
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
@@ -3849,9 +3887,10 @@ static const byte L_AES_Thumb2_td4[] = {
0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
};
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || defined(HAVE_AES_ECB)
void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr);
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
defined(HAVE_AES_ECB)
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -3871,15 +3910,11 @@ WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in,
register int nr __asm__ ("r4") = (int)nr_p;
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r5") =
(word32*)L_AES_Thumb2_td_ecb;
register byte* L_AES_Thumb2_td4_c __asm__ ("r6") =
(byte*)&L_AES_Thumb2_td4;
register word8* L_AES_Thumb2_td4_c __asm__ ("r6") =
(word8*)&L_AES_Thumb2_td4;
#else
register word32* L_AES_Thumb2_td_ecb_c = (word32*)L_AES_Thumb2_td_ecb;
register byte* L_AES_Thumb2_td4_c = (byte*)&L_AES_Thumb2_td4;
register word8* L_AES_Thumb2_td4_c = (word8*)&L_AES_Thumb2_td4;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4717,18 +4752,26 @@ WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in,
#else
"L_AES_ECB_decrypt_end_%=:\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c),
[L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb_c),
[L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
);
}
#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER || defined(HAVE_AES_ECB) */
#ifdef HAVE_AES_CBC
void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv);
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p,
unsigned char* iv_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -4750,15 +4793,11 @@ WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
register unsigned char* iv __asm__ ("r5") = (unsigned char*)iv_p;
register word32* L_AES_Thumb2_td_ecb_c __asm__ ("r6") =
(word32*)L_AES_Thumb2_td_ecb;
register byte* L_AES_Thumb2_td4_c __asm__ ("r7") =
(byte*)&L_AES_Thumb2_td4;
register word8* L_AES_Thumb2_td4_c __asm__ ("r7") =
(word8*)&L_AES_Thumb2_td4;
#else
register word32* L_AES_Thumb2_td_ecb_c = (word32*)L_AES_Thumb2_td_ecb;
register byte* L_AES_Thumb2_td4_c = (byte*)&L_AES_Thumb2_td4;
register word8* L_AES_Thumb2_td4_c = (word8*)&L_AES_Thumb2_td4;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -6431,11 +6470,19 @@ WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
"L_AES_CBC_decrypt_end_%=:\n\t"
#endif
"POP {%[ks], r4}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [iv] "+r" (iv),
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c),
[L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [iv] "r" (iv),
[L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb_c),
[L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r8", "r9", "r10", "r11"
);
}
@@ -6445,15 +6492,15 @@ WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
* HAVE_AES_ECB */
#endif /* HAVE_AES_DECRYPT */
#ifdef HAVE_AESGCM
XALIGNED(16) static const word32 L_GCM_gmult_len_r[] = {
XALIGNED(8) static const word32 L_GCM_gmult_len_r[] = {
0x00000000, 0x1c200000, 0x38400000, 0x24600000,
0x70800000, 0x6ca00000, 0x48c00000, 0x54e00000,
0xe1000000, 0xfd200000, 0xd9400000, 0xc5600000,
0x91800000, 0x8da00000, 0xa9c00000, 0xb5e00000,
};
void GCM_gmult_len(unsigned char* x, const unsigned char** m,
const unsigned char* data, unsigned long len);
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
const unsigned char* data_p, unsigned long len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p,
const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p)
@@ -6471,10 +6518,8 @@ WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x,
register unsigned long len __asm__ ("r3") = (unsigned long)len_p;
register word32* L_GCM_gmult_len_r_c __asm__ ("r4") =
(word32*)&L_GCM_gmult_len_r;
#else
register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -7036,17 +7081,24 @@ WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x,
#else
"BNE.W L_GCM_gmult_len_start_block_%=\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
:
#else
:
: [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len),
[L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10",
"r11"
);
}
static const word32* L_AES_Thumb2_te_gcm = L_AES_Thumb2_te_data;
void AES_GCM_encrypt(const unsigned char* in, unsigned char* out,
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr);
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
unsigned long len_p, const unsigned char* ks_p, int nr_p,
unsigned char* ctr_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p,
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
@@ -7068,10 +7120,8 @@ WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in,
register unsigned char* ctr __asm__ ("r5") = (unsigned char*)ctr_p;
register word32* L_AES_Thumb2_te_gcm_c __asm__ ("r6") =
(word32*)L_AES_Thumb2_te_gcm;
#else
register word32* L_AES_Thumb2_te_gcm_c = (word32*)L_AES_Thumb2_te_gcm;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -7943,10 +7993,17 @@ WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in,
"REV r6, r6\n\t"
"REV r7, r7\n\t"
"STM r8, {r4, r5, r6, r7}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks),
[nr] "+r" (nr), [ctr] "+r" (ctr),
[L_AES_Thumb2_te_gcm] "+r" (L_AES_Thumb2_te_gcm_c)
:
#else
:
: [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks),
[nr] "r" (nr), [ctr] "r" (ctr),
[L_AES_Thumb2_te_gcm] "r" (L_AES_Thumb2_te_gcm_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
);
}
+13 -10
View File
@@ -53,19 +53,22 @@ wc_chacha_setiv:
POP {r4, r5, r6, pc}
/* Cycle Count = 26 */
.size wc_chacha_setiv,.-wc_chacha_setiv
#ifndef __APPLE__
.text
.type L_chacha_thumb2_constants, %object
.size L_chacha_thumb2_constants, 32
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 8-byte aligned, 64-bit aligned */
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_chacha_thumb2_constants:
.word 0x61707865
.word 0x3120646e
.word 0x79622d36
.word 0x6b206574
.word 0x61707865
.word 0x3320646e
.word 0x79622d32
.word 0x6b206574
.long 0x61707865,0x3120646e,0x79622d36,0x6b206574
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574
.text
.align 4
.globl wc_chacha_setkey
@@ -568,6 +571,6 @@ L_chacha_thumb2_over_done:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+28 -3
View File
@@ -41,6 +41,11 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifdef HAVE_CHACHA
#include <wolfssl/wolfcrypt/chacha.h>
@@ -71,13 +76,18 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x, const byte* iv,
"REV r6, r6\n\t"
#endif /* BIG_ENDIAN_ORDER */
"STM r3, {r4, r5, r6}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [x] "+r" (x), [iv] "+r" (iv), [counter] "+r" (counter)
:
#else
:
: [x] "r" (x), [iv] "r" (iv), [counter] "r" (counter)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6"
);
}
XALIGNED(16) static const word32 L_chacha_thumb2_constants[] = {
XALIGNED(8) static const word32 L_chacha_thumb2_constants[] = {
0x61707865, 0x3120646e, 0x79622d36, 0x6b206574,
0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
};
@@ -96,11 +106,9 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
register word32 keySz __asm__ ("r2") = (word32)keySz_p;
register word32* L_chacha_thumb2_constants_c __asm__ ("r3") =
(word32*)&L_chacha_thumb2_constants;
#else
register word32* L_chacha_thumb2_constants_c =
(word32*)&L_chacha_thumb2_constants;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -143,9 +151,15 @@ WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
"L_chacha_thumb2_setkey_same_key_bytes_%=:\n\t"
#endif
"STM %[x], {r3, r4, r5, r6}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [x] "+r" (x), [key] "+r" (key), [keySz] "+r" (keySz),
[L_chacha_thumb2_constants] "+r" (L_chacha_thumb2_constants_c)
:
#else
:
: [x] "r" (x), [key] "r" (key), [keySz] "r" (keySz),
[L_chacha_thumb2_constants] "r" (L_chacha_thumb2_constants_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7"
);
}
@@ -583,8 +597,13 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
"L_chacha_thumb2_crypt_done_%=:\n\t"
#endif
"ADD sp, sp, #0x34\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [c] "+r" (c), [m] "+r" (m), [len] "+r" (len)
:
#else
:
: [ctx] "r" (ctx), [c] "r" (c), [m] "r" (m), [len] "r" (len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
@@ -727,9 +746,15 @@ WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
#else
"L_chacha_thumb2_over_done_%=:\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [over] "+r" (over), [output] "+r" (output), [input] "+r" (input),
[len] "+r" (len)
:
#else
:
: [over] "r" (over), [output] "r" (output), [input] "r" (input),
[len] "r" (len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
);
}
+1 -1
View File
@@ -6480,6 +6480,6 @@ sc_muladd:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+214 -2
View File
@@ -41,6 +41,11 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
/* Based on work by: Emil Lenngren
* https://github.com/pornin/X25519-Cortex-M4
@@ -63,8 +68,13 @@ WC_OMIT_FRAME_POINTER void fe_init()
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
"\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc"
);
}
@@ -166,8 +176,13 @@ WC_OMIT_FRAME_POINTER void fe_add_sub_op()
"SBC r11, r11, #0x0\n\t"
"STM r1, {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
/* Done Add-Sub */
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -207,8 +222,13 @@ WC_OMIT_FRAME_POINTER void fe_sub_op()
"SBC lr, lr, #0x0\n\t"
"STM r0, {r6, r7, r8, r9, r10, r11, r12, lr}\n\t"
/* Done Sub */
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -227,8 +247,13 @@ WC_OMIT_FRAME_POINTER void fe_sub(fe r, const fe a, const fe b)
__asm__ __volatile__ (
"BL fe_sub_op\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
:
#else
:
: [r] "r" (r), [a] "r" (a), [b] "r" (b)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -269,8 +294,13 @@ WC_OMIT_FRAME_POINTER void fe_add_op()
"ADC lr, lr, #0x0\n\t"
"STM r0, {r6, r7, r8, r9, r10, r11, r12, lr}\n\t"
/* Done Add */
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -289,8 +319,13 @@ WC_OMIT_FRAME_POINTER void fe_add(fe r, const fe a, const fe b)
__asm__ __volatile__ (
"BL fe_add_op\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
:
#else
:
: [r] "r" (r), [a] "r" (a), [b] "r" (b)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -327,8 +362,13 @@ WC_OMIT_FRAME_POINTER void fe_frombytes(fe out, const unsigned char* in)
"STR r7, [%[out], #20]\n\t"
"STR r8, [%[out], #24]\n\t"
"STR r9, [%[out], #28]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [out] "+r" (out), [in] "+r" (in)
:
#else
:
: [out] "r" (out), [in] "r" (in)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
);
}
@@ -373,8 +413,13 @@ WC_OMIT_FRAME_POINTER void fe_tobytes(unsigned char* out, const fe n)
"STR r7, [%[out], #20]\n\t"
"STR r8, [%[out], #24]\n\t"
"STR r9, [%[out], #28]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [out] "+r" (out), [n] "+r" (n)
:
#else
:
: [out] "r" (out), [n] "r" (n)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"
);
}
@@ -400,8 +445,13 @@ WC_OMIT_FRAME_POINTER void fe_1(fe n)
"MOV r8, #0x0\n\t"
"MOV r9, #0x0\n\t"
"STM %[n], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [n] "+r" (n)
:
#else
:
: [n] "r" (n)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
);
}
@@ -427,8 +477,13 @@ WC_OMIT_FRAME_POINTER void fe_0(fe n)
"MOV r8, #0x0\n\t"
"MOV r9, #0x0\n\t"
"STM %[n], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [n] "+r" (n)
:
#else
:
: [n] "r" (n)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"
);
}
@@ -454,8 +509,13 @@ WC_OMIT_FRAME_POINTER void fe_copy(fe r, const fe a)
"LDRD r4, r5, [%[a], #24]\n\t"
"STRD r2, r3, [%[r], #16]\n\t"
"STRD r4, r5, [%[r], #24]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5"
);
}
@@ -487,8 +547,13 @@ WC_OMIT_FRAME_POINTER void fe_neg(fe r, const fe a)
"SBCS r4, r7, r4\n\t"
"SBC r5, r6, r5\n\t"
"STM %[r]!, {r2, r3, r4, r5}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7"
);
}
@@ -531,8 +596,13 @@ WC_OMIT_FRAME_POINTER int fe_isnonzero(const fe a)
"ORR r4, r4, r6\n\t"
"ORR r2, r2, r8\n\t"
"ORR %[a], r2, r4\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [a] "+r" (a)
:
#else
:
: [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
"r10"
);
@@ -564,14 +634,20 @@ WC_OMIT_FRAME_POINTER int fe_isnegative(const fe a)
"AND %[a], r2, #0x1\n\t"
"LSR r1, r1, #31\n\t"
"EOR %[a], %[a], r1\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [a] "+r" (a)
:
#else
:
: [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r1", "r2", "r3", "r4", "r5"
);
return (word32)(size_t)a;
}
#if defined(HAVE_ED25519_MAKE_KEY) || defined(HAVE_ED25519_SIGN) || defined(WOLFSSL_CURVE25519_USE_ED25519)
#if defined(HAVE_ED25519_MAKE_KEY) || defined(HAVE_ED25519_SIGN) || \
defined(WOLFSSL_CURVE25519_USE_ED25519)
#ifndef WC_NO_CACHE_RESISTANT
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r_p, const fe* base_p,
@@ -1550,8 +1626,13 @@ WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r, const fe* base, signed char b)
"STRD r4, r5, [%[r], #24]\n\t"
"STRD r6, r7, [%[r], #56]\n\t"
"STRD r8, r9, [%[r], #88]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [base] "+r" (base), [b] "+r" (b)
:
#else
:
: [r] "r" (r), [base] "r" (base), [b] "r" (b)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r3", "r10",
"r11", "r12", "lr"
);
@@ -1664,15 +1745,21 @@ WC_OMIT_FRAME_POINTER void fe_cmov_table(fe* r, const fe* base, signed char b)
"AND r7, r7, lr\n\t"
"STM %[r]!, {r4, r5, r6, r7}\n\t"
"SUB %[base], %[base], %[b]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [base] "+r" (base), [b] "+r" (b)
:
#else
:
: [r] "r" (r), [base] "r" (base), [b] "r" (b)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
}
#endif /* WC_NO_CACHE_RESISTANT */
#endif /* HAVE_ED25519_MAKE_KEY || HAVE_ED25519_SIGN || WOLFSSL_CURVE25519_USE_ED25519 */
#endif /* HAVE_ED25519_MAKE_KEY || HAVE_ED25519_SIGN ||
* WOLFSSL_CURVE25519_USE_ED25519 */
#endif /* HAVE_ED25519 || WOLFSSL_CURVE25519_USE_ED25519 */
#ifdef WOLFSSL_ARM_ARCH_7M
void fe_mul_op(void);
@@ -2054,8 +2141,13 @@ WC_OMIT_FRAME_POINTER void fe_mul_op()
"LDR r0, [sp, #36]\n\t"
"STM r0, {r1, r2, r3, r4, r5, r6, r7, r8}\n\t"
"ADD sp, sp, #0x28\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -2194,8 +2286,13 @@ WC_OMIT_FRAME_POINTER void fe_mul_op()
/* Store */
"STM lr, {r0, r1, r2, r3, r4, r5, r6, r7}\n\t"
"ADD sp, sp, #0x10\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -2215,8 +2312,13 @@ WC_OMIT_FRAME_POINTER void fe_mul(fe r, const fe a, const fe b)
__asm__ __volatile__ (
"BL fe_mul_op\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
:
#else
:
: [r] "r" (r), [a] "r" (a), [b] "r" (b)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -2495,8 +2597,13 @@ WC_OMIT_FRAME_POINTER void fe_sq_op()
"LDR r0, [sp, #64]\n\t"
"STM r0, {r1, r2, r3, r4, r5, r6, r7, r8}\n\t"
"ADD sp, sp, #0x44\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -2621,8 +2728,13 @@ WC_OMIT_FRAME_POINTER void fe_sq_op()
"POP {lr}\n\t"
/* Store */
"STM lr, {r0, r1, r2, r3, r4, r5, r6, r7}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
:
:
#else
:
:
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -2641,8 +2753,13 @@ WC_OMIT_FRAME_POINTER void fe_sq(fe r, const fe a)
__asm__ __volatile__ (
"BL fe_sq_op\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -2702,8 +2819,13 @@ WC_OMIT_FRAME_POINTER void fe_mul121666(fe r, fe a)
"ADCS r8, r8, #0x0\n\t"
"ADC r9, r9, #0x0\n\t"
"STM %[r], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12"
);
@@ -2749,8 +2871,13 @@ WC_OMIT_FRAME_POINTER void fe_mul121666(fe r, fe a)
"ADCS r8, r8, #0x0\n\t"
"ADC r9, r9, #0x0\n\t"
"STM %[r], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12"
);
@@ -3247,8 +3374,13 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"BL fe_mul_op\n\t"
"MOV r0, #0x0\n\t"
"ADD sp, sp, #0xbc\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [n] "+r" (n), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [n] "r" (n), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r3", "r12", "lr"
);
@@ -3655,8 +3787,13 @@ WC_OMIT_FRAME_POINTER int curve25519(byte* r, const byte* n, const byte* a)
"STM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
"MOV r0, #0x0\n\t"
"ADD sp, sp, #0xc0\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [n] "+r" (n), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [n] "r" (n), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r3", "r12", "lr"
);
@@ -3916,8 +4053,13 @@ WC_OMIT_FRAME_POINTER void fe_invert(fe r, const fe a)
"LDR %[a], [sp, #132]\n\t"
"LDR %[r], [sp, #128]\n\t"
"ADD sp, sp, #0x88\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr", "r12", "r2", "r3", "r4", "r5", "r6", "r7", "r8",
"r9", "r10", "r11"
);
@@ -4231,8 +4373,13 @@ WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
"LDR r0, [sp, #64]\n\t"
"STM r0, {r1, r2, r3, r4, r5, r6, r7, r8}\n\t"
"ADD sp, sp, #0x44\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -4394,8 +4541,13 @@ WC_OMIT_FRAME_POINTER void fe_sq2(fe r, const fe a)
"STM r12, {r0, r1, r2, r3, r4, r5, r6, r7}\n\t"
"MOV r0, r12\n\t"
"MOV r1, lr\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr"
);
}
@@ -4651,8 +4803,13 @@ WC_OMIT_FRAME_POINTER void fe_pow22523(fe r, const fe a)
"LDR %[a], [sp, #100]\n\t"
"LDR %[r], [sp, #96]\n\t"
"ADD sp, sp, #0x68\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a)
:
#else
:
: [r] "r" (r), [a] "r" (a)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr", "r12", "r2", "r3", "r4", "r5", "r6", "r7", "r8",
"r9", "r10", "r11"
);
@@ -4688,8 +4845,13 @@ WC_OMIT_FRAME_POINTER void ge_p1p1_to_p2(ge_p2 * r, const ge_p1p1 * p)
"ADD r0, r0, #0x40\n\t"
"BL fe_mul_op\n\t"
"ADD sp, sp, #0x8\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p)
:
#else
:
: [r] "r" (r), [p] "r" (p)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
"r10", "r11", "r12"
);
@@ -4730,8 +4892,13 @@ WC_OMIT_FRAME_POINTER void ge_p1p1_to_p3(ge_p3 * r, const ge_p1p1 * p)
"ADD r0, r0, #0x60\n\t"
"BL fe_mul_op\n\t"
"ADD sp, sp, #0x8\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p)
:
#else
:
: [r] "r" (r), [p] "r" (p)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "lr", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
"r10", "r11", "r12"
);
@@ -4784,8 +4951,13 @@ WC_OMIT_FRAME_POINTER void ge_p2_dbl(ge_p1p1 * r, const ge_p2 * p)
"MOV r1, r0\n\t"
"BL fe_sub_op\n\t"
"ADD sp, sp, #0x8\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p)
:
#else
:
: [r] "r" (r), [p] "r" (p)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -4875,8 +5047,13 @@ WC_OMIT_FRAME_POINTER void ge_madd(ge_p1p1 * r, const ge_p3 * p,
"ADD r1, r0, #0x20\n\t"
"BL fe_add_sub_op\n\t"
"ADD sp, sp, #0xc\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p), [q] "+r" (q)
:
#else
:
: [r] "r" (r), [p] "r" (p), [q] "r" (q)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -4967,8 +5144,13 @@ WC_OMIT_FRAME_POINTER void ge_msub(ge_p1p1 * r, const ge_p3 * p,
"ADD r0, r0, #0x20\n\t"
"BL fe_add_sub_op\n\t"
"ADD sp, sp, #0xc\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p), [q] "+r" (q)
:
#else
:
: [r] "r" (r), [p] "r" (p), [q] "r" (q)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -5059,8 +5241,13 @@ WC_OMIT_FRAME_POINTER void ge_add(ge_p1p1 * r, const ge_p3 * p,
"ADD r0, r0, #0x20\n\t"
"BL fe_add_sub_op\n\t"
"ADD sp, sp, #0x2c\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p), [q] "+r" (q)
:
#else
:
: [r] "r" (r), [p] "r" (p), [q] "r" (q)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -5151,8 +5338,13 @@ WC_OMIT_FRAME_POINTER void ge_sub(ge_p1p1 * r, const ge_p3 * p,
"ADD r0, r0, #0x40\n\t"
"BL fe_add_sub_op\n\t"
"ADD sp, sp, #0x2c\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [p] "+r" (p), [q] "+r" (q)
:
#else
:
: [r] "r" (r), [p] "r" (p), [q] "r" (q)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -5588,8 +5780,13 @@ WC_OMIT_FRAME_POINTER void sc_reduce(byte* s)
"LDR %[s], [sp, #52]\n\t"
"STM %[s], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
"ADD sp, sp, #0x38\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [s] "+r" (s)
:
#else
:
: [s] "r" (s)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
"r10", "r11", "r12", "lr"
);
@@ -5894,8 +6091,13 @@ WC_OMIT_FRAME_POINTER void sc_reduce(byte* s)
"LDR %[s], [sp, #52]\n\t"
"STM %[s], {r2, r3, r4, r5, r6, r7, r8, r9}\n\t"
"ADD sp, sp, #0x38\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [s] "+r" (s)
:
#else
:
: [s] "r" (s)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
"r10", "r11", "r12", "lr"
);
@@ -6693,8 +6895,13 @@ WC_OMIT_FRAME_POINTER void sc_muladd(byte* s, const byte* a, const byte* b,
"STR r8, [%[s], #24]\n\t"
"STR r9, [%[s], #28]\n\t"
"ADD sp, sp, #0x50\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [s] "+r" (s), [a] "+r" (a), [b] "+r" (b), [c] "+r" (c)
:
#else
:
: [s] "r" (s), [a] "r" (a), [b] "r" (b), [c] "r" (c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
@@ -7134,8 +7341,13 @@ WC_OMIT_FRAME_POINTER void sc_muladd(byte* s, const byte* a, const byte* b,
"STR r8, [%[s], #24]\n\t"
"STR r9, [%[s], #28]\n\t"
"ADD sp, sp, #0x50\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [s] "+r" (s), [a] "+r" (a), [b] "+r" (b), [c] "+r" (c)
:
#else
:
: [s] "r" (s), [a] "r" (a), [b] "r" (b), [c] "r" (c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
+79 -388
View File
@@ -33,139 +33,36 @@
.thumb
.syntax unified
#ifdef WOLFSSL_WC_MLKEM
#ifndef __APPLE__
.text
.type L_mlkem_thumb2_ntt_zetas, %object
.size L_mlkem_thumb2_ntt_zetas, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 4-byte aligned, 32-bit aligned */
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_thumb2_ntt_zetas:
.short 0x8ed
.short 0xa0b
.short 0xb9a
.short 0x714
.short 0x5d5
.short 0x58e
.short 0x11f
.short 0xca
.short 0xc56
.short 0x26e
.short 0x629
.short 0xb6
.short 0x3c2
.short 0x84f
.short 0x73f
.short 0x5bc
.short 0x23d
.short 0x7d4
.short 0x108
.short 0x17f
.short 0x9c4
.short 0x5b2
.short 0x6bf
.short 0xc7f
.short 0xa58
.short 0x3f9
.short 0x2dc
.short 0x260
.short 0x6fb
.short 0x19b
.short 0xc34
.short 0x6de
.short 0x4c7
.short 0x28c
.short 0xad9
.short 0x3f7
.short 0x7f4
.short 0x5d3
.short 0xbe7
.short 0x6f9
.short 0x204
.short 0xcf9
.short 0xbc1
.short 0xa67
.short 0x6af
.short 0x877
.short 0x7e
.short 0x5bd
.short 0x9ac
.short 0xca7
.short 0xbf2
.short 0x33e
.short 0x6b
.short 0x774
.short 0xc0a
.short 0x94a
.short 0xb73
.short 0x3c1
.short 0x71d
.short 0xa2c
.short 0x1c0
.short 0x8d8
.short 0x2a5
.short 0x806
.short 0x8b2
.short 0x1ae
.short 0x22b
.short 0x34b
.short 0x81e
.short 0x367
.short 0x60e
.short 0x69
.short 0x1a6
.short 0x24b
.short 0xb1
.short 0xc16
.short 0xbde
.short 0xb35
.short 0x626
.short 0x675
.short 0xc0b
.short 0x30a
.short 0x487
.short 0xc6e
.short 0x9f8
.short 0x5cb
.short 0xaa7
.short 0x45f
.short 0x6cb
.short 0x284
.short 0x999
.short 0x15d
.short 0x1a2
.short 0x149
.short 0xc65
.short 0xcb6
.short 0x331
.short 0x449
.short 0x25b
.short 0x262
.short 0x52a
.short 0x7fc
.short 0x748
.short 0x180
.short 0x842
.short 0xc79
.short 0x4c2
.short 0x7ca
.short 0x997
.short 0xdc
.short 0x85e
.short 0x686
.short 0x860
.short 0x707
.short 0x803
.short 0x31a
.short 0x71b
.short 0x9ab
.short 0x99b
.short 0x1de
.short 0xc95
.short 0xbcd
.short 0x3e4
.short 0x3df
.short 0x3be
.short 0x74d
.short 0x5f2
.short 0x65c
.short 0x08ed,0x0a0b,0x0b9a,0x0714,0x05d5,0x058e,0x011f,0x00ca
.short 0x0c56,0x026e,0x0629,0x00b6,0x03c2,0x084f,0x073f,0x05bc
.short 0x023d,0x07d4,0x0108,0x017f,0x09c4,0x05b2,0x06bf,0x0c7f
.short 0x0a58,0x03f9,0x02dc,0x0260,0x06fb,0x019b,0x0c34,0x06de
.short 0x04c7,0x028c,0x0ad9,0x03f7,0x07f4,0x05d3,0x0be7,0x06f9
.short 0x0204,0x0cf9,0x0bc1,0x0a67,0x06af,0x0877,0x007e,0x05bd
.short 0x09ac,0x0ca7,0x0bf2,0x033e,0x006b,0x0774,0x0c0a,0x094a
.short 0x0b73,0x03c1,0x071d,0x0a2c,0x01c0,0x08d8,0x02a5,0x0806
.short 0x08b2,0x01ae,0x022b,0x034b,0x081e,0x0367,0x060e,0x0069
.short 0x01a6,0x024b,0x00b1,0x0c16,0x0bde,0x0b35,0x0626,0x0675
.short 0x0c0b,0x030a,0x0487,0x0c6e,0x09f8,0x05cb,0x0aa7,0x045f
.short 0x06cb,0x0284,0x0999,0x015d,0x01a2,0x0149,0x0c65,0x0cb6
.short 0x0331,0x0449,0x025b,0x0262,0x052a,0x07fc,0x0748,0x0180
.short 0x0842,0x0c79,0x04c2,0x07ca,0x0997,0x00dc,0x085e,0x0686
.short 0x0860,0x0707,0x0803,0x031a,0x071b,0x09ab,0x099b,0x01de
.short 0x0c95,0x0bcd,0x03e4,0x03df,0x03be,0x074d,0x05f2,0x065c
.text
.align 4
.globl mlkem_thumb2_ntt
@@ -1425,139 +1322,36 @@ L_mlkem_thumb2_ntt_loop_567:
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
/* Cycle Count = 1270 */
.size mlkem_thumb2_ntt,.-mlkem_thumb2_ntt
#ifndef __APPLE__
.text
.type L_mlkem_invntt_zetas_inv, %object
.size L_mlkem_invntt_zetas_inv, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 4-byte aligned, 32-bit aligned */
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_invntt_zetas_inv:
.short 0x6a5
.short 0x70f
.short 0x5b4
.short 0x943
.short 0x922
.short 0x91d
.short 0x134
.short 0x6c
.short 0xb23
.short 0x366
.short 0x356
.short 0x5e6
.short 0x9e7
.short 0x4fe
.short 0x5fa
.short 0x4a1
.short 0x67b
.short 0x4a3
.short 0xc25
.short 0x36a
.short 0x537
.short 0x83f
.short 0x88
.short 0x4bf
.short 0xb81
.short 0x5b9
.short 0x505
.short 0x7d7
.short 0xa9f
.short 0xaa6
.short 0x8b8
.short 0x9d0
.short 0x4b
.short 0x9c
.short 0xbb8
.short 0xb5f
.short 0xba4
.short 0x368
.short 0xa7d
.short 0x636
.short 0x8a2
.short 0x25a
.short 0x736
.short 0x309
.short 0x93
.short 0x87a
.short 0x9f7
.short 0xf6
.short 0x68c
.short 0x6db
.short 0x1cc
.short 0x123
.short 0xeb
.short 0xc50
.short 0xab6
.short 0xb5b
.short 0xc98
.short 0x6f3
.short 0x99a
.short 0x4e3
.short 0x9b6
.short 0xad6
.short 0xb53
.short 0x44f
.short 0x4fb
.short 0xa5c
.short 0x429
.short 0xb41
.short 0x2d5
.short 0x5e4
.short 0x940
.short 0x18e
.short 0x3b7
.short 0xf7
.short 0x58d
.short 0xc96
.short 0x9c3
.short 0x10f
.short 0x5a
.short 0x355
.short 0x744
.short 0xc83
.short 0x48a
.short 0x652
.short 0x29a
.short 0x140
.short 0x8
.short 0xafd
.short 0x608
.short 0x11a
.short 0x72e
.short 0x50d
.short 0x90a
.short 0x228
.short 0xa75
.short 0x83a
.short 0x623
.short 0xcd
.short 0xb66
.short 0x606
.short 0xaa1
.short 0xa25
.short 0x908
.short 0x2a9
.short 0x82
.short 0x642
.short 0x74f
.short 0x33d
.short 0xb82
.short 0xbf9
.short 0x52d
.short 0xac4
.short 0x745
.short 0x5c2
.short 0x4b2
.short 0x93f
.short 0xc4b
.short 0x6d8
.short 0xa93
.short 0xab
.short 0xc37
.short 0xbe2
.short 0x773
.short 0x72c
.short 0x5ed
.short 0x167
.short 0x2f6
.short 0x5a1
.short 0x06a5,0x070f,0x05b4,0x0943,0x0922,0x091d,0x0134,0x006c
.short 0x0b23,0x0366,0x0356,0x05e6,0x09e7,0x04fe,0x05fa,0x04a1
.short 0x067b,0x04a3,0x0c25,0x036a,0x0537,0x083f,0x0088,0x04bf
.short 0x0b81,0x05b9,0x0505,0x07d7,0x0a9f,0x0aa6,0x08b8,0x09d0
.short 0x004b,0x009c,0x0bb8,0x0b5f,0x0ba4,0x0368,0x0a7d,0x0636
.short 0x08a2,0x025a,0x0736,0x0309,0x0093,0x087a,0x09f7,0x00f6
.short 0x068c,0x06db,0x01cc,0x0123,0x00eb,0x0c50,0x0ab6,0x0b5b
.short 0x0c98,0x06f3,0x099a,0x04e3,0x09b6,0x0ad6,0x0b53,0x044f
.short 0x04fb,0x0a5c,0x0429,0x0b41,0x02d5,0x05e4,0x0940,0x018e
.short 0x03b7,0x00f7,0x058d,0x0c96,0x09c3,0x010f,0x005a,0x0355
.short 0x0744,0x0c83,0x048a,0x0652,0x029a,0x0140,0x0008,0x0afd
.short 0x0608,0x011a,0x072e,0x050d,0x090a,0x0228,0x0a75,0x083a
.short 0x0623,0x00cd,0x0b66,0x0606,0x0aa1,0x0a25,0x0908,0x02a9
.short 0x0082,0x0642,0x074f,0x033d,0x0b82,0x0bf9,0x052d,0x0ac4
.short 0x0745,0x05c2,0x04b2,0x093f,0x0c4b,0x06d8,0x0a93,0x00ab
.short 0x0c37,0x0be2,0x0773,0x072c,0x05ed,0x0167,0x02f6,0x05a1
.text
.align 4
.globl mlkem_thumb2_invntt
@@ -3184,139 +2978,36 @@ L_mlkem_invntt_loop_321:
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
/* Cycle Count = 1629 */
.size mlkem_thumb2_invntt,.-mlkem_thumb2_invntt
#ifndef __APPLE__
.text
.type L_mlkem_basemul_mont_zetas, %object
.size L_mlkem_basemul_mont_zetas, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 4-byte aligned, 32-bit aligned */
#ifndef __APPLE__
.align 2
#else
.p2align 2
#endif /* __APPLE__ */
L_mlkem_basemul_mont_zetas:
.short 0x8ed
.short 0xa0b
.short 0xb9a
.short 0x714
.short 0x5d5
.short 0x58e
.short 0x11f
.short 0xca
.short 0xc56
.short 0x26e
.short 0x629
.short 0xb6
.short 0x3c2
.short 0x84f
.short 0x73f
.short 0x5bc
.short 0x23d
.short 0x7d4
.short 0x108
.short 0x17f
.short 0x9c4
.short 0x5b2
.short 0x6bf
.short 0xc7f
.short 0xa58
.short 0x3f9
.short 0x2dc
.short 0x260
.short 0x6fb
.short 0x19b
.short 0xc34
.short 0x6de
.short 0x4c7
.short 0x28c
.short 0xad9
.short 0x3f7
.short 0x7f4
.short 0x5d3
.short 0xbe7
.short 0x6f9
.short 0x204
.short 0xcf9
.short 0xbc1
.short 0xa67
.short 0x6af
.short 0x877
.short 0x7e
.short 0x5bd
.short 0x9ac
.short 0xca7
.short 0xbf2
.short 0x33e
.short 0x6b
.short 0x774
.short 0xc0a
.short 0x94a
.short 0xb73
.short 0x3c1
.short 0x71d
.short 0xa2c
.short 0x1c0
.short 0x8d8
.short 0x2a5
.short 0x806
.short 0x8b2
.short 0x1ae
.short 0x22b
.short 0x34b
.short 0x81e
.short 0x367
.short 0x60e
.short 0x69
.short 0x1a6
.short 0x24b
.short 0xb1
.short 0xc16
.short 0xbde
.short 0xb35
.short 0x626
.short 0x675
.short 0xc0b
.short 0x30a
.short 0x487
.short 0xc6e
.short 0x9f8
.short 0x5cb
.short 0xaa7
.short 0x45f
.short 0x6cb
.short 0x284
.short 0x999
.short 0x15d
.short 0x1a2
.short 0x149
.short 0xc65
.short 0xcb6
.short 0x331
.short 0x449
.short 0x25b
.short 0x262
.short 0x52a
.short 0x7fc
.short 0x748
.short 0x180
.short 0x842
.short 0xc79
.short 0x4c2
.short 0x7ca
.short 0x997
.short 0xdc
.short 0x85e
.short 0x686
.short 0x860
.short 0x707
.short 0x803
.short 0x31a
.short 0x71b
.short 0x9ab
.short 0x99b
.short 0x1de
.short 0xc95
.short 0xbcd
.short 0x3e4
.short 0x3df
.short 0x3be
.short 0x74d
.short 0x5f2
.short 0x65c
.short 0x08ed,0x0a0b,0x0b9a,0x0714,0x05d5,0x058e,0x011f,0x00ca
.short 0x0c56,0x026e,0x0629,0x00b6,0x03c2,0x084f,0x073f,0x05bc
.short 0x023d,0x07d4,0x0108,0x017f,0x09c4,0x05b2,0x06bf,0x0c7f
.short 0x0a58,0x03f9,0x02dc,0x0260,0x06fb,0x019b,0x0c34,0x06de
.short 0x04c7,0x028c,0x0ad9,0x03f7,0x07f4,0x05d3,0x0be7,0x06f9
.short 0x0204,0x0cf9,0x0bc1,0x0a67,0x06af,0x0877,0x007e,0x05bd
.short 0x09ac,0x0ca7,0x0bf2,0x033e,0x006b,0x0774,0x0c0a,0x094a
.short 0x0b73,0x03c1,0x071d,0x0a2c,0x01c0,0x08d8,0x02a5,0x0806
.short 0x08b2,0x01ae,0x022b,0x034b,0x081e,0x0367,0x060e,0x0069
.short 0x01a6,0x024b,0x00b1,0x0c16,0x0bde,0x0b35,0x0626,0x0675
.short 0x0c0b,0x030a,0x0487,0x0c6e,0x09f8,0x05cb,0x0aa7,0x045f
.short 0x06cb,0x0284,0x0999,0x015d,0x01a2,0x0149,0x0c65,0x0cb6
.short 0x0331,0x0449,0x025b,0x0262,0x052a,0x07fc,0x0748,0x0180
.short 0x0842,0x0c79,0x04c2,0x07ca,0x0997,0x00dc,0x085e,0x0686
.short 0x0860,0x0707,0x0803,0x031a,0x071b,0x09ab,0x099b,0x01de
.short 0x0c95,0x0bcd,0x03e4,0x03df,0x03be,0x074d,0x05f2,0x065c
.text
.align 4
.globl mlkem_thumb2_basemul_mont
@@ -3896,6 +3587,6 @@ L_mlkem_thumb2_rej_uniform_done:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+44 -15
View File
@@ -41,11 +41,16 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#include <wolfssl/wolfcrypt/wc_mlkem.h>
#ifdef WOLFSSL_WC_MLKEM
XALIGNED(16) static const word16 L_mlkem_thumb2_ntt_zetas[] = {
XALIGNED(4) static const word16 L_mlkem_thumb2_ntt_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714, 0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6, 0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f, 0x09c4, 0x05b2, 0x06bf, 0x0c7f,
@@ -74,11 +79,9 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_ntt(sword16* r)
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register word16* L_mlkem_thumb2_ntt_zetas_c __asm__ ("r1") =
(word16*)&L_mlkem_thumb2_ntt_zetas;
#else
register word16* L_mlkem_thumb2_ntt_zetas_c =
(word16*)&L_mlkem_thumb2_ntt_zetas;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -1360,15 +1363,21 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_ntt(sword16* r)
"BNE.N L_mlkem_thumb2_ntt_loop_567_%=\n\t"
#endif
"ADD sp, sp, #0x8\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r),
[L_mlkem_thumb2_ntt_zetas] "+r" (L_mlkem_thumb2_ntt_zetas_c)
:
#else
:
: [r] "r" (r),
[L_mlkem_thumb2_ntt_zetas] "r" (L_mlkem_thumb2_ntt_zetas_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
}
XALIGNED(16) static const word16 L_mlkem_invntt_zetas_inv[] = {
XALIGNED(4) static const word16 L_mlkem_invntt_zetas_inv[] = {
0x06a5, 0x070f, 0x05b4, 0x0943, 0x0922, 0x091d, 0x0134, 0x006c,
0x0b23, 0x0366, 0x0356, 0x05e6, 0x09e7, 0x04fe, 0x05fa, 0x04a1,
0x067b, 0x04a3, 0x0c25, 0x036a, 0x0537, 0x083f, 0x0088, 0x04bf,
@@ -1397,11 +1406,9 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_invntt(sword16* r)
register sword16* r __asm__ ("r0") = (sword16*)r_p;
register word16* L_mlkem_invntt_zetas_inv_c __asm__ ("r1") =
(word16*)&L_mlkem_invntt_zetas_inv;
#else
register word16* L_mlkem_invntt_zetas_inv_c =
(word16*)&L_mlkem_invntt_zetas_inv;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3050,15 +3057,21 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_invntt(sword16* r)
"BNE.N L_mlkem_invntt_loop_321_%=\n\t"
#endif
"ADD sp, sp, #0x8\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r),
[L_mlkem_invntt_zetas_inv] "+r" (L_mlkem_invntt_zetas_inv_c)
:
#else
:
: [r] "r" (r),
[L_mlkem_invntt_zetas_inv] "r" (L_mlkem_invntt_zetas_inv_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
}
XALIGNED(16) static const word16 L_mlkem_basemul_mont_zetas[] = {
XALIGNED(4) static const word16 L_mlkem_basemul_mont_zetas[] = {
0x08ed, 0x0a0b, 0x0b9a, 0x0714, 0x05d5, 0x058e, 0x011f, 0x00ca,
0x0c56, 0x026e, 0x0629, 0x00b6, 0x03c2, 0x084f, 0x073f, 0x05bc,
0x023d, 0x07d4, 0x0108, 0x017f, 0x09c4, 0x05b2, 0x06bf, 0x0c7f,
@@ -3091,11 +3104,9 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_basemul_mont(sword16* r,
register const sword16* b __asm__ ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
(word16*)&L_mlkem_basemul_mont_zetas;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3220,9 +3231,15 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_basemul_mont(sword16* r,
#else
"BNE.N L_mlkem_basemul_mont_loop_%=\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
:
#else
:
: [r] "r" (r), [a] "r" (a), [b] "r" (b),
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
@@ -3242,11 +3259,9 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_basemul_mont_add(sword16* r,
register const sword16* b __asm__ ("r2") = (const sword16*)b_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r3") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
(word16*)&L_mlkem_basemul_mont_zetas;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3383,9 +3398,15 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_basemul_mont_add(sword16* r,
#else
"BNE.N L_mlkem_thumb2_basemul_mont_add_loop_%=\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b),
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
:
#else
:
: [r] "r" (r), [a] "r" (a), [b] "r" (b),
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
@@ -3401,11 +3422,9 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_csubq(sword16* p)
register sword16* p __asm__ ("r0") = (sword16*)p_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r1") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
(word16*)&L_mlkem_basemul_mont_zetas;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3496,9 +3515,15 @@ WC_OMIT_FRAME_POINTER void mlkem_thumb2_csubq(sword16* p)
#else
"BNE.N L_mlkem_thumb2_csubq_loop_%=\n\t"
#endif
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [p] "+r" (p),
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
:
#else
:
: [p] "r" (p),
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
@@ -3519,11 +3544,9 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_thumb2_rej_uniform(sword16* p,
register unsigned int rLen __asm__ ("r3") = (unsigned int)rLen_p;
register word16* L_mlkem_basemul_mont_zetas_c __asm__ ("r4") =
(word16*)&L_mlkem_basemul_mont_zetas;
#else
register word16* L_mlkem_basemul_mont_zetas_c =
(word16*)&L_mlkem_basemul_mont_zetas;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3847,9 +3870,15 @@ WC_OMIT_FRAME_POINTER unsigned int mlkem_thumb2_rej_uniform(sword16* p,
"L_mlkem_thumb2_rej_uniform_done_%=:\n\t"
#endif
"LSR r0, r9, #1\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [p] "+r" (p), [len] "+r" (len), [r] "+r" (r), [rLen] "+r" (rLen),
[L_mlkem_basemul_mont_zetas] "+r" (L_mlkem_basemul_mont_zetas_c)
:
#else
:
: [p] "r" (p), [len] "r" (len), [r] "r" (r), [rLen] "r" (rLen),
[L_mlkem_basemul_mont_zetas] "r" (L_mlkem_basemul_mont_zetas_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r5", "r6", "r7", "r8", "r9", "r10"
);
return (word32)(size_t)p;
+12 -6
View File
@@ -256,15 +256,21 @@ L_poly1305_thumb2_16_done:
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
/* Cycle Count = 250 */
.size poly1305_blocks_thumb2_16,.-poly1305_blocks_thumb2_16
#ifndef __APPLE__
.text
.type L_poly1305_thumb2_clamp, %object
.size L_poly1305_thumb2_clamp, 16
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 8-byte aligned, 64-bit aligned */
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_poly1305_thumb2_clamp:
.word 0xfffffff
.word 0xffffffc
.word 0xffffffc
.word 0xffffffc
.long 0x0fffffff,0x0ffffffc,0x0ffffffc,0x0ffffffc
.text
.align 4
.globl poly1305_set_key
@@ -362,6 +368,6 @@ poly1305_final:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+23 -3
View File
@@ -41,6 +41,11 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifdef HAVE_POLY1305
#include <wolfssl/wolfcrypt/poly1305.h>
@@ -289,15 +294,21 @@ WC_OMIT_FRAME_POINTER void poly1305_blocks_thumb2_16(Poly1305* ctx,
"L_poly1305_thumb2_16_done_%=:\n\t"
#endif
"ADD sp, sp, #0x1c\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [m] "+r" (m), [len] "+r" (len),
[notLast] "+r" (notLast)
:
#else
:
: [ctx] "r" (ctx), [m] "r" (m), [len] "r" (len),
[notLast] "r" (notLast)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12", "lr"
);
}
XALIGNED(16) static const word32 L_poly1305_thumb2_clamp[] = {
XALIGNED(8) static const word32 L_poly1305_thumb2_clamp[] = {
0x0fffffff, 0x0ffffffc, 0x0ffffffc, 0x0ffffffc,
};
@@ -312,11 +323,9 @@ WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
register const byte* key __asm__ ("r1") = (const byte*)key_p;
register word32* L_poly1305_thumb2_clamp_c __asm__ ("r2") =
(word32*)&L_poly1305_thumb2_clamp;
#else
register word32* L_poly1305_thumb2_clamp_c =
(word32*)&L_poly1305_thumb2_clamp;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -351,9 +360,15 @@ WC_OMIT_FRAME_POINTER void poly1305_set_key(Poly1305* ctx, const byte* key)
"STM r10, {r5, r6, r7, r8, r9}\n\t"
/* Zero leftover */
"STR r5, [%[ctx], #52]\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [key] "+r" (key),
[L_poly1305_thumb2_clamp] "+r" (L_poly1305_thumb2_clamp_c)
:
#else
:
: [ctx] "r" (ctx), [key] "r" (key),
[L_poly1305_thumb2_clamp] "r" (L_poly1305_thumb2_clamp_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"
);
}
@@ -413,8 +428,13 @@ WC_OMIT_FRAME_POINTER void poly1305_final(Poly1305* ctx, byte* mac)
/* Zero out padding. */
"ADD r11, %[ctx], #0x24\n\t"
"STM r11, {r2, r3, r4, r5}\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [ctx] "+r" (ctx), [mac] "+r" (mac)
:
#else
:
: [ctx] "r" (ctx), [mac] "r" (mac)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11"
);
+27 -66
View File
@@ -34,75 +34,36 @@
.syntax unified
#ifndef NO_SHA256
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_SHA256_transform_len_k, %object
.size L_SHA256_transform_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 8-byte aligned, 64-bit aligned */
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_len_k:
.word 0x428a2f98
.word 0x71374491
.word 0xb5c0fbcf
.word 0xe9b5dba5
.word 0x3956c25b
.word 0x59f111f1
.word 0x923f82a4
.word 0xab1c5ed5
.word 0xd807aa98
.word 0x12835b01
.word 0x243185be
.word 0x550c7dc3
.word 0x72be5d74
.word 0x80deb1fe
.word 0x9bdc06a7
.word 0xc19bf174
.word 0xe49b69c1
.word 0xefbe4786
.word 0xfc19dc6
.word 0x240ca1cc
.word 0x2de92c6f
.word 0x4a7484aa
.word 0x5cb0a9dc
.word 0x76f988da
.word 0x983e5152
.word 0xa831c66d
.word 0xb00327c8
.word 0xbf597fc7
.word 0xc6e00bf3
.word 0xd5a79147
.word 0x6ca6351
.word 0x14292967
.word 0x27b70a85
.word 0x2e1b2138
.word 0x4d2c6dfc
.word 0x53380d13
.word 0x650a7354
.word 0x766a0abb
.word 0x81c2c92e
.word 0x92722c85
.word 0xa2bfe8a1
.word 0xa81a664b
.word 0xc24b8b70
.word 0xc76c51a3
.word 0xd192e819
.word 0xd6990624
.word 0xf40e3585
.word 0x106aa070
.word 0x19a4c116
.word 0x1e376c08
.word 0x2748774c
.word 0x34b0bcb5
.word 0x391c0cb3
.word 0x4ed8aa4a
.word 0x5b9cca4f
.word 0x682e6ff3
.word 0x748f82ee
.word 0x78a5636f
.word 0x84c87814
.word 0x8cc70208
.word 0x90befffa
.word 0xa4506ceb
.word 0xbef9a3f7
.word 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.text
.align 4
.globl Transform_Sha256_Len_base
@@ -2365,6 +2326,6 @@ L_SHA256_transform_len_blk_end_15:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+14 -4
View File
@@ -41,12 +41,17 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifndef NO_SHA256
#include <wolfssl/wolfcrypt/sha256.h>
#ifdef WOLFSSL_ARMASM_NO_NEON
XALIGNED(16) static const word32 L_SHA256_transform_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -65,7 +70,8 @@ XALIGNED(16) static const word32 L_SHA256_transform_len_k[] = {
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
};
void Transform_Sha256_Len_base(wc_Sha256* sha256, const byte* data, word32 len);
void Transform_Sha256_Len_base(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
@@ -80,11 +86,9 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
register word32 len __asm__ ("r2") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("r3") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
(word32*)&L_SHA256_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -2468,9 +2472,15 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256,
"BNE.W L_SHA256_transform_len_begin_%=\n\t"
#endif
"ADD sp, sp, #0xc0\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
:
#else
:
: [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len),
[L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12"
);
+23 -50
View File
@@ -33,59 +33,32 @@
.thumb
.syntax unified
#ifdef WOLFSSL_SHA3
#ifndef __APPLE__
.text
.type L_sha3_thumb2_rt, %object
.size L_sha3_thumb2_rt, 192
.align 8
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 16-byte aligned, 128-bit aligned */
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_sha3_thumb2_rt:
.word 0x1
.word 0x0
.word 0x8082
.word 0x0
.word 0x808a
.word 0x80000000
.word 0x80008000
.word 0x80000000
.word 0x808b
.word 0x0
.word 0x80000001
.word 0x0
.word 0x80008081
.word 0x80000000
.word 0x8009
.word 0x80000000
.word 0x8a
.word 0x0
.word 0x88
.word 0x0
.word 0x80008009
.word 0x0
.word 0x8000000a
.word 0x0
.word 0x8000808b
.word 0x0
.word 0x8b
.word 0x80000000
.word 0x8089
.word 0x80000000
.word 0x8003
.word 0x80000000
.word 0x8002
.word 0x80000000
.word 0x80
.word 0x80000000
.word 0x800a
.word 0x0
.word 0x8000000a
.word 0x80000000
.word 0x80008081
.word 0x80000000
.word 0x8080
.word 0x80000000
.word 0x80000001
.word 0x0
.word 0x80008008
.word 0x80000000
.quad 0x0000000000000001,0x0000000000008082
.quad 0x800000000000808a,0x8000000080008000
.quad 0x000000000000808b,0x0000000080000001
.quad 0x8000000080008081,0x8000000000008009
.quad 0x000000000000008a,0x0000000000000088
.quad 0x0000000080008009,0x000000008000000a
.quad 0x000000008000808b,0x800000000000008b
.quad 0x8000000000008089,0x8000000000008003
.quad 0x8000000000008002,0x8000000000000080
.quad 0x000000000000800a,0x800000008000000a
.quad 0x8000000080008081,0x8000000000008080
.quad 0x0000000080000001,0x8000000080008008
.text
.align 4
.globl BlockSha3
@@ -1169,6 +1142,6 @@ L_sha3_thumb2_begin:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+11 -3
View File
@@ -41,9 +41,14 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifdef WOLFSSL_SHA3
static const word64 L_sha3_thumb2_rt[] = {
XALIGNED(16) static const word64 L_sha3_thumb2_rt[] = {
0x0000000000000001UL, 0x0000000000008082UL,
0x800000000000808aUL, 0x8000000080008000UL,
0x000000000000808bUL, 0x0000000080000001UL,
@@ -70,10 +75,8 @@ WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
register word64* state __asm__ ("r0") = (word64*)state_p;
register word64* L_sha3_thumb2_rt_c __asm__ ("r1") =
(word64*)&L_sha3_thumb2_rt;
#else
register word64* L_sha3_thumb2_rt_c = (word64*)&L_sha3_thumb2_rt;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -1153,8 +1156,13 @@ WC_OMIT_FRAME_POINTER void BlockSha3(word64* state)
"BNE.W L_sha3_thumb2_begin_%=\n\t"
#endif
"ADD sp, sp, #0xcc\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [state] "+r" (state), [L_sha3_thumb2_rt] "+r" (L_sha3_thumb2_rt_c)
:
#else
:
: [state] "r" (state), [L_sha3_thumb2_rt] "r" (L_sha3_thumb2_rt_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "lr"
);
+51 -162
View File
@@ -34,171 +34,60 @@
.syntax unified
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#ifdef WOLFSSL_ARMASM_NO_NEON
#ifndef __APPLE__
.text
.type L_SHA512_transform_len_k, %object
.size L_SHA512_transform_len_k, 640
.align 8
#else
.section __DATA,__data
#endif /* __APPLE__ */
/* 16-byte aligned, 128-bit aligned */
#ifndef __APPLE__
.align 4
#else
.p2align 4
#endif /* __APPLE__ */
L_SHA512_transform_len_k:
.word 0xd728ae22
.word 0x428a2f98
.word 0x23ef65cd
.word 0x71374491
.word 0xec4d3b2f
.word 0xb5c0fbcf
.word 0x8189dbbc
.word 0xe9b5dba5
.word 0xf348b538
.word 0x3956c25b
.word 0xb605d019
.word 0x59f111f1
.word 0xaf194f9b
.word 0x923f82a4
.word 0xda6d8118
.word 0xab1c5ed5
.word 0xa3030242
.word 0xd807aa98
.word 0x45706fbe
.word 0x12835b01
.word 0x4ee4b28c
.word 0x243185be
.word 0xd5ffb4e2
.word 0x550c7dc3
.word 0xf27b896f
.word 0x72be5d74
.word 0x3b1696b1
.word 0x80deb1fe
.word 0x25c71235
.word 0x9bdc06a7
.word 0xcf692694
.word 0xc19bf174
.word 0x9ef14ad2
.word 0xe49b69c1
.word 0x384f25e3
.word 0xefbe4786
.word 0x8b8cd5b5
.word 0xfc19dc6
.word 0x77ac9c65
.word 0x240ca1cc
.word 0x592b0275
.word 0x2de92c6f
.word 0x6ea6e483
.word 0x4a7484aa
.word 0xbd41fbd4
.word 0x5cb0a9dc
.word 0x831153b5
.word 0x76f988da
.word 0xee66dfab
.word 0x983e5152
.word 0x2db43210
.word 0xa831c66d
.word 0x98fb213f
.word 0xb00327c8
.word 0xbeef0ee4
.word 0xbf597fc7
.word 0x3da88fc2
.word 0xc6e00bf3
.word 0x930aa725
.word 0xd5a79147
.word 0xe003826f
.word 0x6ca6351
.word 0xa0e6e70
.word 0x14292967
.word 0x46d22ffc
.word 0x27b70a85
.word 0x5c26c926
.word 0x2e1b2138
.word 0x5ac42aed
.word 0x4d2c6dfc
.word 0x9d95b3df
.word 0x53380d13
.word 0x8baf63de
.word 0x650a7354
.word 0x3c77b2a8
.word 0x766a0abb
.word 0x47edaee6
.word 0x81c2c92e
.word 0x1482353b
.word 0x92722c85
.word 0x4cf10364
.word 0xa2bfe8a1
.word 0xbc423001
.word 0xa81a664b
.word 0xd0f89791
.word 0xc24b8b70
.word 0x654be30
.word 0xc76c51a3
.word 0xd6ef5218
.word 0xd192e819
.word 0x5565a910
.word 0xd6990624
.word 0x5771202a
.word 0xf40e3585
.word 0x32bbd1b8
.word 0x106aa070
.word 0xb8d2d0c8
.word 0x19a4c116
.word 0x5141ab53
.word 0x1e376c08
.word 0xdf8eeb99
.word 0x2748774c
.word 0xe19b48a8
.word 0x34b0bcb5
.word 0xc5c95a63
.word 0x391c0cb3
.word 0xe3418acb
.word 0x4ed8aa4a
.word 0x7763e373
.word 0x5b9cca4f
.word 0xd6b2b8a3
.word 0x682e6ff3
.word 0x5defb2fc
.word 0x748f82ee
.word 0x43172f60
.word 0x78a5636f
.word 0xa1f0ab72
.word 0x84c87814
.word 0x1a6439ec
.word 0x8cc70208
.word 0x23631e28
.word 0x90befffa
.word 0xde82bde9
.word 0xa4506ceb
.word 0xb2c67915
.word 0xbef9a3f7
.word 0xe372532b
.word 0xc67178f2
.word 0xea26619c
.word 0xca273ece
.word 0x21c0c207
.word 0xd186b8c7
.word 0xcde0eb1e
.word 0xeada7dd6
.word 0xee6ed178
.word 0xf57d4f7f
.word 0x72176fba
.word 0x6f067aa
.word 0xa2c898a6
.word 0xa637dc5
.word 0xbef90dae
.word 0x113f9804
.word 0x131c471b
.word 0x1b710b35
.word 0x23047d84
.word 0x28db77f5
.word 0x40c72493
.word 0x32caab7b
.word 0x15c9bebc
.word 0x3c9ebe0a
.word 0x9c100d4c
.word 0x431d67c4
.word 0xcb3e42b6
.word 0x4cc5d4be
.word 0xfc657e2a
.word 0x597f299c
.word 0x3ad6faec
.word 0x5fcb6fab
.word 0x4a475817
.word 0x6c44198c
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
.text
.align 4
.globl Transform_Sha512_Len_base
@@ -3670,6 +3559,6 @@ L_SHA512_transform_len_start:
#endif /* WOLFSSL_ARMASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
.section .note.GNU-stack,"",%progbits
#endif
#endif /* !WOLFSSL_ARMASM_INLINE */
+14 -4
View File
@@ -41,12 +41,17 @@
#define __asm__ __asm
#define __volatile__ volatile
#endif /* __KEIL__ */
#ifdef __ghs__
#define __asm__ __asm
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#include <wolfssl/wolfcrypt/sha512.h>
#ifdef WOLFSSL_ARMASM_NO_NEON
static const word64 L_SHA512_transform_len_k[] = {
XALIGNED(16) static const word64 L_SHA512_transform_len_k[] = {
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL, 0x59f111f1b605d019UL,
@@ -89,7 +94,8 @@ static const word64 L_SHA512_transform_len_k[] = {
0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL,
};
void Transform_Sha512_Len_base(wc_Sha512* sha512, const byte* data, word32 len);
void Transform_Sha512_Len_base(wc_Sha512* sha512_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512_p,
const byte* data_p, word32 len_p)
@@ -104,11 +110,9 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
register word32 len __asm__ ("r2") = (word32)len_p;
register word64* L_SHA512_transform_len_k_c __asm__ ("r3") =
(word64*)&L_SHA512_transform_len_k;
#else
register word64* L_SHA512_transform_len_k_c =
(word64*)&L_SHA512_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -3582,9 +3586,15 @@ WC_OMIT_FRAME_POINTER void Transform_Sha512_Len_base(wc_Sha512* sha512,
#endif
"EOR r0, r0, r0\n\t"
"ADD sp, sp, #0xc0\n\t"
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
:
#else
:
: [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len),
[L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k_c)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
"r12"
);
+56 -136
View File
@@ -31,76 +31,36 @@
.machine ppc
#ifndef NO_SHA256
#ifdef WOLFSSL_PPC32_ASM_SPE
.section ".text"
.section .rodata
.type L_SHA256_transform_spe_len_k, @object
#ifndef __APPLE__
.text
.type L_SHA256_transform_spe_len_k, %object
.size L_SHA256_transform_spe_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_spe_len_k:
.long 0x428a2f98
.long 0x71374491
.long 0xb5c0fbcf
.long 0xe9b5dba5
.long 0x3956c25b
.long 0x59f111f1
.long 0x923f82a4
.long 0xab1c5ed5
.long 0xd807aa98
.long 0x12835b01
.long 0x243185be
.long 0x550c7dc3
.long 0x72be5d74
.long 0x80deb1fe
.long 0x9bdc06a7
.long 0xc19bf174
.long 0xe49b69c1
.long 0xefbe4786
.long 0xfc19dc6
.long 0x240ca1cc
.long 0x2de92c6f
.long 0x4a7484aa
.long 0x5cb0a9dc
.long 0x76f988da
.long 0x983e5152
.long 0xa831c66d
.long 0xb00327c8
.long 0xbf597fc7
.long 0xc6e00bf3
.long 0xd5a79147
.long 0x6ca6351
.long 0x14292967
.long 0x27b70a85
.long 0x2e1b2138
.long 0x4d2c6dfc
.long 0x53380d13
.long 0x650a7354
.long 0x766a0abb
.long 0x81c2c92e
.long 0x92722c85
.long 0xa2bfe8a1
.long 0xa81a664b
.long 0xc24b8b70
.long 0xc76c51a3
.long 0xd192e819
.long 0xd6990624
.long 0xf40e3585
.long 0x106aa070
.long 0x19a4c116
.long 0x1e376c08
.long 0x2748774c
.long 0x34b0bcb5
.long 0x391c0cb3
.long 0x4ed8aa4a
.long 0x5b9cca4f
.long 0x682e6ff3
.long 0x748f82ee
.long 0x78a5636f
.long 0x84c87814
.long 0x8cc70208
.long 0x90befffa
.long 0xa4506ceb
.long 0xbef9a3f7
.long 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.section ".text"
.align 4
.globl Transform_Sha256_Len
@@ -1217,76 +1177,36 @@ L_SHA256_transform_spe_len_start:
.size Transform_Sha256_Len,.-Transform_Sha256_Len
#endif /* WOLFSSL_PPC32_ASM_SPE */
#ifndef WOLFSSL_PPC32_ASM_SPE
.section ".text"
.section .rodata
.type L_SHA256_transform_len_k, @object
#ifndef __APPLE__
.text
.type L_SHA256_transform_len_k, %object
.size L_SHA256_transform_len_k, 256
.align 4
#else
.section __DATA,__data
#endif /* __APPLE__ */
# 8-byte aligned, 64-bit aligned
#ifndef __APPLE__
.align 3
#else
.p2align 3
#endif /* __APPLE__ */
L_SHA256_transform_len_k:
.long 0x428a2f98
.long 0x71374491
.long 0xb5c0fbcf
.long 0xe9b5dba5
.long 0x3956c25b
.long 0x59f111f1
.long 0x923f82a4
.long 0xab1c5ed5
.long 0xd807aa98
.long 0x12835b01
.long 0x243185be
.long 0x550c7dc3
.long 0x72be5d74
.long 0x80deb1fe
.long 0x9bdc06a7
.long 0xc19bf174
.long 0xe49b69c1
.long 0xefbe4786
.long 0xfc19dc6
.long 0x240ca1cc
.long 0x2de92c6f
.long 0x4a7484aa
.long 0x5cb0a9dc
.long 0x76f988da
.long 0x983e5152
.long 0xa831c66d
.long 0xb00327c8
.long 0xbf597fc7
.long 0xc6e00bf3
.long 0xd5a79147
.long 0x6ca6351
.long 0x14292967
.long 0x27b70a85
.long 0x2e1b2138
.long 0x4d2c6dfc
.long 0x53380d13
.long 0x650a7354
.long 0x766a0abb
.long 0x81c2c92e
.long 0x92722c85
.long 0xa2bfe8a1
.long 0xa81a664b
.long 0xc24b8b70
.long 0xc76c51a3
.long 0xd192e819
.long 0xd6990624
.long 0xf40e3585
.long 0x106aa070
.long 0x19a4c116
.long 0x1e376c08
.long 0x2748774c
.long 0x34b0bcb5
.long 0x391c0cb3
.long 0x4ed8aa4a
.long 0x5b9cca4f
.long 0x682e6ff3
.long 0x748f82ee
.long 0x78a5636f
.long 0x84c87814
.long 0x8cc70208
.long 0x90befffa
.long 0xa4506ceb
.long 0xbef9a3f7
.long 0xc67178f2
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
#ifndef __PIC__
.section ".text"
.align 4
+70 -68
View File
@@ -29,8 +29,6 @@
#include <wolfssl/wolfcrypt/error-crypt.h>
#ifdef WOLFSSL_PPC32_ASM
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_PPC32_ASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -47,11 +45,12 @@
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifndef NO_SHA256
#include <wolfssl/wolfcrypt/sha256.h>
#ifdef WOLFSSL_PPC32_ASM_SPE
static const word32 L_SHA256_transform_spe_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_spe_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -73,21 +72,22 @@ static const word32 L_SHA256_transform_spe_len_k[] = {
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_spe_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("4") = (const byte*)data_p;
register word32 len __asm__ ("5") = (word32)len_p;
register word32* L_SHA256_transform_spe_len_k_c __asm__ ("6") =
(word32*)&L_SHA256_transform_spe_len_k;
#else
register word32* L_SHA256_transform_spe_len_k_c =
(word32*)&L_SHA256_transform_spe_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -104,7 +104,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz 21, 28(%[sha256])\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_spe_len_begin_%=: \n\t"
"L_SHA256_transform_spe_len_begin_%=:\n\t"
/* Load W */
"lwz 22, 0(%[data])\n\t"
"lwz 0, 4(%[data])\n\t"
@@ -134,7 +134,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr 0\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_spe_len_start_%=: \n\t"
"L_SHA256_transform_spe_len_start_%=:\n\t"
/* Round 0 */
"mr 9, 22\n\t"
"rotlwi 6, 18, 26\n\t"
@@ -1178,7 +1178,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#ifndef WOLFSSL_PPC32_ASM_SPE
#include <wolfssl/wolfcrypt/sha256.h>
static const word32 L_SHA256_transform_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -1201,21 +1201,22 @@ static const word32 L_SHA256_transform_len_k[] = {
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("4") = (const byte*)data_p;
register word32 len __asm__ ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("6") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
(word32*)&L_SHA256_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -1234,7 +1235,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr %[len]\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz 16, 0(%[data])\n\t"
"lwz 17, 4(%[data])\n\t"
@@ -3625,7 +3626,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"stw %[len], 0(1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz 16, 0(%[data])\n\t"
"lwz 17, 4(%[data])\n\t"
@@ -3647,7 +3648,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr 0\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_%=: \n\t"
"L_SHA256_transform_len_start_%=:\n\t"
/* Round 0 */
"rotlwi 0, 11, 26\n\t"
"rotlwi %[len], 11, 21\n\t"
@@ -3692,7 +3693,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 16, 16, 0\n\t"
"add 16, 16, 25\n\t"
"\n"
"L_SHA256_transform_len_after_blk_0_%=: \n\t"
"L_SHA256_transform_len_after_blk_0_%=:\n\t"
/* Round 1 */
"rotlwi 0, 10, 26\n\t"
"rotlwi %[len], 10, 21\n\t"
@@ -3737,7 +3738,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 17, 17, 0\n\t"
"add 17, 17, 26\n\t"
"\n"
"L_SHA256_transform_len_after_blk_1_%=: \n\t"
"L_SHA256_transform_len_after_blk_1_%=:\n\t"
/* Round 2 */
"rotlwi 0, 9, 26\n\t"
"rotlwi %[len], 9, 21\n\t"
@@ -3782,7 +3783,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 18, 18, 0\n\t"
"add 18, 18, 27\n\t"
"\n"
"L_SHA256_transform_len_after_blk_2_%=: \n\t"
"L_SHA256_transform_len_after_blk_2_%=:\n\t"
/* Round 3 */
"rotlwi 0, 8, 26\n\t"
"rotlwi %[len], 8, 21\n\t"
@@ -3827,7 +3828,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 19, 19, 0\n\t"
"add 19, 19, 28\n\t"
"\n"
"L_SHA256_transform_len_after_blk_3_%=: \n\t"
"L_SHA256_transform_len_after_blk_3_%=:\n\t"
/* Round 4 */
"rotlwi 0, 7, 26\n\t"
"rotlwi %[len], 7, 21\n\t"
@@ -3872,7 +3873,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 20, 20, 0\n\t"
"add 20, 20, 29\n\t"
"\n"
"L_SHA256_transform_len_after_blk_4_%=: \n\t"
"L_SHA256_transform_len_after_blk_4_%=:\n\t"
/* Round 5 */
"rotlwi 0, 15, 26\n\t"
"rotlwi %[len], 15, 21\n\t"
@@ -3917,7 +3918,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 21, 21, 0\n\t"
"add 21, 21, 30\n\t"
"\n"
"L_SHA256_transform_len_after_blk_5_%=: \n\t"
"L_SHA256_transform_len_after_blk_5_%=:\n\t"
/* Round 6 */
"rotlwi 0, 14, 26\n\t"
"rotlwi %[len], 14, 21\n\t"
@@ -3962,7 +3963,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 22, 22, 0\n\t"
"add 22, 22, 31\n\t"
"\n"
"L_SHA256_transform_len_after_blk_6_%=: \n\t"
"L_SHA256_transform_len_after_blk_6_%=:\n\t"
/* Round 7 */
"rotlwi 0, 12, 26\n\t"
"rotlwi %[len], 12, 21\n\t"
@@ -4007,7 +4008,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 23, 23, 0\n\t"
"add 23, 23, 16\n\t"
"\n"
"L_SHA256_transform_len_after_blk_7_%=: \n\t"
"L_SHA256_transform_len_after_blk_7_%=:\n\t"
/* Round 8 */
"rotlwi 0, 11, 26\n\t"
"rotlwi %[len], 11, 21\n\t"
@@ -4052,7 +4053,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 24, 24, 0\n\t"
"add 24, 24, 17\n\t"
"\n"
"L_SHA256_transform_len_after_blk_8_%=: \n\t"
"L_SHA256_transform_len_after_blk_8_%=:\n\t"
/* Round 9 */
"rotlwi 0, 10, 26\n\t"
"rotlwi %[len], 10, 21\n\t"
@@ -4097,7 +4098,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 25, 25, 0\n\t"
"add 25, 25, 18\n\t"
"\n"
"L_SHA256_transform_len_after_blk_9_%=: \n\t"
"L_SHA256_transform_len_after_blk_9_%=:\n\t"
/* Round 10 */
"rotlwi 0, 9, 26\n\t"
"rotlwi %[len], 9, 21\n\t"
@@ -4142,7 +4143,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 26, 26, 0\n\t"
"add 26, 26, 19\n\t"
"\n"
"L_SHA256_transform_len_after_blk_10_%=: \n\t"
"L_SHA256_transform_len_after_blk_10_%=:\n\t"
/* Round 11 */
"rotlwi 0, 8, 26\n\t"
"rotlwi %[len], 8, 21\n\t"
@@ -4187,7 +4188,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 27, 27, 0\n\t"
"add 27, 27, 20\n\t"
"\n"
"L_SHA256_transform_len_after_blk_11_%=: \n\t"
"L_SHA256_transform_len_after_blk_11_%=:\n\t"
/* Round 12 */
"rotlwi 0, 7, 26\n\t"
"rotlwi %[len], 7, 21\n\t"
@@ -4232,7 +4233,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 28, 28, 0\n\t"
"add 28, 28, 21\n\t"
"\n"
"L_SHA256_transform_len_after_blk_12_%=: \n\t"
"L_SHA256_transform_len_after_blk_12_%=:\n\t"
/* Round 13 */
"rotlwi 0, 15, 26\n\t"
"rotlwi %[len], 15, 21\n\t"
@@ -4277,7 +4278,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 29, 29, 0\n\t"
"add 29, 29, 22\n\t"
"\n"
"L_SHA256_transform_len_after_blk_13_%=: \n\t"
"L_SHA256_transform_len_after_blk_13_%=:\n\t"
/* Round 14 */
"rotlwi 0, 14, 26\n\t"
"rotlwi %[len], 14, 21\n\t"
@@ -4322,7 +4323,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 30, 30, 0\n\t"
"add 30, 30, 23\n\t"
"\n"
"L_SHA256_transform_len_after_blk_14_%=: \n\t"
"L_SHA256_transform_len_after_blk_14_%=:\n\t"
/* Round 15 */
"rotlwi 0, 12, 26\n\t"
"rotlwi %[len], 12, 21\n\t"
@@ -4367,7 +4368,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 31, 31, 0\n\t"
"add 31, 31, 24\n\t"
"\n"
"L_SHA256_transform_len_after_blk_15_%=: \n\t"
"L_SHA256_transform_len_after_blk_15_%=:\n\t"
"addi 6, 6, 0x40\n\t"
"bdnz L_SHA256_transform_len_start_%=\n\t"
"subi 6, 6, 0x100\n\t"
@@ -4424,21 +4425,22 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("4") = (const byte*)data_p;
register word32 len __asm__ ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("6") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
(word32*)&L_SHA256_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4461,7 +4463,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz %[sha256], 4(1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz 14, 0(%[sha256])\n\t"
"lwz 15, 4(%[sha256])\n\t"
@@ -6868,7 +6870,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz %[sha256], 4(1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz 14, 0(%[sha256])\n\t"
"lwz 15, 4(%[sha256])\n\t"
@@ -6890,7 +6892,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr %[sha256]\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_%=: \n\t"
"L_SHA256_transform_len_start_%=:\n\t"
/* Round 0 */
"rotlwi %[sha256], 9, 26\n\t"
"rotlwi %[len], 9, 21\n\t"
@@ -6935,7 +6937,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 14, 14, %[sha256]\n\t"
"add 14, 14, 23\n\t"
"\n"
"L_SHA256_transform_len_after_blk_0_%=: \n\t"
"L_SHA256_transform_len_after_blk_0_%=:\n\t"
/* Round 1 */
"rotlwi %[sha256], 8, 26\n\t"
"rotlwi %[len], 8, 21\n\t"
@@ -6980,7 +6982,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 15, 15, %[sha256]\n\t"
"add 15, 15, 24\n\t"
"\n"
"L_SHA256_transform_len_after_blk_1_%=: \n\t"
"L_SHA256_transform_len_after_blk_1_%=:\n\t"
/* Round 2 */
"rotlwi %[sha256], 7, 26\n\t"
"rotlwi %[len], 7, 21\n\t"
@@ -7025,7 +7027,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 16, 16, %[sha256]\n\t"
"add 16, 16, 25\n\t"
"\n"
"L_SHA256_transform_len_after_blk_2_%=: \n\t"
"L_SHA256_transform_len_after_blk_2_%=:\n\t"
/* Round 3 */
"rotlwi %[sha256], %[data], 26\n\t"
"rotlwi %[len], %[data], 21\n\t"
@@ -7070,7 +7072,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 17, 17, %[sha256]\n\t"
"add 17, 17, 26\n\t"
"\n"
"L_SHA256_transform_len_after_blk_3_%=: \n\t"
"L_SHA256_transform_len_after_blk_3_%=:\n\t"
/* Round 4 */
"rotlwi %[sha256], 0, 26\n\t"
"rotlwi %[len], 0, 21\n\t"
@@ -7115,7 +7117,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 18, 18, %[sha256]\n\t"
"add 18, 18, 27\n\t"
"\n"
"L_SHA256_transform_len_after_blk_4_%=: \n\t"
"L_SHA256_transform_len_after_blk_4_%=:\n\t"
/* Round 5 */
"rotlwi %[sha256], 12, 26\n\t"
"rotlwi %[len], 12, 21\n\t"
@@ -7160,7 +7162,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 19, 19, %[sha256]\n\t"
"add 19, 19, 28\n\t"
"\n"
"L_SHA256_transform_len_after_blk_5_%=: \n\t"
"L_SHA256_transform_len_after_blk_5_%=:\n\t"
/* Round 6 */
"rotlwi %[sha256], 11, 26\n\t"
"rotlwi %[len], 11, 21\n\t"
@@ -7205,7 +7207,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 20, 20, %[sha256]\n\t"
"add 20, 20, 29\n\t"
"\n"
"L_SHA256_transform_len_after_blk_6_%=: \n\t"
"L_SHA256_transform_len_after_blk_6_%=:\n\t"
/* Round 7 */
"rotlwi %[sha256], 10, 26\n\t"
"rotlwi %[len], 10, 21\n\t"
@@ -7250,7 +7252,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 21, 21, %[sha256]\n\t"
"add 21, 21, 14\n\t"
"\n"
"L_SHA256_transform_len_after_blk_7_%=: \n\t"
"L_SHA256_transform_len_after_blk_7_%=:\n\t"
/* Round 8 */
"rotlwi %[sha256], 9, 26\n\t"
"rotlwi %[len], 9, 21\n\t"
@@ -7295,7 +7297,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 22, 22, %[sha256]\n\t"
"add 22, 22, 15\n\t"
"\n"
"L_SHA256_transform_len_after_blk_8_%=: \n\t"
"L_SHA256_transform_len_after_blk_8_%=:\n\t"
/* Round 9 */
"rotlwi %[sha256], 8, 26\n\t"
"rotlwi %[len], 8, 21\n\t"
@@ -7340,7 +7342,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 23, 23, %[sha256]\n\t"
"add 23, 23, 16\n\t"
"\n"
"L_SHA256_transform_len_after_blk_9_%=: \n\t"
"L_SHA256_transform_len_after_blk_9_%=:\n\t"
/* Round 10 */
"rotlwi %[sha256], 7, 26\n\t"
"rotlwi %[len], 7, 21\n\t"
@@ -7385,7 +7387,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 24, 24, %[sha256]\n\t"
"add 24, 24, 17\n\t"
"\n"
"L_SHA256_transform_len_after_blk_10_%=: \n\t"
"L_SHA256_transform_len_after_blk_10_%=:\n\t"
/* Round 11 */
"rotlwi %[sha256], %[data], 26\n\t"
"rotlwi %[len], %[data], 21\n\t"
@@ -7430,7 +7432,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 25, 25, %[sha256]\n\t"
"add 25, 25, 18\n\t"
"\n"
"L_SHA256_transform_len_after_blk_11_%=: \n\t"
"L_SHA256_transform_len_after_blk_11_%=:\n\t"
/* Round 12 */
"rotlwi %[sha256], 0, 26\n\t"
"rotlwi %[len], 0, 21\n\t"
@@ -7475,7 +7477,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 26, 26, %[sha256]\n\t"
"add 26, 26, 19\n\t"
"\n"
"L_SHA256_transform_len_after_blk_12_%=: \n\t"
"L_SHA256_transform_len_after_blk_12_%=:\n\t"
/* Round 13 */
"rotlwi %[sha256], 12, 26\n\t"
"rotlwi %[len], 12, 21\n\t"
@@ -7520,7 +7522,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 27, 27, %[sha256]\n\t"
"add 27, 27, 20\n\t"
"\n"
"L_SHA256_transform_len_after_blk_13_%=: \n\t"
"L_SHA256_transform_len_after_blk_13_%=:\n\t"
/* Round 14 */
"rotlwi %[sha256], 11, 26\n\t"
"rotlwi %[len], 11, 21\n\t"
@@ -7565,7 +7567,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 28, 28, %[sha256]\n\t"
"add 28, 28, 21\n\t"
"\n"
"L_SHA256_transform_len_after_blk_14_%=: \n\t"
"L_SHA256_transform_len_after_blk_14_%=:\n\t"
/* Round 15 */
"rotlwi %[sha256], 10, 26\n\t"
"rotlwi %[len], 10, 21\n\t"
@@ -7610,7 +7612,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add 29, 29, %[sha256]\n\t"
"add 29, 29, 22\n\t"
"\n"
"L_SHA256_transform_len_after_blk_15_%=: \n\t"
"L_SHA256_transform_len_after_blk_15_%=:\n\t"
"addi 6, 6, 0x40\n\t"
"bdnz L_SHA256_transform_len_start_%=\n\t"
"subi 6, 6, 0x100\n\t"
+70 -68
View File
@@ -29,8 +29,6 @@
#include <wolfssl/wolfcrypt/error-crypt.h>
#ifdef WOLFSSL_PPC32_ASM
#include <stdint.h>
#include <wolfssl/wolfcrypt/libwolfssl_sources.h>
#ifdef WOLFSSL_PPC32_ASM_INLINE
#ifdef __IAR_SYSTEMS_ICC__
@@ -47,11 +45,12 @@
#define __volatile__
#define WOLFSSL_NO_VAR_ASSIGN_REG
#endif /* __ghs__ */
#ifndef NO_SHA256
#include <wolfssl/wolfcrypt/sha256.h>
#ifdef WOLFSSL_PPC32_ASM_SPE
static const word32 L_SHA256_transform_spe_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_spe_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -73,21 +72,22 @@ static const word32 L_SHA256_transform_spe_len_k[] = {
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_spe_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("r3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r4") = (const byte*)data_p;
register word32 len __asm__ ("r5") = (word32)len_p;
register word32* L_SHA256_transform_spe_len_k_c __asm__ ("r6") =
(word32*)&L_SHA256_transform_spe_len_k;
#else
register word32* L_SHA256_transform_spe_len_k_c =
(word32*)&L_SHA256_transform_spe_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -104,7 +104,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz r21, 28(%[sha256])\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_spe_len_begin_%=: \n\t"
"L_SHA256_transform_spe_len_begin_%=:\n\t"
/* Load W */
"lwz r22, 0(%[data])\n\t"
"lwz r0, 4(%[data])\n\t"
@@ -134,7 +134,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr r0\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_spe_len_start_%=: \n\t"
"L_SHA256_transform_spe_len_start_%=:\n\t"
/* Round 0 */
"mr r9, r22\n\t"
"rotlwi r6, r18, 26\n\t"
@@ -1178,7 +1178,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#ifndef WOLFSSL_PPC32_ASM_SPE
#include <wolfssl/wolfcrypt/sha256.h>
static const word32 L_SHA256_transform_len_k[] = {
XALIGNED(8) static const word32 L_SHA256_transform_len_k[] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -1201,21 +1201,22 @@ static const word32 L_SHA256_transform_len_k[] = {
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("r3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r4") = (const byte*)data_p;
register word32 len __asm__ ("r5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("r6") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
(word32*)&L_SHA256_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -1234,7 +1235,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr %[len]\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz r16, 0(%[data])\n\t"
"lwz r17, 4(%[data])\n\t"
@@ -3625,7 +3626,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"stw %[len], 0(r1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz r16, 0(%[data])\n\t"
"lwz r17, 4(%[data])\n\t"
@@ -3647,7 +3648,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr r0\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_%=: \n\t"
"L_SHA256_transform_len_start_%=:\n\t"
/* Round 0 */
"rotlwi r0, r11, 26\n\t"
"rotlwi %[len], r11, 21\n\t"
@@ -3692,7 +3693,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r16, r16, r0\n\t"
"add r16, r16, r25\n\t"
"\n"
"L_SHA256_transform_len_after_blk_0_%=: \n\t"
"L_SHA256_transform_len_after_blk_0_%=:\n\t"
/* Round 1 */
"rotlwi r0, r10, 26\n\t"
"rotlwi %[len], r10, 21\n\t"
@@ -3737,7 +3738,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r17, r17, r0\n\t"
"add r17, r17, r26\n\t"
"\n"
"L_SHA256_transform_len_after_blk_1_%=: \n\t"
"L_SHA256_transform_len_after_blk_1_%=:\n\t"
/* Round 2 */
"rotlwi r0, r9, 26\n\t"
"rotlwi %[len], r9, 21\n\t"
@@ -3782,7 +3783,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r18, r18, r0\n\t"
"add r18, r18, r27\n\t"
"\n"
"L_SHA256_transform_len_after_blk_2_%=: \n\t"
"L_SHA256_transform_len_after_blk_2_%=:\n\t"
/* Round 3 */
"rotlwi r0, r8, 26\n\t"
"rotlwi %[len], r8, 21\n\t"
@@ -3827,7 +3828,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r19, r19, r0\n\t"
"add r19, r19, r28\n\t"
"\n"
"L_SHA256_transform_len_after_blk_3_%=: \n\t"
"L_SHA256_transform_len_after_blk_3_%=:\n\t"
/* Round 4 */
"rotlwi r0, r7, 26\n\t"
"rotlwi %[len], r7, 21\n\t"
@@ -3872,7 +3873,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r20, r20, r0\n\t"
"add r20, r20, r29\n\t"
"\n"
"L_SHA256_transform_len_after_blk_4_%=: \n\t"
"L_SHA256_transform_len_after_blk_4_%=:\n\t"
/* Round 5 */
"rotlwi r0, r15, 26\n\t"
"rotlwi %[len], r15, 21\n\t"
@@ -3917,7 +3918,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r21, r21, r0\n\t"
"add r21, r21, r30\n\t"
"\n"
"L_SHA256_transform_len_after_blk_5_%=: \n\t"
"L_SHA256_transform_len_after_blk_5_%=:\n\t"
/* Round 6 */
"rotlwi r0, r14, 26\n\t"
"rotlwi %[len], r14, 21\n\t"
@@ -3962,7 +3963,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r22, r22, r0\n\t"
"add r22, r22, r31\n\t"
"\n"
"L_SHA256_transform_len_after_blk_6_%=: \n\t"
"L_SHA256_transform_len_after_blk_6_%=:\n\t"
/* Round 7 */
"rotlwi r0, r12, 26\n\t"
"rotlwi %[len], r12, 21\n\t"
@@ -4007,7 +4008,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r23, r23, r0\n\t"
"add r23, r23, r16\n\t"
"\n"
"L_SHA256_transform_len_after_blk_7_%=: \n\t"
"L_SHA256_transform_len_after_blk_7_%=:\n\t"
/* Round 8 */
"rotlwi r0, r11, 26\n\t"
"rotlwi %[len], r11, 21\n\t"
@@ -4052,7 +4053,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r24, r24, r0\n\t"
"add r24, r24, r17\n\t"
"\n"
"L_SHA256_transform_len_after_blk_8_%=: \n\t"
"L_SHA256_transform_len_after_blk_8_%=:\n\t"
/* Round 9 */
"rotlwi r0, r10, 26\n\t"
"rotlwi %[len], r10, 21\n\t"
@@ -4097,7 +4098,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r25, r25, r0\n\t"
"add r25, r25, r18\n\t"
"\n"
"L_SHA256_transform_len_after_blk_9_%=: \n\t"
"L_SHA256_transform_len_after_blk_9_%=:\n\t"
/* Round 10 */
"rotlwi r0, r9, 26\n\t"
"rotlwi %[len], r9, 21\n\t"
@@ -4142,7 +4143,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r26, r26, r0\n\t"
"add r26, r26, r19\n\t"
"\n"
"L_SHA256_transform_len_after_blk_10_%=: \n\t"
"L_SHA256_transform_len_after_blk_10_%=:\n\t"
/* Round 11 */
"rotlwi r0, r8, 26\n\t"
"rotlwi %[len], r8, 21\n\t"
@@ -4187,7 +4188,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r27, r27, r0\n\t"
"add r27, r27, r20\n\t"
"\n"
"L_SHA256_transform_len_after_blk_11_%=: \n\t"
"L_SHA256_transform_len_after_blk_11_%=:\n\t"
/* Round 12 */
"rotlwi r0, r7, 26\n\t"
"rotlwi %[len], r7, 21\n\t"
@@ -4232,7 +4233,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r28, r28, r0\n\t"
"add r28, r28, r21\n\t"
"\n"
"L_SHA256_transform_len_after_blk_12_%=: \n\t"
"L_SHA256_transform_len_after_blk_12_%=:\n\t"
/* Round 13 */
"rotlwi r0, r15, 26\n\t"
"rotlwi %[len], r15, 21\n\t"
@@ -4277,7 +4278,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r29, r29, r0\n\t"
"add r29, r29, r22\n\t"
"\n"
"L_SHA256_transform_len_after_blk_13_%=: \n\t"
"L_SHA256_transform_len_after_blk_13_%=:\n\t"
/* Round 14 */
"rotlwi r0, r14, 26\n\t"
"rotlwi %[len], r14, 21\n\t"
@@ -4322,7 +4323,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r30, r30, r0\n\t"
"add r30, r30, r23\n\t"
"\n"
"L_SHA256_transform_len_after_blk_14_%=: \n\t"
"L_SHA256_transform_len_after_blk_14_%=:\n\t"
/* Round 15 */
"rotlwi r0, r12, 26\n\t"
"rotlwi %[len], r12, 21\n\t"
@@ -4367,7 +4368,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r31, r31, r0\n\t"
"add r31, r31, r24\n\t"
"\n"
"L_SHA256_transform_len_after_blk_15_%=: \n\t"
"L_SHA256_transform_len_after_blk_15_%=:\n\t"
"addi r6, r6, 0x40\n\t"
"bdnz L_SHA256_transform_len_start_%=\n\t"
"subi r6, r6, 0x100\n\t"
@@ -4424,21 +4425,22 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p,
word32 len_p);
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p)
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256_p,
const byte* data_p, word32 len_p)
#else
void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
WC_OMIT_FRAME_POINTER void Transform_Sha256_Len(wc_Sha256* sha256,
const byte* data, word32 len)
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
{
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p;
register const byte* data asm ("4") = (const byte*)data_p;
register word32 len asm ("5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c asm ("6") =
register wc_Sha256* sha256 __asm__ ("r3") = (wc_Sha256*)sha256_p;
register const byte* data __asm__ ("r4") = (const byte*)data_p;
register word32 len __asm__ ("r5") = (word32)len_p;
register word32* L_SHA256_transform_len_k_c __asm__ ("r6") =
(word32*)&L_SHA256_transform_len_k;
#else
register word32* L_SHA256_transform_len_k_c =
(word32*)&L_SHA256_transform_len_k;
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
__asm__ __volatile__ (
@@ -4461,7 +4463,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz %[sha256], 4(r1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz r14, 0(%[sha256])\n\t"
"lwz r15, 4(%[sha256])\n\t"
@@ -6868,7 +6870,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"lwz %[sha256], 4(r1)\n\t"
/* Start of loop processing a block */
"\n"
"L_SHA256_transform_len_begin_%=: \n\t"
"L_SHA256_transform_len_begin_%=:\n\t"
/* Load W - 64 bytes */
"lwz r14, 0(%[sha256])\n\t"
"lwz r15, 4(%[sha256])\n\t"
@@ -6890,7 +6892,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"mtctr %[sha256]\n\t"
/* Start of 16 rounds */
"\n"
"L_SHA256_transform_len_start_%=: \n\t"
"L_SHA256_transform_len_start_%=:\n\t"
/* Round 0 */
"rotlwi %[sha256], r9, 26\n\t"
"rotlwi %[len], r9, 21\n\t"
@@ -6935,7 +6937,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r14, r14, %[sha256]\n\t"
"add r14, r14, r23\n\t"
"\n"
"L_SHA256_transform_len_after_blk_0_%=: \n\t"
"L_SHA256_transform_len_after_blk_0_%=:\n\t"
/* Round 1 */
"rotlwi %[sha256], r8, 26\n\t"
"rotlwi %[len], r8, 21\n\t"
@@ -6980,7 +6982,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r15, r15, %[sha256]\n\t"
"add r15, r15, r24\n\t"
"\n"
"L_SHA256_transform_len_after_blk_1_%=: \n\t"
"L_SHA256_transform_len_after_blk_1_%=:\n\t"
/* Round 2 */
"rotlwi %[sha256], r7, 26\n\t"
"rotlwi %[len], r7, 21\n\t"
@@ -7025,7 +7027,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r16, r16, %[sha256]\n\t"
"add r16, r16, r25\n\t"
"\n"
"L_SHA256_transform_len_after_blk_2_%=: \n\t"
"L_SHA256_transform_len_after_blk_2_%=:\n\t"
/* Round 3 */
"rotlwi %[sha256], %[data], 26\n\t"
"rotlwi %[len], %[data], 21\n\t"
@@ -7070,7 +7072,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r17, r17, %[sha256]\n\t"
"add r17, r17, r26\n\t"
"\n"
"L_SHA256_transform_len_after_blk_3_%=: \n\t"
"L_SHA256_transform_len_after_blk_3_%=:\n\t"
/* Round 4 */
"rotlwi %[sha256], r0, 26\n\t"
"rotlwi %[len], r0, 21\n\t"
@@ -7115,7 +7117,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r18, r18, %[sha256]\n\t"
"add r18, r18, r27\n\t"
"\n"
"L_SHA256_transform_len_after_blk_4_%=: \n\t"
"L_SHA256_transform_len_after_blk_4_%=:\n\t"
/* Round 5 */
"rotlwi %[sha256], r12, 26\n\t"
"rotlwi %[len], r12, 21\n\t"
@@ -7160,7 +7162,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r19, r19, %[sha256]\n\t"
"add r19, r19, r28\n\t"
"\n"
"L_SHA256_transform_len_after_blk_5_%=: \n\t"
"L_SHA256_transform_len_after_blk_5_%=:\n\t"
/* Round 6 */
"rotlwi %[sha256], r11, 26\n\t"
"rotlwi %[len], r11, 21\n\t"
@@ -7205,7 +7207,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r20, r20, %[sha256]\n\t"
"add r20, r20, r29\n\t"
"\n"
"L_SHA256_transform_len_after_blk_6_%=: \n\t"
"L_SHA256_transform_len_after_blk_6_%=:\n\t"
/* Round 7 */
"rotlwi %[sha256], r10, 26\n\t"
"rotlwi %[len], r10, 21\n\t"
@@ -7250,7 +7252,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r21, r21, %[sha256]\n\t"
"add r21, r21, r14\n\t"
"\n"
"L_SHA256_transform_len_after_blk_7_%=: \n\t"
"L_SHA256_transform_len_after_blk_7_%=:\n\t"
/* Round 8 */
"rotlwi %[sha256], r9, 26\n\t"
"rotlwi %[len], r9, 21\n\t"
@@ -7295,7 +7297,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r22, r22, %[sha256]\n\t"
"add r22, r22, r15\n\t"
"\n"
"L_SHA256_transform_len_after_blk_8_%=: \n\t"
"L_SHA256_transform_len_after_blk_8_%=:\n\t"
/* Round 9 */
"rotlwi %[sha256], r8, 26\n\t"
"rotlwi %[len], r8, 21\n\t"
@@ -7340,7 +7342,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r23, r23, %[sha256]\n\t"
"add r23, r23, r16\n\t"
"\n"
"L_SHA256_transform_len_after_blk_9_%=: \n\t"
"L_SHA256_transform_len_after_blk_9_%=:\n\t"
/* Round 10 */
"rotlwi %[sha256], r7, 26\n\t"
"rotlwi %[len], r7, 21\n\t"
@@ -7385,7 +7387,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r24, r24, %[sha256]\n\t"
"add r24, r24, r17\n\t"
"\n"
"L_SHA256_transform_len_after_blk_10_%=: \n\t"
"L_SHA256_transform_len_after_blk_10_%=:\n\t"
/* Round 11 */
"rotlwi %[sha256], %[data], 26\n\t"
"rotlwi %[len], %[data], 21\n\t"
@@ -7430,7 +7432,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r25, r25, %[sha256]\n\t"
"add r25, r25, r18\n\t"
"\n"
"L_SHA256_transform_len_after_blk_11_%=: \n\t"
"L_SHA256_transform_len_after_blk_11_%=:\n\t"
/* Round 12 */
"rotlwi %[sha256], r0, 26\n\t"
"rotlwi %[len], r0, 21\n\t"
@@ -7475,7 +7477,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r26, r26, %[sha256]\n\t"
"add r26, r26, r19\n\t"
"\n"
"L_SHA256_transform_len_after_blk_12_%=: \n\t"
"L_SHA256_transform_len_after_blk_12_%=:\n\t"
/* Round 13 */
"rotlwi %[sha256], r12, 26\n\t"
"rotlwi %[len], r12, 21\n\t"
@@ -7520,7 +7522,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r27, r27, %[sha256]\n\t"
"add r27, r27, r20\n\t"
"\n"
"L_SHA256_transform_len_after_blk_13_%=: \n\t"
"L_SHA256_transform_len_after_blk_13_%=:\n\t"
/* Round 14 */
"rotlwi %[sha256], r11, 26\n\t"
"rotlwi %[len], r11, 21\n\t"
@@ -7565,7 +7567,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r28, r28, %[sha256]\n\t"
"add r28, r28, r21\n\t"
"\n"
"L_SHA256_transform_len_after_blk_14_%=: \n\t"
"L_SHA256_transform_len_after_blk_14_%=:\n\t"
/* Round 15 */
"rotlwi %[sha256], r10, 26\n\t"
"rotlwi %[len], r10, 21\n\t"
@@ -7610,7 +7612,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
"add r29, r29, %[sha256]\n\t"
"add r29, r29, r22\n\t"
"\n"
"L_SHA256_transform_len_after_blk_15_%=: \n\t"
"L_SHA256_transform_len_after_blk_15_%=:\n\t"
"addi r6, r6, 0x40\n\t"
"bdnz L_SHA256_transform_len_start_%=\n\t"
"subi r6, r6, 0x100\n\t"
+50 -20
View File
@@ -53,6 +53,11 @@
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sse2_sha256_sha_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
@@ -81,7 +86,7 @@ L_sse2_sha256_sha_k:
.p2align 4
#endif /* __APPLE__ */
L_sse2_sha256_shuf_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.text
.globl Transform_Sha256_SSE2_Sha
@@ -487,6 +492,11 @@ L_sha256_sha_len_sse2_start:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
@@ -515,7 +525,7 @@ L_avx1_sha256_k:
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_shuf_00BA:
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
#ifndef __APPLE__
.data
#else
@@ -527,7 +537,7 @@ L_avx1_sha256_shuf_00BA:
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_shuf_DC00:
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
#ifndef __APPLE__
.data
#else
@@ -539,7 +549,7 @@ L_avx1_sha256_shuf_DC00:
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_flip_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.text
.globl Transform_Sha256_AVX1
@@ -5342,6 +5352,11 @@ L_sha256_len_avx1_start:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx1_rorx_sha256_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
@@ -5370,7 +5385,7 @@ L_avx1_rorx_sha256_k:
.p2align 4
#endif /* __APPLE__ */
L_avx1_rorx_sha256_shuf_00BA:
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
#ifndef __APPLE__
.data
#else
@@ -5382,7 +5397,7 @@ L_avx1_rorx_sha256_shuf_00BA:
.p2align 4
#endif /* __APPLE__ */
L_avx1_rorx_sha256_shuf_DC00:
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
#ifndef __APPLE__
.data
#else
@@ -5394,7 +5409,7 @@ L_avx1_rorx_sha256_shuf_DC00:
.p2align 4
#endif /* __APPLE__ */
L_avx1_rorx_sha256_flip_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.text
.globl Transform_Sha256_AVX1_RORX
@@ -10114,6 +10129,11 @@ L_sha256_len_avx1_len_rorx_start:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_sha_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
@@ -10142,7 +10162,7 @@ L_avx1_sha256_sha_k:
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha256_shuf_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.text
.globl Transform_Sha256_AVX1_Sha
@@ -10493,6 +10513,11 @@ L_sha256_sha_len_avx1_start:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx2_sha256_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
@@ -10537,8 +10562,8 @@ L_avx2_sha256_k:
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha256_shuf_00BA:
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
#ifndef __APPLE__
.data
#else
@@ -10550,8 +10575,8 @@ L_avx2_sha256_shuf_00BA:
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha256_shuf_DC00:
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
#ifndef __APPLE__
.data
#else
@@ -10563,8 +10588,8 @@ L_avx2_sha256_shuf_DC00:
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha256_flip_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.text
.globl Transform_Sha256_AVX2
@@ -17092,6 +17117,11 @@ L_sha256_len_avx2_done:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_avx2_rorx_sha256_k:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
@@ -17136,8 +17166,8 @@ L_avx2_rorx_sha256_k:
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha256_flip_mask:
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x405060700010203, 0xc0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
.quad 0x0405060700010203,0x0c0d0e0f08090a0b
#ifndef __APPLE__
.data
#else
@@ -17149,8 +17179,8 @@ L_avx2_rorx_sha256_flip_mask:
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha256_shuf_00BA:
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0xb0a090803020100, 0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
.quad 0x0b0a090803020100,0xffffffffffffffff
#ifndef __APPLE__
.data
#else
@@ -17162,8 +17192,8 @@ L_avx2_rorx_sha256_shuf_00BA:
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha256_shuf_DC00:
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff, 0xb0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
.quad 0xffffffffffffffff,0x0b0a090803020100
#ifndef __APPLE__
.text
.globl Transform_Sha256_AVX2_RORX
+18 -18
View File
@@ -53,9 +53,9 @@
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_avx2_r:
.quad 0x0000000000000001,0x0000000000000001
@@ -112,9 +112,9 @@ L_sha3_avx2_r:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_x4_avx2_r:
.quad 0x0000000000000001,0x0000000000000001
@@ -9314,9 +9314,9 @@ L_sha3_block_n_bmi2_rounds:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_block_avx2_rotl:
.quad 0x0000000000000001,0x000000000000003e
@@ -9337,9 +9337,9 @@ L_sha3_block_avx2_rotl:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_block_avx2_rotr:
.quad 0x000000000000003f,0x0000000000000002
@@ -9533,9 +9533,9 @@ L_sha3_block_avx2_start:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_block_n_avx2_rotl:
.quad 0x0000000000000001,0x000000000000003e
@@ -9556,9 +9556,9 @@ L_sha3_block_n_avx2_rotl:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_sha3_block_n_avx2_rotr:
.quad 0x000000000000003f,0x0000000000000002
@@ -15298,8 +15298,8 @@ _sha3_blocksx4_avx2:
.p2align 5
#endif /* __APPLE__ */
L_sha3_128_blockx4_seed_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_128_blocksx4_seed_avx2
@@ -20677,8 +20677,8 @@ _sha3_128_blocksx4_seed_avx2:
.p2align 5
#endif /* __APPLE__ */
L_sha3_256_blockx4_seed_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_256_blocksx4_seed_avx2
@@ -26057,8 +26057,8 @@ _sha3_256_blocksx4_seed_avx2:
.p2align 5
#endif /* __APPLE__ */
L_sha3_256_blockx4_seed_64_avx2_end_mark:
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000, 0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
.quad 0x8000000000000000,0x8000000000000000
#ifndef __APPLE__
.text
.globl sha3_256_blocksx4_seed_64_avx2
+23 -23
View File
@@ -54,9 +54,9 @@
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx1_sha512_k:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -110,7 +110,7 @@ L_avx1_sha512_k:
.p2align 4
#endif /* __APPLE__ */
L_avx1_sha512_flip_mask:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.text
.globl Transform_Sha512_AVX1
@@ -2682,9 +2682,9 @@ L_sha512_len_avx1_start:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx1_rorx_sha512_k:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -2738,7 +2738,7 @@ L_avx1_rorx_sha512_k:
.p2align 4
#endif /* __APPLE__ */
L_avx1_rorx_sha512_flip_mask:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.text
.globl Transform_Sha512_AVX1_RORX
@@ -5186,9 +5186,9 @@ L_sha512_len_avx1_rorx_start:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha512_k:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -5237,9 +5237,9 @@ L_avx2_sha512_k:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha512_k_2:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -5345,8 +5345,8 @@ L_avx2_sha512_k_2_end:
.p2align 5
#endif /* __APPLE__ */
L_avx2_sha512_flip_mask:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.text
.globl Transform_Sha512_AVX2
@@ -6430,11 +6430,11 @@ _Transform_Sha512_AVX2_Len:
movq %rsi, %rbp
testb $0x80, %bpl
je L_sha512_len_avx2_block
movq 224(%rdi), %rcx
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
movq 224(%rdi), %rbx
vmovdqu (%rbx), %ymm0
vmovdqu 32(%rbx), %ymm1
vmovdqu 64(%rbx), %ymm2
vmovdqu 96(%rbx), %ymm3
vmovups %ymm0, 64(%rdi)
vmovups %ymm1, 96(%rdi)
vmovups %ymm2, 128(%rdi)
@@ -8043,9 +8043,9 @@ L_sha512_len_avx2_done:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha512_k:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -8094,9 +8094,9 @@ L_avx2_rorx_sha512_k:
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
.align 32
#else
.p2align 4
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha512_k_2:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
@@ -8202,8 +8202,8 @@ L_avx2_rorx_sha512_k_2_end:
.p2align 5
#endif /* __APPLE__ */
L_avx2_rorx_sha512_flip_mask:
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x1020304050607, 0x8090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
.quad 0x0001020304050607,0x08090a0b0c0d0e0f
#ifndef __APPLE__
.text
.globl Transform_Sha512_AVX2_RORX
+1325 -1325
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1363 -158
View File
File diff suppressed because it is too large Load Diff
+179 -144
View File
@@ -56771,10 +56771,10 @@ _sp_256_mont_div2_4:
adcq %r10, %r8
movq $0x00, %r11
adcq $0x00, %r11
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r11, %r8
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r11, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -57615,10 +57615,10 @@ _sp_256_mont_div2_avx2_4:
adcq %r10, %r8
movq $0x00, %r11
adcq $0x00, %r11
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r11, %r8
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r11, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -58754,10 +58754,10 @@ _sp_256_mod_inv_4:
testb $0x01, %r11b
jnz L_256_mod_inv_4_v_even_end
L_256_mod_inv_4_v_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
@@ -58782,17 +58782,17 @@ L_256_mod_inv_4_uv_u:
sbbq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
testb $0x01, %cl
jnz L_256_mod_inv_4_usubv_even_end
L_256_mod_inv_4_usubv_even_start:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
movb $0x00, (%rsp,%r15,1)
incq %r15
testb $0x01, %cl
@@ -58814,17 +58814,17 @@ L_256_mod_inv_4_uv_v:
sbbq %r8, %r12
sbbq %r9, %r13
sbbq %r10, %r14
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
testb $0x01, %r11b
jnz L_256_mod_inv_4_vsubu_even_end
L_256_mod_inv_4_vsubu_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrq $1, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
@@ -58877,10 +58877,10 @@ L_256_mod_inv_4_op_div2_b:
adcq 24(%rdx), %r10
adcq $0x00, %rsi
L_256_mod_inv_4_op_div2_b_mod:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %rsi, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrdq $1, %rsi, %r10
movb (%rsp,%r15,1), %sil
incq %r15
cmpb $0x01, %sil
@@ -58910,10 +58910,10 @@ L_256_mod_inv_4_op_div2_d:
adcq 24(%rdx), %r14
adcq $0x00, %rsi
L_256_mod_inv_4_op_div2_d_mod:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrdq $0x01, %rsi, %r14
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrdq $1, %r14, %r13
shrdq $1, %rsi, %r14
movb (%rsp,%r15,1), %sil
incq %r15
cmpb $0x01, %sil
@@ -58951,6 +58951,11 @@ L_256_mod_inv_4_store_end:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_order:
.long 0x00632551,0x01e84f3b,0x03bce6fa,0x03ffffff
.long 0x03ff0000,0x00000000,0x00000000,0x00000000
@@ -58967,13 +58972,18 @@ L_sp256_mod_inv_avx2_4_order:
.p2align 5
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_one:
.quad 0x1, 0x0
.quad 0x0, 0x0
.quad 0x0000000000000001,0x0000000000000000
.quad 0x0000000000000000,0x0000000000000000
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_all_one:
.long 0x00000001,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000001,0x00000001,0x00000001
@@ -58982,6 +58992,11 @@ L_sp256_mod_inv_avx2_4_all_one:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_mask01111:
.long 0x00000000,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000000,0x00000000,0x00000000
@@ -58990,6 +59005,11 @@ L_sp256_mod_inv_avx2_4_mask01111:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_down_one_dword:
.long 0x00000001,0x00000002,0x00000003,0x00000004
.long 0x00000005,0x00000006,0x00000007,0x00000007
@@ -58998,6 +59018,11 @@ L_sp256_mod_inv_avx2_4_down_one_dword:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_neg:
.long 0x00000000,0x00000000,0x00000000,0x00000000
.long 0x80000000,0x00000000,0x00000000,0x00000000
@@ -59006,6 +59031,11 @@ L_sp256_mod_inv_avx2_4_neg:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_up_one_dword:
.long 0x00000007,0x00000000,0x00000001,0x00000002
.long 0x00000003,0x00000007,0x00000007,0x00000007
@@ -59014,6 +59044,11 @@ L_sp256_mod_inv_avx2_4_up_one_dword:
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 16
#else
.p2align 4
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_mask26:
.long 0x03ffffff,0x03ffffff,0x03ffffff,0x03ffffff
.long 0x03ffffff,0x00000000,0x00000000,0x00000000
@@ -59073,10 +59108,10 @@ _sp_256_mod_inv_avx2_4:
testb $0x01, %r10b
jnz L_256_mod_inv_avx2_4_v_even_end
L_256_mod_inv_avx2_4_v_even_start:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
vptest %ymm8, %ymm2
jz L_256_mod_inv_avx2_4_v_even_shr1
vpaddd %ymm6, %ymm2, %ymm2
@@ -59119,10 +59154,10 @@ L_256_mod_inv_avx2_4_uv_u:
vpaddd %ymm7, %ymm1, %ymm1
L_256_mod_inv_avx2_4_usubv_done_neg:
L_256_mod_inv_avx2_4_usubv_shr1:
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrq $0x01, %r9
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrq $1, %r9
vptest %ymm8, %ymm0
jz L_256_mod_inv_avx2_4_usubv_sub_shr1
vpaddd %ymm6, %ymm0, %ymm0
@@ -59172,10 +59207,10 @@ L_256_mod_inv_avx2_4_uv_v:
vpaddd %ymm7, %ymm3, %ymm3
L_256_mod_inv_avx2_4_vsubu_done_neg:
L_256_mod_inv_avx2_4_vsubu_shr1:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
vptest %ymm8, %ymm2
jz L_256_mod_inv_avx2_4_vsubu_sub_shr1
vpaddd %ymm6, %ymm2, %ymm2
@@ -59268,7 +59303,7 @@ L_256_mod_inv_avx2_4_store_done:
adcq %r13, %r12
movslq %r14d, %r14
adcq %r15, %r14
jge L_256_mod_inv_avx2_4_3_no_add_order
jge L_256_mod_inv_avx2_4_no_add_order
movq $0x9cac2fc632551, %rcx
movq $0xada7179e84f3b, %r9
movq $0xfffffffbce6fa, %r11
@@ -59296,7 +59331,7 @@ L_256_mod_inv_avx2_4_store_done:
andq %rsi, %r12
sarq $52, %r13
addq %r13, %r14
L_256_mod_inv_avx2_4_3_no_add_order:
L_256_mod_inv_avx2_4_no_add_order:
movq %r8, %rcx
movq %r10, %r9
movq %r12, %r11
@@ -61148,21 +61183,21 @@ _sp_384_mont_div2_6:
adcq $0x00, %r10
movq (%rsp), %rax
movq 8(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, (%rdi)
movq 16(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 8(%rdi)
movq 24(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 16(%rdi)
movq 32(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 24(%rdi)
movq 40(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 32(%rdi)
shrdq $0x01, %r10, %rcx
shrdq $1, %r10, %rcx
movq %rcx, 40(%rdi)
addq $48, %rsp
repz retq
@@ -61783,21 +61818,21 @@ _sp_384_mont_div2_avx2_6:
adcq $0x00, %r10
movq (%rdi), %r8
movq 8(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, (%rdi)
movq 16(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 24(%rdi)
movq 40(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 32(%rdi)
shrdq $0x01, %r10, %r9
shrdq $1, %r10, %r9
movq %r9, 40(%rdi)
repz retq
#ifndef __APPLE__
@@ -62565,12 +62600,12 @@ _sp_384_rshift1_6:
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrq $1, %r10
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -62629,12 +62664,12 @@ _sp_384_div2_mod_6:
movq $0x00, %rdx
adcq $0x00, %rdx
L_384_mod_inv_6_div2_mod_no_add:
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %rdx, %r11
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrdq $1, %r11, %r10
shrdq $1, %rdx, %r11
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
@@ -66688,15 +66723,15 @@ _sp_521_mont_div2_9:
sbbq $0x00, %r13
shlq $9, %r14
addq %r14, %r13
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -68454,15 +68489,15 @@ _sp_521_mont_div2_avx2_9:
sbbq $0x00, %r13
shlq $9, %r14
addq %r14, %r13
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
shrdq $1, %r11, %r10
shrdq $1, %r12, %r11
shrdq $1, %r13, %r12
shrq $1, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -69634,10 +69669,10 @@ _sp_521_rshift1_9:
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r10
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r10, %r8
shrdq $1, %rax, %rdx
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r10, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
@@ -69646,15 +69681,15 @@ _sp_521_rshift1_9:
movq 48(%rsi), %rcx
movq 56(%rsi), %r8
movq 64(%rsi), %rdx
shrdq $0x01, %rax, %r10
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %rdx, %r8
shrdq $1, %rax, %r10
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %rdx, %r8
movq %r10, 32(%rdi)
movq %rax, 40(%rdi)
movq %rcx, 48(%rdi)
movq %r8, 56(%rdi)
shrq $0x01, %rdx
shrq $1, %rdx
movq %rdx, 64(%rdi)
repz retq
#ifndef __APPLE__
@@ -69723,10 +69758,10 @@ L_521_mod_inv_9_div2_mod_no_add:
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $1, %rcx, %rax
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %r10, %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
@@ -69735,15 +69770,15 @@ L_521_mod_inv_9_div2_mod_no_add:
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %rax
shrdq $0x01, %rcx, %r10
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %rax, %r9
shrdq $1, %rcx, %r10
shrdq $1, %r8, %rcx
shrdq $1, %r9, %r8
shrdq $1, %rax, %r9
movq %r10, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
shrq $0x01, %rax
shrq $1, %rax
movq %rax, 64(%rdi)
repz retq
#ifndef __APPLE__
@@ -77428,51 +77463,51 @@ _sp_1024_mont_div2_16:
adcq $0x00, %r10
movq (%rsp), %rax
movq 8(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, (%rdi)
movq 16(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 8(%rdi)
movq 24(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 16(%rdi)
movq 32(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 24(%rdi)
movq 40(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 32(%rdi)
movq 48(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 40(%rdi)
movq 56(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 48(%rdi)
movq 64(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 56(%rdi)
movq 72(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 64(%rdi)
movq 80(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 72(%rdi)
movq 88(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 80(%rdi)
movq 96(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 88(%rdi)
movq 104(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 96(%rdi)
movq 112(%rsp), %rax
shrdq $0x01, %rax, %rcx
shrdq $1, %rax, %rcx
movq %rcx, 104(%rdi)
movq 120(%rsp), %rcx
shrdq $0x01, %rcx, %rax
shrdq $1, %rcx, %rax
movq %rax, 112(%rdi)
shrdq $0x01, %r10, %rcx
shrdq $1, %r10, %rcx
movq %rcx, 120(%rdi)
addq $0x80, %rsp
repz retq
@@ -78692,51 +78727,51 @@ _sp_1024_mont_div2_avx2_16:
adcq $0x00, %r10
movq (%rdi), %r8
movq 8(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, (%rdi)
movq 16(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 24(%rdi)
movq 40(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 32(%rdi)
movq 48(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 40(%rdi)
movq 56(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 48(%rdi)
movq 64(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 56(%rdi)
movq 72(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 64(%rdi)
movq 80(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 72(%rdi)
movq 88(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 80(%rdi)
movq 96(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 88(%rdi)
movq 104(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 96(%rdi)
movq 112(%rdi), %r8
shrdq $0x01, %r8, %r9
shrdq $1, %r8, %r9
movq %r9, 104(%rdi)
movq 120(%rdi), %r9
shrdq $0x01, %r9, %r8
shrdq $1, %r9, %r8
movq %r8, 112(%rdi)
shrdq $0x01, %r10, %r9
shrdq $1, %r10, %r9
movq %r9, 120(%rdi)
repz retq
#ifndef __APPLE__
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+554 -1764
View File
File diff suppressed because it is too large Load Diff