This commit was generated by cvs2svn to track changes on a CVS vendor
[binutils-gdb.git] / sim / mips / vr.igen
1 // -*- C -*-
2 //
3 // NEC specific instructions
4 //
5
6 // Integer Instructions
7 // --------------------
8 //
9 // MulAcc is the Multiply Accumulator.
10 // This register is mapped on the the HI and LO registers.
11 // Upper 32 bits of MulAcc is mapped on to lower 32 bits of HI register.
12 // Lower 32 bits of MulAcc is mapped on to lower 32 bits of LO register.
13
14
15 :function:::unsigned64:MulAcc:
16 *vr4100:
17 // start-sanitize-vr4xxx
18 *vr4121:
19 // end-sanitize-vr4xxx
20 // start-sanitize-vr4320
21 *vr4320:
22 // end-sanitize-vr4320
23 // start-sanitize-cygnus
24 *vr5400:
25 // end-sanitize-cygnus
26 {
27 unsigned64 result = U8_4 (HI, LO);
28 return result;
29 }
30
31 :function:::void:SET_MulAcc:unsigned64 value
32 *vr4100:
33 // start-sanitize-vr4xxx
34 *vr4121:
35 // end-sanitize-vr4xxx
36 // start-sanitize-vr4320
37 *vr4320:
38 // end-sanitize-vr4320
39 // start-sanitize-cygnus
40 *vr5400:
41 // end-sanitize-cygnus
42 {
43 /* 64 bit specific */
44 *AL4_8 (&HI) = VH4_8 (value);
45 *AL4_8 (&LO) = VL4_8 (value);
46 }
47
48 :function:::signed64:SignedMultiply:signed32 l, signed32 r
49 *vr4100:
50 // start-sanitize-vr4xxx
51 *vr4121:
52 // end-sanitize-vr4xxx
53 // start-sanitize-vr4320
54 *vr4320:
55 // end-sanitize-vr4320
56 // start-sanitize-cygnus
57 *vr5400:
58 // end-sanitize-cygnus
59 {
60 signed64 result = (signed64) l * (signed64) r;
61 return result;
62 }
63
64 :function:::unsigned64:UnsignedMultiply:unsigned32 l, unsigned32 r
65 *vr4100:
66 // start-sanitize-vr4xxx
67 *vr4121:
68 // end-sanitize-vr4xxx
69 // start-sanitize-vr4320
70 *vr4320:
71 // end-sanitize-vr4320
72 // start-sanitize-cygnus
73 *vr5400:
74 // end-sanitize-cygnus
75 {
76 unsigned64 result = (unsigned64) l * (unsigned64) r;
77 return result;
78 }
79
80 // start-sanitize-vr4xxx
81 :function:::signed64:SaturatedAdd:signed32 l, signed32 r
82 *vr4121:
83 {
84 signed64 result = (signed64) l + (signed64) r;
85 if (result < 0)
86 result = 0xFFFFFFFF8000000LL;
87 else if (result > 0x000000007FFFFFFFLL)
88 result = 0x000000007FFFFFFFLL;
89 return result;
90 }
91
92 :function:::unsigned64:SaturatedUnsignedAdd:unsigned32 l, unsigned32 r
93 *vr4121:
94 {
95 unsigned64 result = (unsigned64) l + (unsigned64) r;
96 if (result > 0x000000007FFFFFFFLL)
97 result = 0xFFFFFFFFFFFFFFFFLL;
98 return result;
99 }
100
101
102 // end-sanitize-vr4xxx
103 :function:::unsigned64:Low32Bits:unsigned64 value
104 *vr4100:
105 // start-sanitize-vr4xxx
106 *vr4121:
107 // end-sanitize-vr4xxx
108 // start-sanitize-vr4320
109 *vr4320:
110 // end-sanitize-vr4320
111 // start-sanitize-cygnus
112 *vr5400:
113 // end-sanitize-cygnus
114 {
115 unsigned64 result = (signed64) (signed32) VL4_8 (value);
116 return result;
117 }
118
119 :function:::unsigned64:High32Bits:unsigned64 value
120 *vr4100:
121 // start-sanitize-vr4xxx
122 *vr4121:
123 // end-sanitize-vr4xxx
124 // start-sanitize-vr4320
125 *vr4320:
126 // end-sanitize-vr4320
127 // start-sanitize-cygnus
128 *vr5400:
129 // end-sanitize-cygnus
130 {
131 unsigned64 result = (signed64) (signed32) VH4_8 (value);
132 return result;
133 }
134
135
136
137 // Multiply, Accumulate
138 000000,5.RS,5.RT,00000,00000,101000::64::MAC
139 "mac r<RS>, r<RT>"
140 *vr4100:
141 // start-sanitize-vr4320
142 *vr4320:
143 // end-sanitize-vr4320
144 {
145 SET_MulAcc (SD_, MulAcc (SD_) + SignedMultiply (SD_, GPR[RS], GPR[RT]));
146 }
147
148
149 // D-Multiply, Accumulate
150 000000,5.RS,5.RT,00000,00000,101001::64::DMAC
151 "dmac r<RS>, r<RT>"
152 *vr4100:
153 // start-sanitize-vr4320
154 *vr4320:
155 // end-sanitize-vr4320
156 {
157 LO = LO + SignedMultiply (SD_, GPR[RS], GPR[RT]);
158 }
159
160
161 // start-sanitize-vr4320
162 // Count Leading Zeros
163 000000,5.RS,00000,5.RD,00000,110101::64::CLZ
164 "clz r<RD>, r<RS>"
165 // end-sanitize-vr4320
166 // start-sanitize-vr4320
167 *vr4320:
168 // end-sanitize-vr4320
169 // start-sanitize-vr4320
170 {
171 unsigned32 t = Low32Bits (SD_, GPR[RS]);
172 signed64 c = 0;
173
174 while (! (t & ( 1 << 31))
175 && c < 32)
176 {
177 c++;
178 t <<= 1;
179 }
180
181 GPR[RD] = c;
182 }
183
184
185 // end-sanitize-vr4320
186 // start-sanitize-vr4320
187 // D-Count Leading Zeros
188 000000,5.RS,00000,5.RD,00000,111101::64::DCLZ
189 "dclz r<RD>, r<RS>"
190 // end-sanitize-vr4320
191 // start-sanitize-vr4320
192 *vr4320:
193 // end-sanitize-vr4320
194 // start-sanitize-vr4320
195 {
196 unsigned64 t = GPR[RS];
197 signed64 c = 0;
198
199 while (! (t & ( (unsigned64)1 << 63))
200 && c < 64)
201 {
202 c++;
203 t <<= 1;
204 }
205
206 printf("lo %d\n", (int) c);
207 GPR[RD] = c;
208 }
209
210
211
212
213
214
215
216 // end-sanitize-vr4320
217 // start-sanitize-cygnus
218 // Multiply and Move LO.
219 000000,5.RS,5.RT,5.RD,00100,101000::64::MUL
220 "mul r<RD>, r<RS>, r<RT>"
221 // end-sanitize-cygnus
222 // start-sanitize-vr4320
223 *vr4320:
224 // end-sanitize-vr4320
225 // start-sanitize-cygnus
226 *vr5400:
227 // end-sanitize-cygnus
228 // start-sanitize-cygnus
229 {
230 SET_MulAcc (SD_, 0 + SignedMultiply (SD_, GPR[RS], GPR[RT]));
231 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
232 }
233
234
235 // end-sanitize-cygnus
236 // start-sanitize-cygnus
237 // Unsigned Multiply and Move LO.
238 000000,5.RS,5.RT,5.RD,00101,101000::64::MULU
239 "mulu r<RD>, r<RS>, r<RT>"
240 // end-sanitize-cygnus
241 // start-sanitize-vr4320
242 *vr4320:
243 // end-sanitize-vr4320
244 // start-sanitize-cygnus
245 *vr5400:
246 // end-sanitize-cygnus
247 // start-sanitize-cygnus
248 {
249 SET_MulAcc (SD_, 0 + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
250 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
251 }
252
253
254 // end-sanitize-cygnus
255 // start-sanitize-cygnus
256 // Multiply and Move HI.
257 000000,5.RS,5.RT,5.RD,01100,101000::64::MULHI
258 "mulhi r<RD>, r<RS>, r<RT>"
259 // end-sanitize-cygnus
260 // start-sanitize-vr4320
261 *vr4320:
262 // end-sanitize-vr4320
263 // start-sanitize-cygnus
264 *vr5400:
265 // end-sanitize-cygnus
266 // start-sanitize-cygnus
267 {
268 SET_MulAcc (SD_, 0 + SignedMultiply (SD_, GPR[RS], GPR[RT]));
269 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
270 }
271
272
273 // end-sanitize-cygnus
274 // start-sanitize-cygnus
275 // Unsigned Multiply and Move HI.
276 000000,5.RS,5.RT,5.RD,01101,101000::64::MULHIU
277 "mulhiu r<RD>, r<RS>, r<RT>"
278 // end-sanitize-cygnus
279 // start-sanitize-vr4320
280 *vr4320:
281 // end-sanitize-vr4320
282 // start-sanitize-cygnus
283 *vr5400:
284 // end-sanitize-cygnus
285 // start-sanitize-cygnus
286 {
287 SET_MulAcc (SD_, 0 + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
288 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
289 }
290
291
292 // end-sanitize-cygnus
293 // start-sanitize-cygnus
294 // Multiply, Negate and Move LO.
295 000000,5.RS,5.RT,5.RD,00011,011000::64::MULS
296 "muls r<RD>, r<RS>, r<RT>"
297 // end-sanitize-cygnus
298 // start-sanitize-cygnus
299 *vr5400:
300 // end-sanitize-cygnus
301 // start-sanitize-cygnus
302 {
303 SET_MulAcc (SD_, 0 - SignedMultiply (SD_, GPR[RS], GPR[RT]));
304 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
305 }
306
307
308 // end-sanitize-cygnus
309 // start-sanitize-cygnus
310 // Unsigned Multiply, Negate and Move LO.
311 000000,5.RS,5.RT,5.RD,00011,011001::64::MULSU
312 "mulsu r<RD>, r<RS>, r<RT>"
313 // end-sanitize-cygnus
314 // start-sanitize-cygnus
315 *vr5400:
316 // end-sanitize-cygnus
317 // start-sanitize-cygnus
318 {
319 SET_MulAcc (SD_, 0 - UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
320 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
321 }
322
323
324 // end-sanitize-cygnus
325 // start-sanitize-cygnus
326 // Multiply, Negate and Move HI.
327 000000,5.RS,5.RT,5.RD,01011,011000::64::MULSHI
328 "mulshi r<RD>, r<RS>, r<RT>"
329 // end-sanitize-cygnus
330 // start-sanitize-cygnus
331 *vr5400:
332 // end-sanitize-cygnus
333 // start-sanitize-cygnus
334 {
335 SET_MulAcc (SD_, 0 - SignedMultiply (SD_, GPR[RS], GPR[RT]));
336 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
337 }
338
339
340 // end-sanitize-cygnus
341 // start-sanitize-cygnus
342 // Unsigned Multiply, Negate and Move HI.
343 000000,5.RS,5.RT,5.RD,01011,011001::64::MULSHIU
344 "mulshiu r<RD>, r<RS>, r<RT>"
345 // end-sanitize-cygnus
346 // start-sanitize-cygnus
347 *vr5400:
348 // end-sanitize-cygnus
349 // start-sanitize-cygnus
350 {
351 SET_MulAcc (SD_, 0 - UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
352 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
353 }
354
355
356 // end-sanitize-cygnus
357 // start-sanitize-cygnus
358 //
359 // Multiply, Accumulate and Move LO.
360 //
361 000000,5.RS,5.RT,5.RD,00010,101000::64::MACC
362 "macc r<RD>, r<RS>, r<RT>"
363 // end-sanitize-cygnus
364 // start-sanitize-vr4320
365 *vr4320:
366 // end-sanitize-vr4320
367 // start-sanitize-cygnus
368 *vr5400:
369 // end-sanitize-cygnus
370 // start-sanitize-cygnus
371 {
372 SET_MulAcc (SD_, MulAcc (SD_) + SignedMultiply (SD_, GPR[RS], GPR[RT]));
373 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
374 }
375 // end-sanitize-cygnus
376
377 // start-sanitize-vr4xxx
378 000000,5.RS,5.RT,5.RD,00000,101000::::MACC
379 "macc r<RD>, r<RS>, r<RT>"
380 *vr4121:
381 {
382 SET_MulAcc (SD_, MulAcc (SD_) + SignedMultiply (SD_, GPR[RS], GPR[RT]));
383 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
384 }
385
386 000000,5.RS,5.RT,5.RD,00000,101001::::DMACC
387 "dmacc r<RD>, r<RS>, r<RT>"
388 *vr4121:
389 {
390 LO = LO + SignedMultiply (SD_, GPR[RS], GPR[RT]);
391 GPR[RD] = LO;
392 }
393
394 000000,5.RS,5.RT,5.RD,10000,101000::::MACCS
395 "maccs r<RD>, r<RS>, r<RT>"
396 *vr4121:
397 {
398 SET_MulAcc (SD_, SaturatedAdd (SD_, MulAcc (SD_),
399 SignedMultiply (SD_, GPR[RS], GPR[RT])));
400 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
401 }
402
403 000000,5.RS,5.RT,5.RD,10000,101001::::DMACCS
404 "dmaccs r<RD>, r<RS>, r<RT>"
405 *vr4121:
406 {
407 LO = SaturatedAdd (SD_, LO, SignedMultiply (SD_, GPR[RS], GPR[RT]));
408 GPR[RD] = LO;
409 }
410
411
412
413
414
415 // end-sanitize-vr4xxx
416 // start-sanitize-cygnus
417 //
418 // Unsigned Multiply, Accumulate and Move LO.
419 //
420 000000,5.RS,5.RT,5.RD,00011,101000::64::MACCU
421 "maccu r<RD>, r<RS>, r<RT>"
422 // end-sanitize-cygnus
423 // start-sanitize-vr4320
424 *vr4320:
425 // end-sanitize-vr4320
426 // start-sanitize-cygnus
427 *vr5400:
428 // end-sanitize-cygnus
429 // start-sanitize-cygnus
430 {
431 SET_MulAcc (SD_, MulAcc (SD_) + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
432 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
433 }
434
435 // end-sanitize-cygnus
436 // start-sanitize-vr4xxx
437 000000,5.RS,5.RT,5.RD,00001,101000::64::MACCU
438 "maccu r<RD>, r<RS>, r<RT>"
439 *vr4121:
440 {
441 SET_MulAcc (SD_, MulAcc (SD_) + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
442 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
443 }
444
445 000000,5.RS,5.RT,5.RD,00001,101001::64::DMACCU
446 "dmaccu r<RD>, r<RS>, r<RT>"
447 *vr4121:
448 {
449 LO = LO + UnsignedMultiply (SD_, GPR[RS], GPR[RT]);
450 GPR[RD] = LO;
451 }
452
453 000000,5.RS,5.RT,5.RD,10001,101000::64::MACCUS
454 "maccus r<RD>, r<RS>, r<RT>"
455 *vr4121:
456 {
457 SET_MulAcc (SD_,
458 SaturatedUnsignedAdd (SD_, MulAcc (SD_),
459 UnsignedMultiply (SD_, GPR[RS], GPR[RT])));
460 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
461 }
462
463 000000,5.RS,5.RT,5.RD,10001,101001::64::DMACCUS
464 "dmaccus r<RD>, r<RS>, r<RT>"
465 *vr4121:
466 {
467 LO = SaturatedUnsignedAdd (SD_, LO,
468 UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
469 GPR[RD] = LO;
470 }
471
472
473
474 // end-sanitize-vr4xxx
475 // start-sanitize-cygnus
476 //
477 // Multiply, Accumulate and Move HI.
478 //
479 000000,5.RS,5.RT,5.RD,01010,101000::64::MACCHI
480 "macchi r<RD>, r<RS>, r<RT>"
481 // end-sanitize-cygnus
482 // start-sanitize-vr4320
483 *vr4320:
484 // end-sanitize-vr4320
485 // start-sanitize-cygnus
486 *vr5400:
487 // end-sanitize-cygnus
488 // start-sanitize-cygnus
489 {
490 SET_MulAcc (SD_, MulAcc (SD_) + SignedMultiply (SD_, GPR[RS], GPR[RT]));
491 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
492 }
493
494 // end-sanitize-cygnus
495 // start-sanitize-vr4xxx
496 000000,5.RS,5.RT,5.RD,01000,101000::64::MACCHI
497 "macchi r<RD>, r<RS>, r<RT>"
498 *vr4121:
499 {
500 SET_MulAcc (SD_, MulAcc (SD_) + SignedMultiply (SD_, GPR[RS], GPR[RT]));
501 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
502 }
503
504 000000,5.RS,5.RT,5.RD,11000,101000::64::MACCHIS
505 "macchis r<RD>, r<RS>, r<RT>"
506 *vr4121:
507 {
508 SET_MulAcc (SD_, SaturatedAdd (SD_, MulAcc (SD_),
509 SignedMultiply (SD_, GPR[RS], GPR[RT])));
510 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
511 }
512
513
514
515 // end-sanitize-vr4xxx
516 // start-sanitize-cygnus
517 //
518 // Unsigned Multiply, Accumulate and Move HI.
519 //
520 000000,5.RS,5.RT,5.RD,01011,101000::64::MACCHIU
521 "macchiu r<RD>, r<RS>, r<RT>"
522 // end-sanitize-cygnus
523 // start-sanitize-vr4320
524 *vr4320:
525 // end-sanitize-vr4320
526 // start-sanitize-cygnus
527 *vr5400:
528 // end-sanitize-cygnus
529 // start-sanitize-cygnus
530 {
531 SET_MulAcc (SD_, MulAcc (SD_) + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
532 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
533
534 }
535
536 // end-sanitize-cygnus
537 // start-sanitize-vr4xxx
538 000000,5.RS,5.RT,5.RD,01001,101000::64::MACCHIU
539 "macchiu r<RD>, r<RS>, r<RT>"
540 *vr4121:
541 {
542 SET_MulAcc (SD_, MulAcc (SD_) + UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
543 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
544
545 }
546
547 000000,5.RS,5.RT,5.RD,11001,101000::64::MACCHIUS
548 "macchius r<RD>, r<RS>, r<RT>"
549 *vr4121:
550 {
551 SET_MulAcc (SD_,
552 SaturatedUnsignedAdd (SD_, MulAcc (SD_),
553 UnsignedMultiply (SD_, GPR[RS], GPR[RT])));
554 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
555
556 }
557
558
559
560 // end-sanitize-vr4xxx
561 // start-sanitize-cygnus
562 // Unsigned Multiply, Negate, Accumulate and Move LO.
563 000000,5.RS,5.RT,5.RD,00111,011001::64::MSACU
564 "msacu r<RD>, r<RS>, r<RT>"
565 // end-sanitize-cygnus
566 // start-sanitize-cygnus
567 *vr5400:
568 // end-sanitize-cygnus
569 // start-sanitize-cygnus
570 {
571 SET_MulAcc (SD_, MulAcc (SD_) - UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
572 GPR[RD] = Low32Bits (SD_, MulAcc (SD_));
573 }
574
575
576 // end-sanitize-cygnus
577 // start-sanitize-cygnus
578 // Multiply, Negate, Accumulate and Move HI.
579 000000,5.RS,5.RT,5.RD,01111,011000::::MSACHI
580 "msachi r<RD>, r<RS>, r<RT>"
581 // end-sanitize-cygnus
582 // start-sanitize-cygnus
583 *vr5400:
584 // end-sanitize-cygnus
585 // start-sanitize-cygnus
586 {
587 SET_MulAcc (SD_, MulAcc (SD_) - SignedMultiply (SD_, GPR[RS], GPR[RT]));
588 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
589 }
590
591 // end-sanitize-cygnus
592 // start-sanitize-cygnus
593 // Unsigned Multiply, Negate, Accumulate and Move HI.
594 000000,5.RS,5.RT,5.RD,01111,011001::64::MSACHIU
595 "msachiu r<RD>, r<RS>, r<RT>"
596 // end-sanitize-cygnus
597 // start-sanitize-cygnus
598 *vr5400:
599 // end-sanitize-cygnus
600 // start-sanitize-cygnus
601 {
602 SET_MulAcc (SD_, MulAcc (SD_) - UnsignedMultiply (SD_, GPR[RS], GPR[RT]));
603 GPR[RD] = High32Bits (SD_, MulAcc (SD_));
604 }
605
606
607 // end-sanitize-cygnus
608 // start-sanitize-cygnus
609 // Rotate Right.
610 000000,00001,5.RT,5.RD,5.SHIFT,000010::64::ROR
611 "ror r<RD>, r<RT>, <SHIFT>"
612 // end-sanitize-cygnus
613 // start-sanitize-cygnus
614 *vr5400:
615 // end-sanitize-cygnus
616 // start-sanitize-cygnus
617 {
618 int s = SHIFT;
619 GPR[RD] = ROTR32 (GPR[RT], s);
620 }
621
622
623 // end-sanitize-cygnus
624 // start-sanitize-cygnus
625 // Rotate Right Variable.
626 000000,5.RS,5.RT,5.RD,00001,000110::64::RORV
627 "rorv r<RD>, r<RT>, <RS>"
628 // end-sanitize-cygnus
629 // start-sanitize-cygnus
630 *vr5400:
631 // end-sanitize-cygnus
632 // start-sanitize-cygnus
633 {
634 int s = MASKED (GPR[RS], 4, 0);
635 GPR[RD] = ROTR32 (GPR[RT], s);
636 }
637
638
639 // end-sanitize-cygnus
640 // start-sanitize-cygnus
641 // Double Rotate Right.
642 000000,00001,5.RT,5.RD,5.SHIFT,111010::64::DROR
643 "dror r<RD>, r<RT>, <SHIFT>"
644 // end-sanitize-cygnus
645 // start-sanitize-cygnus
646 *vr5400:
647 // end-sanitize-cygnus
648 // start-sanitize-cygnus
649 {
650 int s = SHIFT;
651 GPR[RD] = ROTR64 (GPR[RT], s);
652 }
653
654
655 // end-sanitize-cygnus
656 // start-sanitize-cygnus
657 // Double Rotate Right Plus 32.
658 000000,00001,5.RT,5.RD,5.SHIFT,111110::64::DROR32
659 "dror32 r<RD>, r<RT>, <SHIFT>"
660 // end-sanitize-cygnus
661 // start-sanitize-cygnus
662 *vr5400:
663 // end-sanitize-cygnus
664 // start-sanitize-cygnus
665 {
666 int s = SHIFT + 32;
667 GPR[RD] = ROTR64 (GPR[RT], s);
668 }
669
670
671 // end-sanitize-cygnus
672 // start-sanitize-cygnus
673 // Double Rotate Right Variable.
674 000000,5.RS,5.RT,5.RD,00001,010110::64::DRORV
675 "drorv r<RD>, r<RT>, <RS>"
676 // end-sanitize-cygnus
677 // start-sanitize-cygnus
678 *vr5400:
679 // end-sanitize-cygnus
680 // start-sanitize-cygnus
681 {
682 int s = MASKED (GPR[RS], 5, 0);
683 GPR[RD] = ROTR64 (GPR[RT], s);
684 }
685
686
687 // end-sanitize-cygnus