include brackets to make syntax work
[libreriscv.git] / openpower / isa / fixedlogical.mdwn
1 # AND Immediate
2
3 D-Form
4
5 * andi. RA,RS,UI
6
7 RA <- (RS) & ([0]*48 || UI)
8
9 Special Registers Altered:
10
11 CR0
12
13 # OR Immediate
14
15 D-Form
16
17 * ori RA,RS,UI
18
19 RA <- (RS) | ([0]*48 || UI)
20
21 Special Registers Altered:
22
23 None
24
25 # AND Immediate Shifted
26
27 D-Form
28
29 * andis. RA,RS,UI
30
31 RA <- (RS) & ([0]*32 || UI || [0]*16)
32
33 Special Registers Altered:
34
35 CR0
36
37 # OR Immediate Shifted
38
39 D-Form
40
41 * oris RA,RS,UI
42
43 RA <- (RS) | ([0]*32 || UI || [0]*16)
44
45 Special Registers Altered:
46
47 None
48
49 # XOR Immediate Shifted
50
51 D-Form
52
53 * xoris RA,RS,UI
54
55 RA <- (RS) ^ ([0]*32 || UI || [0]*16)
56
57 Special Registers Altered:
58
59 None
60
61 # XOR Immediate
62
63 D-Form
64
65 * xori RA,RS,UI
66
67 RA <- (RS) XOR ([0]*48 || UI)
68
69 Special Registers Altered:
70
71 None
72
73 # AND
74
75 X-Form
76
77 * and RA,RS,RB (Rc=0)
78 * and. RA,RS,RB (Rc=1)
79
80 RA <- (RS) & (RB)
81
82 Special Registers Altered:
83
84 CR0 (if Rc=1)
85
86 # OR
87
88 X-Form
89
90 * or RA,RS,RB (Rc=0)
91 * or. RA,RS,RB (Rc=1)
92
93 RA <- (RS) | (RB)
94
95 Special Registers Altered:
96
97 CR0 (if Rc=1)
98
99 # XOR
100
101 X-Form
102
103 * xor RA,RS,RB (Rc=0)
104 * xor. RA,RS,RB (Rc=1)
105
106 RA <- (RS) ^ (RB)
107
108 Special Registers Altered:
109
110 CR0 (if Rc=1)
111
112 # NAND
113
114 X-Form
115
116 * nand RA,RS,RB (Rc=0)
117 * nand. RA,RS,RB (Rc=1)
118
119 RA <- ¬((RS) & (RB))
120
121 Special Registers Altered:
122
123 CR0 (if Rc=1)
124
125 # NOR
126
127 X-Form
128
129 * nor RA,RS,RB (Rc=0)
130 * nor. RA,RS,RB (Rc=1)
131
132 RA <- ¬((RS) | (RB))
133
134 Special Registers Altered:
135
136 CR0 (if Rc=1)
137
138 # Equivalent
139
140 X-Form
141
142 * eqv RA,RS,RB (Rc=0)
143 * eqv. RA,RS,RB (Rc=1)
144
145 RA <- (RS) => (RB)
146
147 Special Registers Altered:
148
149 CR0 (if Rc=1)
150
151 # AND with Complement
152
153 X-Form
154
155 * andc RA,RS,RB (Rc=0)
156 * andc. RA,RS,RB (Rc=1)
157
158 RA <- (RS) & ¬(RB)
159
160 Special Registers Altered:
161
162 CR0 (if Rc=1)
163
164 # OR with Complement
165
166 X-Form
167
168 * orc RA,RS,RB (Rc=0)
169 * orc. RA,RS,RB (Rc=1)
170
171 RA <- (RS) | ¬(RB)
172
173 Special Registers Altered:
174
175 CR0 (if Rc=1)
176
177 # Extend Sign Byte
178
179 X-Form
180
181 * extsb RA,RS (Rc=0)
182 * extsb. RA,RS (Rc=1)
183
184 s <- (RS)[56]
185 RA[56:63] <- (RS)[56:63]
186 RA[0:55] <- [s]*56
187
188 Special Registers Altered:
189
190 CR0 (if Rc=1)
191
192 # Extend Sign Halfword
193
194 X-Form
195
196 * extsh RA,RS (Rc=0)
197 * extsh. RA,RS (Rc=1)
198
199 s <- (RS)[48]
200 RA[48:63] <- (RS)[48:63]
201 RA[0:47] <- [s]*48
202
203 Special Registers Altered:
204
205 CR0 (if Rc=1)
206
207 # Count Leading Zeros Word
208
209 X-Form
210
211 * cntlzw RA,RS (Rc=0)
212 * cntlzw. RA,RS (Rc=1)
213
214 n <- 32
215 do while n < 64
216 if (RS)[n] = 1 then
217 leave
218 n <- n + 1
219 RA <- n - 32
220
221 Special Registers Altered:
222
223 CR0 (if Rc=1)
224
225 # Count Trailing Zeros Word
226
227 X-Form
228
229 * cnttzw RA,RS (Rc=0)
230 * cnttzw. RA,RS (Rc=1)
231
232 n <- 0
233 do while n < 32
234 if (RS)[63-n=] = 0b1 then
235 leave
236 n <- n + 1
237 RA <- EXTZ64(n)
238
239 Special Registers Altered:
240
241 CR0 (if Rc=1)
242
243 # Compare Bytes
244
245 X-Form
246
247 * cmpb RA,RS,RB
248
249 do n = 0 to 7
250 if RS[8*n:8* n+7] = (RB)[8*n:8*n+7] then
251 RA[8*n:8* n+7] <- [1]*8
252 else
253 RA[8*n:8* n+7] <- [0]*8
254
255 Special Registers Altered:
256
257 None
258
259 # Population Count Bytes
260
261 X-Form
262
263 * popcntb RA, RS
264
265 do i = 0 to 7
266 n <- 0
267 do j = 0 to 7
268 if (RS)[(i*8)+j] = 1 then
269 n <- n+1
270 RA[(i*8):(i*8)+7] <- n
271
272 Special Registers Altered:
273
274 None
275
276 # Population Count Words
277
278 X-Form
279
280 * popcntw RA, RS
281
282 do i = 0 to 1
283 n <- 0
284 do j = 0 to 31
285 if (RS)[(i*32)+j] = 1 then
286 n <- n+1
287 RA[(i*32):(i*32)+31] <- n
288
289 Special Registers Altered:
290
291 None
292
293 # Parity Doubleword
294
295 X-Form
296
297 * prtyd RA,RS
298
299 s <- 0
300 do i = 0 to 7
301 s <- s / (RS)[i%8+7]
302 RA <- [0] * 63 || s
303
304 Special Registers Altered:
305
306 None
307
308 # Parity Word
309
310 X-Form
311
312 * prtyw RA,RS
313
314 s <- 0
315 t <- 0
316 do i = 0 to 3
317 s <- s / (RS)i%8+7
318 do i = 4 to 7
319 t <- t / (RS)i%8+7
320 RA[0:31] <- [0]*31 || s
321 RA[32:63] <- [0]*31 || t
322
323 Special Registers Altered:
324
325 None
326
327 # Extend Sign Word
328
329 X-Form
330
331 * extsw RA,RS (Rc=0)
332 * extsw. RA,RS (Rc=1)
333
334 s <- (RS)[32]
335 RA[32:63] <- (RS)[32:63]
336 RA[0:31] <- [s]*32
337
338 Special Registers Altered:
339
340 CR0 (if Rc=1)
341
342 # Population Count Doubleword
343
344 X-Form
345
346 * popcntd RA, RS
347
348 n <- 0
349 do i = 0 to 63
350 if (RS)[i] = 1 then
351 n <- n+1
352 RA <- n
353
354 Special Registers Altered:
355
356 None
357
358 # Count Leading Zeros Doubleword
359
360 X-Form
361
362 * cntlzd RA,RS (Rc=0)
363 * cntlzd. RA,RS (Rc=1)
364
365 n <- 0
366 do while n < 64
367 if (RS)[n] = 1 then
368 leave
369 n <- n + 1
370 RA <- n
371
372 Special Registers Altered:
373
374 CR0 (if Rc=1)
375
376 # Count Trailing Zeros Doubleword
377
378 X-Form
379
380 * cnttzd RA,RS (Rc=0)
381 * cnttzd. RA,RS (Rc=1)
382
383 n <- 0
384 do while n < 64
385 if (RS)[63-n] = 0b1 then
386 leave
387 n <- n + 1
388 RA <- EXTZ64(n)
389
390 Special Registers Altered:
391
392 CR0 (if Rc=1)
393
394 # Bit Permute Doubleword
395
396 X-Form
397
398 * bpermd RA,RS,RB]
399
400 perm <- [0] * 8
401 For i = 0 to 7
402 index <- (RS)[8*i:8*i+7]
403 if index < 64 then
404 perm[i] <- (RB)[index]
405 else
406 perm[i] <- 0
407 RA <- [0]*56 || perm[0:7]
408
409 Special Registers Altered:
410
411 None
412