[prev in list] [next in list] [prev in thread] [next in thread]
List: qemu-devel
Subject: Re: [PATCH][RFC] target/hppa: Avoid nullification for uaddcmt instruction
From: Helge Deller <deller () gmx ! de>
Date: 2024-03-24 17:20:24
Message-ID: 4c2e6e00-70a2-4ea7-8dee-7a7ab02fd732 () gmx ! de
[Download RAW message or body]
On 3/24/24 18:13, Richard Henderson wrote:
> On 3/23/24 11:15, Helge Deller wrote:
> > The uaddcmt (UNIT ADD COMPLEMENT AND TRAP ON CONDITION) instruction
> > triggers a trap if the condition is true, and stores the result of the
> > addition in the target register otherwise.
> > It does not use the condition to nullify the following instruction, so
> > drop the calculated condition and do not install it as null_cond.
>
> That's not what the manual says:
>
> if (trapc == TC && cond_satisfied)
> conditional_trap;
> else {
> GR[t] ← res;
> if (cond_satisfied) PSW[N] ← 1;
> }
The above is from the 64-bit manual.
My mail was based on the info from the 32-bit manual, which says:
res ← GR[r1] + ∼GR[r2];
if (cond_satisfied)
conditional_trap;
else
GR[t] ← res
But basically it doesn't matter, since as you explain below,
if it traps, it won't return anyway and as such PSW[N] will
not be modified.
> We have implemented this like so:
>
> if (trapc == TC)
> conditional_trap(cond_satisfied);
> GR[t] ← res;
> if (cond_satisfied) PSW[N] ← 1;
>
> because the conditional trap step does not return if it traps.
Yes.
Thanks for review anyway!
Helge
> > This patch is not tested and as such sent as RFC.
> > I just stumbled over the apparently wrong behaviour while debugging the
> > uaddcm instruction.
>
> Under separate cover you said the condition might be computed incorrectly. I \
> think that is more likely the root cause of the wrong behaviour.
>
> r~
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic