[Tarantool-patches] [PATCH luajit 17/19] MIPS64: Fix register allocation in assembly of HREF.
Sergey Bronnikov
sergeyb at tarantool.org
Thu Aug 17 14:06:26 MSK 2023
Hi, Sergey!
Thanks for the patch!
Test is passed after reverting the patch.
On 8/9/23 18:36, Sergey Kaplun wrote:
> From: Mike Pall <mike>
>
> Contributed by James Cowgill.
>
> (cherry-picked from commit 99cdfbf6a1e8856f64908072ef10443a7eab14f2)
>
> The issue is observed for the following merged IRs:
> | p64 HREF 0001 "a" ; or other keys
> | > p64 EQ 0002 [0x4002d0c528] ; nilnode
> Sometimes, when we need to rematerialize a constant during evicting of
> the register. So, the instruction related to constant rematerialization
> is placed in the delay branch slot, which suppose to contain the loads
> of trace exit number to the `$ra` register. The resulting assembly is
> the following (for example):
> | beq ra, r1, 0x400abee9b0 ->exit
> | lui r1, 65531 ; delay slot without setting of the `ra`
> This leading to the assertion failure during trace exit in
> `lj_trace_exit()`, since a trace number is incorrect.
>
> This patch moves the constant register allocations above the main
> instruction emitting code in `asm_href()`.
>
> Sergey Kaplun:
> * added the description and the test for the problem
Test is passed after reverting the patch. LuaJIT was built with and
without GC64.
<snipped>
More information about the Tarantool-patches
mailing list