summaryrefslogtreecommitdiff
path: root/src/lj_dispatch.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-02-04 20:40:00 +0100
committerMike Pall <mike>2010-02-04 20:40:00 +0100
commit5d2690c6084d09ed6f5bb9cdb4fc5113bb4fa512 (patch)
tree8e18b1f103b3c8bd99c34d70cb678cc2772ca8c3 /src/lj_dispatch.c
parent7256690364a2c9a5e9269ffd89bc132ee188480d (diff)
downloadluajit-5d2690c6084d09ed6f5bb9cdb4fc5113bb4fa512.tar.gz
luajit-5d2690c6084d09ed6f5bb9cdb4fc5113bb4fa512.tar.bz2
luajit-5d2690c6084d09ed6f5bb9cdb4fc5113bb4fa512.zip
Reset the hotcount table after a JIT off to on transition.
Diffstat (limited to 'src/lj_dispatch.c')
-rw-r--r--src/lj_dispatch.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c
index 1e5b574c..a94afea9 100644
--- a/src/lj_dispatch.c
+++ b/src/lj_dispatch.c
@@ -34,6 +34,18 @@ void lj_dispatch_init(GG_State *GG)
34 disp[BC_LOOP] = disp[BC_ILOOP]; 34 disp[BC_LOOP] = disp[BC_ILOOP];
35} 35}
36 36
37#if LJ_HASJIT
38/* Initialize hotcount table. */
39void lj_dispatch_init_hotcount(global_State *g)
40{
41 HotCount start = (HotCount)G2J(g)->param[JIT_P_hotloop];
42 HotCount *hotcount = G2GG(g)->hotcount;
43 uint32_t i;
44 for (i = 0; i < HOTCOUNT_SIZE; i++)
45 hotcount[i] = start;
46}
47#endif
48
37/* Update dispatch table depending on various flags. */ 49/* Update dispatch table depending on various flags. */
38void lj_dispatch_update(global_State *g) 50void lj_dispatch_update(global_State *g)
39{ 51{
@@ -77,6 +89,10 @@ void lj_dispatch_update(global_State *g)
77 disp[BC_ITERL] = f_iterl; 89 disp[BC_ITERL] = f_iterl;
78 disp[BC_LOOP] = f_loop; 90 disp[BC_LOOP] = f_loop;
79 } 91 }
92#if LJ_HASJIT
93 if ((mode & 1) && !(oldmode & 1)) /* JIT off to on transition. */
94 lj_dispatch_init_hotcount(g);
95#endif
80 } 96 }
81} 97}
82 98