From f77a850077633ee68038bfa2cc7c47a98208df5a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Fri, 27 Apr 2018 16:56:11 +0100 Subject: [PATCH] orc: decorate public symbols with ORC_API We'll use that later to control symbol visibility and exported symbols. --- orc/Makefile.am | 4 +- orc/meson.build | 4 +- orc/orc.h | 8 ++- orc/orcarm.h | 96 ++++++++++++++++++------------------ orc/orcbytecode.h | 13 +++-- orc/orccode.h | 9 ++-- orc/orccompiler.h | 35 ++++++++------ orc/orccpu.h | 10 ++-- orc/orcdebug.h | 12 ++--- orc/orcexecutor.h | 55 +++++++++++++-------- orc/orcfunctions.h | 4 +- orc/orcinternal.h | 2 + orc/orcmips.c | 1 + orc/orcmips.h | 137 +++++++++++++++++++++++++++++----------------------- orc/orcmmx.h | 12 ++++- orc/orcneon.h | 48 +++++++++--------- orc/orconce.h | 6 +-- orc/orcopcode.h | 19 +++++--- orc/orcparse.h | 8 +-- orc/orcpowerpc.h | 47 +++++++----------- orc/orcprogram.h | 124 +++++++++++++++++++++++------------------------ orc/orcrule.h | 7 +-- orc/orcrules-mips.c | 1 + orc/orcsse.h | 17 ++++--- orc/orctarget.h | 26 +++++----- orc/orcutils.h | 6 ++- orc/orcx86.h | 95 ++++++++++++++++++------------------ orc/orcx86insn.h | 7 +-- 28 files changed, 438 insertions(+), 375 deletions(-) diff --git a/orc/Makefile.am b/orc/Makefile.am index 07e8af4..c1731c7 100644 --- a/orc/Makefile.am +++ b/orc/Makefile.am @@ -76,6 +76,8 @@ if HAVE_MIPSEL liborc_@ORC_MAJORMINOR@_la_SOURCES += orccpu-mips.c endif +# FIXME: orcemulateopcodes.h probably shouldn't be installed, symbols are not exported or useful +# FIXME: orcinternal.h should probably also not be installed pkginclude_HEADERS = \ orc-stdint.h \ orc.h \ @@ -125,7 +127,7 @@ generate_bytecode_DEPENDENCIES = liborc-0.4.la update: generate-emulation generate-bytecode $(top_builddir)/tools/orcc$(EXEEXT) --implementation -o orcfunctions.c orcfunctions.orc - $(top_builddir)/tools/orcc$(EXEEXT) --header -o orcfunctions.h orcfunctions.orc + $(top_builddir)/tools/orcc$(EXEEXT) --decorator ORC_API --header -o orcfunctions.h orcfunctions.orc ./generate-emulation$(EXEEXT) -o orcemulateopcodes.c ./generate-emulation$(EXEEXT) --header -o orcemulateopcodes.h ./generate-bytecode$(EXEEXT) --header -o orcbytecodes.h diff --git a/orc/meson.build b/orc/meson.build index 03ed4f6..138c4d4 100644 --- a/orc/meson.build +++ b/orc/meson.build @@ -28,11 +28,11 @@ orc_headers = [ 'orccpu.h', 'orccpuinsn.h', 'orcdebug.h', - 'orcemulateopcodes.h', + 'orcemulateopcodes.h', # FIXME: this probably shouldn't be installed, symbols are not exported or useful 'orcexecutor.h', 'orcfunctions.h', 'orcinstruction.h', - 'orcinternal.h', + 'orcinternal.h', # FIXME: this probably shouldn't be installed, symbols are not exported or useful 'orclimits.h', 'orcmmx.h', 'orcneon.h', diff --git a/orc/orc.h b/orc/orc.h index b34650d..a3e4039 100644 --- a/orc/orc.h +++ b/orc/orc.h @@ -2,15 +2,19 @@ #ifndef _ORC_ORC_H_ #define _ORC_ORC_H_ +#ifndef ORC_API +#define ORC_API extern +#endif + +#include #include #include #include #include #include -#include #include -const char * orc_version_string (void); +ORC_API const char * orc_version_string (void); #endif diff --git a/orc/orcarm.h b/orc/orcarm.h index 1187aa3..69087aa 100644 --- a/orc/orcarm.h +++ b/orc/orcarm.h @@ -2,7 +2,7 @@ #ifndef _ORC_ARM_H_ #define _ORC_ARM_H_ -#include +#include ORC_BEGIN_DECLS @@ -71,60 +71,60 @@ typedef enum { ORC_ARM_ROR } OrcArmShift; -unsigned long orc_arm_get_cpu_flags (void); - -void orc_arm_emit (OrcCompiler *compiler, orc_uint32 insn); -void orc_arm_emit_bx_lr (OrcCompiler *compiler); -const char * orc_arm_reg_name (int reg); -const char * orc_arm_cond_name (OrcArmCond cond); -void orc_arm_emit_load_imm (OrcCompiler *compiler, int dest, int imm); - -void orc_arm_emit_add (OrcCompiler *compiler, int dest, int src1, int src2); -void orc_arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2); -void orc_arm_emit_add_imm (OrcCompiler *compiler, int dest, int src1, int value); -void orc_arm_emit_and_imm (OrcCompiler *compiler, int dest, int src1, int value); -void orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value, int record); -void orc_arm_emit_asr_imm (OrcCompiler *compiler, int dest, int src1, int value); -void orc_arm_emit_lsl_imm (OrcCompiler *compiler, int dest, int src1, int value); -void orc_arm_emit_cmp_imm (OrcCompiler *compiler, int src1, int value); -void orc_arm_emit_cmp (OrcCompiler *compiler, int src1, int src2); -void orc_arm_emit_mov (OrcCompiler *compiler, int dest, int src); - -void orc_arm_emit_align (OrcCompiler *compiler, int align_shift); -void orc_arm_emit_label (OrcCompiler *compiler, int label); -void orc_arm_emit_push (OrcCompiler *compiler, int regs, orc_uint32 vregs); -void orc_arm_emit_pop (OrcCompiler *compiler, int regs, orc_uint32 vregs); -void orc_arm_emit_branch (OrcCompiler *compiler, int cond, int label); -void orc_arm_emit_data (OrcCompiler *compiler, orc_uint32 data); - -void orc_arm_loadb (OrcCompiler *compiler, int dest, int src1, int offset); -void orc_arm_storeb (OrcCompiler *compiler, int dest, int offset, int src1); -void orc_arm_loadw (OrcCompiler *compiler, int dest, int src1, int offset); -void orc_arm_storew (OrcCompiler *compiler, int dest, int offset, int src1); -void orc_arm_loadl (OrcCompiler *compiler, int dest, int src1, int offset); -void orc_arm_storel (OrcCompiler *compiler, int dest, int offset, int src1); - -void orc_arm_emit_load_reg (OrcCompiler *compiler, int dest, int src1, int offset); -void orc_arm_emit_store_reg (OrcCompiler *compiler, int src, int dest, int offset); - -void orc_arm_add_fixup (OrcCompiler *compiler, int label, int type); -void orc_arm_do_fixups (OrcCompiler *compiler); - -void orc_arm_emit_dp (OrcCompiler *p, int type, OrcArmCond cond, OrcArmDP opcode, +ORC_API unsigned long orc_arm_get_cpu_flags (void); + +ORC_API void orc_arm_emit (OrcCompiler *compiler, orc_uint32 insn); +ORC_API void orc_arm_emit_bx_lr (OrcCompiler *compiler); +ORC_API const char * orc_arm_reg_name (int reg); +ORC_API const char * orc_arm_cond_name (OrcArmCond cond); +ORC_API void orc_arm_emit_load_imm (OrcCompiler *compiler, int dest, int imm); + +ORC_API void orc_arm_emit_add (OrcCompiler *compiler, int dest, int src1, int src2); +ORC_API void orc_arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2); +ORC_API void orc_arm_emit_add_imm (OrcCompiler *compiler, int dest, int src1, int value); +ORC_API void orc_arm_emit_and_imm (OrcCompiler *compiler, int dest, int src1, int value); +ORC_API void orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value, int record); +ORC_API void orc_arm_emit_asr_imm (OrcCompiler *compiler, int dest, int src1, int value); +ORC_API void orc_arm_emit_lsl_imm (OrcCompiler *compiler, int dest, int src1, int value); +ORC_API void orc_arm_emit_cmp_imm (OrcCompiler *compiler, int src1, int value); +ORC_API void orc_arm_emit_cmp (OrcCompiler *compiler, int src1, int src2); +ORC_API void orc_arm_emit_mov (OrcCompiler *compiler, int dest, int src); + +ORC_API void orc_arm_emit_align (OrcCompiler *compiler, int align_shift); +ORC_API void orc_arm_emit_label (OrcCompiler *compiler, int label); +ORC_API void orc_arm_emit_push (OrcCompiler *compiler, int regs, orc_uint32 vregs); +ORC_API void orc_arm_emit_pop (OrcCompiler *compiler, int regs, orc_uint32 vregs); +ORC_API void orc_arm_emit_branch (OrcCompiler *compiler, int cond, int label); +ORC_API void orc_arm_emit_data (OrcCompiler *compiler, orc_uint32 data); + +ORC_API void orc_arm_loadb (OrcCompiler *compiler, int dest, int src1, int offset); +ORC_API void orc_arm_storeb (OrcCompiler *compiler, int dest, int offset, int src1); +ORC_API void orc_arm_loadw (OrcCompiler *compiler, int dest, int src1, int offset); +ORC_API void orc_arm_storew (OrcCompiler *compiler, int dest, int offset, int src1); +ORC_API void orc_arm_loadl (OrcCompiler *compiler, int dest, int src1, int offset); +ORC_API void orc_arm_storel (OrcCompiler *compiler, int dest, int offset, int src1); + +ORC_API void orc_arm_emit_load_reg (OrcCompiler *compiler, int dest, int src1, int offset); +ORC_API void orc_arm_emit_store_reg (OrcCompiler *compiler, int src, int dest, int offset); + +ORC_API void orc_arm_add_fixup (OrcCompiler *compiler, int label, int type); +ORC_API void orc_arm_do_fixups (OrcCompiler *compiler); + +ORC_API void orc_arm_emit_dp (OrcCompiler *p, int type, OrcArmCond cond, OrcArmDP opcode, int S, int Rd, int Rn, int Rm, int shift, orc_uint32 val); -void orc_arm_emit_par (OrcCompiler *p, int op, int mode, OrcArmCond cond, +ORC_API void orc_arm_emit_par (OrcCompiler *p, int op, int mode, OrcArmCond cond, int Rd, int Rn, int Rm); -void orc_arm_emit_xt (OrcCompiler *p, int op, OrcArmCond cond, +ORC_API void orc_arm_emit_xt (OrcCompiler *p, int op, OrcArmCond cond, int Rd, int Rn, int Rm, int r8); -void orc_arm_emit_pkh (OrcCompiler *p, int op, OrcArmCond cond, +ORC_API void orc_arm_emit_pkh (OrcCompiler *p, int op, OrcArmCond cond, int Rd, int Rn, int Rm, int sh); -void orc_arm_emit_sat (OrcCompiler *p, int op, OrcArmCond cond, +ORC_API void orc_arm_emit_sat (OrcCompiler *p, int op, OrcArmCond cond, int Rd, int sat, int Rm, int sh, int asr); -void orc_arm_emit_rv (OrcCompiler *p, int op, OrcArmCond cond, +ORC_API void orc_arm_emit_rv (OrcCompiler *p, int op, OrcArmCond cond, int Rd, int Rm); -void orc_arm_emit_nop (OrcCompiler *compiler); +ORC_API void orc_arm_emit_nop (OrcCompiler *compiler); -void orc_arm_flush_cache (OrcCode *code); +ORC_API void orc_arm_flush_cache (OrcCode *code); /* ALL cpus */ /* data procesing instructions */ diff --git a/orc/orcbytecode.h b/orc/orcbytecode.h index 6dfd6de..876c7e3 100644 --- a/orc/orcbytecode.h +++ b/orc/orcbytecode.h @@ -2,7 +2,7 @@ #ifndef _ORC_BYTECODE_H_ #define _ORC_BYTECODE_H_ -#include +#include #include ORC_BEGIN_DECLS @@ -19,10 +19,13 @@ struct _OrcBytecode { #ifdef ORC_ENABLE_UNSTABLE_API -OrcBytecode * orc_bytecode_new (void); -void orc_bytecode_free (OrcBytecode *bytecode); -OrcBytecode * orc_bytecode_from_program (OrcProgram *p); -int orc_bytecode_parse_function (OrcProgram *program, const orc_uint8 *bytecode); +ORC_API OrcBytecode * orc_bytecode_new (void); + +ORC_API void orc_bytecode_free (OrcBytecode *bytecode); + +ORC_API OrcBytecode * orc_bytecode_from_program (OrcProgram *p); + +ORC_API int orc_bytecode_parse_function (OrcProgram *program, const orc_uint8 *bytecode); #endif diff --git a/orc/orccode.h b/orc/orccode.h index 45441ce..ee8fe66 100644 --- a/orc/orccode.h +++ b/orc/orccode.h @@ -2,7 +2,7 @@ #ifndef _ORC_CODE_H_ #define _ORC_CODE_H_ -#include +#include #include #include #include @@ -43,13 +43,14 @@ struct _OrcCode { }; -void orc_code_allocate_codemem (OrcCode *code, int size); +ORC_API void orc_code_allocate_codemem (OrcCode *code, int size); -OrcCode * orc_code_new (void); -void orc_code_free (OrcCode *code); +ORC_API OrcCode * orc_code_new (void); +ORC_API void orc_code_free (OrcCode *code); #ifdef ORC_ENABLE_UNSTABLE_API +/* FIXME: this is internal API, nothing in the public headers returns an OrcCodeChunk */ void orc_code_chunk_free (OrcCodeChunk *chunk); #endif diff --git a/orc/orccompiler.h b/orc/orccompiler.h index a3cdbcd..2af53a5 100644 --- a/orc/orccompiler.h +++ b/orc/orccompiler.h @@ -2,7 +2,7 @@ #ifndef _ORC_COMPILER_H_ #define _ORC_COMPILER_H_ -#include +#include #include #include #include @@ -138,24 +138,31 @@ struct _OrcCompiler { }; -int orc_compiler_label_new (OrcCompiler *compiler); -int orc_compiler_get_constant (OrcCompiler *compiler, int size, int value); -int orc_compiler_get_constant_long (OrcCompiler *compiler, orc_uint32 a, - orc_uint32 b, orc_uint32 c, orc_uint32 d); -int orc_compiler_try_get_constant_long (OrcCompiler *compiler, orc_uint32 a, - orc_uint32 b, orc_uint32 c, orc_uint32 d); -int orc_compiler_get_temp_constant (OrcCompiler *compiler, int size, int value); -int orc_compiler_get_temp_reg (OrcCompiler *compiler); -int orc_compiler_get_constant_reg (OrcCompiler *compiler); -void orc_compiler_error (OrcCompiler *compiler, const char *fmt, ...); +ORC_API int orc_compiler_label_new (OrcCompiler *compiler); -void orc_compiler_append_code (OrcCompiler *p, const char *fmt, ...) - ORC_GNU_PRINTF(2,3); +ORC_API int orc_compiler_get_constant (OrcCompiler *compiler, int size, int value); + +ORC_API int orc_compiler_get_constant_long (OrcCompiler *compiler, orc_uint32 a, + orc_uint32 b, orc_uint32 c, orc_uint32 d); + +ORC_API int orc_compiler_try_get_constant_long (OrcCompiler *compiler, orc_uint32 a, + orc_uint32 b, orc_uint32 c, orc_uint32 d); + +ORC_API int orc_compiler_get_temp_constant (OrcCompiler *compiler, int size, int value); + +ORC_API int orc_compiler_get_temp_reg (OrcCompiler *compiler); + +ORC_API int orc_compiler_get_constant_reg (OrcCompiler *compiler); + +ORC_API void orc_compiler_error (OrcCompiler *compiler, const char *fmt, ...); + +ORC_API void orc_compiler_append_code (OrcCompiler *p, const char *fmt, ...) ORC_GNU_PRINTF(2,3); #ifdef ORC_ENABLE_UNSTABLE_API -int orc_compiler_flag_check (const char *flag); +ORC_API int orc_compiler_flag_check (const char *flag); +/* FIXME: remove, these were never actually exported as public symbols, so unusable */ extern int _orc_compiler_flag_backup; extern int _orc_compiler_flag_emulate; extern int _orc_compiler_flag_debug; diff --git a/orc/orccpu.h b/orc/orccpu.h index 7ab4355..b354f4f 100644 --- a/orc/orccpu.h +++ b/orc/orccpu.h @@ -2,15 +2,17 @@ #ifndef _ORC_CPU_H_ #define _ORC_CPU_H_ -#include +#include #include ORC_BEGIN_DECLS -void orc_get_data_cache_sizes (int *level1, int *level2, int *level3); -void orc_get_cpu_family_model_stepping (int *family, int *model, int *stepping); -const char * orc_get_cpu_name (void); +ORC_API void orc_get_data_cache_sizes (int *level1, int *level2, int *level3); + +ORC_API void orc_get_cpu_family_model_stepping (int *family, int *model, int *stepping); + +ORC_API const char * orc_get_cpu_name (void); ORC_END_DECLS diff --git a/orc/orcdebug.h b/orc/orcdebug.h index 3faaecf..22b1c24 100644 --- a/orc/orcdebug.h +++ b/orc/orcdebug.h @@ -29,7 +29,7 @@ #define _ORC_DEBUG_H_ #include -#include +#include #include ORC_BEGIN_DECLS @@ -145,13 +145,11 @@ typedef enum { } \ } while(0) -void orc_debug_set_print_function (OrcDebugPrintFunc func); -int orc_debug_get_level (void); -void orc_debug_set_level (int level); +ORC_API void orc_debug_set_print_function (OrcDebugPrintFunc func); +ORC_API int orc_debug_get_level (void); +ORC_API void orc_debug_set_level (int level); -void _orc_debug_init (void); - -void orc_debug_print (int level, const char *file, const char *func, +ORC_API void orc_debug_print (int level, const char *file, const char *func, int line, const char *format, ...); ORC_END_DECLS diff --git a/orc/orcexecutor.h b/orc/orcexecutor.h index 0f901d6..7f5de28 100644 --- a/orc/orcexecutor.h +++ b/orc/orcexecutor.h @@ -2,7 +2,7 @@ #ifndef _ORC_EXECUTOR_H_ #define _ORC_EXECUTOR_H_ -#include +#include #include ORC_BEGIN_DECLS @@ -92,24 +92,41 @@ struct _OrcExecutorAlt { -OrcExecutor * orc_executor_new (OrcProgram *program); -void orc_executor_free (OrcExecutor *ex); -void orc_executor_set_program (OrcExecutor *ex, OrcProgram *program); -void orc_executor_set_array (OrcExecutor *ex, int var, void *ptr); -void orc_executor_set_stride (OrcExecutor *ex, int var, int stride); -void orc_executor_set_array_str (OrcExecutor *ex, const char *name, void *ptr); -void orc_executor_set_param (OrcExecutor *ex, int var, int value); -void orc_executor_set_param_str (OrcExecutor *ex, const char *name, int value); -void orc_executor_set_param_float (OrcExecutor *ex, int var, float value); -void orc_executor_set_param_int64 (OrcExecutor *ex, int var, orc_int64 value); -void orc_executor_set_param_double (OrcExecutor *ex, int var, double value); -int orc_executor_get_accumulator (OrcExecutor *ex, int var); -int orc_executor_get_accumulator_str (OrcExecutor *ex, const char *name); -void orc_executor_set_n (OrcExecutor *ex, int n); -void orc_executor_set_m (OrcExecutor *ex, int m); -void orc_executor_emulate (OrcExecutor *ex); -void orc_executor_run (OrcExecutor *ex); -void orc_executor_run_backup (OrcExecutor *ex); +ORC_API OrcExecutor * orc_executor_new (OrcProgram *program); + +ORC_API void orc_executor_free (OrcExecutor *ex); + +ORC_API void orc_executor_set_program (OrcExecutor *ex, OrcProgram *program); + +ORC_API void orc_executor_set_array (OrcExecutor *ex, int var, void *ptr); + +ORC_API void orc_executor_set_stride (OrcExecutor *ex, int var, int stride); + +ORC_API void orc_executor_set_array_str (OrcExecutor *ex, const char *name, void *ptr); + +ORC_API void orc_executor_set_param (OrcExecutor *ex, int var, int value); + +ORC_API void orc_executor_set_param_str (OrcExecutor *ex, const char *name, int value); + +ORC_API void orc_executor_set_param_float (OrcExecutor *ex, int var, float value); + +ORC_API void orc_executor_set_param_int64 (OrcExecutor *ex, int var, orc_int64 value); + +ORC_API void orc_executor_set_param_double (OrcExecutor *ex, int var, double value); + +ORC_API int orc_executor_get_accumulator (OrcExecutor *ex, int var); + +ORC_API int orc_executor_get_accumulator_str (OrcExecutor *ex, const char *name); + +ORC_API void orc_executor_set_n (OrcExecutor *ex, int n); + +ORC_API void orc_executor_set_m (OrcExecutor *ex, int m); + +ORC_API void orc_executor_emulate (OrcExecutor *ex); + +ORC_API void orc_executor_run (OrcExecutor *ex); + +ORC_API void orc_executor_run_backup (OrcExecutor *ex); ORC_END_DECLS diff --git a/orc/orcfunctions.h b/orc/orcfunctions.h index b9e6205..c2ff6d6 100644 --- a/orc/orcfunctions.h +++ b/orc/orcfunctions.h @@ -79,8 +79,8 @@ typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 #endif #endif -void orc_memcpy (void * ORC_RESTRICT d1, const void * ORC_RESTRICT s1, int n); -void orc_memset (void * ORC_RESTRICT d1, int p1, int n); +ORC_API void orc_memcpy (void * ORC_RESTRICT d1, const void * ORC_RESTRICT s1, int n); +ORC_API void orc_memset (void * ORC_RESTRICT d1, int p1, int n); #ifdef __cplusplus } diff --git a/orc/orcinternal.h b/orc/orcinternal.h index a60838b..d455c42 100644 --- a/orc/orcinternal.h +++ b/orc/orcinternal.h @@ -9,6 +9,8 @@ ORC_BEGIN_DECLS #ifdef ORC_ENABLE_UNSTABLE_API +/* FIXME: not sure why these are exported, no one needs to call these, that's + * already done as part of orc_init() */ void orc_mmx_init (void); void orc_sse_init (void); void orc_arm_init (void); diff --git a/orc/orcmips.c b/orc/orcmips.c index f4c5498..dab2ac5 100644 --- a/orc/orcmips.c +++ b/orc/orcmips.c @@ -26,6 +26,7 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "config.h" #include #include diff --git a/orc/orcmips.h b/orc/orcmips.h index f8a617d..f0d5c42 100644 --- a/orc/orcmips.h +++ b/orc/orcmips.h @@ -30,8 +30,7 @@ #ifndef _ORC_MIPS_H_ #define _ORC_MIPS_H_ -#include -#include +#include ORC_BEGIN_DECLS @@ -77,39 +76,57 @@ typedef enum { ORC_MIPS_RA } OrcMipsRegister; +ORC_API unsigned long orc_mips_get_cpu_flags (void); +ORC_API void orc_mips_emit_label (OrcCompiler *compiler, unsigned int label); +ORC_API void orc_mips_emit_nop (OrcCompiler *compiler); +ORC_API void orc_mips_emit_sw (OrcCompiler *compiler, OrcMipsRegister reg, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_swr (OrcCompiler *compiler, OrcMipsRegister reg, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_swl (OrcCompiler *compiler, OrcMipsRegister reg, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_sh (OrcCompiler *compiler, OrcMipsRegister reg, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_sb (OrcCompiler *compiler, OrcMipsRegister reg, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lw (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lwr (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lwl (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +ORC_API void orc_mips_emit_lbu (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); - +ORC_API void orc_mips_emit_jr (OrcCompiler *compiler, OrcMipsRegister address_reg); + +ORC_API void orc_mips_emit_conditional_branch (OrcCompiler *compiler, int condition, OrcMipsRegister rs, OrcMipsRegister rt, unsigned int label); + +ORC_API void orc_mips_emit_conditional_branch_with_offset (OrcCompiler *compiler, int condition, OrcMipsRegister rs, @@ -136,63 +153,63 @@ enum { #define orc_mips_emit_beq(compiler, reg1, reg2, label) \ orc_mips_emit_conditional_branch(compiler, ORC_MIPS_BEQ, reg1, reg2, label) -void orc_mips_emit_addiu (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_addi (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_add (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_addu (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_addu_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_addu_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_addq_s_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_adduh_r_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_move (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); -void orc_mips_emit_sub (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_subu_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_subq_s_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_subq_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_subu_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_srl (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_sll (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_sra (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_shll_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_shra_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_shrl_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_andi (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_or (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_and (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_ori (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); -void orc_mips_emit_lui (OrcCompiler *compiler, OrcMipsRegister dest, int value); -void orc_mips_emit_mul (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_mul_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); - -void orc_mips_emit_append (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int shift_amount); - -void orc_mips_emit_prepend (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int shift_amount); - -void orc_mips_emit_mtlo (OrcCompiler *compiler, OrcMipsRegister source); - -void orc_mips_emit_extr_s_h (OrcCompiler *compiler, OrcMipsRegister dest, int accumulator, int shift); - -void orc_mips_emit_slt (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister src1, OrcMipsRegister src2); -void orc_mips_emit_movn (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister src, OrcMipsRegister condition); - -void orc_mips_emit_repl_ph (OrcCompiler *compiler, OrcMipsRegister dest, int value); -void orc_mips_emit_replv_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); -void orc_mips_emit_replv_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); -void orc_mips_emit_preceu_ph_qbr (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); -void orc_mips_emit_precr_qb_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_precrq_qb_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_cmp_lt_ph (OrcCompiler *compiler, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_pick_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); - -void orc_mips_emit_packrl_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -void orc_mips_emit_align (OrcCompiler *compiler, int align_shift); - -void orc_mips_emit_wsbh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); -void orc_mips_emit_seh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); - -void orc_mips_emit_pref (OrcCompiler *compiler, int hint, OrcMipsRegister base, int offset); - -void orc_mips_do_fixups (OrcCompiler *compiler); +ORC_API void orc_mips_emit_addiu (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_addi (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_add (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_addu (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_addu_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_addu_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_addq_s_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_adduh_r_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_move (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +ORC_API void orc_mips_emit_sub (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_subu_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_subq_s_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_subq_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_subu_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_srl (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_sll (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_sra (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_shll_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_shra_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_shrl_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_andi (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_or (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_and (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_ori (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); +ORC_API void orc_mips_emit_lui (OrcCompiler *compiler, OrcMipsRegister dest, int value); +ORC_API void orc_mips_emit_mul (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_mul_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); + +ORC_API void orc_mips_emit_append (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int shift_amount); + +ORC_API void orc_mips_emit_prepend (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int shift_amount); + +ORC_API void orc_mips_emit_mtlo (OrcCompiler *compiler, OrcMipsRegister source); + +ORC_API void orc_mips_emit_extr_s_h (OrcCompiler *compiler, OrcMipsRegister dest, int accumulator, int shift); + +ORC_API void orc_mips_emit_slt (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister src1, OrcMipsRegister src2); +ORC_API void orc_mips_emit_movn (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister src, OrcMipsRegister condition); + +ORC_API void orc_mips_emit_repl_ph (OrcCompiler *compiler, OrcMipsRegister dest, int value); +ORC_API void orc_mips_emit_replv_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +ORC_API void orc_mips_emit_replv_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +ORC_API void orc_mips_emit_preceu_ph_qbr (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +ORC_API void orc_mips_emit_precr_qb_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_precrq_qb_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_cmp_lt_ph (OrcCompiler *compiler, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_pick_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); + +ORC_API void orc_mips_emit_packrl_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +ORC_API void orc_mips_emit_align (OrcCompiler *compiler, int align_shift); + +ORC_API void orc_mips_emit_wsbh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +ORC_API void orc_mips_emit_seh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); + +ORC_API void orc_mips_emit_pref (OrcCompiler *compiler, int hint, OrcMipsRegister base, int offset); + +ORC_API void orc_mips_do_fixups (OrcCompiler *compiler); /* ORC_STRUCT_OFFSET doesn't work for cross-compiling, so we use that */ diff --git a/orc/orcmmx.h b/orc/orcmmx.h index 13395a4..deba23c 100644 --- a/orc/orcmmx.h +++ b/orc/orcmmx.h @@ -22,11 +22,18 @@ typedef enum { #define ORC_MMX_SHUF(a,b,c,d) ((((a)&3)<<6)|(((b)&3)<<4)|(((c)&3)<<2)|(((d)&3)<<0)) +ORC_API const char * orc_x86_get_regname_mmx(int i); + +ORC_API void orc_x86_emit_mov_memoffset_mmx (OrcCompiler *compiler, int size, int offset, int reg1, int reg2, int is_aligned); + +ORC_API void orc_x86_emit_mov_memindex_mmx (OrcCompiler *compiler, int size, int offset, int reg1, int regindex, int shift, int reg2, int is_aligned); + +ORC_API void orc_x86_emit_mov_mmx_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg2, int aligned, int uncached); #if 0 @@ -58,9 +65,10 @@ void orc_mmx_emit_pextrw_memoffset (OrcCompiler *p, int imm, int src, void orc_mmx_emit_shiftimm (OrcCompiler *p, const char *insn_name, int code, int modrm_code, int shift, int reg); #endif -unsigned int orc_mmx_get_cpu_flags (void); -void orc_mmx_load_constant (OrcCompiler *compiler, int reg, int size, +ORC_API unsigned int orc_mmx_get_cpu_flags (void); + +ORC_API void orc_mmx_load_constant (OrcCompiler *compiler, int reg, int size, orc_uint64 value); #endif diff --git a/orc/orcneon.h b/orc/orcneon.h index 5e0e4d0..06082b3 100644 --- a/orc/orcneon.h +++ b/orc/orcneon.h @@ -9,30 +9,30 @@ ORC_BEGIN_DECLS #ifdef ORC_ENABLE_UNSTABLE_API -const char *orc_neon_reg_name (int reg); -const char *orc_neon_reg_name_quad (int reg); - -void orc_neon_loadb (OrcCompiler *compiler, OrcVariable *var, int update); -void orc_neon_loadw (OrcCompiler *compiler, OrcVariable *var, int update); -void orc_neon_loadl (OrcCompiler *compiler, OrcVariable *var, int update); -void orc_neon_loadq (OrcCompiler *compiler, int dest, int src1, int update, int is_aligned); - -void orc_neon_load_vec_aligned (OrcCompiler *compiler, OrcVariable *var, int update); -void orc_neon_load_vec_unaligned (OrcCompiler *compiler, OrcVariable *var, int update); -void orc_neon_load_halfvec_unaligned (OrcCompiler *compiler, OrcVariable *var, int update); - -void orc_neon_neg (OrcCompiler *compiler, int dest); -void orc_neon_storeb (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); -void orc_neon_storew (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); -void orc_neon_storel (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); -void orc_neon_storeq (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); -void orc_neon_emit_loadib (OrcCompiler *p, int reg, int value); -void orc_neon_emit_loadiw (OrcCompiler *p, int reg, int value); -void orc_neon_emit_loadil (OrcCompiler *p, int reg, int value); -void orc_neon_emit_loadpb (OrcCompiler *p, int reg, int param); -void orc_neon_emit_loadpw (OrcCompiler *p, int reg, int param); -void orc_neon_emit_loadpl (OrcCompiler *p, int reg, int param); -void orc_neon_preload (OrcCompiler *compiler, OrcVariable *var, int write, +ORC_API const char *orc_neon_reg_name (int reg); +ORC_API const char *orc_neon_reg_name_quad (int reg); + +ORC_API void orc_neon_loadb (OrcCompiler *compiler, OrcVariable *var, int update); +ORC_API void orc_neon_loadw (OrcCompiler *compiler, OrcVariable *var, int update); +ORC_API void orc_neon_loadl (OrcCompiler *compiler, OrcVariable *var, int update); +ORC_API void orc_neon_loadq (OrcCompiler *compiler, int dest, int src1, int update, int is_aligned); + +ORC_API void orc_neon_load_vec_aligned (OrcCompiler *compiler, OrcVariable *var, int update); +ORC_API void orc_neon_load_vec_unaligned (OrcCompiler *compiler, OrcVariable *var, int update); +ORC_API void orc_neon_load_halfvec_unaligned (OrcCompiler *compiler, OrcVariable *var, int update); + +ORC_API void orc_neon_neg (OrcCompiler *compiler, int dest); +ORC_API void orc_neon_storeb (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); +ORC_API void orc_neon_storew (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); +ORC_API void orc_neon_storel (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); +ORC_API void orc_neon_storeq (OrcCompiler *compiler, int dest, int update, int src1, int is_aligned); +ORC_API void orc_neon_emit_loadib (OrcCompiler *p, int reg, int value); +ORC_API void orc_neon_emit_loadiw (OrcCompiler *p, int reg, int value); +ORC_API void orc_neon_emit_loadil (OrcCompiler *p, int reg, int value); +ORC_API void orc_neon_emit_loadpb (OrcCompiler *p, int reg, int param); +ORC_API void orc_neon_emit_loadpw (OrcCompiler *p, int reg, int param); +ORC_API void orc_neon_emit_loadpl (OrcCompiler *p, int reg, int param); +ORC_API void orc_neon_preload (OrcCompiler *compiler, OrcVariable *var, int write, int offset); #endif diff --git a/orc/orconce.h b/orc/orconce.h index bd8b9e5..9fd56db 100644 --- a/orc/orconce.h +++ b/orc/orconce.h @@ -2,7 +2,7 @@ #ifndef _ORC_ONCE_H_ #define _ORC_ONCE_H_ -#include +#include ORC_BEGIN_DECLS @@ -15,8 +15,8 @@ struct _OrcOnce { void *value; }; -void orc_once_mutex_lock (void); -void orc_once_mutex_unlock (void); +ORC_API void orc_once_mutex_lock (void); +ORC_API void orc_once_mutex_unlock (void); ORC_END_DECLS diff --git a/orc/orcopcode.h b/orc/orcopcode.h index 63310c9..711fd01 100644 --- a/orc/orcopcode.h +++ b/orc/orcopcode.h @@ -2,7 +2,7 @@ #ifndef _ORC_OPCODE_H_ #define _ORC_OPCODE_H_ -#include +#include #include ORC_BEGIN_DECLS @@ -45,12 +45,17 @@ struct _OrcStaticOpcode { OrcOpcodeEmulateNFunc emulateN; }; -OrcStaticOpcode * orc_opcode_find_by_name (const char *name); -void orc_opcode_init (void); -OrcOpcodeSet *orc_opcode_set_get (const char *name); -OrcOpcodeSet *orc_opcode_set_get_nth (int opcode_major); -int orc_opcode_set_find_by_name (OrcOpcodeSet *opcode_set, const char *name); -int orc_opcode_register_static (OrcStaticOpcode *sopcode, char *prefix); +ORC_API OrcStaticOpcode * orc_opcode_find_by_name (const char *name); + +ORC_API void orc_opcode_init (void); + +ORC_API OrcOpcodeSet *orc_opcode_set_get (const char *name); + +ORC_API OrcOpcodeSet *orc_opcode_set_get_nth (int opcode_major); + +ORC_API int orc_opcode_set_find_by_name (OrcOpcodeSet *opcode_set, const char *name); + +ORC_API int orc_opcode_register_static (OrcStaticOpcode *sopcode, char *prefix); ORC_END_DECLS diff --git a/orc/orcparse.h b/orc/orcparse.h index b95a267..2603d74 100644 --- a/orc/orcparse.h +++ b/orc/orcparse.h @@ -2,13 +2,13 @@ #ifndef __ORC_PARSE_H__ #define __ORC_PARSE_H__ -#include +#include ORC_BEGIN_DECLS -int orc_parse (const char *code, OrcProgram ***programs); -int orc_parse_full (const char *code, OrcProgram ***programs, char **log); -const char * orc_parse_get_init_function (OrcProgram *program); +ORC_API int orc_parse (const char *code, OrcProgram ***programs); +ORC_API int orc_parse_full (const char *code, OrcProgram ***programs, char **log); +ORC_API const char * orc_parse_get_init_function (OrcProgram *program); ORC_END_DECLS diff --git a/orc/orcpowerpc.h b/orc/orcpowerpc.h index bb6a71e..f44d4e3 100644 --- a/orc/orcpowerpc.h +++ b/orc/orcpowerpc.h @@ -101,39 +101,26 @@ void powerpc_emit_bne (OrcCompiler *compiler, int label); void powerpc_emit_label (OrcCompiler *compiler, int label); void powerpc_add_fixup (OrcCompiler *compiler, int type, unsigned char *ptr, int label); void powerpc_do_fixups (OrcCompiler *compiler); -void orc_powerpc_flush_cache (OrcCode *code); - -void powerpc_emit_srawi (OrcCompiler *compiler, int regd, int rega, int shift, - int record); -void powerpc_emit_655510 (OrcCompiler *compiler, int major, int d, int a, - int b, int minor); -void powerpc_emit_D (OrcCompiler *compiler, const char *name, - unsigned int insn, int regd, int rega, int imm); -void powerpc_emit_X (OrcCompiler *compiler, unsigned int insn, int d, int a, - int b); -void powerpc_emit_VA (OrcCompiler *compiler, const char *name, unsigned int insn, int d, int a, int b, - int c); -void powerpc_emit_VA_acb (OrcCompiler *compiler, const char *name, unsigned int insn, int d, int a, int b, - int c); -void powerpc_emit_VX (OrcCompiler *compiler, unsigned int insn, int d, int a, - int b); +ORC_API void orc_powerpc_flush_cache (OrcCode *code); + +void powerpc_emit_srawi (OrcCompiler *compiler, int regd, int rega, int shift, int record); +void powerpc_emit_655510 (OrcCompiler *compiler, int major, int d, int a, int b, int minor); +void powerpc_emit_D (OrcCompiler *compiler, const char *name, unsigned int insn, int regd, int rega, int imm); +void powerpc_emit_X (OrcCompiler *compiler, unsigned int insn, int d, int a, int b); +void powerpc_emit_VA (OrcCompiler *compiler, const char *name, unsigned int insn, int d, int a, int b, int c); +void powerpc_emit_VA_acb (OrcCompiler *compiler, const char *name, unsigned int insn, int d, int a, int b, int c); +void powerpc_emit_VX (OrcCompiler *compiler, unsigned int insn, int d, int a, int b); void powerpc_emit_VX_b (OrcCompiler *p, const char *name, unsigned int insn, int a); void powerpc_emit_VX_db (OrcCompiler *p, const char *name, unsigned int insn, int d, int b); void powerpc_emit_VX_dbi (OrcCompiler *p, const char *name, unsigned int insn, int d, int b, int imm); -void powerpc_emit_VXR (OrcCompiler *compiler, const char *name, - unsigned int insn, int d, int a, int b, int record); -void powerpc_emit_VX_2 (OrcCompiler *p, const char *name, unsigned int insn, - int d, int a, int b); -void powerpc_emit_VX_3 (OrcCompiler *p, const char *name, unsigned int insn, - int d, int a, int b, int c); -void powerpc_emit_VX_3_reg (OrcCompiler *p, const char *name, unsigned int insn, - int d, int a, int b, int c); -void powerpc_emit_VX_4 (OrcCompiler *p, const char *name, unsigned int insn, - int d, int a); -int powerpc_get_constant (OrcCompiler *p, int type, int value); -int powerpc_get_constant_full (OrcCompiler *p, int value0, int value1, int value2, int value3); -void powerpc_load_long_constant (OrcCompiler *p, int reg, orc_uint32 a, - orc_uint32 b, orc_uint32 c, orc_uint32 d); +void powerpc_emit_VXR (OrcCompiler *compiler, const char *name, unsigned int insn, int d, int a, int b, int record); +void powerpc_emit_VX_2 (OrcCompiler *p, const char *name, unsigned int insn, int d, int a, int b); +void powerpc_emit_VX_3 (OrcCompiler *p, const char *name, unsigned int insn, int d, int a, int b, int c); +void powerpc_emit_VX_3_reg (OrcCompiler *p, const char *name, unsigned int insn, int d, int a, int b, int c); +void powerpc_emit_VX_4 (OrcCompiler *p, const char *name, unsigned int insn, int d, int a); +int powerpc_get_constant (OrcCompiler *p, int type, int value); +int powerpc_get_constant_full (OrcCompiler *p, int value0, int value1, int value2, int value3); +void powerpc_load_long_constant (OrcCompiler *p, int reg, orc_uint32 a, orc_uint32 b, orc_uint32 c, orc_uint32 d); /* instructions */ #define powerpc_emit_vand(p,a,b,c) powerpc_emit_VX_2 (p, "vand", 0x10000404, a, b, c) diff --git a/orc/orcprogram.h b/orc/orcprogram.h index 436b5ed..51123e4 100644 --- a/orc/orcprogram.h +++ b/orc/orcprogram.h @@ -2,7 +2,7 @@ #ifndef _ORC_PROGRAM_H_ #define _ORC_PROGRAM_H_ -#include +#include #include #include #include @@ -105,83 +105,83 @@ struct _OrcProgram { #define ORC_DEST_VAL(p,insn,n) ((p)->vars[(insn)->dest_args[(n)]].value.i) -void orc_init (void); +ORC_API void orc_init (void); -OrcProgram * orc_program_new (void); -OrcProgram * orc_program_new_ds (int size1, int size2); -OrcProgram * orc_program_new_dss (int size1, int size2, int size3); -OrcProgram * orc_program_new_as (int size1, int size2); -OrcProgram * orc_program_new_ass (int size1, int size2, int size3); -OrcProgram * orc_program_new_from_static_bytecode (const orc_uint8 *bytecode); +ORC_API OrcProgram * orc_program_new (void); +ORC_API OrcProgram * orc_program_new_ds (int size1, int size2); +ORC_API OrcProgram * orc_program_new_dss (int size1, int size2, int size3); +ORC_API OrcProgram * orc_program_new_as (int size1, int size2); +ORC_API OrcProgram * orc_program_new_ass (int size1, int size2, int size3); +ORC_API OrcProgram * orc_program_new_from_static_bytecode (const orc_uint8 *bytecode); -const char * orc_program_get_name (OrcProgram *program); -void orc_program_set_name (OrcProgram *program, const char *name); -void orc_program_set_line (OrcProgram *program, unsigned int line); -void orc_program_set_2d (OrcProgram *program); -void orc_program_set_constant_n (OrcProgram *program, int n); -void orc_program_set_n_multiple (OrcProgram *ex, int n); -void orc_program_set_n_minimum (OrcProgram *ex, int n); -void orc_program_set_n_maximum (OrcProgram *ex, int n); -void orc_program_set_constant_m (OrcProgram *program, int m); +ORC_API const char * orc_program_get_name (OrcProgram *program); +ORC_API void orc_program_set_name (OrcProgram *program, const char *name); +ORC_API void orc_program_set_line (OrcProgram *program, unsigned int line); +ORC_API void orc_program_set_2d (OrcProgram *program); +ORC_API void orc_program_set_constant_n (OrcProgram *program, int n); +ORC_API void orc_program_set_n_multiple (OrcProgram *ex, int n); +ORC_API void orc_program_set_n_minimum (OrcProgram *ex, int n); +ORC_API void orc_program_set_n_maximum (OrcProgram *ex, int n); +ORC_API void orc_program_set_constant_m (OrcProgram *program, int m); -void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int arg1, int arg2); -void orc_program_append_2 (OrcProgram *program, const char *name, +ORC_API void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int arg1, int arg2); +ORC_API void orc_program_append_2 (OrcProgram *program, const char *name, unsigned int flags, int arg0, int arg1, int arg2, int arg3); -void orc_program_append_str (OrcProgram *p, const char *opcode, +ORC_API void orc_program_append_str (OrcProgram *p, const char *opcode, const char * arg0, const char * arg1, const char * arg2); -void orc_program_append_str_2 (OrcProgram *program, const char *name, +ORC_API void orc_program_append_str_2 (OrcProgram *program, const char *name, unsigned int flags, const char *arg1, const char *arg2, const char *arg3, const char *arg4); -void orc_program_append_ds (OrcProgram *program, const char *opcode, int arg0, +ORC_API void orc_program_append_ds (OrcProgram *program, const char *opcode, int arg0, int arg1); -void orc_program_append_ds_str (OrcProgram *p, const char *opcode, +ORC_API void orc_program_append_ds_str (OrcProgram *p, const char *opcode, const char * arg0, const char * arg1); -void orc_program_append_dds_str (OrcProgram *program, const char *name, +ORC_API void orc_program_append_dds_str (OrcProgram *program, const char *name, const char *arg1, const char *arg2, const char *arg3); -OrcCompileResult orc_program_compile (OrcProgram *p); -OrcCompileResult orc_program_compile_for_target (OrcProgram *p, OrcTarget *target); -OrcCompileResult orc_program_compile_full (OrcProgram *p, OrcTarget *target, +ORC_API OrcCompileResult orc_program_compile (OrcProgram *p); +ORC_API OrcCompileResult orc_program_compile_for_target (OrcProgram *p, OrcTarget *target); +ORC_API OrcCompileResult orc_program_compile_full (OrcProgram *p, OrcTarget *target, unsigned int flags); -void orc_program_set_backup_function (OrcProgram *p, OrcExecutorFunc func); -void orc_program_set_backup_name (OrcProgram *p, const char *name); -void orc_program_free (OrcProgram *program); +ORC_API void orc_program_set_backup_function (OrcProgram *p, OrcExecutorFunc func); +ORC_API void orc_program_set_backup_name (OrcProgram *p, const char *name); +ORC_API void orc_program_free (OrcProgram *program); -int orc_program_find_var_by_name (OrcProgram *program, const char *name); +ORC_API int orc_program_find_var_by_name (OrcProgram *program, const char *name); -int orc_program_add_temporary (OrcProgram *program, int size, const char *name); -int orc_program_dup_temporary (OrcProgram *program, int i, int j); -int orc_program_add_source (OrcProgram *program, int size, const char *name); -int orc_program_add_source_full (OrcProgram *program, int size, const char *name, +ORC_API int orc_program_add_temporary (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_dup_temporary (OrcProgram *program, int i, int j); +ORC_API int orc_program_add_source (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_source_full (OrcProgram *program, int size, const char *name, const char *type_name, int alignment); -int orc_program_add_destination (OrcProgram *program, int size, const char *name); -int orc_program_add_destination_full (OrcProgram *program, int size, const char *name, +ORC_API int orc_program_add_destination (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_destination_full (OrcProgram *program, int size, const char *name, const char *type_name, int alignment); -int orc_program_add_constant (OrcProgram *program, int size, int value, const char *name); -int orc_program_add_constant_int64 (OrcProgram *program, int size, orc_int64 value, const char *name); -int orc_program_add_constant_float (OrcProgram *program, int size, float value, const char *name); -int orc_program_add_constant_double (OrcProgram *program, int size, double value, const char *name); -int orc_program_add_constant_str (OrcProgram *program, int size, const char *value, const char *name); -int orc_program_add_parameter (OrcProgram *program, int size, const char *name); -int orc_program_add_parameter_float (OrcProgram *program, int size, const char *name); -int orc_program_add_parameter_double (OrcProgram *program, int size, const char *name); -int orc_program_add_parameter_int64 (OrcProgram *program, int size, const char *name); -int orc_program_add_accumulator (OrcProgram *program, int size, const char *name); -void orc_program_set_type_name (OrcProgram *program, int var, const char *type_name); -void orc_program_set_var_alignment (OrcProgram *program, int var, int alignment); -void orc_program_set_sampling_type (OrcProgram *program, int var, int sampling_type); - -int orc_program_allocate_register (OrcProgram *program, int is_data); - -void orc_program_reset (OrcProgram *program); -OrcCode *orc_program_take_code (OrcProgram *program); - -const char *orc_program_get_asm_code (OrcProgram *program); -const char * orc_program_get_error (OrcProgram *program); -void orc_program_set_error (OrcProgram *program, const char *error); - -int orc_program_get_max_array_size (OrcProgram *program); -int orc_program_get_max_accumulator_size (OrcProgram *program); +ORC_API int orc_program_add_constant (OrcProgram *program, int size, int value, const char *name); +ORC_API int orc_program_add_constant_int64 (OrcProgram *program, int size, orc_int64 value, const char *name); +ORC_API int orc_program_add_constant_float (OrcProgram *program, int size, float value, const char *name); +ORC_API int orc_program_add_constant_double (OrcProgram *program, int size, double value, const char *name); +ORC_API int orc_program_add_constant_str (OrcProgram *program, int size, const char *value, const char *name); +ORC_API int orc_program_add_parameter (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_parameter_float (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_parameter_double (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_parameter_int64 (OrcProgram *program, int size, const char *name); +ORC_API int orc_program_add_accumulator (OrcProgram *program, int size, const char *name); +ORC_API void orc_program_set_type_name (OrcProgram *program, int var, const char *type_name); +ORC_API void orc_program_set_var_alignment (OrcProgram *program, int var, int alignment); +ORC_API void orc_program_set_sampling_type (OrcProgram *program, int var, int sampling_type); + +ORC_API int orc_program_allocate_register (OrcProgram *program, int is_data); + +ORC_API void orc_program_reset (OrcProgram *program); +ORC_API OrcCode *orc_program_take_code (OrcProgram *program); + +ORC_API const char *orc_program_get_asm_code (OrcProgram *program); +ORC_API const char * orc_program_get_error (OrcProgram *program); +ORC_API void orc_program_set_error (OrcProgram *program, const char *error); + +ORC_API int orc_program_get_max_array_size (OrcProgram *program); +ORC_API int orc_program_get_max_accumulator_size (OrcProgram *program); ORC_END_DECLS diff --git a/orc/orcrule.h b/orc/orcrule.h index 35b1cce..50cca45 100644 --- a/orc/orcrule.h +++ b/orc/orcrule.h @@ -2,7 +2,7 @@ #ifndef _ORC_RULE_H_ #define _ORC_RULE_H_ -#include +#include #include #include @@ -39,9 +39,10 @@ struct _OrcRuleSet { int n_rules; }; -OrcRuleSet * orc_rule_set_new (OrcOpcodeSet *opcode_set, OrcTarget *target, +ORC_API OrcRuleSet * orc_rule_set_new (OrcOpcodeSet *opcode_set, OrcTarget *target, unsigned int required_flags); -void orc_rule_register (OrcRuleSet *rule_set, const char *opcode_name, + +ORC_API void orc_rule_register (OrcRuleSet *rule_set, const char *opcode_name, OrcRuleEmitFunc emit, void *emit_user); diff --git a/orc/orcrules-mips.c b/orc/orcrules-mips.c index 551484b..5429b3f 100644 --- a/orc/orcrules-mips.c +++ b/orc/orcrules-mips.c @@ -26,6 +26,7 @@ POSSIBILITY OF SUCH DAMAGE. */ +#include "config.h" #include #include diff --git a/orc/orcsse.h b/orc/orcsse.h index 7b130bf..dd3b98f 100644 --- a/orc/orcsse.h +++ b/orc/orcsse.h @@ -2,6 +2,7 @@ #ifndef _ORC_SSE_H_ #define _ORC_SSE_H_ +#include #include #include @@ -30,23 +31,23 @@ typedef enum { #define ORC_SSE_SHUF(a,b,c,d) ((((a)&3)<<6)|(((b)&3)<<4)|(((c)&3)<<2)|(((d)&3)<<0)) -const char * orc_x86_get_regname_sse(int i); -void orc_x86_emit_mov_memoffset_sse (OrcCompiler *compiler, int size, int offset, +ORC_API const char * orc_x86_get_regname_sse(int i); +ORC_API void orc_x86_emit_mov_memoffset_sse (OrcCompiler *compiler, int size, int offset, int reg1, int reg2, int is_aligned); -void orc_x86_emit_mov_memindex_sse (OrcCompiler *compiler, int size, int offset, +ORC_API void orc_x86_emit_mov_memindex_sse (OrcCompiler *compiler, int size, int offset, int reg1, int regindex, int shift, int reg2, int is_aligned); -void orc_x86_emit_mov_sse_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, +ORC_API void orc_x86_emit_mov_sse_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg2, int aligned, int uncached); -void orc_sse_set_mxcsr (OrcCompiler *compiler); -void orc_sse_restore_mxcsr (OrcCompiler *compiler); +ORC_API void orc_sse_set_mxcsr (OrcCompiler *compiler); +ORC_API void orc_sse_restore_mxcsr (OrcCompiler *compiler); -void orc_sse_load_constant (OrcCompiler *compiler, int reg, int size, +ORC_API void orc_sse_load_constant (OrcCompiler *compiler, int reg, int size, orc_uint64 value); #endif -unsigned int orc_sse_get_cpu_flags (void); +ORC_API unsigned int orc_sse_get_cpu_flags (void); ORC_END_DECLS diff --git a/orc/orctarget.h b/orc/orctarget.h index 7fae37b..d523a5e 100644 --- a/orc/orctarget.h +++ b/orc/orctarget.h @@ -2,7 +2,7 @@ #ifndef _ORC_TARGET_H_ #define _ORC_TARGET_H_ -#include +#include #include #include @@ -88,19 +88,21 @@ struct _OrcTarget { }; -OrcRule * orc_target_get_rule (OrcTarget *target, OrcStaticOpcode *opcode, - unsigned int target_flags); -OrcTarget * orc_target_get_default (void); -unsigned int orc_target_get_default_flags (OrcTarget *target); -const char * orc_target_get_name (OrcTarget *target); -const char * orc_target_get_flag_name (OrcTarget *target, int shift); +ORC_API OrcRule * orc_target_get_rule (OrcTarget *target, + OrcStaticOpcode *opcode, + unsigned int target_flags); -const char *orc_target_get_asm_preamble (const char *target); -const char * orc_target_get_preamble (OrcTarget *target); -const char * orc_target_c_get_typedefs (void); +ORC_API OrcTarget * orc_target_get_default (void); +ORC_API unsigned int orc_target_get_default_flags (OrcTarget *target); +ORC_API const char * orc_target_get_name (OrcTarget *target); +ORC_API const char * orc_target_get_flag_name (OrcTarget *target, int shift); -void orc_target_register (OrcTarget *target); -OrcTarget *orc_target_get_by_name (const char *target_name); +ORC_API const char * orc_target_get_asm_preamble (const char *target); +ORC_API const char * orc_target_get_preamble (OrcTarget *target); +ORC_API const char * orc_target_c_get_typedefs (void); + +ORC_API void orc_target_register (OrcTarget *target); +ORC_API OrcTarget * orc_target_get_by_name (const char *target_name); ORC_END_DECLS diff --git a/orc/orcutils.h b/orc/orcutils.h index 177cd90..a56f520 100644 --- a/orc/orcutils.h +++ b/orc/orcutils.h @@ -214,6 +214,7 @@ ORC_BEGIN_DECLS #ifdef ORC_ENABLE_UNSTABLE_API +/* FIXME: remove, these are internal functions that were never exported */ #if defined(__arm__) || defined(__mips__) char * get_proc_cpuinfo (void); #endif @@ -224,8 +225,9 @@ char * get_tag_value (char *s, const char *tag); orc_int64 _strtoll (const char *nptr, char **endptr, int base); -void orc_global_mutex_lock (void); -void orc_global_mutex_unlock (void); +/* FIXME: why are these exported ? */ +ORC_API void orc_global_mutex_lock (void); +ORC_API void orc_global_mutex_unlock (void); #endif diff --git a/orc/orcx86.h b/orc/orcx86.h index f51f544..7f50b67 100644 --- a/orc/orcx86.h +++ b/orc/orcx86.h @@ -45,16 +45,16 @@ enum { ORC_X86_K10 }; -const char * orc_x86_get_regname(int i); -int orc_x86_get_regnum(int i); -const char * orc_x86_get_regname_8(int i); -const char * orc_x86_get_regname_16(int i); -const char * orc_x86_get_regname_64(int i); -const char * orc_x86_get_regname_ptr(OrcCompiler *compiler, int i); -const char * orc_x86_get_regname_size(int i, int size); +ORC_API const char * orc_x86_get_regname(int i); +ORC_API int orc_x86_get_regnum(int i); +ORC_API const char * orc_x86_get_regname_8(int i); +ORC_API const char * orc_x86_get_regname_16(int i); +ORC_API const char * orc_x86_get_regname_64(int i); +ORC_API const char * orc_x86_get_regname_ptr(OrcCompiler *compiler, int i); +ORC_API const char * orc_x86_get_regname_size(int i, int size); -void orc_x86_emit_push (OrcCompiler *compiler, int size, int reg); -void orc_x86_emit_pop (OrcCompiler *compiler, int size, int reg); +ORC_API void orc_x86_emit_push (OrcCompiler *compiler, int size, int reg); +ORC_API void orc_x86_emit_pop (OrcCompiler *compiler, int size, int reg); #define orc_x86_emit_mov_imm_reg(p,size,value,reg) \ orc_x86_emit_cpuinsn_imm_reg (p, ORC_X86_mov_imm32_r, size, value, reg) @@ -129,65 +129,66 @@ void orc_x86_emit_pop (OrcCompiler *compiler, int size, int reg); orc_x86_emit_cpuinsn_imm_memoffset (p, ORC_X86_test_imm, size, value, \ offset, dest) -void orc_x86_emit_mov_memoffset_reg (OrcCompiler *compiler, int size, int offset, int reg1, int reg2); -void orc_x86_emit_mov_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg2); -void orc_x86_emit_dec_memoffset (OrcCompiler *compiler, int size, int offset, int reg); -void orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, orc_bool record); -void orc_x86_emit_add_reg_reg_shift (OrcCompiler *compiler, int size, int reg1, int reg2, int shift); -void orc_x86_emit_cmp_imm_memoffset (OrcCompiler *compiler, int size, int value, - int offset, int reg); -void orc_x86_emit_cmp_imm_reg (OrcCompiler *compiler, int size, int value, int reg); -void orc_x86_emit_rep_movs (OrcCompiler *compiler, int size); -void orc_x86_emit_prologue (OrcCompiler *compiler); -void orc_x86_emit_epilogue (OrcCompiler *compiler); - -void orc_x86_emit_rex (OrcCompiler *compiler, int size, int reg1, int reg2, int reg3); -void orc_x86_emit_modrm_memoffset_old (OrcCompiler *compiler, int reg1, int offset, int reg2); -void orc_x86_emit_modrm_memoffset (OrcCompiler *compiler, int offset, int reg1, int reg2); -void orc_x86_emit_modrm_reg (OrcCompiler *compiler, int reg1, int reg2); -void orc_x86_emit_modrm_memindex (OrcCompiler *compiler, int reg1, int offset, +ORC_API void orc_x86_emit_mov_memoffset_reg (OrcCompiler *compiler, int size, int offset, int reg1, int reg2); +ORC_API void orc_x86_emit_mov_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg2); +ORC_API void orc_x86_emit_dec_memoffset (OrcCompiler *compiler, int size, int offset, int reg); +ORC_API void orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, orc_bool record); +ORC_API void orc_x86_emit_add_reg_reg_shift (OrcCompiler *compiler, int size, int reg1, int reg2, int shift); +ORC_API void orc_x86_emit_cmp_imm_memoffset (OrcCompiler *compiler, int size, int value, int offset, int reg); +ORC_API void orc_x86_emit_cmp_imm_reg (OrcCompiler *compiler, int size, int value, int reg); +ORC_API void orc_x86_emit_rep_movs (OrcCompiler *compiler, int size); +ORC_API void orc_x86_emit_prologue (OrcCompiler *compiler); +ORC_API void orc_x86_emit_epilogue (OrcCompiler *compiler); + +ORC_API void orc_x86_emit_rex (OrcCompiler *compiler, int size, int reg1, int reg2, int reg3); +ORC_API void orc_x86_emit_modrm_memoffset_old (OrcCompiler *compiler, int reg1, int offset, int reg2); +ORC_API void orc_x86_emit_modrm_memoffset (OrcCompiler *compiler, int offset, int reg1, int reg2); +ORC_API void orc_x86_emit_modrm_reg (OrcCompiler *compiler, int reg1, int reg2); +ORC_API void orc_x86_emit_modrm_memindex (OrcCompiler *compiler, int reg1, int offset, int reg2, int regindex, int shift); -void orc_x86_emit_modrm_memindex2 (OrcCompiler *compiler, int offset, +ORC_API void orc_x86_emit_modrm_memindex2 (OrcCompiler *compiler, int offset, int src, int src_index, int shift, int dest); +/* FIXME: remove from public header, these were never exported */ void x86_add_fixup (OrcCompiler *compiler, unsigned char *ptr, int label, int type); void x86_add_label (OrcCompiler *compiler, unsigned char *ptr, int label); void x86_add_label2 (OrcCompiler *compiler, int index, int label); -void orc_x86_do_fixups (OrcCompiler *compiler); -int orc_x86_assemble_copy_check (OrcCompiler *compiler); -void orc_x86_assemble_copy (OrcCompiler *compiler); +ORC_API void orc_x86_do_fixups (OrcCompiler *compiler); -void orc_x86_emit_cpuinsn_size (OrcCompiler *p, int opcode, int size, +ORC_API int orc_x86_assemble_copy_check (OrcCompiler *compiler); +ORC_API void orc_x86_assemble_copy (OrcCompiler *compiler); + +ORC_API void orc_x86_emit_cpuinsn_size (OrcCompiler *p, int opcode, int size, int src, int dest); -void orc_x86_emit_cpuinsn_imm (OrcCompiler *p, int opcode, int imm, +ORC_API void orc_x86_emit_cpuinsn_imm (OrcCompiler *p, int opcode, int imm, int src, int dest); -void orc_x86_emit_cpuinsn_load_memoffset (OrcCompiler *p, int size, int index, +ORC_API void orc_x86_emit_cpuinsn_load_memoffset (OrcCompiler *p, int size, int index, int offset, int src, int dest, int imm); -void orc_x86_emit_cpuinsn_store_memoffset (OrcCompiler *p, int size, int index, +ORC_API void orc_x86_emit_cpuinsn_store_memoffset (OrcCompiler *p, int size, int index, int src, int offset, int dest, int imm); -void orc_x86_emit_cpuinsn_load_memindex (OrcCompiler *p, int index, int size, +ORC_API void orc_x86_emit_cpuinsn_load_memindex (OrcCompiler *p, int index, int size, int imm, int offset, int src, int src_index, int shift, int dest); -void orc_x86_emit_cpuinsn_load_register (OrcCompiler *p, int index, int imm, +ORC_API void orc_x86_emit_cpuinsn_load_register (OrcCompiler *p, int index, int imm, int src, int dest); -void orc_x86_emit_cpuinsn_imm_reg (OrcCompiler *p, int index, int size, int imm, +ORC_API void orc_x86_emit_cpuinsn_imm_reg (OrcCompiler *p, int index, int size, int imm, int dest); -void orc_x86_emit_cpuinsn_imm_memoffset (OrcCompiler *p, int index, int size, +ORC_API void orc_x86_emit_cpuinsn_imm_memoffset (OrcCompiler *p, int index, int size, int imm, int offset, int dest); -void orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src, +ORC_API void orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src, int offset, int dest); -void orc_x86_emit_cpuinsn_reg_memoffset_8 (OrcCompiler *p, int index, int src, +ORC_API void orc_x86_emit_cpuinsn_reg_memoffset_8 (OrcCompiler *p, int index, int src, int offset, int dest); -void orc_x86_emit_cpuinsn_reg_memoffset_s (OrcCompiler *p, int index, int size, +ORC_API void orc_x86_emit_cpuinsn_reg_memoffset_s (OrcCompiler *p, int index, int size, int src, int offset, int dest); -void orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size, +ORC_API void orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size, int offset, int src, int dest); -void orc_x86_emit_cpuinsn_memoffset (OrcCompiler *p, int index, int size, +ORC_API void orc_x86_emit_cpuinsn_memoffset (OrcCompiler *p, int index, int size, int offset, int srcdest); -void orc_x86_emit_cpuinsn_branch (OrcCompiler *p, int index, int label); -void orc_x86_emit_cpuinsn_label (OrcCompiler *p, int index, int label); -void orc_x86_emit_cpuinsn_none (OrcCompiler *p, int index); -void orc_x86_emit_cpuinsn_align (OrcCompiler *p, int index, int align_shift); +ORC_API void orc_x86_emit_cpuinsn_branch (OrcCompiler *p, int index, int label); +ORC_API void orc_x86_emit_cpuinsn_label (OrcCompiler *p, int index, int label); +ORC_API void orc_x86_emit_cpuinsn_none (OrcCompiler *p, int index); +ORC_API void orc_x86_emit_cpuinsn_align (OrcCompiler *p, int index, int align_shift); #endif diff --git a/orc/orcx86insn.h b/orc/orcx86insn.h index d109c95..544f911 100644 --- a/orc/orcx86insn.h +++ b/orc/orcx86insn.h @@ -2,6 +2,7 @@ #ifndef ORC_ORC_X86_INSN_H_ #define ORC_ORC_X86_INSN_H_ +#include #include ORC_BEGIN_DECLS @@ -301,9 +302,9 @@ struct _OrcX86Insn { int code_offset; }; -OrcX86Insn * orc_x86_get_output_insn (OrcCompiler *p); -void orc_x86_output_insns (OrcCompiler *p); -void orc_x86_calculate_offsets (OrcCompiler *p); +ORC_API OrcX86Insn * orc_x86_get_output_insn (OrcCompiler *p); +ORC_API void orc_x86_output_insns (OrcCompiler *p); +ORC_API void orc_x86_calculate_offsets (OrcCompiler *p); -- 2.7.4