
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)
*)