瀏覽代碼

LJ_GC64: Various fixes.

Contributed by Peter Cawley.
Mike Pall 9 年之前
父節點
當前提交
54b78e7c66
共有 2 個文件被更改,包括 3 次插入1 次删除
  1. 2 0
      src/lj_record.c
  2. 1 1
      src/lj_target_x86.h

+ 2 - 0
src/lj_record.c

@@ -1765,6 +1765,8 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
   int32_t numparams = J->pt->numparams;
   ptrdiff_t nvararg = frame_delta(J->L->base-1) - numparams - 1 - LJ_FR2;
   lua_assert(frame_isvarg(J->L->base-1));
+  if (LJ_FR2 && dst > J->maxslot)
+    J->base[dst-1] = 0;  /* Prevent resurrection of unrelated slot. */
   if (J->framedepth > 0) {  /* Simple case: varargs defined on-trace. */
     ptrdiff_t i;
     if (nvararg < 0) nvararg = 0;

+ 1 - 1
src/lj_target_x86.h

@@ -31,7 +31,7 @@ enum {
   FPRDEF(RIDENUM)		/* Floating-point registers (FPRs). */
   RID_MAX,
   RID_MRM = RID_MAX,		/* Pseudo-id for ModRM operand. */
-  RID_RIP = RID_MAX+1,		/* Pseudo-id for RIP (x64 only). */
+  RID_RIP = RID_MAX+5,		/* Pseudo-id for RIP (x64 only), rm bits = 5. */
 
   /* Calling conventions. */
   RID_SP = RID_ESP,