1
0
forked from GitHub/gf-core

now a complete JIT compiler and ByteCode compiler for the def rules in the abstract syntax. there might be some bugs yet to be found, meta variables and computation under lambda is only partially supported

This commit is contained in:
kr.angelov
2014-09-25 10:35:06 +00:00
parent 928217f9d9
commit 14e6eec5ec
12 changed files with 809 additions and 572 deletions

View File

@@ -52,6 +52,12 @@ typedef struct {
#define JIT_V0 JIT_V(0)
#define JIT_V1 JIT_V(1)
#define JIT_V2 JIT_V(2)
#define JIT_FPR0 JIT_FPR(0)
#define JIT_FPR1 JIT_FPR(1)
#define JIT_FPR2 JIT_FPR(2)
#define JIT_FPR3 JIT_FPR(3)
#define JIT_FPR4 JIT_FPR(4)
#define JIT_FPR5 JIT_FPR(5)
#define _jitl _jit.jitl
@@ -149,7 +155,7 @@ typedef union jit_code {
#define jit_xorr_ul(d, s1, s2) jit_xorr_l((d), (s1), (s2))
#define jit_addr_p(d, s1, s2) jit_addr_ul((d), (s1), (s2))
#define jit_addi_p(d, rs, is) jit_addi_ul((d), (rs), (long) (is))
#define jit_addi_p(d, rs, is) (jit_addi_ul((d), (rs), (long) (is)), _jit.x.pc)
#define jit_movr_p(d, rs) jit_movr_ul((d), (rs))
#define jit_subr_p(d, s1, s2) jit_subr_ul((d), (s1), (s2))
#define jit_subi_p(d, rs, is) jit_subi_ul((d), (rs), (long) (is))

View File

@@ -101,6 +101,8 @@ struct jit_local_state {
#define jit_ret() jit_base_ret (_jitl.alloca_offset)
#endif
#define jit_bare_ret(IM) ((IM == 0) ? RET_() : RETi(IM))
#define jit_calli(label) (CALLm( ((unsigned long) (label))), _jit.x.pc)
#define jit_callr(reg) CALLsr(reg)
@@ -108,16 +110,6 @@ struct jit_local_state {
#define jit_finish(sub) (_jitl.finish_ref = jit_calli((sub)), ADDLir(sizeof(long) * _jitl.argssize, JIT_SP), _jitl.argssize = 0, _jitl.finish_ref)
#define jit_finishr(reg) (jit_callr((reg)), ADDLir(sizeof(long) * _jitl.argssize, JIT_SP), _jitl.argssize = 0)
#ifdef __APPLE__
#define jit_tail_finishr(reg) jit_base_tail_finishr(-12, reg)
#else
#define jit_tail_finishr(reg) jit_base_tail_finishr(_jitl.alloca_offset, reg)
#endif
#define jit_base_tail_finishr(ofs, reg) \
(((ofs) < 0 ? LEAVE_() : POPLr(_EBP)), \
POPLr(_EDI), POPLr(_ESI), POPLr(_EBX), jit_jmpr(reg))
#define jit_arg_c() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_uc() ((_jitl.framesize += sizeof(int)) - sizeof(int))
#define jit_arg_s() ((_jitl.framesize += sizeof(int)) - sizeof(int))

View File

@@ -190,14 +190,6 @@ struct jit_local_state {
? (ADDQir(sizeof(long) * _jitl.argssize, JIT_SP), _jitl.argssize = 0) \
: 0))
#ifdef __APPLE__
#define jit_tail_finishr(reg) jit_base_tail_finishr(-12, reg)
#else
#define jit_tail_finishr(reg) jit_base_tail_finishr(_jitl.alloca_offset, reg)
#endif
#define jit_base_tail_finishr(ofs, reg)
#define jit_retval_l(rd) ((void)jit_movr_l ((rd), _EAX))
#define jit_arg_i() (_jitl.nextarg_geti < JIT_ARG_MAX \
? _jitl.nextarg_geti++ \
@@ -273,6 +265,7 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX, _R8D, _R9D };
#define jit_patch_at(jump_pc,v) (_jitl.long_jumps ? jit_patch_long_at((jump_pc)-3, v) : jit_patch_short_at(jump_pc, v))
#define jit_patch_calli(pa,pv) (*_PSL((pa) - sizeof(long)) = _jit_SL((pv)))
#define jit_ret() (LEAVE_(), POPQr(_R14), POPQr(_R13), POPQr(_R12), POPQr(_EBX), RET_())
#define jit_bare_ret(IM) ((IM == 0) ? RET_() : RETi(IM))
/* Memory */