code reformat

pull/81/head
Dibyendu Majumdar 9 years ago
parent 3b632ae4cc
commit 77aaebff38

@ -59,8 +59,6 @@ extern "C" {
#include "ltable.h"
#include "lvm.h"
typedef enum {
LUA__TNIL = LUA_TNIL,
LUA__TBOOLEAN = LUA_TBOOLEAN,
@ -80,7 +78,6 @@ typedef enum {
LUA__TNUMINT = LUA_TNUMINT
} lua_typecode_t;
typedef struct ravi_gcc_context_t ravi_gcc_context_t;
typedef struct ravi_gcc_types_t ravi_gcc_types_t;
typedef struct ravi_gcc_codegen_t ravi_gcc_codegen_t;
@ -115,16 +112,16 @@ struct ravi_gcc_types_t {
gcc_jit_type *lua_UnsignedT;
gcc_jit_type *lua_KContextT;
//gcc_jit_function *lua_CFunctionT;
// gcc_jit_function *lua_CFunctionT;
gcc_jit_type *plua_CFunctionT;
//gcc_jit_function *lua_KFunctionT;
// gcc_jit_function *lua_KFunctionT;
gcc_jit_type *plua_KFunctionT;
//gcc_jit_function *lua_HookT;
// gcc_jit_function *lua_HookT;
gcc_jit_type *plua_HookT;
//gcc_jit_function *lua_AllocT;
// gcc_jit_function *lua_AllocT;
gcc_jit_type *plua_AllocT;
gcc_jit_type *l_memT;
@ -294,7 +291,6 @@ struct ravi_gcc_types_t {
gcc_jit_function *raviH_set_floatT;
gcc_jit_function *printfT;
};
struct ravi_gcc_context_t {
@ -328,7 +324,6 @@ struct ravi_gcc_context_t {
int min_exec_count_;
};
struct ravi_gcc_codegen_t {
ravi_gcc_context_t *ravi;
@ -336,10 +331,9 @@ struct ravi_gcc_codegen_t {
char temp[31];
int id;
};
//struct ravi_gcc_function_t {
// struct ravi_gcc_function_t {
//
// gcc_jit_result *jit_result;
//
@ -360,7 +354,6 @@ typedef struct ravi_branch_def_t {
} ravi_branch_def_t;
typedef struct ravi_function_def_t {
ravi_gcc_context_t *ravi;
@ -395,7 +388,8 @@ typedef struct ravi_function_def_t {
bool current_block_terminated;
/* The Lua stack base - this can change during execution so needs to be lvalue */
/* The Lua stack base - this can change during execution so needs to be lvalue
*/
gcc_jit_rvalue *base_ref;
gcc_jit_lvalue *base;
@ -426,7 +420,8 @@ extern void ravi_jit_context_free(ravi_gcc_context_t *);
/* Setup Lua types */
extern bool ravi_setup_lua_types(ravi_gcc_context_t *);
extern ravi_gcc_codegen_t *ravi_jit_new_codegen(ravi_gcc_context_t *global_context);
extern ravi_gcc_codegen_t *
ravi_jit_new_codegen(ravi_gcc_context_t *global_context);
extern void ravi_jit_codegen_free(ravi_gcc_codegen_t *);
@ -434,11 +429,12 @@ extern bool ravi_jit_has_errored(ravi_gcc_context_t *);
extern void ravi_emit_load_base(ravi_function_def_t *def);
extern gcc_jit_rvalue *ravi_emit_get_register(ravi_function_def_t* def, int A);
extern gcc_jit_rvalue *ravi_emit_get_register(ravi_function_def_t *def, int A);
extern gcc_jit_rvalue *ravi_emit_get_constant(ravi_function_def_t* def, int Bx);
extern gcc_jit_rvalue *ravi_emit_get_constant(ravi_function_def_t *def, int Bx);
extern gcc_jit_rvalue *ravi_emit_get_register_or_constant(ravi_function_def_t* def, int B);
extern gcc_jit_rvalue *
ravi_emit_get_register_or_constant(ravi_function_def_t *def, int B);
extern void ravi_emit_set_L_top_toreg(ravi_function_def_t *def, int B);
@ -446,37 +442,38 @@ extern void ravi_emit_refresh_L_top(ravi_function_def_t *def);
extern gcc_jit_lvalue *ravi_emit_get_Proto_sizep(ravi_function_def_t *def);
extern gcc_jit_rvalue* ravi_emit_get_upvals(ravi_function_def_t *def,
extern gcc_jit_rvalue *ravi_emit_get_upvals(ravi_function_def_t *def,
int offset);
// Get upval->v
extern gcc_jit_lvalue *ravi_emit_get_upval_v(ravi_function_def_t *def,
gcc_jit_rvalue *pupval);
gcc_jit_rvalue *pupval);
// Get upval->u.value
extern gcc_jit_lvalue *
ravi_emit_get_upval_value(ravi_function_def_t *def,
gcc_jit_rvalue *pupval);
extern void ravi_set_current_block(ravi_function_def_t *def, gcc_jit_block *block);
extern gcc_jit_rvalue *ravi_function_call1_rvalue(ravi_function_def_t *def, gcc_jit_function *f, gcc_jit_rvalue *arg1);
extern gcc_jit_lvalue *ravi_emit_get_upval_value(ravi_function_def_t *def,
gcc_jit_rvalue *pupval);
extern gcc_jit_rvalue *ravi_function_call2_rvalue(ravi_function_def_t *def, gcc_jit_function *f, gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2);
extern void ravi_set_current_block(ravi_function_def_t *def,
gcc_jit_block *block);
extern gcc_jit_rvalue *ravi_function_call5_rvalue(ravi_function_def_t *def,
extern gcc_jit_rvalue *ravi_function_call1_rvalue(ravi_function_def_t *def,
gcc_jit_function *f,
gcc_jit_rvalue *arg1,
gcc_jit_rvalue *arg2,
gcc_jit_rvalue *arg3,
gcc_jit_rvalue *arg4,
gcc_jit_rvalue *arg5);
gcc_jit_rvalue *arg1);
extern gcc_jit_rvalue *ravi_function_call4_rvalue(ravi_function_def_t *def,
extern gcc_jit_rvalue *ravi_function_call2_rvalue(ravi_function_def_t *def,
gcc_jit_function *f,
gcc_jit_rvalue *arg1,
gcc_jit_rvalue *arg2,
gcc_jit_rvalue *arg3,
gcc_jit_rvalue *arg4);
gcc_jit_rvalue *arg2);
extern gcc_jit_rvalue *
ravi_function_call5_rvalue(ravi_function_def_t *def, gcc_jit_function *f,
gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2,
gcc_jit_rvalue *arg3, gcc_jit_rvalue *arg4,
gcc_jit_rvalue *arg5);
extern gcc_jit_rvalue *
ravi_function_call4_rvalue(ravi_function_def_t *def, gcc_jit_function *f,
gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2,
gcc_jit_rvalue *arg3, gcc_jit_rvalue *arg4);
extern gcc_jit_rvalue *ravi_function_call3_rvalue(ravi_function_def_t *def,
gcc_jit_function *f,
@ -484,35 +481,46 @@ extern gcc_jit_rvalue *ravi_function_call3_rvalue(ravi_function_def_t *def,
gcc_jit_rvalue *arg2,
gcc_jit_rvalue *arg3);
extern const char *unique_name(ravi_function_def_t *def, const char *prefix, int pc);
extern const char *unique_name(ravi_function_def_t *def, const char *prefix,
int pc);
extern void ravi_emit_struct_assign(ravi_function_def_t *def, gcc_jit_rvalue* dest, gcc_jit_rvalue *src);
extern void ravi_emit_struct_assign(ravi_function_def_t *def,
gcc_jit_rvalue *dest, gcc_jit_rvalue *src);
/* Store an integer value and set type to TNUMINT */
extern gcc_jit_lvalue *ravi_emit_load_reg_i(ravi_function_def_t *def, gcc_jit_rvalue *value);
extern gcc_jit_lvalue *ravi_emit_load_reg_i(ravi_function_def_t *def,
gcc_jit_rvalue *value);
/* Store a number value and set type to TNUMFLT */
extern gcc_jit_lvalue *ravi_emit_load_reg_n(ravi_function_def_t *def, gcc_jit_rvalue *tv);
extern gcc_jit_lvalue *ravi_emit_load_reg_n(ravi_function_def_t *def,
gcc_jit_rvalue *tv);
/* Get TValue->value_.b */
extern gcc_jit_lvalue *ravi_emit_load_reg_b(ravi_function_def_t *def,
gcc_jit_rvalue *tv);
gcc_jit_rvalue *tv);
extern gcc_jit_lvalue *ravi_emit_load_type(ravi_function_def_t *def, gcc_jit_rvalue *tv);
extern gcc_jit_lvalue *ravi_emit_load_type(ravi_function_def_t *def,
gcc_jit_rvalue *tv);
extern gcc_jit_rvalue *ravi_emit_is_value_of_type(ravi_function_def_t *def,
gcc_jit_rvalue *value_type,
int lua_type);
extern gcc_jit_rvalue *ravi_emit_is_not_value_of_type(ravi_function_def_t *def,
gcc_jit_rvalue *value_type,
int lua_type);
extern gcc_jit_rvalue *
ravi_emit_is_not_value_of_type(ravi_function_def_t *def,
gcc_jit_rvalue *value_type, int lua_type);
extern void ravi_emit_store_reg_i_withtype(ravi_function_def_t *def, gcc_jit_rvalue *ivalue, gcc_jit_rvalue *reg);
extern void ravi_emit_store_reg_i_withtype(ravi_function_def_t *def,
gcc_jit_rvalue *ivalue,
gcc_jit_rvalue *reg);
extern void ravi_emit_store_reg_n_withtype(ravi_function_def_t *def, gcc_jit_rvalue *nvalue, gcc_jit_rvalue *reg);
extern void ravi_emit_store_reg_n_withtype(ravi_function_def_t *def,
gcc_jit_rvalue *nvalue,
gcc_jit_rvalue *reg);
extern void ravi_emit_store_reg_b_withtype(ravi_function_def_t *def, gcc_jit_rvalue *bvalue, gcc_jit_rvalue *reg);
extern void ravi_emit_store_reg_b_withtype(ravi_function_def_t *def,
gcc_jit_rvalue *bvalue,
gcc_jit_rvalue *reg);
extern gcc_jit_rvalue *ravi_emit_load_reg_h(ravi_function_def_t *def,
gcc_jit_rvalue *tv);
@ -529,32 +537,43 @@ extern gcc_jit_lvalue *ravi_emit_load_ravi_arraylength(ravi_function_def_t *def,
extern gcc_jit_lvalue *ravi_emit_load_ravi_arraytype(ravi_function_def_t *def,
gcc_jit_rvalue *h);
extern gcc_jit_rvalue *ravi_emit_array_get(ravi_function_def_t *def, gcc_jit_rvalue *ptr, gcc_jit_rvalue *index);
extern gcc_jit_rvalue *ravi_emit_array_get(ravi_function_def_t *def,
gcc_jit_rvalue *ptr,
gcc_jit_rvalue *index);
extern gcc_jit_rvalue *ravi_emit_array_get_ptr(ravi_function_def_t *def, gcc_jit_rvalue *ptr, gcc_jit_rvalue *index);
extern gcc_jit_rvalue *ravi_emit_array_get_ptr(ravi_function_def_t *def,
gcc_jit_rvalue *ptr,
gcc_jit_rvalue *index);
extern gcc_jit_rvalue *ravi_emit_comparison(ravi_function_def_t *def, enum gcc_jit_comparison op, gcc_jit_rvalue *a,
extern gcc_jit_rvalue *ravi_emit_comparison(ravi_function_def_t *def,
enum gcc_jit_comparison op,
gcc_jit_rvalue *a,
gcc_jit_rvalue *b);
extern void ravi_emit_conditional_branch(ravi_function_def_t *def, gcc_jit_rvalue *cond, gcc_jit_block *true_block,
gcc_jit_block *false_block);
extern void ravi_emit_conditional_branch(ravi_function_def_t *def,
gcc_jit_rvalue *cond,
gcc_jit_block *true_block,
gcc_jit_block *false_block);
extern void ravi_emit_branch(ravi_function_def_t *def, gcc_jit_block *target_block);
extern void ravi_emit_branch(ravi_function_def_t *def,
gcc_jit_block *target_block);
extern gcc_jit_rvalue *ravi_emit_boolean_testfalse(ravi_function_def_t *def,
gcc_jit_rvalue *reg,
bool negate);
extern void ravi_emit_raise_lua_error(ravi_function_def_t *def, const char *msg);
extern void ravi_emit_raise_lua_error(ravi_function_def_t *def,
const char *msg);
extern void ravi_emit_RETURN(ravi_function_def_t *def, int A, int B, int pc);
extern void ravi_emit_LOADK(ravi_function_def_t *def, int A, int Bx, int pc);
extern void ravi_emit_iFORPREP(ravi_function_def_t *def, int A, int pc,
int step_one);
int step_one);
extern void ravi_emit_iFORLOOP(ravi_function_def_t *def, int A, int pc, ravi_branch_def_t *b, int step_one);
extern void ravi_emit_iFORLOOP(ravi_function_def_t *def, int A, int pc,
ravi_branch_def_t *b, int step_one);
extern void ravi_emit_MOVE(ravi_function_def_t *def, int A, int B);
@ -571,23 +590,28 @@ extern void ravi_emit_LOADIZ(ravi_function_def_t *def, int A, int pc);
extern void ravi_emit_LOADBOOL(ravi_function_def_t *def, int A, int B, int C,
int j, int pc);
extern void ravi_emit_ADDFN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_ADDFN(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_ADDIN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_ADDIN(ravi_function_def_t *def, int A, int B, int C,
int pc);
// implements EQ, LE and LT - by using the supplied lua function to call.
extern void ravi_emit_EQ_LE_LT(ravi_function_def_t *def, int A, int B, int C, int j,
int jA, gcc_jit_function *callee, const char *opname, int pc);
extern void ravi_emit_EQ_LE_LT(ravi_function_def_t *def, int A, int B, int C,
int j, int jA, gcc_jit_function *callee,
const char *opname, int pc);
extern void ravi_emit_JMP(ravi_function_def_t *def, int A, int j, int pc);
// Handle OP_CALL
extern void ravi_emit_CALL(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_CALL(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_GETTABUP(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_GETTABUP(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_TEST(ravi_function_def_t *def, int A, int B, int C,
int j, int jA, int pc);
extern void ravi_emit_TEST(ravi_function_def_t *def, int A, int B, int C, int j,
int jA, int pc);
extern void ravi_emit_TESTSET(ravi_function_def_t *def, int A, int B, int C,
int j, int jA, int pc);
@ -598,7 +622,8 @@ extern void ravi_emit_TOFLT(ravi_function_def_t *def, int A, int pc);
extern void ravi_emit_TOINT(ravi_function_def_t *def, int A, int pc);
extern void ravi_emit_CONCAT(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_CONCAT(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_CLOSURE(ravi_function_def_t *def, int A, int Bx, int pc);
@ -608,74 +633,101 @@ extern void ravi_emit_UNMF(ravi_function_def_t *def, int A, int B, int pc);
extern void ravi_emit_UNMI(ravi_function_def_t *def, int A, int B, int pc);
extern void ravi_emit_ADDFF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_ADDFF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_ADDFI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_ADDFI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_ADDII(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_ADDII(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBFF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBFF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBFI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBFI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBIF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBIF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBII(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBII(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBFN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBFN(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBNF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBNF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBIN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBIN(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SUBNI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SUBNI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_DIVFF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_DIVFF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_DIVFI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_DIVFI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_DIVIF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_DIVIF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_DIVII(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_DIVII(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_MULFN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_MULFN(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_MULFF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_MULFF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_MULFI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_MULFI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_MULII(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_MULII(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_MULIN(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_MULIN(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SELF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SELF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_LEN(ravi_function_def_t *def, int A, int B, int pc);
extern void ravi_emit_SETTABLE(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SETTABLE(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_GETTABLE(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_GETTABLE(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_NEWTABLE(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_NEWTABLE(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_SETLIST(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_SETLIST(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_TFORCALL(ravi_function_def_t *def, int A, int B, int C,
int j, int jA, int pc);
int j, int jA, int pc);
extern void ravi_emit_TFORLOOP(ravi_function_def_t *def, int A, int j, int pc);
extern void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C, int pc);
extern void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C,
int pc);
extern void ravi_emit_NEWARRAYFLOAT(ravi_function_def_t *def, int A, int pc);
extern void ravi_emit_NEWARRAYINT(ravi_function_def_t *def, int A, int pc);
extern void ravi_emit_TOARRAY(ravi_function_def_t *def, int A,
int array_type_expected,
const char *errmsg, int pc);
int array_type_expected, const char *errmsg,
int pc);
extern void ravi_emit_MOVEAI(ravi_function_def_t *def, int A, int B, int pc);
@ -687,9 +739,11 @@ extern void ravi_dump_lvalue(gcc_jit_lvalue *lv);
extern void ravi_debug_printf(ravi_function_def_t *def, const char *str);
extern void ravi_debug_printf2(ravi_function_def_t *def, const char *str, gcc_jit_rvalue *arg1);
extern void ravi_debug_printf2(ravi_function_def_t *def, const char *str,
gcc_jit_rvalue *arg1);
extern void ravi_debug_printf3(ravi_function_def_t *def, const char *str, gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2);
extern void ravi_debug_printf3(ravi_function_def_t *def, const char *str,
gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2);
#ifdef __cplusplus
};

@ -56,7 +56,7 @@ void ravi_emit_UNMI(ravi_function_def_t *def, int A, int B, int pc) {
// R(A) := RK(B) + C, result is floating
void ravi_emit_ADDFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -76,7 +76,7 @@ void ravi_emit_ADDFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
// R(A) := RK(B) * C, float*c
void ravi_emit_MULFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -85,10 +85,10 @@ void ravi_emit_MULFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *lhs = ravi_emit_load_reg_n(def, rb);
// result = rb->value_.n * (double)C
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, C));
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, C));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -96,7 +96,7 @@ void ravi_emit_MULFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
// R(A) := RK(B) - C
void ravi_emit_SUBFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -105,10 +105,10 @@ void ravi_emit_SUBFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *lhs = ravi_emit_load_reg_n(def, rb);
// result = rb->value_.n - (double)C
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, C));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, C));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -116,7 +116,7 @@ void ravi_emit_SUBFN(ravi_function_def_t *def, int A, int B, int C, int pc) {
// R(A) := B - RK(C)
void ravi_emit_SUBNF(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -125,11 +125,11 @@ void ravi_emit_SUBNF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = (double)C - rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, B),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_NumberT, B),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -137,7 +137,7 @@ void ravi_emit_SUBNF(ravi_function_def_t *def, int A, int B, int C, int pc) {
// R(A) := RK(B) - C
void ravi_emit_SUBIN(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -146,10 +146,10 @@ void ravi_emit_SUBIN(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *lhs = ravi_emit_load_reg_i(def, rb);
// result = rb->value_.i - (lua_Integer)C
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -157,7 +157,7 @@ void ravi_emit_SUBIN(ravi_function_def_t *def, int A, int B, int C, int pc) {
// R(A) := B - RK(C)
void ravi_emit_SUBNI(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
// Load pointer to base
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
@ -166,11 +166,11 @@ void ravi_emit_SUBNI(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = (lua_Integer)B - rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, B),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, B),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -212,15 +212,14 @@ void ravi_emit_MULFF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = rb->value_.n * rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
}
// R(A) := RK(B) - RK(C), float-float
void ravi_emit_SUBFF(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void)pc;
@ -235,9 +234,9 @@ void ravi_emit_SUBFF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = rb->value_.n - rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -257,15 +256,14 @@ void ravi_emit_DIVFF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = rb->value_.n / rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
}
// R(A) := RK(B) + RK(C), float+int
void ravi_emit_ADDFI(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void)pc;
@ -304,17 +302,16 @@ void ravi_emit_MULFI(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = rb->value_.n * (lua_number)rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
}
// R(A) := RK(B) - RK(C), float-int
void ravi_emit_SUBFI(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void)pc;
@ -329,11 +326,11 @@ void ravi_emit_SUBFI(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = rb->value_.n - (lua_number)rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -353,17 +350,16 @@ void ravi_emit_DIVFI(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = rb->value_.n / (lua_number)rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
}
// R(A) := RK(B) - RK(C), int-float
void ravi_emit_SUBIF(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void)pc;
@ -378,12 +374,12 @@ void ravi_emit_SUBIF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = (lua_Number) rb->value_.i - rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(lhs),
def->ravi->types->lua_NumberT),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(lhs),
def->ravi->types->lua_NumberT),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -403,12 +399,12 @@ void ravi_emit_DIVIF(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_n(def, rc);
// result = (lua_Number) rb->value_.i / rc->value_.n
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(lhs),
def->ravi->types->lua_NumberT),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_NumberT,
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(lhs),
def->ravi->types->lua_NumberT),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.n = result
// ra->tt_ = LUA_TNUMFLT
ravi_emit_store_reg_n_withtype(def, result, ra);
@ -450,9 +446,9 @@ void ravi_emit_MULII(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = rb->value_.i * rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -472,9 +468,9 @@ void ravi_emit_SUBII(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = rb->value_.i - rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
def->function_context, NULL, GCC_JIT_BINARY_OP_MINUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_lvalue_as_rvalue(rhs));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -494,10 +490,14 @@ void ravi_emit_DIVII(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *rhs = ravi_emit_load_reg_i(def, rc);
// result = (lua_Number)rb->value_.i / (lua_Number)rc->value_.i
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_IntegerT,
gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(lhs), def->ravi->types->lua_NumberT),
gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(rhs), def->ravi->types->lua_NumberT));
def->function_context, NULL, GCC_JIT_BINARY_OP_DIVIDE,
def->ravi->types->lua_IntegerT,
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(lhs),
def->ravi->types->lua_NumberT),
gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(rhs),
def->ravi->types->lua_NumberT));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -514,10 +514,10 @@ void ravi_emit_ADDIN(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *lhs = ravi_emit_load_reg_i(def, rb);
// result = rb->value_.i + (lua_Integer)C
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_PLUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
def->function_context, NULL, GCC_JIT_BINARY_OP_PLUS,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);
@ -534,10 +534,10 @@ void ravi_emit_MULIN(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_lvalue *lhs = ravi_emit_load_reg_i(def, rb);
// result = rb->value_.i * (lua_Integer)C
gcc_jit_rvalue *result = gcc_jit_context_new_binary_op(
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
def->function_context, NULL, GCC_JIT_BINARY_OP_MULT,
def->ravi->types->lua_IntegerT, gcc_jit_lvalue_as_rvalue(lhs),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lua_IntegerT, C));
// ra->value_.i = result
// ra->tt_ = LUA_TNUMINT
ravi_emit_store_reg_i_withtype(def, result, ra);

@ -288,10 +288,12 @@ static void scan_jump_targets(ravi_function_def_t *def, Proto *p) {
}
void ravi_emit_raise_lua_error(ravi_function_def_t *def, const char *str) {
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call2_rvalue(
def, def->ravi->types->luaG_runerrorT, gcc_jit_param_as_rvalue(def->L),
gcc_jit_context_new_string_literal(def->function_context, str)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call2_rvalue(
def, def->ravi->types->luaG_runerrorT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_context_new_string_literal(def->function_context, str)));
}
void ravi_emit_struct_assign(ravi_function_def_t *def, gcc_jit_rvalue *dest,
@ -380,21 +382,24 @@ void ravi_emit_refresh_L_top(ravi_function_def_t *def) {
gcc_jit_lvalue_as_rvalue(citop));
}
gcc_jit_rvalue *ravi_emit_array_get(ravi_function_def_t *def, gcc_jit_rvalue *ptr, gcc_jit_rvalue *index) {
gcc_jit_rvalue *ravi_emit_array_get(ravi_function_def_t *def,
gcc_jit_rvalue *ptr,
gcc_jit_rvalue *index) {
/* Note we assume that base is correct */
gcc_jit_lvalue *el = gcc_jit_context_new_array_access(
def->function_context, NULL, ptr, index);
gcc_jit_lvalue *el =
gcc_jit_context_new_array_access(def->function_context, NULL, ptr, index);
return gcc_jit_lvalue_as_rvalue(el);
}
gcc_jit_rvalue *ravi_emit_array_get_ptr(ravi_function_def_t *def, gcc_jit_rvalue *ptr, gcc_jit_rvalue *index) {
gcc_jit_rvalue *ravi_emit_array_get_ptr(ravi_function_def_t *def,
gcc_jit_rvalue *ptr,
gcc_jit_rvalue *index) {
/* Note we assume that base is correct */
gcc_jit_lvalue *el = gcc_jit_context_new_array_access(
def->function_context, NULL, ptr, index);
gcc_jit_lvalue *el =
gcc_jit_context_new_array_access(def->function_context, NULL, ptr, index);
return gcc_jit_lvalue_get_address(el, NULL);
}
/* Get access to the register identified by A - registers as just &base[offset]
*/
gcc_jit_rvalue *ravi_emit_get_register(ravi_function_def_t *def, int A) {
@ -479,64 +484,68 @@ gcc_jit_lvalue *ravi_emit_load_reg_n(ravi_function_def_t *def,
/* Get (Table *) TValue->value_.gc */
gcc_jit_rvalue *ravi_emit_load_reg_h(ravi_function_def_t *def,
gcc_jit_rvalue *tv) {
gcc_jit_rvalue *tv) {
gcc_jit_lvalue *value =
gcc_jit_rvalue_dereference_field(tv, NULL, def->ravi->types->Value_value);
gcc_jit_lvalue *gc =
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->Value_value_gc);
gcc_jit_rvalue *h = gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(gc), def->ravi->types->pTableT);
gcc_jit_rvalue_dereference_field(tv, NULL, def->ravi->types->Value_value);
gcc_jit_lvalue *gc = gcc_jit_lvalue_access_field(
value, NULL, def->ravi->types->Value_value_gc);
gcc_jit_rvalue *h = gcc_jit_context_new_cast(def->function_context, NULL,
gcc_jit_lvalue_as_rvalue(gc),
def->ravi->types->pTableT);
return h;
}
/* Get Table->ravi_array.data as lua_Number* */
gcc_jit_rvalue *ravi_emit_load_reg_h_floatarray(ravi_function_def_t *def,
gcc_jit_rvalue *h) {
gcc_jit_rvalue *h) {
gcc_jit_lvalue *value =
gcc_jit_rvalue_dereference_field(h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *data =
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->RaviArray_data);
gcc_jit_rvalue *floatarray = gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(data), def->ravi->types->plua_NumberT);
gcc_jit_lvalue *value = gcc_jit_rvalue_dereference_field(
h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *data = gcc_jit_lvalue_access_field(
value, NULL, def->ravi->types->RaviArray_data);
gcc_jit_rvalue *floatarray = gcc_jit_context_new_cast(
def->function_context, NULL, gcc_jit_lvalue_as_rvalue(data),
def->ravi->types->plua_NumberT);
return floatarray;
}
/* Get Table->ravi_array.data as lua_Integer* */
gcc_jit_rvalue *ravi_emit_load_reg_h_intarray(ravi_function_def_t *def,
gcc_jit_rvalue *h) {
gcc_jit_rvalue *h) {
gcc_jit_lvalue *value =
gcc_jit_rvalue_dereference_field(h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *data =
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->RaviArray_data);
gcc_jit_rvalue *intarray = gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(data), def->ravi->types->plua_IntegerT);
gcc_jit_lvalue *value = gcc_jit_rvalue_dereference_field(
h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *data = gcc_jit_lvalue_access_field(
value, NULL, def->ravi->types->RaviArray_data);
gcc_jit_rvalue *intarray = gcc_jit_context_new_cast(
def->function_context, NULL, gcc_jit_lvalue_as_rvalue(data),
def->ravi->types->plua_IntegerT);
return intarray;
}
/* Get Table->ravi_array.len */
gcc_jit_lvalue *ravi_emit_load_ravi_arraylength(ravi_function_def_t *def,
gcc_jit_rvalue *h) {
gcc_jit_rvalue *h) {
gcc_jit_lvalue *value =
gcc_jit_rvalue_dereference_field(h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *value = gcc_jit_rvalue_dereference_field(
h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *len =
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->RaviArray_len);
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->RaviArray_len);
return len;
}
/* Get Table->ravi_array.array_type */
gcc_jit_lvalue *ravi_emit_load_ravi_arraytype(ravi_function_def_t *def,
gcc_jit_rvalue *h) {
gcc_jit_rvalue *h) {
gcc_jit_lvalue *value =
gcc_jit_rvalue_dereference_field(h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *t =
gcc_jit_lvalue_access_field(value, NULL, def->ravi->types->RaviArray_array_type);
gcc_jit_lvalue *value = gcc_jit_rvalue_dereference_field(
h, NULL, def->ravi->types->Table_ravi_array);
gcc_jit_lvalue *t = gcc_jit_lvalue_access_field(
value, NULL, def->ravi->types->RaviArray_array_type);
return t;
}
gcc_jit_lvalue *ravi_emit_load_type(ravi_function_def_t *def,
gcc_jit_rvalue *tv) {
return gcc_jit_rvalue_dereference_field(tv, NULL, def->ravi->types->Value_tt);
@ -939,7 +948,7 @@ int raviV_compile(struct lua_State *L, struct Proto *p, int manual_request,
int sbx = GETARG_sBx(i);
// j below is the jump target
int j = sbx + pc + 1;
ravi_emit_TFORCALL(&def, A, B, C, j, GETARG_A(i), pc-1);
ravi_emit_TFORCALL(&def, A, B, C, j, GETARG_A(i), pc - 1);
} break;
case OP_TFORLOOP: {
int sbx = GETARG_sBx(i);
@ -1214,7 +1223,6 @@ int raviV_compile(struct lua_State *L, struct Proto *p, int manual_request,
ravi_emit_DIVII(&def, A, B, C, pc);
} break;
default:
break;
}
@ -1261,20 +1269,31 @@ on_error:
}
void ravi_debug_printf(ravi_function_def_t *def, const char *str) {
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call1_rvalue(def, def->ravi->types->printfT, gcc_jit_context_new_string_literal(def->function_context, str)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call1_rvalue(
def, def->ravi->types->printfT,
gcc_jit_context_new_string_literal(def->function_context, str)));
}
void ravi_debug_printf2(ravi_function_def_t *def, const char *str, gcc_jit_rvalue *arg1) {
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call2_rvalue(def, def->ravi->types->printfT, gcc_jit_context_new_string_literal(def->function_context, str),
arg1));
void ravi_debug_printf2(ravi_function_def_t *def, const char *str,
gcc_jit_rvalue *arg1) {
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call2_rvalue(
def, def->ravi->types->printfT,
gcc_jit_context_new_string_literal(def->function_context, str),
arg1));
}
void ravi_debug_printf3(ravi_function_def_t *def, const char *str, gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2) {
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->printfT, gcc_jit_context_new_string_literal(def->function_context, str),
arg1, arg2));
void ravi_debug_printf3(ravi_function_def_t *def, const char *str,
gcc_jit_rvalue *arg1, gcc_jit_rvalue *arg2) {
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call3_rvalue(
def, def->ravi->types->printfT,
gcc_jit_context_new_string_literal(def->function_context, str), arg1,
arg2));
}
// Free the JIT compiled function

@ -220,7 +220,10 @@ void ravi_emit_NOT(ravi_function_def_t *def, int A, int B, int pc) {
gcc_jit_rvalue *rb = ravi_emit_get_register(def, B);
gcc_jit_rvalue *v = ravi_emit_boolean_testfalse(def, rb, false);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
ravi_emit_store_reg_b_withtype(def, gcc_jit_context_new_cast(def->function_context, NULL, v, def->ravi->types->C_intT), ra);
ravi_emit_store_reg_b_withtype(
def, gcc_jit_context_new_cast(def->function_context, NULL, v,
def->ravi->types->C_intT),
ra);
}
void ravi_emit_TESTSET(ravi_function_def_t *def, int A, int B, int C, int j,

@ -25,9 +25,11 @@
// R(A+1), ..., R(A+B) := nil
void ravi_emit_LOADNIL(ravi_function_def_t *def, int A, int B, int pc) {
(void) pc;
(void)pc;
gcc_jit_block_add_eval(def->current_block, NULL, ravi_function_call3_rvalue(
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call3_rvalue(
def, def->ravi->types->raviV_op_loadnilT,
gcc_jit_lvalue_as_rvalue(def->ci_val),
gcc_jit_context_new_rvalue_from_int(def->function_context,
@ -389,10 +391,10 @@ void ravi_emit_TOFLT(ravi_function_def_t *def, int A, int pc) {
// Call luaV_tonumber()
gcc_jit_rvalue *var_ptr = gcc_jit_lvalue_get_address(var, NULL);
//ravi_debug_printf3(def, "number %p = %f before call to luaV_number\n", var_ptr, gcc_jit_lvalue_as_rvalue(var));
gcc_jit_rvalue *var_isflt =
ravi_function_call2_rvalue(def, def->ravi->types->luaV_tonumberT, src,
var_ptr);
// ravi_debug_printf3(def, "number %p = %f before call to luaV_number\n",
// var_ptr, gcc_jit_lvalue_as_rvalue(var));
gcc_jit_rvalue *var_isflt = ravi_function_call2_rvalue(
def, def->ravi->types->luaV_tonumberT, src, var_ptr);
gcc_jit_rvalue *zero = gcc_jit_context_new_rvalue_from_int(
def->function_context, def->ravi->types->C_intT, 0);
gcc_jit_rvalue *failed_conversion =
@ -417,7 +419,7 @@ void ravi_emit_TOFLT(ravi_function_def_t *def, int A, int pc) {
// Conversion OK
ravi_set_current_block(def, else2);
//ravi_debug_printf2(def, "number ok = %f\n", gcc_jit_lvalue_as_rvalue(var));
// ravi_debug_printf2(def, "number ok = %f\n", gcc_jit_lvalue_as_rvalue(var));
ravi_emit_store_reg_n_withtype(def, gcc_jit_lvalue_as_rvalue(var), dest);
ravi_emit_branch(def, end1);

@ -25,35 +25,44 @@
void ravi_emit_CONCAT(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void)pc;
gcc_jit_block_add_eval(def->current_block, NULL, ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_concatT, gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_concatT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
}
void ravi_emit_CLOSURE(ravi_function_def_t *def, int A, int Bx, int pc) {
(void)pc;
gcc_jit_block_add_eval(def->current_block, NULL, ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_closureT, gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), def->lua_closure,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, Bx)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_closureT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), def->lua_closure,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, Bx)));
}
void ravi_emit_VARARG(ravi_function_def_t *def, int A, int B, int pc) {
(void)pc;
gcc_jit_block_add_eval(def->current_block, NULL, ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_varargT, gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), def->lua_closure,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_varargT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), def->lua_closure,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, A),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B)));
}

@ -54,9 +54,10 @@ void ravi_emit_SELF(ravi_function_def_t *def, int A, int B, int C, int pc) {
ravi_emit_struct_assign(def, ra1, rb);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_rvalue *rc = ravi_emit_get_register_or_constant(def, C);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_gettableT,
gcc_jit_param_as_rvalue(def->L), rb, rc, ra));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_gettableT,
gcc_jit_param_as_rvalue(def->L), rb, rc, ra));
}
// R(A) := length of R(B)
@ -66,9 +67,10 @@ void ravi_emit_LEN(ravi_function_def_t *def, int A, int B, int pc) {
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_rvalue *rb = ravi_emit_get_register(def, B);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->luaV_objlenT,
gcc_jit_param_as_rvalue(def->L), ra, rb));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->luaV_objlenT,
gcc_jit_param_as_rvalue(def->L), ra, rb));
}
// R(A)[RK(B)] := RK(C)
@ -79,9 +81,10 @@ void ravi_emit_SETTABLE(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_rvalue *rb = ravi_emit_get_register_or_constant(def, B);
gcc_jit_rvalue *rc = ravi_emit_get_register_or_constant(def, C);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_settableT,
gcc_jit_param_as_rvalue(def->L), ra, rb, rc));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_settableT,
gcc_jit_param_as_rvalue(def->L), ra, rb, rc));
}
// R(A) := R(B)[RK(C)]
@ -92,9 +95,10 @@ void ravi_emit_GETTABLE(ravi_function_def_t *def, int A, int B, int C, int pc) {
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_rvalue *rb = ravi_emit_get_register(def, B);
gcc_jit_rvalue *rc = ravi_emit_get_register_or_constant(def, C);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_gettableT,
gcc_jit_param_as_rvalue(def->L), rb, rc, ra));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaV_gettableT,
gcc_jit_param_as_rvalue(def->L), rb, rc, ra));
}
void ravi_emit_NEWTABLE(ravi_function_def_t *def, int A, int B, int C, int pc) {
@ -107,18 +111,20 @@ void ravi_emit_NEWTABLE(ravi_function_def_t *def, int A, int B, int C, int pc) {
// luaH_resize(L, t, luaO_fb2int(b), luaO_fb2int(c));
// checkGC(L, ra + 1);
// } break;
(void) pc;
(void)pc;
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call5_rvalue(def, def->ravi->types->raviV_op_newtableT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_newtableT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
}
void ravi_emit_NEWARRAYINT(ravi_function_def_t *def, int A, int pc) {
@ -126,39 +132,43 @@ void ravi_emit_NEWARRAYINT(ravi_function_def_t *def, int A, int pc) {
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->raviV_op_newarrayintT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->raviV_op_newarrayintT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra));
}
void ravi_emit_NEWARRAYFLOAT(ravi_function_def_t *def, int A, int pc) {
(void)pc;
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->raviV_op_newarrayfloatT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call3_rvalue(def, def->ravi->types->raviV_op_newarrayfloatT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra));
}
void ravi_emit_SETLIST(ravi_function_def_t *def, int A, int B, int C, int pc) {
(void) pc;
(void)pc;
ravi_emit_load_base(def);
gcc_jit_rvalue *ra = ravi_emit_get_register(def, A);
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call5_rvalue(def, def->ravi->types->raviV_op_setlistT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call5_rvalue(
def, def->ravi->types->raviV_op_setlistT,
gcc_jit_param_as_rvalue(def->L),
gcc_jit_lvalue_as_rvalue(def->ci_val), ra,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, B),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C)));
}
void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C, int pc) {
void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C,
int pc) {
//#define raviH_get_float_inline(L, t, key, v)
//{ unsigned ukey = (unsigned)((key));
// lua_Number *data = (lua_Number *)t->ravi_array.data;
@ -182,15 +192,18 @@ void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C, int pc
gcc_jit_rvalue *t = ravi_emit_load_reg_h(def, rb);
gcc_jit_rvalue *data = ravi_emit_load_reg_h_floatarray(def, t);
gcc_jit_lvalue *len = ravi_emit_load_ravi_arraylength(def, t);
gcc_jit_rvalue *ukey = gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(key), def->ravi->types->C_unsigned_intT);
gcc_jit_rvalue *cmp = ravi_emit_comparison(def, GCC_JIT_COMPARISON_LT, ukey, gcc_jit_lvalue_as_rvalue(len));
gcc_jit_block *then_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AF_if_in_range", pc));
gcc_jit_block *else_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AF_if_not_in_range", pc));
gcc_jit_block *end_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AF_if_end", pc));
gcc_jit_rvalue *ukey = gcc_jit_context_new_cast(
def->function_context, NULL, gcc_jit_lvalue_as_rvalue(key),
def->ravi->types->C_unsigned_intT);
gcc_jit_rvalue *cmp = ravi_emit_comparison(def, GCC_JIT_COMPARISON_LT, ukey,
gcc_jit_lvalue_as_rvalue(len));
gcc_jit_block *then_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AF_if_in_range", pc));
gcc_jit_block *else_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AF_if_not_in_range", pc));
gcc_jit_block *end_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AF_if_end", pc));
ravi_emit_conditional_branch(def, cmp, then_block, else_block);
ravi_set_current_block(def, then_block);
@ -207,7 +220,8 @@ void ravi_emit_GETTABLE_AF(ravi_function_def_t *def, int A, int B, int C, int pc
ravi_set_current_block(def, end_block);
}
void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C, int pc) {
void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C,
int pc) {
//#define raviH_get_int_inline(L, t, key, v)
//{ unsigned ukey = (unsigned)((key));
// lua_Integer *data = (lua_Integer *)t->ravi_array.data;
@ -231,15 +245,18 @@ void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C, int pc
gcc_jit_rvalue *t = ravi_emit_load_reg_h(def, rb);
gcc_jit_rvalue *data = ravi_emit_load_reg_h_intarray(def, t);
gcc_jit_lvalue *len = ravi_emit_load_ravi_arraylength(def, t);
gcc_jit_rvalue *ukey = gcc_jit_context_new_cast(def->function_context, NULL, gcc_jit_lvalue_as_rvalue(key), def->ravi->types->C_unsigned_intT);
gcc_jit_rvalue *cmp = ravi_emit_comparison(def, GCC_JIT_COMPARISON_LT, ukey, gcc_jit_lvalue_as_rvalue(len));
gcc_jit_block *then_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AI_if_in_range", pc));
gcc_jit_block *else_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AI_if_not_in_range", pc));
gcc_jit_block *end_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "GETTABLE_AI_if_end", pc));
gcc_jit_rvalue *ukey = gcc_jit_context_new_cast(
def->function_context, NULL, gcc_jit_lvalue_as_rvalue(key),
def->ravi->types->C_unsigned_intT);
gcc_jit_rvalue *cmp = ravi_emit_comparison(def, GCC_JIT_COMPARISON_LT, ukey,
gcc_jit_lvalue_as_rvalue(len));
gcc_jit_block *then_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AI_if_in_range", pc));
gcc_jit_block *else_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AI_if_not_in_range", pc));
gcc_jit_block *end_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "GETTABLE_AI_if_end", pc));
ravi_emit_conditional_branch(def, cmp, then_block, else_block);
ravi_set_current_block(def, then_block);
@ -256,9 +273,8 @@ void ravi_emit_GETTABLE_AI(ravi_function_def_t *def, int A, int B, int C, int pc
ravi_set_current_block(def, end_block);
}
void ravi_emit_TOARRAY(ravi_function_def_t *def, int A,
int array_type_expected,
const char *errmsg, int pc) {
void ravi_emit_TOARRAY(ravi_function_def_t *def, int A, int array_type_expected,
const char *errmsg, int pc) {
// if (!ttistable(ra) || hvalue(ra)->ravi_array.type != RAVI_TARRAYINT)
// luaG_runerror(L, "integer[] expected");
@ -268,15 +284,15 @@ void ravi_emit_TOARRAY(ravi_function_def_t *def, int A,
gcc_jit_lvalue *type = ravi_emit_load_type(def, ra);
// type != LUA_TTABLE ?
gcc_jit_rvalue *cmp1 =
ravi_emit_is_not_value_of_type(def, gcc_jit_lvalue_as_rvalue(type), LUA__TTABLE);
gcc_jit_rvalue *cmp1 = ravi_emit_is_not_value_of_type(
def, gcc_jit_lvalue_as_rvalue(type), LUA__TTABLE);
gcc_jit_block *raise_error = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "TOARRAY_if_not_table", pc));
gcc_jit_block *else1 =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "TOARRAY_test_if_array", pc));
gcc_jit_block *done =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "TOARRAY_done", pc));
def->jit_function, unique_name(def, "TOARRAY_if_not_table", pc));
gcc_jit_block *else1 = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "TOARRAY_test_if_array", pc));
gcc_jit_block *done = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "TOARRAY_done", pc));
ravi_emit_conditional_branch(def, cmp1, raise_error, else1);
ravi_set_current_block(def, raise_error);
@ -289,13 +305,14 @@ void ravi_emit_TOARRAY(ravi_function_def_t *def, int A,
// Get table
gcc_jit_rvalue *h = ravi_emit_load_reg_h(def, ra);
// Get array type
gcc_jit_rvalue *ravi_array_type = gcc_jit_lvalue_as_rvalue(ravi_emit_load_ravi_arraytype(def, h));
gcc_jit_rvalue *ravi_array_type =
gcc_jit_lvalue_as_rvalue(ravi_emit_load_ravi_arraytype(def, h));
// array_type == RAVI_TARRAYXXX?
gcc_jit_rvalue *expected = gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->lu_byteT, array_type_expected);
gcc_jit_rvalue *cmp2 = ravi_emit_comparison(
def, GCC_JIT_COMPARISON_EQ, ravi_array_type, expected);
gcc_jit_rvalue *expected = gcc_jit_context_new_rvalue_from_int(
def->function_context, def->ravi->types->lu_byteT, array_type_expected);
gcc_jit_rvalue *cmp2 = ravi_emit_comparison(def, GCC_JIT_COMPARISON_EQ,
ravi_array_type, expected);
// If array then fine else raise error
ravi_emit_conditional_branch(def, cmp2, done, raise_error);

@ -23,8 +23,8 @@
#include <ravi_gccjit.h>
void ravi_emit_TFORCALL(ravi_function_def_t *def, int A, int B, int C,
int j, int jA, int pc) {
void ravi_emit_TFORCALL(ravi_function_def_t *def, int A, int B, int C, int j,
int jA, int pc) {
// case OP_TFORCALL: {
// StkId cb = ra + 3; /* call base */
@ -67,13 +67,14 @@ void ravi_emit_TFORCALL(ravi_function_def_t *def, int A, int B, int C,
ravi_emit_set_L_top_toreg(def, A + 6);
// Protect(luaD_call(L, cb, GETARG_C(i), 1));
gcc_jit_block_add_eval(def->current_block, NULL,
ravi_function_call4_rvalue(def, def->ravi->types->luaD_callT,
gcc_jit_param_as_rvalue(def->L), cb,
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, 1)));
gcc_jit_block_add_eval(
def->current_block, NULL,
ravi_function_call4_rvalue(
def, def->ravi->types->luaD_callT, gcc_jit_param_as_rvalue(def->L),
cb, gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, C),
gcc_jit_context_new_rvalue_from_int(def->function_context,
def->ravi->types->C_intT, 1)));
// reload base
ravi_emit_load_base(def);
// L->top = ci->top;
@ -83,12 +84,12 @@ void ravi_emit_TFORCALL(ravi_function_def_t *def, int A, int B, int C,
gcc_jit_lvalue *type = ravi_emit_load_type(def, ra1);
// Test if type != LUA_TNIL (0)
gcc_jit_rvalue *isnotnil =
ravi_emit_is_not_value_of_type(def, gcc_jit_lvalue_as_rvalue(type), LUA__TNIL);
gcc_jit_block *then_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "OP_TFORCALL_if_not_nil", pc));
gcc_jit_block *else_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "OP_TFORCALL_if_nil", pc));
gcc_jit_rvalue *isnotnil = ravi_emit_is_not_value_of_type(
def, gcc_jit_lvalue_as_rvalue(type), LUA__TNIL);
gcc_jit_block *then_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "OP_TFORCALL_if_not_nil", pc));
gcc_jit_block *else_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "OP_TFORCALL_if_nil", pc));
ravi_emit_conditional_branch(def, isnotnil, then_block, else_block);
ravi_set_current_block(def, then_block);
@ -120,12 +121,12 @@ void ravi_emit_TFORLOOP(ravi_function_def_t *def, int A, int j, int pc) {
gcc_jit_lvalue *type = ravi_emit_load_type(def, ra1);
// Test if type != LUA_TNIL (0)
gcc_jit_rvalue *isnotnil =
ravi_emit_is_not_value_of_type(def, gcc_jit_lvalue_as_rvalue(type), LUA__TNIL);
gcc_jit_block *then_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "OP_TFORLOOP_if_not_nil", pc));
gcc_jit_block *else_block =
gcc_jit_function_new_block(def->jit_function, unique_name(def, "OP_TFORLOOP_if_nil", pc));
gcc_jit_rvalue *isnotnil = ravi_emit_is_not_value_of_type(
def, gcc_jit_lvalue_as_rvalue(type), LUA__TNIL);
gcc_jit_block *then_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "OP_TFORLOOP_if_not_nil", pc));
gcc_jit_block *else_block = gcc_jit_function_new_block(
def->jit_function, unique_name(def, "OP_TFORLOOP_if_nil", pc));
ravi_emit_conditional_branch(def, isnotnil, then_block, else_block);
ravi_set_current_block(def, then_block);

@ -71,10 +71,10 @@ bool ravi_setup_lua_types(ravi_gcc_context_t *ravi) {
t->lu_byteT =
gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_UNSIGNED_CHAR);
t->C_charT =
gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_CHAR);
t->C_charT = gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_CHAR);
t->C_pcharT = gcc_jit_type_get_pointer(t->C_charT);
t->C_pconstcharT = gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_CONST_CHAR_PTR);
t->C_pconstcharT =
gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_CONST_CHAR_PTR);
t->C_voidT = gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_VOID);
t->C_pvoidT = gcc_jit_context_get_type(ravi->context, GCC_JIT_TYPE_VOID_PTR);
@ -1107,11 +1107,11 @@ bool ravi_setup_lua_types(ravi_gcc_context_t *ravi) {
ravi->context, NULL, GCC_JIT_FUNCTION_IMPORTED, t->C_voidT,
"raviH_set_float", 4, params, 0);
params[0] = gcc_jit_context_new_param(ravi->context, NULL, t->C_pconstcharT, "format");
t->printfT = gcc_jit_context_new_function(
ravi->context, NULL, GCC_JIT_FUNCTION_IMPORTED, t->C_intT,
"printf", 1, params, 1);
params[0] = gcc_jit_context_new_param(ravi->context, NULL, t->C_pconstcharT,
"format");
t->printfT = gcc_jit_context_new_function(ravi->context, NULL,
GCC_JIT_FUNCTION_IMPORTED,
t->C_intT, "printf", 1, params, 1);
gcc_jit_context_dump_to_file(ravi->context, "dump.txt", 0);

Loading…
Cancel
Save