add -fno-strict-aliasing option

pull/81/head
dibyendumajumdar 9 years ago
parent 00d1845b38
commit df65672e37

@ -469,6 +469,8 @@ LUA_API void ravi_create_slice(lua_State *L, int idx, unsigned int start,
unsigned int len);
LUA_API void ravi_dump_stack(lua_State *L, const char *s);
struct Proto;
LUA_API void ravi_print_function(const struct Proto* f, int full);
LUA_API void ravi_dump_function(lua_State *L);
LUA_API void ravi_set_debuglevel(int level);

@ -566,13 +566,13 @@ static void PrintDebug(const Proto* f)
}
}
static void PrintFunction(const Proto* f, int full)
void ravi_print_function(const Proto* f, int full)
{
int i, n = f->sizep;
PrintHeader(f);
PrintCode(f);
if (full) PrintDebug(f);
for (i = 0; i<n; i++) PrintFunction(f->p[i], full);
for (i = 0; i<n; i++) ravi_print_function(f->p[i], full);
}
#define toproto(L,i) getproto(L->top+(i))
@ -581,5 +581,5 @@ void ravi_dump_function(lua_State *L)
{
Proto* f;
f = toproto(L, -1);
PrintFunction(f, 1);
ravi_print_function(f, 1);
}

@ -172,6 +172,7 @@ static bool create_function(ravi_gcc_codegen_t *codegen,
gcc_jit_context_set_int_option(def->function_context,
GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL,
def->opt_level);
gcc_jit_context_add_command_line_option(def->function_context, "-fno-strict-aliasing");
/* each function is given a unique name - as Lua functions are closures and do
* not really have names */
@ -674,11 +675,15 @@ static void link_block(ravi_function_def_t *def, int pc) {
if (!def->current_block_terminated) {
// Previous block not terminated so branch to the
// new block
gcc_jit_block_end_with_jump(def->current_block, NULL, block);
ravi_emit_branch(def, block);
}
// Now add the new block and make it current
def->current_block = block;
def->current_block_terminated = false;
ravi_set_current_block(def, block);
}
else if (def->current_block_terminated) {
gcc_jit_block *block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "LINK_BLOCK", pc));
ravi_set_current_block(def, block);
}
}
@ -1322,6 +1327,7 @@ int raviV_compile(struct lua_State *L, struct Proto *p, int manual_request,
if (gcc_jit_context_get_first_error(def.function_context)) {
fprintf(stderr, "aborting due to JIT error: %s\n",
gcc_jit_context_get_first_error(def.function_context));
ravi_print_function(p,1);
abort();
}
gcc_jit_result *compilation_result =

@ -82,7 +82,6 @@ void ravi_emit_iFORLOOP(ravi_function_def_t *def, int A, int pc,
ravi_emit_store_reg_i_withtype(def, gcc_jit_lvalue_as_rvalue(b->iidx), rvar);
// ci->u.l.savedpc += GETARG_sBx(i); /* jump back */
gcc_jit_block_end_with_jump(def->current_block, NULL,
def->jmp_targets[pc]->jmp);
ravi_emit_branch(def, def->jmp_targets[pc]->jmp);
ravi_set_current_block(def, exit_block);
}

@ -90,7 +90,5 @@ void ravi_emit_iFORPREP(ravi_function_def_t *def, int A, int pc, int step_one) {
// We are done so jump to forloop
lua_assert(def->jmp_targets[pc]->jmp);
gcc_jit_block_end_with_jump(def->current_block, NULL,
def->jmp_targets[pc]->jmp);
def->current_block_terminated = true;
ravi_emit_branch(def, def->jmp_targets[pc]->jmp);
}

@ -48,9 +48,9 @@ void ravi_emit_RETURN(ravi_function_def_t *def, int A, int B, int pc) {
// current block may already be terminated - so we have to insert
// a new block
if (def->current_block_terminated) {
def->current_block = gcc_jit_function_new_block(
gcc_jit_block *block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "OP_RETURN", pc));
def->current_block_terminated = false;
ravi_set_current_block(def, block);
}
// ravi_debug_printf2(def, "OP_RETURN(pc=%d) return %d args\n", ravi_int_constant(def, pc+1), ravi_int_constant(def, B-1));
@ -90,7 +90,7 @@ void ravi_emit_RETURN(ravi_function_def_t *def, int A, int B, int pc) {
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->base)));
gcc_jit_block_end_with_jump(def->current_block, NULL, else_block);
ravi_emit_branch(def, else_block);
ravi_set_current_block(def, else_block);
gcc_jit_block_add_eval(

Loading…
Cancel
Save