PPC PPO+RMW (* C++ example in sec. 4.2, hand-coded to Power *) Com=Rf Fr { %x0=x; %y0=y; %x1=x; %y1=y; } P0 | P1 ; li r1,1 | lwarx r1,r0,%y1 ; stw r1,0(%x0) | cmpwi r1,1 ; lwsync | bne Lexit ; li r2,1 | li r2,2 ; stw r2,0(%y0) | stwcx. r2,r0,%y1 ; | Lexit: ; | lwz r3,0(%y1) ; | xor r9,r3,r3 ; | lwzx r4,r9,%x1 ; exists (1:r1=1 /\ 1:r3=2 /\ 1:r4=0) (* C++ example, more or less: Fre LwSyncdWW Rfe Rmw ; PosWR ; DpAddrdR T0 T1 Wrlx x 1 Wrel y 1 ------rf----> RMWrlx y 1,2 Rcon y 2 <addr> R x 0 T0 T1 W x 1 lwsync W y 1 ------rf---> lwarx y,r1 (1) cmp r1,1 bc _exit stwcx y,2 _exit: R y (2) <addr> R x (0) *)