On 1/19/19 12:14 AM, Bastian Koppelmann wrote: > static bool trans_slli(DisasContext *ctx, arg_slli *a) > { > - gen_arith_imm(ctx, OPC_RISC_SLLI, a->rd, a->rs1, a->shamt); > + if (a->rd != 0) { > + TCGv t = tcg_temp_new(); > + gen_get_gpr(t, a->rs1); > + > + if (a->shamt >= TARGET_LONG_BITS) { > + return false; > + }
I think the shmat test should be first, so that slli r0, r1, 99 produces SIGILL instead of translating to a nop. > static bool trans_sraiw(DisasContext *ctx, arg_sraiw *a) > { > - gen_arith_imm(ctx, OPC_RISC_SHIFT_RIGHT_IW , a->rd, a->rs1, > - a->shamt | 0x400); > + TCGv t = tcg_temp_new(); > + gen_get_gpr(t, a->rs1); > + tcg_gen_sextract_tl(t, t, a->shamt, 32 - a->shamt); > + /* sign-extend for W instructions */ > + tcg_gen_ext32s_tl(t, t); Sign extension of a sign-extracted value? r~