target/riscv: Consolidate RV32/64 16-bit instructions
This patch removes the insn16-32.decode and insn16-64.decode decode files and consolidates the instructions into the general RISC-V insn16.decode decode tree. This means that all of the instructions are avaliable in both the 32-bit and 64-bit builds. This also means that we run a check to ensure we are running a 64-bit softmmu before we execute the 64-bit only instructions. This allows us to include the 32-bit instructions in the 64-bit build, while also ensuring that 32-bit only software can not execute the instructions. Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 01e2b0efeae311adc7ebf133c2cde6a7a37224d7.1619234854.git.alistair.francis@wdc.com
This commit is contained in:
parent
daf866b606
commit
6baba30ad0
@ -1,28 +0,0 @@
|
|||||||
#
|
|
||||||
# RISC-V translation routines for the RVXI Base Integer Instruction Set.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2018 Peer Adelt, peer.adelt@hni.uni-paderborn.de
|
|
||||||
# Bastian Koppelmann, kbastian@mail.uni-paderborn.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms and conditions of the GNU General Public License,
|
|
||||||
# version 2 or later, as published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
# more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# *** RV32C Standard Extension (Quadrant 0) ***
|
|
||||||
flw 011 ... ... .. ... 00 @cl_w
|
|
||||||
fsw 111 ... ... .. ... 00 @cs_w
|
|
||||||
|
|
||||||
# *** RV32C Standard Extension (Quadrant 1) ***
|
|
||||||
jal 001 ........... 01 @cj rd=1 # C.JAL
|
|
||||||
|
|
||||||
# *** RV32C Standard Extension (Quadrant 2) ***
|
|
||||||
flw 011 . ..... ..... 10 @c_lwsp
|
|
||||||
fsw 111 . ..... ..... 10 @c_swsp
|
|
@ -1,36 +0,0 @@
|
|||||||
#
|
|
||||||
# RISC-V translation routines for the RVXI Base Integer Instruction Set.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2018 Peer Adelt, peer.adelt@hni.uni-paderborn.de
|
|
||||||
# Bastian Koppelmann, kbastian@mail.uni-paderborn.de
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
# under the terms and conditions of the GNU General Public License,
|
|
||||||
# version 2 or later, as published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
# more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# *** RV64C Standard Extension (Quadrant 0) ***
|
|
||||||
ld 011 ... ... .. ... 00 @cl_d
|
|
||||||
sd 111 ... ... .. ... 00 @cs_d
|
|
||||||
|
|
||||||
# *** RV64C Standard Extension (Quadrant 1) ***
|
|
||||||
{
|
|
||||||
illegal 001 - 00000 ----- 01 # c.addiw, RES rd=0
|
|
||||||
addiw 001 . ..... ..... 01 @ci
|
|
||||||
}
|
|
||||||
subw 100 1 11 ... 00 ... 01 @cs_2
|
|
||||||
addw 100 1 11 ... 01 ... 01 @cs_2
|
|
||||||
|
|
||||||
# *** RV64C Standard Extension (Quadrant 2) ***
|
|
||||||
{
|
|
||||||
illegal 011 - 00000 ----- 10 # c.ldsp, RES rd=0
|
|
||||||
ld 011 . ..... ..... 10 @c_ldsp
|
|
||||||
}
|
|
||||||
sd 111 . ..... ..... 10 @c_sdsp
|
|
@ -92,6 +92,16 @@ lw 010 ... ... .. ... 00 @cl_w
|
|||||||
fsd 101 ... ... .. ... 00 @cs_d
|
fsd 101 ... ... .. ... 00 @cs_d
|
||||||
sw 110 ... ... .. ... 00 @cs_w
|
sw 110 ... ... .. ... 00 @cs_w
|
||||||
|
|
||||||
|
# *** RV32C and RV64C specific Standard Extension (Quadrant 0) ***
|
||||||
|
{
|
||||||
|
ld 011 ... ... .. ... 00 @cl_d
|
||||||
|
flw 011 ... ... .. ... 00 @cl_w
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sd 111 ... ... .. ... 00 @cs_d
|
||||||
|
fsw 111 ... ... .. ... 00 @cs_w
|
||||||
|
}
|
||||||
|
|
||||||
# *** RV32/64C Standard Extension (Quadrant 1) ***
|
# *** RV32/64C Standard Extension (Quadrant 1) ***
|
||||||
addi 000 . ..... ..... 01 @ci
|
addi 000 . ..... ..... 01 @ci
|
||||||
addi 010 . ..... ..... 01 @c_li
|
addi 010 . ..... ..... 01 @c_li
|
||||||
@ -111,6 +121,15 @@ jal 101 ........... 01 @cj rd=0 # C.J
|
|||||||
beq 110 ... ... ..... 01 @cb_z
|
beq 110 ... ... ..... 01 @cb_z
|
||||||
bne 111 ... ... ..... 01 @cb_z
|
bne 111 ... ... ..... 01 @cb_z
|
||||||
|
|
||||||
|
# *** RV64C and RV32C specific Standard Extension (Quadrant 1) ***
|
||||||
|
{
|
||||||
|
c64_illegal 001 - 00000 ----- 01 # c.addiw, RES rd=0
|
||||||
|
addiw 001 . ..... ..... 01 @ci
|
||||||
|
jal 001 ........... 01 @cj rd=1 # C.JAL
|
||||||
|
}
|
||||||
|
subw 100 1 11 ... 00 ... 01 @cs_2
|
||||||
|
addw 100 1 11 ... 01 ... 01 @cs_2
|
||||||
|
|
||||||
# *** RV32/64C Standard Extension (Quadrant 2) ***
|
# *** RV32/64C Standard Extension (Quadrant 2) ***
|
||||||
slli 000 . ..... ..... 10 @c_shift2
|
slli 000 . ..... ..... 10 @c_shift2
|
||||||
fld 001 . ..... ..... 10 @c_ldsp
|
fld 001 . ..... ..... 10 @c_ldsp
|
||||||
@ -130,3 +149,14 @@ fld 001 . ..... ..... 10 @c_ldsp
|
|||||||
}
|
}
|
||||||
fsd 101 ...... ..... 10 @c_sdsp
|
fsd 101 ...... ..... 10 @c_sdsp
|
||||||
sw 110 . ..... ..... 10 @c_swsp
|
sw 110 . ..... ..... 10 @c_swsp
|
||||||
|
|
||||||
|
# *** RV32C and RV64C specific Standard Extension (Quadrant 2) ***
|
||||||
|
{
|
||||||
|
c64_illegal 011 - 00000 ----- 10 # c.ldsp, RES rd=0
|
||||||
|
ld 011 . ..... ..... 10 @c_ldsp
|
||||||
|
flw 011 . ..... ..... 10 @c_lwsp
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sd 111 . ..... ..... 10 @c_sdsp
|
||||||
|
fsw 111 . ..... ..... 10 @c_swsp
|
||||||
|
}
|
||||||
|
@ -24,6 +24,12 @@ static bool trans_illegal(DisasContext *ctx, arg_empty *a)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool trans_c64_illegal(DisasContext *ctx, arg_empty *a)
|
||||||
|
{
|
||||||
|
REQUIRE_64BIT(ctx);
|
||||||
|
return trans_illegal(ctx, a);
|
||||||
|
}
|
||||||
|
|
||||||
static bool trans_lui(DisasContext *ctx, arg_lui *a)
|
static bool trans_lui(DisasContext *ctx, arg_lui *a)
|
||||||
{
|
{
|
||||||
if (a->rd != 0) {
|
if (a->rd != 0) {
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
# FIXME extra_args should accept files()
|
# FIXME extra_args should accept files()
|
||||||
dir = meson.current_source_dir()
|
dir = meson.current_source_dir()
|
||||||
gen32 = [
|
|
||||||
decodetree.process('insn16.decode', extra_args: [dir / 'insn16-32.decode', '--static-decode=decode_insn16', '--insnwidth=16']),
|
|
||||||
decodetree.process('insn32.decode', extra_args: '--static-decode=decode_insn32'),
|
|
||||||
]
|
|
||||||
|
|
||||||
gen64 = [
|
gen = [
|
||||||
decodetree.process('insn16.decode', extra_args: [dir / 'insn16-64.decode', '--static-decode=decode_insn16', '--insnwidth=16']),
|
decodetree.process('insn16.decode', extra_args: ['--static-decode=decode_insn16', '--insnwidth=16']),
|
||||||
decodetree.process('insn32.decode', extra_args: '--static-decode=decode_insn32'),
|
decodetree.process('insn32.decode', extra_args: '--static-decode=decode_insn32'),
|
||||||
]
|
]
|
||||||
|
|
||||||
riscv_ss = ss.source_set()
|
riscv_ss = ss.source_set()
|
||||||
riscv_ss.add(when: 'TARGET_RISCV32', if_true: gen32)
|
riscv_ss.add(gen)
|
||||||
riscv_ss.add(when: 'TARGET_RISCV64', if_true: gen64)
|
|
||||||
riscv_ss.add(files(
|
riscv_ss.add(files(
|
||||||
'cpu.c',
|
'cpu.c',
|
||||||
'cpu_helper.c',
|
'cpu_helper.c',
|
||||||
|
Loading…
Reference in New Issue
Block a user