xref: /qemu/target/sparc/insns.decode (revision 8f75b8a4eb7902b786a8c683e05bdd3adc9da5e5)
1878cc677SRichard Henderson# SPDX-License-Identifier: LGPL-2.0+
2878cc677SRichard Henderson#
3878cc677SRichard Henderson# Sparc instruction decode definitions.
4878cc677SRichard Henderson# Copyright (c) 2023 Richard Henderson <rth@twiddle.net>
5878cc677SRichard Henderson
66d2a0768SRichard Henderson##
76d2a0768SRichard Henderson## Major Opcodes 00 and 01 -- branches, call, and sethi.
86d2a0768SRichard Henderson##
96d2a0768SRichard Henderson
10276567aaSRichard Henderson&bcc    i a cond cc
11276567aaSRichard HendersonBPcc    00 a:1 cond:4   001 cc:1 0 - i:s19                 &bcc
12276567aaSRichard HendersonBicc    00 a:1 cond:4   010          i:s22                 &bcc cc=0
1345196ea4SRichard HendersonFBPfcc  00 a:1 cond:4   101 cc:2   - i:s19                 &bcc
1445196ea4SRichard HendersonFBfcc   00 a:1 cond:4   110          i:s22                 &bcc cc=0
15276567aaSRichard Henderson
16ab9ffe98SRichard Henderson%d16    20:s2 0:14
17ab9ffe98SRichard HendersonBPr     00 a:1 0 cond:3 011 ..     - rs1:5 ..............  i=%d16
18ab9ffe98SRichard Henderson
1945196ea4SRichard HendersonNCP     00 -   ----     111 ----------------------         # CBcc
2045196ea4SRichard Henderson
216d2a0768SRichard HendersonSETHI   00 rd:5         100 i:22
226d2a0768SRichard Henderson
2323ada1b1SRichard HendersonCALL    01 i:s30
2430376636SRichard Henderson
250faef01bSRichard Henderson##
260faef01bSRichard Henderson## Major Opcode 10 -- integer, floating-point, vis, and system insns.
270faef01bSRichard Henderson##
280faef01bSRichard Henderson
290faef01bSRichard Henderson&r_r_ri     rd rs1 rs2_or_imm imm:bool
300faef01bSRichard Henderson@n_r_ri     .. ..... ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri rd=0
3186b82fe0SRichard Henderson@r_r_ri     .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13     &r_r_ri
320faef01bSRichard Henderson
33428881deSRichard Henderson&r_r_ri_cc  rd rs1 rs2_or_imm imm:bool cc:bool
34428881deSRichard Henderson@r_r_ri_cc  .. rd:5  . cc:1 .... rs1:5 imm:1 rs2_or_imm:s13    &r_r_ri_cc
3522188d7dSRichard Henderson@r_r_ri_cc0 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=0
36a9aba13dSRichard Henderson@r_r_ri_cc1 .. rd:5  ...... rs1:5 imm:1 rs2_or_imm:s13         &r_r_ri_cc cc=1
37428881deSRichard Henderson
38af25071cSRichard Henderson{
39af25071cSRichard Henderson  [
40af25071cSRichard Henderson    STBAR           10 00000 101000 01111 0 0000000000000
41af25071cSRichard Henderson    MEMBAR          10 00000 101000 01111 1 000000 cmask:3 mmask:4
42af25071cSRichard Henderson
43af25071cSRichard Henderson    RDCCR           10 rd:5  101000 00010 0 0000000000000
44af25071cSRichard Henderson    RDASI           10 rd:5  101000 00011 0 0000000000000
45af25071cSRichard Henderson    RDTICK          10 rd:5  101000 00100 0 0000000000000
46af25071cSRichard Henderson    RDPC            10 rd:5  101000 00101 0 0000000000000
47af25071cSRichard Henderson    RDFPRS          10 rd:5  101000 00110 0 0000000000000
48af25071cSRichard Henderson    RDASR17         10 rd:5  101000 10001 0 0000000000000
49af25071cSRichard Henderson    RDGSR           10 rd:5  101000 10011 0 0000000000000
50af25071cSRichard Henderson    RDSOFTINT       10 rd:5  101000 10110 0 0000000000000
51af25071cSRichard Henderson    RDTICK_CMPR     10 rd:5  101000 10111 0 0000000000000
52af25071cSRichard Henderson    RDSTICK         10 rd:5  101000 11000 0 0000000000000
53af25071cSRichard Henderson    RDSTICK_CMPR    10 rd:5  101000 11001 0 0000000000000
54af25071cSRichard Henderson    RDSTRAND_STATUS 10 rd:5  101000 11010 0 0000000000000
55af25071cSRichard Henderson  ]
56af25071cSRichard Henderson  # Before v8, all rs1 accepted; otherwise rs1==0.
57af25071cSRichard Henderson  RDY               10 rd:5  101000 rs1:5 0 0000000000000
58af25071cSRichard Henderson}
59af25071cSRichard Henderson
60668bb9b7SRichard Henderson{
610faef01bSRichard Henderson  [
620faef01bSRichard Henderson    WRY             10 00000 110000 ..... . .............  @n_r_ri
630faef01bSRichard Henderson    WRCCR           10 00010 110000 ..... . .............  @n_r_ri
640faef01bSRichard Henderson    WRASI           10 00011 110000 ..... . .............  @n_r_ri
650faef01bSRichard Henderson    WRFPRS          10 00110 110000 ..... . .............  @n_r_ri
660faef01bSRichard Henderson    {
670faef01bSRichard Henderson      WRGSR         10 10011 110000 ..... . .............  @n_r_ri
680faef01bSRichard Henderson      WRPOWERDOWN   10 10011 110000 ..... . .............  @n_r_ri
690faef01bSRichard Henderson    }
700faef01bSRichard Henderson    WRSOFTINT_SET   10 10100 110000 ..... . .............  @n_r_ri
710faef01bSRichard Henderson    WRSOFTINT_CLR   10 10101 110000 ..... . .............  @n_r_ri
720faef01bSRichard Henderson    WRSOFTINT       10 10110 110000 ..... . .............  @n_r_ri
730faef01bSRichard Henderson    WRTICK_CMPR     10 10111 110000 ..... . .............  @n_r_ri
740faef01bSRichard Henderson    WRSTICK         10 11000 110000 ..... . .............  @n_r_ri
750faef01bSRichard Henderson    WRSTICK_CMPR    10 11001 110000 ..... . .............  @n_r_ri
760faef01bSRichard Henderson  ]
770faef01bSRichard Henderson  # Before v8, rs1==0 was WRY, and the rest executed as nop.
780faef01bSRichard Henderson  [
790faef01bSRichard Henderson    NOP_v7          10 ----- 110000 ----- 0 00000000 -----
800faef01bSRichard Henderson    NOP_v7          10 ----- 110000 ----- 1 -------- -----
810faef01bSRichard Henderson  ]
820faef01bSRichard Henderson}
830faef01bSRichard Henderson
840faef01bSRichard Henderson{
85668bb9b7SRichard Henderson  RDPSR             10 rd:5  101001 00000 0 0000000000000
86668bb9b7SRichard Henderson  RDHPR_hpstate     10 rd:5  101001 00000 0 0000000000000
87668bb9b7SRichard Henderson}
88668bb9b7SRichard HendersonRDHPR_htstate       10 rd:5  101001 00001 0 0000000000000
89668bb9b7SRichard HendersonRDHPR_hintp         10 rd:5  101001 00011 0 0000000000000
90668bb9b7SRichard HendersonRDHPR_htba          10 rd:5  101001 00101 0 0000000000000
91668bb9b7SRichard HendersonRDHPR_hver          10 rd:5  101001 00110 0 0000000000000
92668bb9b7SRichard HendersonRDHPR_hstick_cmpr   10 rd:5  101001 11111 0 0000000000000
93668bb9b7SRichard Henderson
945d617bfbSRichard Henderson{
9525524734SRichard Henderson  WRPSR             10 00000 110001 ..... . .............  @n_r_ri
9625524734SRichard Henderson  SAVED             10 00000 110001 00000 0 0000000000000
9725524734SRichard Henderson}
9825524734SRichard HendersonRESTORED            10 00001 110001 00000 0 0000000000000
9925524734SRichard Henderson# UA2005 ALLCLEAN
10025524734SRichard Henderson# UA2005 OTHERW
10125524734SRichard Henderson# UA2005 NORMALW
10225524734SRichard Henderson# UA2005 INVALW
10325524734SRichard Henderson
10425524734SRichard Henderson{
1055d617bfbSRichard Henderson  RDWIM             10 rd:5  101010 00000 0 0000000000000
1065d617bfbSRichard Henderson  RDPR_tpc          10 rd:5  101010 00000 0 0000000000000
1075d617bfbSRichard Henderson}
1085d617bfbSRichard HendersonRDPR_tnpc           10 rd:5  101010 00001 0 0000000000000
1095d617bfbSRichard HendersonRDPR_tstate         10 rd:5  101010 00010 0 0000000000000
1105d617bfbSRichard HendersonRDPR_tt             10 rd:5  101010 00011 0 0000000000000
1115d617bfbSRichard HendersonRDPR_tick           10 rd:5  101010 00100 0 0000000000000
1125d617bfbSRichard HendersonRDPR_tba            10 rd:5  101010 00101 0 0000000000000
1135d617bfbSRichard HendersonRDPR_pstate         10 rd:5  101010 00110 0 0000000000000
1145d617bfbSRichard HendersonRDPR_tl             10 rd:5  101010 00111 0 0000000000000
1155d617bfbSRichard HendersonRDPR_pil            10 rd:5  101010 01000 0 0000000000000
1165d617bfbSRichard HendersonRDPR_cwp            10 rd:5  101010 01001 0 0000000000000
1175d617bfbSRichard HendersonRDPR_cansave        10 rd:5  101010 01010 0 0000000000000
1185d617bfbSRichard HendersonRDPR_canrestore     10 rd:5  101010 01011 0 0000000000000
1195d617bfbSRichard HendersonRDPR_cleanwin       10 rd:5  101010 01100 0 0000000000000
1205d617bfbSRichard HendersonRDPR_otherwin       10 rd:5  101010 01101 0 0000000000000
1215d617bfbSRichard HendersonRDPR_wstate         10 rd:5  101010 01110 0 0000000000000
1225d617bfbSRichard HendersonRDPR_gl             10 rd:5  101010 10000 0 0000000000000
1235d617bfbSRichard HendersonRDPR_strand_status  10 rd:5  101010 11010 0 0000000000000
1245d617bfbSRichard HendersonRDPR_ver            10 rd:5  101010 11111 0 0000000000000
1255d617bfbSRichard Henderson
126e8325dc0SRichard Henderson{
1279422278eSRichard Henderson  WRWIM             10 00000 110010 ..... . .............  @n_r_ri
1289422278eSRichard Henderson  WRPR_tpc          10 00000 110010 ..... . .............  @n_r_ri
1299422278eSRichard Henderson}
1309422278eSRichard HendersonWRPR_tnpc           10 00001 110010 ..... . .............  @n_r_ri
1319422278eSRichard HendersonWRPR_tstate         10 00010 110010 ..... . .............  @n_r_ri
1329422278eSRichard HendersonWRPR_tt             10 00011 110010 ..... . .............  @n_r_ri
1339422278eSRichard HendersonWRPR_tick           10 00100 110010 ..... . .............  @n_r_ri
1349422278eSRichard HendersonWRPR_tba            10 00101 110010 ..... . .............  @n_r_ri
1359422278eSRichard HendersonWRPR_pstate         10 00110 110010 ..... . .............  @n_r_ri
1369422278eSRichard HendersonWRPR_tl             10 00111 110010 ..... . .............  @n_r_ri
1379422278eSRichard HendersonWRPR_pil            10 01000 110010 ..... . .............  @n_r_ri
1389422278eSRichard HendersonWRPR_cwp            10 01001 110010 ..... . .............  @n_r_ri
1399422278eSRichard HendersonWRPR_cansave        10 01010 110010 ..... . .............  @n_r_ri
1409422278eSRichard HendersonWRPR_canrestore     10 01011 110010 ..... . .............  @n_r_ri
1419422278eSRichard HendersonWRPR_cleanwin       10 01100 110010 ..... . .............  @n_r_ri
1429422278eSRichard HendersonWRPR_otherwin       10 01101 110010 ..... . .............  @n_r_ri
1439422278eSRichard HendersonWRPR_wstate         10 01110 110010 ..... . .............  @n_r_ri
1449422278eSRichard HendersonWRPR_gl             10 10000 110010 ..... . .............  @n_r_ri
1459422278eSRichard HendersonWRPR_strand_status  10 11010 110010 ..... . .............  @n_r_ri
1469422278eSRichard Henderson
1479422278eSRichard Henderson{
148e8325dc0SRichard Henderson  FLUSHW    10 00000 101011 00000 0 0000000000000
149e8325dc0SRichard Henderson  RDTBR     10 rd:5  101011 00000 0 0000000000000
150e8325dc0SRichard Henderson}
151e8325dc0SRichard Henderson
152bb97f2f5SRichard Henderson{
153bb97f2f5SRichard Henderson  WRTBR             10 00000 110011 ..... . .............  @n_r_ri
154bb97f2f5SRichard Henderson  WRHPR_hpstate     10 00000 110011 ..... . .............  @n_r_ri
155bb97f2f5SRichard Henderson}
156bb97f2f5SRichard HendersonWRHPR_htstate       10 00001 110011 ..... . .............  @n_r_ri
157bb97f2f5SRichard HendersonWRHPR_hintp         10 00011 110011 ..... . .............  @n_r_ri
158bb97f2f5SRichard HendersonWRHPR_htba          10 00101 110011 ..... . .............  @n_r_ri
159bb97f2f5SRichard HendersonWRHPR_hstick_cmpr   10 11111 110011 ..... . .............  @n_r_ri
160bb97f2f5SRichard Henderson
161428881deSRichard HendersonADD         10 ..... 0.0000 ..... . .............          @r_r_ri_cc
162428881deSRichard HendersonAND         10 ..... 0.0001 ..... . .............          @r_r_ri_cc
163428881deSRichard HendersonOR          10 ..... 0.0010 ..... . .............          @r_r_ri_cc
164428881deSRichard HendersonXOR         10 ..... 0.0011 ..... . .............          @r_r_ri_cc
165428881deSRichard HendersonSUB         10 ..... 0.0100 ..... . .............          @r_r_ri_cc
166428881deSRichard HendersonANDN        10 ..... 0.0101 ..... . .............          @r_r_ri_cc
167428881deSRichard HendersonORN         10 ..... 0.0110 ..... . .............          @r_r_ri_cc
168428881deSRichard HendersonXORN        10 ..... 0.0111 ..... . .............          @r_r_ri_cc
169420a187dSRichard HendersonADDC        10 ..... 0.1000 ..... . .............          @r_r_ri_cc
170dfebb950SRichard HendersonSUBC        10 ..... 0.1100 ..... . .............          @r_r_ri_cc
171428881deSRichard Henderson
17222188d7dSRichard HendersonMULX        10 ..... 001001 ..... . .............          @r_r_ri_cc0
173b5372650SRichard HendersonUMUL        10 ..... 0.1010 ..... . .............          @r_r_ri_cc
174b5372650SRichard HendersonSMUL        10 ..... 0.1011 ..... . .............          @r_r_ri_cc
175a9aba13dSRichard HendersonMULScc      10 ..... 100100 ..... . .............          @r_r_ri_cc1
17622188d7dSRichard Henderson
1774ee85ea9SRichard HendersonUDIVX       10 ..... 001101 ..... . .............          @r_r_ri_cc0
1784ee85ea9SRichard HendersonSDIVX       10 ..... 101101 ..... . .............          @r_r_ri_cc0
179c2636853SRichard HendersonUDIV        10 ..... 0.1110 ..... . .............          @r_r_ri_cc
180c2636853SRichard HendersonSDIV        10 ..... 0.1111 ..... . .............          @r_r_ri_cc
1814ee85ea9SRichard Henderson
182a9aba13dSRichard HendersonTADDcc      10 ..... 100000 ..... . .............          @r_r_ri_cc1
183a9aba13dSRichard HendersonTSUBcc      10 ..... 100001 ..... . .............          @r_r_ri_cc1
184a9aba13dSRichard HendersonTADDccTV    10 ..... 100010 ..... . .............          @r_r_ri_cc1
185a9aba13dSRichard HendersonTSUBccTV    10 ..... 100011 ..... . .............          @r_r_ri_cc1
186a9aba13dSRichard Henderson
1879c6ec5bcSRichard HendersonPOPC        10 rd:5  101110 00000 imm:1 rs2_or_imm:s13     \
1889c6ec5bcSRichard Henderson            &r_r_ri_cc rs1=0 cc=0
1899c6ec5bcSRichard Henderson
1905fc546eeSRichard Henderson&shiftr     rd rs1 rs2 x:bool
1915fc546eeSRichard Henderson@shiftr     .. rd:5  ...... rs1:5 . x:1 ....... rs2:5      &shiftr
1925fc546eeSRichard Henderson
1935fc546eeSRichard HendersonSLL_r       10 ..... 100101 ..... 0 .   0000000 .....      @shiftr
1945fc546eeSRichard HendersonSRL_r       10 ..... 100110 ..... 0 .   0000000 .....      @shiftr
1955fc546eeSRichard HendersonSRA_r       10 ..... 100111 ..... 0 .   0000000 .....      @shiftr
1965fc546eeSRichard Henderson
1975fc546eeSRichard Henderson&shifti     rd rs1 i x:bool
1985fc546eeSRichard Henderson@shifti     .. rd:5  ...... rs1:5 . x:1 ...... i:6         &shifti
1995fc546eeSRichard Henderson
2005fc546eeSRichard HendersonSLL_i       10 ..... 100101 ..... 1 .   000000 ......      @shifti
2015fc546eeSRichard HendersonSRL_i       10 ..... 100110 ..... 1 .   000000 ......      @shifti
2025fc546eeSRichard HendersonSRA_i       10 ..... 100111 ..... 1 .   000000 ......      @shifti
2035fc546eeSRichard Henderson
20430376636SRichard HendersonTcc_r       10 0 cond:4 111010 rs1:5 0 cc:1 0000000 rs2:5
20530376636SRichard Henderson{
20630376636SRichard Henderson  # For v7, the entire simm13 field is present, but masked to 7 bits.
20730376636SRichard Henderson  # For v8, [12:7] are reserved.  However, a compatibility note for
20830376636SRichard Henderson  # the Tcc insn in the v9 manual suggests that the v8 reserved field
20930376636SRichard Henderson  # was ignored and did not produce traps.
21030376636SRichard Henderson  Tcc_i_v7  10 0 cond:4 111010 rs1:5 1 ------ i:7
21130376636SRichard Henderson
21230376636SRichard Henderson  # For v9, bits [12:11] are cc1 and cc0 (and cc0 must be 0).
21330376636SRichard Henderson  # Bits [10:8] are reserved and the OSA2011 manual says they must be 0.
21430376636SRichard Henderson  Tcc_i_v9  10 0 cond:4 111010 rs1:5 1 cc:1 0 000 i:8
21530376636SRichard Henderson}
216fb4ed7aaSRichard Henderson
217fb4ed7aaSRichard HendersonMOVcc       10 rd:5  101100 1 cond:4 imm:1 cc:1 0 rs2_or_imm:s11
218fb4ed7aaSRichard HendersonMOVfcc      10 rd:5  101100 0 cond:4 imm:1 cc:2   rs2_or_imm:s11
219fb4ed7aaSRichard HendersonMOVR        10 rd:5  101111 rs1:5    imm:1 cond:3 rs2_or_imm:s10
220d3c7e8adSRichard Henderson
22186b82fe0SRichard HendersonJMPL        10 ..... 111000 ..... . .............          @r_r_ri
22286b82fe0SRichard Henderson{
22386b82fe0SRichard Henderson  RETT      10 00000 111001 ..... . .............          @n_r_ri
22486b82fe0SRichard Henderson  RETURN    10 00000 111001 ..... . .............          @n_r_ri
22586b82fe0SRichard Henderson}
226d3825800SRichard HendersonNOP         10 00000 111011 ----- 0 00000000-----          # FLUSH reg+reg
227d3825800SRichard HendersonNOP         10 00000 111011 ----- 1 -------------          # FLUSH reg+imm
228d3825800SRichard HendersonSAVE        10 ..... 111100 ..... . .............          @r_r_ri
229d3825800SRichard HendersonRESTORE     10 ..... 111101 ..... . .............          @r_r_ri
23086b82fe0SRichard Henderson
231*8f75b8a4SRichard HendersonDONE        10 00000 111110 00000 0 0000000000000
232*8f75b8a4SRichard HendersonRETRY       10 00001 111110 00000 0 0000000000000
233*8f75b8a4SRichard Henderson
234d3c7e8adSRichard HendersonNCP         10 ----- 110110 ----- --------- -----          # v8 CPop1
235d3c7e8adSRichard HendersonNCP         10 ----- 110111 ----- --------- -----          # v8 CPop2
236d3c7e8adSRichard Henderson
237d3c7e8adSRichard HendersonNCP         11 ----- 110000 ----- --------- -----          # v8 LDC
238d3c7e8adSRichard HendersonNCP         11 ----- 110001 ----- --------- -----          # v8 LDCSR
239d3c7e8adSRichard HendersonNCP         11 ----- 110011 ----- --------- -----          # v8 LDDC
240d3c7e8adSRichard HendersonNCP         11 ----- 110100 ----- --------- -----          # v8 STC
241d3c7e8adSRichard HendersonNCP         11 ----- 110101 ----- --------- -----          # v8 STCSR
242d3c7e8adSRichard HendersonNCP         11 ----- 110110 ----- --------- -----          # v8 STDCQ
243d3c7e8adSRichard HendersonNCP         11 ----- 110111 ----- --------- -----          # v8 STDC
244