aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-10-11 17:26:07 +0200
committerMike Pall <mike>2010-10-11 17:26:07 +0200
commit5140b40b44e8ff665f8e63293500f6dcc3c43bc7 (patch)
tree980c0120776fd74aba43c56bc5c883ca92c878ca /src
parent5dcf630c54db4441f2629339851818673e4b5be5 (diff)
downloadluajit-5140b40b44e8ff665f8e63293500f6dcc3c43bc7.tar.gz
luajit-5140b40b44e8ff665f8e63293500f6dcc3c43bc7.tar.bz2
luajit-5140b40b44e8ff665f8e63293500f6dcc3c43bc7.zip
x64: Optimize internal/external tag conversion in lua_type().
Diffstat (limited to 'src')
-rw-r--r--src/lj_api.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lj_api.c b/src/lj_api.c
index 852c8c8b..827ab42f 100644
--- a/src/lj_api.c
+++ b/src/lj_api.c
@@ -196,7 +196,11 @@ LUA_API int lua_type(lua_State *L, int idx)
196 return LUA_TNONE; 196 return LUA_TNONE;
197 } else { /* Magic internal/external tag conversion. ORDER LJ_T */ 197 } else { /* Magic internal/external tag conversion. ORDER LJ_T */
198 uint32_t t = ~itype(o); 198 uint32_t t = ~itype(o);
199#if LJ_64
200 int tt = (int)((U64x(7506,98042110) >> 4*t) & 15u);
201#else
199 int tt = (int)(((t < 8 ? 0x98042110 : 0x7506) >> 4*(t&7)) & 15u); 202 int tt = (int)(((t < 8 ? 0x98042110 : 0x7506) >> 4*(t&7)) & 15u);
203#endif
200 lua_assert(tt != LUA_TNIL || tvisnil(o)); 204 lua_assert(tt != LUA_TNIL || tvisnil(o));
201 return tt; 205 return tt;
202 } 206 }