summaryrefslogtreecommitdiff
path: root/src/lj_trace.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-10 01:57:24 +0100
committerMike Pall <mike>2011-03-10 01:57:24 +0100
commitbfce3c1127fd57fe0c935c92bcf45b4737041edd (patch)
tree2bd2d9e08c70608de63c7a69df7f00cfab07f6be /src/lj_trace.c
parent3f26e3a89d54dfb761ca02fc89aaf15326f5f514 (diff)
downloadluajit2-bfce3c1127fd57fe0c935c92bcf45b4737041edd.tar.gz
DUALNUM: Handle integer type in JIT compiler.
Diffstat (limited to 'src/lj_trace.c')
-rw-r--r--src/lj_trace.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c
index b67e8f75..69124542 100644
--- a/src/lj_trace.c
+++ b/src/lj_trace.c
@@ -495,8 +495,8 @@ static int trace_abort(jit_State *J)
J->postproc = LJ_POST_NONE;
lj_mcode_abort(J);
- if (tvisnum(L->top-1))
- e = (TraceError)lj_num2int(numV(L->top-1));
+ if (tvisnumber(L->top-1))
+ e = (TraceError)numberVint(L->top-1);
if (e == LJ_TRERR_MCODELM) {
J->state = LJ_TRACE_ASM;
return 1; /* Retry ASM with new MCode area. */
@@ -703,8 +703,12 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
setintV(L->top++, J->exitno);
setintV(L->top++, RID_NUM_GPR);
setintV(L->top++, RID_NUM_FPR);
- for (i = 0; i < RID_NUM_GPR; i++)
- setnumV(L->top++, cast_num(ex->gpr[i]));
+ for (i = 0; i < RID_NUM_GPR; i++) {
+ if (sizeof(ex->gpr[i]) == sizeof(int32_t))
+ setintV(L->top++, (int32_t)ex->gpr[i]);
+ else
+ setnumV(L->top++, (lua_Number)ex->gpr[i]);
+ }
for (i = 0; i < RID_NUM_FPR; i++) {
setnumV(L->top, ex->fpr[i]);
if (LJ_UNLIKELY(tvisnan(L->top)))