I know that MIPS does that, and an out-of-tree implementation of hexagon implements 1-byte cmpxchg in terms of the 4-byte version. The emulation code isn't particularly small, and it seems reasonable to make it a libcall. The emulation code seems sketchy from a correctness perspective, as you end up generating unsolicited loads and stores on adjacent bytes. Take a look at the thread on cfe-dev and llvm-dev named "the as-if rule / perf vs. security" for some of the ramifications and concerns surrounding unsolicited loads and stores.

On 3/17/2016 10:05 AM, James Y Knight wrote:

> A 4 byte cmpxchg could be lock free, while a 1 byte cmpxchg may not be lock free.

That's not possible: if you have a 4-byte cmpxchg instruction, you can use it to implement a 1-byte cmpxchg, too. Many targets do this already. (It would be better if that was available generically so that code didn't need to be written separately fit each target, but that's not the case at the moment.)


--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to