diff options
author | Mike Pall <mike> | 2011-03-10 01:57:24 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-03-10 01:57:24 +0100 |
commit | bfce3c1127fd57fe0c935c92bcf45b4737041edd (patch) | |
tree | 2bd2d9e08c70608de63c7a69df7f00cfab07f6be /src/lj_trace.c | |
parent | 3f26e3a89d54dfb761ca02fc89aaf15326f5f514 (diff) | |
download | luajit2-bfce3c1127fd57fe0c935c92bcf45b4737041edd.tar.gz |
DUALNUM: Handle integer type in JIT compiler.
Diffstat (limited to 'src/lj_trace.c')
-rw-r--r-- | src/lj_trace.c | 12 |
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))) |