[Tarantool-patches] [PATCH luajit 17/19] MIPS64: Fix register allocation in assembly of HREF.
Sergey Kaplun
skaplun at tarantool.org
Thu Aug 17 16:50:59 MSK 2023
Hi, Sergey!
Thanks for the review!
On 17.08.23, Sergey Bronnikov wrote:
> 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.
The test case is for MIPS, since the changes are only for MIPS too.
But in general it is good practise to test other arches too, for
observing any inconsistencies.
>
>
> <snipped>
--
Best regards,
Sergey Kaplun
More information about the Tarantool-patches
mailing list