* isync
+Pseudo-code:
+
+ # TODO
+ undefined(0)
+
+Special Registers Altered:
+
+ None
+
+# Synchronise
+
+XL-Form
+
+* sync L2
+
Pseudo-code:
# TODO
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ RESERVE <- 1
+ RESERVE_LENGTH <- 1
+ RESERVE_ADDR <- real_addr(EA)
+ RT <- [0]*56 || MEM(EA, 1)
Special Registers Altered:
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ RESERVE <- 1
+ RESERVE_LENGTH <- 2
+ RESERVE_ADDR <- real_addr(EA)
+ RT <- [0]*48 || MEM(EA, 2)
Special Registers Altered:
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ RESERVE <- 1
+ RESERVE_LENGTH <- 8
+ RESERVE_ADDR <- real_addr(EA)
+ RT <- MEM(EA, 8)
+
+Special Registers Altered:
+
+ None
+
+# Load Quadword And Reserve Indexed
+
+X-Form
+
+* lqarx RTp,RA,RB,EH
+
+Pseudo-code:
+
+ EA <- (RA|0) + (RB)
+ RESERVE <- 1
+ RESERVE_LENGTH <- 16
+ RESERVE_ADDR <- real_addr(EA)
+ RTp <- MEM(EA, 16)
Special Registers Altered:
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ undefined_case <- 0
+ store_performed <- 0b0
+ if RESERVE then
+ if ((RESERVE_LENGTH = 1) &
+ (RESERVE_ADDR = real_addr(EA))) then
+ MEM(EA, 1) <- (RS)[56:63]
+ undefined_case <- 0
+ store_performed <- 0b1
+ else
+ # set z to smallest real page size supported by implementation
+ z <- REAL_PAGE_SIZE
+ if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
+ undefined_case <- 1
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ if undefined_case then
+ u1 <- undefined(0b1)
+ if u1 then
+ MEM(EA, 1) <- (RS)[56:63]
+ u2 <- undefined(0b1)
+ CR0 <- 0b00 || u2 || XER[SO]
+ else
+ CR0 <- 0b00 || store_performed || XER[SO]
+ RESERVE <- 0
Special Registers Altered:
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ undefined_case <- 0
+ store_performed <- 0b0
+ if RESERVE then
+ if ((RESERVE_LENGTH = 2) &
+ (RESERVE_ADDR = real_addr(EA))) then
+ MEM(EA, 2) <- (RS)[48:63]
+ undefined_case <- 0
+ store_performed <- 0b1
+ else
+ # set z to smallest real page size supported by implementation
+ z <- REAL_PAGE_SIZE
+ if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
+ undefined_case <- 1
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ if undefined_case then
+ u1 <- undefined(0b1)
+ if u1 then
+ MEM(EA, 2) <- (RS)[48:63]
+ u2 <- undefined(0b1)
+ CR0 <- 0b00 || u2 || XER[SO]
+ else
+ CR0 <- 0b00 || store_performed || XER[SO]
+ RESERVE <- 0
Special Registers Altered:
EA <- (RA|0) + (RB)
undefined_case <- 0
- store_performed <- 0
+ store_performed <- 0b0
if RESERVE then
- if (RESERVE_LENGTH = 4 &
- RESERVE_ADDR = real_addr(EA)) then
- MEM(EA, 1) <- (RS)[32:63]
- undefined_case <- 0
- store_performed <- 1
- else
- z <- REAL_PAGE_SIZE # smallest implementation's real page size
- if RESERVE_ADDR / z = real_addr(EA) / z then
- undefined_case <- 1
- else
- undefined_case <- 0
- store_performed <- 0
+ if ((RESERVE_LENGTH = 4) &
+ (RESERVE_ADDR = real_addr(EA))) then
+ MEM(EA, 4) <- (RS)[32:63]
+ undefined_case <- 0
+ store_performed <- 0b1
+ else
+ # set z to smallest real page size supported by implementation
+ z <- REAL_PAGE_SIZE
+ if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
+ undefined_case <- 1
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
else
- undefined_case <- 0
- store_performed <- 0
+ undefined_case <- 0
+ store_performed <- 0b0
if undefined_case then
- u1 <- undefined(0b1)
- if u1 then
- MEM(EA, 1) <- (RS)[32:63]
- u2 <- undefined(0b0)
- CR0 <- 0b00 || u2 || XER[SO]
+ u1 <- undefined(0b1)
+ if u1 then
+ MEM(EA, 4) <- (RS)[32:63]
+ u2 <- undefined(0b1)
+ CR0 <- 0b00 || u2 || XER[SO]
else
- CR0 <- 0b00 || store_performed || XER[SO]
+ CR0 <- 0b00 || store_performed || XER[SO]
RESERVE <- 0
-
Special Registers Altered:
CR0
Pseudo-code:
- # TODO
- undefined(0)
+ EA <- (RA|0) + (RB)
+ undefined_case <- 0
+ store_performed <- 0b0
+ if RESERVE then
+ if ((RESERVE_LENGTH = 8) &
+ (RESERVE_ADDR = real_addr(EA))) then
+ MEM(EA, 8) <- (RS)
+ undefined_case <- 0
+ store_performed <- 0b1
+ else
+ # set z to smallest real page size supported by implementation
+ z <- REAL_PAGE_SIZE
+ if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
+ undefined_case <- 1
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ if undefined_case then
+ u1 <- undefined(0b1)
+ if u1 then
+ MEM(EA, 8) <- (RS)
+ u2 <- undefined(0b1)
+ CR0 <- 0b00 || u2 || XER[SO]
+ else
+ CR0 <- 0b00 || store_performed || XER[SO]
+ RESERVE <- 0
Special Registers Altered:
CR0
+# Store Quadword Conditional Indexed
+
+X-Form
+
+* stqcx. RSp,RA,RB
+
+Pseudo-code:
+
+ EA <- (RA|0) + (RB)
+ undefined_case <- 0
+ store_performed <- 0b0
+ if RESERVE then
+ if ((RESERVE_LENGTH = 16) &
+ (RESERVE_ADDR = real_addr(EA))) then
+ MEM(EA, 16) <- (RSp)
+ undefined_case <- 0
+ store_performed <- 0b1
+ else
+ # set z to smallest real page size supported by implementation
+ z <- REAL_PAGE_SIZE
+ if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
+ undefined_case <- 1
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ else
+ undefined_case <- 0
+ store_performed <- 0b0
+ if undefined_case then
+ u1 <- undefined(0b1)
+ if u1 then
+ MEM(EA, 16) <- (RSp)
+ u2 <- undefined(0b1)
+ CR0 <- 0b00 || u2 || XER[SO]
+ else
+ CR0 <- 0b00 || store_performed || XER[SO]
+ RESERVE <- 0
+
+Special Registers Altered:
+
+ CR0