Hugo Musso Gualandi 5 lat temu
rodzic
commit
a319b44e00
1 zmienionych plików z 28 dodań i 5 usunięć
  1. 28 5
      src/luaot.c

+ 28 - 5
src/luaot.c

@@ -705,8 +705,26 @@ void create_function(Proto *p)
                 println("    op_bitwiseK(L, l_bxor);");
                 break;
             }
-            // case OP_SHRI
-            // case OP_SHLI
+            case OP_SHRI: {
+                println("    TValue *rb = vRB(i);");
+                println("    int ic = GETARG_sC(i);");
+                println("    lua_Integer ib;");
+                println("    if (tointegerns(rb, &ib)) {");
+                println("       setivalue(s2v(ra), luaV_shiftl(ib, -ic));");
+                println("       goto LUA_AOT_SKIP1;"); // (!)
+                println("    }");
+                break;
+            }
+            case OP_SHLI: {
+                println("    TValue *rb = vRB(i);");
+                println("    int ic = GETARG_sC(i);");
+                println("    lua_Integer ib;");
+                println("    if (tointegerns(rb, &ib)) {");
+                println("       setivalue(s2v(ra), luaV_shiftl(ic, ib));");
+                println("       goto LUA_AOT_SKIP1;"); // (!)
+                println("    }");
+                break;
+            }
             case OP_ADD: {
                 println("    op_arith(L, l_addi, luai_numadd);");
                 break;
@@ -732,8 +750,14 @@ void create_function(Proto *p)
             // case OP_BAND
             // case OP_BOR
             // case OP_BXOR
-            // case OP_SHR
-            // case OP_SHL
+            case OP_SHR: {
+                println("    op_bitwise(L, luaV_shiftr);");
+                break;
+            }
+            case OP_SHL: {
+                println("    op_bitwise(L, luaV_shiftl);");
+                break;
+            }
             case OP_MMBIN: {
                 println("    Instruction pi = 0x%08x; /* original arith. expression */", p->code[pc-1]);
                 println("    TValue *rb = vRB(i);");
@@ -782,7 +806,6 @@ void create_function(Proto *p)
             // case OP_TESTSET
             // case OP_CALL
             // case OP_TAILCAL
-            // case OP_RETURN
             case OP_RETURN: {
                 println("    int n = GETARG_B(i) - 1;  /* number of results */");
                 println("    int nparams1 = GETARG_C(i);");