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/lj_record.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/lj_record.c')
-rw-r--r-- | src/lj_record.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index c13c67fd..a3f5b9c0 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -265,7 +265,7 @@ static TRef find_kinit(jit_State *J, const BCIns *endpc, BCReg slot, IRType t) | |||
265 | if (op == BC_KSHORT || op == BC_KNUM) { /* Found const. initializer. */ | 265 | if (op == BC_KSHORT || op == BC_KNUM) { /* Found const. initializer. */ |
266 | /* Now try to verify there's no forward jump across it. */ | 266 | /* Now try to verify there's no forward jump across it. */ |
267 | const BCIns *kpc = pc; | 267 | const BCIns *kpc = pc; |
268 | for ( ; pc > startpc; pc--) | 268 | for (; pc > startpc; pc--) |
269 | if (bc_op(*pc) == BC_JMP) { | 269 | if (bc_op(*pc) == BC_JMP) { |
270 | const BCIns *target = pc+bc_j(*pc)+1; | 270 | const BCIns *target = pc+bc_j(*pc)+1; |
271 | if (target > kpc && target <= endpc) | 271 | if (target > kpc && target <= endpc) |
@@ -2237,10 +2237,10 @@ void lj_record_ins(jit_State *J) | |||
2237 | break; | 2237 | break; |
2238 | 2238 | ||
2239 | case BC_JFORL: | 2239 | case BC_JFORL: |
2240 | rec_loop_jit(J, rc, rec_for(J, pc+bc_j(J->trace[rc]->startins), 1)); | 2240 | rec_loop_jit(J, rc, rec_for(J, pc+bc_j(traceref(J, rc)->startins), 1)); |
2241 | break; | 2241 | break; |
2242 | case BC_JITERL: | 2242 | case BC_JITERL: |
2243 | rec_loop_jit(J, rc, rec_iterl(J, J->trace[rc]->startins)); | 2243 | rec_loop_jit(J, rc, rec_iterl(J, traceref(J, rc)->startins)); |
2244 | break; | 2244 | break; |
2245 | case BC_JLOOP: | 2245 | case BC_JLOOP: |
2246 | rec_loop_jit(J, rc, rec_loop(J, ra)); | 2246 | rec_loop_jit(J, rc, rec_loop(J, ra)); |
@@ -2412,7 +2412,7 @@ static const BCIns *rec_setup_root(jit_State *J) | |||
2412 | } | 2412 | } |
2413 | 2413 | ||
2414 | /* Setup recording for a side trace. */ | 2414 | /* Setup recording for a side trace. */ |
2415 | static void rec_setup_side(jit_State *J, Trace *T) | 2415 | static void rec_setup_side(jit_State *J, GCtrace *T) |
2416 | { | 2416 | { |
2417 | SnapShot *snap = &T->snap[J->exitno]; | 2417 | SnapShot *snap = &T->snap[J->exitno]; |
2418 | SnapEntry *map = &T->snapmap[snap->mapofs]; | 2418 | SnapEntry *map = &T->snapmap[snap->mapofs]; |
@@ -2500,10 +2500,9 @@ void lj_record_setup(jit_State *J) | |||
2500 | } | 2500 | } |
2501 | J->cur.nk = REF_TRUE; | 2501 | J->cur.nk = REF_TRUE; |
2502 | 2502 | ||
2503 | setgcref(J->cur.startpt, obj2gco(J->pt)); | ||
2504 | J->startpc = J->pc; | 2503 | J->startpc = J->pc; |
2505 | if (J->parent) { /* Side trace. */ | 2504 | if (J->parent) { /* Side trace. */ |
2506 | Trace *T = J->trace[J->parent]; | 2505 | GCtrace *T = traceref(J, J->parent); |
2507 | TraceNo root = T->root ? T->root : J->parent; | 2506 | TraceNo root = T->root ? T->root : J->parent; |
2508 | J->cur.root = (uint16_t)root; | 2507 | J->cur.root = (uint16_t)root; |
2509 | J->cur.startins = BCINS_AD(BC_JMP, 0, 0); | 2508 | J->cur.startins = BCINS_AD(BC_JMP, 0, 0); |
@@ -2521,7 +2520,7 @@ void lj_record_setup(jit_State *J) | |||
2521 | } | 2520 | } |
2522 | rec_setup_side(J, T); | 2521 | rec_setup_side(J, T); |
2523 | sidecheck: | 2522 | sidecheck: |
2524 | if (J->trace[J->cur.root]->nchild >= J->param[JIT_P_maxside] || | 2523 | if (traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || |
2525 | T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + | 2524 | T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + |
2526 | J->param[JIT_P_tryside]) | 2525 | J->param[JIT_P_tryside]) |
2527 | rec_stop(J, TRACE_INTERP); | 2526 | rec_stop(J, TRACE_INTERP); |