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