diff options
author | Mike Pall <mike> | 2010-04-25 03:32:29 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-04-25 03:32:29 +0200 |
commit | 721b73fecbbeda5b5cb76628511c5b3fac41eb4d (patch) | |
tree | ce72efaa313ab16eda652e4d277413c31a8d2af3 /src/lib_jit.c | |
parent | 3a32bbc7cb5c2287e8d4e24e362281c165f50976 (diff) | |
download | luajit-721b73fecbbeda5b5cb76628511c5b3fac41eb4d.tar.gz luajit-721b73fecbbeda5b5cb76628511c5b3fac41eb4d.tar.bz2 luajit-721b73fecbbeda5b5cb76628511c5b3fac41eb4d.zip |
Turn traces into true GC objects (GCtrace).
Diffstat (limited to 'src/lib_jit.c')
-rw-r--r-- | src/lib_jit.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/lib_jit.c b/src/lib_jit.c index e64ea9e4..5facf62e 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c | |||
@@ -72,9 +72,8 @@ LJLIB_CF(jit_flush) | |||
72 | #if LJ_HASJIT | 72 | #if LJ_HASJIT |
73 | if (L->base < L->top && (tvisnum(L->base) || tvisstr(L->base))) { | 73 | if (L->base < L->top && (tvisnum(L->base) || tvisstr(L->base))) { |
74 | int traceno = lj_lib_checkint(L, 1); | 74 | int traceno = lj_lib_checkint(L, 1); |
75 | setboolV(L->top-1, | 75 | luaJIT_setmode(L, traceno, LUAJIT_MODE_FLUSH|LUAJIT_MODE_TRACE); |
76 | luaJIT_setmode(L, traceno, LUAJIT_MODE_FLUSH|LUAJIT_MODE_TRACE)); | 76 | return 0; |
77 | return 1; | ||
78 | } | 77 | } |
79 | #endif | 78 | #endif |
80 | return setjitmode(L, LUAJIT_MODE_FLUSH); | 79 | return setjitmode(L, LUAJIT_MODE_FLUSH); |
@@ -260,19 +259,19 @@ LJLIB_CF(jit_util_funcuvname) | |||
260 | #if LJ_HASJIT | 259 | #if LJ_HASJIT |
261 | 260 | ||
262 | /* Check trace argument. Must not throw for non-existent trace numbers. */ | 261 | /* Check trace argument. Must not throw for non-existent trace numbers. */ |
263 | static Trace *jit_checktrace(lua_State *L) | 262 | static GCtrace *jit_checktrace(lua_State *L) |
264 | { | 263 | { |
265 | TraceNo tr = (TraceNo)lj_lib_checkint(L, 1); | 264 | TraceNo tr = (TraceNo)lj_lib_checkint(L, 1); |
266 | jit_State *J = L2J(L); | 265 | jit_State *J = L2J(L); |
267 | if (tr > 0 && tr < J->sizetrace) | 266 | if (tr > 0 && tr < J->sizetrace) |
268 | return J->trace[tr]; | 267 | return traceref(J, tr); |
269 | return NULL; | 268 | return NULL; |
270 | } | 269 | } |
271 | 270 | ||
272 | /* local info = jit.util.traceinfo(tr) */ | 271 | /* local info = jit.util.traceinfo(tr) */ |
273 | LJLIB_CF(jit_util_traceinfo) | 272 | LJLIB_CF(jit_util_traceinfo) |
274 | { | 273 | { |
275 | Trace *T = jit_checktrace(L); | 274 | GCtrace *T = jit_checktrace(L); |
276 | if (T) { | 275 | if (T) { |
277 | GCtab *t; | 276 | GCtab *t; |
278 | lua_createtable(L, 0, 4); /* Increment hash size if fields are added. */ | 277 | lua_createtable(L, 0, 4); /* Increment hash size if fields are added. */ |
@@ -290,7 +289,7 @@ LJLIB_CF(jit_util_traceinfo) | |||
290 | /* local m, ot, op1, op2, prev = jit.util.traceir(tr, idx) */ | 289 | /* local m, ot, op1, op2, prev = jit.util.traceir(tr, idx) */ |
291 | LJLIB_CF(jit_util_traceir) | 290 | LJLIB_CF(jit_util_traceir) |
292 | { | 291 | { |
293 | Trace *T = jit_checktrace(L); | 292 | GCtrace *T = jit_checktrace(L); |
294 | IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; | 293 | IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; |
295 | if (T && ref >= REF_BIAS && ref < T->nins) { | 294 | if (T && ref >= REF_BIAS && ref < T->nins) { |
296 | IRIns *ir = &T->ir[ref]; | 295 | IRIns *ir = &T->ir[ref]; |
@@ -308,7 +307,7 @@ LJLIB_CF(jit_util_traceir) | |||
308 | /* local k, t [, slot] = jit.util.tracek(tr, idx) */ | 307 | /* local k, t [, slot] = jit.util.tracek(tr, idx) */ |
309 | LJLIB_CF(jit_util_tracek) | 308 | LJLIB_CF(jit_util_tracek) |
310 | { | 309 | { |
311 | Trace *T = jit_checktrace(L); | 310 | GCtrace *T = jit_checktrace(L); |
312 | IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; | 311 | IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; |
313 | if (T && ref >= T->nk && ref < REF_BIAS) { | 312 | if (T && ref >= T->nk && ref < REF_BIAS) { |
314 | IRIns *ir = &T->ir[ref]; | 313 | IRIns *ir = &T->ir[ref]; |
@@ -330,7 +329,7 @@ LJLIB_CF(jit_util_tracek) | |||
330 | /* local snap = jit.util.tracesnap(tr, sn) */ | 329 | /* local snap = jit.util.tracesnap(tr, sn) */ |
331 | LJLIB_CF(jit_util_tracesnap) | 330 | LJLIB_CF(jit_util_tracesnap) |
332 | { | 331 | { |
333 | Trace *T = jit_checktrace(L); | 332 | GCtrace *T = jit_checktrace(L); |
334 | SnapNo sn = (SnapNo)lj_lib_checkint(L, 2); | 333 | SnapNo sn = (SnapNo)lj_lib_checkint(L, 2); |
335 | if (T && sn < T->nsnap) { | 334 | if (T && sn < T->nsnap) { |
336 | SnapShot *snap = &T->snap[sn]; | 335 | SnapShot *snap = &T->snap[sn]; |
@@ -352,7 +351,7 @@ LJLIB_CF(jit_util_tracesnap) | |||
352 | /* local mcode, addr, loop = jit.util.tracemc(tr) */ | 351 | /* local mcode, addr, loop = jit.util.tracemc(tr) */ |
353 | LJLIB_CF(jit_util_tracemc) | 352 | LJLIB_CF(jit_util_tracemc) |
354 | { | 353 | { |
355 | Trace *T = jit_checktrace(L); | 354 | GCtrace *T = jit_checktrace(L); |
356 | if (T && T->mcode != NULL) { | 355 | if (T && T->mcode != NULL) { |
357 | setstrV(L, L->top-1, lj_str_new(L, (const char *)T->mcode, T->szmcode)); | 356 | setstrV(L, L->top-1, lj_str_new(L, (const char *)T->mcode, T->szmcode)); |
358 | setnumV(L->top++, cast_num((intptr_t)T->mcode)); | 357 | setnumV(L->top++, cast_num((intptr_t)T->mcode)); |