|
|
|
@ -64,7 +64,7 @@ Setting up of the Lua types is proving easier in ``libgccjit`` due to the fact t
|
|
|
|
|
|
|
|
|
|
JIT Status of Lua/Ravi Bytecodes
|
|
|
|
|
---------------------------------
|
|
|
|
|
Following is the status as of 15 June 2015.
|
|
|
|
|
Following is the status as of 27 June 2015.
|
|
|
|
|
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| name | JITed? | description |
|
|
|
|
@ -75,7 +75,7 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_LOADKX | NO | R(A) := Kst(extra arg) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_LOADBOOL | NO | R(A) := (Bool)B; if (C) pc++ |
|
|
|
|
|
| OP_LOADBOOL | YES | R(A) := (Bool)B; if (C) pc++ |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_LOADNIL | YES | R(A), R(A+1), ..., R(A+B) := nil |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -127,7 +127,7 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_LEN | NO | R(A) := length of R(B) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_CONCAT | NO | R(A) := R(B).. ... ..R(C) |
|
|
|
|
|
| OP_CONCAT | YES | R(A) := R(B).. ... ..R(C) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_JMP | YES | c+=sBx; if (A) close all upvalues >= R(A - 1) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -137,9 +137,9 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_LE | YES | if ((RK(B) <= RK(C)) ~= A) then pc++ |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_TEST | NO | if not (R(A) <=> C) then pc++ |
|
|
|
|
|
| OP_TEST | YES | if not (R(A) <=> C) then pc++ |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_TESTSET | NO | if (R(B) <=> C) then R(A) := R(B) else pc++ |
|
|
|
|
|
| OP_TESTSET | YES | if (R(B) <=> C) then R(A) := R(B) else pc++ |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_CALL | YES | R(A), .. ,R(A+C-2) := R(A)(R(A+1), .. ,R(A+B-1)) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -159,9 +159,9 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_SETLIST | NO | R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_CLOSURE | NO | R(A) := closure(KPROTO[Bx]) |
|
|
|
|
|
| OP_CLOSURE | YES | R(A) := closure(KPROTO[Bx]) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_VARARG | NO | R(A), R(A+1), ..., R(A+B-2) = vararg |
|
|
|
|
|
| OP_VARARG | YES | R(A), R(A+1), ..., R(A+B-2) = vararg |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_EXTRAARG | N/A | extra (larger) argument for previous opcode |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -169,7 +169,7 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_NEWARRAYF | NO | R(A) := array of float |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_LOADIZ | NO | R(A) := tointeger(0) |
|
|
|
|
|
| OP_RAVI_LOADIZ | YES | R(A) := tointeger(0) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_LOADFZ | YES | R(A) := tonumber(0) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -177,11 +177,11 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_UNMI | NO | R(A) := -R(B) integer |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_ADDFF | NO | R(A) := RK(B) + RK(C) |
|
|
|
|
|
| OP_RAVI_ADDFF | YES | R(A) := RK(B) + RK(C) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_ADDFI | NO | R(A) := RK(B) + RK(C) |
|
|
|
|
|
| OP_RAVI_ADDFI | YES | R(A) := RK(B) + RK(C) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_ADDII | NO | R(A) := RK(B) + RK(C) |
|
|
|
|
|
| OP_RAVI_ADDII | YES | R(A) := RK(B) + RK(C) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_ADDFN | YES | R(A) := RK(B) + C |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
@ -221,17 +221,17 @@ Following is the status as of 15 June 2015.
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_DIVII | NO | R(A) := RK(B) / RK(C) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_TOINT | NO | R(A) := toint(R(A)) |
|
|
|
|
|
| OP_RAVI_TOINT | YES | R(A) := toint(R(A)) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_TOFLT | NO | R(A) := tofloat(R(A)) |
|
|
|
|
|
| OP_RAVI_TOFLT | YES | R(A) := tofloat(R(A)) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_TOARRAYI | NO | R(A) := to_arrayi(R(A)) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_TOARRAYF | NO | R(A) := to_arrayf(R(A)) |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_MOVEI | NO | R(A) := R(B), check R(B) is integer |
|
|
|
|
|
| OP_RAVI_MOVEI | YES | R(A) := R(B), check R(B) is integer |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_MOVEF | NO | R(A) := R(B), check R(B) is number |
|
|
|
|
|
| OP_RAVI_MOVEF | YES | R(A) := R(B), check R(B) is number |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|
| OP_RAVI_MOVEAI | NO | R(A) := R(B), check R(B) is array of integer |
|
|
|
|
|
+-------------------------+----------+--------------------------------------------------+
|
|
|
|
|