[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: log/log10 in Lua 5.2.0-alpha
- From: Jerome Vuarand <jerome.vuarand@...>
- Date: Sun, 22 May 2011 20:37:52 +0200
2011/5/20 François Perrad <francois.perrad@gadz.org>:
>
> when I see the implementation of math.log and math.log10 in LuaJIT2 and in
> Lua 5.1 :
>
> LuaJIT2
> LJLIB_ASM_(math_log) LJLIB_REC(math_unary IRFPM_LOG)
> LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10)
>
> Lua 5.1.4
> static int math_log (lua_State *L) {
> lua_pushnumber(L, log(luaL_checknumber(L, 1)));
> return 1;
> }
> static int math_log10 (lua_State *L) {
> lua_pushnumber(L, log10(luaL_checknumber(L, 1)));
> return 1;
> }
>
> I don't understand the rational of the removal of math.log10 and the
> addition of optional second parameter in math.log
>
> Lua 5.2.0-alpha : math.log (x [, base])
> static int math_log (lua_State *L) {
> lua_Number x = luaL_checknumber(L, 1);
> lua_Number res;
> if (lua_isnoneornil(L, 2))
> res = l_tg(log)(x);
> else {
> lua_Number base = luaL_checknumber(L, 2);
> if (base == 10.0) res = l_tg(log10)(x);
> else res = l_tg(log)(x)/l_tg(log)(base);
> }
> lua_pushnumber(L, res);
> return 1;
> }
>
> It's a general implementation of log, but all opportunities of optimization
> are lost.
Isn't LuaJIT smart enough to recognize that in a given code path
math.log is always called with no base or a 10 base, and plug the
right optimization in those cases ? I'm no expert, but I thought such
optimizations were what tracing JITs were designed to allow.