qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 23/29] target/riscv: Move gen_arith_imm() dec


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v2 23/29] target/riscv: Move gen_arith_imm() decoding into trans_* functions
Date: Tue, 23 Oct 2018 09:46:09 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1

On 10/20/18 8:14 AM, Bastian Koppelmann wrote:
>  static bool trans_srli(DisasContext *ctx, arg_srli *a, uint32_t insn)
>  {
> -    gen_arith_imm(ctx, OPC_RISC_SHIFT_RIGHT_I, a->rd, a->rs1, a->shamt);
> +    if (a->rd != 0) {
> +        TCGv t = tcg_temp_new();
> +        gen_get_gpr(t, a->rs1);
> +        tcg_gen_extract_tl(t, t, a->shamt, 64 - a->shamt);

tcg_gen_shri_tl(t, t, a->shamt);

This is a mis-translation of the original code which handled srliw too.
You should be able to see this assert on riscv32.

>  static bool trans_srai(DisasContext *ctx, arg_srai *a, uint32_t insn)
>  {
> -    gen_arith_imm(ctx, OPC_RISC_SHIFT_RIGHT_I, a->rd, a->rs1, a->shamt | 
> 0x400);
> +    if (a->rd != 0) {
> +        TCGv t = tcg_temp_new();
> +        gen_get_gpr(t, a->rs1);
> +        tcg_gen_sextract_tl(t, t, a->shamt, 64 - a->shamt);

Similarly.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]