split up x64 backend into x64_emitters.cc

This commit is contained in:
Anthony Pesch 2017-06-22 16:18:22 -04:00
parent 9caab96c91
commit 780cafe47c
4 changed files with 1186 additions and 1170 deletions

View File

@ -286,7 +286,8 @@ if(ARCH_X64)
list(APPEND RELIB_SOURCES
src/jit/backend/x64/x64_backend.cc
src/jit/backend/x64/x64_disassembler.c
src/jit/backend/x64/x64_dispatch.cc)
src/jit/backend/x64/x64_dispatch.cc
src/jit/backend/x64/x64_emitters.cc)
elseif(ARCH_A64)
list(APPEND RELIB_DEFS ARCH_A64=1)
endif()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,9 +12,6 @@ extern "C" {
#include "jit/backend/jit_backend.h"
}
#define X64_STACK_SIZE 1024
#define X64_THUNK_SIZE 1024
enum xmm_constant {
XMM_CONST_ABS_MASK_PS,
XMM_CONST_ABS_MASK_PD,
@ -56,7 +53,43 @@ extern const Xbyak::Reg64 arg2;
extern const Xbyak::Reg64 arg3;
extern const Xbyak::Reg64 tmp0;
extern const Xbyak::Reg64 tmp1;
extern const Xbyak::Reg64 guestctx;
extern const Xbyak::Reg64 membase;
/*
* backend functionality used by emitters
*/
#if PLATFORM_WINDOWS
#define X64_STACK_SHADOW_SPACE 32
#else
#define X64_STACK_SHADOW_SPACE 0
#endif
#define X64_STACK_OFFSET_LOCALS (X64_STACK_SHADOW_SPACE + 8)
#define X64_STACK_SIZE 1024
#define X64_USE_AVX backend->use_avx
struct ir_value;
const Xbyak::Reg x64_backend_reg(struct x64_backend *backend,
const struct ir_value *v);
const Xbyak::Xmm x64_backend_xmm(struct x64_backend *backend,
const struct ir_value *v);
void x64_backend_load_mem(struct x64_backend *backend,
const struct ir_value *dst,
const Xbyak::RegExp &srcExp);
void x64_backend_store_mem(struct x64_backend *backend,
const Xbyak::RegExp &dstExp,
const struct ir_value *src);
void x64_backend_mov_value(struct x64_backend *backend, Xbyak::Reg dst,
const struct ir_value *v);
const Xbyak::Address x64_backend_xmm_constant(struct x64_backend *backend,
enum xmm_constant c);
int x64_backend_can_encode_imm(const struct ir_value *v);
/*
* dispatch
*/
void x64_dispatch_init(struct x64_backend *backend);
void x64_dispatch_shutdown(struct x64_backend *backend);
void x64_dispatch_emit_thunks(struct x64_backend *backend);
@ -69,4 +102,11 @@ void x64_dispatch_patch_edge(struct jit_backend *base, void *code, void *dst);
void x64_dispatch_restore_edge(struct jit_backend *base, void *code,
uint32_t dst);
/*
* emitters
*/
typedef void (*x64_emit_cb)(struct x64_backend *, Xbyak::CodeGenerator &,
const struct ir_instr *);
extern x64_emit_cb x64_backend_emitters[];
#endif