x86, bitops: Correct the assembly constraints to testing bitops
authorH. Peter Anvin <hpa@linux.intel.com>
Wed, 4 Dec 2013 22:31:28 +0000 (14:31 -0800)
committerH. Peter Anvin <hpa@linux.intel.com>
Wed, 4 Dec 2013 22:31:28 +0000 (14:31 -0800)
commite0f6dec35f9286e78879fe1ac92803fd69fc4fdc
treee24a09b061bbb0c7d6f6da371e277324ea034e38
parent5551a34e5aeab868f8d37f70d8754868921b4ee5
x86, bitops: Correct the assembly constraints to testing bitops

In checkin:

0c44c2d0f459 x86: Use asm goto to implement better modify_and_test() functions

the various functions which do modify and test were unified and
optimized using "asm goto".  However, this change missed the detail
that the bitops require an "Ir" constraint rather than an "er"
constraint ("I" = integer constant from 0-31, "e" = signed 32-bit
integer constant).  This would cause code to miscompile if these
functions were used on constant bit positions 32-255 and the build to
fail if used on constant bit positions above 255.

Add the constraints as a parameter to the GEN_BINARY_RMWcc() macro to
avoid this problem.

Reported-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/529E8719.4070202@zytor.com
arch/x86/include/asm/atomic.h
arch/x86/include/asm/atomic64_64.h
arch/x86/include/asm/bitops.h
arch/x86/include/asm/local.h
arch/x86/include/asm/rmwcc.h