xref: /openbmc/qemu/target/sparc/insns.decode (revision 4fd71d19)
1# SPDX-License-Identifier: LGPL-2.0+
2#
3# Sparc instruction decode definitions.
4# Copyright (c) 2023 Richard Henderson <rth@twiddle.net>
5
6##
7## Major Opcodes 00 and 01 -- branches, call, and sethi.
8##
9
10&bcc    i a cond cc
11BPcc    00 a:1 cond:4   001 cc:1 0 - i:s19                 &bcc
12Bicc    00 a:1 cond:4   010          i:s22                 &bcc cc=0
13FBPfcc  00 a:1 cond:4   101 cc:2   - i:s19                 &bcc
14FBfcc   00 a:1 cond:4   110          i:s22                 &bcc cc=0
15
16%d16    20:s2 0:14
17BPr     00 a:1 0 cond:3 011 ..     - rs1:5 ..............  i=%d16
18
19NCP     00 -   ----     111 ----------------------         # CBcc
20
21SETHI   00 rd:5         100 i:22
22
23CALL    01 i:s30
24
25##
26## Major Opcode 10 -- integer, floating-point, vis, and system insns.
27##
28
29%dfp_rd     25:5 !function=extract_dfpreg
30%dfp_rs1    14:5 !function=extract_dfpreg
31%dfp_rs2     0:5 !function=extract_dfpreg
32%dfp_rs3     9:5 !function=extract_dfpreg
33
34%qfp_rd     25:5 !function=extract_qfpreg
35%qfp_rs1    14:5 !function=extract_qfpreg
36%qfp_rs2     0:5 !function=extract_qfpreg
37
38&r_r_ri     rd rs1 rs2_or_imm imm:bool
39@n_r_ri     .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri rd=0
40@r_r_ri     .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri
41
42&r_r_ri_cc  rd rs1 rs2_or_imm imm:bool cc:bool
43@r_r_ri_cc  .. rd:5  . cc:1 .... rs1:5 imm:1 rs2_or_imm:s13    &r_r_ri_cc
44@r_r_ri_cc0 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=0
45@r_r_ri_cc1 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=1
46
47&r_r_r      rd rs1 rs2
48@r_r_r      .. rd:5  ...... rs1:5 . ........ rs2:5         &r_r_r
49@d_r_r      .. ..... ...... rs1:5 . ........ rs2:5         \
50            &r_r_r rd=%dfp_rd
51@r_d_d      .. rd:5  ...... ..... . ........ .....         \
52            &r_r_r rs1=%dfp_rs1 rs2=%dfp_rs2
53@d_r_d      .. ..... ...... rs1:5 . ........ .....         \
54            &r_r_r rd=%dfp_rd rs2=%dfp_rs2
55@d_d_d      .. ..... ...... ..... . ........ .....         \
56            &r_r_r rd=%dfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2
57@q_q_q      .. ..... ...... ..... . ........ .....         \
58            &r_r_r rd=%qfp_rd rs1=%qfp_rs1 rs2=%qfp_rs2
59@q_d_d      .. ..... ...... ..... . ........ .....         \
60            &r_r_r rd=%qfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2
61
62@r_r_r_swap .. rd:5  ...... rs2:5 . ........ rs1:5         &r_r_r
63@d_d_d_swap .. ..... ...... ..... . ........ .....         \
64            &r_r_r rd=%dfp_rd rs1=%dfp_rs2 rs2=%dfp_rs1
65
66&r_r        rd rs
67@r_r1       .. rd:5  ...... rs:5  . ........ .....         &r_r
68@r_r2       .. rd:5  ...... ..... . ........ rs:5          &r_r
69@r_d2       .. rd:5  ...... ..... . ........ .....         &r_r rs=%dfp_rs2
70@r_q2       .. rd:5  ...... ..... . ........ .....         &r_r rs=%qfp_rs2
71@d_r2       .. ..... ...... ..... . ........ rs:5          &r_r rd=%dfp_rd
72@q_r2       .. ..... ...... ..... . ........ rs:5          &r_r rd=%qfp_rd
73@d_d1       .. ..... ...... ..... . ........ .....         \
74            &r_r rd=%dfp_rd rs=%dfp_rs1
75@d_d2       .. ..... ...... ..... . ........ .....         \
76            &r_r rd=%dfp_rd rs=%dfp_rs2
77@d_q2       .. ..... ...... ..... . ........ .....         \
78            &r_r rd=%dfp_rd rs=%qfp_rs2
79@q_q2       .. ..... ...... ..... . ........ .....         \
80            &r_r rd=%qfp_rd rs=%qfp_rs2
81@q_d2       .. ..... ...... ..... . ........ .....         \
82            &r_r rd=%qfp_rd rs=%dfp_rs2
83
84&r_r_r_r    rd rs1 rs2 rs3
85@r_r_r_r    .. rd:5  ...... rs1:5 rs3:5 .... rs2:5         &r_r_r_r
86@d_d_d_d    .. ..... ...... ..... ..... .... .....         \
87            &r_r_r_r rd=%dfp_rd rs1=%dfp_rs1 rs2=%dfp_rs2 rs3=%dfp_rs3
88
89{
90  [
91    STBAR           10 00000 101000 01111 0 0000000000000
92    MEMBAR          10 00000 101000 01111 1 000000 cmask:3 mmask:4
93
94    RDCCR           10 rd:5  101000 00010 0 0000000000000
95    RDASI           10 rd:5  101000 00011 0 0000000000000
96    RDTICK          10 rd:5  101000 00100 0 0000000000000
97    RDPC            10 rd:5  101000 00101 0 0000000000000
98    RDFPRS          10 rd:5  101000 00110 0 0000000000000
99    RDASR17         10 rd:5  101000 10001 0 0000000000000
100    RDGSR           10 rd:5  101000 10011 0 0000000000000
101    RDSOFTINT       10 rd:5  101000 10110 0 0000000000000
102    RDTICK_CMPR     10 rd:5  101000 10111 0 0000000000000
103    RDSTICK         10 rd:5  101000 11000 0 0000000000000
104    RDSTICK_CMPR    10 rd:5  101000 11001 0 0000000000000
105    RDSTRAND_STATUS 10 rd:5  101000 11010 0 0000000000000
106  ]
107  # Before v8, all rs1 accepted; otherwise rs1==0.
108  RDY               10 rd:5  101000 rs1:5 0 0000000000000
109}
110
111{
112  [
113    WRY             10 00000 110000 ..... . .............  @n_r_ri
114    WRCCR           10 00010 110000 ..... . .............  @n_r_ri
115    WRASI           10 00011 110000 ..... . .............  @n_r_ri
116    WRFPRS          10 00110 110000 ..... . .............  @n_r_ri
117    {
118      WRGSR         10 10011 110000 ..... . .............  @n_r_ri
119      WRPOWERDOWN   10 10011 110000 ..... . .............  @n_r_ri
120    }
121    WRSOFTINT_SET   10 10100 110000 ..... . .............  @n_r_ri
122    WRSOFTINT_CLR   10 10101 110000 ..... . .............  @n_r_ri
123    WRSOFTINT       10 10110 110000 ..... . .............  @n_r_ri
124    WRTICK_CMPR     10 10111 110000 ..... . .............  @n_r_ri
125    WRSTICK         10 11000 110000 ..... . .............  @n_r_ri
126    WRSTICK_CMPR    10 11001 110000 ..... . .............  @n_r_ri
127  ]
128  # Before v8, rs1==0 was WRY, and the rest executed as nop.
129  [
130    NOP_v7          10 ----- 110000 ----- 0 00000000 -----
131    NOP_v7          10 ----- 110000 ----- 1 -------- -----
132  ]
133}
134
135{
136  RDPSR             10 rd:5  101001 00000 0 0000000000000
137  RDHPR_hpstate     10 rd:5  101001 00000 0 0000000000000
138}
139RDHPR_htstate       10 rd:5  101001 00001 0 0000000000000
140RDHPR_hintp         10 rd:5  101001 00011 0 0000000000000
141RDHPR_htba          10 rd:5  101001 00101 0 0000000000000
142RDHPR_hver          10 rd:5  101001 00110 0 0000000000000
143RDHPR_hstick_cmpr   10 rd:5  101001 11111 0 0000000000000
144
145{
146  WRPSR             10 00000 110001 ..... . .............  @n_r_ri
147  SAVED             10 00000 110001 00000 0 0000000000000
148}
149RESTORED            10 00001 110001 00000 0 0000000000000
150# UA2005 ALLCLEAN
151# UA2005 OTHERW
152# UA2005 NORMALW
153# UA2005 INVALW
154
155{
156  RDWIM             10 rd:5  101010 00000 0 0000000000000
157  RDPR_tpc          10 rd:5  101010 00000 0 0000000000000
158}
159RDPR_tnpc           10 rd:5  101010 00001 0 0000000000000
160RDPR_tstate         10 rd:5  101010 00010 0 0000000000000
161RDPR_tt             10 rd:5  101010 00011 0 0000000000000
162RDPR_tick           10 rd:5  101010 00100 0 0000000000000
163RDPR_tba            10 rd:5  101010 00101 0 0000000000000
164RDPR_pstate         10 rd:5  101010 00110 0 0000000000000
165RDPR_tl             10 rd:5  101010 00111 0 0000000000000
166RDPR_pil            10 rd:5  101010 01000 0 0000000000000
167RDPR_cwp            10 rd:5  101010 01001 0 0000000000000
168RDPR_cansave        10 rd:5  101010 01010 0 0000000000000
169RDPR_canrestore     10 rd:5  101010 01011 0 0000000000000
170RDPR_cleanwin       10 rd:5  101010 01100 0 0000000000000
171RDPR_otherwin       10 rd:5  101010 01101 0 0000000000000
172RDPR_wstate         10 rd:5  101010 01110 0 0000000000000
173RDPR_gl             10 rd:5  101010 10000 0 0000000000000
174RDPR_strand_status  10 rd:5  101010 11010 0 0000000000000
175RDPR_ver            10 rd:5  101010 11111 0 0000000000000
176
177{
178  WRWIM             10 00000 110010 ..... . .............  @n_r_ri
179  WRPR_tpc          10 00000 110010 ..... . .............  @n_r_ri
180}
181WRPR_tnpc           10 00001 110010 ..... . .............  @n_r_ri
182WRPR_tstate         10 00010 110010 ..... . .............  @n_r_ri
183WRPR_tt             10 00011 110010 ..... . .............  @n_r_ri
184WRPR_tick           10 00100 110010 ..... . .............  @n_r_ri
185WRPR_tba            10 00101 110010 ..... . .............  @n_r_ri
186WRPR_pstate         10 00110 110010 ..... . .............  @n_r_ri
187WRPR_tl             10 00111 110010 ..... . .............  @n_r_ri
188WRPR_pil            10 01000 110010 ..... . .............  @n_r_ri
189WRPR_cwp            10 01001 110010 ..... . .............  @n_r_ri
190WRPR_cansave        10 01010 110010 ..... . .............  @n_r_ri
191WRPR_canrestore     10 01011 110010 ..... . .............  @n_r_ri
192WRPR_cleanwin       10 01100 110010 ..... . .............  @n_r_ri
193WRPR_otherwin       10 01101 110010 ..... . .............  @n_r_ri
194WRPR_wstate         10 01110 110010 ..... . .............  @n_r_ri
195WRPR_gl             10 10000 110010 ..... . .............  @n_r_ri
196WRPR_strand_status  10 11010 110010 ..... . .............  @n_r_ri
197
198{
199  FLUSHW    10 00000 101011 00000 0 0000000000000
200  RDTBR     10 rd:5  101011 00000 0 0000000000000
201}
202
203{
204  WRTBR             10 00000 110011 ..... . .............  @n_r_ri
205  WRHPR_hpstate     10 00000 110011 ..... . .............  @n_r_ri
206}
207WRHPR_htstate       10 00001 110011 ..... . .............  @n_r_ri
208WRHPR_hintp         10 00011 110011 ..... . .............  @n_r_ri
209WRHPR_htba          10 00101 110011 ..... . .............  @n_r_ri
210WRHPR_hstick_cmpr   10 11111 110011 ..... . .............  @n_r_ri
211
212ADD         10 ..... 0.0000 ..... . .............          @r_r_ri_cc
213AND         10 ..... 0.0001 ..... . .............          @r_r_ri_cc
214OR          10 ..... 0.0010 ..... . .............          @r_r_ri_cc
215XOR         10 ..... 0.0011 ..... . .............          @r_r_ri_cc
216SUB         10 ..... 0.0100 ..... . .............          @r_r_ri_cc
217ANDN        10 ..... 0.0101 ..... . .............          @r_r_ri_cc
218ORN         10 ..... 0.0110 ..... . .............          @r_r_ri_cc
219XORN        10 ..... 0.0111 ..... . .............          @r_r_ri_cc
220ADDC        10 ..... 0.1000 ..... . .............          @r_r_ri_cc
221SUBC        10 ..... 0.1100 ..... . .............          @r_r_ri_cc
222
223MULX        10 ..... 001001 ..... . .............          @r_r_ri_cc0
224UMUL        10 ..... 0.1010 ..... . .............          @r_r_ri_cc
225SMUL        10 ..... 0.1011 ..... . .............          @r_r_ri_cc
226MULScc      10 ..... 100100 ..... . .............          @r_r_ri_cc1
227
228UDIVX       10 ..... 001101 ..... . .............          @r_r_ri
229SDIVX       10 ..... 101101 ..... . .............          @r_r_ri
230UDIV        10 ..... 001110 ..... . .............          @r_r_ri
231UDIVcc      10 ..... 011110 ..... . .............          @r_r_ri_cc1
232SDIV        10 ..... 0.1111 ..... . .............          @r_r_ri_cc
233
234TADDcc      10 ..... 100000 ..... . .............          @r_r_ri_cc1
235TSUBcc      10 ..... 100001 ..... . .............          @r_r_ri_cc1
236TADDccTV    10 ..... 100010 ..... . .............          @r_r_ri_cc1
237TSUBccTV    10 ..... 100011 ..... . .............          @r_r_ri_cc1
238
239POPC        10 rd:5  101110 00000 imm:1 rs2_or_imm:s13     \
240            &r_r_ri_cc rs1=0 cc=0
241
242&shiftr     rd rs1 rs2 x:bool
243@shiftr     .. rd:5  ...... rs1:5 . x:1 ....... rs2:5      &shiftr
244
245SLL_r       10 ..... 100101 ..... 0 .   0000000 .....      @shiftr
246SRL_r       10 ..... 100110 ..... 0 .   0000000 .....      @shiftr
247SRA_r       10 ..... 100111 ..... 0 .   0000000 .....      @shiftr
248
249&shifti     rd rs1 i x:bool
250@shifti     .. rd:5  ...... rs1:5 . x:1 ...... i:6         &shifti
251
252SLL_i       10 ..... 100101 ..... 1 .   000000 ......      @shifti
253SRL_i       10 ..... 100110 ..... 1 .   000000 ......      @shifti
254SRA_i       10 ..... 100111 ..... 1 .   000000 ......      @shifti
255
256Tcc_r       10 0 cond:4 111010 rs1:5 0 cc:1 0000000 rs2:5
257{
258  # For v7, the entire simm13 field is present, but masked to 7 bits.
259  # For v8, [12:7] are reserved.  However, a compatibility note for
260  # the Tcc insn in the v9 manual suggests that the v8 reserved field
261  # was ignored and did not produce traps.
262  Tcc_i_v7  10 0 cond:4 111010 rs1:5 1 ------ i:7
263
264  # For v9, bits [12:11] are cc1 and cc0 (and cc0 must be 0).
265  # Bits [10:8] are reserved and the OSA2011 manual says they must be 0.
266  Tcc_i_v9  10 0 cond:4 111010 rs1:5 1 cc:1 0 000 i:8
267}
268
269MOVcc       10 rd:5  101100 1 cond:4 imm:1 cc:1 0 rs2_or_imm:s11
270MOVfcc      10 rd:5  101100 0 cond:4 imm:1 cc:2   rs2_or_imm:s11
271MOVR        10 rd:5  101111 rs1:5    imm:1 cond:3 rs2_or_imm:s10
272
273JMPL        10 ..... 111000 ..... . .............          @r_r_ri
274{
275  RETT      10 00000 111001 ..... . .............          @n_r_ri
276  RETURN    10 00000 111001 ..... . .............          @n_r_ri
277}
278NOP         10 00000 111011 ----- 0 00000000-----          # FLUSH reg+reg
279NOP         10 00000 111011 ----- 1 -------------          # FLUSH reg+imm
280SAVE        10 ..... 111100 ..... . .............          @r_r_ri
281RESTORE     10 ..... 111101 ..... . .............          @r_r_ri
282
283DONE        10 00000 111110 00000 0 0000000000000
284RETRY       10 00001 111110 00000 0 0000000000000
285
286FMOVs       10 ..... 110100 00000 0 0000 0001 .....        @r_r2
287FMOVd       10 ..... 110100 00000 0 0000 0010 .....        @d_d2
288FMOVq       10 ..... 110100 00000 0 0000 0011 .....        @q_q2
289FNEGs       10 ..... 110100 00000 0 0000 0101 .....        @r_r2
290FNEGd       10 ..... 110100 00000 0 0000 0110 .....        @d_d2
291FNEGq       10 ..... 110100 00000 0 0000 0111 .....        @q_q2
292FABSs       10 ..... 110100 00000 0 0000 1001 .....        @r_r2
293FABSd       10 ..... 110100 00000 0 0000 1010 .....        @d_d2
294FABSq       10 ..... 110100 00000 0 0000 1011 .....        @q_q2
295FSQRTs      10 ..... 110100 00000 0 0010 1001 .....        @r_r2
296FSQRTd      10 ..... 110100 00000 0 0010 1010 .....        @d_d2
297FSQRTq      10 ..... 110100 00000 0 0010 1011 .....        @q_q2
298FADDs       10 ..... 110100 ..... 0 0100 0001 .....        @r_r_r
299FADDd       10 ..... 110100 ..... 0 0100 0010 .....        @d_d_d
300FADDq       10 ..... 110100 ..... 0 0100 0011 .....        @q_q_q
301FSUBs       10 ..... 110100 ..... 0 0100 0101 .....        @r_r_r
302FSUBd       10 ..... 110100 ..... 0 0100 0110 .....        @d_d_d
303FSUBq       10 ..... 110100 ..... 0 0100 0111 .....        @q_q_q
304FMULs       10 ..... 110100 ..... 0 0100 1001 .....        @r_r_r
305FMULd       10 ..... 110100 ..... 0 0100 1010 .....        @d_d_d
306FMULq       10 ..... 110100 ..... 0 0100 1011 .....        @q_q_q
307FDIVs       10 ..... 110100 ..... 0 0100 1101 .....        @r_r_r
308FDIVd       10 ..... 110100 ..... 0 0100 1110 .....        @d_d_d
309FDIVq       10 ..... 110100 ..... 0 0100 1111 .....        @q_q_q
310FsMULd      10 ..... 110100 ..... 0 0110 1001 .....        @d_r_r
311FdMULq      10 ..... 110100 ..... 0 0110 1110 .....        @q_d_d
312FsTOx       10 ..... 110100 00000 0 1000 0001 .....        @r_r2
313FdTOx       10 ..... 110100 00000 0 1000 0010 .....        @r_d2
314FqTOx       10 ..... 110100 00000 0 1000 0011 .....        @r_q2
315FxTOs       10 ..... 110100 00000 0 1000 0100 .....        @r_r2
316FxTOd       10 ..... 110100 00000 0 1000 1000 .....        @d_r2
317FxTOq       10 ..... 110100 00000 0 1000 1100 .....        @q_r2
318FiTOs       10 ..... 110100 00000 0 1100 0100 .....        @r_r2
319FdTOs       10 ..... 110100 00000 0 1100 0110 .....        @r_d2
320FqTOs       10 ..... 110100 00000 0 1100 0111 .....        @r_q2
321FiTOd       10 ..... 110100 00000 0 1100 1000 .....        @d_r2
322FsTOd       10 ..... 110100 00000 0 1100 1001 .....        @d_r2
323FqTOd       10 ..... 110100 00000 0 1100 1011 .....        @d_q2
324FiTOq       10 ..... 110100 00000 0 1100 1100 .....        @q_r2
325FsTOq       10 ..... 110100 00000 0 1100 1101 .....        @q_r2
326FdTOq       10 ..... 110100 00000 0 1100 1110 .....        @q_d2
327FsTOi       10 ..... 110100 00000 0 1101 0001 .....        @r_r2
328FdTOi       10 ..... 110100 00000 0 1101 0010 .....        @r_d2
329FqTOi       10 ..... 110100 00000 0 1101 0011 .....        @r_q2
330
331FMOVscc     10 rd:5  110101 0 cond:4 1 cc:1 0 000001 rs2:5
332FMOVdcc     10 ..... 110101 0 cond:4 1 cc:1 0 000010 ..... \
333            rd=%dfp_rd rs2=%dfp_rs2
334FMOVqcc     10 ..... 110101 0 cond:4 1 cc:1 0 000011 ..... \
335            rd=%qfp_rd rs2=%qfp_rs2
336
337FMOVsfcc    10 rd:5  110101 0 cond:4 0 cc:2   000001 rs2:5
338FMOVdfcc    10 ..... 110101 0 cond:4 0 cc:2   000010 ..... \
339            rd=%dfp_rd rs2=%dfp_rs2
340FMOVqfcc    10 ..... 110101 0 cond:4 0 cc:2   000011 ..... \
341            rd=%qfp_rd rs2=%qfp_rs2
342
343FMOVRs      10 rd:5  110101 rs1:5    0 cond:3  00101 rs2:5
344FMOVRd      10 ..... 110101 rs1:5    0 cond:3  00110 ..... \
345            rd=%dfp_rd rs2=%dfp_rs2
346FMOVRq      10 ..... 110101 rs1:5    0 cond:3  00111 ..... \
347            rd=%qfp_rd rs2=%qfp_rs2
348
349FCMPs       10 000 cc:2 110101 rs1:5  0 0101 0001 rs2:5
350FCMPd       10 000 cc:2 110101 .....  0 0101 0010 .....    \
351            rs1=%dfp_rs1 rs2=%dfp_rs2
352FCMPq       10 000 cc:2 110101 .....  0 0101 0011 .....    \
353            rs1=%qfp_rs1 rs2=%qfp_rs2
354FCMPEs      10 000 cc:2 110101 rs1:5  0 0101 0101 rs2:5
355FCMPEd      10 000 cc:2 110101 .....  0 0101 0110 .....    \
356            rs1=%dfp_rs1 rs2=%dfp_rs2
357FCMPEq      10 000 cc:2 110101 .....  0 0101 0111 .....    \
358            rs1=%qfp_rs1 rs2=%qfp_rs2
359
360{
361  [
362    EDGE8cc     10 ..... 110110 ..... 0 0000 0000 .....    @r_r_r
363    EDGE8N      10 ..... 110110 ..... 0 0000 0001 .....    @r_r_r
364    EDGE8Lcc    10 ..... 110110 ..... 0 0000 0010 .....    @r_r_r
365    EDGE8LN     10 ..... 110110 ..... 0 0000 0011 .....    @r_r_r
366    EDGE16cc    10 ..... 110110 ..... 0 0000 0100 .....    @r_r_r
367    EDGE16N     10 ..... 110110 ..... 0 0000 0101 .....    @r_r_r
368    EDGE16Lcc   10 ..... 110110 ..... 0 0000 0110 .....    @r_r_r
369    EDGE16LN    10 ..... 110110 ..... 0 0000 0111 .....    @r_r_r
370    EDGE32cc    10 ..... 110110 ..... 0 0000 1000 .....    @r_r_r
371    EDGE32N     10 ..... 110110 ..... 0 0000 1001 .....    @r_r_r
372    EDGE32Lcc   10 ..... 110110 ..... 0 0000 1010 .....    @r_r_r
373    EDGE32LN    10 ..... 110110 ..... 0 0000 1011 .....    @r_r_r
374
375    ARRAY8      10 ..... 110110 ..... 0 0001 0000 .....    @r_r_r
376    ARRAY16     10 ..... 110110 ..... 0 0001 0010 .....    @r_r_r
377    ARRAY32     10 ..... 110110 ..... 0 0001 0100 .....    @r_r_r
378
379    ALIGNADDR   10 ..... 110110 ..... 0 0001 1000 .....    @r_r_r
380    ALIGNADDRL  10 ..... 110110 ..... 0 0001 1010 .....    @r_r_r
381
382    BMASK       10 ..... 110110 ..... 0 0001 1001 .....    @r_r_r
383
384    FPCMPLE16   10 ..... 110110 ..... 0 0010 0000 .....    @r_d_d
385    FPCMPNE16   10 ..... 110110 ..... 0 0010 0010 .....    @r_d_d
386    FPCMPGT16   10 ..... 110110 ..... 0 0010 1000 .....    @r_d_d
387    FPCMPEQ16   10 ..... 110110 ..... 0 0010 1010 .....    @r_d_d
388    FPCMPLE32   10 ..... 110110 ..... 0 0010 0100 .....    @r_d_d
389    FPCMPNE32   10 ..... 110110 ..... 0 0010 0110 .....    @r_d_d
390    FPCMPGT32   10 ..... 110110 ..... 0 0010 1100 .....    @r_d_d
391    FPCMPEQ32   10 ..... 110110 ..... 0 0010 1110 .....    @r_d_d
392
393    FMUL8x16    10 ..... 110110 ..... 0 0011 0001 .....    @d_r_d
394    FMUL8x16AU  10 ..... 110110 ..... 0 0011 0011 .....    @d_r_r
395    FMUL8x16AL  10 ..... 110110 ..... 0 0011 0101 .....    @d_r_r
396    FMUL8SUx16  10 ..... 110110 ..... 0 0011 0110 .....    @d_d_d
397    FMUL8ULx16  10 ..... 110110 ..... 0 0011 0111 .....    @d_d_d
398    FMULD8SUx16 10 ..... 110110 ..... 0 0011 1000 .....    @d_r_r
399    FMULD8ULx16 10 ..... 110110 ..... 0 0011 1001 .....    @d_r_r
400    FPACK32     10 ..... 110110 ..... 0 0011 1010 .....    @d_d_d
401    FPACK16     10 ..... 110110 00000 0 0011 1011 .....    @r_d2
402    FPACKFIX    10 ..... 110110 00000 0 0011 1101 .....    @r_d2
403    PDIST       10 ..... 110110 ..... 0 0011 1110 .....    \
404                &r_r_r_r rd=%dfp_rd rs1=%dfp_rd rs2=%dfp_rs1 rs3=%dfp_rs2
405
406    FALIGNDATAg 10 ..... 110110 ..... 0 0100 1000 .....    @d_d_d
407    FPMERGE     10 ..... 110110 ..... 0 0100 1011 .....    @d_r_r
408    BSHUFFLE    10 ..... 110110 ..... 0 0100 1100 .....    @d_d_d
409    FEXPAND     10 ..... 110110 00000 0 0100 1101 .....    @d_r2
410
411    FSRCd       10 ..... 110110 ..... 0 0111 0100 00000    @d_d1  # FSRC1d
412    FSRCs       10 ..... 110110 ..... 0 0111 0101 00000    @r_r1  # FSRC1s
413    FSRCd       10 ..... 110110 00000 0 0111 1000 .....    @d_d2  # FSRC2d
414    FSRCs       10 ..... 110110 00000 0 0111 1001 .....    @r_r2  # FSRC2s
415    FNOTd       10 ..... 110110 ..... 0 0110 1010 00000    @d_d1  # FNOT1d
416    FNOTs       10 ..... 110110 ..... 0 0110 1011 00000    @r_r1  # FNOT1s
417    FNOTd       10 ..... 110110 00000 0 0110 0110 .....    @d_d2  # FNOT2d
418    FNOTs       10 ..... 110110 00000 0 0110 0111 .....    @r_r2  # FNOT2s
419
420    FPADD16     10 ..... 110110 ..... 0 0101 0000 .....    @d_d_d
421    FPADD16s    10 ..... 110110 ..... 0 0101 0001 .....    @r_r_r
422    FPADD32     10 ..... 110110 ..... 0 0101 0010 .....    @d_d_d
423    FPADD32s    10 ..... 110110 ..... 0 0101 0011 .....    @r_r_r
424    FPSUB16     10 ..... 110110 ..... 0 0101 0100 .....    @d_d_d
425    FPSUB16s    10 ..... 110110 ..... 0 0101 0101 .....    @r_r_r
426    FPSUB32     10 ..... 110110 ..... 0 0101 0110 .....    @d_d_d
427    FPSUB32s    10 ..... 110110 ..... 0 0101 0111 .....    @r_r_r
428
429    FNORd       10 ..... 110110 ..... 0 0110 0010 .....    @d_d_d
430    FNORs       10 ..... 110110 ..... 0 0110 0011 .....    @r_r_r
431    FANDNOTd    10 ..... 110110 ..... 0 0110 0100 .....    @d_d_d   # FANDNOT2d
432    FANDNOTs    10 ..... 110110 ..... 0 0110 0101 .....    @r_r_r   # FANDNOT2s
433    FANDNOTd    10 ..... 110110 ..... 0 0110 1000 .....    @d_d_d_swap # ... 1d
434    FANDNOTs    10 ..... 110110 ..... 0 0110 1001 .....    @r_r_r_swap # ... 1s
435    FXORd       10 ..... 110110 ..... 0 0110 1100 .....    @d_d_d
436    FXORs       10 ..... 110110 ..... 0 0110 1101 .....    @r_r_r
437    FNANDd      10 ..... 110110 ..... 0 0110 1110 .....    @d_d_d
438    FNANDs      10 ..... 110110 ..... 0 0110 1111 .....    @r_r_r
439    FANDd       10 ..... 110110 ..... 0 0111 0000 .....    @d_d_d
440    FANDs       10 ..... 110110 ..... 0 0111 0001 .....    @r_r_r
441    FXNORd      10 ..... 110110 ..... 0 0111 0010 .....    @d_d_d
442    FXNORs      10 ..... 110110 ..... 0 0111 0011 .....    @r_r_r
443    FORNOTd     10 ..... 110110 ..... 0 0111 0110 .....    @d_d_d    # FORNOT2d
444    FORNOTs     10 ..... 110110 ..... 0 0111 0111 .....    @r_r_r    # FORNOT2s
445    FORNOTd     10 ..... 110110 ..... 0 0111 1010 .....    @d_d_d_swap # ... 1d
446    FORNOTs     10 ..... 110110 ..... 0 0111 1011 .....    @r_r_r_swap # ... 1s
447    FORd        10 ..... 110110 ..... 0 0111 1100 .....    @d_d_d
448    FORs        10 ..... 110110 ..... 0 0111 1101 .....    @r_r_r
449
450    FZEROd      10 ..... 110110 00000 0 0110 0000 00000    rd=%dfp_rd
451    FZEROs      10 rd:5  110110 00000 0 0110 0001 00000
452    FONEd       10 ..... 110110 00000 0 0111 1110 00000    rd=%dfp_rd
453    FONEs       10 rd:5  110110 00000 0 0111 1111 00000
454  ]
455  NCP           10 ----- 110110 ----- --------- -----      # v8 CPop1
456}
457
458{
459  [
460    FMADDs      10 ..... 110111 ..... ..... 0001 .....     @r_r_r_r
461    FMADDd      10 ..... 110111 ..... ..... 0010 .....     @d_d_d_d
462    FMSUBs      10 ..... 110111 ..... ..... 0101 .....     @r_r_r_r
463    FMSUBd      10 ..... 110111 ..... ..... 0110 .....     @d_d_d_d
464    FNMSUBs     10 ..... 110111 ..... ..... 1001 .....     @r_r_r_r
465    FNMSUBd     10 ..... 110111 ..... ..... 1010 .....     @d_d_d_d
466    FNMADDs     10 ..... 110111 ..... ..... 1101 .....     @r_r_r_r
467    FNMADDd     10 ..... 110111 ..... ..... 1110 .....     @d_d_d_d
468  ]
469  NCP           10 ----- 110111 ----- --------- -----      # v8 CPop2
470}
471
472##
473## Major Opcode 11 -- load and store instructions
474##
475
476&r_r_ri_asi rd rs1 rs2_or_imm asi imm:bool
477@r_r_ri_na  .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri_asi asi=-1
478@d_r_ri_na  .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     \
479            &r_r_ri_asi rd=%dfp_rd asi=-1
480@q_r_ri_na  .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     \
481            &r_r_ri_asi rd=%qfp_rd asi=-1
482
483@r_r_r_asi  .. rd:5  ...... rs1:5 0     asi:8 rs2_or_imm:5 &r_r_ri_asi imm=0
484@r_r_i_asi  .. rd:5  ...... rs1:5 1     rs2_or_imm:s13     \
485            &r_r_ri_asi imm=1 asi=-2
486@d_r_r_asi  .. ..... ...... rs1:5 0     asi:8 rs2_or_imm:5 \
487            &r_r_ri_asi rd=%dfp_rd imm=0
488@d_r_i_asi  .. ..... ...... rs1:5 1     rs2_or_imm:s13     \
489            &r_r_ri_asi rd=%dfp_rd imm=1 asi=-2
490@q_r_r_asi  .. ..... ...... rs1:5 0     asi:8 rs2_or_imm:5 \
491            &r_r_ri_asi rd=%qfp_rd imm=0
492@q_r_i_asi  .. ..... ...... rs1:5 1     rs2_or_imm:s13     \
493            &r_r_ri_asi rd=%qfp_rd imm=1 asi=-2
494@casa_imm   .. rd:5  ...... rs1:5 1 00000000 rs2_or_imm:5  \
495            &r_r_ri_asi imm=1 asi=-2
496
497LDUW        11 ..... 000000 ..... . .............          @r_r_ri_na
498LDUB        11 ..... 000001 ..... . .............          @r_r_ri_na
499LDUH        11 ..... 000010 ..... . .............          @r_r_ri_na
500LDD         11 ..... 000011 ..... . .............          @r_r_ri_na
501LDSW        11 ..... 001000 ..... . .............          @r_r_ri_na
502LDSB        11 ..... 001001 ..... . .............          @r_r_ri_na
503LDSH        11 ..... 001010 ..... . .............          @r_r_ri_na
504LDX         11 ..... 001011 ..... . .............          @r_r_ri_na
505
506STW         11 ..... 000100 ..... . .............          @r_r_ri_na
507STB         11 ..... 000101 ..... . .............          @r_r_ri_na
508STH         11 ..... 000110 ..... . .............          @r_r_ri_na
509STD         11 ..... 000111 ..... . .............          @r_r_ri_na
510STX         11 ..... 001110 ..... . .............          @r_r_ri_na
511
512LDUW        11 ..... 010000 ..... . .............          @r_r_r_asi # LDUWA
513LDUW        11 ..... 010000 ..... . .............          @r_r_i_asi # LDUWA
514LDUB        11 ..... 010001 ..... . .............          @r_r_r_asi # LDUBA
515LDUB        11 ..... 010001 ..... . .............          @r_r_i_asi # LDUBA
516LDUH        11 ..... 010010 ..... . .............          @r_r_r_asi # LDUHA
517LDUH        11 ..... 010010 ..... . .............          @r_r_i_asi # LDUHA
518LDD         11 ..... 010011 ..... . .............          @r_r_r_asi # LDDA
519LDD         11 ..... 010011 ..... . .............          @r_r_i_asi # LDDA
520LDX         11 ..... 011011 ..... . .............          @r_r_r_asi # LDXA
521LDX         11 ..... 011011 ..... . .............          @r_r_i_asi # LDXA
522LDSB        11 ..... 011001 ..... . .............          @r_r_r_asi # LDSBA
523LDSB        11 ..... 011001 ..... . .............          @r_r_i_asi # LDSBA
524LDSH        11 ..... 011010 ..... . .............          @r_r_r_asi # LDSHA
525LDSH        11 ..... 011010 ..... . .............          @r_r_i_asi # LDSHA
526LDSW        11 ..... 011000 ..... . .............          @r_r_r_asi # LDSWA
527LDSW        11 ..... 011000 ..... . .............          @r_r_i_asi # LDSWA
528
529STW         11 ..... 010100 ..... . .............          @r_r_r_asi # STWA
530STW         11 ..... 010100 ..... . .............          @r_r_i_asi # STWA
531STB         11 ..... 010101 ..... . .............          @r_r_r_asi # STBA
532STB         11 ..... 010101 ..... . .............          @r_r_i_asi # STBA
533STH         11 ..... 010110 ..... . .............          @r_r_r_asi # STHA
534STH         11 ..... 010110 ..... . .............          @r_r_i_asi # STHA
535STD         11 ..... 010111 ..... . .............          @r_r_r_asi # STDA
536STD         11 ..... 010111 ..... . .............          @r_r_i_asi # STDA
537STX         11 ..... 011110 ..... . .............          @r_r_r_asi # STXA
538STX         11 ..... 011110 ..... . .............          @r_r_i_asi # STXA
539
540LDF         11 ..... 100000 ..... . .............          @r_r_ri_na
541LDFSR       11 00000 100001 ..... . .............          @n_r_ri
542LDXFSR      11 00001 100001 ..... . .............          @n_r_ri
543LDQF        11 ..... 100010 ..... . .............          @q_r_ri_na
544LDDF        11 ..... 100011 ..... . .............          @d_r_ri_na
545
546STF         11 ..... 100100 ..... . .............          @r_r_ri_na
547STFSR       11 00000 100101 ..... . .............          @n_r_ri
548STXFSR      11 00001 100101 ..... . .............          @n_r_ri
549{
550  STQF      11 ..... 100110 ..... . .............          @q_r_ri_na
551  STDFQ     11 ----- 100110 ----- - -------------
552}
553STDF        11 ..... 100111 ..... . .............          @d_r_ri_na
554
555LDSTUB      11 ..... 001101 ..... . .............          @r_r_ri_na
556LDSTUB      11 ..... 011101 ..... . .............          @r_r_r_asi # LDSTUBA
557LDSTUB      11 ..... 011101 ..... . .............          @r_r_i_asi # LDSTUBA
558
559SWAP        11 ..... 001111 ..... . .............          @r_r_ri_na
560SWAP        11 ..... 011111 ..... . .............          @r_r_r_asi # SWAPA
561SWAP        11 ..... 011111 ..... . .............          @r_r_i_asi # SWAPA
562
563CASA        11 ..... 111100 ..... . .............          @r_r_r_asi
564CASA        11 ..... 111100 ..... . .............          @casa_imm
565CASXA       11 ..... 111110 ..... . .............          @r_r_r_asi
566CASXA       11 ..... 111110 ..... . .............          @casa_imm
567
568NOP_v9      11 ----- 101101 ----- 0 00000000 -----         # PREFETCH
569NOP_v9      11 ----- 101101 ----- 1 -------------          # PREFETCH
570NOP_v9      11 ----- 111101 ----- - -------------          # PREFETCHA
571
572{
573  [
574    LDFA    11 ..... 110000 ..... . .............          @r_r_r_asi
575    LDFA    11 ..... 110000 ..... . .............          @r_r_i_asi
576  ]
577  NCP       11 ----- 110000 ----- --------- -----          # v8 LDC
578}
579NCP         11 ----- 110001 ----- --------- -----          # v8 LDCSR
580LDQFA       11 ..... 110010 ..... . .............          @q_r_r_asi
581LDQFA       11 ..... 110010 ..... . .............          @q_r_i_asi
582{
583  [
584    LDDFA   11 ..... 110011 ..... . .............          @d_r_r_asi
585    LDDFA   11 ..... 110011 ..... . .............          @d_r_i_asi
586  ]
587  NCP       11 ----- 110011 ----- --------- -----          # v8 LDDC
588}
589
590{
591  [
592    STFA    11 ..... 110100 ..... . .............          @r_r_r_asi
593    STFA    11 ..... 110100 ..... . .............          @r_r_i_asi
594  ]
595  NCP       11 ----- 110100 ----- --------- -----          # v8 STC
596}
597NCP         11 ----- 110101 ----- --------- -----          # v8 STCSR
598{
599  [
600    STQFA   11 ..... 110110 ..... . .............          @q_r_r_asi
601    STQFA   11 ..... 110110 ..... . .............          @q_r_i_asi
602  ]
603  NCP       11 ----- 110110 ----- --------- -----          # v8 STDCQ
604}
605{
606  [
607    STDFA   11 ..... 110111 ..... . .............          @d_r_r_asi
608    STDFA   11 ..... 110111 ..... . .............          @d_r_i_asi
609  ]
610  NCP       11 ----- 110111 ----- --------- -----          # v8 STDC
611}
612