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%rt_tsxp 21:1 22:4 !function=times_2 35@DQ_TSXP ...... ..... ra:5 ............ .... &D si=%dq_si rt=%rt_tsxp 36 37%ds_si 2:s14 !function=times_4 38@DS ...... rt:5 ra:5 .............. .. &D si=%ds_si 39 40%ds_rtp 22:4 !function=times_2 41@DS_rtp ...... ....0 ra:5 .............. .. &D rt=%ds_rtp si=%ds_si 42 43&DX rt d 44%dx_d 6:s10 16:5 0:1 45@DX ...... rt:5 ..... .......... ..... . &DX d=%dx_d 46 47&VA vrt vra vrb rc 48@VA ...... vrt:5 vra:5 vrb:5 rc:5 ...... &VA 49 50&VN vrt vra vrb sh 51@VN ...... vrt:5 vra:5 vrb:5 .. sh:3 ...... &VN 52 53&VX vrt vra vrb 54@VX ...... vrt:5 vra:5 vrb:5 .......... . &VX 55 56&VX_uim4 vrt uim vrb 57@VX_uim4 ...... vrt:5 . uim:4 vrb:5 ........... &VX_uim4 58 59&X rt ra rb 60@X ...... rt:5 ra:5 rb:5 .......... . &X 61 62&X_rc rt ra rb rc:bool 63@X_rc ...... rt:5 ra:5 rb:5 .......... rc:1 &X_rc 64 65%x_frtp 22:4 !function=times_2 66%x_frap 17:4 !function=times_2 67%x_frbp 12:4 !function=times_2 68@X_tp_ap_bp_rc ...... ....0 ....0 ....0 .......... rc:1 &X_rc rt=%x_frtp ra=%x_frap rb=%x_frbp 69 70@X_tp_a_bp_rc ...... ....0 ra:5 ....0 .......... rc:1 &X_rc rt=%x_frtp rb=%x_frbp 71 72&X_tb_rc rt rb rc:bool 73@X_tb_rc ...... rt:5 ..... rb:5 .......... rc:1 &X_tb_rc 74 75@X_tbp_rc ...... ....0 ..... ....0 .......... rc:1 &X_tb_rc rt=%x_frtp rb=%x_frbp 76 77@X_tp_b_rc ...... ....0 ..... rb:5 .......... rc:1 &X_tb_rc rt=%x_frtp 78 79@X_t_bp_rc ...... rt:5 ..... ....0 .......... rc:1 &X_tb_rc rb=%x_frbp 80 81&X_bi rt bi 82@X_bi ...... rt:5 bi:5 ----- .......... - &X_bi 83 84&X_bf bf ra rb 85@X_bf ...... bf:3 .. ra:5 rb:5 .......... . &X_bf 86 87@X_bf_ap_bp ...... bf:3 .. ....0 ....0 .......... . &X_bf ra=%x_frap rb=%x_frbp 88 89@X_bf_a_bp ...... bf:3 .. ra:5 ....0 .......... . &X_bf rb=%x_frbp 90 91&X_bf_uim bf uim rb 92@X_bf_uim ...... bf:3 . uim:6 rb:5 .......... . &X_bf_uim 93 94@X_bf_uim_bp ...... bf:3 . uim:6 ....0 .......... . &X_bf_uim rb=%x_frbp 95 96&X_bfl bf l:bool ra rb 97@X_bfl ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl 98 99%x_xt 0:1 21:5 100&X_imm8 xt imm:uint8_t 101@X_imm8 ...... ..... .. imm:8 .......... . &X_imm8 xt=%x_xt 102 103&X_uim5 xt uim:uint8_t 104@X_uim5 ...... ..... ..... uim:5 .......... . &X_uim5 xt=%x_xt 105 106&X_tb_sp_rc rt rb sp rc:bool 107@X_tb_sp_rc ...... rt:5 sp:2 ... rb:5 .......... rc:1 &X_tb_sp_rc 108 109@X_tbp_sp_rc ...... ....0 sp:2 ... ....0 .......... rc:1 &X_tb_sp_rc rt=%x_frtp rb=%x_frbp 110 111&X_tb_s_rc rt rb s:bool rc:bool 112@X_tb_s_rc ...... rt:5 s:1 .... rb:5 .......... rc:1 &X_tb_s_rc 113 114@X_tbp_s_rc ...... ....0 s:1 .... ....0 .......... rc:1 &X_tb_s_rc rt=%x_frtp rb=%x_frbp 115 116%x_rt_tsx 0:1 21:5 117@X_TSX ...... ..... ra:5 rb:5 .......... . &X rt=%x_rt_tsx 118@X_TSXP ...... ..... ra:5 rb:5 .......... . &X rt=%rt_tsxp 119 120&X_frtp_vrb frtp vrb 121@X_frtp_vrb ...... ....0 ..... vrb:5 .......... . &X_frtp_vrb frtp=%x_frtp 122 123&X_vrt_frbp vrt frbp 124@X_vrt_frbp ...... vrt:5 ..... ....0 .......... . &X_vrt_frbp frbp=%x_frbp 125 126&XX2 xt xb uim:uint8_t 127%xx2_xt 0:1 21:5 128%xx2_xb 1:1 11:5 129@XX2 ...... ..... ... uim:2 ..... ......... .. &XX2 xt=%xx2_xt xb=%xx2_xb 130 131&Z22_bf_fra bf fra dm 132@Z22_bf_fra ...... bf:3 .. fra:5 dm:6 ......... . &Z22_bf_fra 133 134%z22_frap 17:4 !function=times_2 135@Z22_bf_frap ...... bf:3 .. ....0 dm:6 ......... . &Z22_bf_fra fra=%z22_frap 136 137&Z22_ta_sh_rc rt ra sh rc:bool 138@Z22_ta_sh_rc ...... rt:5 ra:5 sh:6 ......... rc:1 &Z22_ta_sh_rc 139 140%z22_frtp 22:4 !function=times_2 141@Z22_tap_sh_rc ...... ....0 ....0 sh:6 ......... rc:1 &Z22_ta_sh_rc rt=%z22_frtp ra=%z22_frap 142 143&Z23_tab frt fra frb rmc rc:bool 144@Z23_tab ...... frt:5 fra:5 frb:5 rmc:2 ........ rc:1 &Z23_tab 145 146%z23_frtp 22:4 !function=times_2 147%z23_frap 17:4 !function=times_2 148%z23_frbp 12:4 !function=times_2 149@Z23_tabp ...... ....0 ....0 ....0 rmc:2 ........ rc:1 &Z23_tab frt=%z23_frtp fra=%z23_frap frb=%z23_frbp 150 151@Z23_tp_a_bp ...... ....0 fra:5 ....0 rmc:2 ........ rc:1 &Z23_tab frt=%z23_frtp frb=%z23_frbp 152 153&Z23_tb frt frb r:bool rmc rc:bool 154@Z23_tb ...... frt:5 .... r:1 frb:5 rmc:2 ........ rc:1 &Z23_tb 155 156@Z23_tbp ...... ....0 .... r:1 ....0 rmc:2 ........ rc:1 &Z23_tb frt=%z23_frtp frb=%z23_frbp 157 158&Z23_te_tb te frt frb rmc rc:bool 159@Z23_te_tb ...... frt:5 te:5 frb:5 rmc:2 ........ rc:1 &Z23_te_tb 160 161@Z23_te_tbp ...... ....0 te:5 ....0 rmc:2 ........ rc:1 &Z23_te_tb frt=%z23_frtp frb=%z23_frbp 162 163### Fixed-Point Load Instructions 164 165LBZ 100010 ..... ..... ................ @D 166LBZU 100011 ..... ..... ................ @D 167LBZX 011111 ..... ..... ..... 0001010111 - @X 168LBZUX 011111 ..... ..... ..... 0001110111 - @X 169 170LHZ 101000 ..... ..... ................ @D 171LHZU 101001 ..... ..... ................ @D 172LHZX 011111 ..... ..... ..... 0100010111 - @X 173LHZUX 011111 ..... ..... ..... 0100110111 - @X 174 175LHA 101010 ..... ..... ................ @D 176LHAU 101011 ..... ..... ................ @D 177LHAX 011111 ..... ..... ..... 0101010111 - @X 178LHAXU 011111 ..... ..... ..... 0101110111 - @X 179 180LWZ 100000 ..... ..... ................ @D 181LWZU 100001 ..... ..... ................ @D 182LWZX 011111 ..... ..... ..... 0000010111 - @X 183LWZUX 011111 ..... ..... ..... 0000110111 - @X 184 185LWA 111010 ..... ..... ..............10 @DS 186LWAX 011111 ..... ..... ..... 0101010101 - @X 187LWAUX 011111 ..... ..... ..... 0101110101 - @X 188 189LD 111010 ..... ..... ..............00 @DS 190LDU 111010 ..... ..... ..............01 @DS 191LDX 011111 ..... ..... ..... 0000010101 - @X 192LDUX 011111 ..... ..... ..... 0000110101 - @X 193 194LQ 111000 ..... ..... ............ ---- @DQ_rtp 195 196### Fixed-Point Store Instructions 197 198STB 100110 ..... ..... ................ @D 199STBU 100111 ..... ..... ................ @D 200STBX 011111 ..... ..... ..... 0011010111 - @X 201STBUX 011111 ..... ..... ..... 0011110111 - @X 202 203STH 101100 ..... ..... ................ @D 204STHU 101101 ..... ..... ................ @D 205STHX 011111 ..... ..... ..... 0110010111 - @X 206STHUX 011111 ..... ..... ..... 0110110111 - @X 207 208STW 100100 ..... ..... ................ @D 209STWU 100101 ..... ..... ................ @D 210STWX 011111 ..... ..... ..... 0010010111 - @X 211STWUX 011111 ..... ..... ..... 0010110111 - @X 212 213STD 111110 ..... ..... ..............00 @DS 214STDU 111110 ..... ..... ..............01 @DS 215STDX 011111 ..... ..... ..... 0010010101 - @X 216STDUX 011111 ..... ..... ..... 0010110101 - @X 217 218STQ 111110 ..... ..... ..............10 @DS_rtp 219 220### Fixed-Point Compare Instructions 221 222CMP 011111 ... - . ..... ..... 0000000000 - @X_bfl 223CMPL 011111 ... - . ..... ..... 0000100000 - @X_bfl 224CMPI 001011 ... - . ..... ................ @D_bfs 225CMPLI 001010 ... - . ..... ................ @D_bfu 226 227### Fixed-Point Arithmetic Instructions 228 229ADDI 001110 ..... ..... ................ @D 230ADDIS 001111 ..... ..... ................ @D 231 232ADDPCIS 010011 ..... ..... .......... 00010 . @DX 233 234## Fixed-Point Logical Instructions 235 236CFUGED 011111 ..... ..... ..... 0011011100 - @X 237CNTLZDM 011111 ..... ..... ..... 0000111011 - @X 238CNTTZDM 011111 ..... ..... ..... 1000111011 - @X 239PDEPD 011111 ..... ..... ..... 0010011100 - @X 240PEXTD 011111 ..... ..... ..... 0010111100 - @X 241 242### Float-Point Load Instructions 243 244LFS 110000 ..... ..... ................ @D 245LFSU 110001 ..... ..... ................ @D 246LFSX 011111 ..... ..... ..... 1000010111 - @X 247LFSUX 011111 ..... ..... ..... 1000110111 - @X 248 249LFD 110010 ..... ..... ................ @D 250LFDU 110011 ..... ..... ................ @D 251LFDX 011111 ..... ..... ..... 1001010111 - @X 252LFDUX 011111 ..... ..... ..... 1001110111 - @X 253 254### Float-Point Store Instructions 255 256STFS 110100 ..... ...... ............... @D 257STFSU 110101 ..... ...... ............... @D 258STFSX 011111 ..... ...... .... 1010010111 - @X 259STFSUX 011111 ..... ...... .... 1010110111 - @X 260 261STFD 110110 ..... ...... ............... @D 262STFDU 110111 ..... ...... ............... @D 263STFDX 011111 ..... ...... .... 1011010111 - @X 264STFDUX 011111 ..... ...... .... 1011110111 - @X 265 266### Move To/From System Register Instructions 267 268SETBC 011111 ..... ..... ----- 0110000000 - @X_bi 269SETBCR 011111 ..... ..... ----- 0110100000 - @X_bi 270SETNBC 011111 ..... ..... ----- 0111000000 - @X_bi 271SETNBCR 011111 ..... ..... ----- 0111100000 - @X_bi 272 273### Decimal Floating-Point Arithmetic Instructions 274 275DADD 111011 ..... ..... ..... 0000000010 . @X_rc 276DADDQ 111111 ..... ..... ..... 0000000010 . @X_tp_ap_bp_rc 277 278DSUB 111011 ..... ..... ..... 1000000010 . @X_rc 279DSUBQ 111111 ..... ..... ..... 1000000010 . @X_tp_ap_bp_rc 280 281DMUL 111011 ..... ..... ..... 0000100010 . @X_rc 282DMULQ 111111 ..... ..... ..... 0000100010 . @X_tp_ap_bp_rc 283 284DDIV 111011 ..... ..... ..... 1000100010 . @X_rc 285DDIVQ 111111 ..... ..... ..... 1000100010 . @X_tp_ap_bp_rc 286 287### Decimal Floating-Point Compare Instructions 288 289DCMPU 111011 ... -- ..... ..... 1010000010 - @X_bf 290DCMPUQ 111111 ... -- ..... ..... 1010000010 - @X_bf_ap_bp 291 292DCMPO 111011 ... -- ..... ..... 0010000010 - @X_bf 293DCMPOQ 111111 ... -- ..... ..... 0010000010 - @X_bf_ap_bp 294 295### Decimal Floating-Point Test Instructions 296 297DTSTDC 111011 ... -- ..... ...... 011000010 - @Z22_bf_fra 298DTSTDCQ 111111 ... -- ..... ...... 011000010 - @Z22_bf_frap 299 300DTSTDG 111011 ... -- ..... ...... 011100010 - @Z22_bf_fra 301DTSTDGQ 111111 ... -- ..... ...... 011100010 - @Z22_bf_frap 302 303DTSTEX 111011 ... -- ..... ..... 0010100010 - @X_bf 304DTSTEXQ 111111 ... -- ..... ..... 0010100010 - @X_bf_ap_bp 305 306DTSTSF 111011 ... -- ..... ..... 1010100010 - @X_bf 307DTSTSFQ 111111 ... -- ..... ..... 1010100010 - @X_bf_a_bp 308 309DTSTSFI 111011 ... - ...... ..... 1010100011 - @X_bf_uim 310DTSTSFIQ 111111 ... - ...... ..... 1010100011 - @X_bf_uim_bp 311 312### Decimal Floating-Point Quantum Adjustment Instructions 313 314DQUAI 111011 ..... ..... ..... .. 01000011 . @Z23_te_tb 315DQUAIQ 111111 ..... ..... ..... .. 01000011 . @Z23_te_tbp 316 317DQUA 111011 ..... ..... ..... .. 00000011 . @Z23_tab 318DQUAQ 111111 ..... ..... ..... .. 00000011 . @Z23_tabp 319 320DRRND 111011 ..... ..... ..... .. 00100011 . @Z23_tab 321DRRNDQ 111111 ..... ..... ..... .. 00100011 . @Z23_tp_a_bp 322 323DRINTX 111011 ..... ---- . ..... .. 01100011 . @Z23_tb 324DRINTXQ 111111 ..... ---- . ..... .. 01100011 . @Z23_tbp 325 326DRINTN 111011 ..... ---- . ..... .. 11100011 . @Z23_tb 327DRINTNQ 111111 ..... ---- . ..... .. 11100011 . @Z23_tbp 328 329### Decimal Floating-Point Conversion Instructions 330 331DCTDP 111011 ..... ----- ..... 0100000010 . @X_tb_rc 332DCTQPQ 111111 ..... ----- ..... 0100000010 . @X_tp_b_rc 333 334DRSP 111011 ..... ----- ..... 1100000010 . @X_tb_rc 335DRDPQ 111111 ..... ----- ..... 1100000010 . @X_tbp_rc 336 337DCFFIX 111011 ..... ----- ..... 1100100010 . @X_tb_rc 338DCFFIXQ 111111 ..... ----- ..... 1100100010 . @X_tp_b_rc 339DCFFIXQQ 111111 ..... 00000 ..... 1111100010 - @X_frtp_vrb 340 341DCTFIX 111011 ..... ----- ..... 0100100010 . @X_tb_rc 342DCTFIXQ 111111 ..... ----- ..... 0100100010 . @X_t_bp_rc 343DCTFIXQQ 111111 ..... 00001 ..... 1111100010 - @X_vrt_frbp 344 345### Decimal Floating-Point Format Instructions 346 347DDEDPD 111011 ..... .. --- ..... 0101000010 . @X_tb_sp_rc 348DDEDPDQ 111111 ..... .. --- ..... 0101000010 . @X_tbp_sp_rc 349 350DENBCD 111011 ..... . ---- ..... 1101000010 . @X_tb_s_rc 351DENBCDQ 111111 ..... . ---- ..... 1101000010 . @X_tbp_s_rc 352 353DXEX 111011 ..... ----- ..... 0101100010 . @X_tb_rc 354DXEXQ 111111 ..... ----- ..... 0101100010 . @X_t_bp_rc 355 356DIEX 111011 ..... ..... ..... 1101100010 . @X_rc 357DIEXQ 111111 ..... ..... ..... 1101100010 . @X_tp_a_bp_rc 358 359DSCLI 111011 ..... ..... ...... 001000010 . @Z22_ta_sh_rc 360DSCLIQ 111111 ..... ..... ...... 001000010 . @Z22_tap_sh_rc 361 362DSCRI 111011 ..... ..... ...... 001100010 . @Z22_ta_sh_rc 363DSCRIQ 111111 ..... ..... ...... 001100010 . @Z22_tap_sh_rc 364 365## Vector Bit Manipulation Instruction 366 367VCFUGED 000100 ..... ..... ..... 10101001101 @VX 368VCLZDM 000100 ..... ..... ..... 11110000100 @VX 369VCTZDM 000100 ..... ..... ..... 11111000100 @VX 370VPDEPD 000100 ..... ..... ..... 10111001101 @VX 371VPEXTD 000100 ..... ..... ..... 10110001101 @VX 372 373## Vector Permute and Formatting Instruction 374 375VEXTDUBVLX 000100 ..... ..... ..... ..... 011000 @VA 376VEXTDUBVRX 000100 ..... ..... ..... ..... 011001 @VA 377VEXTDUHVLX 000100 ..... ..... ..... ..... 011010 @VA 378VEXTDUHVRX 000100 ..... ..... ..... ..... 011011 @VA 379VEXTDUWVLX 000100 ..... ..... ..... ..... 011100 @VA 380VEXTDUWVRX 000100 ..... ..... ..... ..... 011101 @VA 381VEXTDDVLX 000100 ..... ..... ..... ..... 011110 @VA 382VEXTDDVRX 000100 ..... ..... ..... ..... 011111 @VA 383 384VINSERTB 000100 ..... - .... ..... 01100001101 @VX_uim4 385VINSERTH 000100 ..... - .... ..... 01101001101 @VX_uim4 386VINSERTW 000100 ..... - .... ..... 01110001101 @VX_uim4 387VINSERTD 000100 ..... - .... ..... 01111001101 @VX_uim4 388 389VINSBLX 000100 ..... ..... ..... 01000001111 @VX 390VINSBRX 000100 ..... ..... ..... 01100001111 @VX 391VINSHLX 000100 ..... ..... ..... 01001001111 @VX 392VINSHRX 000100 ..... ..... ..... 01101001111 @VX 393VINSWLX 000100 ..... ..... ..... 01010001111 @VX 394VINSWRX 000100 ..... ..... ..... 01110001111 @VX 395VINSDLX 000100 ..... ..... ..... 01011001111 @VX 396VINSDRX 000100 ..... ..... ..... 01111001111 @VX 397 398VINSW 000100 ..... - .... ..... 00011001111 @VX_uim4 399VINSD 000100 ..... - .... ..... 00111001111 @VX_uim4 400 401VINSBVLX 000100 ..... ..... ..... 00000001111 @VX 402VINSBVRX 000100 ..... ..... ..... 00100001111 @VX 403VINSHVLX 000100 ..... ..... ..... 00001001111 @VX 404VINSHVRX 000100 ..... ..... ..... 00101001111 @VX 405VINSWVLX 000100 ..... ..... ..... 00010001111 @VX 406VINSWVRX 000100 ..... ..... ..... 00110001111 @VX 407 408VSLDBI 000100 ..... ..... ..... 00 ... 010110 @VN 409VSRDBI 000100 ..... ..... ..... 01 ... 010110 @VN 410 411# VSX Load/Store Instructions 412 413LXV 111101 ..... ..... ............ . 001 @DQ_TSX 414STXV 111101 ..... ..... ............ . 101 @DQ_TSX 415LXVP 000110 ..... ..... ............ 0000 @DQ_TSXP 416STXVP 000110 ..... ..... ............ 0001 @DQ_TSXP 417LXVX 011111 ..... ..... ..... 0100 - 01100 . @X_TSX 418STXVX 011111 ..... ..... ..... 0110001100 . @X_TSX 419LXVPX 011111 ..... ..... ..... 0101001101 - @X_TSXP 420STXVPX 011111 ..... ..... ..... 0111001101 - @X_TSXP 421 422## VSX splat instruction 423 424XXSPLTIB 111100 ..... 00 ........ 0101101000 . @X_imm8 425XXSPLTW 111100 ..... ---.. ..... 010100100 . . @XX2 426 427## VSX Vector Load Special Value Instruction 428 429LXVKQ 111100 ..... 11111 ..... 0101101000 . @X_uim5 430