summaryrefslogtreecommitdiff
path: root/Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX')
-rw-r--r--Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX108
1 files changed, 108 insertions, 0 deletions
diff --git a/Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX b/Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX
new file mode 100644
index 00000000000..3a05a52d896
--- /dev/null
+++ b/Build/source/libs/luajit/LuaJIT-PATCHES/patch-05-LuaJITTeX
@@ -0,0 +1,108 @@
+diff -ur LuaJIT-2.1.0-beta1.orig/src/lj_def.h LuaJIT-2.1.0-beta1/src/lj_def.h
+--- LuaJIT-2.1.0-beta1.orig/src/lj_def.h 2015-08-25 23:35:00.000000000 +0200
++++ LuaJIT-2.1.0-beta1/src/lj_def.h 2015-09-04 08:51:52.000000000 +0200
+@@ -66,7 +66,7 @@
+ #define LJ_MAX_BCINS (1<<26) /* Max. # of bytecode instructions. */
+ #define LJ_MAX_SLOTS 250 /* Max. # of slots in a Lua func. */
+ #define LJ_MAX_LOCVAR 200 /* Max. # of local variables. */
+-#define LJ_MAX_UPVAL 60 /* Max. # of upvalues. */
++#define LJ_MAX_UPVAL 249 /* Max. # of upvalues. */
+
+ #define LJ_MAX_IDXCHAIN 100 /* __index/__newindex chain limit. */
+ #define LJ_STACK_EXTRA (5+2*LJ_FR2) /* Extra stack space (metamethods). */
+diff -ur LuaJIT-2.1.0-beta1.orig/src/lj_str.c LuaJIT-2.1.0-beta1/src/lj_str.c
+--- LuaJIT-2.1.0-beta1.orig/src/lj_str.c 2015-08-25 23:35:00.000000000 +0200
++++ LuaJIT-2.1.0-beta1/src/lj_str.c 2015-09-04 08:51:52.000000000 +0200
+@@ -118,6 +118,16 @@
+ g->strhash = newhash;
+ }
+
++/*
++** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to
++** compute its hash
++*/
++#if !defined(LUAI_HASHLIMIT)
++#define LUAI_HASHLIMIT 5
++#endif
++
++#define cast(t, exp) ((t)(exp))
++int luajittex_choose_hash_function = 0 ;
+ /* Intern a string and return string object. */
+ GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
+ {
+@@ -126,27 +136,44 @@
+ GCobj *o;
+ MSize len = (MSize)lenx;
+ MSize a, b, h = len;
++ size_t step ;
++ size_t l1 ;
+ if (lenx >= LJ_MAX_STR)
+ lj_err_msg(L, LJ_ERR_STROV);
+ g = G(L);
++
++ if (len==0)
++ return &g->strempty;
++ if (luajittex_choose_hash_function==0) {
++ /* Lua 5.1.5 hash function */
++ /* for 5.2 max methods we also need to patch the vm eq */
++ step = (len>>LUAI_HASHLIMIT)+1; /* if string is too long, don't hash all its chars */
++ for (l1=len; l1>=step; l1-=step) /* compute hash */
++ h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1]));
++ } else {
++ /* LuaJIT 2.0.2 hash function */
+ /* Compute string hash. Constants taken from lookup3 hash by Bob Jenkins. */
+- if (len >= 4) { /* Caveat: unaligned access! */
+- a = lj_getu32(str);
+- h ^= lj_getu32(str+len-4);
+- b = lj_getu32(str+(len>>1)-2);
+- h ^= b; h -= lj_rol(b, 14);
+- b += lj_getu32(str+(len>>2)-1);
+- } else if (len > 0) {
+- a = *(const uint8_t *)str;
+- h ^= *(const uint8_t *)(str+len-1);
+- b = *(const uint8_t *)(str+(len>>1));
+- h ^= b; h -= lj_rol(b, 14);
+- } else {
+- return &g->strempty;
+- }
+- a ^= h; a -= lj_rol(h, 11);
+- b ^= a; b -= lj_rol(a, 25);
+- h ^= b; h -= lj_rol(b, 16);
++ if (len >= 4) { /* Caveat: unaligned access! */
++ a = lj_getu32(str);
++ h ^= lj_getu32(str+len-4);
++ b = lj_getu32(str+(len>>1)-2);
++ h ^= b; h -= lj_rol(b, 14);
++ b += lj_getu32(str+(len>>2)-1);
++ } else if (len > 0) {
++ a = *(const uint8_t *)str;
++ h ^= *(const uint8_t *)(str+len-1);
++ b = *(const uint8_t *)(str+(len>>1));
++ h ^= b; h -= lj_rol(b, 14);
++ } else {
++ /* Already done, kept for reference */
++ return &g->strempty;
++ }
++ a ^= h; a -= lj_rol(h, 11);
++ b ^= a; b -= lj_rol(a, 25);
++ h ^= b; h -= lj_rol(b, 16);
++ }
++
++
+ /* Check if the string has already been interned. */
+ o = gcref(g->strhash[h & g->strmask]);
+ if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) {
+Only in LuaJIT-2.1.0-beta1/src: lj_str.c.orig
+diff -ur LuaJIT-2.1.0-beta1.orig/src/lua.h LuaJIT-2.1.0-beta1/src/lua.h
+--- LuaJIT-2.1.0-beta1.orig/src/lua.h 2015-09-04 08:42:39.000000000 +0200
++++ LuaJIT-2.1.0-beta1/src/lua.h 2015-09-04 08:51:52.000000000 +0200
+@@ -103,6 +103,9 @@
+ typedef LUA_INTEGER lua_Integer;
+
+
++/* communication with LuaJiTTeX */
++LUA_API int luajittex_choose_hash_function;
++
+
+ /*
+ ** state manipulation