Kito Cheng
620455350a
target/riscv: Fix wrong expanding for c.fswsp
...
base register is no rs1 not rs2 for fsw.
Signed-off-by: Kito Cheng <kito.cheng@gmail.com >
Reviewed-by: Palmer Dabbelt <palmer@sifive.com >
Signed-off-by: Palmer Dabbelt <palmer@sifive.com >
2019-03-26 03:17:30 -07:00
Palmer Dabbelt
f17e02cd37
target/riscv: Zero extend the inputs of divuw and remuw
...
While running the GCC test suite against 4.0.0-rc0, Kito found a
regression introduced by the decodetree conversion that caused divuw and
remuw to sign-extend their inputs. The ISA manual says they are
supposed to be zero extended:
DIVW and DIVUW instructions are only valid for RV64, and divide the
lower 32 bits of rs1 by the lower 32 bits of rs2, treating them as
signed and unsigned integers respectively, placing the 32-bit
quotient in rd, sign-extended to 64 bits. REMW and REMUW
instructions are only valid for RV64, and provide the corresponding
signed and unsigned remainder operations respectively. Both REMW
and REMUW always sign-extend the 32-bit result to 64 bits, including
on a divide by zero.
Here's Kito's reduced test case from the GCC test suite
unsigned calc_mp(unsigned mod)
{
unsigned a,b,c;
c=-1;
a=c/mod;
b=0-a*mod;
if (b > mod) { a += 1; b-=mod; }
return b;
}
int main(int argc, char *argv[])
{
unsigned x = 1234;
unsigned y = calc_mp(x);
if ((sizeof (y) == 4 && y != 680)
|| (sizeof (y) == 2 && y != 134))
abort ();
exit (0);
}
I haven't done any other testing on this, but it does fix the test case.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Palmer Dabbelt <palmer@sifive.com >
2019-03-22 00:26:39 -07:00
Bastian Koppelmann
f330433b36
target/riscv: Fix manually parsed 16 bit insn
...
during the refactor to decodetree we removed the manual decoding that is
necessary for c.jal/c.addiw and removed the translation of c.flw/c.ld
and c.fsw/c.sd. This reintroduces the manual parsing and the
omited implementation.
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Tested-by: Palmer Dabbelt <palmer@sifive.com >
Reviewed-by: Alistair Francis <alistair.francis@wdc.com >
Tested-by: Alistair Francis <alistair.francis@wdc.com >
Signed-off-by: Palmer Dabbelt <palmer@sifive.com >
2019-03-17 22:21:32 -07:00
Bastian Koppelmann
8dc9e8a8b0
target/riscv: Rename trans_arith to gen_arith
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
1288701682
target/riscv: Remove manual decoding of RV32/64M insn
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
34446e8458
target/riscv: Remove shift and slt insn manual decoding
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
f2ab172867
target/riscv: make ADD/SUB/OR/XOR/AND insn use arg lists
...
manual decoding in gen_arith() is not necessary with decodetree. For now
the function is called trans_arith as the original gen_arith still
exists. The former will be renamed to gen_arith as soon as the old
gen_arith can be removed.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
7a50d3e2ae
target/riscv: Move gen_arith_imm() decoding into trans_* functions
...
gen_arith_imm() does a lot of decoding manually, which was hard to read
in case of the shift instructions and is not necessary anymore with
decodetree.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
bce8a342a1
target/riscv: Remove manual decoding from gen_store()
...
With decodetree we don't need to convert RISC-V opcodes into to MemOps
as the old gen_store() did.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
98898b20e9
target/riscv: Remove manual decoding from gen_load()
...
With decodetree we don't need to convert RISC-V opcodes into to MemOps
as the old gen_load() did.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
090cc2c898
target/riscv: Remove manual decoding from gen_branch()
...
We now utilizes argument-sets of decodetree such that no manual
decoding is necessary.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
9e92c57d83
target/riscv: Remove gen_jalr()
...
trans_jalr() is the only caller, so move the code into trans_jalr().
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:50 +01:00
Bastian Koppelmann
97b0be81f6
target/riscv: Convert quadrant 2 of RVXC insns to decodetree
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:40:46 +01:00
Bastian Koppelmann
07b001c6fc
target/riscv: Convert quadrant 1 of RVXC insns to decodetree
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:38:16 +01:00
Bastian Koppelmann
e98d9140f2
target/riscv: Convert quadrant 0 of RVXC insns to decodetree
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
4ba79c47a2
target/riscv: Convert RV priv insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
31fe4d35f2
target/riscv: Convert RV64D insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
97f8b49372
target/riscv: Convert RV32D insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
95561ee3b4
target/riscv: Convert RV64F insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
6f0e74ff4b
target/riscv: Convert RV32F insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
40b9faecfe
target/riscv: Convert RV64A insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
3b77c289ae
target/riscv: Convert RV32A insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
d2e2c1e406
target/riscv: Convert RVXM insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
771fbe156a
target/riscv: Convert RVXI csr insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
0c865e856a
target/riscv: Convert RVXI fence insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
b73a987b09
target/riscv: Convert RVXI arithmetic insns to decodetree
...
we cannot remove the call to gen_arith() in decode_RV32_64G() since it
is used to translate multiply instructions.
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
7e45a682ed
target/riscv: Convert RV64I load/store insns to decodetree
...
this splits the 64-bit only instructions into its own decode file such
that we generate the decoder for these instructions only for the RISC-V
64 bit target.
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
c1000d4e1b
target/riscv: Convert RV32I load/store insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
3cca75a6fe
target/riscv: Convert RVXI branch insns to decodetree
...
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Reviewed-by: Palmer Dabbelt <palmer@sifive.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00
Bastian Koppelmann
2a53cff418
target/riscv: Activate decodetree and implemnt LUI & AUIPC
...
for now only LUI & AUIPC are decoded and translated. If decodetree fails, we
fall back to the old decoder.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Acked-by: Alistair Francis <alistair.francis@wdc.com >
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de >
Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de >
2019-03-13 10:34:06 +01:00