• Uros Bizjak's avatar
    crypto: x86/crc32c-intel - Use CRC32 mnemonic · 3a95887e
    Uros Bizjak authored
    Current minimum required version of binutils is 2.23,
    which supports CRC32 instruction mnemonic.
    
    Replace the byte-wise specification of CRC32 with this proper mnemonic.
    The compiler is now able to pass memory operand to the instruction,
    so there is no need for a temporary register anymore.
    
    Some examples of the improvement:
    
     12a:	48 8b 08             	mov    (%rax),%rcx
     12d:	f2 48 0f 38 f1 f1    	crc32q %rcx,%rsi
     133:	48 83 c0 08          	add    $0x8,%rax
     137:	48 39 d0             	cmp    %rdx,%rax
     13a:	75 ee                	jne    12a <crc32c_intel_update+0x1a>
    
    to:
    
     125:	f2 48 0f 38 f1 06    	crc32q (%rsi),%rax
     12b:	48 83 c6 08          	add    $0x8,%rsi
     12f:	48 39 d6             	cmp    %rdx,%rsi
     132:	75 f1                	jne    125 <crc32c_intel_update+0x15>
    
    and:
    
     146:	0f b6 08             	movzbl (%rax),%ecx
     149:	f2 0f 38 f0 f1       	crc32b %cl,%esi
     14e:	48 83 c0 01          	add    $0x1,%rax
     152:	48 39 d0             	cmp    %rdx,%rax
     155:	75 ef                	jne    146 <crc32c_intel_update+0x36>
    
    to:
    
     13b:	f2 0f 38 f0 02       	crc32b (%rdx),%eax
     140:	48 83 c2 01          	add    $0x1,%rdx
     144:	48 39 ca             	cmp    %rcx,%rdx
     147:	75 f2                	jne    13b <crc32c_intel_update+0x2b>
    
    As the compiler has some more freedom w.r.t. register allocation,
    there is also a couple of reg-reg moves removed.
    
    There are no hidden states for CRC32 insn, so there is no need to mark
    assembly as volatile.
    
    v2: Introduce CRC32_INST define.
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    CC: Herbert Xu <herbert@gondor.apana.org.au>
    CC: "David S. Miller" <davem@davemloft.net>
    CC: Thomas Gleixner <tglx@linutronix.de>
    CC: Ingo Molnar <mingo@redhat.com>
    CC: Borislav Petkov <bp@alien8.de>
    CC: "H. Peter Anvin" <hpa@zytor.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    3a95887e
crc32c-intel_glue.c 6.11 KB