x64: Fix store to upvalue for lightuserdata values.

This commit is contained in:
Mike Pall 2013-12-02 09:18:01 +01:00
parent f371ed6bd8
commit 916f09d0a9
4 changed files with 6 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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