qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH][RFC] target/hppa: Avoid nullification for uaddcmt instructio


From: Helge Deller
Subject: Re: [PATCH][RFC] target/hppa: Avoid nullification for uaddcmt instruction
Date: Sun, 24 Mar 2024 18:20:24 +0100
User-agent: Mozilla Thunderbird

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~




reply via email to

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