diff options
author | Mike Pall <mike> | 2010-10-11 17:26:07 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-10-11 17:26:07 +0200 |
commit | 5140b40b44e8ff665f8e63293500f6dcc3c43bc7 (patch) | |
tree | 980c0120776fd74aba43c56bc5c883ca92c878ca /src | |
parent | 5dcf630c54db4441f2629339851818673e4b5be5 (diff) | |
download | luajit-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.c | 4 |
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 | } |