On 24 November 2010 21:18, Ken Werner ken.werner@linaro.org wrote:
On Wednesday, November 24, 2010 8:29:35 pm Peter Maydell wrote:
strex r0, r2, [r3] # store r2 (new) into memory pointed to by r3 (mem)
(Apologies for the linewrap damage, by the way -- blame google mail.)
Initially I thought r2 could be used for the result but strex doesn't allow the return register to be the same as the store register.
You can't put the result r2 anyway because you're going to need r2's current value again if the strex fails and you have to loop back to retry the load...
(I think the push/pop is unavoidable for the sync_fetch_and_foo where foo is a non-reversible operation like or/and.)
-- PMM