libbb/sha256: code shrink in 32-bit x86
function old new delta sha256_process_block64_shaNI 697 676 -21 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
c0ff0d4528
commit
461a994b09
@ -34,16 +34,18 @@
|
||||
|
||||
#define XMMTMP %xmm7
|
||||
|
||||
#define SHUF(a,b,c,d) $(a+(b<<2)+(c<<4)+(d<<6))
|
||||
|
||||
.balign 8 # allow decoders to fetch at least 2 first insns
|
||||
sha256_process_block64_shaNI:
|
||||
movu128 76+0*16(%eax), STATE0
|
||||
movu128 76+1*16(%eax), STATE1
|
||||
|
||||
shuf128_32 $0xB1, STATE0, STATE0 /* CDAB */
|
||||
shuf128_32 $0x1B, STATE1, STATE1 /* EFGH */
|
||||
movu128 76+0*16(%eax), STATE1 /* DCBA (msb-to-lsb: 3,2,1,0) */
|
||||
movu128 76+1*16(%eax), STATE0 /* HGFE */
|
||||
/* shufps takes dwords 0,1 from *2nd* operand, and dwords 2,3 from 1st one */
|
||||
mova128 STATE0, XMMTMP
|
||||
palignr $8, STATE1, STATE0 /* ABEF */
|
||||
pblendw $0xF0, XMMTMP, STATE1 /* CDGH */
|
||||
shufps SHUF(1,0,1,0), STATE1, STATE0 /* ABEF */
|
||||
shufps SHUF(3,2,3,2), STATE1, XMMTMP /* CDGH */
|
||||
mova128 XMMTMP, STATE1
|
||||
|
||||
/* XMMTMP holds flip mask from here... */
|
||||
mova128 PSHUFFLE_BSWAP32_FLIP_MASK, XMMTMP
|
||||
@ -231,18 +233,19 @@ sha256_process_block64_shaNI:
|
||||
sha256rnds2 STATE1, STATE0
|
||||
|
||||
/* Write hash values back in the correct order */
|
||||
shuf128_32 $0x1B, STATE0, STATE0 /* FEBA */
|
||||
shuf128_32 $0xB1, STATE1, STATE1 /* DCHG */
|
||||
/* STATE0: ABEF (msb-to-lsb: 3,2,1,0) */
|
||||
/* STATE1: CDGH */
|
||||
mova128 STATE0, XMMTMP
|
||||
pblendw $0xF0, STATE1, STATE0 /* DCBA */
|
||||
palignr $8, XMMTMP, STATE1 /* HGFE */
|
||||
/* shufps takes dwords 0,1 from *2nd* operand, and dwords 2,3 from 1st one */
|
||||
shufps SHUF(3,2,3,2), STATE1, STATE0 /* DCBA */
|
||||
shufps SHUF(1,0,1,0), STATE1, XMMTMP /* HGFE */
|
||||
/* add current hash values to previous ones */
|
||||
movu128 76+0*16(%eax), XMMTMP
|
||||
paddd XMMTMP, STATE0
|
||||
movu128 76+1*16(%eax), XMMTMP
|
||||
movu128 STATE0, 76+0*16(%eax)
|
||||
movu128 76+1*16(%eax), STATE1
|
||||
paddd XMMTMP, STATE1
|
||||
movu128 STATE1, 76+1*16(%eax)
|
||||
movu128 76+0*16(%eax), XMMTMP
|
||||
paddd XMMTMP, STATE0
|
||||
movu128 STATE0, 76+0*16(%eax)
|
||||
|
||||
ret
|
||||
.size sha256_process_block64_shaNI, .-sha256_process_block64_shaNI
|
||||
|
Loading…
Reference in New Issue
Block a user