On 8/10/2026 3:53 PM, Taylor Simpson wrote:


On Mon, Aug 10, 2026 at 1:34 PM Brian Cain <[email protected]> wrote:


    On 8/10/2026 1:28 PM, Taylor Simpson wrote:
    > Change disassembly of control regs from C{num}/{name} to {name}
    > Change disassembly of system regs from S{num}/r{num} to {name}
    >
    > Signed-off-by: Taylor Simpson <[email protected]>
    > ---
    >   target/hexagon/printinsn.c      | 22 ++++++++++++++++++----
    >   target/hexagon/gen_printinsn.py | 14 ++++++++------
    >   2 files changed, 26 insertions(+), 10 deletions(-)
    >
    > diff --git a/target/hexagon/printinsn.c b/target/hexagon/printinsn.c
    > index a7e46f4bcd..b55d3b0b35 100644
    > --- a/target/hexagon/printinsn.c
    > +++ b/target/hexagon/printinsn.c
    > @@ -23,18 +23,32 @@
    >   #include "internal.h"
    >   #include "decode.h"
    >
    > +static char regstr[10];
    > +
    >   static const char *sreg2str(unsigned int reg)
    >   {
    > -    if (reg < TOTAL_PER_THREAD_REGS) {
    > -        return hexagon_regnames[reg];
    > +#ifndef CONFIG_USER_ONLY
    > +    if (reg < NUM_SREGS) {
    > +        return hexagon_sregnames[reg];
    >       } else {
    > -        return "???";
    > +        snprintf(regstr, sizeof(regstr), "S%d", reg);
    > +        return regstr;
    >       }
    > +#else
    > +    snprintf(regstr, sizeof(regstr), "S%d", reg);
    > +    return regstr;
    > +#endif
    >   }
    >
    >   static const char *creg2str(unsigned int reg)
    >   {
    > -    return sreg2str(reg + HEX_REG_SA0);
    > +    unsigned int gpr = reg + HEX_REG_SA0;
    > +    if (gpr < TOTAL_PER_THREAD_REGS) {
    > +        return hexagon_regnames[gpr];
    > +    } else {
    > +        snprintf(regstr, sizeof(regstr), "C%d", reg);
    > +        return regstr;
    > +    }
    >   }
    >


    Seems like this change also depends on some kind of mutex around
    regstr[] so that we know it's not being used concurrently by multiple
    threads.  Translation is single-threaded but if we gained another
    caller
    we wouldn't remember to come back and remediate this.

    I suppose we could take an input buffer/length.  Or maybe we just add
    another static _regnames[] array to solve the lifetime/race problems?


How about putting a regstr field in the Insn struct (and pass Insn* to these two functions)?


A character array?  Sure: seems like that should work.

But if we have a static array for the others why not leverage that here too?  We can statically fill these values, right?


Thanks,
Taylor

Reply via email to