summaryrefslogtreecommitdiff
path: root/src/lib_jit.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-04-25 03:32:29 +0200
committerMike Pall <mike>2010-04-25 03:32:29 +0200
commit721b73fecbbeda5b5cb76628511c5b3fac41eb4d (patch)
treece72efaa313ab16eda652e4d277413c31a8d2af3 /src/lib_jit.c
parent3a32bbc7cb5c2287e8d4e24e362281c165f50976 (diff)
downloadluajit-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.c19
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. */
263static Trace *jit_checktrace(lua_State *L) 262static 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) */
273LJLIB_CF(jit_util_traceinfo) 272LJLIB_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) */
291LJLIB_CF(jit_util_traceir) 290LJLIB_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) */
309LJLIB_CF(jit_util_tracek) 308LJLIB_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) */
331LJLIB_CF(jit_util_tracesnap) 330LJLIB_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) */
353LJLIB_CF(jit_util_tracemc) 352LJLIB_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));