OSDN Git Service

target/mips: Fix MSA BZ/BNZ opcodes displacement
[qmiga/qemu.git] / target / mips / tcg / msa.decode
1 # MIPS SIMD Architecture Module instruction set
2 #
3 # Copyright (C) 2020  Philippe Mathieu-Daudé
4 #
5 # SPDX-License-Identifier: LGPL-2.1-or-later
6 #
7 # Reference:
8 #       MIPS Architecture for Programmers Volume IV-j
9 #       - The MIPS32 SIMD Architecture Module, Revision 1.12
10 #         (Document Number: MD00866-2B-MSA32-AFP-01.12)
11 #       - The MIPS64 SIMD Architecture Module, Revision 1.12
12 #         (Document Number: MD00868-1D-MSA64-AFP-01.12)
13
14 &r                  rs rt rd sa
15
16 &msa_r              df  wd ws wt
17 &msa_bz             df        wt sa
18 &msa_ldi            df  wd       sa
19 &msa_i              df  wd ws    sa
20 &msa_bit            df  wd ws       m
21 &msa_elm_df         df  wd ws       n
22 &msa_elm                wd ws
23
24 %elm_df             16:6 !function=elm_df
25 %elm_n              16:6 !function=elm_n
26 %bit_df             16:7 !function=bit_df
27 %bit_m              16:7 !function=bit_m
28 %2r_df_w            16:1 !function=plus_2
29 %3r_df_h            21:1 !function=plus_1
30 %3r_df_w            21:1 !function=plus_2
31
32 @lsa                ...... rs:5 rt:5 rd:5 ... sa:2 ......   &r
33 @ldst               ...... sa:s10 ws:5 wd:5 .... df:2       &msa_i
34 @bz_v               ...... ... ..    wt:5 sa:s16            &msa_bz df=3
35 @bz                 ...... ...  df:2 wt:5 sa:s16            &msa_bz
36 @elm_df             ...... .... ......    ws:5 wd:5 ......  &msa_elm_df df=%elm_df n=%elm_n
37 @elm                ...... ..........     ws:5 wd:5 ......  &msa_elm
38 @vec                ...... .....     wt:5 ws:5 wd:5 ......  &msa_r df=0
39 @2r                 ...... ........  df:2 ws:5 wd:5 ......  &msa_r wt=0
40 @2rf                ...... ......... .    ws:5 wd:5 ......  &msa_r wt=0 df=%2r_df_w
41 @3r                 ...... ...  df:2 wt:5 ws:5 wd:5 ......  &msa_r
42 @3rf_h              ...... .... .    wt:5 ws:5 wd:5 ......  &msa_r df=%3r_df_h
43 @3rf_w              ...... .... .    wt:5 ws:5 wd:5 ......  &msa_r df=%3r_df_w
44 @u5                 ...... ... df:2 sa:5  ws:5 wd:5 ......  &msa_i
45 @s5                 ...... ... df:2 sa:s5 ws:5 wd:5 ......  &msa_i
46 @i8_df              ......     df:2 sa:s8 ws:5 wd:5 ......  &msa_i
47 @i8                 ...... ..       sa:s8 ws:5 wd:5 ......  &msa_i df=0
48 @ldi                ...... ... df:2 sa:s10     wd:5 ......  &msa_ldi
49 @bit                ...... ... .......    ws:5 wd:5 ......  &msa_bit df=%bit_df m=%bit_m
50
51 LSA                 000000 ..... ..... ..... 000 .. 000101  @lsa
52 DLSA                000000 ..... ..... ..... 000 .. 010101  @lsa
53
54 BZ_V                010001 01011  ..... ................    @bz_v
55 BNZ_V               010001 01111  ..... ................    @bz_v
56 BZ                  010001 110 .. ..... ................    @bz
57 BNZ                 010001 111 .. ..... ................    @bz
58
59 ANDI                011110 00 ........ ..... .....  000000  @i8
60 ORI                 011110 01 ........ ..... .....  000000  @i8
61 NORI                011110 10 ........ ..... .....  000000  @i8
62 XORI                011110 11 ........ ..... .....  000000  @i8
63 BMNZI               011110 00 ........ ..... .....  000001  @i8
64 BMZI                011110 01 ........ ..... .....  000001  @i8
65 BSELI               011110 10 ........ ..... .....  000001  @i8
66 SHF                 011110 .. ........ ..... .....  000010  @i8_df
67
68 ADDVI               011110 000 .. ..... ..... ..... 000110  @u5
69 SUBVI               011110 001 .. ..... ..... ..... 000110  @u5
70 MAXI_S              011110 010 .. ..... ..... ..... 000110  @s5
71 MAXI_U              011110 011 .. ..... ..... ..... 000110  @u5
72 MINI_S              011110 100 .. ..... ..... ..... 000110  @s5
73 MINI_U              011110 101 .. ..... ..... ..... 000110  @u5
74
75 CEQI                011110 000 .. ..... ..... ..... 000111  @s5
76 CLTI_S              011110 010 .. ..... ..... ..... 000111  @s5
77 CLTI_U              011110 011 .. ..... ..... ..... 000111  @u5
78 CLEI_S              011110 100 .. ..... ..... ..... 000111  @s5
79 CLEI_U              011110 101 .. ..... ..... ..... 000111  @u5
80
81 LDI                 011110 110 .. ..........  ..... 000111  @ldi
82
83 SLLI                011110 000 ....... ..... .....  001001  @bit
84 SRAI                011110 001 ....... ..... .....  001001  @bit
85 SRLI                011110 010 ....... ..... .....  001001  @bit
86 BCLRI               011110 011 ....... ..... .....  001001  @bit
87 BSETI               011110 100 ....... ..... .....  001001  @bit
88 BNEGI               011110 101 ....... ..... .....  001001  @bit
89 BINSLI              011110 110 ....... ..... .....  001001  @bit
90 BINSRI              011110 111 ....... ..... .....  001001  @bit
91
92 SAT_S               011110 000 ....... ..... .....  001010  @bit
93 SAT_U               011110 001 ....... ..... .....  001010  @bit
94 SRARI               011110 010 ....... ..... .....  001010  @bit
95 SRLRI               011110 011 ....... ..... .....  001010  @bit
96
97 SLL                 011110 000.. ..... ..... .....  001101  @3r
98 SRA                 011110 001.. ..... ..... .....  001101  @3r
99 SRL                 011110 010.. ..... ..... .....  001101  @3r
100 BCLR                011110 011.. ..... ..... .....  001101  @3r
101 BSET                011110 100.. ..... ..... .....  001101  @3r
102 BNEG                011110 101.. ..... ..... .....  001101  @3r
103 BINSL               011110 110.. ..... ..... .....  001101  @3r
104 BINSR               011110 111.. ..... ..... .....  001101  @3r
105
106 ADDV                011110 000.. ..... ..... .....  001110  @3r
107 SUBV                011110 001.. ..... ..... .....  001110  @3r
108 MAX_S               011110 010.. ..... ..... .....  001110  @3r
109 MAX_U               011110 011.. ..... ..... .....  001110  @3r
110 MIN_S               011110 100.. ..... ..... .....  001110  @3r
111 MIN_U               011110 101.. ..... ..... .....  001110  @3r
112 MAX_A               011110 110.. ..... ..... .....  001110  @3r
113 MIN_A               011110 111.. ..... ..... .....  001110  @3r
114
115 CEQ                 011110 000.. ..... ..... .....  001111  @3r
116 CLT_S               011110 010.. ..... ..... .....  001111  @3r
117 CLT_U               011110 011.. ..... ..... .....  001111  @3r
118 CLE_S               011110 100.. ..... ..... .....  001111  @3r
119 CLE_U               011110 101.. ..... ..... .....  001111  @3r
120
121 ADD_A               011110 000.. ..... ..... .....  010000  @3r
122 ADDS_A              011110 001.. ..... ..... .....  010000  @3r
123 ADDS_S              011110 010.. ..... ..... .....  010000  @3r
124 ADDS_U              011110 011.. ..... ..... .....  010000  @3r
125 AVE_S               011110 100.. ..... ..... .....  010000  @3r
126 AVE_U               011110 101.. ..... ..... .....  010000  @3r
127 AVER_S              011110 110.. ..... ..... .....  010000  @3r
128 AVER_U              011110 111.. ..... ..... .....  010000  @3r
129
130 SUBS_S              011110 000.. ..... ..... .....  010001  @3r
131 SUBS_U              011110 001.. ..... ..... .....  010001  @3r
132 SUBSUS_U            011110 010.. ..... ..... .....  010001  @3r
133 SUBSUU_S            011110 011.. ..... ..... .....  010001  @3r
134 ASUB_S              011110 100.. ..... ..... .....  010001  @3r
135 ASUB_U              011110 101.. ..... ..... .....  010001  @3r
136
137 MULV                011110 000.. ..... ..... .....  010010  @3r
138 MADDV               011110 001.. ..... ..... .....  010010  @3r
139 MSUBV               011110 010.. ..... ..... .....  010010  @3r
140 DIV_S               011110 100.. ..... ..... .....  010010  @3r
141 DIV_U               011110 101.. ..... ..... .....  010010  @3r
142 MOD_S               011110 110.. ..... ..... .....  010010  @3r
143 MOD_U               011110 111.. ..... ..... .....  010010  @3r
144
145 DOTP_S              011110 000.. ..... ..... .....  010011  @3r
146 DOTP_U              011110 001.. ..... ..... .....  010011  @3r
147 DPADD_S             011110 010.. ..... ..... .....  010011  @3r
148 DPADD_U             011110 011.. ..... ..... .....  010011  @3r
149 DPSUB_S             011110 100.. ..... ..... .....  010011  @3r
150 DPSUB_U             011110 101.. ..... ..... .....  010011  @3r
151
152 SLD                 011110 000 .. ..... ..... ..... 010100  @3r
153 SPLAT               011110 001 .. ..... ..... ..... 010100  @3r
154 PCKEV               011110 010 .. ..... ..... ..... 010100  @3r
155 PCKOD               011110 011 .. ..... ..... ..... 010100  @3r
156 ILVL                011110 100 .. ..... ..... ..... 010100  @3r
157 ILVR                011110 101 .. ..... ..... ..... 010100  @3r
158 ILVEV               011110 110 .. ..... ..... ..... 010100  @3r
159 ILVOD               011110 111 .. ..... ..... ..... 010100  @3r
160
161 VSHF                011110 000 .. ..... ..... ..... 010101  @3r
162 SRAR                011110 001 .. ..... ..... ..... 010101  @3r
163 SRLR                011110 010 .. ..... ..... ..... 010101  @3r
164 HADD_S              011110 100.. ..... ..... .....  010101  @3r
165 HADD_U              011110 101.. ..... ..... .....  010101  @3r
166 HSUB_S              011110 110.. ..... ..... .....  010101  @3r
167 HSUB_U              011110 111.. ..... ..... .....  010101  @3r
168
169 {
170   CTCMSA            011110 0000111110  ..... .....  011001  @elm
171   SLDI              011110 0000 ...... ..... .....  011001  @elm_df
172 }
173 {
174   CFCMSA            011110 0001111110  ..... .....  011001  @elm
175   SPLATI            011110 0001 ...... ..... .....  011001  @elm_df
176 }
177 {
178   MOVE_V            011110 0010111110  ..... .....  011001  @elm
179   COPY_S            011110 0010 ...... ..... .....  011001  @elm_df
180 }
181 COPY_U              011110 0011 ...... ..... .....  011001  @elm_df
182 INSERT              011110 0100 ...... ..... .....  011001  @elm_df
183 INSVE               011110 0101 ...... ..... .....  011001  @elm_df
184
185 FCAF                011110 0000 . ..... ..... ..... 011010  @3rf_w
186 FCUN                011110 0001 . ..... ..... ..... 011010  @3rf_w
187 FCEQ                011110 0010 . ..... ..... ..... 011010  @3rf_w
188 FCUEQ               011110 0011 . ..... ..... ..... 011010  @3rf_w
189 FCLT                011110 0100 . ..... ..... ..... 011010  @3rf_w
190 FCULT               011110 0101 . ..... ..... ..... 011010  @3rf_w
191 FCLE                011110 0110 . ..... ..... ..... 011010  @3rf_w
192 FCULE               011110 0111 . ..... ..... ..... 011010  @3rf_w
193 FSAF                011110 1000 . ..... ..... ..... 011010  @3rf_w
194 FSUN                011110 1001 . ..... ..... ..... 011010  @3rf_w
195 FSEQ                011110 1010 . ..... ..... ..... 011010  @3rf_w
196 FSUEQ               011110 1011 . ..... ..... ..... 011010  @3rf_w
197 FSLT                011110 1100 . ..... ..... ..... 011010  @3rf_w
198 FSULT               011110 1101 . ..... ..... ..... 011010  @3rf_w
199 FSLE                011110 1110 . ..... ..... ..... 011010  @3rf_w
200 FSULE               011110 1111 . ..... ..... ..... 011010  @3rf_w
201
202 FADD                011110 0000 . ..... ..... ..... 011011  @3rf_w
203 FSUB                011110 0001 . ..... ..... ..... 011011  @3rf_w
204 FMUL                011110 0010 . ..... ..... ..... 011011  @3rf_w
205 FDIV                011110 0011 . ..... ..... ..... 011011  @3rf_w
206 FMADD               011110 0100 . ..... ..... ..... 011011  @3rf_w
207 FMSUB               011110 0101 . ..... ..... ..... 011011  @3rf_w
208 FEXP2               011110 0111 . ..... ..... ..... 011011  @3rf_w
209 FEXDO               011110 1000 . ..... ..... ..... 011011  @3rf_w
210 FTQ                 011110 1010 . ..... ..... ..... 011011  @3rf_w
211 FMIN                011110 1100 . ..... ..... ..... 011011  @3rf_w
212 FMIN_A              011110 1101 . ..... ..... ..... 011011  @3rf_w
213 FMAX                011110 1110 . ..... ..... ..... 011011  @3rf_w
214 FMAX_A              011110 1111 . ..... ..... ..... 011011  @3rf_w
215
216 FCOR                011110 0001 . ..... ..... ..... 011100  @3rf_w
217 FCUNE               011110 0010 . ..... ..... ..... 011100  @3rf_w
218 FCNE                011110 0011 . ..... ..... ..... 011100  @3rf_w
219 MUL_Q               011110 0100 . ..... ..... ..... 011100  @3rf_h
220 MADD_Q              011110 0101 . ..... ..... ..... 011100  @3rf_h
221 MSUB_Q              011110 0110 . ..... ..... ..... 011100  @3rf_h
222 FSOR                011110 1001 . ..... ..... ..... 011100  @3rf_w
223 FSUNE               011110 1010 . ..... ..... ..... 011100  @3rf_w
224 FSNE                011110 1011 . ..... ..... ..... 011100  @3rf_w
225 MULR_Q              011110 1100 . ..... ..... ..... 011100  @3rf_h
226 MADDR_Q             011110 1101 . ..... ..... ..... 011100  @3rf_h
227 MSUBR_Q             011110 1110 . ..... ..... ..... 011100  @3rf_h
228
229 AND_V               011110 00000 ..... ..... .....  011110  @vec
230 OR_V                011110 00001 ..... ..... .....  011110  @vec
231 NOR_V               011110 00010 ..... ..... .....  011110  @vec
232 XOR_V               011110 00011 ..... ..... .....  011110  @vec
233 BMNZ_V              011110 00100 ..... ..... .....  011110  @vec
234 BMZ_V               011110 00101 ..... ..... .....  011110  @vec
235 BSEL_V              011110 00110 ..... ..... .....  011110  @vec
236 FILL                011110 11000000 .. ..... .....  011110  @2r
237 PCNT                011110 11000001 .. ..... .....  011110  @2r
238 NLOC                011110 11000010 .. ..... .....  011110  @2r
239 NLZC                011110 11000011 .. ..... .....  011110  @2r
240 FCLASS              011110 110010000 . ..... .....  011110  @2rf
241 FTRUNC_S            011110 110010001 . ..... .....  011110  @2rf
242 FTRUNC_U            011110 110010010 . ..... .....  011110  @2rf
243 FSQRT               011110 110010011 . ..... .....  011110  @2rf
244 FRSQRT              011110 110010100 . ..... .....  011110  @2rf
245 FRCP                011110 110010101 . ..... .....  011110  @2rf
246 FRINT               011110 110010110 . ..... .....  011110  @2rf
247 FLOG2               011110 110010111 . ..... .....  011110  @2rf
248 FEXUPL              011110 110011000 . ..... .....  011110  @2rf
249 FEXUPR              011110 110011001 . ..... .....  011110  @2rf
250 FFQL                011110 110011010 . ..... .....  011110  @2rf
251 FFQR                011110 110011011 . ..... .....  011110  @2rf
252 FTINT_S             011110 110011100 . ..... .....  011110  @2rf
253 FTINT_U             011110 110011101 . ..... .....  011110  @2rf
254 FFINT_S             011110 110011110 . ..... .....  011110  @2rf
255 FFINT_U             011110 110011111 . ..... .....  011110  @2rf
256
257 LD                  011110 .......... ..... .....   1000 .. @ldst
258 ST                  011110 .......... ..... .....   1001 .. @ldst