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 \
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
'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',
#ifndef _ORC_ORC_H_
#define _ORC_ORC_H_
+#ifndef ORC_API
+#define ORC_API extern
+#endif
+
+#include <orc/orcutils.h>
#include <orc/orcprogram.h>
#include <orc/orcdebug.h>
#include <orc/orcfunctions.h>
#include <orc/orconce.h>
#include <orc/orcparse.h>
-#include <orc/orcutils.h>
#include <orc/orccpu.h>
-const char * orc_version_string (void);
+ORC_API const char * orc_version_string (void);
#endif
#ifndef _ORC_ARM_H_
#define _ORC_ARM_H_
-#include <orc/orcprogram.h>
+#include <orc/orc.h>
ORC_BEGIN_DECLS
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 */
#ifndef _ORC_BYTECODE_H_
#define _ORC_BYTECODE_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orcbytecodes.h>
ORC_BEGIN_DECLS
#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
#ifndef _ORC_CODE_H_
#define _ORC_CODE_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
#include <orc/orcexecutor.h>
#include <orc/orcinstruction.h>
};
-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
#ifndef _ORC_COMPILER_H_
#define _ORC_COMPILER_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
#include <orc/orcexecutor.h>
#include <orc/orccode.h>
};
-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;
#ifndef _ORC_CPU_H_
#define _ORC_CPU_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
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
#define _ORC_DEBUG_H_
#include <stdarg.h>
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <stdlib.h>
ORC_BEGIN_DECLS
} \
} 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
#ifndef _ORC_EXECUTOR_H_
#define _ORC_EXECUTOR_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
ORC_BEGIN_DECLS
-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
#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
}
#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);
POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include <orc/orcmips.h>
#include <orc/orcdebug.h>
#ifndef _ORC_MIPS_H_
#define _ORC_MIPS_H_
-#include <orc/orcutils.h>
-#include <orc/orcprogram.h>
+#include <orc/orc.h>
ORC_BEGIN_DECLS
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,
#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 */
#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
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
#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
#ifndef _ORC_ONCE_H_
#define _ORC_ONCE_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
ORC_BEGIN_DECLS
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
#ifndef _ORC_OPCODE_H_
#define _ORC_OPCODE_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
ORC_BEGIN_DECLS
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
#ifndef __ORC_PARSE_H__
#define __ORC_PARSE_H__
-#include <orc/orcutils.h>
+#include <orc/orc.h>
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
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)
#ifndef _ORC_PROGRAM_H_
#define _ORC_PROGRAM_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
#include <orc/orcexecutor.h>
#include <orc/orccode.h>
#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
#ifndef _ORC_RULE_H_
#define _ORC_RULE_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
#include <orc/orcopcode.h>
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);
POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config.h"
#include <orc/orcmips.h>
#include <orc/orcdebug.h>
#ifndef _ORC_SSE_H_
#define _ORC_SSE_H_
+#include <orc/orc.h>
#include <orc/orcx86.h>
#include <orc/orcx86insn.h>
#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
#ifndef _ORC_TARGET_H_
#define _ORC_TARGET_H_
-#include <orc/orcutils.h>
+#include <orc/orc.h>
#include <orc/orclimits.h>
#include <orc/orcrule.h>
};
-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
#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
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
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)
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
#ifndef ORC_ORC_X86_INSN_H_
#define ORC_ORC_X86_INSN_H_
+#include <orc/orc.h>
#include <orc/orccpuinsn.h>
ORC_BEGIN_DECLS
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);