Skip to content

Commit

Permalink
issue #163 fix bugs - in particular the offet of value in UpVal has c…
Browse files Browse the repository at this point in the history
…hanged
  • Loading branch information
dibyendumajumdar committed Oct 20, 2019
1 parent 7f2dbc6 commit de33bec
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 11 deletions.
8 changes: 4 additions & 4 deletions src/ravi_llvmcall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@ void RaviCodeGenerator::emit_JMP(RaviFunctionDef *def, int A, int sBx, int pc) {
def->builder->SetInsertPoint(jmp_block);
}

emit_debug_trace(def, OP_JMP, pc);
bool traced = emit_debug_trace(def, OP_JMP, pc);

// if (a > 0) luaF_close(L, ci->u.l.base + a - 1);
if (A > 0) {
emit_load_base(def);
// base + a - 1
llvm::Value *val = emit_gep_register(def, A - 1);
if (!traced)
emit_update_savedpc(def, pc);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
Expand Down Expand Up @@ -172,9 +174,7 @@ void RaviCodeGenerator::emit_CALL(RaviFunctionDef *def, int A, int B, int C,
}

void RaviCodeGenerator::emit_DEFER(RaviFunctionDef *def, int A, int pc) {
bool traced = emit_debug_trace(def, OP_RAVI_DEFER, pc);
if (!traced)
emit_update_savedpc(def, pc);
emit_debug_trace(def, OP_RAVI_DEFER, pc);
emit_load_base(def);
llvm::Value *ra = emit_gep_register(def, A);
CreateCall2(def->builder, def->raviV_op_deferF, def->L, ra);
Expand Down
2 changes: 1 addition & 1 deletion src/ravi_llvmcodegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1307,7 +1307,7 @@ llvm::Value *RaviCodeGenerator::emit_gep_upval_v(RaviFunctionDef *def,
// Get &upval->value -> result is TValue *
llvm::Value *RaviCodeGenerator::emit_gep_upval_value(
RaviFunctionDef *def, llvm::Instruction *pupval) {
return emit_gep(def, "value", pupval, 0, 2);
return emit_gep(def, "value", pupval, 0, 3);
}

// Alternative code generator uses dmrC based C front-end
Expand Down
13 changes: 8 additions & 5 deletions src/ravi_llvmcomp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, int A, int B, int C,

// base + a - 1
llvm::Value *val = emit_gep_register(def, jA - 1);

if (!traced)
emit_update_savedpc(def, pc);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
Expand Down Expand Up @@ -211,7 +212,7 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, int A, int B, int C,
// donextjump(ci);
// } break;

emit_debug_trace(def, OP_TEST, pc);
bool traced = emit_debug_trace(def, OP_TEST, pc);
// Load pointer to base
emit_load_base(def);

Expand All @@ -237,7 +238,8 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, int A, int B, int C,

// base + a - 1
llvm::Value *val = emit_gep_register(def, jA - 1);

if (!traced)
emit_update_savedpc(def, pc);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
Expand Down Expand Up @@ -279,7 +281,7 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, int A, int B, int C,
// }
// } break;

emit_debug_trace(def, OP_TESTSET, pc);
bool traced = emit_debug_trace(def, OP_TESTSET, pc);
// Load pointer to base
emit_load_base(def);

Expand Down Expand Up @@ -309,7 +311,8 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, int A, int B, int C,

// base + a - 1
llvm::Value *val = emit_gep_register(def, jA - 1);

if (!traced)
emit_update_savedpc(def, pc);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
Expand Down
4 changes: 3 additions & 1 deletion src/ravi_llvmreturn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B,
def->builder->SetInsertPoint(return_block);
}

emit_debug_trace(def, OP_RETURN, pc);
bool traced = emit_debug_trace(def, OP_RETURN, pc);

// if (cl->p->sizep > 0) luaF_close(L, base);
// Get pointer to Proto->sizep
Expand All @@ -74,6 +74,8 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B,
emit_load_base(def);
// Get pointer to register A
llvm::Value *ra_ptr = emit_gep_register(def, A);
if (!traced)
emit_update_savedpc(def, pc);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, def->base_ptr, def->types->kInt[LUA_OK]);
def->builder->CreateBr(else_block);
Expand Down

0 comments on commit de33bec

Please sign in to comment.