
#9346: AtomicPrimOps tests failing on 32-bit x86 -------------------------------------+------------------------------------- Reporter: niklasl | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.9 Resolution: | Keywords: Differential Revisions: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: Difficulty: Unknown | Blocking: Blocked By: | Related Tickets: | -------------------------------------+------------------------------------- Comment (by pgj): I may be wrong here, but looks like the native code generator generates bad code. The {{{lock cmpxchg}}} instruction appears to be interleaved with the preceding {{{mov}}} instruction, hence {{{lock mov}}} is got. For {{{AtomicPrimops}}}, the following snippet is present in the generated assembly code: {{{ .Ln3sa: movl %ecx,64(%esp) movl %eax,%ecx movl %edx,76(%esp) movl %eax,%edx movl %ecx,88(%esp) movl 76(%esp),%ecx xorl %ecx,%edx lock movl 64(%esp),%ecx cmpxchgl %edx,(%ecx) jne .Ln3sd movl 88(%esp),%eax movl $ghczmprim_GHCziTuple_Z0T_closure+1,%esi jmp *(%ebp) .Ln3sd: movl 76(%esp),%edx jmp .Ln3sa }}} According to the sources, this does not seem to be intended. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9346#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler