target/ppc: Implemented pmxvf*ger*
[qemu/armbru.git] / target / ppc / insn64.decode
blob5ecc5c85bf0bd47bc9f9931546e9b2413209306d
2 # Power ISA decode for 64-bit prefixed insns (opcode space 0 and 1)
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/>.
20 # Format MLS:D and 8LS:D
21 &PLS_D          rt ra si:int64_t r:bool
22 %pls_si         32:s18 0:16
23 @PLS_D          ...... .. ... r:1 .. .................. \
24                 ...... rt:5 ra:5 ................       \
25                 &PLS_D si=%pls_si
26 @8LS_D_TSX      ...... .. . .. r:1 .. .................. \
27                 ..... rt:6 ra:5 ................         \
28                 &PLS_D si=%pls_si
30 %rt_tsxp        21:1 22:4 !function=times_2
31 @8LS_D_TSXP     ...... .. . .. r:1 .. .................. \
32                 ...... ..... ra:5 ................       \
33                 &PLS_D si=%pls_si rt=%rt_tsxp
35 @8LS_D          ...... .. . .. r:1 .. .................. \
36                 ...... rt:5 ra:5 ................        \
37                 &PLS_D si=%pls_si
39 # Format 8RR:D
40 %8rr_si         32:s16 0:16
41 %8rr_xt         16:1 21:5
42 &8RR_D_IX       xt ix si
43 @8RR_D_IX       ...... .. .... .. .. ................ \
44                 ...... ..... ... ix:1 . ................ \
45                 &8RR_D_IX si=%8rr_si xt=%8rr_xt
46 &8RR_D          xt si:int32_t
47 @8RR_D          ...... .. .... .. .. ................ \
48                 ...... ..... ....  . ................ \
49                 &8RR_D si=%8rr_si xt=%8rr_xt
51 # Format 8RR:XX4
52 %8rr_xx_xt      0:1 21:5
53 %8rr_xx_xa      2:1 16:5
54 %8rr_xx_xb      1:1 11:5
55 %8rr_xx_xc      3:1  6:5
56 &8RR_XX4        xt xa xb xc
57 @8RR_XX4        ........ ........ ........ ........ \
58                 ...... ..... ..... ..... ..... .. .... \
59                 &8RR_XX4 xt=%8rr_xx_xt xa=%8rr_xx_xa xb=%8rr_xx_xb xc=%8rr_xx_xc
61 &8RR_XX4_imm    xt xa xb xc imm
62 @8RR_XX4_imm    ........ ........ ........ imm:8 \
63                 ...... ..... ..... ..... ..... .. .... \
64                 &8RR_XX4_imm xt=%8rr_xx_xt xa=%8rr_xx_xa xb=%8rr_xx_xb xc=%8rr_xx_xc
66 &8RR_XX4_uim3   xt xa xb xc uim3
67 @8RR_XX4_uim3   ...... .. .... .. ............... uim3:3 \
68                 ...... ..... ..... ..... ..... .. ....   \
69                 &8RR_XX4_uim3 xt=%8rr_xx_xt xa=%8rr_xx_xa xb=%8rr_xx_xb xc=%8rr_xx_xc
71 # Format MMIRR:XX3
72 &MMIRR_XX3      !extern xa xb xt pmsk xmsk ymsk
73 %xx3_xa         2:1 16:5
74 %xx3_xb         1:1 11:5
75 %xx3_at         23:3
76 %xx3_xa_pair    2:1 17:4 !function=times_2
77 @MMIRR_XX3      ...... .. .... .. . . ........ xmsk:4 ymsk:4  \
78                 ...... ... .. ..... ..... ........ ...  \
79                 &MMIRR_XX3 xa=%xx3_xa xb=%xx3_xb xt=%xx3_at
81 @MMIRR_XX3_NO_P ...... .. .... .. . . ........ xmsk:4 .... \
82                 ...... ... .. ..... ..... ........ ... \
83                 &MMIRR_XX3 xb=%xx3_xb xt=%xx3_at pmsk=1
85 ### Fixed-Point Load Instructions
87 PLBZ            000001 10 0--.-- .................. \
88                 100010 ..... ..... ................     @PLS_D
89 PLHZ            000001 10 0--.-- .................. \
90                 101000 ..... ..... ................     @PLS_D
91 PLHA            000001 10 0--.-- .................. \
92                 101010 ..... ..... ................     @PLS_D
93 PLWZ            000001 10 0--.-- .................. \
94                 100000 ..... ..... ................     @PLS_D
95 PLWA            000001 00 0--.-- .................. \
96                 101001 ..... ..... ................     @PLS_D
97 PLD             000001 00 0--.-- .................. \
98                 111001 ..... ..... ................     @PLS_D
99 PLQ             000001 00 0--.-- .................. \
100                 111000 ..... ..... ................     @PLS_D
102 ### Fixed-Point Store Instructions
104 PSTW            000001 10 0--.-- .................. \
105                 100100 ..... ..... ................     @PLS_D
106 PSTB            000001 10 0--.-- .................. \
107                 100110 ..... ..... ................     @PLS_D
108 PSTH            000001 10 0--.-- .................. \
109                 101100 ..... ..... ................     @PLS_D
111 PSTD            000001 00 0--.-- .................. \
112                 111101 ..... ..... ................     @PLS_D
113 PSTQ            000001 00 0--.-- .................. \
114                 111100 ..... ..... ................     @PLS_D
116 ### Fixed-Point Arithmetic Instructions
118 PADDI           000001 10 0--.-- ..................     \
119                 001110 ..... ..... ................     @PLS_D
121 ### Float-Point Load and Store Instructions
123 PLFS            000001 10 0--.-- .................. \
124                 110000 ..... ..... ................     @PLS_D
125 PLFD            000001 10 0--.-- .................. \
126                 110010 ..... ..... ................     @PLS_D
127 PSTFS           000001 10 0--.-- .................. \
128                 110100 ..... ..... ................     @PLS_D
129 PSTFD           000001 10 0--.-- .................. \
130                 110110 ..... ..... ................     @PLS_D
132 ## VSX GER instruction
134 PMXVI4GER8      000001 11 1001 -- - - pmsk:8 ........              \
135                 111011 ... -- ..... ..... 00100011 ..-  @MMIRR_XX3
136 PMXVI4GER8PP    000001 11 1001 -- - - pmsk:8 ........              \
137                 111011 ... -- ..... ..... 00100010 ..-  @MMIRR_XX3
138 PMXVI8GER4      000001 11 1001 -- - - pmsk:4 ---- ........         \
139                 111011 ... -- ..... ..... 00000011 ..-  @MMIRR_XX3
140 PMXVI8GER4PP    000001 11 1001 -- - - pmsk:4 ---- ........         \
141                 111011 ... -- ..... ..... 00000010 ..-  @MMIRR_XX3
142 PMXVI16GER2     000001 11 1001 -- - - pmsk:2 ------ ........       \
143                 111011 ... -- ..... ..... 01001011 ..-  @MMIRR_XX3
144 PMXVI16GER2PP   000001 11 1001 -- - - pmsk:2 ------ ........       \
145                 111011 ... -- ..... ..... 01101011 ..-  @MMIRR_XX3
146 PMXVI8GER4SPP   000001 11 1001 -- - - pmsk:4 ---- ........         \
147                 111011 ... -- ..... ..... 01100011 ..-  @MMIRR_XX3
148 PMXVI16GER2S    000001 11 1001 -- - - pmsk:2 ------ ........       \
149                 111011 ... -- ..... ..... 00101011 ..-  @MMIRR_XX3
150 PMXVI16GER2SPP  000001 11 1001 -- - - pmsk:2 ------ ........       \
151                 111011 ... -- ..... ..... 00101010 ..-  @MMIRR_XX3
153 PMXVF16GER2     000001 11 1001 -- - - pmsk:2 ------ ........ \
154                 111011 ... -- ..... ..... 00010011 ..-  @MMIRR_XX3
155 PMXVF16GER2PP   000001 11 1001 -- - - pmsk:2 ------ ........ \
156                 111011 ... -- ..... ..... 00010010 ..-  @MMIRR_XX3
157 PMXVF16GER2PN   000001 11 1001 -- - - pmsk:2 ------ ........ \
158                 111011 ... -- ..... ..... 10010010 ..-  @MMIRR_XX3
159 PMXVF16GER2NP   000001 11 1001 -- - - pmsk:2 ------ ........ \
160                 111011 ... -- ..... ..... 01010010 ..-  @MMIRR_XX3
161 PMXVF16GER2NN   000001 11 1001 -- - - pmsk:2 ------ ........ \
162                 111011 ... -- ..... ..... 11010010 ..-  @MMIRR_XX3
164 PMXVF32GER      000001 11 1001 -- - - -------- .... ymsk:4 \
165                 111011 ... -- ..... ..... 00011011 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa
166 PMXVF32GERPP    000001 11 1001 -- - - -------- .... ymsk:4 \
167                 111011 ... -- ..... ..... 00011010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa
168 PMXVF32GERPN    000001 11 1001 -- - - -------- .... ymsk:4 \
169                 111011 ... -- ..... ..... 10011010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa
170 PMXVF32GERNP    000001 11 1001 -- - - -------- .... ymsk:4 \
171                 111011 ... -- ..... ..... 01011010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa
172 PMXVF32GERNN    000001 11 1001 -- - - -------- .... ymsk:4 \
173                 111011 ... -- ..... ..... 11011010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa
175 PMXVF64GER      000001 11 1001 -- - - -------- .... ymsk:2 -- \
176                 111011 ... -- ....0 ..... 00111011 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa_pair
177 PMXVF64GERPP    000001 11 1001 -- - - -------- .... ymsk:2 -- \
178                 111011 ... -- ....0 ..... 00111010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa_pair
179 PMXVF64GERPN    000001 11 1001 -- - - -------- .... ymsk:2 -- \
180                 111011 ... -- ....0 ..... 10111010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa_pair
181 PMXVF64GERNP    000001 11 1001 -- - - -------- .... ymsk:2 -- \
182                 111011 ... -- ....0 ..... 01111010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa_pair
183 PMXVF64GERNN    000001 11 1001 -- - - -------- .... ymsk:2 -- \
184                 111011 ... -- ....0 ..... 11111010 ..-  @MMIRR_XX3_NO_P xa=%xx3_xa_pair
186 ### Prefixed No-operation Instruction
188 @PNOP           000001 11 0000-- 000000000000000000     \
189                 ................................
192   [
193     ## Invalid suffixes: Branch instruction
194     # bc[l][a]
195     INVALID     ................................        \
196                 010000--------------------------        @PNOP
197     # b[l][a]
198     INVALID     ................................        \
199                 010010--------------------------        @PNOP
200     # bclr[l]
201     INVALID     ................................        \
202                 010011---------------0000010000-        @PNOP
203     # bcctr[l]
204     INVALID     ................................        \
205                 010011---------------1000010000-        @PNOP
206     # bctar[l]
207     INVALID     ................................        \
208                 010011---------------1000110000-        @PNOP
210     ## Invalid suffixes: rfebb
211     INVALID     ................................        \
212                 010011---------------0010010010-        @PNOP
214     ## Invalid suffixes: context synchronizing other than isync
215     # sc
216     INVALID     ................................        \
217                 010001------------------------1-        @PNOP
218     # scv
219     INVALID     ................................        \
220                 010001------------------------01        @PNOP
221     # rfscv
222     INVALID     ................................        \
223                 010011---------------0001010010-        @PNOP
224     # rfid
225     INVALID     ................................        \
226                 010011---------------0000010010-        @PNOP
227     # hrfid
228     INVALID     ................................        \
229                 010011---------------0100010010-        @PNOP
230     # urfid
231     INVALID     ................................        \
232                 010011---------------0100110010-        @PNOP
233     # stop
234     INVALID     ................................        \
235                 010011---------------0101110010-        @PNOP
236     # mtmsr w/ L=0
237     INVALID     ................................        \
238                 011111---------0-----0010010010-        @PNOP
239     # mtmsrd w/ L=0
240     INVALID     ................................        \
241                 011111---------0-----0010110010-        @PNOP
243     ## Invalid suffixes: Service Processor Attention
244     INVALID     ................................        \
245                 000000----------------100000000-        @PNOP
246   ]
248   ## Valid suffixes
249   PNOP          ................................        \
250                 --------------------------------        @PNOP
253 ### VSX instructions
255 PLXSD           000001 00 0--.-- .................. \
256                 101010 ..... ..... ................     @8LS_D
258 PSTXSD          000001 00 0--.-- .................. \
259                 101110 ..... ..... ................     @8LS_D
261 PLXSSP          000001 00 0--.-- .................. \
262                 101011 ..... ..... ................     @8LS_D
264 PSTXSSP         000001 00 0--.-- .................. \
265                 101111 ..... ..... ................     @8LS_D
267 PLXV            000001 00 0--.-- .................. \
268                 11001 ...... ..... ................     @8LS_D_TSX
269 PSTXV           000001 00 0--.-- .................. \
270                 11011 ...... ..... ................     @8LS_D_TSX
271 PLXVP           000001 00 0--.-- .................. \
272                 111010 ..... ..... ................     @8LS_D_TSXP
273 PSTXVP          000001 00 0--.-- .................. \
274                 111110 ..... ..... ................     @8LS_D_TSXP
276 XXEVAL          000001 01 0000 -- ---------- ........ \
277                 100010 ..... ..... ..... ..... 01 ....  @8RR_XX4_imm
279 XXSPLTIDP       000001 01 0000 -- -- ................ \
280                 100000 ..... 0010 . ................    @8RR_D
281 XXSPLTIW        000001 01 0000 -- -- ................ \
282                 100000 ..... 0011 . ................    @8RR_D
283 XXSPLTI32DX     000001 01 0000 -- -- ................ \
284                 100000 ..... 000 .. ................    @8RR_D_IX
286 XXBLENDVD       000001 01 0000 -- ------------------ \
287                 100001 ..... ..... ..... ..... 11 ....  @8RR_XX4
288 XXBLENDVW       000001 01 0000 -- ------------------ \
289                 100001 ..... ..... ..... ..... 10 ....  @8RR_XX4
290 XXBLENDVH       000001 01 0000 -- ------------------ \
291                 100001 ..... ..... ..... ..... 01 ....  @8RR_XX4
292 XXBLENDVB       000001 01 0000 -- ------------------ \
293                 100001 ..... ..... ..... ..... 00 ....  @8RR_XX4
295 XXPERMX         000001 01 0000 -- --------------- ... \
296                 100010 ..... ..... ..... ..... 00 ....  @8RR_XX4_uim3