Skip to content

Commit e4ab768

Browse files
ardbiesheuvelherbertx
authored andcommitted
crypto: x86/sha256 - Use RIP-relative addressing
Prefer RIP-relative addressing where possible, which removes the need for boot time relocation fixups. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent c41672b commit e4ab768

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

arch/x86/crypto/sha256-avx2-asm.S

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -589,19 +589,23 @@ last_block_enter:
589589

590590
.align 16
591591
loop1:
592-
vpaddd K256+0*32(SRND), X0, XFER
592+
leaq K256+0*32(%rip), INP ## reuse INP as scratch reg
593+
vpaddd (INP, SRND), X0, XFER
593594
vmovdqa XFER, 0*32+_XFER(%rsp, SRND)
594595
FOUR_ROUNDS_AND_SCHED _XFER + 0*32
595596

596-
vpaddd K256+1*32(SRND), X0, XFER
597+
leaq K256+1*32(%rip), INP
598+
vpaddd (INP, SRND), X0, XFER
597599
vmovdqa XFER, 1*32+_XFER(%rsp, SRND)
598600
FOUR_ROUNDS_AND_SCHED _XFER + 1*32
599601

600-
vpaddd K256+2*32(SRND), X0, XFER
602+
leaq K256+2*32(%rip), INP
603+
vpaddd (INP, SRND), X0, XFER
601604
vmovdqa XFER, 2*32+_XFER(%rsp, SRND)
602605
FOUR_ROUNDS_AND_SCHED _XFER + 2*32
603606

604-
vpaddd K256+3*32(SRND), X0, XFER
607+
leaq K256+3*32(%rip), INP
608+
vpaddd (INP, SRND), X0, XFER
605609
vmovdqa XFER, 3*32+_XFER(%rsp, SRND)
606610
FOUR_ROUNDS_AND_SCHED _XFER + 3*32
607611

@@ -611,11 +615,13 @@ loop1:
611615

612616
loop2:
613617
## Do last 16 rounds with no scheduling
614-
vpaddd K256+0*32(SRND), X0, XFER
618+
leaq K256+0*32(%rip), INP
619+
vpaddd (INP, SRND), X0, XFER
615620
vmovdqa XFER, 0*32+_XFER(%rsp, SRND)
616621
DO_4ROUNDS _XFER + 0*32
617622

618-
vpaddd K256+1*32(SRND), X1, XFER
623+
leaq K256+1*32(%rip), INP
624+
vpaddd (INP, SRND), X1, XFER
619625
vmovdqa XFER, 1*32+_XFER(%rsp, SRND)
620626
DO_4ROUNDS _XFER + 1*32
621627
add $2*32, SRND

0 commit comments

Comments
 (0)