aboutsummaryrefslogtreecommitdiff
path: root/target/ppc/insn32.decode
blob: b8e317159caac1b1749e548453074fd762fd4830 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
#
# Power ISA decode for 32-bit insns (opcode space 0)
#
# Copyright (c) 2021 Instituto de Pesquisas Eldorado (eldorado.org.br)
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
#

&A              frt fra frb frc rc:bool
@A              ...... frt:5 fra:5 frb:5 frc:5 ..... rc:1       &A

&D              rt ra si:int64_t
@D              ...... rt:5 ra:5 si:s16                 &D

&D_bf           bf l:bool ra imm
@D_bfs          ...... bf:3 - l:1 ra:5 imm:s16          &D_bf
@D_bfu          ...... bf:3 - l:1 ra:5 imm:16           &D_bf

%dq_si          4:s12  !function=times_16
%dq_rtp         22:4   !function=times_2
@DQ_rtp         ...... ....0 ra:5 ............ ....             &D rt=%dq_rtp si=%dq_si

%dq_rt_tsx      3:1 21:5
@DQ_TSX         ...... ..... ra:5 ............ ....             &D si=%dq_si rt=%dq_rt_tsx

%rt_tsxp        21:1 22:4 !function=times_2
@DQ_TSXP        ...... ..... ra:5 ............ ....             &D si=%dq_si rt=%rt_tsxp

%ds_si          2:s14  !function=times_4
@DS             ...... rt:5 ra:5 .............. ..      &D si=%ds_si

%ds_rtp         22:4   !function=times_2
@DS_rtp         ...... ....0 ra:5 .............. ..             &D rt=%ds_rtp si=%ds_si

&DX_b           vrt b
%dx_b           6:10 16:5 0:1
@DX_b           ...... vrt:5  ..... .......... ..... .          &DX_b b=%dx_b

&DX             rt d
%dx_d           6:s10 16:5 0:1
@DX             ...... rt:5  ..... .......... ..... .   &DX d=%dx_d

&VA             vrt vra vrb rc
@VA             ...... vrt:5 vra:5 vrb:5 rc:5 ......    &VA

&VC             vrt vra vrb rc:bool
@VC             ...... vrt:5 vra:5 vrb:5 rc:1 ..........        &VC

&VN             vrt vra vrb sh
@VN             ...... vrt:5 vra:5 vrb:5 .. sh:3 ......         &VN

&VX             vrt vra vrb
@VX             ...... vrt:5 vra:5 vrb:5 .......... .   &VX

&VX_bf          bf vra vrb
@VX_bf          ...... bf:3 .. vra:5 vrb:5 ...........          &VX_bf

&VX_mp          rt mp:bool vrb
@VX_mp          ...... rt:5 .... mp:1 vrb:5 ...........         &VX_mp

&VX_n           rt vrb n
@VX_n           ...... rt:5 .. n:3 vrb:5 ...........            &VX_n

&VX_tb_rc       vrt vrb rc:bool
@VX_tb_rc       ...... vrt:5 ..... vrb:5 rc:1 ..........        &VX_tb_rc

&VX_uim4        vrt uim vrb
@VX_uim4        ...... vrt:5 . uim:4 vrb:5 ...........  &VX_uim4

&VX_tb          vrt vrb
@VX_tb          ...... vrt:5 ..... vrb:5 ...........    &VX_tb

&X              rt ra rb
@X              ...... rt:5 ra:5 rb:5 .......... .      &X

&X_rc           rt ra rb rc:bool
@X_rc           ...... rt:5 ra:5 rb:5 .......... rc:1           &X_rc

%x_frtp         22:4 !function=times_2
%x_frap         17:4 !function=times_2
%x_frbp         12:4 !function=times_2
@X_tp_ap_bp_rc  ...... ....0 ....0 ....0 .......... rc:1        &X_rc rt=%x_frtp ra=%x_frap rb=%x_frbp

@X_tp_a_bp_rc   ...... ....0 ra:5 ....0 .......... rc:1         &X_rc rt=%x_frtp rb=%x_frbp

&X_tb           rt rb
@X_tb           ...... rt:5 ..... rb:5 .......... .             &X_tb

&X_tb_rc        rt rb rc:bool
@X_tb_rc        ...... rt:5 ..... rb:5 .......... rc:1          &X_tb_rc

@X_tbp_rc       ...... ....0 ..... ....0 .......... rc:1        &X_tb_rc rt=%x_frtp rb=%x_frbp

@X_tp_b_rc      ...... ....0 ..... rb:5 .......... rc:1         &X_tb_rc rt=%x_frtp

@X_t_bp_rc      ...... rt:5 ..... ....0 .......... rc:1         &X_tb_rc rb=%x_frbp

&X_bi           rt bi
@X_bi           ...... rt:5 bi:5 ----- .......... -     &X_bi

&X_bf           bf ra rb
@X_bf           ...... bf:3 .. ra:5 rb:5 .......... .           &X_bf

@X_bf_ap_bp     ...... bf:3 .. ....0 ....0 .......... .         &X_bf ra=%x_frap rb=%x_frbp

@X_bf_a_bp      ...... bf:3 .. ra:5 ....0 .......... .          &X_bf rb=%x_frbp

&X_bf_uim       bf uim rb
@X_bf_uim       ...... bf:3 . uim:6 rb:5 .......... .           &X_bf_uim

@X_bf_uim_bp    ...... bf:3 . uim:6 ....0 .......... .          &X_bf_uim rb=%x_frbp

&X_bfl          bf l:bool ra rb
@X_bfl          ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl

%x_xt           0:1 21:5
&X_imm5         xt imm:uint8_t vrb
@X_imm5         ...... ..... imm:5 vrb:5 .......... .           &X_imm5 xt=%x_xt

&X_imm8         xt imm:uint8_t
@X_imm8         ...... ..... .. imm:8 .......... .              &X_imm8 xt=%x_xt

&X_uim5         xt uim:uint8_t
@X_uim5         ...... ..... ..... uim:5 .......... .           &X_uim5 xt=%x_xt

&X_tb_sp_rc     rt rb sp rc:bool
@X_tb_sp_rc     ...... rt:5 sp:2 ... rb:5 .......... rc:1       &X_tb_sp_rc

@X_tbp_sp_rc    ...... ....0 sp:2 ... ....0 .......... rc:1     &X_tb_sp_rc rt=%x_frtp rb=%x_frbp

&X_tb_s_rc      rt rb s:bool rc:bool
@X_tb_s_rc      ...... rt:5 s:1 .... rb:5 .......... rc:1       &X_tb_s_rc

@X_tbp_s_rc     ...... ....0 s:1 .... ....0 .......... rc:1     &X_tb_s_rc rt=%x_frtp rb=%x_frbp

%x_rt_tsx       0:1 21:5
@X_TSX          ...... ..... ra:5 rb:5 .......... .             &X rt=%x_rt_tsx
@X_TSXP         ...... ..... ra:5 rb:5 .......... .             &X rt=%rt_tsxp

&X_frtp_vrb     frtp vrb
@X_frtp_vrb     ...... ....0 ..... vrb:5 .......... .           &X_frtp_vrb frtp=%x_frtp

&X_vrt_frbp     vrt frbp
@X_vrt_frbp     ...... vrt:5 ..... ....0 .......... .           &X_vrt_frbp frbp=%x_frbp

&X_a            ra
@X_a            ...... ra:3 .. ..... ..... .......... .         &X_a

%xx_xt          0:1 21:5
%xx_xb          1:1 11:5
%xx_xa          2:1 16:5
%xx_xc          3:1 6:5
&XX2            xt xb
@XX2            ...... ..... ..... ..... ......... ..           &XX2 xt=%xx_xt xb=%xx_xb

&XX2_uim        xt xb uim:uint8_t
@XX2_uim2       ...... ..... ... uim:2 ..... ......... ..       &XX2_uim xt=%xx_xt xb=%xx_xb

@XX2_uim4       ...... ..... . uim:4 ..... ......... ..         &XX2_uim xt=%xx_xt xb=%xx_xb

&XX2_bf_xb      bf xb
@XX2_bf_xb      ...... bf:3 .. ..... ..... ......... . .        &XX2_bf_xb xb=%xx_xb

&XX3            xt xa xb
@XX3            ...... ..... ..... ..... ........ ...           &XX3 xt=%xx_xt xa=%xx_xa xb=%xx_xb

# 32 bit GER instructions have all mask bits considered 1
&MMIRR_XX3      xa xb xt pmsk xmsk ymsk
%xx_at          23:3
%xx_xa_pair     2:1 17:4 !function=times_2
@XX3_at         ...... ... .. ..... ..... ........ ...          &MMIRR_XX3 xt=%xx_at xb=%xx_xb \
                                                                pmsk=255 xmsk=15 ymsk=15

&XX3_dm         xt xa xb dm
@XX3_dm         ...... ..... ..... ..... . dm:2 ..... ...       &XX3_dm xt=%xx_xt xa=%xx_xa xb=%xx_xb

&XX4            xt xa xb xc
@XX4            ...... ..... ..... ..... ..... .. ....          &XX4 xt=%xx_xt xa=%xx_xa xb=%xx_xb xc=%xx_xc

&Z22_bf_fra     bf fra dm
@Z22_bf_fra     ...... bf:3 .. fra:5 dm:6 ......... .           &Z22_bf_fra

%z22_frap       17:4 !function=times_2
@Z22_bf_frap    ...... bf:3 .. ....0 dm:6 ......... .           &Z22_bf_fra fra=%z22_frap

&Z22_ta_sh_rc   rt ra sh rc:bool
@Z22_ta_sh_rc   ...... rt:5 ra:5 sh:6 ......... rc:1            &Z22_ta_sh_rc

%z22_frtp       22:4 !function=times_2
@Z22_tap_sh_rc  ...... ....0 ....0 sh:6 ......... rc:1          &Z22_ta_sh_rc rt=%z22_frtp ra=%z22_frap

&Z23_tab        frt fra frb rmc rc:bool
@Z23_tab        ...... frt:5 fra:5 frb:5 rmc:2 ........ rc:1    &Z23_tab

%z23_frtp       22:4 !function=times_2
%z23_frap       17:4 !function=times_2
%z23_frbp       12:4 !function=times_2
@Z23_tabp       ...... ....0 ....0 ....0 rmc:2 ........ rc:1    &Z23_tab frt=%z23_frtp fra=%z23_frap frb=%z23_frbp

@Z23_tp_a_bp    ...... ....0 fra:5 ....0 rmc:2 ........ rc:1    &Z23_tab frt=%z23_frtp frb=%z23_frbp

&Z23_tb         frt frb r:bool rmc rc:bool
@Z23_tb         ...... frt:5 .... r:1 frb:5 rmc:2 ........ rc:1 &Z23_tb

@Z23_tbp        ...... ....0 .... r:1 ....0 rmc:2 ........ rc:1 &Z23_tb frt=%z23_frtp frb=%z23_frbp

&Z23_te_tb      te frt frb rmc rc:bool
@Z23_te_tb      ...... frt:5 te:5 frb:5 rmc:2 ........ rc:1     &Z23_te_tb

@Z23_te_tbp     ...... ....0 te:5 ....0 rmc:2 ........ rc:1     &Z23_te_tb frt=%z23_frtp frb=%z23_frbp

### Fixed-Point Load Instructions

LBZ             100010 ..... ..... ................     @D
LBZU            100011 ..... ..... ................     @D
LBZX            011111 ..... ..... ..... 0001010111 -   @X
LBZUX           011111 ..... ..... ..... 0001110111 -   @X

LHZ             101000 ..... ..... ................     @D
LHZU            101001 ..... ..... ................     @D
LHZX            011111 ..... ..... ..... 0100010111 -   @X
LHZUX           011111 ..... ..... ..... 0100110111 -   @X

LHA             101010 ..... ..... ................     @D
LHAU            101011 ..... ..... ................     @D
LHAX            011111 ..... ..... ..... 0101010111 -   @X
LHAXU           011111 ..... ..... ..... 0101110111 -   @X

LWZ             100000 ..... ..... ................     @D
LWZU            100001 ..... ..... ................     @D
LWZX            011111 ..... ..... ..... 0000010111 -   @X
LWZUX           011111 ..... ..... ..... 0000110111 -   @X

LWA             111010 ..... ..... ..............10     @DS
LWAX            011111 ..... ..... ..... 0101010101 -   @X
LWAUX           011111 ..... ..... ..... 0101110101 -   @X

LD              111010 ..... ..... ..............00     @DS
LDU             111010 ..... ..... ..............01     @DS
LDX             011111 ..... ..... ..... 0000010101 -   @X
LDUX            011111 ..... ..... ..... 0000110101 -   @X

LQ              111000 ..... ..... ............ ----    @DQ_rtp

### Fixed-Point Store Instructions

STB             100110 ..... ..... ................     @D
STBU            100111 ..... ..... ................     @D
STBX            011111 ..... ..... ..... 0011010111 -   @X
STBUX           011111 ..... ..... ..... 0011110111 -   @X

STH             101100 ..... ..... ................     @D
STHU            101101 ..... ..... ................     @D
STHX            011111 ..... ..... ..... 0110010111 -   @X
STHUX           011111 ..... ..... ..... 0110110111 -   @X

STW             100100 ..... ..... ................     @D
STWU            100101 ..... ..... ................     @D
STWX            011111 ..... ..... ..... 0010010111 -   @X
STWUX           011111 ..... ..... ..... 0010110111 -   @X

STD             111110 ..... ..... ..............00     @DS
STDU            111110 ..... ..... ..............01     @DS
STDX            011111 ..... ..... ..... 0010010101 -   @X
STDUX           011111 ..... ..... ..... 0010110101 -   @X

STQ             111110 ..... ..... ..............10     @DS_rtp

### Fixed-Point Compare Instructions

CMP             011111 ... - . ..... ..... 0000000000 - @X_bfl
CMPL            011111 ... - . ..... ..... 0000100000 - @X_bfl
CMPI            001011 ... - . ..... ................   @D_bfs
CMPLI           001010 ... - . ..... ................   @D_bfu

### Fixed-Point Arithmetic Instructions

ADDI            001110 ..... ..... ................     @D
ADDIS           001111 ..... ..... ................     @D

ADDPCIS         010011 ..... ..... .......... 00010 .   @DX

## Fixed-Point Logical Instructions

CFUGED          011111 ..... ..... ..... 0011011100 -   @X
CNTLZDM         011111 ..... ..... ..... 0000111011 -   @X
CNTTZDM         011111 ..... ..... ..... 1000111011 -   @X
PDEPD           011111 ..... ..... ..... 0010011100 -   @X
PEXTD           011111 ..... ..... ..... 0010111100 -   @X

### Float-Point Load Instructions

LFS             110000 ..... ..... ................     @D
LFSU            110001 ..... ..... ................     @D
LFSX            011111 ..... ..... ..... 1000010111 -   @X
LFSUX           011111 ..... ..... ..... 1000110111 -   @X

LFD             110010 ..... ..... ................     @D
LFDU            110011 ..... ..... ................     @D
LFDX            011111 ..... ..... ..... 1001010111 -   @X
LFDUX           011111 ..... ..... ..... 1001110111 -   @X

### Float-Point Store Instructions

STFS            110100 ..... ...... ...............     @D
STFSU           110101 ..... ...... ...............     @D
STFSX           011111 ..... ...... .... 1010010111 -   @X
STFSUX          011111 ..... ...... .... 1010110111 -   @X

STFD            110110 ..... ...... ...............     @D
STFDU           110111 ..... ...... ...............     @D
STFDX           011111 ..... ...... .... 1011010111 -   @X
STFDUX          011111 ..... ...... .... 1011110111 -   @X

### Floating-Point Select Instruction

FSEL            111111 ..... ..... ..... ..... 10111 .  @A

### Move To/From System Register Instructions

SETBC           011111 ..... ..... ----- 0110000000 -   @X_bi
SETBCR          011111 ..... ..... ----- 0110100000 -   @X_bi
SETNBC          011111 ..... ..... ----- 0111000000 -   @X_bi
SETNBCR         011111 ..... ..... ----- 0111100000 -   @X_bi

### Decimal Floating-Point Arithmetic Instructions

DADD            111011 ..... ..... ..... 0000000010 .   @X_rc
DADDQ           111111 ..... ..... ..... 0000000010 .   @X_tp_ap_bp_rc

DSUB            111011 ..... ..... ..... 1000000010 .   @X_rc
DSUBQ           111111 ..... ..... ..... 1000000010 .   @X_tp_ap_bp_rc

DMUL            111011 ..... ..... ..... 0000100010 .   @X_rc
DMULQ           111111 ..... ..... ..... 0000100010 .   @X_tp_ap_bp_rc

DDIV            111011 ..... ..... ..... 1000100010 .   @X_rc
DDIVQ           111111 ..... ..... ..... 1000100010 .   @X_tp_ap_bp_rc

### Decimal Floating-Point Compare Instructions

DCMPU           111011 ... -- ..... ..... 1010000010 -  @X_bf
DCMPUQ          111111 ... -- ..... ..... 1010000010 -  @X_bf_ap_bp

DCMPO           111011 ... -- ..... ..... 0010000010 -  @X_bf
DCMPOQ          111111 ... -- ..... ..... 0010000010 -  @X_bf_ap_bp

### Decimal Floating-Point Test Instructions

DTSTDC          111011 ... -- ..... ...... 011000010 -  @Z22_bf_fra
DTSTDCQ         111111 ... -- ..... ...... 011000010 -  @Z22_bf_frap

DTSTDG          111011 ... -- ..... ...... 011100010 -  @Z22_bf_fra
DTSTDGQ         111111 ... -- ..... ...... 011100010 -  @Z22_bf_frap

DTSTEX          111011 ... -- ..... ..... 0010100010 -  @X_bf
DTSTEXQ         111111 ... -- ..... ..... 0010100010 -  @X_bf_ap_bp

DTSTSF          111011 ... -- ..... ..... 1010100010 -  @X_bf
DTSTSFQ         111111 ... -- ..... ..... 1010100010 -  @X_bf_a_bp

DTSTSFI         111011 ... - ...... ..... 1010100011 -  @X_bf_uim
DTSTSFIQ        111111 ... - ...... ..... 1010100011 -  @X_bf_uim_bp

### Decimal Floating-Point Quantum Adjustment Instructions

DQUAI           111011 ..... ..... ..... .. 01000011 .  @Z23_te_tb
DQUAIQ          111111 ..... ..... ..... .. 01000011 .  @Z23_te_tbp

DQUA            111011 ..... ..... ..... .. 00000011 .  @Z23_tab
DQUAQ           111111 ..... ..... ..... .. 00000011 .  @Z23_tabp

DRRND           111011 ..... ..... ..... .. 00100011 .  @Z23_tab
DRRNDQ          111111 ..... ..... ..... .. 00100011 .  @Z23_tp_a_bp

DRINTX          111011 ..... ---- . ..... .. 01100011 . @Z23_tb
DRINTXQ         111111 ..... ---- . ..... .. 01100011 . @Z23_tbp

DRINTN          111011 ..... ---- . ..... .. 11100011 . @Z23_tb
DRINTNQ         111111 ..... ---- . ..... .. 11100011 . @Z23_tbp

### Decimal Floating-Point Conversion Instructions

DCTDP           111011 ..... ----- ..... 0100000010 .   @X_tb_rc
DCTQPQ          111111 ..... ----- ..... 0100000010 .   @X_tp_b_rc

DRSP            111011 ..... ----- ..... 1100000010 .   @X_tb_rc
DRDPQ           111111 ..... ----- ..... 1100000010 .   @X_tbp_rc

DCFFIX          111011 ..... ----- ..... 1100100010 .   @X_tb_rc
DCFFIXQ         111111 ..... ----- ..... 1100100010 .   @X_tp_b_rc
DCFFIXQQ        111111 ..... 00000 ..... 1111100010 -   @X_frtp_vrb

DCTFIX          111011 ..... ----- ..... 0100100010 .   @X_tb_rc
DCTFIXQ         111111 ..... ----- ..... 0100100010 .   @X_t_bp_rc
DCTFIXQQ        111111 ..... 00001 ..... 1111100010 -   @X_vrt_frbp

### Decimal Floating-Point Format Instructions

DDEDPD          111011 ..... .. --- ..... 0101000010 .  @X_tb_sp_rc
DDEDPDQ         111111 ..... .. --- ..... 0101000010 .  @X_tbp_sp_rc

DENBCD          111011 ..... . ---- ..... 1101000010 .  @X_tb_s_rc
DENBCDQ         111111 ..... . ---- ..... 1101000010 .  @X_tbp_s_rc

DXEX            111011 ..... ----- ..... 0101100010 .   @X_tb_rc
DXEXQ           111111 ..... ----- ..... 0101100010 .   @X_t_bp_rc

DIEX            111011 ..... ..... ..... 1101100010 .   @X_rc
DIEXQ           111111 ..... ..... ..... 1101100010 .   @X_tp_a_bp_rc

DSCLI           111011 ..... ..... ...... 001000010 .   @Z22_ta_sh_rc
DSCLIQ          111111 ..... ..... ...... 001000010 .   @Z22_tap_sh_rc

DSCRI           111011 ..... ..... ...... 001100010 .   @Z22_ta_sh_rc
DSCRIQ          111111 ..... ..... ...... 001100010 .   @Z22_tap_sh_rc

## Vector Integer Instructions

VCMPEQUB        000100 ..... ..... ..... . 0000000110   @VC
VCMPEQUH        000100 ..... ..... ..... . 0001000110   @VC
VCMPEQUW        000100 ..... ..... ..... . 0010000110   @VC
VCMPEQUD        000100 ..... ..... ..... . 0011000111   @VC
VCMPEQUQ        000100 ..... ..... ..... . 0111000111   @VC

VCMPGTSB        000100 ..... ..... ..... . 1100000110   @VC
VCMPGTSH        000100 ..... ..... ..... . 1101000110   @VC
VCMPGTSW        000100 ..... ..... ..... . 1110000110   @VC
VCMPGTSD        000100 ..... ..... ..... . 1111000111   @VC
VCMPGTSQ        000100 ..... ..... ..... . 1110000111   @VC

VCMPGTUB        000100 ..... ..... ..... . 1000000110   @VC
VCMPGTUH        000100 ..... ..... ..... . 1001000110   @VC
VCMPGTUW        000100 ..... ..... ..... . 1010000110   @VC
VCMPGTUD        000100 ..... ..... ..... . 1011000111   @VC
VCMPGTUQ        000100 ..... ..... ..... . 1010000111   @VC

VCMPNEB         000100 ..... ..... ..... . 0000000111   @VC
VCMPNEH         000100 ..... ..... ..... . 0001000111   @VC
VCMPNEW         000100 ..... ..... ..... . 0010000111   @VC

VCMPNEZB        000100 ..... ..... ..... . 0100000111   @VC
VCMPNEZH        000100 ..... ..... ..... . 0101000111   @VC
VCMPNEZW        000100 ..... ..... ..... . 0110000111   @VC

VCMPSQ          000100 ... -- ..... ..... 00101000001   @VX_bf
VCMPUQ          000100 ... -- ..... ..... 00100000001   @VX_bf

## Vector Bit Manipulation Instruction

VGNB            000100 ..... -- ... ..... 10011001100   @VX_n

VCFUGED         000100 ..... ..... ..... 10101001101    @VX
VCLZDM          000100 ..... ..... ..... 11110000100    @VX
VCTZDM          000100 ..... ..... ..... 11111000100    @VX
VPDEPD          000100 ..... ..... ..... 10111001101    @VX
VPEXTD          000100 ..... ..... ..... 10110001101    @VX

## Vector Permute and Formatting Instruction

VEXTDUBVLX      000100 ..... ..... ..... ..... 011000   @VA
VEXTDUBVRX      000100 ..... ..... ..... ..... 011001   @VA
VEXTDUHVLX      000100 ..... ..... ..... ..... 011010   @VA
VEXTDUHVRX      000100 ..... ..... ..... ..... 011011   @VA
VEXTDUWVLX      000100 ..... ..... ..... ..... 011100   @VA
VEXTDUWVRX      000100 ..... ..... ..... ..... 011101   @VA
VEXTDDVLX       000100 ..... ..... ..... ..... 011110   @VA
VEXTDDVRX       000100 ..... ..... ..... ..... 011111   @VA

VINSERTB        000100 ..... - .... ..... 01100001101   @VX_uim4
VINSERTH        000100 ..... - .... ..... 01101001101   @VX_uim4
VINSERTW        000100 ..... - .... ..... 01110001101   @VX_uim4
VINSERTD        000100 ..... - .... ..... 01111001101   @VX_uim4

VINSBLX         000100 ..... ..... ..... 01000001111    @VX
VINSBRX         000100 ..... ..... ..... 01100001111    @VX
VINSHLX         000100 ..... ..... ..... 01001001111    @VX
VINSHRX         000100 ..... ..... ..... 01101001111    @VX
VINSWLX         000100 ..... ..... ..... 01010001111    @VX
VINSWRX         000100 ..... ..... ..... 01110001111    @VX
VINSDLX         000100 ..... ..... ..... 01011001111    @VX
VINSDRX         000100 ..... ..... ..... 01111001111    @VX

VINSW           000100 ..... - .... ..... 00011001111   @VX_uim4
VINSD           000100 ..... - .... ..... 00111001111   @VX_uim4

VINSBVLX        000100 ..... ..... ..... 00000001111    @VX
VINSBVRX        000100 ..... ..... ..... 00100001111    @VX
VINSHVLX        000100 ..... ..... ..... 00001001111    @VX
VINSHVRX        000100 ..... ..... ..... 00101001111    @VX
VINSWVLX        000100 ..... ..... ..... 00010001111    @VX
VINSWVRX        000100 ..... ..... ..... 00110001111    @VX

VSLDBI          000100 ..... ..... ..... 00 ... 010110  @VN
VSRDBI          000100 ..... ..... ..... 01 ... 010110  @VN

VPERM           000100 ..... ..... ..... ..... 101011   @VA
VPERMR          000100 ..... ..... ..... ..... 111011   @VA

VSEL            000100 ..... ..... ..... ..... 101010   @VA

## Vector Integer Shift Instruction

VSLB            000100 ..... ..... ..... 00100000100    @VX
VSLH            000100 ..... ..... ..... 00101000100    @VX
VSLW            000100 ..... ..... ..... 00110000100    @VX
VSLD            000100 ..... ..... ..... 10111000100    @VX
VSLQ            000100 ..... ..... ..... 00100000101    @VX

VSRB            000100 ..... ..... ..... 01000000100    @VX
VSRH            000100 ..... ..... ..... 01001000100    @VX
VSRW            000100 ..... ..... ..... 01010000100    @VX
VSRD            000100 ..... ..... ..... 11011000100    @VX
VSRQ            000100 ..... ..... ..... 01000000101    @VX

VSRAB           000100 ..... ..... ..... 01100000100    @VX
VSRAH           000100 ..... ..... ..... 01101000100    @VX
VSRAW           000100 ..... ..... ..... 01110000100    @VX
VSRAD           000100 ..... ..... ..... 01111000100    @VX
VSRAQ           000100 ..... ..... ..... 01100000101    @VX

VRLB            000100 ..... ..... ..... 00000000100    @VX
VRLH            000100 ..... ..... ..... 00001000100    @VX
VRLW            000100 ..... ..... ..... 00010000100    @VX
VRLD            000100 ..... ..... ..... 00011000100    @VX
VRLQ            000100 ..... ..... ..... 00000000101    @VX

VRLWMI          000100 ..... ..... ..... 00010000101    @VX
VRLDMI          000100 ..... ..... ..... 00011000101    @VX
VRLQMI          000100 ..... ..... ..... 00001000101    @VX

VRLWNM          000100 ..... ..... ..... 00110000101    @VX
VRLDNM          000100 ..... ..... ..... 00111000101    @VX
VRLQNM          000100 ..... ..... ..... 00101000101    @VX

## Vector Integer Arithmetic Instructions

VEXTSB2W        000100 ..... 10000 ..... 11000000010    @VX_tb
VEXTSH2W        000100 ..... 10001 ..... 11000000010    @VX_tb
VEXTSB2D        000100 ..... 11000 ..... 11000000010    @VX_tb
VEXTSH2D        000100 ..... 11001 ..... 11000000010    @VX_tb
VEXTSW2D        000100 ..... 11010 ..... 11000000010    @VX_tb
VEXTSD2Q        000100 ..... 11011 ..... 11000000010    @VX_tb

## Vector Mask Manipulation Instructions

MTVSRBM         000100 ..... 10000 ..... 11001000010    @VX_tb
MTVSRHM         000100 ..... 10001 ..... 11001000010    @VX_tb
MTVSRWM         000100 ..... 10010 ..... 11001000010    @VX_tb
MTVSRDM         000100 ..... 10011 ..... 11001000010    @VX_tb
MTVSRQM         000100 ..... 10100 ..... 11001000010    @VX_tb
MTVSRBMI        000100 ..... ..... .......... 01010 .   @DX_b

VEXPANDBM       000100 ..... 00000 ..... 11001000010    @VX_tb
VEXPANDHM       000100 ..... 00001 ..... 11001000010    @VX_tb
VEXPANDWM       000100 ..... 00010 ..... 11001000010    @VX_tb
VEXPANDDM       000100 ..... 00011 ..... 11001000010    @VX_tb
VEXPANDQM       000100 ..... 00100 ..... 11001000010    @VX_tb

VEXTRACTBM      000100 ..... 01000 ..... 11001000010    @VX_tb
VEXTRACTHM      000100 ..... 01001 ..... 11001000010    @VX_tb
VEXTRACTWM      000100 ..... 01010 ..... 11001000010    @VX_tb
VEXTRACTDM      000100 ..... 01011 ..... 11001000010    @VX_tb
VEXTRACTQM      000100 ..... 01100 ..... 11001000010    @VX_tb

VCNTMBB         000100 ..... 1100 . ..... 11001000010   @VX_mp
VCNTMBH         000100 ..... 1101 . ..... 11001000010   @VX_mp
VCNTMBW         000100 ..... 1110 . ..... 11001000010   @VX_mp
VCNTMBD         000100 ..... 1111 . ..... 11001000010   @VX_mp

## Vector Multiply Instruction

VMULESB         000100 ..... ..... ..... 01100001000    @VX
VMULOSB         000100 ..... ..... ..... 00100001000    @VX
VMULEUB         000100 ..... ..... ..... 01000001000    @VX
VMULOUB         000100 ..... ..... ..... 00000001000    @VX

VMULESH         000100 ..... ..... ..... 01101001000    @VX
VMULOSH         000100 ..... ..... ..... 00101001000    @VX
VMULEUH         000100 ..... ..... ..... 01001001000    @VX
VMULOUH         000100 ..... ..... ..... 00001001000    @VX

VMULESW         000100 ..... ..... ..... 01110001000    @VX
VMULOSW         000100 ..... ..... ..... 00110001000    @VX
VMULEUW         000100 ..... ..... ..... 01010001000    @VX
VMULOUW         000100 ..... ..... ..... 00010001000    @VX

VMULESD         000100 ..... ..... ..... 01111001000    @VX
VMULOSD         000100 ..... ..... ..... 00111001000    @VX
VMULEUD         000100 ..... ..... ..... 01011001000    @VX
VMULOUD         000100 ..... ..... ..... 00011001000    @VX

VMULHSW         000100 ..... ..... ..... 01110001001    @VX
VMULHUW         000100 ..... ..... ..... 01010001001    @VX
VMULHSD         000100 ..... ..... ..... 01111001001    @VX
VMULHUD         000100 ..... ..... ..... 01011001001    @VX
VMULLD          000100 ..... ..... ..... 00111001001    @VX

## Vector Multiply-Sum Instructions

VMSUMUBM        000100 ..... ..... ..... ..... 100100   @VA
VMSUMMBM        000100 ..... ..... ..... ..... 100101   @VA
VMSUMSHM        000100 ..... ..... ..... ..... 101000   @VA
VMSUMSHS        000100 ..... ..... ..... ..... 101001   @VA
VMSUMUHM        000100 ..... ..... ..... ..... 100110   @VA
VMSUMUHS        000100 ..... ..... ..... ..... 100111   @VA

VMSUMCUD        000100 ..... ..... ..... ..... 010111   @VA
VMSUMUDM        000100 ..... ..... ..... ..... 100011   @VA

## Vector String Instructions

VSTRIBL         000100 ..... 00000 ..... . 0000001101   @VX_tb_rc
VSTRIBR         000100 ..... 00001 ..... . 0000001101   @VX_tb_rc
VSTRIHL         000100 ..... 00010 ..... . 0000001101   @VX_tb_rc
VSTRIHR         000100 ..... 00011 ..... . 0000001101   @VX_tb_rc

VCLRLB          000100 ..... ..... ..... 00110001101    @VX
VCLRRB          000100 ..... ..... ..... 00111001101    @VX

# VSX Load/Store Instructions

LXSD            111001 ..... ..... .............. 10    @DS
STXSD           111101 ..... ..... .............. 10    @DS
LXSSP           111001 ..... ..... .............. 11    @DS
STXSSP          111101 ..... ..... .............. 11    @DS
LXV             111101 ..... ..... ............ . 001   @DQ_TSX
STXV            111101 ..... ..... ............ . 101   @DQ_TSX
LXVP            000110 ..... ..... ............ 0000    @DQ_TSXP
STXVP           000110 ..... ..... ............ 0001    @DQ_TSXP
LXVX            011111 ..... ..... ..... 0100 - 01100 . @X_TSX
STXVX           011111 ..... ..... ..... 0110001100 .   @X_TSX
LXVPX           011111 ..... ..... ..... 0101001101 -   @X_TSXP
STXVPX          011111 ..... ..... ..... 0111001101 -   @X_TSXP
LXVRBX          011111 ..... ..... ..... 0000001101 .   @X_TSX
LXVRHX          011111 ..... ..... ..... 0000101101 .   @X_TSX
LXVRWX          011111 ..... ..... ..... 0001001101 .   @X_TSX
LXVRDX          011111 ..... ..... ..... 0001101101 .   @X_TSX
STXVRBX         011111 ..... ..... ..... 0010001101 .   @X_TSX
STXVRHX         011111 ..... ..... ..... 0010101101 .   @X_TSX
STXVRWX         011111 ..... ..... ..... 0011001101 .   @X_TSX
STXVRDX         011111 ..... ..... ..... 0011101101 .   @X_TSX

## VSX Scalar Multiply-Add Instructions

XSMADDADP       111100 ..... ..... ..... 00100001 . . . @XX3
XSMADDMDP       111100 ..... ..... ..... 00101001 . . . @XX3
XSMADDASP       111100 ..... ..... ..... 00000001 . . . @XX3
XSMADDMSP       111100 ..... ..... ..... 00001001 . . . @XX3
XSMADDQP        111111 ..... ..... ..... 0110000100 .   @X_rc

XSMSUBADP       111100 ..... ..... ..... 00110001 . . . @XX3
XSMSUBMDP       111100 ..... ..... ..... 00111001 . . . @XX3
XSMSUBASP       111100 ..... ..... ..... 00010001 . . . @XX3
XSMSUBMSP       111100 ..... ..... ..... 00011001 . . . @XX3
XSMSUBQP        111111 ..... ..... ..... 0110100100 .   @X_rc

XSNMADDASP      111100 ..... ..... ..... 10000001 . . . @XX3
XSNMADDMSP      111100 ..... ..... ..... 10001001 . . . @XX3
XSNMADDADP      111100 ..... ..... ..... 10100001 . . . @XX3
XSNMADDMDP      111100 ..... ..... ..... 10101001 . . . @XX3
XSNMADDQP       111111 ..... ..... ..... 0111000100 .   @X_rc

XSNMSUBASP      111100 ..... ..... ..... 10010001 . . . @XX3
XSNMSUBMSP      111100 ..... ..... ..... 10011001 . . . @XX3
XSNMSUBADP      111100 ..... ..... ..... 10110001 . . . @XX3
XSNMSUBMDP      111100 ..... ..... ..... 10111001 . . . @XX3
XSNMSUBQP       111111 ..... ..... ..... 0111100100 .   @X_rc

## VSX splat instruction

XXSPLTIB        111100 ..... 00 ........ 0101101000 .   @X_imm8
XXSPLTW         111100 ..... ---.. ..... 010100100 . .  @XX2_uim2

## VSX Permute Instructions

XXEXTRACTUW     111100 ..... - .... ..... 010100101 ..  @XX2_uim4
XXINSERTW       111100 ..... - .... ..... 010110101 ..  @XX2_uim4

XXPERM          111100 ..... ..... ..... 00011010 ...   @XX3
XXPERMR         111100 ..... ..... ..... 00111010 ...   @XX3
XXPERMDI        111100 ..... ..... ..... 0 .. 01010 ... @XX3_dm

XXSEL           111100 ..... ..... ..... ..... 11 ....  @XX4

## VSX Vector Generate PCV

XXGENPCVBM      111100 ..... ..... ..... 1110010100 .   @X_imm5
XXGENPCVHM      111100 ..... ..... ..... 1110010101 .   @X_imm5
XXGENPCVWM      111100 ..... ..... ..... 1110110100 .   @X_imm5
XXGENPCVDM      111100 ..... ..... ..... 1110110101 .   @X_imm5

## VSX Vector Load Special Value Instruction

LXVKQ           111100 ..... 11111 ..... 0101101000 .   @X_uim5

## VSX Comparison Instructions

XSMAXCDP        111100 ..... ..... ..... 10000000 ...   @XX3
XSMINCDP        111100 ..... ..... ..... 10001000 ...   @XX3
XSMAXJDP        111100 ..... ..... ..... 10010000 ...   @XX3
XSMINJDP        111100 ..... ..... ..... 10011000 ...   @XX3
XSMAXCQP        111111 ..... ..... ..... 1010100100 -   @X
XSMINCQP        111111 ..... ..... ..... 1011100100 -   @X

XSCMPEQDP       111100 ..... ..... ..... 00000011 ...   @XX3
XSCMPGEDP       111100 ..... ..... ..... 00010011 ...   @XX3
XSCMPGTDP       111100 ..... ..... ..... 00001011 ...   @XX3
XSCMPEQQP       111111 ..... ..... ..... 0001000100 -   @X
XSCMPGEQP       111111 ..... ..... ..... 0011000100 -   @X
XSCMPGTQP       111111 ..... ..... ..... 0011100100 -   @X

## VSX Binary Floating-Point Convert Instructions

XSCVQPDP        111111 ..... 10100 ..... 1101000100 .   @X_tb_rc
XSCVQPUQZ       111111 ..... 00000 ..... 1101000100 -   @X_tb
XSCVQPSQZ       111111 ..... 01000 ..... 1101000100 -   @X_tb
XSCVUQQP        111111 ..... 00011 ..... 1101000100 -   @X_tb
XSCVSQQP        111111 ..... 01011 ..... 1101000100 -   @X_tb
XVCVBF16SPN     111100 ..... 10000 ..... 111011011 ..   @XX2
XVCVSPBF16      111100 ..... 10001 ..... 111011011 ..   @XX2
XSCVSPDPN       111100 ..... ----- ..... 101001011 ..   @XX2

## VSX Binary Floating-Point Math Support Instructions

XVXSIGSP        111100 ..... 01001 ..... 111011011 ..   @XX2

## VSX Vector Test Least-Significant Bit by Byte Instruction

XVTLSBB         111100 ... -- 00010 ..... 111011011 . - @XX2_bf_xb

### rfebb
&XL_s           s:uint8_t
@XL_s           ......-------------- s:1 .......... -   &XL_s
RFEBB           010011-------------- .   0010010010 -   @XL_s

## Accumulator Instructions

XXMFACC         011111 ... -- 00000 ----- 0010110001 -   @X_a
XXMTACC         011111 ... -- 00001 ----- 0010110001 -   @X_a
XXSETACCZ       011111 ... -- 00011 ----- 0010110001 -   @X_a

## VSX GER instruction

XVI4GER8        111011 ... -- ..... ..... 00100011 ..-  @XX3_at xa=%xx_xa
XVI4GER8PP      111011 ... -- ..... ..... 00100010 ..-  @XX3_at xa=%xx_xa
XVI8GER4        111011 ... -- ..... ..... 00000011 ..-  @XX3_at xa=%xx_xa
XVI8GER4PP      111011 ... -- ..... ..... 00000010 ..-  @XX3_at xa=%xx_xa
XVI16GER2       111011 ... -- ..... ..... 01001011 ..-  @XX3_at xa=%xx_xa
XVI16GER2PP     111011 ... -- ..... ..... 01101011 ..-  @XX3_at xa=%xx_xa
XVI8GER4SPP     111011 ... -- ..... ..... 01100011 ..-  @XX3_at xa=%xx_xa
XVI16GER2S      111011 ... -- ..... ..... 00101011 ..-  @XX3_at xa=%xx_xa
XVI16GER2SPP    111011 ... -- ..... ..... 00101010 ..-  @XX3_at xa=%xx_xa

XVF16GER2       111011 ... -- ..... ..... 00010011 ..-  @XX3_at xa=%xx_xa
XVF16GER2PP     111011 ... -- ..... ..... 00010010 ..-  @XX3_at xa=%xx_xa
XVF16GER2PN     111011 ... -- ..... ..... 10010010 ..-  @XX3_at xa=%xx_xa
XVF16GER2NP     111011 ... -- ..... ..... 01010010 ..-  @XX3_at xa=%xx_xa
XVF16GER2NN     111011 ... -- ..... ..... 11010010 ..-  @XX3_at xa=%xx_xa

XVF32GER        111011 ... -- ..... ..... 00011011 ..-  @XX3_at xa=%xx_xa
XVF32GERPP      111011 ... -- ..... ..... 00011010 ..-  @XX3_at xa=%xx_xa
XVF32GERPN      111011 ... -- ..... ..... 10011010 ..-  @XX3_at xa=%xx_xa
XVF32GERNP      111011 ... -- ..... ..... 01011010 ..-  @XX3_at xa=%xx_xa
XVF32GERNN      111011 ... -- ..... ..... 11011010 ..-  @XX3_at xa=%xx_xa

XVF64GER        111011 ... -- .... 0 ..... 00111011 ..-  @XX3_at xa=%xx_xa_pair
XVF64GERPP      111011 ... -- .... 0 ..... 00111010 ..-  @XX3_at xa=%xx_xa_pair
XVF64GERPN      111011 ... -- .... 0 ..... 10111010 ..-  @XX3_at xa=%xx_xa_pair
XVF64GERNP      111011 ... -- .... 0 ..... 01111010 ..-  @XX3_at xa=%xx_xa_pair
XVF64GERNN      111011 ... -- .... 0 ..... 11111010 ..-  @XX3_at xa=%xx_xa_pair