2 # RISC-V translation routines for the RVXI Base Integer Instruction Set.
4 # Copyright (c) 2018 Peer Adelt, peer.adelt@hni.uni-paderborn.de
5 # Bastian Koppelmann, kbastian@mail.uni-paderborn.de
7 # This program is free software; you can redistribute it and/or modify it
8 # under the terms and conditions of the GNU General Public License,
9 # version 2 or later, as published by the Free Software Foundation.
11 # This program is distributed in the hope it will be useful, but WITHOUT
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 # You should have received a copy of the GNU General Public License along with
17 # this program. If not, see <http://www.gnu.org/licenses/>.
28 %nf 29:3 !function=ex_plus_1
33 %imm_b 31:s1 7:1 25:6 8:4 !function=ex_shift_1
34 %imm_j 31:s1 12:8 20:1 21:10 !function=ex_shift_1
35 %imm_u 12:s20 !function=ex_shift_12
46 &atomic aq rl rs2 rs1 rd
48 &rnfvm vm rd rs1 rs2 nf
51 @r ....... ..... ..... ... ..... ....... &r %rs2 %rs1 %rd
52 @i ............ ..... ... ..... ....... &i imm=%imm_i %rs1 %rd
53 @b ....... ..... ..... ... ..... ....... &b imm=%imm_b %rs2 %rs1
54 @s ....... ..... ..... ... ..... ....... &s imm=%imm_s %rs2 %rs1
55 @u .................... ..... ....... &u imm=%imm_u %rd
56 @j .................... ..... ....... &j imm=%imm_j %rd
58 @sh ...... ...... ..... ... ..... ....... &shift shamt=%sh10 %rs1 %rd
59 @csr ............ ..... ... ..... ....... %csr %rs1 %rd
61 @atom_ld ..... aq:1 rl:1 ..... ........ ..... ....... &atomic rs2=0 %rs1 %rd
62 @atom_st ..... aq:1 rl:1 ..... ........ ..... ....... &atomic %rs2 %rs1 %rd
64 @r4_rm ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rm %rd
65 @r_rm ....... ..... ..... ... ..... ....... %rs2 %rs1 %rm %rd
66 @r2_rm ....... ..... ..... ... ..... ....... %rs1 %rm %rd
67 @r2 ....... ..... ..... ... ..... ....... %rs1 %rd
68 @r2_nfvm ... ... vm:1 ..... ..... ... ..... ....... &r2nfvm %nf %rs1 %rd
69 @r_nfvm ... ... vm:1 ..... ..... ... ..... ....... &rnfvm %nf %rs2 %rs1 %rd
70 @r2_zimm . zimm:11 ..... ... ..... ....... %rs1 %rd
72 @hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1
73 @hfence_vvma ....... ..... ..... ... ..... ....... %rs2 %rs1
75 @sfence_vma ....... ..... ..... ... ..... ....... %rs2 %rs1
76 @sfence_vm ....... ..... ..... ... ..... ....... %rs1
79 # *** Privileged Instructions ***
80 ecall 000000000000 00000 000 00000 1110011
81 ebreak 000000000001 00000 000 00000 1110011
82 uret 0000000 00010 00000 000 00000 1110011
83 sret 0001000 00010 00000 000 00000 1110011
84 mret 0011000 00010 00000 000 00000 1110011
85 wfi 0001000 00101 00000 000 00000 1110011
86 sfence_vma 0001001 ..... ..... 000 00000 1110011 @sfence_vma
87 sfence_vm 0001000 00100 ..... 000 00000 1110011 @sfence_vm
89 # *** RV32I Base Instruction Set ***
90 lui .................... ..... 0110111 @u
91 auipc .................... ..... 0010111 @u
92 jal .................... ..... 1101111 @j
93 jalr ............ ..... 000 ..... 1100111 @i
94 beq ....... ..... ..... 000 ..... 1100011 @b
95 bne ....... ..... ..... 001 ..... 1100011 @b
96 blt ....... ..... ..... 100 ..... 1100011 @b
97 bge ....... ..... ..... 101 ..... 1100011 @b
98 bltu ....... ..... ..... 110 ..... 1100011 @b
99 bgeu ....... ..... ..... 111 ..... 1100011 @b
100 lb ............ ..... 000 ..... 0000011 @i
101 lh ............ ..... 001 ..... 0000011 @i
102 lw ............ ..... 010 ..... 0000011 @i
103 lbu ............ ..... 100 ..... 0000011 @i
104 lhu ............ ..... 101 ..... 0000011 @i
105 sb ....... ..... ..... 000 ..... 0100011 @s
106 sh ....... ..... ..... 001 ..... 0100011 @s
107 sw ....... ..... ..... 010 ..... 0100011 @s
108 addi ............ ..... 000 ..... 0010011 @i
109 slti ............ ..... 010 ..... 0010011 @i
110 sltiu ............ ..... 011 ..... 0010011 @i
111 xori ............ ..... 100 ..... 0010011 @i
112 ori ............ ..... 110 ..... 0010011 @i
113 andi ............ ..... 111 ..... 0010011 @i
114 slli 00.... ...... ..... 001 ..... 0010011 @sh
115 srli 00.... ...... ..... 101 ..... 0010011 @sh
116 srai 01.... ...... ..... 101 ..... 0010011 @sh
117 add 0000000 ..... ..... 000 ..... 0110011 @r
118 sub 0100000 ..... ..... 000 ..... 0110011 @r
119 sll 0000000 ..... ..... 001 ..... 0110011 @r
120 slt 0000000 ..... ..... 010 ..... 0110011 @r
121 sltu 0000000 ..... ..... 011 ..... 0110011 @r
122 xor 0000000 ..... ..... 100 ..... 0110011 @r
123 srl 0000000 ..... ..... 101 ..... 0110011 @r
124 sra 0100000 ..... ..... 101 ..... 0110011 @r
125 or 0000000 ..... ..... 110 ..... 0110011 @r
126 and 0000000 ..... ..... 111 ..... 0110011 @r
127 fence ---- pred:4 succ:4 ----- 000 ----- 0001111
128 fence_i ---- ---- ---- ----- 001 ----- 0001111
129 csrrw ............ ..... 001 ..... 1110011 @csr
130 csrrs ............ ..... 010 ..... 1110011 @csr
131 csrrc ............ ..... 011 ..... 1110011 @csr
132 csrrwi ............ ..... 101 ..... 1110011 @csr
133 csrrsi ............ ..... 110 ..... 1110011 @csr
134 csrrci ............ ..... 111 ..... 1110011 @csr
136 # *** RV32M Standard Extension ***
137 mul 0000001 ..... ..... 000 ..... 0110011 @r
138 mulh 0000001 ..... ..... 001 ..... 0110011 @r
139 mulhsu 0000001 ..... ..... 010 ..... 0110011 @r
140 mulhu 0000001 ..... ..... 011 ..... 0110011 @r
141 div 0000001 ..... ..... 100 ..... 0110011 @r
142 divu 0000001 ..... ..... 101 ..... 0110011 @r
143 rem 0000001 ..... ..... 110 ..... 0110011 @r
144 remu 0000001 ..... ..... 111 ..... 0110011 @r
146 # *** RV32A Standard Extension ***
147 lr_w 00010 . . 00000 ..... 010 ..... 0101111 @atom_ld
148 sc_w 00011 . . ..... ..... 010 ..... 0101111 @atom_st
149 amoswap_w 00001 . . ..... ..... 010 ..... 0101111 @atom_st
150 amoadd_w 00000 . . ..... ..... 010 ..... 0101111 @atom_st
151 amoxor_w 00100 . . ..... ..... 010 ..... 0101111 @atom_st
152 amoand_w 01100 . . ..... ..... 010 ..... 0101111 @atom_st
153 amoor_w 01000 . . ..... ..... 010 ..... 0101111 @atom_st
154 amomin_w 10000 . . ..... ..... 010 ..... 0101111 @atom_st
155 amomax_w 10100 . . ..... ..... 010 ..... 0101111 @atom_st
156 amominu_w 11000 . . ..... ..... 010 ..... 0101111 @atom_st
157 amomaxu_w 11100 . . ..... ..... 010 ..... 0101111 @atom_st
159 # *** RV32F Standard Extension ***
160 flw ............ ..... 010 ..... 0000111 @i
161 fsw ....... ..... ..... 010 ..... 0100111 @s
162 fmadd_s ..... 00 ..... ..... ... ..... 1000011 @r4_rm
163 fmsub_s ..... 00 ..... ..... ... ..... 1000111 @r4_rm
164 fnmsub_s ..... 00 ..... ..... ... ..... 1001011 @r4_rm
165 fnmadd_s ..... 00 ..... ..... ... ..... 1001111 @r4_rm
166 fadd_s 0000000 ..... ..... ... ..... 1010011 @r_rm
167 fsub_s 0000100 ..... ..... ... ..... 1010011 @r_rm
168 fmul_s 0001000 ..... ..... ... ..... 1010011 @r_rm
169 fdiv_s 0001100 ..... ..... ... ..... 1010011 @r_rm
170 fsqrt_s 0101100 00000 ..... ... ..... 1010011 @r2_rm
171 fsgnj_s 0010000 ..... ..... 000 ..... 1010011 @r
172 fsgnjn_s 0010000 ..... ..... 001 ..... 1010011 @r
173 fsgnjx_s 0010000 ..... ..... 010 ..... 1010011 @r
174 fmin_s 0010100 ..... ..... 000 ..... 1010011 @r
175 fmax_s 0010100 ..... ..... 001 ..... 1010011 @r
176 fcvt_w_s 1100000 00000 ..... ... ..... 1010011 @r2_rm
177 fcvt_wu_s 1100000 00001 ..... ... ..... 1010011 @r2_rm
178 fmv_x_w 1110000 00000 ..... 000 ..... 1010011 @r2
179 feq_s 1010000 ..... ..... 010 ..... 1010011 @r
180 flt_s 1010000 ..... ..... 001 ..... 1010011 @r
181 fle_s 1010000 ..... ..... 000 ..... 1010011 @r
182 fclass_s 1110000 00000 ..... 001 ..... 1010011 @r2
183 fcvt_s_w 1101000 00000 ..... ... ..... 1010011 @r2_rm
184 fcvt_s_wu 1101000 00001 ..... ... ..... 1010011 @r2_rm
185 fmv_w_x 1111000 00000 ..... 000 ..... 1010011 @r2
187 # *** RV32D Standard Extension ***
188 fld ............ ..... 011 ..... 0000111 @i
189 fsd ....... ..... ..... 011 ..... 0100111 @s
190 fmadd_d ..... 01 ..... ..... ... ..... 1000011 @r4_rm
191 fmsub_d ..... 01 ..... ..... ... ..... 1000111 @r4_rm
192 fnmsub_d ..... 01 ..... ..... ... ..... 1001011 @r4_rm
193 fnmadd_d ..... 01 ..... ..... ... ..... 1001111 @r4_rm
194 fadd_d 0000001 ..... ..... ... ..... 1010011 @r_rm
195 fsub_d 0000101 ..... ..... ... ..... 1010011 @r_rm
196 fmul_d 0001001 ..... ..... ... ..... 1010011 @r_rm
197 fdiv_d 0001101 ..... ..... ... ..... 1010011 @r_rm
198 fsqrt_d 0101101 00000 ..... ... ..... 1010011 @r2_rm
199 fsgnj_d 0010001 ..... ..... 000 ..... 1010011 @r
200 fsgnjn_d 0010001 ..... ..... 001 ..... 1010011 @r
201 fsgnjx_d 0010001 ..... ..... 010 ..... 1010011 @r
202 fmin_d 0010101 ..... ..... 000 ..... 1010011 @r
203 fmax_d 0010101 ..... ..... 001 ..... 1010011 @r
204 fcvt_s_d 0100000 00001 ..... ... ..... 1010011 @r2_rm
205 fcvt_d_s 0100001 00000 ..... ... ..... 1010011 @r2_rm
206 feq_d 1010001 ..... ..... 010 ..... 1010011 @r
207 flt_d 1010001 ..... ..... 001 ..... 1010011 @r
208 fle_d 1010001 ..... ..... 000 ..... 1010011 @r
209 fclass_d 1110001 00000 ..... 001 ..... 1010011 @r2
210 fcvt_w_d 1100001 00000 ..... ... ..... 1010011 @r2_rm
211 fcvt_wu_d 1100001 00001 ..... ... ..... 1010011 @r2_rm
212 fcvt_d_w 1101001 00000 ..... ... ..... 1010011 @r2_rm
213 fcvt_d_wu 1101001 00001 ..... ... ..... 1010011 @r2_rm
215 # *** RV32H Base Instruction Set ***
216 hfence_gvma 0110001 ..... ..... 000 00000 1110011 @hfence_gvma
217 hfence_vvma 0010001 ..... ..... 000 00000 1110011 @hfence_vvma
219 # *** RV32V Extension ***
221 # *** Vector loads and stores are encoded within LOADFP/STORE-FP ***
222 vlb_v ... 100 . 00000 ..... 000 ..... 0000111 @r2_nfvm
223 vlh_v ... 100 . 00000 ..... 101 ..... 0000111 @r2_nfvm
224 vlw_v ... 100 . 00000 ..... 110 ..... 0000111 @r2_nfvm
225 vle_v ... 000 . 00000 ..... 111 ..... 0000111 @r2_nfvm
226 vlbu_v ... 000 . 00000 ..... 000 ..... 0000111 @r2_nfvm
227 vlhu_v ... 000 . 00000 ..... 101 ..... 0000111 @r2_nfvm
228 vlwu_v ... 000 . 00000 ..... 110 ..... 0000111 @r2_nfvm
229 vsb_v ... 000 . 00000 ..... 000 ..... 0100111 @r2_nfvm
230 vsh_v ... 000 . 00000 ..... 101 ..... 0100111 @r2_nfvm
231 vsw_v ... 000 . 00000 ..... 110 ..... 0100111 @r2_nfvm
232 vse_v ... 000 . 00000 ..... 111 ..... 0100111 @r2_nfvm
234 vlsb_v ... 110 . ..... ..... 000 ..... 0000111 @r_nfvm
235 vlsh_v ... 110 . ..... ..... 101 ..... 0000111 @r_nfvm
236 vlsw_v ... 110 . ..... ..... 110 ..... 0000111 @r_nfvm
237 vlse_v ... 010 . ..... ..... 111 ..... 0000111 @r_nfvm
238 vlsbu_v ... 010 . ..... ..... 000 ..... 0000111 @r_nfvm
239 vlshu_v ... 010 . ..... ..... 101 ..... 0000111 @r_nfvm
240 vlswu_v ... 010 . ..... ..... 110 ..... 0000111 @r_nfvm
241 vssb_v ... 010 . ..... ..... 000 ..... 0100111 @r_nfvm
242 vssh_v ... 010 . ..... ..... 101 ..... 0100111 @r_nfvm
243 vssw_v ... 010 . ..... ..... 110 ..... 0100111 @r_nfvm
244 vsse_v ... 010 . ..... ..... 111 ..... 0100111 @r_nfvm
246 vlxb_v ... 111 . ..... ..... 000 ..... 0000111 @r_nfvm
247 vlxh_v ... 111 . ..... ..... 101 ..... 0000111 @r_nfvm
248 vlxw_v ... 111 . ..... ..... 110 ..... 0000111 @r_nfvm
249 vlxe_v ... 011 . ..... ..... 111 ..... 0000111 @r_nfvm
250 vlxbu_v ... 011 . ..... ..... 000 ..... 0000111 @r_nfvm
251 vlxhu_v ... 011 . ..... ..... 101 ..... 0000111 @r_nfvm
252 vlxwu_v ... 011 . ..... ..... 110 ..... 0000111 @r_nfvm
253 # Vector ordered-indexed and unordered-indexed store insns.
254 vsxb_v ... -11 . ..... ..... 000 ..... 0100111 @r_nfvm
255 vsxh_v ... -11 . ..... ..... 101 ..... 0100111 @r_nfvm
256 vsxw_v ... -11 . ..... ..... 110 ..... 0100111 @r_nfvm
257 vsxe_v ... -11 . ..... ..... 111 ..... 0100111 @r_nfvm
259 # *** new major opcode OP-V ***
260 vsetvli 0 ........... ..... 111 ..... 1010111 @r2_zimm
261 vsetvl 1000000 ..... ..... 111 ..... 1010111 @r