missing *vr4320:
[external/binutils.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