]> git.proxmox.com Git - mirror_qemu.git/blob - target/ppc/insn32.decode
target/ppc: moved stxv and lxv from legacy to decodtree
[mirror_qemu.git] / target / ppc / insn32.decode
1 #
2 # Power ISA decode for 32-bit insns (opcode space 0)
3 #
4 # Copyright (c) 2021 Instituto de Pesquisas Eldorado (eldorado.org.br)
5 #
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License, or (at your option) any later version.
10 #
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # Lesser General Public License for more details.
15 #
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 #
19
20 &D rt ra si:int64_t
21 @D ...... rt:5 ra:5 si:s16 &D
22
23 &D_bf bf l:bool ra imm
24 @D_bfs ...... bf:3 - l:1 ra:5 imm:s16 &D_bf
25 @D_bfu ...... bf:3 - l:1 ra:5 imm:16 &D_bf
26
27 %dq_si 4:s12 !function=times_16
28 %dq_rtp 22:4 !function=times_2
29 @DQ_rtp ...... ....0 ra:5 ............ .... &D rt=%dq_rtp si=%dq_si
30
31 %dq_rt_tsx 3:1 21:5
32 @DQ_TSX ...... ..... ra:5 ............ .... &D si=%dq_si rt=%dq_rt_tsx
33
34 %ds_si 2:s14 !function=times_4
35 @DS ...... rt:5 ra:5 .............. .. &D si=%ds_si
36
37 %ds_rtp 22:4 !function=times_2
38 @DS_rtp ...... ....0 ra:5 .............. .. &D rt=%ds_rtp si=%ds_si
39
40 &DX rt d
41 %dx_d 6:s10 16:5 0:1
42 @DX ...... rt:5 ..... .......... ..... . &DX d=%dx_d
43
44 &VA vrt vra vrb rc
45 @VA ...... vrt:5 vra:5 vrb:5 rc:5 ...... &VA
46
47 &VN vrt vra vrb sh
48 @VN ...... vrt:5 vra:5 vrb:5 .. sh:3 ...... &VN
49
50 &VX vrt vra vrb
51 @VX ...... vrt:5 vra:5 vrb:5 .......... . &VX
52
53 &VX_uim4 vrt uim vrb
54 @VX_uim4 ...... vrt:5 . uim:4 vrb:5 ........... &VX_uim4
55
56 &X rt ra rb
57 @X ...... rt:5 ra:5 rb:5 .......... . &X
58
59 &X_rc rt ra rb rc:bool
60 @X_rc ...... rt:5 ra:5 rb:5 .......... rc:1 &X_rc
61
62 %x_frtp 22:4 !function=times_2
63 %x_frap 17:4 !function=times_2
64 %x_frbp 12:4 !function=times_2
65 @X_tp_ap_bp_rc ...... ....0 ....0 ....0 .......... rc:1 &X_rc rt=%x_frtp ra=%x_frap rb=%x_frbp
66
67 @X_tp_a_bp_rc ...... ....0 ra:5 ....0 .......... rc:1 &X_rc rt=%x_frtp rb=%x_frbp
68
69 &X_tb_rc rt rb rc:bool
70 @X_tb_rc ...... rt:5 ..... rb:5 .......... rc:1 &X_tb_rc
71
72 @X_tbp_rc ...... ....0 ..... ....0 .......... rc:1 &X_tb_rc rt=%x_frtp rb=%x_frbp
73
74 @X_tp_b_rc ...... ....0 ..... rb:5 .......... rc:1 &X_tb_rc rt=%x_frtp
75
76 @X_t_bp_rc ...... rt:5 ..... ....0 .......... rc:1 &X_tb_rc rb=%x_frbp
77
78 &X_bi rt bi
79 @X_bi ...... rt:5 bi:5 ----- .......... - &X_bi
80
81 &X_bf bf ra rb
82 @X_bf ...... bf:3 .. ra:5 rb:5 .......... . &X_bf
83
84 @X_bf_ap_bp ...... bf:3 .. ....0 ....0 .......... . &X_bf ra=%x_frap rb=%x_frbp
85
86 @X_bf_a_bp ...... bf:3 .. ra:5 ....0 .......... . &X_bf rb=%x_frbp
87
88 &X_bf_uim bf uim rb
89 @X_bf_uim ...... bf:3 . uim:6 rb:5 .......... . &X_bf_uim
90
91 @X_bf_uim_bp ...... bf:3 . uim:6 ....0 .......... . &X_bf_uim rb=%x_frbp
92
93 &X_bfl bf l:bool ra rb
94 @X_bfl ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl
95
96 &X_tb_sp_rc rt rb sp rc:bool
97 @X_tb_sp_rc ...... rt:5 sp:2 ... rb:5 .......... rc:1 &X_tb_sp_rc
98
99 @X_tbp_sp_rc ...... ....0 sp:2 ... ....0 .......... rc:1 &X_tb_sp_rc rt=%x_frtp rb=%x_frbp
100
101 &X_tb_s_rc rt rb s:bool rc:bool
102 @X_tb_s_rc ...... rt:5 s:1 .... rb:5 .......... rc:1 &X_tb_s_rc
103
104 @X_tbp_s_rc ...... ....0 s:1 .... ....0 .......... rc:1 &X_tb_s_rc rt=%x_frtp rb=%x_frbp
105
106 &X_frtp_vrb frtp vrb
107 @X_frtp_vrb ...... ....0 ..... vrb:5 .......... . &X_frtp_vrb frtp=%x_frtp
108
109 &X_vrt_frbp vrt frbp
110 @X_vrt_frbp ...... vrt:5 ..... ....0 .......... . &X_vrt_frbp frbp=%x_frbp
111
112 &Z22_bf_fra bf fra dm
113 @Z22_bf_fra ...... bf:3 .. fra:5 dm:6 ......... . &Z22_bf_fra
114
115 %z22_frap 17:4 !function=times_2
116 @Z22_bf_frap ...... bf:3 .. ....0 dm:6 ......... . &Z22_bf_fra fra=%z22_frap
117
118 &Z22_ta_sh_rc rt ra sh rc:bool
119 @Z22_ta_sh_rc ...... rt:5 ra:5 sh:6 ......... rc:1 &Z22_ta_sh_rc
120
121 %z22_frtp 22:4 !function=times_2
122 @Z22_tap_sh_rc ...... ....0 ....0 sh:6 ......... rc:1 &Z22_ta_sh_rc rt=%z22_frtp ra=%z22_frap
123
124 &Z23_tab frt fra frb rmc rc:bool
125 @Z23_tab ...... frt:5 fra:5 frb:5 rmc:2 ........ rc:1 &Z23_tab
126
127 %z23_frtp 22:4 !function=times_2
128 %z23_frap 17:4 !function=times_2
129 %z23_frbp 12:4 !function=times_2
130 @Z23_tabp ...... ....0 ....0 ....0 rmc:2 ........ rc:1 &Z23_tab frt=%z23_frtp fra=%z23_frap frb=%z23_frbp
131
132 @Z23_tp_a_bp ...... ....0 fra:5 ....0 rmc:2 ........ rc:1 &Z23_tab frt=%z23_frtp frb=%z23_frbp
133
134 &Z23_tb frt frb r:bool rmc rc:bool
135 @Z23_tb ...... frt:5 .... r:1 frb:5 rmc:2 ........ rc:1 &Z23_tb
136
137 @Z23_tbp ...... ....0 .... r:1 ....0 rmc:2 ........ rc:1 &Z23_tb frt=%z23_frtp frb=%z23_frbp
138
139 &Z23_te_tb te frt frb rmc rc:bool
140 @Z23_te_tb ...... frt:5 te:5 frb:5 rmc:2 ........ rc:1 &Z23_te_tb
141
142 @Z23_te_tbp ...... ....0 te:5 ....0 rmc:2 ........ rc:1 &Z23_te_tb frt=%z23_frtp frb=%z23_frbp
143
144 ### Fixed-Point Load Instructions
145
146 LBZ 100010 ..... ..... ................ @D
147 LBZU 100011 ..... ..... ................ @D
148 LBZX 011111 ..... ..... ..... 0001010111 - @X
149 LBZUX 011111 ..... ..... ..... 0001110111 - @X
150
151 LHZ 101000 ..... ..... ................ @D
152 LHZU 101001 ..... ..... ................ @D
153 LHZX 011111 ..... ..... ..... 0100010111 - @X
154 LHZUX 011111 ..... ..... ..... 0100110111 - @X
155
156 LHA 101010 ..... ..... ................ @D
157 LHAU 101011 ..... ..... ................ @D
158 LHAX 011111 ..... ..... ..... 0101010111 - @X
159 LHAXU 011111 ..... ..... ..... 0101110111 - @X
160
161 LWZ 100000 ..... ..... ................ @D
162 LWZU 100001 ..... ..... ................ @D
163 LWZX 011111 ..... ..... ..... 0000010111 - @X
164 LWZUX 011111 ..... ..... ..... 0000110111 - @X
165
166 LWA 111010 ..... ..... ..............10 @DS
167 LWAX 011111 ..... ..... ..... 0101010101 - @X
168 LWAUX 011111 ..... ..... ..... 0101110101 - @X
169
170 LD 111010 ..... ..... ..............00 @DS
171 LDU 111010 ..... ..... ..............01 @DS
172 LDX 011111 ..... ..... ..... 0000010101 - @X
173 LDUX 011111 ..... ..... ..... 0000110101 - @X
174
175 LQ 111000 ..... ..... ............ ---- @DQ_rtp
176
177 ### Fixed-Point Store Instructions
178
179 STB 100110 ..... ..... ................ @D
180 STBU 100111 ..... ..... ................ @D
181 STBX 011111 ..... ..... ..... 0011010111 - @X
182 STBUX 011111 ..... ..... ..... 0011110111 - @X
183
184 STH 101100 ..... ..... ................ @D
185 STHU 101101 ..... ..... ................ @D
186 STHX 011111 ..... ..... ..... 0110010111 - @X
187 STHUX 011111 ..... ..... ..... 0110110111 - @X
188
189 STW 100100 ..... ..... ................ @D
190 STWU 100101 ..... ..... ................ @D
191 STWX 011111 ..... ..... ..... 0010010111 - @X
192 STWUX 011111 ..... ..... ..... 0010110111 - @X
193
194 STD 111110 ..... ..... ..............00 @DS
195 STDU 111110 ..... ..... ..............01 @DS
196 STDX 011111 ..... ..... ..... 0010010101 - @X
197 STDUX 011111 ..... ..... ..... 0010110101 - @X
198
199 STQ 111110 ..... ..... ..............10 @DS_rtp
200
201 ### Fixed-Point Compare Instructions
202
203 CMP 011111 ... - . ..... ..... 0000000000 - @X_bfl
204 CMPL 011111 ... - . ..... ..... 0000100000 - @X_bfl
205 CMPI 001011 ... - . ..... ................ @D_bfs
206 CMPLI 001010 ... - . ..... ................ @D_bfu
207
208 ### Fixed-Point Arithmetic Instructions
209
210 ADDI 001110 ..... ..... ................ @D
211 ADDIS 001111 ..... ..... ................ @D
212
213 ADDPCIS 010011 ..... ..... .......... 00010 . @DX
214
215 ## Fixed-Point Logical Instructions
216
217 CFUGED 011111 ..... ..... ..... 0011011100 - @X
218 CNTLZDM 011111 ..... ..... ..... 0000111011 - @X
219 CNTTZDM 011111 ..... ..... ..... 1000111011 - @X
220 PDEPD 011111 ..... ..... ..... 0010011100 - @X
221 PEXTD 011111 ..... ..... ..... 0010111100 - @X
222
223 ### Float-Point Load Instructions
224
225 LFS 110000 ..... ..... ................ @D
226 LFSU 110001 ..... ..... ................ @D
227 LFSX 011111 ..... ..... ..... 1000010111 - @X
228 LFSUX 011111 ..... ..... ..... 1000110111 - @X
229
230 LFD 110010 ..... ..... ................ @D
231 LFDU 110011 ..... ..... ................ @D
232 LFDX 011111 ..... ..... ..... 1001010111 - @X
233 LFDUX 011111 ..... ..... ..... 1001110111 - @X
234
235 ### Float-Point Store Instructions
236
237 STFS 110100 ..... ...... ............... @D
238 STFSU 110101 ..... ...... ............... @D
239 STFSX 011111 ..... ...... .... 1010010111 - @X
240 STFSUX 011111 ..... ...... .... 1010110111 - @X
241
242 STFD 110110 ..... ...... ............... @D
243 STFDU 110111 ..... ...... ............... @D
244 STFDX 011111 ..... ...... .... 1011010111 - @X
245 STFDUX 011111 ..... ...... .... 1011110111 - @X
246
247 ### Move To/From System Register Instructions
248
249 SETBC 011111 ..... ..... ----- 0110000000 - @X_bi
250 SETBCR 011111 ..... ..... ----- 0110100000 - @X_bi
251 SETNBC 011111 ..... ..... ----- 0111000000 - @X_bi
252 SETNBCR 011111 ..... ..... ----- 0111100000 - @X_bi
253
254 ### Decimal Floating-Point Arithmetic Instructions
255
256 DADD 111011 ..... ..... ..... 0000000010 . @X_rc
257 DADDQ 111111 ..... ..... ..... 0000000010 . @X_tp_ap_bp_rc
258
259 DSUB 111011 ..... ..... ..... 1000000010 . @X_rc
260 DSUBQ 111111 ..... ..... ..... 1000000010 . @X_tp_ap_bp_rc
261
262 DMUL 111011 ..... ..... ..... 0000100010 . @X_rc
263 DMULQ 111111 ..... ..... ..... 0000100010 . @X_tp_ap_bp_rc
264
265 DDIV 111011 ..... ..... ..... 1000100010 . @X_rc
266 DDIVQ 111111 ..... ..... ..... 1000100010 . @X_tp_ap_bp_rc
267
268 ### Decimal Floating-Point Compare Instructions
269
270 DCMPU 111011 ... -- ..... ..... 1010000010 - @X_bf
271 DCMPUQ 111111 ... -- ..... ..... 1010000010 - @X_bf_ap_bp
272
273 DCMPO 111011 ... -- ..... ..... 0010000010 - @X_bf
274 DCMPOQ 111111 ... -- ..... ..... 0010000010 - @X_bf_ap_bp
275
276 ### Decimal Floating-Point Test Instructions
277
278 DTSTDC 111011 ... -- ..... ...... 011000010 - @Z22_bf_fra
279 DTSTDCQ 111111 ... -- ..... ...... 011000010 - @Z22_bf_frap
280
281 DTSTDG 111011 ... -- ..... ...... 011100010 - @Z22_bf_fra
282 DTSTDGQ 111111 ... -- ..... ...... 011100010 - @Z22_bf_frap
283
284 DTSTEX 111011 ... -- ..... ..... 0010100010 - @X_bf
285 DTSTEXQ 111111 ... -- ..... ..... 0010100010 - @X_bf_ap_bp
286
287 DTSTSF 111011 ... -- ..... ..... 1010100010 - @X_bf
288 DTSTSFQ 111111 ... -- ..... ..... 1010100010 - @X_bf_a_bp
289
290 DTSTSFI 111011 ... - ...... ..... 1010100011 - @X_bf_uim
291 DTSTSFIQ 111111 ... - ...... ..... 1010100011 - @X_bf_uim_bp
292
293 ### Decimal Floating-Point Quantum Adjustment Instructions
294
295 DQUAI 111011 ..... ..... ..... .. 01000011 . @Z23_te_tb
296 DQUAIQ 111111 ..... ..... ..... .. 01000011 . @Z23_te_tbp
297
298 DQUA 111011 ..... ..... ..... .. 00000011 . @Z23_tab
299 DQUAQ 111111 ..... ..... ..... .. 00000011 . @Z23_tabp
300
301 DRRND 111011 ..... ..... ..... .. 00100011 . @Z23_tab
302 DRRNDQ 111111 ..... ..... ..... .. 00100011 . @Z23_tp_a_bp
303
304 DRINTX 111011 ..... ---- . ..... .. 01100011 . @Z23_tb
305 DRINTXQ 111111 ..... ---- . ..... .. 01100011 . @Z23_tbp
306
307 DRINTN 111011 ..... ---- . ..... .. 11100011 . @Z23_tb
308 DRINTNQ 111111 ..... ---- . ..... .. 11100011 . @Z23_tbp
309
310 ### Decimal Floating-Point Conversion Instructions
311
312 DCTDP 111011 ..... ----- ..... 0100000010 . @X_tb_rc
313 DCTQPQ 111111 ..... ----- ..... 0100000010 . @X_tp_b_rc
314
315 DRSP 111011 ..... ----- ..... 1100000010 . @X_tb_rc
316 DRDPQ 111111 ..... ----- ..... 1100000010 . @X_tbp_rc
317
318 DCFFIX 111011 ..... ----- ..... 1100100010 . @X_tb_rc
319 DCFFIXQ 111111 ..... ----- ..... 1100100010 . @X_tp_b_rc
320 DCFFIXQQ 111111 ..... 00000 ..... 1111100010 - @X_frtp_vrb
321
322 DCTFIX 111011 ..... ----- ..... 0100100010 . @X_tb_rc
323 DCTFIXQ 111111 ..... ----- ..... 0100100010 . @X_t_bp_rc
324 DCTFIXQQ 111111 ..... 00001 ..... 1111100010 - @X_vrt_frbp
325
326 ### Decimal Floating-Point Format Instructions
327
328 DDEDPD 111011 ..... .. --- ..... 0101000010 . @X_tb_sp_rc
329 DDEDPDQ 111111 ..... .. --- ..... 0101000010 . @X_tbp_sp_rc
330
331 DENBCD 111011 ..... . ---- ..... 1101000010 . @X_tb_s_rc
332 DENBCDQ 111111 ..... . ---- ..... 1101000010 . @X_tbp_s_rc
333
334 DXEX 111011 ..... ----- ..... 0101100010 . @X_tb_rc
335 DXEXQ 111111 ..... ----- ..... 0101100010 . @X_t_bp_rc
336
337 DIEX 111011 ..... ..... ..... 1101100010 . @X_rc
338 DIEXQ 111111 ..... ..... ..... 1101100010 . @X_tp_a_bp_rc
339
340 DSCLI 111011 ..... ..... ...... 001000010 . @Z22_ta_sh_rc
341 DSCLIQ 111111 ..... ..... ...... 001000010 . @Z22_tap_sh_rc
342
343 DSCRI 111011 ..... ..... ...... 001100010 . @Z22_ta_sh_rc
344 DSCRIQ 111111 ..... ..... ...... 001100010 . @Z22_tap_sh_rc
345
346 ## Vector Bit Manipulation Instruction
347
348 VCFUGED 000100 ..... ..... ..... 10101001101 @VX
349 VCLZDM 000100 ..... ..... ..... 11110000100 @VX
350 VCTZDM 000100 ..... ..... ..... 11111000100 @VX
351 VPDEPD 000100 ..... ..... ..... 10111001101 @VX
352 VPEXTD 000100 ..... ..... ..... 10110001101 @VX
353
354 ## Vector Permute and Formatting Instruction
355
356 VEXTDUBVLX 000100 ..... ..... ..... ..... 011000 @VA
357 VEXTDUBVRX 000100 ..... ..... ..... ..... 011001 @VA
358 VEXTDUHVLX 000100 ..... ..... ..... ..... 011010 @VA
359 VEXTDUHVRX 000100 ..... ..... ..... ..... 011011 @VA
360 VEXTDUWVLX 000100 ..... ..... ..... ..... 011100 @VA
361 VEXTDUWVRX 000100 ..... ..... ..... ..... 011101 @VA
362 VEXTDDVLX 000100 ..... ..... ..... ..... 011110 @VA
363 VEXTDDVRX 000100 ..... ..... ..... ..... 011111 @VA
364
365 VINSERTB 000100 ..... - .... ..... 01100001101 @VX_uim4
366 VINSERTH 000100 ..... - .... ..... 01101001101 @VX_uim4
367 VINSERTW 000100 ..... - .... ..... 01110001101 @VX_uim4
368 VINSERTD 000100 ..... - .... ..... 01111001101 @VX_uim4
369
370 VINSBLX 000100 ..... ..... ..... 01000001111 @VX
371 VINSBRX 000100 ..... ..... ..... 01100001111 @VX
372 VINSHLX 000100 ..... ..... ..... 01001001111 @VX
373 VINSHRX 000100 ..... ..... ..... 01101001111 @VX
374 VINSWLX 000100 ..... ..... ..... 01010001111 @VX
375 VINSWRX 000100 ..... ..... ..... 01110001111 @VX
376 VINSDLX 000100 ..... ..... ..... 01011001111 @VX
377 VINSDRX 000100 ..... ..... ..... 01111001111 @VX
378
379 VINSW 000100 ..... - .... ..... 00011001111 @VX_uim4
380 VINSD 000100 ..... - .... ..... 00111001111 @VX_uim4
381
382 VINSBVLX 000100 ..... ..... ..... 00000001111 @VX
383 VINSBVRX 000100 ..... ..... ..... 00100001111 @VX
384 VINSHVLX 000100 ..... ..... ..... 00001001111 @VX
385 VINSHVRX 000100 ..... ..... ..... 00101001111 @VX
386 VINSWVLX 000100 ..... ..... ..... 00010001111 @VX
387 VINSWVRX 000100 ..... ..... ..... 00110001111 @VX
388
389 VSLDBI 000100 ..... ..... ..... 00 ... 010110 @VN
390 VSRDBI 000100 ..... ..... ..... 01 ... 010110 @VN
391
392 # VSX Load/Store Instructions
393
394 LXV 111101 ..... ..... ............ . 001 @DQ_TSX
395 STXV 111101 ..... ..... ............ . 101 @DQ_TSX