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 <anjo@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