b3fdea9443b845914c680f7111a60b0fba743890
[openpower-isa.git] / openpower / isa / lrsc.txt
1 EA <- (RA|0) + (RB)
2 undefined_case <- 0
3 store_performed <- 0
4 if RESERVE then
5 if RESERVE_LENGTH = 1 &
6 RESERVE_ADDR = real_addr(EA) then
7 MEM(EA, 1) <- (RS)56:63
8 undefined_case <- 0
9 store_performed <- 1
10 else
11 z <- 4096 # smallest implementation's real page size
12 if RESERVE_ADDR / z = real_addr(EA) / z then
13 undefined_case <- 1
14 else
15 undefined_case <- 0
16 store_performed <- 0
17 else
18 undefined_case <- 0
19 store_performed <- 0
20 if undefined_case then
21 u1 <- undefined(0b1)
22 if u1 then
23 MEM(EA, 1) <- (RS)56:63
24 u2 <- undefined(0b0)
25 CR0 <- 0b00 || u2 || XERSO
26 else
27 CR0 <- 0b00 || store_performed || XER[SO]
28 RESERVE  0
29