1 <!-- X Instructions here described in PowerISA Version 3.0 B Book 1 -->
3 <!-- Section 4.6 Fixed-point Synchronisation instructions. Pages 865 - 877 -->
5 # Instruction Synchronise
16 Special Registers Altered:
20 # Load Byte And Reserve Indexed
31 RESERVE_ADDR <- real_addr(EA)
32 RT <- [0]*56 || MEM(EA, 1)
34 Special Registers Altered:
38 # Load Halfword And Reserve Indexed
49 RESERVE_ADDR <- real_addr(EA)
50 RT <- [0]*48 || MEM(EA, 2)
52 Special Registers Altered:
56 # Load Word And Reserve Indexed
67 RESERVE_ADDR <- real_addr(EA)
68 RT <- [0]*32 || MEM(EA, 4)
70 Special Registers Altered:
74 # Load Doubleword And Reserve Indexed
85 RESERVE_ADDR <- real_addr(EA)
88 Special Registers Altered:
92 # Load Quadword And Reserve Indexed
103 RESERVE_ADDR <- real_addr(EA)
106 Special Registers Altered:
110 # Store Byte Conditional Indexed
120 store_performed <- 0b0
122 if ((RESERVE_LENGTH = 1) &
123 (RESERVE_ADDR = real_addr(EA))) then
124 MEM(EA, 1) <- (RS)[56:63]
126 store_performed <- 0b1
128 # set z to smallest real page size supported by implementation
130 if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
134 store_performed <- 0b0
137 store_performed <- 0b0
138 if undefined_case then
141 MEM(EA, 1) <- (RS)[56:63]
143 CR0 <- 0b00 || u2 || XER[SO]
145 CR0 <- 0b00 || store_performed || XER[SO]
148 Special Registers Altered:
152 # Store Halfword Conditional Indexed
162 store_performed <- 0b0
164 if ((RESERVE_LENGTH = 2) &
165 (RESERVE_ADDR = real_addr(EA))) then
166 MEM(EA, 2) <- (RS)[48:63]
168 store_performed <- 0b1
170 # set z to smallest real page size supported by implementation
172 if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
176 store_performed <- 0b0
179 store_performed <- 0b0
180 if undefined_case then
183 MEM(EA, 2) <- (RS)[48:63]
185 CR0 <- 0b00 || u2 || XER[SO]
187 CR0 <- 0b00 || store_performed || XER[SO]
190 Special Registers Altered:
194 # Store word Conditional Indexed
204 store_performed <- 0b0
206 if ((RESERVE_LENGTH = 4) &
207 (RESERVE_ADDR = real_addr(EA))) then
208 MEM(EA, 4) <- (RS)[32:63]
210 store_performed <- 0b1
212 # set z to smallest real page size supported by implementation
214 if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
218 store_performed <- 0b0
221 store_performed <- 0b0
222 if undefined_case then
225 MEM(EA, 4) <- (RS)[32:63]
227 CR0 <- 0b00 || u2 || XER[SO]
229 CR0 <- 0b00 || store_performed || XER[SO]
232 Special Registers Altered:
236 # Store Doubleword Conditional Indexed
246 store_performed <- 0b0
248 if ((RESERVE_LENGTH = 8) &
249 (RESERVE_ADDR = real_addr(EA))) then
252 store_performed <- 0b1
254 # set z to smallest real page size supported by implementation
256 if (RESERVE_ADDR / z) = (real_addr(EA) / z) then
260 store_performed <- 0b0
263 store_performed <- 0b0
264 if undefined_case then
269 CR0 <- 0b00 || u2 || XER[SO]
271 CR0 <- 0b00 || store_performed || XER[SO]
274 Special Registers Altered: