Use MO_Cmpxchg in Primops.cmm instead of ccall cas(..)
authoralexbiehl <alex.biehl@gmail.com>
Mon, 1 Aug 2016 08:46:29 +0000 (18:46 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Mon, 1 Aug 2016 08:46:30 +0000 (18:46 +1000)
commit750553a68c126bdbee3d325a606a9537a8d53141
tree660d147ee59f58742da86e3675b706ae9ed0b9dd
parent89ae1e858f6eed42cebd9af01b30e239d4543faf
Use MO_Cmpxchg in Primops.cmm instead of ccall cas(..)

Adjust `CmmParse.y` to parse the `cmpxchg{8, 16, 32, 64}` instructions
and use the 32 respectively the 64 bit variant in `Primops.cmm`. This
effectively eliminates the compare-and-swap ccall to the rts.

Based off the mailing list question from @osa1
(https://mail.haskell.org/pipermail/ghc-devs/2016-July/012506.html).

Reviewers: simonmar, austin, erikd, bgamari, trommler

Reviewed By: erikd, bgamari, trommler

Subscribers: carter, trommler, osa1, thomie

Differential Revision: https://phabricator.haskell.org/D2431
compiler/cmm/CmmParse.y
includes/Cmm.h
rts/PrimOps.cmm