diff options
Diffstat (limited to 'src/lj_snap.c')
-rw-r--r-- | src/lj_snap.c | 10 |
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]); |