code refactoring

pull/81/head
Dibyendu Majumdar 9 years ago
parent 89bbbd9264
commit 43d0b4472d

@ -51,13 +51,11 @@ extern "C" {
#include "ldebug.h"
#include "ldo.h"
#include "lfunc.h"
//#include "lgc.h"
#include "lobject.h"
#include "lopcodes.h"
#include "lstate.h"
#include "lstring.h"
#include "ltable.h"
//#include "ltm.h"
#include "lvm.h"
#ifdef __cplusplus
@ -652,11 +650,11 @@ public:
llvm::Instruction *emit_load_base(RaviFunctionDef *def);
// emit code to obtain address of register at location A
llvm::Value *emit_gep_ra(RaviFunctionDef *def, llvm::Instruction *base,
llvm::Value *emit_gep_register(RaviFunctionDef *def, llvm::Instruction *base,
int A);
// emit code to obtain address of register or constant at location B
llvm::Value *emit_gep_rkb(RaviFunctionDef *def, llvm::Instruction *base,
llvm::Value *emit_gep_register_or_constant(RaviFunctionDef *def, llvm::Instruction *base,
int B);
// emit code to load the lua_Number value from register

@ -8,7 +8,7 @@ end
if ravi then
ravi.optlevel(2)
assert(ravi.compile(x))
ravi.dumpllvmasm(x)
-- ravi.dumpllvmasm(x)
end
local t1 = os.clock()

@ -6,7 +6,11 @@ local function x()
return j
end
x()
if ravi then
ravi.optlevel(2)
assert(ravi.compile(x))
-- ravi.dumpllvmasm(x)
end
local t1 = os.clock()
local y = x();

@ -6,7 +6,11 @@ local function x()
return j
end
x()
if ravi then
ravi.optlevel(2)
assert(ravi.compile(x))
-- ravi.dumpllvmasm(x)
end
local t1 = os.clock()
local y = x();

@ -9,7 +9,11 @@ local function x()
return j
end
x()
if ravi then
ravi.optlevel(2)
assert(ravi.compile(x))
-- ravi.dumpllvmasm(x)
end
local t1 = os.clock()
local y = x();

@ -133,16 +133,18 @@ function matrix.print(a)
end
end
assert(ravi.compile(cast))
assert(ravi.compile(matrix.gen))
assert(ravi.compile(matrix.mul))
assert(ravi.compile(matrix.mul2))
assert(ravi.compile(matrix.T))
assert(ravi.compile(matrix.cols))
assert(ravi.compile(matrix.rows))
assert(ravi.compile(matrix.getdata))
assert(ravi.compile(matrix.getrow))
assert(ravi.compile(matrix.new))
if ravi.jit() then
assert(ravi.compile(cast))
assert(ravi.compile(matrix.gen))
assert(ravi.compile(matrix.mul))
assert(ravi.compile(matrix.mul2))
assert(ravi.compile(matrix.T))
assert(ravi.compile(matrix.cols))
assert(ravi.compile(matrix.rows))
assert(ravi.compile(matrix.getdata))
assert(ravi.compile(matrix.getrow))
assert(ravi.compile(matrix.new))
end
local n = arg[1] or 100;
n = math.floor(n/2) * 2;

@ -32,8 +32,8 @@ namespace ravi {
void RaviCodeGenerator::emit_UNMF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Value *result = def->builder->CreateFNeg(lhs);
emit_store_reg_n(def, result, ra);
@ -44,8 +44,8 @@ void RaviCodeGenerator::emit_UNMF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_UNMI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Value *result = def->builder->CreateNeg(lhs, "", false, true);
emit_store_reg_i(def, result, ra);
@ -56,8 +56,8 @@ void RaviCodeGenerator::emit_UNMI(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_ADDFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Value *result = def->builder->CreateFAdd(
lhs,
@ -71,9 +71,9 @@ void RaviCodeGenerator::emit_ADDFN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_ADDFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFAdd(lhs, rhs);
@ -85,9 +85,9 @@ void RaviCodeGenerator::emit_ADDFF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_ADDFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateFAdd(
@ -101,9 +101,9 @@ void RaviCodeGenerator::emit_ADDII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateAdd(lhs, rhs, "", false, true);
@ -115,8 +115,8 @@ void RaviCodeGenerator::emit_ADDII(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_ADDIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Value *result = def->builder->CreateAdd(
lhs, llvm::ConstantInt::get(def->types->lua_IntegerT, C), "", false,
@ -129,9 +129,9 @@ void RaviCodeGenerator::emit_ADDIN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFSub(lhs, rhs);
@ -143,9 +143,9 @@ void RaviCodeGenerator::emit_SUBFF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateFSub(
@ -158,9 +158,9 @@ void RaviCodeGenerator::emit_SUBFI(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBIF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFSub(
@ -173,9 +173,9 @@ void RaviCodeGenerator::emit_SUBIF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateSub(lhs, rhs, "", false, true);
@ -187,8 +187,8 @@ void RaviCodeGenerator::emit_SUBII(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Value *result = def->builder->CreateFSub(
lhs,
@ -202,8 +202,8 @@ void RaviCodeGenerator::emit_SUBFN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBNF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFSub(
def->builder->CreateSIToFP(llvm::ConstantInt::get(def->types->C_intT, B),
@ -217,8 +217,8 @@ void RaviCodeGenerator::emit_SUBNF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Value *result = def->builder->CreateSub(
lhs, llvm::ConstantInt::get(def->types->lua_IntegerT, C), "", false,
@ -231,8 +231,8 @@ void RaviCodeGenerator::emit_SUBIN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SUBNI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateSub(
llvm::ConstantInt::get(def->types->lua_IntegerT, C), rhs, "", false,
@ -245,8 +245,8 @@ void RaviCodeGenerator::emit_SUBNI(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_MULFN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Value *result = def->builder->CreateFMul(
lhs,
@ -260,9 +260,9 @@ void RaviCodeGenerator::emit_MULFN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_MULFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFMul(lhs, rhs);
@ -274,9 +274,9 @@ void RaviCodeGenerator::emit_MULFF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_MULFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateFMul(
@ -290,9 +290,9 @@ void RaviCodeGenerator::emit_MULII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateMul(lhs, rhs, "", false, true);
@ -304,8 +304,8 @@ void RaviCodeGenerator::emit_MULII(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_MULIN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Value *result = def->builder->CreateMul(
lhs, llvm::ConstantInt::get(def->types->lua_IntegerT, C), "", false,
@ -318,9 +318,9 @@ void RaviCodeGenerator::emit_MULIN(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_DIVFF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFDiv(lhs, rhs);
@ -332,9 +332,9 @@ void RaviCodeGenerator::emit_DIVFF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_DIVFI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_n(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateFDiv(
@ -347,9 +347,9 @@ void RaviCodeGenerator::emit_DIVFI(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_DIVIF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_n(def, rc);
llvm::Value *result = def->builder->CreateFDiv(
@ -362,9 +362,9 @@ void RaviCodeGenerator::emit_DIVIF(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_DIVII(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *lhs = emit_load_reg_i(def, rb);
llvm::Instruction *rhs = emit_load_reg_i(def, rc);
llvm::Value *result = def->builder->CreateFDiv(

@ -48,9 +48,9 @@ void RaviCodeGenerator::emit_ARITH(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *nc = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nc");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *rb_type = emit_load_type(def, rb);
llvm::Value *rc_type = emit_load_type(def, rc);
@ -246,9 +246,9 @@ void RaviCodeGenerator::emit_MOD(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *nc = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nc");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *rb_type = emit_load_type(def, rb);
llvm::Value *rc_type = emit_load_type(def, rc);
@ -440,9 +440,9 @@ void RaviCodeGenerator::emit_IDIV(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *nc = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nc");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *rb_type = emit_load_type(def, rb);
llvm::Value *rc_type = emit_load_type(def, rc);
@ -600,9 +600,9 @@ void RaviCodeGenerator::emit_POW(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *nc = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nc");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *rb_type = emit_load_type(def, rb);
llvm::Value *rc_type = emit_load_type(def, rc);
@ -733,8 +733,8 @@ void RaviCodeGenerator::emit_UNM(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *nb = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nb");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rb_type = emit_load_type(def, rb);

@ -45,7 +45,7 @@ void RaviCodeGenerator::emit_JMP(RaviFunctionDef *def, int A, int j) {
if (A > 0) {
llvm::Instruction *base = emit_load_base(def);
// base + a - 1
llvm::Value *val = emit_gep_ra(def, base, A - 1);
llvm::Value *val = emit_gep_register(def, base, A - 1);
// Call luaF_close
CreateCall2(def->builder, def->luaF_closeF, def->L, val);
}
@ -88,7 +88,7 @@ void RaviCodeGenerator::emit_CALL(RaviFunctionDef *def, llvm::Value *L_ci,
// 0 - Run interpreter on Lua function
// int c = luaD_precall(L, ra, nresults); /* C or JITed function? */
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *precall_result =
CreateCall3(def->builder, def->luaD_precallF, def->L, ra,
llvm::ConstantInt::get(def->types->C_intT, nresults));

@ -146,7 +146,7 @@ llvm::Instruction *RaviCodeGenerator::emit_load_base(RaviFunctionDef *def) {
}
// emit code to obtain address of register at location A
llvm::Value *RaviCodeGenerator::emit_gep_ra(RaviFunctionDef *def,
llvm::Value *RaviCodeGenerator::emit_gep_register(RaviFunctionDef *def,
llvm::Instruction *base_ptr,
int A) {
llvm::Value *dest;
@ -397,7 +397,7 @@ llvm::Instruction *RaviCodeGenerator::emit_load_local_int(RaviFunctionDef *def,
}
// emit code to obtain address of register or constant at location B
llvm::Value *RaviCodeGenerator::emit_gep_rkb(RaviFunctionDef *def,
llvm::Value *RaviCodeGenerator::emit_gep_register_or_constant(RaviFunctionDef *def,
llvm::Instruction *base_ptr,
int B) {
// Load pointer to k
@ -437,7 +437,7 @@ void RaviCodeGenerator::emit_set_L_top_toreg(RaviFunctionDef *def,
llvm::Instruction *base_ptr,
int B) {
// Get pointer to register at R(B)
llvm::Value *ptr = emit_gep_ra(def, base_ptr, B);
llvm::Value *ptr = emit_gep_register(def, base_ptr, B);
// Get pointer to L->top
llvm::Value *top = emit_gep(def, "L.top", def->L, 0, 4);
// Assign to L->top

@ -44,9 +44,9 @@ void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register B
llvm::Value *lhs_ptr = emit_gep_rkb(def, base_ptr, B);
llvm::Value *lhs_ptr = emit_gep_register_or_constant(def, base_ptr, B);
// Get pointer to register C
llvm::Value *rhs_ptr = emit_gep_rkb(def, base_ptr, C);
llvm::Value *rhs_ptr = emit_gep_register_or_constant(def, base_ptr, C);
// Call luaV_equalobj with register B and C
llvm::Value *result =
@ -159,7 +159,7 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register A
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
// v = C ? is_false(ra) : !is_false(ra)
llvm::Value *v = C ? emit_boolean_testfalse(def, ra, false)
: emit_boolean_testfalse(def, ra, true);
@ -203,10 +203,10 @@ void RaviCodeGenerator::emit_NOT(RaviFunctionDef *def, llvm::Value *L_ci,
// } break;
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register B
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
llvm::Value *v = emit_boolean_testfalse(def, rb, false);
llvm::Value *result = def->builder->CreateZExt(v, def->types->C_intT, "i");
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
emit_store_reg_b(def, result, ra);
emit_store_type(def, ra, LUA_TBOOLEAN);
}
@ -229,7 +229,7 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register B
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
// v = C ? is_false(ra) : !is_false(ra)
llvm::Value *v = C ? emit_boolean_testfalse(def, rb, false)
: emit_boolean_testfalse(def, rb, true);
@ -245,7 +245,7 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(then_block);
// Get pointer to register A
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
emit_assign(def, ra, rb);
// if (a > 0) luaF_close(L, ci->u.l.base + a - 1);

@ -122,7 +122,7 @@ void RaviCodeGenerator::emit_FORLOOP2(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *rvar = emit_gep_ra(def, base_ptr, A + 3);
llvm::Value *rvar = emit_gep_register(def, base_ptr, A + 3);
// setivalue(ra + 3, idx); /* ...and external index */
idx_int_value = emit_load_local_n(def, idx_int_ptr);
@ -189,7 +189,7 @@ void RaviCodeGenerator::emit_FORLOOP2(RaviFunctionDef *def, llvm::Value *L_ci,
def->builder->SetInsertPoint(update_block);
base_ptr = emit_load_base(def);
rvar = emit_gep_ra(def, base_ptr, A + 3);
rvar = emit_gep_register(def, base_ptr, A + 3);
// setfltvalue(ra + 3, idx); /* ...and external index */
idx_double_value = emit_load_local_n(def, idx_double_ptr);
@ -238,10 +238,10 @@ void RaviCodeGenerator::emit_FORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
// TValue *rlimit = ra + 1;
// TValue *rstep = ra + 2;
// TValue *rvar = ra + 3
llvm::Value *rinit = emit_gep_ra(def, base_ptr, A);
llvm::Value *rlimit = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *rstep = emit_gep_ra(def, base_ptr, A + 2);
llvm::Value *rvar = emit_gep_ra(def, base_ptr, A + 3);
llvm::Value *rinit = emit_gep_register(def, base_ptr, A);
llvm::Value *rlimit = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *rstep = emit_gep_register(def, base_ptr, A + 2);
llvm::Value *rvar = emit_gep_register(def, base_ptr, A + 3);
// Create the done block
llvm::BasicBlock *exit_block =
@ -446,7 +446,7 @@ void RaviCodeGenerator::emit_iFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
// Load pointer to base
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *rvar = emit_gep_ra(def, base_ptr, A + 3);
llvm::Value *rvar = emit_gep_register(def, base_ptr, A + 3);
// setivalue(ra + 3, idx); /* ...and external index */
idx_int_value = emit_load_local_n(def, idx_int_ptr);

@ -89,9 +89,9 @@ void RaviCodeGenerator::emit_FORPREP2(RaviFunctionDef *def, llvm::Value *L_ci,
// TValue *init = ra;
// TValue *plimit = ra + 1;
// TValue *pstep = ra + 2;
llvm::Value *init = emit_gep_ra(def, base_ptr, A);
llvm::Value *plimit = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *pstep = emit_gep_ra(def, base_ptr, A + 2);
llvm::Value *init = emit_gep_register(def, base_ptr, A);
llvm::Value *plimit = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *pstep = emit_gep_register(def, base_ptr, A + 2);
// if (ttisinteger(init) && ttisinteger(pstep) &&
// forlimit(plimit, &ilimit, ivalue(pstep), &stopnow)) {
@ -445,9 +445,9 @@ void RaviCodeGenerator::emit_FORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
// TValue *init = ra;
// TValue *plimit = ra + 1;
// TValue *pstep = ra + 2;
llvm::Value *init = emit_gep_ra(def, base_ptr, A);
llvm::Value *plimit = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *pstep = emit_gep_ra(def, base_ptr, A + 2);
llvm::Value *init = emit_gep_register(def, base_ptr, A);
llvm::Value *plimit = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *pstep = emit_gep_register(def, base_ptr, A + 2);
// if (ttisinteger(init) && ttisinteger(pstep) &&
// forlimit(plimit, &ilimit, ivalue(pstep), &stopnow)) {
@ -727,11 +727,11 @@ void RaviCodeGenerator::emit_iFORPREP(RaviFunctionDef *def, llvm::Value *L_ci,
// TValue *init = ra;
// TValue *pstep = ra + 2;
llvm::Value *init = emit_gep_ra(def, base_ptr, A);
llvm::Value *plimit = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *init = emit_gep_register(def, base_ptr, A);
llvm::Value *plimit = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *pstep = nullptr;
if (!step_one)
pstep = emit_gep_ra(def, base_ptr, A + 2);
pstep = emit_gep_register(def, base_ptr, A + 2);
// Get ivalue(pstep)
llvm::Instruction *limit_ivalue = emit_load_reg_i(def, plimit);

@ -36,7 +36,7 @@ void RaviCodeGenerator::emit_LOADNIL(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_LOADFZ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
// destvalue->n = 0.0
emit_store_reg_n(def, llvm::ConstantFP::get(def->types->lua_NumberT, 0.0),
dest);
@ -48,7 +48,7 @@ void RaviCodeGenerator::emit_LOADFZ(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_LOADIZ(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
// dest->i = 0
emit_store_reg_i(def, def->types->kluaInteger[0], dest);
// dest->type = LUA_TNUMINT
@ -64,7 +64,7 @@ void RaviCodeGenerator::emit_LOADBOOL(RaviFunctionDef *def, llvm::Value *L_ci,
// if (GETARG_C(i)) ci->u.l.savedpc++; /* skip next instruction (if C) */
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
// dest->i = 0
emit_store_reg_b(def, llvm::ConstantInt::get(def->types->C_intT, B), dest);
// dest->type = LUA_TBOOLEAN
@ -88,8 +88,8 @@ void RaviCodeGenerator::emit_MOVE(RaviFunctionDef *def, llvm::Value *L_ci,
lua_assert(A != B);
llvm::Value *src = emit_gep_ra(def, base_ptr, B);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
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);
}
@ -111,8 +111,8 @@ void RaviCodeGenerator::emit_MOVEI(RaviFunctionDef *def, llvm::Value *L_ci,
// Load pointer to base
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *src = emit_gep_ra(def, base_ptr, B);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
llvm::Value *src = emit_gep_register(def, base_ptr, B);
llvm::Value *src_type = emit_load_type(def, src);
@ -183,8 +183,8 @@ void RaviCodeGenerator::emit_MOVEF(RaviFunctionDef *def, llvm::Value *L_ci,
// Load pointer to base
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *src = emit_gep_ra(def, base_ptr, B);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
llvm::Value *src = emit_gep_register(def, base_ptr, B);
llvm::Value *src_type = emit_load_type(def, src);
@ -255,7 +255,7 @@ void RaviCodeGenerator::emit_TOINT(RaviFunctionDef *def, llvm::Value *L_ci,
// Load pointer to base
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
llvm::Value *src = dest;
llvm::Value *src_type = emit_load_type(def, src);
@ -320,7 +320,7 @@ void RaviCodeGenerator::emit_TOFLT(RaviFunctionDef *def, llvm::Value *L_ci,
// Load pointer to base
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
llvm::Value *src = dest;
llvm::Value *src_type = emit_load_type(def, src);
@ -381,7 +381,7 @@ void RaviCodeGenerator::emit_LOADK(RaviFunctionDef *def, llvm::Value *L_ci,
// LOADK requires a structure assignment
// in LLVM as far as I can tell this requires a call to
// an intrinsic memcpy
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
llvm::Value *dest = emit_gep_register(def, base_ptr, A);
llvm::Value *src;
if (Bx == 0) {

@ -59,7 +59,7 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register A
llvm::Value *ra_ptr = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra_ptr = emit_gep_register(def, base_ptr, A);
//* if (b != 0) L->top = ra + b - 1;
if (B != 0) {

@ -31,11 +31,11 @@ void RaviCodeGenerator::emit_SELF(RaviFunctionDef *def, llvm::Value *L_ci,
// setobjs2s(L, ra + 1, rb);
// Protect(luaV_gettable(L, rb, RKC(i), ra));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *ra1 = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
llvm::Value *ra1 = emit_gep_register(def, base_ptr, A + 1);
emit_assign(def, ra1, rb);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
CreateCall4(def->builder, def->luaV_gettableF, def->L, rb, rc, ra);
}
@ -44,8 +44,8 @@ void RaviCodeGenerator::emit_LEN(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
// Protect(luaV_objlen(L, ra, RB(i)));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
CreateCall3(def->builder, def->luaV_objlenF, def->L, ra, rb);
}
@ -54,9 +54,9 @@ void RaviCodeGenerator::emit_SETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, 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_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
CreateCall4(def->builder, def->luaV_settableF, def->L, ra, rb, rc);
}
@ -65,9 +65,9 @@ void RaviCodeGenerator::emit_GETTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, 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_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
CreateCall4(def->builder, def->luaV_gettableF, def->L, rb, rc, ra);
}
@ -90,9 +90,9 @@ void RaviCodeGenerator::emit_GETTABLE_AF(RaviFunctionDef *def,
// raviH_get_float_inline(L, t, idx, ra);
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *key = emit_load_reg_i(def, rc);
llvm::Instruction *t = emit_load_reg_h(def, rb);
llvm::Instruction *data = emit_load_reg_h_floatarray(def, t);
@ -147,9 +147,9 @@ void RaviCodeGenerator::emit_GETTABLE_AI(RaviFunctionDef *def,
// raviH_get_int_inline(L, t, idx, ra);
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_ra(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *key = emit_load_reg_i(def, rc);
llvm::Instruction *t = emit_load_reg_h(def, rb);
llvm::Instruction *data = emit_load_reg_h_intarray(def, t);
@ -205,9 +205,9 @@ void RaviCodeGenerator::emit_SETTABLE_AI(RaviFunctionDef *def,
// raviH_set_int_inline(L, t, idx, value);
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *key = emit_load_reg_i(def, rb);
llvm::Instruction *value = emit_load_reg_i(def, rc);
llvm::Instruction *t = emit_load_reg_h(def, ra);
@ -269,9 +269,9 @@ void RaviCodeGenerator::emit_SETTABLE_AF(RaviFunctionDef *def,
llvm::Value *nc = TmpB.CreateAlloca(def->types->lua_NumberT, nullptr, "nc");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Instruction *key = emit_load_reg_i(def, rb);
llvm::Instruction *rc_type = emit_load_type(def, rc);
@ -351,7 +351,7 @@ void RaviCodeGenerator::emit_GETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
// int b = GETARG_B(i);
// setobj2s(L, ra, cl->upvals[b]->v);
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *upval_ptr = emit_gep_upvals(def, def->p_LClosure, B);
llvm::Instruction *upval = emit_load_pupval(def, upval_ptr);
llvm::Value *v = emit_load_upval_v(def, upval);
@ -367,7 +367,7 @@ void RaviCodeGenerator::emit_SETUPVAL(RaviFunctionDef *def, llvm::Value *L_ci,
// luaC_upvalbarrier(L, uv);
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *upval_ptr = emit_gep_upvals(def, def->p_LClosure, B);
llvm::Instruction *upval = emit_load_pupval(def, upval_ptr);
llvm::Value *v = emit_load_upval_v(def, upval);
@ -405,8 +405,8 @@ void RaviCodeGenerator::emit_GETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
// int b = GETARG_B(i);
// Protect(luaV_gettable(L, cl->upvals[b]->v, RKC(i), ra));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *upval_ptr = emit_gep_upvals(def, def->p_LClosure, B);
llvm::Instruction *upval = emit_load_pupval(def, upval_ptr);
@ -422,8 +422,8 @@ void RaviCodeGenerator::emit_SETTABUP(RaviFunctionDef *def, llvm::Value *L_ci,
// Protect(luaV_settable(L, cl->upvals[a]->v, RKB(i), RKC(i)));
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *rb = emit_gep_rkb(def, base_ptr, B);
llvm::Value *rc = emit_gep_rkb(def, base_ptr, C);
llvm::Value *rb = emit_gep_register_or_constant(def, base_ptr, B);
llvm::Value *rc = emit_gep_register_or_constant(def, base_ptr, C);
llvm::Value *upval_ptr = emit_gep_upvals(def, def->p_LClosure, A);
llvm::Instruction *upval = emit_load_pupval(def, upval_ptr);
@ -435,7 +435,7 @@ void RaviCodeGenerator::emit_NEWARRAYINT(RaviFunctionDef *def,
llvm::Value *L_ci, llvm::Value *proto,
int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall3(def->builder, def->raviV_op_newarrayintF, def->L, def->ci_val,
ra);
}
@ -444,7 +444,7 @@ void RaviCodeGenerator::emit_NEWARRAYFLOAT(RaviFunctionDef *def,
llvm::Value *L_ci,
llvm::Value *proto, int A) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall3(def->builder, def->raviV_op_newarrayfloatF, def->L, def->ci_val,
ra);
}
@ -462,7 +462,7 @@ void RaviCodeGenerator::emit_NEWTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
// } break;
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
CreateCall5(def->builder, def->raviV_op_newtableF, def->L, def->ci_val, ra,
def->types->kInt[B], def->types->kInt[C]);
}
@ -470,7 +470,7 @@ void RaviCodeGenerator::emit_NEWTABLE(RaviFunctionDef *def, llvm::Value *L_ci,
void RaviCodeGenerator::emit_SETLIST(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B, int C) {
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
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]);
}
@ -485,7 +485,7 @@ llvm::Instruction *RaviCodeGenerator::emit_TOARRAY(RaviFunctionDef *def,
// luaG_runerror(L, "integer[] expected");
llvm::Instruction *base_ptr = emit_load_base(def);
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Instruction *type = emit_load_type(def, ra);
// type != LUA_TTABLE ?
@ -530,8 +530,8 @@ void RaviCodeGenerator::emit_MOVEAI(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
llvm::Instruction *base_ptr =
emit_TOARRAY(def, L_ci, proto, B, RAVI_TARRAYINT, "integer[] expected");
llvm::Value *src = emit_gep_ra(def, base_ptr, B);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
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);
}
@ -539,8 +539,8 @@ void RaviCodeGenerator::emit_MOVEAF(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Value *proto, int A, int B) {
llvm::Instruction *base_ptr =
emit_TOARRAY(def, L_ci, proto, B, RAVI_TARRAYFLT, "number[] expected");
llvm::Value *src = emit_gep_ra(def, base_ptr, B);
llvm::Value *dest = emit_gep_ra(def, base_ptr, A);
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);
}
}

@ -53,12 +53,12 @@ void RaviCodeGenerator::emit_TFORCALL(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register A
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra1 = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *ra2 = emit_gep_ra(def, base_ptr, A + 2);
llvm::Value *cb = emit_gep_ra(def, base_ptr, A + 3);
llvm::Value *cb1 = emit_gep_ra(def, base_ptr, A + 4);
llvm::Value *cb2 = emit_gep_ra(def, base_ptr, A + 5);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *ra1 = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *ra2 = emit_gep_register(def, base_ptr, A + 2);
llvm::Value *cb = emit_gep_register(def, base_ptr, A + 3);
llvm::Value *cb1 = emit_gep_register(def, base_ptr, A + 4);
llvm::Value *cb2 = emit_gep_register(def, base_ptr, A + 5);
emit_assign(def, cb2, ra2);
emit_assign(def, cb1, ra1);
@ -74,8 +74,8 @@ void RaviCodeGenerator::emit_TFORCALL(RaviFunctionDef *def, llvm::Value *L_ci,
base_ptr = emit_load_base(def);
// L->top = ci->top;
emit_refresh_L_top(def);
ra = emit_gep_ra(def, base_ptr, jA);
ra1 = emit_gep_ra(def, base_ptr, jA + 1);
ra = emit_gep_register(def, base_ptr, jA);
ra1 = emit_gep_register(def, base_ptr, jA + 1);
llvm::Value *type = emit_load_type(def, ra1);
// Test if type != LUA_TNIL (0)
@ -112,8 +112,8 @@ void RaviCodeGenerator::emit_TFORLOOP(RaviFunctionDef *def, llvm::Value *L_ci,
llvm::Instruction *base_ptr = emit_load_base(def);
// Get pointer to register A
llvm::Value *ra = emit_gep_ra(def, base_ptr, A);
llvm::Value *ra1 = emit_gep_ra(def, base_ptr, A + 1);
llvm::Value *ra = emit_gep_register(def, base_ptr, A);
llvm::Value *ra1 = emit_gep_register(def, base_ptr, A + 1);
llvm::Value *type = emit_load_type(def, ra1);
// Test if type != LUA_TNIL (0)

Loading…
Cancel
Save