libbb/sha256: code shrink in 32-bit x86
function old new delta sha256_process_block64_shaNI 722 713 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -31,7 +31,7 @@ | ||||
| #define MSGTMP1		%xmm4 | ||||
| #define MSGTMP2		%xmm5 | ||||
| #define MSGTMP3		%xmm6 | ||||
| #define MSGTMP4		%xmm7 | ||||
| #define XMMTMP4		%xmm7 | ||||
|  | ||||
| 	.balign	8	# allow decoders to fetch at least 3 first insns | ||||
| sha256_process_block64_shaNI: | ||||
| @@ -45,10 +45,12 @@ sha256_process_block64_shaNI: | ||||
|  | ||||
| 	shuf128_32	$0xB1, STATE0,  STATE0		/* CDAB */ | ||||
| 	shuf128_32	$0x1B, STATE1,  STATE1		/* EFGH */ | ||||
| 	mova128		STATE0, MSGTMP4 | ||||
| 	mova128		STATE0, XMMTMP4 | ||||
| 	palignr		$8, STATE1,  STATE0		/* ABEF */ | ||||
| 	pblendw		$0xF0, MSGTMP4, STATE1		/* CDGH */ | ||||
| 	pblendw		$0xF0, XMMTMP4, STATE1		/* CDGH */ | ||||
|  | ||||
| /* XMMTMP4 holds flip mask from here... */ | ||||
| 	mova128		PSHUFFLE_BSWAP32_FLIP_MASK, XMMTMP4 | ||||
| 	movl		$K256+8*16, SHA256CONSTANTS | ||||
|  | ||||
| 	/* Save hash values for addition after rounds */ | ||||
| @@ -57,7 +59,7 @@ sha256_process_block64_shaNI: | ||||
|  | ||||
| 	/* Rounds 0-3 */ | ||||
| 	movu128		0*16(DATA_PTR), MSG | ||||
| 	pshufb		PSHUFFLE_BSWAP32_FLIP_MASK, MSG | ||||
| 	pshufb		XMMTMP4, MSG | ||||
| 	mova128		MSG, MSGTMP0 | ||||
| 		paddd		0*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| @@ -66,7 +68,7 @@ sha256_process_block64_shaNI: | ||||
|  | ||||
| 	/* Rounds 4-7 */ | ||||
| 	movu128		1*16(DATA_PTR), MSG | ||||
| 	pshufb		PSHUFFLE_BSWAP32_FLIP_MASK, MSG | ||||
| 	pshufb		XMMTMP4, MSG | ||||
| 	mova128		MSG, MSGTMP1 | ||||
| 		paddd		1*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| @@ -76,7 +78,7 @@ sha256_process_block64_shaNI: | ||||
|  | ||||
| 	/* Rounds 8-11 */ | ||||
| 	movu128		2*16(DATA_PTR), MSG | ||||
| 	pshufb		PSHUFFLE_BSWAP32_FLIP_MASK, MSG | ||||
| 	pshufb		XMMTMP4, MSG | ||||
| 	mova128		MSG, MSGTMP2 | ||||
| 		paddd		2*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| @@ -86,13 +88,14 @@ sha256_process_block64_shaNI: | ||||
|  | ||||
| 	/* Rounds 12-15 */ | ||||
| 	movu128		3*16(DATA_PTR), MSG | ||||
| 	pshufb		PSHUFFLE_BSWAP32_FLIP_MASK, MSG | ||||
| 	pshufb		XMMTMP4, MSG | ||||
| /* ...to here */ | ||||
| 	mova128		MSG, MSGTMP3 | ||||
| 		paddd		3*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP3, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP2, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP0 | ||||
| 	mova128		MSGTMP3, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP2, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP0 | ||||
| 	sha256msg2	MSGTMP3, MSGTMP0 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -102,9 +105,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP0, MSG | ||||
| 		paddd		4*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP0, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP3, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP1 | ||||
| 	mova128		MSGTMP0, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP3, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP1 | ||||
| 	sha256msg2	MSGTMP0, MSGTMP1 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -114,9 +117,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP1, MSG | ||||
| 		paddd		5*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP1, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP0, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP2 | ||||
| 	mova128		MSGTMP1, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP0, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP2 | ||||
| 	sha256msg2	MSGTMP1, MSGTMP2 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -126,9 +129,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP2, MSG | ||||
| 		paddd		6*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP2, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP1, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP3 | ||||
| 	mova128		MSGTMP2, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP1, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP3 | ||||
| 	sha256msg2	MSGTMP2, MSGTMP3 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -138,9 +141,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP3, MSG | ||||
| 		paddd		7*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP3, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP2, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP0 | ||||
| 	mova128		MSGTMP3, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP2, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP0 | ||||
| 	sha256msg2	MSGTMP3, MSGTMP0 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -150,9 +153,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP0, MSG | ||||
| 		paddd		8*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP0, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP3, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP1 | ||||
| 	mova128		MSGTMP0, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP3, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP1 | ||||
| 	sha256msg2	MSGTMP0, MSGTMP1 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -162,9 +165,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP1, MSG | ||||
| 		paddd		9*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP1, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP0, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP2 | ||||
| 	mova128		MSGTMP1, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP0, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP2 | ||||
| 	sha256msg2	MSGTMP1, MSGTMP2 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -174,9 +177,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP2, MSG | ||||
| 		paddd		10*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP2, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP1, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP3 | ||||
| 	mova128		MSGTMP2, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP1, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP3 | ||||
| 	sha256msg2	MSGTMP2, MSGTMP3 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -186,9 +189,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP3, MSG | ||||
| 		paddd		11*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP3, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP2, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP0 | ||||
| 	mova128		MSGTMP3, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP2, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP0 | ||||
| 	sha256msg2	MSGTMP3, MSGTMP0 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -198,9 +201,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP0, MSG | ||||
| 		paddd		12*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP0, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP3, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP1 | ||||
| 	mova128		MSGTMP0, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP3, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP1 | ||||
| 	sha256msg2	MSGTMP0, MSGTMP1 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -210,9 +213,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP1, MSG | ||||
| 		paddd		13*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP1, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP0, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP2 | ||||
| 	mova128		MSGTMP1, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP0, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP2 | ||||
| 	sha256msg2	MSGTMP1, MSGTMP2 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -221,9 +224,9 @@ sha256_process_block64_shaNI: | ||||
| 	mova128		MSGTMP2, MSG | ||||
| 		paddd		14*16-8*16(SHA256CONSTANTS), MSG | ||||
| 		sha256rnds2	STATE0, STATE1 | ||||
| 	mova128		MSGTMP2, MSGTMP4 | ||||
| 	palignr		$4, MSGTMP1, MSGTMP4 | ||||
| 	paddd		MSGTMP4, MSGTMP3 | ||||
| 	mova128		MSGTMP2, XMMTMP4 | ||||
| 	palignr		$4, MSGTMP1, XMMTMP4 | ||||
| 	paddd		XMMTMP4, MSGTMP3 | ||||
| 	sha256msg2	MSGTMP2, MSGTMP3 | ||||
| 		shuf128_32	$0x0E, MSG, MSG | ||||
| 		sha256rnds2	STATE1, STATE0 | ||||
| @@ -242,9 +245,9 @@ sha256_process_block64_shaNI: | ||||
| 	/* Write hash values back in the correct order */ | ||||
| 	shuf128_32	$0x1B, STATE0,  STATE0		/* FEBA */ | ||||
| 	shuf128_32	$0xB1, STATE1,  STATE1		/* DCHG */ | ||||
| 	mova128		STATE0, MSGTMP4 | ||||
| 	mova128		STATE0, XMMTMP4 | ||||
| 	pblendw		$0xF0, STATE1,  STATE0		/* DCBA */ | ||||
| 	palignr		$8, MSGTMP4, STATE1		/* HGFE */ | ||||
| 	palignr		$8, XMMTMP4, STATE1		/* HGFE */ | ||||
|  | ||||
| 	movu128		STATE0, 76+0*16(%eax) | ||||
| 	movu128		STATE1, 76+1*16(%eax) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user