[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH v2 4/4] target/avr/translate: Fix SBRC/SBRS instructions
From: |
Richard Henderson |
Subject: |
Re: [RFC PATCH v2 4/4] target/avr/translate: Fix SBRC/SBRS instructions |
Date: |
Tue, 7 Jul 2020 09:34:04 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 |
On 7/7/20 12:00 AM, Philippe Mathieu-Daudé wrote:
> @@ -1385,7 +1385,7 @@ static bool trans_SBRC(DisasContext *ctx, arg_SBRC *a)
> {
> TCGv Rr = cpu_r[a->rr];
>
> - ctx->skip_cond = TCG_COND_EQ;
> + ctx->skip_cond = TCG_COND_NE;
> ctx->skip_var0 = tcg_temp_new();
> ctx->free_skip_var0 = true;
This is wrong. The next line is
> tcg_gen_andi_tl(ctx->skip_var0, Rr, 1 << a->bit);
So we compute "var = R & bit", which should be zero for "Skip if Bit in
Register Clear". Thus "var EQ 0" is the correct test.
> @@ -1401,7 +1401,7 @@ static bool trans_SBRS(DisasContext *ctx, arg_SBRS *a)
> {
> TCGv Rr = cpu_r[a->rr];
>
> - ctx->skip_cond = TCG_COND_NE;
> + ctx->skip_cond = TCG_COND_EQ;
> ctx->skip_var0 = tcg_temp_new();
> ctx->free_skip_var0 = true;
Similarly this is "var NE 0".
r~