]> git.proxmox.com Git - mirror_qemu.git/blame - target/riscv/insn32.decode
target/riscv: Convert RV32F insns to decodetree
[mirror_qemu.git] / target / riscv / insn32.decode
CommitLineData
2a53cff4
BK
1#
2# RISC-V translation routines for the RVXI Base Integer Instruction Set.
3#
4# Copyright (c) 2018 Peer Adelt, peer.adelt@hni.uni-paderborn.de
5# Bastian Koppelmann, kbastian@mail.uni-paderborn.de
6#
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.
10#
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
14# more details.
15#
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/>.
18
19# Fields:
6f0e74ff 20%rs3 27:5
3cca75a6
BK
21%rs2 20:5
22%rs1 15:5
2a53cff4
BK
23%rd 7:5
24
b73a987b 25%sh10 20:10
771fbe15 26%csr 20:12
6f0e74ff 27%rm 12:3
b73a987b 28
2a53cff4 29# immediates:
3cca75a6 30%imm_i 20:s12
c1000d4e 31%imm_s 25:s7 7:5
3cca75a6
BK
32%imm_b 31:s1 7:1 25:6 8:4 !function=ex_shift_1
33%imm_j 31:s1 12:8 20:1 21:10 !function=ex_shift_1
2a53cff4
BK
34%imm_u 12:s20 !function=ex_shift_12
35
3cca75a6
BK
36# Argument sets:
37&b imm rs2 rs1
b73a987b 38&shift shamt rs1 rd
3b77c289 39&atomic aq rl rs2 rs1 rd
3cca75a6 40
2a53cff4 41# Formats 32:
b73a987b 42@r ....... ..... ..... ... ..... ....... %rs2 %rs1 %rd
3cca75a6
BK
43@i ............ ..... ... ..... ....... imm=%imm_i %rs1 %rd
44@b ....... ..... ..... ... ..... ....... &b imm=%imm_b %rs2 %rs1
c1000d4e 45@s ....... ..... ..... ... ..... ....... imm=%imm_s %rs2 %rs1
2a53cff4 46@u .................... ..... ....... imm=%imm_u %rd
3cca75a6 47@j .................... ..... ....... imm=%imm_j %rd
2a53cff4 48
b73a987b 49@sh ...... ...... ..... ... ..... ....... &shift shamt=%sh10 %rs1 %rd
771fbe15 50@csr ............ ..... ... ..... ....... %csr %rs1 %rd
b73a987b 51
3b77c289
BK
52@atom_ld ..... aq:1 rl:1 ..... ........ ..... ....... &atomic rs2=0 %rs1 %rd
53@atom_st ..... aq:1 rl:1 ..... ........ ..... ....... &atomic %rs2 %rs1 %rd
54
6f0e74ff
BK
55@r4_rm ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rm %rd
56@r_rm ....... ..... ..... ... ..... ....... %rs2 %rs1 %rm %rd
57@r2_rm ....... ..... ..... ... ..... ....... %rs1 %rm %rd
58@r2 ....... ..... ..... ... ..... ....... %rs1 %rd
59
2a53cff4
BK
60# *** RV32I Base Instruction Set ***
61lui .................... ..... 0110111 @u
62auipc .................... ..... 0010111 @u
3cca75a6
BK
63jal .................... ..... 1101111 @j
64jalr ............ ..... 000 ..... 1100111 @i
65beq ....... ..... ..... 000 ..... 1100011 @b
66bne ....... ..... ..... 001 ..... 1100011 @b
67blt ....... ..... ..... 100 ..... 1100011 @b
68bge ....... ..... ..... 101 ..... 1100011 @b
69bltu ....... ..... ..... 110 ..... 1100011 @b
70bgeu ....... ..... ..... 111 ..... 1100011 @b
c1000d4e
BK
71lb ............ ..... 000 ..... 0000011 @i
72lh ............ ..... 001 ..... 0000011 @i
73lw ............ ..... 010 ..... 0000011 @i
74lbu ............ ..... 100 ..... 0000011 @i
75lhu ............ ..... 101 ..... 0000011 @i
76sb ....... ..... ..... 000 ..... 0100011 @s
77sh ....... ..... ..... 001 ..... 0100011 @s
78sw ....... ..... ..... 010 ..... 0100011 @s
b73a987b
BK
79addi ............ ..... 000 ..... 0010011 @i
80slti ............ ..... 010 ..... 0010011 @i
81sltiu ............ ..... 011 ..... 0010011 @i
82xori ............ ..... 100 ..... 0010011 @i
83ori ............ ..... 110 ..... 0010011 @i
84andi ............ ..... 111 ..... 0010011 @i
85slli 00.... ...... ..... 001 ..... 0010011 @sh
86srli 00.... ...... ..... 101 ..... 0010011 @sh
87srai 01.... ...... ..... 101 ..... 0010011 @sh
88add 0000000 ..... ..... 000 ..... 0110011 @r
89sub 0100000 ..... ..... 000 ..... 0110011 @r
90sll 0000000 ..... ..... 001 ..... 0110011 @r
91slt 0000000 ..... ..... 010 ..... 0110011 @r
92sltu 0000000 ..... ..... 011 ..... 0110011 @r
93xor 0000000 ..... ..... 100 ..... 0110011 @r
94srl 0000000 ..... ..... 101 ..... 0110011 @r
95sra 0100000 ..... ..... 101 ..... 0110011 @r
96or 0000000 ..... ..... 110 ..... 0110011 @r
97and 0000000 ..... ..... 111 ..... 0110011 @r
0c865e85
BK
98fence ---- pred:4 succ:4 ----- 000 ----- 0001111
99fence_i ---- ---- ---- ----- 001 ----- 0001111
771fbe15
BK
100csrrw ............ ..... 001 ..... 1110011 @csr
101csrrs ............ ..... 010 ..... 1110011 @csr
102csrrc ............ ..... 011 ..... 1110011 @csr
103csrrwi ............ ..... 101 ..... 1110011 @csr
104csrrsi ............ ..... 110 ..... 1110011 @csr
105csrrci ............ ..... 111 ..... 1110011 @csr
d2e2c1e4
BK
106
107# *** RV32M Standard Extension ***
108mul 0000001 ..... ..... 000 ..... 0110011 @r
109mulh 0000001 ..... ..... 001 ..... 0110011 @r
110mulhsu 0000001 ..... ..... 010 ..... 0110011 @r
111mulhu 0000001 ..... ..... 011 ..... 0110011 @r
112div 0000001 ..... ..... 100 ..... 0110011 @r
113divu 0000001 ..... ..... 101 ..... 0110011 @r
114rem 0000001 ..... ..... 110 ..... 0110011 @r
115remu 0000001 ..... ..... 111 ..... 0110011 @r
3b77c289
BK
116
117# *** RV32A Standard Extension ***
118lr_w 00010 . . 00000 ..... 010 ..... 0101111 @atom_ld
119sc_w 00011 . . ..... ..... 010 ..... 0101111 @atom_st
120amoswap_w 00001 . . ..... ..... 010 ..... 0101111 @atom_st
121amoadd_w 00000 . . ..... ..... 010 ..... 0101111 @atom_st
122amoxor_w 00100 . . ..... ..... 010 ..... 0101111 @atom_st
123amoand_w 01100 . . ..... ..... 010 ..... 0101111 @atom_st
124amoor_w 01000 . . ..... ..... 010 ..... 0101111 @atom_st
125amomin_w 10000 . . ..... ..... 010 ..... 0101111 @atom_st
126amomax_w 10100 . . ..... ..... 010 ..... 0101111 @atom_st
127amominu_w 11000 . . ..... ..... 010 ..... 0101111 @atom_st
128amomaxu_w 11100 . . ..... ..... 010 ..... 0101111 @atom_st
6f0e74ff
BK
129
130# *** RV32F Standard Extension ***
131flw ............ ..... 010 ..... 0000111 @i
132fsw ....... ..... ..... 010 ..... 0100111 @s
133fmadd_s ..... 00 ..... ..... ... ..... 1000011 @r4_rm
134fmsub_s ..... 00 ..... ..... ... ..... 1000111 @r4_rm
135fnmsub_s ..... 00 ..... ..... ... ..... 1001011 @r4_rm
136fnmadd_s ..... 00 ..... ..... ... ..... 1001111 @r4_rm
137fadd_s 0000000 ..... ..... ... ..... 1010011 @r_rm
138fsub_s 0000100 ..... ..... ... ..... 1010011 @r_rm
139fmul_s 0001000 ..... ..... ... ..... 1010011 @r_rm
140fdiv_s 0001100 ..... ..... ... ..... 1010011 @r_rm
141fsqrt_s 0101100 00000 ..... ... ..... 1010011 @r2_rm
142fsgnj_s 0010000 ..... ..... 000 ..... 1010011 @r
143fsgnjn_s 0010000 ..... ..... 001 ..... 1010011 @r
144fsgnjx_s 0010000 ..... ..... 010 ..... 1010011 @r
145fmin_s 0010100 ..... ..... 000 ..... 1010011 @r
146fmax_s 0010100 ..... ..... 001 ..... 1010011 @r
147fcvt_w_s 1100000 00000 ..... ... ..... 1010011 @r2_rm
148fcvt_wu_s 1100000 00001 ..... ... ..... 1010011 @r2_rm
149fmv_x_w 1110000 00000 ..... 000 ..... 1010011 @r2
150feq_s 1010000 ..... ..... 010 ..... 1010011 @r
151flt_s 1010000 ..... ..... 001 ..... 1010011 @r
152fle_s 1010000 ..... ..... 000 ..... 1010011 @r
153fclass_s 1110000 00000 ..... 001 ..... 1010011 @r2
154fcvt_s_w 1101000 00000 ..... ... ..... 1010011 @r2_rm
155fcvt_s_wu 1101000 00001 ..... ... ..... 1010011 @r2_rm
156fmv_w_x 1111000 00000 ..... 000 ..... 1010011 @r2