aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorJan Beulich <JBeulich@suse.com>2014-02-27 03:47:02 -0500
committerH. Peter Anvin <hpa@linux.intel.com>2014-03-19 19:51:04 -0400
commit06325190bd577e11429444d54f454b9d13f560c9 (patch)
tree2bf84044b54c0651d589656ac9cf2c3d11618c51 /arch/x86
parentdcb99fd9b08cfe1afe426af4d8d3cbc429190f15 (diff)
x86, hash: Fix build failure with older binutils
Just like for other ISA extension instruction uses we should check whether the assembler actually supports them. The fallback here simply is to encode an instruction with fixed operands (%eax and %ecx). [ hpa: tagging for -stable as a build fix ] Signed-off-by: Jan Beulich <jbeulich@suse.com> Link: http://lkml.kernel.org/r/530F0996020000780011FBE7@nat28.tlf.novell.com Cc: Francesco Fusco <ffusco@redhat.com> Cc: Thomas Graf <tgraf@redhat.com> Cc: David S. Miller <davem@davemloft.net> Acked-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: <stable@vger.kernel.org> # v3.14
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/Makefile1
-rw-r--r--arch/x86/lib/hash.c4
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index eeda43abed6e..f8842c444560 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -152,6 +152,7 @@ cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTI
152 152
153# does binutils support specific instructions? 153# does binutils support specific instructions?
154asinstr := $(call as-instr,fxsaveq (%rax),-DCONFIG_AS_FXSAVEQ=1) 154asinstr := $(call as-instr,fxsaveq (%rax),-DCONFIG_AS_FXSAVEQ=1)
155asinstr += $(call as-instr,crc32l %eax$(comma)%eax,-DCONFIG_AS_CRC32=1)
155avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1) 156avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
156avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) 157avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
157 158
diff --git a/arch/x86/lib/hash.c b/arch/x86/lib/hash.c
index 3056702e81fb..060cc4415bd9 100644
--- a/arch/x86/lib/hash.c
+++ b/arch/x86/lib/hash.c
@@ -39,7 +39,11 @@
39 39
40static inline u32 crc32_u32(u32 crc, u32 val) 40static inline u32 crc32_u32(u32 crc, u32 val)
41{ 41{
42#ifdef CONFIG_AS_CRC32
42 asm ("crc32l %1,%0\n" : "+r" (crc) : "rm" (val)); 43 asm ("crc32l %1,%0\n" : "+r" (crc) : "rm" (val));
44#else
45 asm (".byte 0xf2, 0x0f, 0x38, 0xf1, 0xc1" : "+a" (crc) : "c" (val));
46#endif
43 return crc; 47 return crc;
44} 48}
45 49