xref: /qemu/target/mips/tcg/msa.decode (revision 727385c4)
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:16             &msa_bz df=3
35@bz                 ...... ...  df:2 wt:5 sa:16             &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
51LSA                 000000 ..... ..... ..... 000 .. 000101  @lsa
52DLSA                000000 ..... ..... ..... 000 .. 010101  @lsa
53
54BZ_V                010001 01011  ..... ................    @bz_v
55BNZ_V               010001 01111  ..... ................    @bz_v
56BZ                  010001 110 .. ..... ................    @bz
57BNZ                 010001 111 .. ..... ................    @bz
58
59ANDI                011110 00 ........ ..... .....  000000  @i8
60ORI                 011110 01 ........ ..... .....  000000  @i8
61NORI                011110 10 ........ ..... .....  000000  @i8
62XORI                011110 11 ........ ..... .....  000000  @i8
63BMNZI               011110 00 ........ ..... .....  000001  @i8
64BMZI                011110 01 ........ ..... .....  000001  @i8
65BSELI               011110 10 ........ ..... .....  000001  @i8
66SHF                 011110 .. ........ ..... .....  000010  @i8_df
67
68ADDVI               011110 000 .. ..... ..... ..... 000110  @u5
69SUBVI               011110 001 .. ..... ..... ..... 000110  @u5
70MAXI_S              011110 010 .. ..... ..... ..... 000110  @s5
71MAXI_U              011110 011 .. ..... ..... ..... 000110  @u5
72MINI_S              011110 100 .. ..... ..... ..... 000110  @s5
73MINI_U              011110 101 .. ..... ..... ..... 000110  @u5
74
75CEQI                011110 000 .. ..... ..... ..... 000111  @s5
76CLTI_S              011110 010 .. ..... ..... ..... 000111  @s5
77CLTI_U              011110 011 .. ..... ..... ..... 000111  @u5
78CLEI_S              011110 100 .. ..... ..... ..... 000111  @s5
79CLEI_U              011110 101 .. ..... ..... ..... 000111  @u5
80
81LDI                 011110 110 .. ..........  ..... 000111  @ldi
82
83SLLI                011110 000 ....... ..... .....  001001  @bit
84SRAI                011110 001 ....... ..... .....  001001  @bit
85SRLI                011110 010 ....... ..... .....  001001  @bit
86BCLRI               011110 011 ....... ..... .....  001001  @bit
87BSETI               011110 100 ....... ..... .....  001001  @bit
88BNEGI               011110 101 ....... ..... .....  001001  @bit
89BINSLI              011110 110 ....... ..... .....  001001  @bit
90BINSRI              011110 111 ....... ..... .....  001001  @bit
91
92SAT_S               011110 000 ....... ..... .....  001010  @bit
93SAT_U               011110 001 ....... ..... .....  001010  @bit
94SRARI               011110 010 ....... ..... .....  001010  @bit
95SRLRI               011110 011 ....... ..... .....  001010  @bit
96
97SLL                 011110 000.. ..... ..... .....  001101  @3r
98SRA                 011110 001.. ..... ..... .....  001101  @3r
99SRL                 011110 010.. ..... ..... .....  001101  @3r
100BCLR                011110 011.. ..... ..... .....  001101  @3r
101BSET                011110 100.. ..... ..... .....  001101  @3r
102BNEG                011110 101.. ..... ..... .....  001101  @3r
103BINSL               011110 110.. ..... ..... .....  001101  @3r
104BINSR               011110 111.. ..... ..... .....  001101  @3r
105
106ADDV                011110 000.. ..... ..... .....  001110  @3r
107SUBV                011110 001.. ..... ..... .....  001110  @3r
108MAX_S               011110 010.. ..... ..... .....  001110  @3r
109MAX_U               011110 011.. ..... ..... .....  001110  @3r
110MIN_S               011110 100.. ..... ..... .....  001110  @3r
111MIN_U               011110 101.. ..... ..... .....  001110  @3r
112MAX_A               011110 110.. ..... ..... .....  001110  @3r
113MIN_A               011110 111.. ..... ..... .....  001110  @3r
114
115CEQ                 011110 000.. ..... ..... .....  001111  @3r
116CLT_S               011110 010.. ..... ..... .....  001111  @3r
117CLT_U               011110 011.. ..... ..... .....  001111  @3r
118CLE_S               011110 100.. ..... ..... .....  001111  @3r
119CLE_U               011110 101.. ..... ..... .....  001111  @3r
120
121ADD_A               011110 000.. ..... ..... .....  010000  @3r
122ADDS_A              011110 001.. ..... ..... .....  010000  @3r
123ADDS_S              011110 010.. ..... ..... .....  010000  @3r
124ADDS_U              011110 011.. ..... ..... .....  010000  @3r
125AVE_S               011110 100.. ..... ..... .....  010000  @3r
126AVE_U               011110 101.. ..... ..... .....  010000  @3r
127AVER_S              011110 110.. ..... ..... .....  010000  @3r
128AVER_U              011110 111.. ..... ..... .....  010000  @3r
129
130SUBS_S              011110 000.. ..... ..... .....  010001  @3r
131SUBS_U              011110 001.. ..... ..... .....  010001  @3r
132SUBSUS_U            011110 010.. ..... ..... .....  010001  @3r
133SUBSUU_S            011110 011.. ..... ..... .....  010001  @3r
134ASUB_S              011110 100.. ..... ..... .....  010001  @3r
135ASUB_U              011110 101.. ..... ..... .....  010001  @3r
136
137MULV                011110 000.. ..... ..... .....  010010  @3r
138MADDV               011110 001.. ..... ..... .....  010010  @3r
139MSUBV               011110 010.. ..... ..... .....  010010  @3r
140DIV_S               011110 100.. ..... ..... .....  010010  @3r
141DIV_U               011110 101.. ..... ..... .....  010010  @3r
142MOD_S               011110 110.. ..... ..... .....  010010  @3r
143MOD_U               011110 111.. ..... ..... .....  010010  @3r
144
145DOTP_S              011110 000.. ..... ..... .....  010011  @3r
146DOTP_U              011110 001.. ..... ..... .....  010011  @3r
147DPADD_S             011110 010.. ..... ..... .....  010011  @3r
148DPADD_U             011110 011.. ..... ..... .....  010011  @3r
149DPSUB_S             011110 100.. ..... ..... .....  010011  @3r
150DPSUB_U             011110 101.. ..... ..... .....  010011  @3r
151
152SLD                 011110 000 .. ..... ..... ..... 010100  @3r
153SPLAT               011110 001 .. ..... ..... ..... 010100  @3r
154PCKEV               011110 010 .. ..... ..... ..... 010100  @3r
155PCKOD               011110 011 .. ..... ..... ..... 010100  @3r
156ILVL                011110 100 .. ..... ..... ..... 010100  @3r
157ILVR                011110 101 .. ..... ..... ..... 010100  @3r
158ILVEV               011110 110 .. ..... ..... ..... 010100  @3r
159ILVOD               011110 111 .. ..... ..... ..... 010100  @3r
160
161VSHF                011110 000 .. ..... ..... ..... 010101  @3r
162SRAR                011110 001 .. ..... ..... ..... 010101  @3r
163SRLR                011110 010 .. ..... ..... ..... 010101  @3r
164HADD_S              011110 100.. ..... ..... .....  010101  @3r
165HADD_U              011110 101.. ..... ..... .....  010101  @3r
166HSUB_S              011110 110.. ..... ..... .....  010101  @3r
167HSUB_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}
181COPY_U              011110 0011 ...... ..... .....  011001  @elm_df
182INSERT              011110 0100 ...... ..... .....  011001  @elm_df
183INSVE               011110 0101 ...... ..... .....  011001  @elm_df
184
185FCAF                011110 0000 . ..... ..... ..... 011010  @3rf_w
186FCUN                011110 0001 . ..... ..... ..... 011010  @3rf_w
187FCEQ                011110 0010 . ..... ..... ..... 011010  @3rf_w
188FCUEQ               011110 0011 . ..... ..... ..... 011010  @3rf_w
189FCLT                011110 0100 . ..... ..... ..... 011010  @3rf_w
190FCULT               011110 0101 . ..... ..... ..... 011010  @3rf_w
191FCLE                011110 0110 . ..... ..... ..... 011010  @3rf_w
192FCULE               011110 0111 . ..... ..... ..... 011010  @3rf_w
193FSAF                011110 1000 . ..... ..... ..... 011010  @3rf_w
194FSUN                011110 1001 . ..... ..... ..... 011010  @3rf_w
195FSEQ                011110 1010 . ..... ..... ..... 011010  @3rf_w
196FSUEQ               011110 1011 . ..... ..... ..... 011010  @3rf_w
197FSLT                011110 1100 . ..... ..... ..... 011010  @3rf_w
198FSULT               011110 1101 . ..... ..... ..... 011010  @3rf_w
199FSLE                011110 1110 . ..... ..... ..... 011010  @3rf_w
200FSULE               011110 1111 . ..... ..... ..... 011010  @3rf_w
201
202FADD                011110 0000 . ..... ..... ..... 011011  @3rf_w
203FSUB                011110 0001 . ..... ..... ..... 011011  @3rf_w
204FMUL                011110 0010 . ..... ..... ..... 011011  @3rf_w
205FDIV                011110 0011 . ..... ..... ..... 011011  @3rf_w
206FMADD               011110 0100 . ..... ..... ..... 011011  @3rf_w
207FMSUB               011110 0101 . ..... ..... ..... 011011  @3rf_w
208FEXP2               011110 0111 . ..... ..... ..... 011011  @3rf_w
209FEXDO               011110 1000 . ..... ..... ..... 011011  @3rf_w
210FTQ                 011110 1010 . ..... ..... ..... 011011  @3rf_w
211FMIN                011110 1100 . ..... ..... ..... 011011  @3rf_w
212FMIN_A              011110 1101 . ..... ..... ..... 011011  @3rf_w
213FMAX                011110 1110 . ..... ..... ..... 011011  @3rf_w
214FMAX_A              011110 1111 . ..... ..... ..... 011011  @3rf_w
215
216FCOR                011110 0001 . ..... ..... ..... 011100  @3rf_w
217FCUNE               011110 0010 . ..... ..... ..... 011100  @3rf_w
218FCNE                011110 0011 . ..... ..... ..... 011100  @3rf_w
219MUL_Q               011110 0100 . ..... ..... ..... 011100  @3rf_h
220MADD_Q              011110 0101 . ..... ..... ..... 011100  @3rf_h
221MSUB_Q              011110 0110 . ..... ..... ..... 011100  @3rf_h
222FSOR                011110 1001 . ..... ..... ..... 011100  @3rf_w
223FSUNE               011110 1010 . ..... ..... ..... 011100  @3rf_w
224FSNE                011110 1011 . ..... ..... ..... 011100  @3rf_w
225MULR_Q              011110 1100 . ..... ..... ..... 011100  @3rf_h
226MADDR_Q             011110 1101 . ..... ..... ..... 011100  @3rf_h
227MSUBR_Q             011110 1110 . ..... ..... ..... 011100  @3rf_h
228
229AND_V               011110 00000 ..... ..... .....  011110  @vec
230OR_V                011110 00001 ..... ..... .....  011110  @vec
231NOR_V               011110 00010 ..... ..... .....  011110  @vec
232XOR_V               011110 00011 ..... ..... .....  011110  @vec
233BMNZ_V              011110 00100 ..... ..... .....  011110  @vec
234BMZ_V               011110 00101 ..... ..... .....  011110  @vec
235BSEL_V              011110 00110 ..... ..... .....  011110  @vec
236FILL                011110 11000000 .. ..... .....  011110  @2r
237PCNT                011110 11000001 .. ..... .....  011110  @2r
238NLOC                011110 11000010 .. ..... .....  011110  @2r
239NLZC                011110 11000011 .. ..... .....  011110  @2r
240FCLASS              011110 110010000 . ..... .....  011110  @2rf
241FTRUNC_S            011110 110010001 . ..... .....  011110  @2rf
242FTRUNC_U            011110 110010010 . ..... .....  011110  @2rf
243FSQRT               011110 110010011 . ..... .....  011110  @2rf
244FRSQRT              011110 110010100 . ..... .....  011110  @2rf
245FRCP                011110 110010101 . ..... .....  011110  @2rf
246FRINT               011110 110010110 . ..... .....  011110  @2rf
247FLOG2               011110 110010111 . ..... .....  011110  @2rf
248FEXUPL              011110 110011000 . ..... .....  011110  @2rf
249FEXUPR              011110 110011001 . ..... .....  011110  @2rf
250FFQL                011110 110011010 . ..... .....  011110  @2rf
251FFQR                011110 110011011 . ..... .....  011110  @2rf
252FTINT_S             011110 110011100 . ..... .....  011110  @2rf
253FTINT_U             011110 110011101 . ..... .....  011110  @2rf
254FFINT_S             011110 110011110 . ..... .....  011110  @2rf
255FFINT_U             011110 110011111 . ..... .....  011110  @2rf
256
257LD                  011110 .......... ..... .....   1000 .. @ldst
258ST                  011110 .......... ..... .....   1001 .. @ldst
259