
#8219: x86 definition of cas() is wrong -------------------------------------+------------------------------------ Reporter: parcs | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Runtime System | Version: 7.7 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by parcs): Test case: === cas.c {{{ #!c static int cas (int *p, int o, int n) { asm ("lock cmpxchg %2,%1" :"=a"(o), "=m"(*(volatile int *)p) :"0"(o), "r"(n)); return o; } int v; int main (int argc, char **argv) { /* The following assignment gets removed unless you change "=m" to "+m". */ v = 42; cas (&v, 0, 1); return 0; } return 0; }}} === Command Line {{{ $ gcc -O2 -S cas.c $ grep 42 cas.s zsh: exit 1 $ perl -i -pe 's/=m/+m/' cas.c $ gcc -O2 -S cas.c $ grep 42 cas.s movl $42, v(%rip) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8219#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler