[Top][All Lists]

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

Re: [PATCH] Add support for a helper with 7 arguments

From: Richard Henderson
Subject: Re: [PATCH] Add support for a helper with 7 arguments
Date: Thu, 6 Feb 2020 15:35:08 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1

On 2/6/20 2:03 PM, Taylor Simpson wrote:
> Some of the more complex instructions need a lot of operands.  Here's an 
> example
>     if (Pv4) memb(Rs32 + Ru32 << #u2) = Rt32
> This is a predicated store with 5 operands:
>     Pv4predicate
>     Rs32, Ru32, u2used to compute the effective address
>     Rt32value to store
> In addition, every helper gets an env argument, and predicated instructions 
> get a "slot" argument.  The slot argument refers to the VLIW slot where the 
> instruction is located within the packet.  It is used for predicated 
> instructions to communicate to the end-of-packet handling to determine 
> whether the instruction should commit.
> So, the signature for the helper for this instruction is
>     void HELPER(S4_pstorerbt_rr)(CPUHexagonState *env, int32_t PvV, int32_t 
> RsV, int32_t RuV, int32_t RtV, int32_t uiV, uint32_t slot)

I think this is quite ugly.  I know you've been talking about auto-generating
everything but we ought to do better than this.

You should be passing values not regnos if you can possibly do so.  You should
be passing full virtual addresses not N separate components of an address.
Predicates should be evaluated earlier so that the helper isn't even called if
it's false.

Combine that with 3.3.1 Packet execution semantics, "dual stores, new-value
stores, and slot1 store with slot0 loads have non-parallel execution
semantics", and you need no special helper at all:

        and     t0, pv, 1
        brcondi t0, 0, over

        shli    t0, ru, u2
        add     t0, t0, rs
        qemu_st rt, t0, mmu_idx, MO_UB

But suppose this were something more complicated than a bare store, and the
point still stands about pre-computing full addresses.


reply via email to

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