[LinuxPPS] 18 Aug 05:47 - x86: correct register constraints for 64-bit atomic operations

linuxpps: Mathieu Desnoyers <> webmaster at enneenne.com
Wed Aug 20 00:00:06 CEST 2008


x86: correct register constraints for 64-bit atomic operations  
  
x86_64 add/sub atomic ops does not seems to accept integer values bigger  
than 32 bits as immediates. Intel's add/sub documentation specifies they  
have to be passed as registers.  
  
The only operations in the x86-64 architecture which accept arbitrary  
64-bit immediates is "movq" to any register; similarly, the only  
operation which accept arbitrary 64-bit displacement is "movabs" to or  
from al/ax/eax/rax.  
  
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Machine-Constraints.html  
  
states :  
  
e  
32-bit signed integer constant, or a symbolic reference known to fit  
that range (for immediate operands in sign-extending x86-64  
instructions).  
Z  
32-bit unsigned integer constant, or a symbolic reference known to  
fit that range (for immediate operands in zero-extending x86-64  
instructions).  
  
Since add/sub does sign extension, using the "e" constraint seems appropriate.  
  
It applies to 2.6.27-rc, 2.6.26, 2.6.25...  
  
Signed-off-by: Mathieu Desnoyers   
Signed-off-by: H. Peter Anvin   
Signed-off-by: Ingo Molnar   
  
include/asm-x86/atomic_64.h

URL: http://gitweb.enneenne.com/?p=linuxpps;a=commit;h=3c3b5c3b0bf798316a410e27e3d7e6f015663602



More information about the LinuxPPS mailing list