On 22/11/24, Richard Henderson wrote: > On 11/20/24 19:49, Anton Johansson wrote: > > Temporary vectors in helper-to-tcg generated code are allocated from an > > array of bytes in CPUArchState, specified with --temp-vector-block. > > > > This commits adds such a block of memory to CPUArchState, if > > CONFIG_HELPER_TO_TCG is set. > > > > Signed-off-by: Anton Johansson <a...@rev.ng> > > --- > > target/hexagon/cpu.h | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h > > index 7be4b5769e..fa6ac83e01 100644 > > --- a/target/hexagon/cpu.h > > +++ b/target/hexagon/cpu.h > > @@ -97,6 +97,10 @@ typedef struct CPUArchState { > > MMVector future_VRegs[VECTOR_TEMPS_MAX] QEMU_ALIGNED(16); > > MMVector tmp_VRegs[VECTOR_TEMPS_MAX] QEMU_ALIGNED(16); > > +#ifdef CONFIG_HELPER_TO_TCG > > + uint8_t tmp_vmem[4096] QEMU_ALIGNED(16); > > +#endif > > + > > MMQReg QRegs[NUM_QREGS] QEMU_ALIGNED(16); > > MMQReg future_QRegs[NUM_QREGS] QEMU_ALIGNED(16); > > Wow. Do you really require 4k in temp storage?
No, 4k is overkill used during testing. But consider that Hexagon uses 128- and 256-byte vectors in some cases so if the emitted code uses say 5 temporaries in its computation we end up at 1280 bytes as an upper bound. Two ideas here, we can: 1. Allow users to specify an upper bound on vector memory, and abort translation of helpers that surpass this, and; 2. Emit maximum number of bytes used for vector temporaries to a macro. //Anton