2 # Power ISA decode for 32-bit insns (opcode space 0)
4 # Copyright (c) 2021 Instituto de Pesquisas Eldorado (eldorado.org.br)
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.
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.
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/>.
21 @D ...... rt:5 ra:5 si:s16 &D
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
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
32 @DQ_TSX ...... ..... ra:5 ............ .... &D si=%dq_si rt=%dq_rt_tsx
34 %ds_si 2:s14 !function=times_4
35 @DS ...... rt:5 ra:5 .............. .. &D si=%ds_si
37 %ds_rtp 22:4 !function=times_2
38 @DS_rtp ...... ....0 ra:5 .............. .. &D rt=%ds_rtp si=%ds_si
42 @DX ...... rt:5 ..... .......... ..... . &DX d=%dx_d
45 @VA ...... vrt:5 vra:5 vrb:5 rc:5 ...... &VA
48 @VN ...... vrt:5 vra:5 vrb:5 .. sh:3 ...... &VN
51 @VX ...... vrt:5 vra:5 vrb:5 .......... . &VX
54 @VX_uim4 ...... vrt:5 . uim:4 vrb:5 ........... &VX_uim4
57 @X ...... rt:5 ra:5 rb:5 .......... . &X
59 &X_rc rt ra rb rc:bool
60 @X_rc ...... rt:5 ra:5 rb:5 .......... rc:1 &X_rc
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
67 @X_tp_a_bp_rc ...... ....0 ra:5 ....0 .......... rc:1 &X_rc rt=%x_frtp rb=%x_frbp
69 &X_tb_rc rt rb rc:bool
70 @X_tb_rc ...... rt:5 ..... rb:5 .......... rc:1 &X_tb_rc
72 @X_tbp_rc ...... ....0 ..... ....0 .......... rc:1 &X_tb_rc rt=%x_frtp rb=%x_frbp
74 @X_tp_b_rc ...... ....0 ..... rb:5 .......... rc:1 &X_tb_rc rt=%x_frtp
76 @X_t_bp_rc ...... rt:5 ..... ....0 .......... rc:1 &X_tb_rc rb=%x_frbp
79 @X_bi ...... rt:5 bi:5 ----- .......... - &X_bi
82 @X_bf ...... bf:3 .. ra:5 rb:5 .......... . &X_bf
84 @X_bf_ap_bp ...... bf:3 .. ....0 ....0 .......... . &X_bf ra=%x_frap rb=%x_frbp
86 @X_bf_a_bp ...... bf:3 .. ra:5 ....0 .......... . &X_bf rb=%x_frbp
89 @X_bf_uim ...... bf:3 . uim:6 rb:5 .......... . &X_bf_uim
91 @X_bf_uim_bp ...... bf:3 . uim:6 ....0 .......... . &X_bf_uim rb=%x_frbp
93 &X_bfl bf l:bool ra rb
94 @X_bfl ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl
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
99 @X_tbp_sp_rc ...... ....0 sp:2 ... ....0 .......... rc:1 &X_tb_sp_rc rt=%x_frtp rb=%x_frbp
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
104 @X_tbp_s_rc ...... ....0 s:1 .... ....0 .......... rc:1 &X_tb_s_rc rt=%x_frtp rb=%x_frbp
107 @X_frtp_vrb ...... ....0 ..... vrb:5 .......... . &X_frtp_vrb frtp=%x_frtp
110 @X_vrt_frbp ...... vrt:5 ..... ....0 .......... . &X_vrt_frbp frbp=%x_frbp
112 &Z22_bf_fra bf fra dm
113 @Z22_bf_fra ...... bf:3 .. fra:5 dm:6 ......... . &Z22_bf_fra
115 %z22_frap 17:4 !function=times_2
116 @Z22_bf_frap ...... bf:3 .. ....0 dm:6 ......... . &Z22_bf_fra fra=%z22_frap
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
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
124 &Z23_tab frt fra frb rmc rc:bool
125 @Z23_tab ...... frt:5 fra:5 frb:5 rmc:2 ........ rc:1 &Z23_tab
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
132 @Z23_tp_a_bp ...... ....0 fra:5 ....0 rmc:2 ........ rc:1 &Z23_tab frt=%z23_frtp frb=%z23_frbp
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
137 @Z23_tbp ...... ....0 .... r:1 ....0 rmc:2 ........ rc:1 &Z23_tb frt=%z23_frtp frb=%z23_frbp
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
142 @Z23_te_tbp ...... ....0 te:5 ....0 rmc:2 ........ rc:1 &Z23_te_tb frt=%z23_frtp frb=%z23_frbp
144 ### Fixed-Point Load Instructions
146 LBZ 100010 ..... ..... ................ @D
147 LBZU 100011 ..... ..... ................ @D
148 LBZX 011111 ..... ..... ..... 0001010111 - @X
149 LBZUX 011111 ..... ..... ..... 0001110111 - @X
151 LHZ 101000 ..... ..... ................ @D
152 LHZU 101001 ..... ..... ................ @D
153 LHZX 011111 ..... ..... ..... 0100010111 - @X
154 LHZUX 011111 ..... ..... ..... 0100110111 - @X
156 LHA 101010 ..... ..... ................ @D
157 LHAU 101011 ..... ..... ................ @D
158 LHAX 011111 ..... ..... ..... 0101010111 - @X
159 LHAXU 011111 ..... ..... ..... 0101110111 - @X
161 LWZ 100000 ..... ..... ................ @D
162 LWZU 100001 ..... ..... ................ @D
163 LWZX 011111 ..... ..... ..... 0000010111 - @X
164 LWZUX 011111 ..... ..... ..... 0000110111 - @X
166 LWA 111010 ..... ..... ..............10 @DS
167 LWAX 011111 ..... ..... ..... 0101010101 - @X
168 LWAUX 011111 ..... ..... ..... 0101110101 - @X
170 LD 111010 ..... ..... ..............00 @DS
171 LDU 111010 ..... ..... ..............01 @DS
172 LDX 011111 ..... ..... ..... 0000010101 - @X
173 LDUX 011111 ..... ..... ..... 0000110101 - @X
175 LQ 111000 ..... ..... ............ ---- @DQ_rtp
177 ### Fixed-Point Store Instructions
179 STB 100110 ..... ..... ................ @D
180 STBU 100111 ..... ..... ................ @D
181 STBX 011111 ..... ..... ..... 0011010111 - @X
182 STBUX 011111 ..... ..... ..... 0011110111 - @X
184 STH 101100 ..... ..... ................ @D
185 STHU 101101 ..... ..... ................ @D
186 STHX 011111 ..... ..... ..... 0110010111 - @X
187 STHUX 011111 ..... ..... ..... 0110110111 - @X
189 STW 100100 ..... ..... ................ @D
190 STWU 100101 ..... ..... ................ @D
191 STWX 011111 ..... ..... ..... 0010010111 - @X
192 STWUX 011111 ..... ..... ..... 0010110111 - @X
194 STD 111110 ..... ..... ..............00 @DS
195 STDU 111110 ..... ..... ..............01 @DS
196 STDX 011111 ..... ..... ..... 0010010101 - @X
197 STDUX 011111 ..... ..... ..... 0010110101 - @X
199 STQ 111110 ..... ..... ..............10 @DS_rtp
201 ### Fixed-Point Compare Instructions
203 CMP 011111 ... - . ..... ..... 0000000000 - @X_bfl
204 CMPL 011111 ... - . ..... ..... 0000100000 - @X_bfl
205 CMPI 001011 ... - . ..... ................ @D_bfs
206 CMPLI 001010 ... - . ..... ................ @D_bfu
208 ### Fixed-Point Arithmetic Instructions
210 ADDI 001110 ..... ..... ................ @D
211 ADDIS 001111 ..... ..... ................ @D
213 ADDPCIS 010011 ..... ..... .......... 00010 . @DX
215 ## Fixed-Point Logical Instructions
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
223 ### Float-Point Load Instructions
225 LFS 110000 ..... ..... ................ @D
226 LFSU 110001 ..... ..... ................ @D
227 LFSX 011111 ..... ..... ..... 1000010111 - @X
228 LFSUX 011111 ..... ..... ..... 1000110111 - @X
230 LFD 110010 ..... ..... ................ @D
231 LFDU 110011 ..... ..... ................ @D
232 LFDX 011111 ..... ..... ..... 1001010111 - @X
233 LFDUX 011111 ..... ..... ..... 1001110111 - @X
235 ### Float-Point Store Instructions
237 STFS 110100 ..... ...... ............... @D
238 STFSU 110101 ..... ...... ............... @D
239 STFSX 011111 ..... ...... .... 1010010111 - @X
240 STFSUX 011111 ..... ...... .... 1010110111 - @X
242 STFD 110110 ..... ...... ............... @D
243 STFDU 110111 ..... ...... ............... @D
244 STFDX 011111 ..... ...... .... 1011010111 - @X
245 STFDUX 011111 ..... ...... .... 1011110111 - @X
247 ### Move To/From System Register Instructions
249 SETBC 011111 ..... ..... ----- 0110000000 - @X_bi
250 SETBCR 011111 ..... ..... ----- 0110100000 - @X_bi
251 SETNBC 011111 ..... ..... ----- 0111000000 - @X_bi
252 SETNBCR 011111 ..... ..... ----- 0111100000 - @X_bi
254 ### Decimal Floating-Point Arithmetic Instructions
256 DADD 111011 ..... ..... ..... 0000000010 . @X_rc
257 DADDQ 111111 ..... ..... ..... 0000000010 . @X_tp_ap_bp_rc
259 DSUB 111011 ..... ..... ..... 1000000010 . @X_rc
260 DSUBQ 111111 ..... ..... ..... 1000000010 . @X_tp_ap_bp_rc
262 DMUL 111011 ..... ..... ..... 0000100010 . @X_rc
263 DMULQ 111111 ..... ..... ..... 0000100010 . @X_tp_ap_bp_rc
265 DDIV 111011 ..... ..... ..... 1000100010 . @X_rc
266 DDIVQ 111111 ..... ..... ..... 1000100010 . @X_tp_ap_bp_rc
268 ### Decimal Floating-Point Compare Instructions
270 DCMPU 111011 ... -- ..... ..... 1010000010 - @X_bf
271 DCMPUQ 111111 ... -- ..... ..... 1010000010 - @X_bf_ap_bp
273 DCMPO 111011 ... -- ..... ..... 0010000010 - @X_bf
274 DCMPOQ 111111 ... -- ..... ..... 0010000010 - @X_bf_ap_bp
276 ### Decimal Floating-Point Test Instructions
278 DTSTDC 111011 ... -- ..... ...... 011000010 - @Z22_bf_fra
279 DTSTDCQ 111111 ... -- ..... ...... 011000010 - @Z22_bf_frap
281 DTSTDG 111011 ... -- ..... ...... 011100010 - @Z22_bf_fra
282 DTSTDGQ 111111 ... -- ..... ...... 011100010 - @Z22_bf_frap
284 DTSTEX 111011 ... -- ..... ..... 0010100010 - @X_bf
285 DTSTEXQ 111111 ... -- ..... ..... 0010100010 - @X_bf_ap_bp
287 DTSTSF 111011 ... -- ..... ..... 1010100010 - @X_bf
288 DTSTSFQ 111111 ... -- ..... ..... 1010100010 - @X_bf_a_bp
290 DTSTSFI 111011 ... - ...... ..... 1010100011 - @X_bf_uim
291 DTSTSFIQ 111111 ... - ...... ..... 1010100011 - @X_bf_uim_bp
293 ### Decimal Floating-Point Quantum Adjustment Instructions
295 DQUAI 111011 ..... ..... ..... .. 01000011 . @Z23_te_tb
296 DQUAIQ 111111 ..... ..... ..... .. 01000011 . @Z23_te_tbp
298 DQUA 111011 ..... ..... ..... .. 00000011 . @Z23_tab
299 DQUAQ 111111 ..... ..... ..... .. 00000011 . @Z23_tabp
301 DRRND 111011 ..... ..... ..... .. 00100011 . @Z23_tab
302 DRRNDQ 111111 ..... ..... ..... .. 00100011 . @Z23_tp_a_bp
304 DRINTX 111011 ..... ---- . ..... .. 01100011 . @Z23_tb
305 DRINTXQ 111111 ..... ---- . ..... .. 01100011 . @Z23_tbp
307 DRINTN 111011 ..... ---- . ..... .. 11100011 . @Z23_tb
308 DRINTNQ 111111 ..... ---- . ..... .. 11100011 . @Z23_tbp
310 ### Decimal Floating-Point Conversion Instructions
312 DCTDP 111011 ..... ----- ..... 0100000010 . @X_tb_rc
313 DCTQPQ 111111 ..... ----- ..... 0100000010 . @X_tp_b_rc
315 DRSP 111011 ..... ----- ..... 1100000010 . @X_tb_rc
316 DRDPQ 111111 ..... ----- ..... 1100000010 . @X_tbp_rc
318 DCFFIX 111011 ..... ----- ..... 1100100010 . @X_tb_rc
319 DCFFIXQ 111111 ..... ----- ..... 1100100010 . @X_tp_b_rc
320 DCFFIXQQ 111111 ..... 00000 ..... 1111100010 - @X_frtp_vrb
322 DCTFIX 111011 ..... ----- ..... 0100100010 . @X_tb_rc
323 DCTFIXQ 111111 ..... ----- ..... 0100100010 . @X_t_bp_rc
324 DCTFIXQQ 111111 ..... 00001 ..... 1111100010 - @X_vrt_frbp
326 ### Decimal Floating-Point Format Instructions
328 DDEDPD 111011 ..... .. --- ..... 0101000010 . @X_tb_sp_rc
329 DDEDPDQ 111111 ..... .. --- ..... 0101000010 . @X_tbp_sp_rc
331 DENBCD 111011 ..... . ---- ..... 1101000010 . @X_tb_s_rc
332 DENBCDQ 111111 ..... . ---- ..... 1101000010 . @X_tbp_s_rc
334 DXEX 111011 ..... ----- ..... 0101100010 . @X_tb_rc
335 DXEXQ 111111 ..... ----- ..... 0101100010 . @X_t_bp_rc
337 DIEX 111011 ..... ..... ..... 1101100010 . @X_rc
338 DIEXQ 111111 ..... ..... ..... 1101100010 . @X_tp_a_bp_rc
340 DSCLI 111011 ..... ..... ...... 001000010 . @Z22_ta_sh_rc
341 DSCLIQ 111111 ..... ..... ...... 001000010 . @Z22_tap_sh_rc
343 DSCRI 111011 ..... ..... ...... 001100010 . @Z22_ta_sh_rc
344 DSCRIQ 111111 ..... ..... ...... 001100010 . @Z22_tap_sh_rc
346 ## Vector Bit Manipulation Instruction
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
354 ## Vector Permute and Formatting Instruction
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
365 VINSERTB 000100 ..... - .... ..... 01100001101 @VX_uim4
366 VINSERTH 000100 ..... - .... ..... 01101001101 @VX_uim4
367 VINSERTW 000100 ..... - .... ..... 01110001101 @VX_uim4
368 VINSERTD 000100 ..... - .... ..... 01111001101 @VX_uim4
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
379 VINSW 000100 ..... - .... ..... 00011001111 @VX_uim4
380 VINSD 000100 ..... - .... ..... 00111001111 @VX_uim4
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
389 VSLDBI 000100 ..... ..... ..... 00 ... 010110 @VN
390 VSRDBI 000100 ..... ..... ..... 01 ... 010110 @VN
392 # VSX Load/Store Instructions
394 LXV 111101 ..... ..... ............ . 001 @DQ_TSX
395 STXV 111101 ..... ..... ............ . 101 @DQ_TSX