libbb/sha256: code shrink in 32-bit x86
No binary (build failed)
—
(log yok)
| @@ -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+1*16(%eax), STATE1 |
| + | paddd XMMTMP, STATE1 |
| + | movu128 STATE1, 76+1*16(%eax) |
| movu128 76+0*16(%eax), XMMTMP | |
| paddd XMMTMP, STATE0 | |
| - | movu128 76+1*16(%eax), XMMTMP |
| movu128 STATE0, 76+0*16(%eax) | |
| - | paddd XMMTMP, STATE1 |
| - | movu128 STATE1, 76+1*16(%eax) |
| ret | |
| .size sha256_process_block64_shaNI, .-sha256_process_block64_shaNI | |