From ad0ea7813b39e76b377983138ca995189e22054f Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 20 Dec 2023 16:25:20 -0300 Subject: GC parameters encoded as floating-point bytes This encoding brings more precision and a larger range for these parameters. --- lgc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'lgc.c') diff --git a/lgc.c b/lgc.c index 114b32d3..149dddf6 100644 --- a/lgc.c +++ b/lgc.c @@ -1049,7 +1049,7 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { ** approximately (marked * pause / 100). */ static void setpause (global_State *g) { - l_obj threshold = applygcparam(g, gcpause, g->marked); + l_obj threshold = luaO_applyparam(g->gcppause, g->marked); l_obj debt = threshold - gettotalobjs(g); if (debt < 0) debt = 0; luaE_setdebt(g, debt); @@ -1233,13 +1233,13 @@ static void finishgencycle (lua_State *L, global_State *g) { ** in generational mode. */ static void minor2inc (lua_State *L, global_State *g, int kind) { - l_obj stepsize = cast(l_obj, 1) << g->gcstepsize; g->GCmajorminor = g->marked; /* number of live objects */ g->gckind = kind; g->reallyold = g->old1 = g->survival = NULL; g->finobjrold = g->finobjold1 = g->finobjsur = NULL; entersweep(L); /* continue as an incremental cycle */ - luaE_setdebt(g, stepsize); + /* set a debt equal to the step size */ + luaE_setdebt(g, luaO_applyparam(g->gcpstepsize, 100)); } @@ -1255,8 +1255,8 @@ static void minor2inc (lua_State *L, global_State *g, int kind) { ** major collection. (That percentage is computed in 'limit'.) */ static int checkminormajor (lua_State *L, global_State *g, l_obj addedold1) { - l_obj step = applygcparam(g, genminormul, g->GCmajorminor); - l_obj limit = applygcparam(g, minormajor, g->GCmajorminor); + l_obj step = luaO_applyparam(g->gcpgenminormul, g->GCmajorminor); + l_obj limit = luaO_applyparam(g->gcpminormajor, g->GCmajorminor); //printf("-> major? %ld %ld %ld %ld (%ld)\n", g->marked, limit, step, addedold1, gettotalobjs(g)); if (addedold1 >= (step >> 1) || g->marked >= limit) { minor2inc(L, g, KGC_GENMAJOR); /* go to major mode */ @@ -1347,7 +1347,7 @@ static void atomic2gen (lua_State *L, global_State *g) { ** total number of objects grows 'genminormul'%. */ static void setminordebt (global_State *g) { - luaE_setdebt(g, applygcparam(g, genminormul, g->GCmajorminor)); + luaE_setdebt(g, luaO_applyparam(g->gcpgenminormul, g->GCmajorminor)); } @@ -1404,7 +1404,7 @@ static int checkmajorminor (lua_State *L, global_State *g) { if (g->gckind == KGC_GENMAJOR) { l_obj numobjs = gettotalobjs(g); l_obj addedobjs = numobjs - g->GCmajorminor; - l_obj limit = applygcparam(g, majorminor, addedobjs); + l_obj limit = luaO_applyparam(g->gcpmajorminor, addedobjs); l_obj tobecollected = numobjs - g->marked; //printf("-> minor? %ld %ld %ld\n", tobecollected, limit, numobjs); if (tobecollected > limit) { @@ -1634,8 +1634,8 @@ void luaC_runtilstate (lua_State *L, int state, int fast) { ** controls when next step will be performed. */ static void incstep (lua_State *L, global_State *g) { - l_obj stepsize = cast(l_obj, 1) << g->gcstepsize; - l_obj work2do = applygcparam(g, gcstepmul, stepsize); + l_obj stepsize = luaO_applyparam(g->gcpstepsize, 100); + l_obj work2do = luaO_applyparam(g->gcpstepmul, stepsize); int fast = 0; if (work2do == 0) { /* special case: do a full collection */ work2do = MAX_LOBJ; /* do unlimited work */ -- cgit v1.2.3-55-g6feb