On 11/18/20 12:29 AM, [email protected] wrote:
> +static bool trans_sbset(DisasContext *ctx, arg_sbset *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith(ctx, a, &gen_sbset);
> +}
> +
> +static bool trans_sbseti(DisasContext *ctx, arg_sbseti *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith_shamt_tl(ctx, a, &gen_sbset);
> +}
> +
> +static bool trans_sbclr(DisasContext *ctx, arg_sbclr *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith(ctx, a, &gen_sbclr);
> +}
Coming back to my re-use of code thing, these should use gen_shift. That
handles the truncate of source2 to the shift amount.
> +static bool trans_sbclri(DisasContext *ctx, arg_sbclri *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith_shamt_tl(ctx, a, &gen_sbclr);
> +}
> +
> +static bool trans_sbinv(DisasContext *ctx, arg_sbinv *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith(ctx, a, &gen_sbinv);
> +}
> +
> +static bool trans_sbinvi(DisasContext *ctx, arg_sbinvi *a)
> +{
> + REQUIRE_EXT(ctx, RVB);
> + return gen_arith_shamt_tl(ctx, a, &gen_sbinv);
> +}
I think there ought to be a gen_shifti for these.
Similarly gen_shiftiw and gen_shiftw, which would truncate and sign-extend the
result. Existing code in trans_rvi.c.inc should be converted to use the new
functions.
r~