issue #128 refactor

gccjit-ravi534
Dibyendu Majumdar 7 years ago
parent 8d9c9310ad
commit 5fb89d4c07

@ -1,25 +1,25 @@
/******************************************************************************
* Copyright (C) 2015-2017 Dibyendu Majumdar
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************/
* Copyright (C) 2015-2017 Dibyendu Majumdar
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************/
#ifndef RAVI_JITSHARED_H
#define RAVI_JITSHARED_H
@ -36,13 +36,13 @@ extern "C" {
#include "lprefix.h"
#include <limits.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <stddef.h>
#include "lua.h"
#include "lauxlib.h"
#include "ldebug.h"
#include "ldo.h"
#include "lfunc.h"
@ -51,8 +51,8 @@ extern "C" {
#include "lstate.h"
#include "lstring.h"
#include "ltable.h"
#include "lua.h"
#include "lvm.h"
#include "lauxlib.h"
#include <ravi_membuf.h>
@ -74,27 +74,44 @@ extern "C" {
#define KC(i) \
check_exp(getCMode(GET_OPCODE(i)) == OpArgK, k + INDEXK(GETARG_C(i)))
enum errorcode {
Error_integer_expected,
Error_number_expected,
Error_integer_array_expected,
Error_number_array_expected,
Error_table_expected,
Error_upval_needs_integer,
Error_upval_needs_number,
Error_upval_needs_integer_array,
Error_upval_needs_number_array,
Error_upval_needs_table,
Error_for_limit_must_be_number,
Error_for_step_must_be_number,
Error_for_initial_value_must_be_number,
Error_array_out_of_bounds,
};
enum ravi_codegen_type {
RAVI_CODEGEN_NONE = 0,
RAVI_CODEGEN_HEADER_ONLY = 1,
RAVI_CODEGEN_FUNCTION_ONLY = 2,
RAVI_CODEGEN_ALL = 3,
RAVI_CODEGEN_NONE = 0,
RAVI_CODEGEN_HEADER_ONLY = 1,
RAVI_CODEGEN_FUNCTION_ONLY = 2,
RAVI_CODEGEN_ALL = 3,
};
struct ravi_compile_options_t {
/* Is this a manual request? */
int manual_request;
/* Is this a manual request? */
int manual_request;
/* Should range check be omitted when compiling array access */
int omit_array_get_range_check;
/* Should range check be omitted when compiling array access */
int omit_array_get_range_check;
/* Should the compiler dump generated code ? */
int dump_level;
/* Should the compiler dump generated code ? */
int dump_level;
/* Should the compiler validate the generated code ? */
int verification_level;
/* Should the compiler validate the generated code ? */
int verification_level;
enum ravi_codegen_type codegen_type;
enum ravi_codegen_type codegen_type;
};
LUAI_FUNC bool raviJ_cancompile(Proto *p);
@ -103,10 +120,11 @@ LUAI_FUNC bool raviJ_cancompile(Proto *p);
// Returns true if compilation was successful
// If successful then buf will be set
LUAI_FUNC bool raviJ_codegen(struct lua_State *L, struct Proto *p,
struct ravi_compile_options_t *options, const char *fname, membuff_t *buf);
struct ravi_compile_options_t *options,
const char *fname, membuff_t *buf);
#ifdef __cplusplus
};
#endif
#endif
#endif

@ -26,23 +26,6 @@
#include <stddef.h>
#include <assert.h>
enum errorcode {
Error_integer_expected,
Error_number_expected,
Error_integer_array_expected,
Error_number_array_expected,
Error_table_expected,
Error_upval_needs_integer,
Error_upval_needs_number,
Error_upval_needs_integer_array,
Error_upval_needs_number_array,
Error_upval_needs_table,
Error_for_limit_must_be_number,
Error_for_step_must_be_number,
Error_for_initial_value_must_be_number,
Error_array_out_of_bounds,
};
static const char Lua_header[] = ""
"#define NULL ((void *)0)\n"
"typedef struct lua_State lua_State;\n"
@ -758,8 +741,9 @@ static void emit_gettable_ai(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " setivalue(ra, iptr[ukey]);\n");
membuff_add_string(&fn->body, "} else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
// membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
// membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, "}\n");
}
@ -778,8 +762,9 @@ static void emit_gettable_af(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " setfltvalue(ra, nptr[ukey]);\n");
membuff_add_string(&fn->body, "} else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_array_out_of_bounds);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_array_out_of_bounds);
membuff_add_string(&fn->body, "}\n");
}
@ -811,9 +796,10 @@ static void emit_settable_ai(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "ukey = (lua_Unsigned)(ivalue(rb));\n");
membuff_add_string(&fn->body, "iptr = (lua_Integer *)t->ravi_array.data;\n");
membuff_add_string(&fn->body, "if (!tointeger(rc, &i)) {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " iptr[ukey] = i;\n");
@ -850,9 +836,10 @@ static void emit_settable_af(struct function *fn, int A, int B,
membuff_add_string(&fn->body, "ukey = (lua_Unsigned)(ivalue(rb));\n");
membuff_add_string(&fn->body, "nptr = (lua_Number *)t->ravi_array.data;\n");
membuff_add_string(&fn->body, "if (!tonumber(rc, &n)) {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "if (ukey < (lua_Unsigned)(t->ravi_array.len)) {\n");
membuff_add_string(&fn->body, " nptr[ukey] = n;\n");
@ -1327,9 +1314,10 @@ static void emit_op_movei(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (tointeger(rb, &i)) { setivalue(ra, i); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1341,8 +1329,9 @@ static void emit_op_movef(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (tonumber(rb, &n)) { setfltvalue(ra, n); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1353,9 +1342,10 @@ static void emit_op_moveai(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisiarray(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_array_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1366,9 +1356,10 @@ static void emit_op_moveaf(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisfarray(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_number_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_number_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_array_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1379,8 +1370,9 @@ static void emit_op_movetab(struct function *fn, int A, int B, int pc) {
membuff_add_string(&fn->body,
"if (ttisLtable(rb)) { setobjs2s(L, ra, rb); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_table_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1391,9 +1383,10 @@ static void emit_op_toint(struct function *fn, int A, int pc) {
membuff_add_string(&fn->body,
"if (tointeger(ra, &i)) { setivalue(ra, i); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1404,8 +1397,9 @@ static void emit_op_toflt(struct function *fn, int A, int pc) {
membuff_add_string(&fn->body,
"if (tonumber(ra, &n)) { setfltvalue(ra, n); }\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_number_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1413,9 +1407,10 @@ static void emit_op_toai(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisiarray(ra)) {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_integer_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_integer_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_integer_array_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1423,9 +1418,10 @@ static void emit_op_toaf(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisfarray(ra)) {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n",
Error_number_array_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n",
// Error_number_array_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_number_array_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1433,8 +1429,9 @@ static void emit_op_totab(struct function *fn, int A, int pc) {
(void)pc;
emit_reg(fn, "ra", A);
membuff_add_string(&fn->body, "if (!ttisLtable(ra)) {\n");
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_table_expected);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_table_expected);
membuff_add_string(&fn->body, "}\n");
}
@ -1501,16 +1498,19 @@ static void emit_op_forprep(struct function *fn, int A, int pc,
membuff_add_string(&fn->body, "}\n");
membuff_add_string(&fn->body, "else {\n");
membuff_add_fstring(&fn->body, " if (!tonumber(rb, &nlimit_%d)) {\n", A);
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_limit_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_limit_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_limit_must_be_number);
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " if (!tonumber(rc, &nstep_%d)) {\n", A);
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_step_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_step_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_step_must_be_number);
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " if (!tonumber(ra, &ninit_%d)) {\n", A);
membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_initial_value_must_be_number);
membuff_add_string(&fn->body, " goto Lraise_error;\n");
//membuff_add_fstring(&fn->body, " error_code = %d;\n", Error_for_initial_value_must_be_number);
//membuff_add_string(&fn->body, " goto Lraise_error;\n");
membuff_add_fstring(&fn->body, " raise_error(L, %d);\n", Error_for_initial_value_must_be_number);
membuff_add_string(&fn->body, " }\n");
membuff_add_fstring(&fn->body, " ninit_%d -= nstep_%d;\n", A, A);
membuff_add_string(&fn->body, "}\n");

@ -36,19 +36,6 @@ static int id = 0;
#include "lstate.h"
#include "lua.h"
enum errorcode {
Error_integer_expected,
Error_number_expected,
Error_integer_array_expected,
Error_number_array_expected,
Error_table_expected,
Error_upval_needs_integer,
Error_upval_needs_number,
Error_upval_needs_integer_array,
Error_upval_needs_number_array,
Error_upval_needs_table,
};
static const char *errortext[] = {
"integer expected",
"number expected",

Loading…
Cancel
Save