]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
x64: Optimize internal/external tag conversion in lua_type().
authorMike Pall <mike>
Mon, 11 Oct 2010 15:26:07 +0000 (17:26 +0200)
committerMike Pall <mike>
Mon, 11 Oct 2010 15:26:07 +0000 (17:26 +0200)
src/lj_api.c

index 852c8c8be823a887128f97ddf422c6ead4220f46..827ab42fff7bfeeaf438b12b1e252e04823e0750 100644 (file)
@@ -196,7 +196,11 @@ LUA_API int lua_type(lua_State *L, int idx)
     return LUA_TNONE;
   } else {  /* Magic internal/external tag conversion. ORDER LJ_T */
     uint32_t t = ~itype(o);
+#if LJ_64
+    int tt = (int)((U64x(7506,98042110) >> 4*t) & 15u);
+#else
     int tt = (int)(((t < 8 ? 0x98042110 : 0x7506) >> 4*(t&7)) & 15u);
+#endif
     lua_assert(tt != LUA_TNIL || tvisnil(o));
     return tt;
   }