refactoring

pull/81/head
Dibyendu Majumdar 9 years ago
parent bfb5fcd4c1
commit 94356ff1a0

@ -763,197 +763,134 @@ public:
// and links in the new block
void link_block(RaviFunctionDef *def, int pc);
void emit_CONCAT(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_CONCAT(RaviFunctionDef *def, int A, int B, int C);
void emit_CLOSURE(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int Bx);
void emit_CLOSURE(RaviFunctionDef *def, int A, int Bx);
void emit_VARARG(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_VARARG(RaviFunctionDef *def, int A, int B);
void emit_LOADNIL(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_LOADNIL(RaviFunctionDef *def, int A, int B);
void emit_LOADFZ(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A);
void emit_LOADFZ(RaviFunctionDef *def, int A);
void emit_LOADIZ(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A);
void emit_LOADIZ(RaviFunctionDef *def, int A);
void emit_LOADBOOL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C, int j);
void emit_LOADBOOL(RaviFunctionDef *def, int A, int B, int C, int j);
void emit_ARITH(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, OpCode op, TMS tms);
void emit_ARITH(RaviFunctionDef *def, int A, int B, int C, OpCode op, TMS tms);
void emit_MOD(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MOD(RaviFunctionDef *def, int A, int B, int C);
void emit_IDIV(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_IDIV(RaviFunctionDef *def, int A, int B, int C);
void emit_POW(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_POW(RaviFunctionDef *def, int A, int B, int C);
void emit_UNM(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_UNM(RaviFunctionDef *def, int A, int B);
void emit_UNMF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_UNMF(RaviFunctionDef *def, int A, int B);
void emit_UNMI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_UNMI(RaviFunctionDef *def, int A, int B);
void emit_ADDFF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_ADDFF(RaviFunctionDef *def, int A, int B, int C);
void emit_ADDFI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_ADDFI(RaviFunctionDef *def, int A, int B, int C);
void emit_ADDII(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_ADDII(RaviFunctionDef *def, int A, int B, int C);
void emit_ADDFN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_ADDFN(RaviFunctionDef *def, int A, int B, int C);
void emit_ADDIN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_ADDIN(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBFF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBFF(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBFI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBFI(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBIF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBIF(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBII(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBII(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBFN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBFN(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBNF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBNF(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBIN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBIN(RaviFunctionDef *def, int A, int B, int C);
void emit_SUBNI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SUBNI(RaviFunctionDef *def, int A, int B, int C);
void emit_MULFF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MULFF(RaviFunctionDef *def, int A, int B, int C);
void emit_MULFI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MULFI(RaviFunctionDef *def, int A, int B, int C);
void emit_MULII(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MULII(RaviFunctionDef *def, int A, int B, int C);
void emit_MULFN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MULFN(RaviFunctionDef *def, int A, int B, int C);
void emit_MULIN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_MULIN(RaviFunctionDef *def, int A, int B, int C);
void emit_DIVFF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_DIVFF(RaviFunctionDef *def, int A, int B, int C);
void emit_DIVFI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_DIVFI(RaviFunctionDef *def, int A, int B, int C);
void emit_DIVIF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_DIVIF(RaviFunctionDef *def, int A, int B, int C);
void emit_DIVII(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_DIVII(RaviFunctionDef *def, int A, int B, int C);
void emit_LOADK(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int Bx);
void emit_LOADK(RaviFunctionDef *def, int A, int Bx);
void emit_RETURN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_RETURN(RaviFunctionDef *def, int A, int B);
void emit_CALL(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_CALL(RaviFunctionDef *def, int A, int B, int C);
void emit_JMP(RaviFunctionDef *def, int A, int j);
void emit_iFORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int sBx, int step_one);
void emit_iFORPREP(RaviFunctionDef *def, int A, int sBx, int step_one);
void emit_iFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int sBx, RaviBranchDef &b,
void emit_iFORLOOP(RaviFunctionDef *def, int A, int sBx, RaviBranchDef &b,
int step_one);
void emit_FORPREP(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int sBx);
void emit_FORPREP(RaviFunctionDef *def, int A, int sBx);
void emit_FORLOOP(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int sBx);
void emit_FORLOOP(RaviFunctionDef *def, int A, int sBx);
void emit_FORPREP2(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int sBx);
void emit_FORPREP2(RaviFunctionDef *def, int A, int sBx);
void emit_FORLOOP2(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int sBx, RaviBranchDef &b);
void emit_FORLOOP2(RaviFunctionDef *def, int A, int sBx, RaviBranchDef &b);
void emit_MOVE(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_MOVE(RaviFunctionDef *def, int A, int B);
void emit_MOVEI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_MOVEI(RaviFunctionDef *def, int A, int B);
void emit_MOVEF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_MOVEF(RaviFunctionDef *def, int A, int B);
void emit_TOINT(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A);
void emit_TOINT(RaviFunctionDef *def, int A);
void emit_TOFLT(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A);
void emit_TOFLT(RaviFunctionDef *def, int A);
void emit_LEN(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_LEN(RaviFunctionDef *def, int A, int B);
void emit_SETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_SETTABLE(RaviFunctionDef *def, int A, int B, int C);
void emit_GETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_GETTABLE(RaviFunctionDef *def, int A, int B, int C);
void emit_SELF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SELF(RaviFunctionDef *def, int A, int B, int C);
void emit_GETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B);
void emit_GETUPVAL(RaviFunctionDef *def, int A, int B);
void emit_SETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B);
void emit_SETUPVAL(RaviFunctionDef *def, int A, int B);
void emit_GETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_GETTABUP(RaviFunctionDef *def, int A, int B, int C);
void emit_SETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_SETTABUP(RaviFunctionDef *def, int A, int B, int C);
void emit_NEWARRAYINT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A);
void emit_NEWARRAYINT(RaviFunctionDef *def, int A);
void emit_NEWARRAYFLOAT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A);
void emit_NEWARRAYFLOAT(RaviFunctionDef *def, int A);
void emit_NEWTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_NEWTABLE(RaviFunctionDef *def, int A, int B, int C);
void emit_SETLIST(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C);
void emit_SETLIST(RaviFunctionDef *def, int A, int B, int C);
void emit_NOT(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_NOT(RaviFunctionDef *def, int A, int B);
// Emit code for OP_EQ, OP_LT and OP_LE
// The callee parameter should be luaV_equalobj, luaV_lessthan and
@ -962,52 +899,40 @@ public:
// A, B, C must be operands of the OP_EQ/OP_LT/OP_LE instructions
// j must be the jump target (offset of the code to which we need to jump to)
// jA must be the A operand of the jump instruction
void emit_EQ(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, int j, int jA, llvm::Constant *callee);
void emit_EQ(RaviFunctionDef *def, int A, int B, int C, int j, int jA, llvm::Constant *callee);
// OP_TEST is followed by a OP_JMP instruction - both are handled
// together
// A, B, C must be operands of the OP_TEST instruction
// j must be the jump target (offset of the code to which we need to jump to)
// jA must be the A operand of the jump instruction
void emit_TEST(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, int j, int jA);
void emit_TEST(RaviFunctionDef *def, int A, int B, int C, int j, int jA);
// OP_TESTSET is followed by a OP_JMP instruction - both are handled
// together
// A, B, C must be operands of the OP_TESTSET instruction
// j must be the jump target (offset of the code to which we need to jump to)
// jA must be the A operand of the jump instruction
void emit_TESTSET(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, int j, int jA);
void emit_TESTSET(RaviFunctionDef *def, int A, int B, int C, int j, int jA);
void emit_TFORCALL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C, int j, int jA);
void emit_TFORCALL(RaviFunctionDef *def, int A, int B, int C, int j, int jA);
void emit_TFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int j);
void emit_TFORLOOP(RaviFunctionDef *def, int A, int j);
void emit_GETTABLE_AF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_GETTABLE_AF(RaviFunctionDef *def, int A, int B, int C);
void emit_GETTABLE_AI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C);
void emit_GETTABLE_AI(RaviFunctionDef *def, int A, int B, int C);
void emit_SETTABLE_AF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C, bool known_int);
void emit_SETTABLE_AF(RaviFunctionDef *def, int A, int B, int C, bool known_int);
void emit_SETTABLE_AI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C, bool known_float);
void emit_SETTABLE_AI(RaviFunctionDef *def, int A, int B, int C, bool known_float);
void emit_MOVEAI(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_MOVEAI(RaviFunctionDef *def, int A, int B);
void emit_MOVEAF(RaviFunctionDef *def, llvm::Value *L_ci, llvm::Value *proto,
int A, int B);
void emit_MOVEAF(RaviFunctionDef *def, int A, int B);
// Return the base pointer
llvm::Instruction *emit_TOARRAY(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A,
llvm::Instruction *emit_TOARRAY(RaviFunctionDef *def, int A,
int array_type_expected, const char *errmsg);
private:

@ -29,8 +29,7 @@
namespace ravi {
// R(A) := -R(B), floating point
void RaviCodeGenerator::emit_UNMF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_UNMF(RaviFunctionDef *def, int A, int B) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -41,8 +40,7 @@ void RaviCodeGenerator::emit_UNMF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := -R(B), integer
void RaviCodeGenerator::emit_UNMI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_UNMI(RaviFunctionDef *def, int A, int B) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -53,8 +51,7 @@ void RaviCodeGenerator::emit_UNMI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) + C, result is floating
void RaviCodeGenerator::emit_ADDFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_ADDFN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -68,8 +65,7 @@ void RaviCodeGenerator::emit_ADDFN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) + RK(C), all floating
void RaviCodeGenerator::emit_ADDFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_ADDFF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -82,8 +78,7 @@ void RaviCodeGenerator::emit_ADDFF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) + RK(C), float+int
void RaviCodeGenerator::emit_ADDFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_ADDFI(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -97,8 +92,7 @@ void RaviCodeGenerator::emit_ADDFI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) + RK(C), int+int
void RaviCodeGenerator::emit_ADDII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_ADDII(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
@ -112,8 +106,7 @@ void RaviCodeGenerator::emit_ADDII(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) + C, int+c
void RaviCodeGenerator::emit_ADDIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_ADDIN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -126,8 +119,7 @@ void RaviCodeGenerator::emit_ADDIN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - RK(C), float-float
void RaviCodeGenerator::emit_SUBFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBFF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -140,8 +132,7 @@ void RaviCodeGenerator::emit_SUBFF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - RK(C), float-int
void RaviCodeGenerator::emit_SUBFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBFI(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -155,8 +146,7 @@ void RaviCodeGenerator::emit_SUBFI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - RK(C), int-float
void RaviCodeGenerator::emit_SUBIF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBIF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -170,8 +160,7 @@ void RaviCodeGenerator::emit_SUBIF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - RK(C), int-int
void RaviCodeGenerator::emit_SUBII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBII(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -184,8 +173,7 @@ void RaviCodeGenerator::emit_SUBII(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - C, float - c
void RaviCodeGenerator::emit_SUBFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBFN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -199,8 +187,7 @@ void RaviCodeGenerator::emit_SUBFN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := B - RK(C), b - float
void RaviCodeGenerator::emit_SUBNF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBNF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
@ -214,8 +201,7 @@ void RaviCodeGenerator::emit_SUBNF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := B - RK(C), b - int
void RaviCodeGenerator::emit_SUBIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBIN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -228,8 +214,7 @@ void RaviCodeGenerator::emit_SUBIN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) - C, int - c
void RaviCodeGenerator::emit_SUBNI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SUBNI(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
@ -242,8 +227,7 @@ void RaviCodeGenerator::emit_SUBNI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) * C, float*c
void RaviCodeGenerator::emit_MULFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MULFN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -257,8 +241,7 @@ void RaviCodeGenerator::emit_MULFN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) * RK(C), float*float
void RaviCodeGenerator::emit_MULFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MULFF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -271,8 +254,7 @@ void RaviCodeGenerator::emit_MULFF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) * RK(C), float*int
void RaviCodeGenerator::emit_MULFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MULFI(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -286,8 +268,7 @@ void RaviCodeGenerator::emit_MULFI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) * RK(C), int*int
void RaviCodeGenerator::emit_MULII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MULII(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
@ -301,8 +282,7 @@ void RaviCodeGenerator::emit_MULII(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) * C, int*c
void RaviCodeGenerator::emit_MULIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MULIN(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -315,8 +295,7 @@ void RaviCodeGenerator::emit_MULIN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) / RK(C), float/float
void RaviCodeGenerator::emit_DIVFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_DIVFF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -329,8 +308,7 @@ void RaviCodeGenerator::emit_DIVFF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) / RK(C), float/int
void RaviCodeGenerator::emit_DIVFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_DIVFI(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -344,8 +322,7 @@ void RaviCodeGenerator::emit_DIVFI(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) / RK(C), int/float
void RaviCodeGenerator::emit_DIVIF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_DIVIF(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
@ -359,8 +336,7 @@ void RaviCodeGenerator::emit_DIVIF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := RK(B) / RK(C), int/int but result is float
void RaviCodeGenerator::emit_DIVII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_DIVII(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);

@ -27,8 +27,7 @@
namespace ravi {
// OP_ADD, OP_SUB, OP_MUL and OP_DIV
void RaviCodeGenerator::emit_ARITH(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C,
void RaviCodeGenerator::emit_ARITH(RaviFunctionDef *def, int A, int B, int C,
OpCode op, TMS tms) {
// TValue *rb = RKB(i);
@ -224,8 +223,7 @@ void RaviCodeGenerator::emit_ARITH(RaviFunctionDef *def, llvm::Value *L_ci,
}
// OP_MOD
void RaviCodeGenerator::emit_MOD(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_MOD(RaviFunctionDef *def, int A, int B, int C) {
// TValue *rb = RKB(i);
// TValue *rc = RKC(i);
@ -420,8 +418,7 @@ void RaviCodeGenerator::emit_MOD(RaviFunctionDef *def, llvm::Value *L_ci,
}
// OP_IDIV
void RaviCodeGenerator::emit_IDIV(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_IDIV(RaviFunctionDef *def, int A, int B, int C) {
// TValue *rb = RKB(i);
// TValue *rc = RKC(i);
@ -584,8 +581,7 @@ void RaviCodeGenerator::emit_IDIV(RaviFunctionDef *def, llvm::Value *L_ci,
}
// OP_POW
void RaviCodeGenerator::emit_POW(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_POW(RaviFunctionDef *def, int A, int B, int C) {
// TValue *rb = RKB(i);
// TValue *rc = RKC(i);
@ -713,8 +709,7 @@ void RaviCodeGenerator::emit_POW(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(done_block);
}
void RaviCodeGenerator::emit_UNM(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_UNM(RaviFunctionDef *def, int A, int B) {
// TValue *rb = RB(i);
// lua_Number nb;

@ -57,8 +57,7 @@ void RaviCodeGenerator::emit_JMP(RaviFunctionDef *def, int A, int j) {
}
// Handle OP_CALL
void RaviCodeGenerator::emit_CALL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_CALL(RaviFunctionDef *def, int A, int B, int C) {
// int nresults = c - 1;
// if (b != 0)

@ -1023,82 +1023,82 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
switch (op) {
case OP_LOADK: {
int Bx = GETARG_Bx(i);
emit_LOADK(def, def->L_ci, def->proto, A, Bx);
emit_LOADK(def, A, Bx);
} break;
case OP_LOADKX: {
// OP_LOADKX is followed by OP_EXTRAARG
Instruction inst = code[++pc];
int Ax = GETARG_Ax(inst);
lua_assert(GET_OPCODE(inst) == OP_EXTRAARG);
emit_LOADK(def, def->L_ci, def->proto, A, Ax);
emit_LOADK(def, A, Ax);
} break;
case OP_CONCAT: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_CONCAT(def, def->L_ci, def->proto, A, B, C);
emit_CONCAT(def, A, B, C);
} break;
case OP_CLOSURE: {
int Bx = GETARG_Bx(i);
emit_CLOSURE(def, def->L_ci, def->proto, A, Bx);
emit_CLOSURE(def, A, Bx);
} break;
case OP_VARARG: {
int B = GETARG_B(i);
emit_VARARG(def, def->L_ci, def->proto, A, B);
emit_VARARG(def, A, B);
} break;
case OP_LOADBOOL: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_LOADBOOL(def, def->L_ci, def->proto, A, B, C, pc + 2);
emit_LOADBOOL(def, A, B, C, pc + 2);
} break;
case OP_MOVE: {
int B = GETARG_B(i);
emit_MOVE(def, def->L_ci, def->proto, A, B);
emit_MOVE(def, A, B);
} break;
case OP_RAVI_MOVEI: {
int B = GETARG_B(i);
emit_MOVEI(def, def->L_ci, def->proto, A, B);
emit_MOVEI(def, A, B);
} break;
case OP_RAVI_MOVEF: {
int B = GETARG_B(i);
emit_MOVEF(def, def->L_ci, def->proto, A, B);
emit_MOVEF(def, A, B);
} break;
case OP_RAVI_TOINT: {
emit_TOINT(def, def->L_ci, def->proto, A);
emit_TOINT(def, A);
} break;
case OP_RAVI_TOFLT: {
emit_TOFLT(def, def->L_ci, def->proto, A);
emit_TOFLT(def, A);
} break;
case OP_RAVI_NEWARRAYI: {
emit_NEWARRAYINT(def, def->L_ci, def->proto, A);
emit_NEWARRAYINT(def, A);
} break;
case OP_RAVI_NEWARRAYF: {
emit_NEWARRAYFLOAT(def, def->L_ci, def->proto, A);
emit_NEWARRAYFLOAT(def, A);
} break;
case OP_NEWTABLE: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_NEWTABLE(def, def->L_ci, def->proto, A, B, C);
emit_NEWTABLE(def, A, B, C);
} break;
case OP_SETLIST: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SETLIST(def, def->L_ci, def->proto, A, B, C);
emit_SETLIST(def, A, B, C);
} break;
case OP_SELF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SELF(def, def->L_ci, def->proto, A, B, C);
emit_SELF(def, A, B, C);
} break;
case OP_LEN: {
int B = GETARG_B(i);
emit_LEN(def, def->L_ci, def->proto, A, B);
emit_LEN(def, A, B);
} break;
case OP_RETURN: {
int B = GETARG_B(i);
emit_RETURN(def, def->L_ci, def->proto, A, B);
emit_RETURN(def, A, B);
} break;
case OP_LT:
case OP_LE:
@ -1118,7 +1118,7 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
int sbx = GETARG_sBx(i);
// j below is the jump target
int j = sbx + pc + 1;
emit_EQ(def, def->L_ci, def->proto, A, B, C, j, GETARG_A(i), comparison_function);
emit_EQ(def, A, B, C, j, GETARG_A(i), comparison_function);
} break;
case OP_TFORCALL: {
int B = GETARG_B(i);
@ -1132,16 +1132,16 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
int sbx = GETARG_sBx(i);
// j below is the jump target
int j = sbx + pc + 1;
emit_TFORCALL(def, def->L_ci, def->proto, A, B, C, j, GETARG_A(i));
emit_TFORCALL(def, A, B, C, j, GETARG_A(i));
} break;
case OP_TFORLOOP: {
int sbx = GETARG_sBx(i);
int j = sbx + pc + 1;
emit_TFORLOOP(def, def->L_ci, def->proto, A, j);
emit_TFORLOOP(def, A, j);
} break;
case OP_NOT: {
int B = GETARG_B(i);
emit_NOT(def, def->L_ci, def->proto, A, B);
emit_NOT(def, A, B);
} break;
case OP_TEST: {
int B = GETARG_B(i);
@ -1155,7 +1155,7 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
int sbx = GETARG_sBx(i);
// j below is the jump target
int j = sbx + pc + 1;
emit_TEST(def, def->L_ci, def->proto, A, B, C, j, GETARG_A(i));
emit_TEST(def, A, B, C, j, GETARG_A(i));
} break;
case OP_TESTSET: {
int B = GETARG_B(i);
@ -1169,7 +1169,7 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
int sbx = GETARG_sBx(i);
// j below is the jump target
int j = sbx + pc + 1;
emit_TESTSET(def, def->L_ci, def->proto, A, B, C, j, GETARG_A(i));
emit_TESTSET(def, A, B, C, j, GETARG_A(i));
} break;
case OP_JMP: {
@ -1182,13 +1182,13 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
case OP_RAVI_FORPREP_IP: {
int sbx = GETARG_sBx(i);
int j = sbx + pc + 1;
emit_iFORPREP(def, def->L_ci, def->proto, A, j, op == OP_RAVI_FORPREP_I1);
emit_iFORPREP(def, A, j, op == OP_RAVI_FORPREP_I1);
} break;
case OP_FORPREP: {
int sbx = GETARG_sBx(i);
int j = sbx + pc + 1;
#if RAVI_CODEGEN_FORPREP2
emit_FORPREP2(def, def->L_ci, def->proto, A, j);
emit_FORPREP2(def, A, j);
#else
emit_FORPREP(def, def->L_ci, def->proto, A, j);
#endif
@ -1197,14 +1197,14 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
case OP_RAVI_FORLOOP_IP: {
int sbx = GETARG_sBx(i);
int j = sbx + pc + 1;
emit_iFORLOOP(def, def->L_ci, def->proto, A, j, def->jmp_targets[pc],
emit_iFORLOOP(def, A, j, def->jmp_targets[pc],
op == OP_RAVI_FORLOOP_I1);
} break;
case OP_FORLOOP: {
int sbx = GETARG_sBx(i);
int j = sbx + pc + 1;
#if RAVI_CODEGEN_FORPREP2
emit_FORLOOP2(def, def->L_ci, def->proto, A, j, def->jmp_targets[pc]);
emit_FORLOOP2(def, A, j, def->jmp_targets[pc]);
#else
emit_FORLOOP(def, def->L_ci, def->proto, A, j);
#endif
@ -1212,239 +1212,239 @@ void RaviCodeGenerator::compile(lua_State *L, Proto *p, bool doDump,
case OP_LOADNIL: {
int B = GETARG_B(i);
emit_LOADNIL(def, def->L_ci, def->proto, A, B);
emit_LOADNIL(def, A, B);
} break;
case OP_RAVI_LOADFZ: {
emit_LOADFZ(def, def->L_ci, def->proto, A);
emit_LOADFZ(def, A);
} break;
case OP_RAVI_LOADIZ: {
emit_LOADIZ(def, def->L_ci, def->proto, A);
emit_LOADIZ(def, A);
} break;
case OP_TAILCALL:
case OP_CALL: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_CALL(def, def->L_ci, def->proto, A, B, C);
emit_CALL(def, A, B, C);
} break;
case OP_SETTABLE: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SETTABLE(def, def->L_ci, def->proto, A, B, C);
emit_SETTABLE(def, A, B, C);
} break;
case OP_GETTABLE: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_GETTABLE(def, def->L_ci, def->proto, A, B, C);
emit_GETTABLE(def, A, B, C);
} break;
case OP_RAVI_GETTABLE_AI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_GETTABLE_AI(def, def->L_ci, def->proto, A, B, C);
emit_GETTABLE_AI(def, A, B, C);
} break;
case OP_RAVI_SETTABLE_AII:
case OP_RAVI_SETTABLE_AI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SETTABLE_AI(def, def->L_ci, def->proto, A, B, C, op == OP_RAVI_SETTABLE_AII);
emit_SETTABLE_AI(def, A, B, C, op == OP_RAVI_SETTABLE_AII);
} break;
case OP_RAVI_GETTABLE_AF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_GETTABLE_AF(def, def->L_ci, def->proto, A, B, C);
emit_GETTABLE_AF(def, A, B, C);
} break;
case OP_RAVI_SETTABLE_AFF:
case OP_RAVI_SETTABLE_AF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SETTABLE_AF(def, def->L_ci, def->proto, A, B, C, op == OP_RAVI_SETTABLE_AFF);
emit_SETTABLE_AF(def, A, B, C, op == OP_RAVI_SETTABLE_AFF);
} break;
case OP_RAVI_TOARRAYI: {
emit_TOARRAY(def, def->L_ci, def->proto, A, RAVI_TARRAYINT, "integer[] expected");
emit_TOARRAY(def, A, RAVI_TARRAYINT, "integer[] expected");
} break;
case OP_RAVI_TOARRAYF: {
emit_TOARRAY(def, def->L_ci, def->proto, A, RAVI_TARRAYFLT, "number[] expected");
emit_TOARRAY(def, A, RAVI_TARRAYFLT, "number[] expected");
} break;
case OP_RAVI_MOVEAI: {
int B = GETARG_B(i);
emit_MOVEAI(def, def->L_ci, def->proto, A, B);
emit_MOVEAI(def, A, B);
} break;
case OP_RAVI_MOVEAF: {
int B = GETARG_B(i);
emit_MOVEAF(def, def->L_ci, def->proto, A, B);
emit_MOVEAF(def, A, B);
} break;
case OP_GETTABUP: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_GETTABUP(def, def->L_ci, def->proto, A, B, C);
emit_GETTABUP(def, A, B, C);
} break;
case OP_GETUPVAL: {
int B = GETARG_B(i);
emit_GETUPVAL(def, def->L_ci, def->proto, A, B);
emit_GETUPVAL(def, A, B);
} break;
case OP_SETTABUP: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SETTABUP(def, def->L_ci, def->proto, A, B, C);
emit_SETTABUP(def, A, B, C);
} break;
case OP_SETUPVAL: {
int B = GETARG_B(i);
emit_SETUPVAL(def, def->L_ci, def->proto, A, B);
emit_SETUPVAL(def, A, B);
} break;
case OP_ADD: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ARITH(def, def->L_ci, def->proto, A, B, C, OP_ADD, TM_ADD);
emit_ARITH(def, A, B, C, OP_ADD, TM_ADD);
} break;
case OP_RAVI_ADDFN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ADDFN(def, def->L_ci, def->proto, A, B, C);
emit_ADDFN(def, A, B, C);
} break;
case OP_RAVI_ADDIN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ADDIN(def, def->L_ci, def->proto, A, B, C);
emit_ADDIN(def, A, B, C);
} break;
case OP_RAVI_ADDFF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ADDFF(def, def->L_ci, def->proto, A, B, C);
emit_ADDFF(def, A, B, C);
} break;
case OP_RAVI_ADDFI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ADDFI(def, def->L_ci, def->proto, A, B, C);
emit_ADDFI(def, A, B, C);
} break;
case OP_RAVI_ADDII: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ADDII(def, def->L_ci, def->proto, A, B, C);
emit_ADDII(def, A, B, C);
} break;
case OP_SUB: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ARITH(def, def->L_ci, def->proto, A, B, C, OP_SUB, TM_SUB);
emit_ARITH(def, A, B, C, OP_SUB, TM_SUB);
} break;
case OP_RAVI_SUBFF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBFF(def, def->L_ci, def->proto, A, B, C);
emit_SUBFF(def, A, B, C);
} break;
case OP_RAVI_SUBFI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBFI(def, def->L_ci, def->proto, A, B, C);
emit_SUBFI(def, A, B, C);
} break;
case OP_RAVI_SUBIF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBIF(def, def->L_ci, def->proto, A, B, C);
emit_SUBIF(def, A, B, C);
} break;
case OP_RAVI_SUBII: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBII(def, def->L_ci, def->proto, A, B, C);
emit_SUBII(def, A, B, C);
} break;
case OP_RAVI_SUBFN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBFN(def, def->L_ci, def->proto, A, B, C);
emit_SUBFN(def, A, B, C);
} break;
case OP_RAVI_SUBNF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBNF(def, def->L_ci, def->proto, A, B, C);
emit_SUBNF(def, A, B, C);
} break;
case OP_RAVI_SUBIN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBIN(def, def->L_ci, def->proto, A, B, C);
emit_SUBIN(def, A, B, C);
} break;
case OP_RAVI_SUBNI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_SUBNI(def, def->L_ci, def->proto, A, B, C);
emit_SUBNI(def, A, B, C);
} break;
case OP_MUL: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ARITH(def, def->L_ci, def->proto, A, B, C, OP_MUL, TM_MUL);
emit_ARITH(def, A, B, C, OP_MUL, TM_MUL);
} break;
case OP_RAVI_MULFN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MULFN(def, def->L_ci, def->proto, A, B, C);
emit_MULFN(def, A, B, C);
} break;
case OP_RAVI_MULIN: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MULIN(def, def->L_ci, def->proto, A, B, C);
emit_MULIN(def, A, B, C);
} break;
case OP_RAVI_MULFF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MULFF(def, def->L_ci, def->proto, A, B, C);
emit_MULFF(def, A, B, C);
} break;
case OP_RAVI_MULFI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MULFI(def, def->L_ci, def->proto, A, B, C);
emit_MULFI(def, A, B, C);
} break;
case OP_RAVI_MULII: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MULII(def, def->L_ci, def->proto, A, B, C);
emit_MULII(def, A, B, C);
} break;
case OP_DIV: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_ARITH(def, def->L_ci, def->proto, A, B, C, OP_DIV, TM_DIV);
emit_ARITH(def, A, B, C, OP_DIV, TM_DIV);
} break;
case OP_RAVI_DIVFF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_DIVFF(def, def->L_ci, def->proto, A, B, C);
emit_DIVFF(def, A, B, C);
} break;
case OP_RAVI_DIVFI: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_DIVFI(def, def->L_ci, def->proto, A, B, C);
emit_DIVFI(def, A, B, C);
} break;
case OP_RAVI_DIVIF: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_DIVIF(def, def->L_ci, def->proto, A, B, C);
emit_DIVIF(def, A, B, C);
} break;
case OP_RAVI_DIVII: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_DIVII(def, def->L_ci, def->proto, A, B, C);
emit_DIVII(def, A, B, C);
} break;
case OP_MOD: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_MOD(def, def->L_ci, def->proto, A, B, C);
emit_MOD(def, A, B, C);
} break;
case OP_IDIV: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_IDIV(def, def->L_ci, def->proto, A, B, C);
emit_IDIV(def, A, B, C);
} break;
case OP_POW: {
int B = GETARG_B(i);
int C = GETARG_C(i);
emit_POW(def, def->L_ci, def->proto, A, B, C);
emit_POW(def, A, B, C);
} break;
case OP_UNM: {
int B = GETARG_B(i);
emit_UNM(def, def->L_ci, def->proto, A, B);
emit_UNM(def, A, B);
} break;
default:

@ -26,8 +26,7 @@ namespace ravi {
// Although the name is EQ this actually
// implements EQ, LE and LT - by using the supplied lua function to call.
void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C, int j,
void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, int A, int B, int C, int j,
int jA, llvm::Constant *callee) {
// case OP_EQ: {
// TValue *rb = RKB(i);
@ -144,8 +143,7 @@ llvm::Value *RaviCodeGenerator::emit_boolean_testfalse(RaviFunctionDef *def,
return result;
}
void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C,
void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, int A, int B, int C,
int j, int jA) {
// case OP_TEST: {
@ -194,8 +192,7 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(else_block);
}
void RaviCodeGenerator::emit_NOT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_NOT(RaviFunctionDef *def, int A, int B) {
// case OP_NOT: {
// TValue *rb = RB(i);
// int res = l_isfalse(rb); /* next assignment may change this value */
@ -211,8 +208,7 @@ void RaviCodeGenerator::emit_NOT(RaviFunctionDef *def, llvm::Value *L_ci,
emit_store_type(def, ra, LUA_TBOOLEAN);
}
void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C,
void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, int A, int B, int C,
int j, int jA) {
// case OP_TESTSET: {

@ -24,8 +24,7 @@
namespace ravi {
void RaviCodeGenerator::emit_FORLOOP2(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc,
void RaviCodeGenerator::emit_FORLOOP2(RaviFunctionDef *def, int A, int pc,
RaviBranchDef &b) {
// 7[1] FORLOOP 1 - 2; to 6
@ -205,8 +204,7 @@ void RaviCodeGenerator::emit_FORLOOP2(RaviFunctionDef *def, llvm::Value *L_ci,
}
void RaviCodeGenerator::emit_FORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc) {
void RaviCodeGenerator::emit_FORLOOP(RaviFunctionDef *def, int A, int pc) {
// 7[1] FORLOOP 1 - 2; to 6
// if (ttisinteger(ra)) { /* integer loop? */
@ -383,8 +381,7 @@ void RaviCodeGenerator::emit_FORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(exit_block);
}
void RaviCodeGenerator::emit_iFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc, RaviBranchDef &b, int step_one) {
void RaviCodeGenerator::emit_iFORLOOP(RaviFunctionDef *def, int A, int pc, RaviBranchDef &b, int step_one) {
// lua_Integer step = ivalue(ra + 2);
// lua_Integer idx = ivalue(ra) + step; /* increment index */

@ -24,8 +24,7 @@
namespace ravi {
void RaviCodeGenerator::emit_FORPREP2(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc) {
void RaviCodeGenerator::emit_FORPREP2(RaviFunctionDef *def, int A, int pc) {
// Create additional forloop targets
// First target is for int < limit
@ -398,8 +397,7 @@ void RaviCodeGenerator::emit_FORPREP2(RaviFunctionDef *def, llvm::Value *L_ci,
forloop_target.jmp4);
}
void RaviCodeGenerator::emit_FORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc) {
void RaviCodeGenerator::emit_FORPREP(RaviFunctionDef *def, int A, int pc) {
// case OP_FORPREP: {
// if (ttisinteger(init) && ttisinteger(pstep) &&
@ -702,8 +700,7 @@ void RaviCodeGenerator::emit_FORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->CreateBr(def->jmp_targets[pc].jmp1);
}
void RaviCodeGenerator::emit_iFORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int pc,
void RaviCodeGenerator::emit_iFORPREP(RaviFunctionDef *def, int A, int pc,
int step_one) {
RaviBranchDef &forloop_target = def->jmp_targets[pc];

@ -25,16 +25,14 @@
namespace ravi {
// R(A+1), ..., R(A+B) := nil
void RaviCodeGenerator::emit_LOADNIL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_LOADNIL(RaviFunctionDef *def, int A, int B) {
CreateCall3(def->builder, def->raviV_op_loadnilF, def->ci_val,
llvm::ConstantInt::get(def->types->C_intT, A),
llvm::ConstantInt::get(def->types->C_intT, B));
}
// R(A) := tonumber(0)
void RaviCodeGenerator::emit_LOADFZ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
void RaviCodeGenerator::emit_LOADFZ(RaviFunctionDef *def, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
// destvalue->n = 0.0
@ -45,8 +43,7 @@ void RaviCodeGenerator::emit_LOADFZ(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := tointeger(0)
void RaviCodeGenerator::emit_LOADIZ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
void RaviCodeGenerator::emit_LOADIZ(RaviFunctionDef *def, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
// dest->i = 0
@ -56,8 +53,7 @@ void RaviCodeGenerator::emit_LOADIZ(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := (Bool)B; if (C) pc++
void RaviCodeGenerator::emit_LOADBOOL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C,
void RaviCodeGenerator::emit_LOADBOOL(RaviFunctionDef *def, int A, int B, int C,
int j) {
// setbvalue(ra, GETARG_B(i));
@ -79,8 +75,7 @@ void RaviCodeGenerator::emit_LOADBOOL(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := R(B)
void RaviCodeGenerator::emit_MOVE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_MOVE(RaviFunctionDef *def, int A, int B) {
// setobjs2s(L, ra, RB(i));
// Load pointer to base
@ -94,8 +89,7 @@ void RaviCodeGenerator::emit_MOVE(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := R(B), check R(B) is int
void RaviCodeGenerator::emit_MOVEI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_MOVEI(RaviFunctionDef *def, int A, int B) {
// TValue *rb = RB(i);
// lua_Integer j;
@ -164,8 +158,7 @@ void RaviCodeGenerator::emit_MOVEI(RaviFunctionDef *def, llvm::Value *L_ci,
emit_store_type(def, dest, LUA_TNUMINT);
}
void RaviCodeGenerator::emit_MOVEF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_MOVEF(RaviFunctionDef *def, int A, int B) {
// case OP_RAVI_MOVEF: {
// TValue *rb = RB(i);
@ -237,8 +230,7 @@ void RaviCodeGenerator::emit_MOVEF(RaviFunctionDef *def, llvm::Value *L_ci,
emit_store_type(def, dest, LUA_TNUMFLT);
}
void RaviCodeGenerator::emit_TOINT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
void RaviCodeGenerator::emit_TOINT(RaviFunctionDef *def, int A) {
// case OP_RAVI_TOINT: {
// lua_Integer j;
@ -302,8 +294,7 @@ void RaviCodeGenerator::emit_TOINT(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(end1);
}
void RaviCodeGenerator::emit_TOFLT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
void RaviCodeGenerator::emit_TOFLT(RaviFunctionDef *def, int A) {
// case OP_RAVI_TOFLT: {
// lua_Number j;
@ -367,8 +358,7 @@ void RaviCodeGenerator::emit_TOFLT(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(end1);
}
void RaviCodeGenerator::emit_LOADK(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int Bx) {
void RaviCodeGenerator::emit_LOADK(RaviFunctionDef *def, int A, int Bx) {
// TValue *rb = k + GETARG_Bx(i);
// setobj2s(L, ra, rb);

@ -24,23 +24,20 @@
namespace ravi {
void RaviCodeGenerator::emit_CONCAT(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_CONCAT(RaviFunctionDef *def, int A, int B, int C) {
CreateCall5(def->builder, def->raviV_op_concatF, def->L, def->ci_val,
llvm::ConstantInt::get(def->types->C_intT, A),
llvm::ConstantInt::get(def->types->C_intT, B),
llvm::ConstantInt::get(def->types->C_intT, C));
}
void RaviCodeGenerator::emit_CLOSURE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int Bx) {
void RaviCodeGenerator::emit_CLOSURE(RaviFunctionDef *def, int A, int Bx) {
CreateCall5(def->builder, def->raviV_op_closureF, def->L, def->ci_val,
def->p_LClosure, llvm::ConstantInt::get(def->types->C_intT, A),
llvm::ConstantInt::get(def->types->C_intT, Bx));
}
void RaviCodeGenerator::emit_VARARG(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_VARARG(RaviFunctionDef *def, int A, int B) {
CreateCall5(def->builder, def->raviV_op_varargF, def->L, def->ci_val,
def->p_LClosure, llvm::ConstantInt::get(def->types->C_intT, A),
llvm::ConstantInt::get(def->types->C_intT, B));

@ -24,8 +24,7 @@
namespace ravi {
void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B) {
// Here is what OP_RETURN looks like. We only compile steps
// marked with //*. This is because the rest is only relevant in the

@ -25,8 +25,7 @@
namespace ravi {
// R(A+1) := R(B); R(A) := R(B)[RK(C)]
void RaviCodeGenerator::emit_SELF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SELF(RaviFunctionDef *def, int A, int B, int C) {
// StkId rb = RB(i);
// setobjs2s(L, ra + 1, rb);
// Protect(luaV_gettable(L, rb, RKC(i), ra));
@ -40,8 +39,7 @@ void RaviCodeGenerator::emit_SELF(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := length of R(B)
void RaviCodeGenerator::emit_LEN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_LEN(RaviFunctionDef *def, int A, int B) {
// Protect(luaV_objlen(L, ra, RB(i)));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
@ -50,8 +48,7 @@ void RaviCodeGenerator::emit_LEN(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A)[RK(B)] := RK(C)
void RaviCodeGenerator::emit_SETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SETTABLE(RaviFunctionDef *def, int A, int B, int C) {
// Protect(luaV_settable(L, ra, RKB(i), RKC(i)));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
@ -61,8 +58,7 @@ void RaviCodeGenerator::emit_SETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := R(B)[RK(C)]
void RaviCodeGenerator::emit_GETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_GETTABLE(RaviFunctionDef *def, int A, int B, int C) {
// Protect(luaV_gettable(L, RB(i), RKC(i), ra));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
@ -71,9 +67,7 @@ void RaviCodeGenerator::emit_GETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
CreateCall4(def->builder, def->luaV_gettableF, def->L, rb, rc, ra);
}
void RaviCodeGenerator::emit_GETTABLE_AF(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C) {
void RaviCodeGenerator::emit_GETTABLE_AF(RaviFunctionDef *def,int A, int B, int C) {
//#define raviH_get_float_inline(L, t, key, v)
//{ unsigned ukey = (unsigned)((key));
// lua_Number *data = (lua_Number *)t->ravi_array.data;
@ -127,9 +121,7 @@ void RaviCodeGenerator::emit_GETTABLE_AF(RaviFunctionDef *def,
def->builder->SetInsertPoint(end_block);
}
void RaviCodeGenerator::emit_GETTABLE_AI(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C) {
void RaviCodeGenerator::emit_GETTABLE_AI(RaviFunctionDef *def, int A, int B, int C) {
//#define raviH_get_int_inline(L, t, key, v)
//{ unsigned ukey = (unsigned)((key));
@ -184,9 +176,7 @@ void RaviCodeGenerator::emit_GETTABLE_AI(RaviFunctionDef *def,
def->builder->SetInsertPoint(end_block);
}
void RaviCodeGenerator::emit_SETTABLE_AI(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, bool known_int) {
void RaviCodeGenerator::emit_SETTABLE_AI(RaviFunctionDef *def, int A, int B, int C, bool known_int) {
//#define raviH_set_int_inline(L, t, key, value)
//{ unsigned ukey = (unsigned)((key));
@ -241,9 +231,7 @@ void RaviCodeGenerator::emit_SETTABLE_AI(RaviFunctionDef *def,
def->builder->SetInsertPoint(end_block);
}
void RaviCodeGenerator::emit_SETTABLE_AF(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A, int B, int C, bool known_float) {
void RaviCodeGenerator::emit_SETTABLE_AF(RaviFunctionDef *def, int A, int B, int C, bool known_float) {
//#define raviH_set_float_inline(L, t, key, value)
//{ unsigned ukey = (unsigned)((key));
@ -303,8 +291,7 @@ void RaviCodeGenerator::emit_SETTABLE_AF(RaviFunctionDef *def,
}
// R(A) := UpValue[B]
void RaviCodeGenerator::emit_GETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_GETUPVAL(RaviFunctionDef *def, int A, int B) {
// int b = GETARG_B(i);
// setobj2s(L, ra, cl->upvals[b]->v);
llvm::Instruction *base_ptr = emit_load_base(def);
@ -316,8 +303,7 @@ void RaviCodeGenerator::emit_GETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
}
// UpValue[B] := R(A)
void RaviCodeGenerator::emit_SETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_SETUPVAL(RaviFunctionDef *def, int A, int B) {
// UpVal *uv = cl->upvals[GETARG_B(i)];
// setobj(L, uv->v, ra);
@ -357,8 +343,7 @@ void RaviCodeGenerator::emit_SETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
}
// R(A) := UpValue[B][RK(C)]
void RaviCodeGenerator::emit_GETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_GETTABUP(RaviFunctionDef *def, int A, int B, int C) {
// int b = GETARG_B(i);
// Protect(luaV_gettable(L, cl->upvals[b]->v, RKC(i), ra));
llvm::Instruction *base_ptr = emit_load_base(def);
@ -372,8 +357,7 @@ void RaviCodeGenerator::emit_GETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
}
// UpValue[A][RK(B)] := RK(C)
void RaviCodeGenerator::emit_SETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SETTABUP(RaviFunctionDef *def, int A, int B, int C) {
// int a = GETARG_A(i);
// Protect(luaV_settable(L, cl->upvals[a]->v, RKB(i), RKC(i)));
@ -388,26 +372,21 @@ void RaviCodeGenerator::emit_SETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
CreateCall4(def->builder, def->luaV_settableF, def->L, v, rb, rc);
}
void RaviCodeGenerator::emit_NEWARRAYINT(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A) {
void RaviCodeGenerator::emit_NEWARRAYINT(RaviFunctionDef *def, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall3(def->builder, def->raviV_op_newarrayintF, def->L, def->ci_val,
ra);
}
void RaviCodeGenerator::emit_NEWARRAYFLOAT(RaviFunctionDef *def,
llvm::Value *L_ci,
llvm::Value *proto, int A) {
void RaviCodeGenerator::emit_NEWARRAYFLOAT(RaviFunctionDef *def, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall3(def->builder, def->raviV_op_newarrayfloatF, def->L, def->ci_val,
ra);
}
void RaviCodeGenerator::emit_NEWTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_NEWTABLE(RaviFunctionDef *def, int A, int B, int C) {
// case OP_NEWTABLE: {
// int b = GETARG_B(i);
// int c = GETARG_C(i);
@ -424,17 +403,14 @@ void RaviCodeGenerator::emit_NEWTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
def->types->kInt[B], def->types->kInt[C]);
}
void RaviCodeGenerator::emit_SETLIST(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
void RaviCodeGenerator::emit_SETLIST(RaviFunctionDef *def, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall5(def->builder, def->raviV_op_setlistF, def->L, def->ci_val, ra,
def->types->kInt[B], def->types->kInt[C]);
}
llvm::Instruction *RaviCodeGenerator::emit_TOARRAY(RaviFunctionDef *def,
llvm::Value *L_ci,
llvm::Value *proto, int A,
llvm::Instruction *RaviCodeGenerator::emit_TOARRAY(RaviFunctionDef *def, int A,
int array_type_expected,
const char *errmsg) {
@ -483,19 +459,17 @@ llvm::Instruction *RaviCodeGenerator::emit_TOARRAY(RaviFunctionDef *def,
return base_ptr;
}
void RaviCodeGenerator::emit_MOVEAI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_MOVEAI(RaviFunctionDef *def, int A, int B) {
llvm::Instruction *base_ptr =
emit_TOARRAY(def, L_ci, proto, B, RAVI_TARRAYINT, "integer[] expected");
emit_TOARRAY(def, B, RAVI_TARRAYINT, "integer[] expected");
llvm::Value *src = emit_gep_register(def, base_ptr, B);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
emit_assign(def, dest, src);
}
void RaviCodeGenerator::emit_MOVEAF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
void RaviCodeGenerator::emit_MOVEAF(RaviFunctionDef *def, int A, int B) {
llvm::Instruction *base_ptr =
emit_TOARRAY(def, L_ci, proto, B, RAVI_TARRAYFLT, "number[] expected");
emit_TOARRAY(def, B, RAVI_TARRAYFLT, "number[] expected");
llvm::Value *src = emit_gep_register(def, base_ptr, B);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
emit_assign(def, dest, src);

@ -24,8 +24,7 @@
namespace ravi {
void RaviCodeGenerator::emit_TFORCALL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C,
void RaviCodeGenerator::emit_TFORCALL(RaviFunctionDef *def, int A, int B, int C,
int j, int jA) {
// case OP_TFORCALL: {
@ -98,8 +97,7 @@ void RaviCodeGenerator::emit_TFORCALL(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(else_block);
}
void RaviCodeGenerator::emit_TFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int j) {
void RaviCodeGenerator::emit_TFORLOOP(RaviFunctionDef *def, int A, int j) {
// case OP_TFORLOOP: {
// l_tforloop:
// if (!ttisnil(ra + 1)) { /* continue loop? */

Loading…
Cancel
Save