summaryrefslogtreecommitdiff
path: root/src/lj_snap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_snap.c')
-rw-r--r--src/lj_snap.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c
index 2b82e672..86890a26 100644
--- a/src/lj_snap.c
+++ b/src/lj_snap.c
@@ -279,6 +279,11 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr)
279 setintV(o, *sps); 279 setintV(o, *sps);
280 } else if (irt_isnum(t)) { 280 } else if (irt_isnum(t)) {
281 o->u64 = *(uint64_t *)sps; 281 o->u64 = *(uint64_t *)sps;
282#if LJ_64
283 } else if (irt_islightud(t)) {
284 /* 64 bit lightuserdata which may escape already has the tag bits. */
285 o->u64 = *(uint64_t *)sps;
286#endif
282 } else { 287 } else {
283 lua_assert(!irt_ispri(t)); /* PRI refs never have a spill slot. */ 288 lua_assert(!irt_ispri(t)); /* PRI refs never have a spill slot. */
284 setgcrefi(o->gcr, *sps); 289 setgcrefi(o->gcr, *sps);
@@ -291,6 +296,11 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr)
291 setintV(o, ex->gpr[r-RID_MIN_GPR]); 296 setintV(o, ex->gpr[r-RID_MIN_GPR]);
292 } else if (irt_isnum(t)) { 297 } else if (irt_isnum(t)) {
293 setnumV(o, ex->fpr[r-RID_MIN_FPR]); 298 setnumV(o, ex->fpr[r-RID_MIN_FPR]);
299#if LJ_64
300 } else if (irt_islightud(t)) {
301 /* 64 bit lightuserdata which may escape already has the tag bits. */
302 o->u64 = ex->gpr[r-RID_MIN_GPR];
303#endif
294 } else { 304 } else {
295 if (!irt_ispri(t)) 305 if (!irt_ispri(t))
296 setgcrefi(o->gcr, ex->gpr[r-RID_MIN_GPR]); 306 setgcrefi(o->gcr, ex->gpr[r-RID_MIN_GPR]);