Easiest way to extend CAS (casMutVar#) to boxed/unboxed Vector elements?

Simon Marlow marlowsd at gmail.com
Thu Jan 12 09:54:57 CET 2012

On 10/01/2012 17:19, Ryan Newton wrote:
> Hello there,
> I was wondering what the recommendations would be for getting CAS on
> [mutable] vector elements?
> I thought that as a first step I might create an a library that does the
> trick only for unboxed vectors, by using bits-atomic (i.e. FFI + GCC
> intrinsics).
> Roman Leshchinskiy recommended against depending on GCC. He thought,
> therefore, that not only boxed arrays but unboxed ones would need an
> extra PrimOp to be handled properly:
>>  You can't rely on gcc extensions because code is usually compiled with the
>>  native code generator nowadays and doesn't go through gcc. The dependency
>>  on gcc will (hopefully) be dropped eventually anyway. So you'd probably
>>  also want primops for unboxed arrrays and Addr#.
> Any advice?

For boxed arrays you need a PrimOp of course (like catMutVar#).  For 
unboxed arrays you could get away with FFI, but a PrimOp would be better 
because it could be inline.  But to get it inline would mean modifying 
the native and LLVM backends to support CAS operations.

If I were you I would use FFI for now.  The cost of the out-of-line call 
is much less than the cost of the CAS anyway.  A gcc dependency is not a 
big deal, it's available on all Unix-like platforms and I don't see us 
removing it from the Windows installs any time soon.


More information about the Glasgow-haskell-users mailing list