Skip to content

Commit c75962f

Browse files
ardbiesheuvelherbertx
authored andcommitted
crypto: x86/aesni - Use RIP-relative addressing
Prefer RIP-relative addressing where possible, which removes the need for boot time relocation fixups. In the GCM case, we can get rid of the oversized permutation array entirely while at it. Signed-off-by: Ard Biesheuvel <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 9d5aef1 commit c75962f

File tree

2 files changed

+8
-30
lines changed

2 files changed

+8
-30
lines changed

arch/x86/crypto/aesni-intel_asm.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2717,7 +2717,7 @@ SYM_FUNC_END(aesni_cts_cbc_dec)
27172717
* BSWAP_MASK == endian swapping mask
27182718
*/
27192719
SYM_FUNC_START_LOCAL(_aesni_inc_init)
2720-
movaps .Lbswap_mask, BSWAP_MASK
2720+
movaps .Lbswap_mask(%rip), BSWAP_MASK
27212721
movaps IV, CTR
27222722
pshufb BSWAP_MASK, CTR
27232723
mov $1, TCTR_LOW

arch/x86/crypto/aesni-intel_avx-x86_64.S

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -154,30 +154,6 @@ SHIFT_MASK: .octa 0x0f0e0d0c0b0a09080706050403020100
154154
ALL_F: .octa 0xffffffffffffffffffffffffffffffff
155155
.octa 0x00000000000000000000000000000000
156156

157-
.section .rodata
158-
.align 16
159-
.type aad_shift_arr, @object
160-
.size aad_shift_arr, 272
161-
aad_shift_arr:
162-
.octa 0xffffffffffffffffffffffffffffffff
163-
.octa 0xffffffffffffffffffffffffffffff0C
164-
.octa 0xffffffffffffffffffffffffffff0D0C
165-
.octa 0xffffffffffffffffffffffffff0E0D0C
166-
.octa 0xffffffffffffffffffffffff0F0E0D0C
167-
.octa 0xffffffffffffffffffffff0C0B0A0908
168-
.octa 0xffffffffffffffffffff0D0C0B0A0908
169-
.octa 0xffffffffffffffffff0E0D0C0B0A0908
170-
.octa 0xffffffffffffffff0F0E0D0C0B0A0908
171-
.octa 0xffffffffffffff0C0B0A090807060504
172-
.octa 0xffffffffffff0D0C0B0A090807060504
173-
.octa 0xffffffffff0E0D0C0B0A090807060504
174-
.octa 0xffffffff0F0E0D0C0B0A090807060504
175-
.octa 0xffffff0C0B0A09080706050403020100
176-
.octa 0xffff0D0C0B0A09080706050403020100
177-
.octa 0xff0E0D0C0B0A09080706050403020100
178-
.octa 0x0F0E0D0C0B0A09080706050403020100
179-
180-
181157
.text
182158

183159

@@ -646,11 +622,13 @@ _get_AAD_rest4\@:
646622
_get_AAD_rest0\@:
647623
/* finalize: shift out the extra bytes we read, and align
648624
left. since pslldq can only shift by an immediate, we use
649-
vpshufb and an array of shuffle masks */
650-
movq %r12, %r11
651-
salq $4, %r11
652-
vmovdqu aad_shift_arr(%r11), \T1
653-
vpshufb \T1, \T7, \T7
625+
vpshufb and a pair of shuffle masks */
626+
leaq ALL_F(%rip), %r11
627+
subq %r12, %r11
628+
vmovdqu 16(%r11), \T1
629+
andq $~3, %r11
630+
vpshufb (%r11), \T7, \T7
631+
vpand \T1, \T7, \T7
654632
_get_AAD_rest_final\@:
655633
vpshufb SHUF_MASK(%rip), \T7, \T7
656634
vpxor \T8, \T7, \T7

0 commit comments

Comments
 (0)