mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
x64: Fix store to upvalue for lightuserdata values.
This commit is contained in:
parent
f371ed6bd8
commit
916f09d0a9
@ -3217,7 +3217,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| ins_next
|
| ins_next
|
||||||
|
|
|
|
||||||
|2: // Check if new value is collectable.
|
|2: // Check if new value is collectable.
|
||||||
| cmn RB, #-(LJ_TISNUM - LJ_TISGCV)
|
| cmn RB, #-(LJ_TNUMX - LJ_TISGCV)
|
||||||
| ldrbhi RC, GCOBJ:CARG3->gch.marked
|
| ldrbhi RC, GCOBJ:CARG3->gch.marked
|
||||||
| bls <1 // tvisgcv(v)
|
| bls <1 // tvisgcv(v)
|
||||||
| sub CARG1, DISPATCH, #-GG_DISP2G
|
| sub CARG1, DISPATCH, #-GG_DISP2G
|
||||||
|
@ -2882,12 +2882,12 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| li AT, LJ_GC_BLACK|1
|
| li AT, LJ_GC_BLACK|1
|
||||||
| or TMP3, TMP3, TMP0
|
| or TMP3, TMP3, TMP0
|
||||||
| beq TMP3, AT, >2 // Upvalue is closed and black?
|
| beq TMP3, AT, >2 // Upvalue is closed and black?
|
||||||
|. addiu TMP2, TMP2, -(LJ_TISNUM+1)
|
|. addiu TMP2, TMP2, -(LJ_TNUMX+1)
|
||||||
|1:
|
|1:
|
||||||
| ins_next
|
| ins_next
|
||||||
|
|
|
|
||||||
|2: // Check if new value is collectable.
|
|2: // Check if new value is collectable.
|
||||||
| sltiu AT, TMP2, LJ_TISGCV - (LJ_TISNUM+1)
|
| sltiu AT, TMP2, LJ_TISGCV - (LJ_TNUMX+1)
|
||||||
| beqz AT, <1 // tvisgcv(v)
|
| beqz AT, <1 // tvisgcv(v)
|
||||||
|. lw TMP1, LO(RD)
|
|. lw TMP1, LO(RD)
|
||||||
| lbu TMP3, GCOBJ:TMP1->gch.marked
|
| lbu TMP3, GCOBJ:TMP1->gch.marked
|
||||||
|
@ -3715,13 +3715,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
| cmplwi cr1, TMP0, 0
|
| cmplwi cr1, TMP0, 0
|
||||||
| lwz TMP1, 4(RD)
|
| lwz TMP1, 4(RD)
|
||||||
| cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
|
| cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
|
||||||
| subi TMP2, TMP2, (LJ_TISNUM+1)
|
| subi TMP2, TMP2, (LJ_TNUMX+1)
|
||||||
| bne >2 // Upvalue is closed and black?
|
| bne >2 // Upvalue is closed and black?
|
||||||
|1:
|
|1:
|
||||||
| ins_next
|
| ins_next
|
||||||
|
|
|
|
||||||
|2: // Check if new value is collectable.
|
|2: // Check if new value is collectable.
|
||||||
| cmplwi TMP2, LJ_TISGCV - (LJ_TISNUM+1)
|
| cmplwi TMP2, LJ_TISGCV - (LJ_TNUMX+1)
|
||||||
| bge <1 // tvisgcv(v)
|
| bge <1 // tvisgcv(v)
|
||||||
| lbz TMP3, GCOBJ:TMP1->gch.marked
|
| lbz TMP3, GCOBJ:TMP1->gch.marked
|
||||||
| andix. TMP3, TMP3, LJ_GC_WHITES // iswhite(v)
|
| andix. TMP3, TMP3, LJ_GC_WHITES // iswhite(v)
|
||||||
|
@ -4652,7 +4652,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|
|||||||
|
|
|
|
||||||
|2: // Upvalue is black. Check if new value is collectable and white.
|
|2: // Upvalue is black. Check if new value is collectable and white.
|
||||||
| sub RD, LJ_TISGCV
|
| sub RD, LJ_TISGCV
|
||||||
| cmp RD, LJ_TISNUM - LJ_TISGCV // tvisgcv(v)
|
| cmp RD, LJ_TNUMX - LJ_TISGCV // tvisgcv(v)
|
||||||
| jbe <1
|
| jbe <1
|
||||||
| test byte GCOBJ:RA->gch.marked, LJ_GC_WHITES // iswhite(v)
|
| test byte GCOBJ:RA->gch.marked, LJ_GC_WHITES // iswhite(v)
|
||||||
| jz <1
|
| jz <1
|
||||||
|
Loading…
Reference in New Issue
Block a user