lua: re-enable host builds with some more fixes
[openwrt/svn-archive/archive.git] / package / lua / patches-host / 300-opcode_performance.patch
diff --git a/package/lua/patches-host/300-opcode_performance.patch b/package/lua/patches-host/300-opcode_performance.patch
deleted file mode 100644 (file)
index f6204ae..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
---- a/src/lvm.c
-+++ b/src/lvm.c
-@@ -31,6 +31,9 @@
- /* limit for table tag-method chains (to avoid loops) */
- #define MAXTAGLOOP    100
-+#ifdef __GNUC__
-+#define COMPUTED_GOTO 1
-+#endif
- /*
-  * If 'obj' is a string, it is tried to be interpreted as a number.
-@@ -562,12 +565,63 @@
-     ARITH_OP1_END
- #endif
-+#ifdef COMPUTED_GOTO
-+#define OPCODE_TARGET(op) DO_OP_##op:
-+#define CALL_OPCODE(op) goto *opcodes[op];
-+#define OPCODE_PTR(op) [OP_##op] = &&DO_OP_##op
-+#else
-+#define OPCODE_TARGET(op) case OP_##op:
-+#define CALL_OPCODE(op) switch (op)
-+#endif
-+
- void luaV_execute (lua_State *L, int nexeccalls) {
-   LClosure *cl;
-   StkId base;
-   TValue *k;
-   const Instruction *pc;
-+#ifdef COMPUTED_GOTO
-+  static const void *opcodes[] = {
-+   OPCODE_PTR(MOVE),
-+   OPCODE_PTR(LOADK),
-+   OPCODE_PTR(LOADBOOL),
-+   OPCODE_PTR(LOADNIL),
-+   OPCODE_PTR(GETUPVAL),
-+   OPCODE_PTR(GETGLOBAL),
-+   OPCODE_PTR(GETTABLE),
-+   OPCODE_PTR(SETGLOBAL),
-+   OPCODE_PTR(SETUPVAL),
-+   OPCODE_PTR(SETTABLE),
-+   OPCODE_PTR(NEWTABLE),
-+   OPCODE_PTR(SELF),
-+   OPCODE_PTR(ADD),
-+   OPCODE_PTR(SUB),
-+   OPCODE_PTR(MUL),
-+   OPCODE_PTR(DIV),
-+   OPCODE_PTR(MOD),
-+   OPCODE_PTR(POW),
-+   OPCODE_PTR(UNM),
-+   OPCODE_PTR(NOT),
-+   OPCODE_PTR(LEN),
-+   OPCODE_PTR(CONCAT),
-+   OPCODE_PTR(JMP),
-+   OPCODE_PTR(EQ),
-+   OPCODE_PTR(LT),
-+   OPCODE_PTR(LE),
-+   OPCODE_PTR(TEST),
-+   OPCODE_PTR(TESTSET),
-+   OPCODE_PTR(CALL),
-+   OPCODE_PTR(TAILCALL),
-+   OPCODE_PTR(RETURN),
-+   OPCODE_PTR(FORLOOP),
-+   OPCODE_PTR(FORPREP),
-+   OPCODE_PTR(TFORLOOP),
-+   OPCODE_PTR(SETLIST),
-+   OPCODE_PTR(CLOSE),
-+   OPCODE_PTR(CLOSURE),
-+   OPCODE_PTR(VARARG)
-+  };
-+#endif
-  reentry:  /* entry point */
-   lua_assert(isLua(L->ci));
-   pc = L->savedpc;
-@@ -592,33 +646,33 @@
-     lua_assert(base == L->base && L->base == L->ci->base);
-     lua_assert(base <= L->top && L->top <= L->stack + L->stacksize);
-     lua_assert(L->top == L->ci->top || luaG_checkopenop(i));
--    switch (GET_OPCODE(i)) {
--      case OP_MOVE: {
-+    CALL_OPCODE(GET_OPCODE(i)) {
-+      OPCODE_TARGET(MOVE) {
-         setobjs2s(L, ra, RB(i));
-         continue;
-       }
--      case OP_LOADK: {
-+      OPCODE_TARGET(LOADK) {
-         setobj2s(L, ra, KBx(i));
-         continue;
-       }
--      case OP_LOADBOOL: {
-+      OPCODE_TARGET(LOADBOOL) {
-         setbvalue(ra, GETARG_B(i));
-         if (GETARG_C(i)) pc++;  /* skip next instruction (if C) */
-         continue;
-       }
--      case OP_LOADNIL: {
-+      OPCODE_TARGET(LOADNIL) {
-         TValue *rb = RB(i);
-         do {
-           setnilvalue(rb--);
-         } while (rb >= ra);
-         continue;
-       }
--      case OP_GETUPVAL: {
-+      OPCODE_TARGET(GETUPVAL) {
-         int b = GETARG_B(i);
-         setobj2s(L, ra, cl->upvals[b]->v);
-         continue;
-       }
--      case OP_GETGLOBAL: {
-+      OPCODE_TARGET(GETGLOBAL) {
-         TValue g;
-         TValue *rb = KBx(i);
-         sethvalue(L, &g, cl->env);
-@@ -626,88 +680,88 @@
-         Protect(luaV_gettable(L, &g, rb, ra));
-         continue;
-       }
--      case OP_GETTABLE: {
-+      OPCODE_TARGET(GETTABLE) {
-         Protect(luaV_gettable(L, RB(i), RKC(i), ra));
-         continue;
-       }
--      case OP_SETGLOBAL: {
-+      OPCODE_TARGET(SETGLOBAL) {
-         TValue g;
-         sethvalue(L, &g, cl->env);
-         lua_assert(ttisstring(KBx(i)));
-         Protect(luaV_settable(L, &g, KBx(i), ra));
-         continue;
-       }
--      case OP_SETUPVAL: {
-+      OPCODE_TARGET(SETUPVAL) {
-         UpVal *uv = cl->upvals[GETARG_B(i)];
-         setobj(L, uv->v, ra);
-         luaC_barrier(L, uv, ra);
-         continue;
-       }
--      case OP_SETTABLE: {
-+      OPCODE_TARGET(SETTABLE) {
-         Protect(luaV_settable(L, ra, RKB(i), RKC(i)));
-         continue;
-       }
--      case OP_NEWTABLE: {
-+      OPCODE_TARGET(NEWTABLE) {
-         int b = GETARG_B(i);
-         int c = GETARG_C(i);
-         sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c)));
-         Protect(luaC_checkGC(L));
-         continue;
-       }
--      case OP_SELF: {
-+      OPCODE_TARGET(SELF) {
-         StkId rb = RB(i);
-         setobjs2s(L, ra+1, rb);
-         Protect(luaV_gettable(L, rb, RKC(i), ra));
-         continue;
-       }
--      case OP_ADD: {
-+      OPCODE_TARGET(ADD) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue( luai_numadd, try_addint, luai_vectadd );
-         Protect(Arith(L, ra, rb, rc, TM_ADD)); \
-         continue;
-       }
--      case OP_SUB: {
-+      OPCODE_TARGET(SUB) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue( luai_numsub, try_subint, luai_vectsub );
-         Protect(Arith(L, ra, rb, rc, TM_SUB));
-         continue;
-       }
--      case OP_MUL: {
-+      OPCODE_TARGET(MUL) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue(luai_nummul, try_mulint, luai_vectmul);
-         Protect(Arith(L, ra, rb, rc, TM_MUL));
-         continue;
-       }
--      case OP_DIV: {
-+      OPCODE_TARGET(DIV) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue(luai_numdiv, try_divint, luai_vectdiv);
-         Protect(Arith(L, ra, rb, rc, TM_DIV));
-         continue;
-       }
--      case OP_MOD: {
-+      OPCODE_TARGET(MOD) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue_scalar(luai_nummod, try_modint);  /* scalars only */
-         Protect(Arith(L, ra, rb, rc, TM_MOD));
-         continue;
-       }
--      case OP_POW: {
-+      OPCODE_TARGET(POW) {
-         TValue *rb = RKB(i), *rc= RKC(i);
-         arith_op_continue(luai_numpow, try_powint, luai_vectpow);
-         Protect(Arith(L, ra, rb, rc, TM_POW));
-         continue;
-       }
--      case OP_UNM: {
-+      OPCODE_TARGET(UNM) {
-         TValue *rb = RB(i);
-         arith_op1_continue(luai_numunm, try_unmint, luai_vectunm);
-         Protect(Arith(L, ra, rb, rb, TM_UNM));
-         continue;
-       }
--      case OP_NOT: {
-+      OPCODE_TARGET(NOT) {
-         int res = l_isfalse(RB(i));  /* next assignment may change this value */
-         setbvalue(ra, res);
-         continue;
-       }
--      case OP_LEN: {
-+      OPCODE_TARGET(LEN) {
-         const TValue *rb = RB(i);
-         switch (ttype(rb)) {
-           case LUA_TTABLE: {
-@@ -727,18 +781,18 @@
-         }
-         continue;
-       }
--      case OP_CONCAT: {
-+      OPCODE_TARGET(CONCAT) {
-         int b = GETARG_B(i);
-         int c = GETARG_C(i);
-         Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L));
-         setobjs2s(L, RA(i), base+b);
-         continue;
-       }
--      case OP_JMP: {
-+      OPCODE_TARGET(JMP) {
-         dojump(L, pc, GETARG_sBx(i));
-         continue;
-       }
--      case OP_EQ: {
-+      OPCODE_TARGET(EQ) {
-         TValue *rb = RKB(i);
-         TValue *rc = RKC(i);
-         Protect(
-@@ -748,7 +802,7 @@
-         pc++;
-         continue;
-       }
--      case OP_LT: {
-+      OPCODE_TARGET(LT) {
-         Protect(
-           if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i))
-             dojump(L, pc, GETARG_sBx(*pc));
-@@ -756,7 +810,7 @@
-         pc++;
-         continue;
-       }
--      case OP_LE: {
-+      OPCODE_TARGET(LE) {
-         Protect(
-           if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i))
-             dojump(L, pc, GETARG_sBx(*pc));
-@@ -764,13 +818,13 @@
-         pc++;
-         continue;
-       }
--      case OP_TEST: {
-+      OPCODE_TARGET(TEST) {
-         if (l_isfalse(ra) != GETARG_C(i))
-           dojump(L, pc, GETARG_sBx(*pc));
-         pc++;
-         continue;
-       }
--      case OP_TESTSET: {
-+      OPCODE_TARGET(TESTSET) {
-         TValue *rb = RB(i);
-         if (l_isfalse(rb) != GETARG_C(i)) {
-           setobjs2s(L, ra, rb);
-@@ -779,7 +833,7 @@
-         pc++;
-         continue;
-       }
--      case OP_CALL: {
-+      OPCODE_TARGET(CALL) {
-         int b = GETARG_B(i);
-         int nresults = GETARG_C(i) - 1;
-         if (b != 0) L->top = ra+b;  /* else previous instruction set top */
-@@ -800,7 +854,7 @@
-           }
-         }
-       }
--      case OP_TAILCALL: {
-+      OPCODE_TARGET(TAILCALL) {
-         int b = GETARG_B(i);
-         if (b != 0) L->top = ra+b;  /* else previous instruction set top */
-         L->savedpc = pc;
-@@ -832,7 +886,7 @@
-           }
-         }
-       }
--      case OP_RETURN: {
-+      OPCODE_TARGET(RETURN) {
-         int b = GETARG_B(i);
-         if (b != 0) L->top = ra+b-1;
-         if (L->openupval) luaF_close(L, base);
-@@ -847,7 +901,7 @@
-           goto reentry;
-         }
-       }
--      case OP_FORLOOP: {
-+      OPCODE_TARGET(FORLOOP) {
-         /* If start,step and limit are all integers, we don't need to check
-          * against overflow in the looping.
-          */
-@@ -875,7 +929,7 @@
-         }
-         continue;
-       }
--      case OP_FORPREP: {
-+      OPCODE_TARGET(FORPREP) {
-         const TValue *init = ra;
-         const TValue *plimit = ra+1;
-         const TValue *pstep = ra+2;
-@@ -898,7 +952,7 @@
-         dojump(L, pc, GETARG_sBx(i));
-         continue;
-       }
--      case OP_TFORLOOP: {
-+      OPCODE_TARGET(TFORLOOP) {
-         StkId cb = ra + 3;  /* call base */
-         setobjs2s(L, cb+2, ra+2);
-         setobjs2s(L, cb+1, ra+1);
-@@ -914,7 +968,7 @@
-         pc++;
-         continue;
-       }
--      case OP_SETLIST: {
-+      OPCODE_TARGET(SETLIST) {
-         int n = GETARG_B(i);
-         int c = GETARG_C(i);
-         int last;
-@@ -936,11 +990,11 @@
-         }
-         continue;
-       }
--      case OP_CLOSE: {
-+      OPCODE_TARGET(CLOSE) {
-         luaF_close(L, ra);
-         continue;
-       }
--      case OP_CLOSURE: {
-+      OPCODE_TARGET(CLOSURE) {
-         Proto *p;
-         Closure *ncl;
-         int nup, j;
-@@ -960,7 +1014,7 @@
-         Protect(luaC_checkGC(L));
-         continue;
-       }
--      case OP_VARARG: {
-+      OPCODE_TARGET(VARARG) {
-         int b = GETARG_B(i) - 1;
-         int j;
-         CallInfo *ci = L->ci;