aboutsummaryrefslogtreecommitdiff
path: root/target/ppc/insn32.decode
blob: 257b11113d7666d093ab24ef8ca93072515dec67 (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
#
# 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/>.
#

&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

%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             rt d
%dx_d           6:s10 16:5 0:1
@DX             ...... rt:5  ..... .......... ..... .   &DX d=%dx_d

&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

&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_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_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_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

&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

### 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 Bit Manipulation Instruction

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

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