mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
tcg/riscv: Add the extract instructions
Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Michael Clark <mjc@sifive.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <c4d2afba46efefa9388cf3205fcedbb9a5fa411f.1545246859.git.alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
6cd2eda39f
commit
27fd64144b
@ -596,3 +596,37 @@ static void tcg_out_movi(TCGContext *s, TCGType type, TCGReg rd,
|
||||
tcg_out_opc_upper(s, OPC_AUIPC, rd, 0);
|
||||
tcg_out_opc_imm(s, OPC_LD, rd, rd, 0);
|
||||
}
|
||||
|
||||
static void tcg_out_ext8u(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_ANDI, ret, arg, 0xff);
|
||||
}
|
||||
|
||||
static void tcg_out_ext16u(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16);
|
||||
tcg_out_opc_imm(s, OPC_SRLIW, ret, ret, 16);
|
||||
}
|
||||
|
||||
static void tcg_out_ext32u(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_SLLI, ret, arg, 32);
|
||||
tcg_out_opc_imm(s, OPC_SRLI, ret, ret, 32);
|
||||
}
|
||||
|
||||
static void tcg_out_ext8s(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 24);
|
||||
tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 24);
|
||||
}
|
||||
|
||||
static void tcg_out_ext16s(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16);
|
||||
tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 16);
|
||||
}
|
||||
|
||||
static void tcg_out_ext32s(TCGContext *s, TCGReg ret, TCGReg arg)
|
||||
{
|
||||
tcg_out_opc_imm(s, OPC_ADDIW, ret, arg, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user