orc.h   orc.h 
#ifndef _ORC_ORC_H_ #ifndef _ORC_ORC_H_
#define _ORC_ORC_H_ #define _ORC_ORC_H_
#include <orc/orcprogram.h> #include <orc/orcprogram.h>
#include <orc/orc-stdint.h>
#include <orc/orcarm.h>
#include <orc/orcdebug.h> #include <orc/orcdebug.h>
#include <orc/orcfunctions.h> #include <orc/orcfunctions.h>
#include <orc/orcmmx.h>
#include <orc/orconce.h> #include <orc/orconce.h>
#include <orc/orcparse.h> #include <orc/orcparse.h>
#include <orc/orcprogram.h> #include <orc/orcprogram.h>
#include <orc/orcsse.h>
#include <orc/orcutils.h> #include <orc/orcutils.h>
#include <orc/orcx86.h> #include <orc/orccpu.h>
#include <orc/orcpowerpc.h>
#endif #endif
 End of changes. 4 change blocks. 
6 lines changed or deleted 1 lines changed or added


 orcarray.h   orcarray.h 
skipping to change at line 21 skipping to change at line 21
typedef struct _OrcArray OrcArray; typedef struct _OrcArray OrcArray;
struct _OrcArray { struct _OrcArray {
void *data; void *data;
int stride; int stride;
int element_size; int element_size;
int n,m; int n,m;
void *alloc_data; void *alloc_data;
int alloc_len; int alloc_len;
void *aligned_data;
}; };
enum { enum {
ORC_PATTERN_RANDOM = 0, ORC_PATTERN_RANDOM = 0,
ORC_PATTERN_FLOAT_SMALL, ORC_PATTERN_FLOAT_SMALL,
ORC_PATTERN_FLOAT_SPECIAL, ORC_PATTERN_FLOAT_SPECIAL,
ORC_PATTERN_FLOAT_DENORMAL ORC_PATTERN_FLOAT_DENORMAL
}; };
OrcArray *orc_array_new (int n, int m, int element_size, int misalignment, OrcArray *orc_array_new (int n, int m, int element_size, int misalignment,
 End of changes. 1 change blocks. 
0 lines changed or deleted 1 lines changed or added


 orcdebug.h   orcdebug.h 
skipping to change at line 33 skipping to change at line 33
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef _ORC_DEBUG_H_ #ifndef _ORC_DEBUG_H_
#define _ORC_DEBUG_H_ #define _ORC_DEBUG_H_
#include <stdarg.h> #include <stdarg.h>
#include <orc/orcutils.h> #include <orc/orcutils.h>
#include <stdlib.h>
ORC_BEGIN_DECLS ORC_BEGIN_DECLS
/** /**
* OrcDebugPrintFunc: * OrcDebugPrintFunc:
* @level: the debug level * @level: the debug level
* @file: name of the file where the debug message occurs * @file: name of the file where the debug message occurs
* @func: name of the function where the debug message occurs * @func: name of the function where the debug message occurs
* @line: line in the file where the debug message occurs * @line: line in the file where the debug message occurs
* @format: a printf format * @format: a printf format
 End of changes. 1 change blocks. 
0 lines changed or deleted 1 lines changed or added


 orcmmx.h   orcmmx.h 
#ifndef _ORC_MMX_H_ #ifndef _ORC_MMX_H_
#define _ORC_MMX_H_ #define _ORC_MMX_H_
#include <orc/orcx86.h> #include <orc/orcx86.h>
#include <orc/orcx86insn.h> #include <orc/orcx86insn.h>
ORC_BEGIN_DECLS ORC_BEGIN_DECLS
typedef enum {
ORC_TARGET_MMX_MMX = (1<<0),
ORC_TARGET_MMX_MMXEXT = (1<<1),
ORC_TARGET_MMX_3DNOW = (1<<2),
ORC_TARGET_MMX_3DNOWEXT = (1<<3),
ORC_TARGET_MMX_SSSE3 = (1<<4),
ORC_TARGET_MMX_SSE4_1 = (1<<5),
ORC_TARGET_MMX_SSE4_2 = (1<<6),
ORC_TARGET_MMX_FRAME_POINTER = (1<<7),
ORC_TARGET_MMX_SHORT_JUMPS = (1<<8),
ORC_TARGET_MMX_64BIT = (1<<9)
} OrcTargetMMXFlags;
#ifdef ORC_ENABLE_UNSTABLE_API #ifdef ORC_ENABLE_UNSTABLE_API
typedef enum { typedef enum {
X86_MM0 = ORC_VEC_REG_BASE, X86_MM0 = ORC_VEC_REG_BASE,
X86_MM1, X86_MM1,
X86_MM2, X86_MM2,
X86_MM3, X86_MM3,
X86_MM4, X86_MM4,
X86_MM5, X86_MM5,
X86_MM6, X86_MM6,
 End of changes. 1 change blocks. 
13 lines changed or deleted 0 lines changed or added


 orcpowerpc.h   orcpowerpc.h 
#ifndef _ORC_POWERPC_H_ #ifndef _ORC_POWERPC_H_
#define _ORC_POWERPC_H_ #define _ORC_POWERPC_H_
#include <orc/orcprogram.h> #include <orc/orcprogram.h>
ORC_BEGIN_DECLS ORC_BEGIN_DECLS
typedef enum {
ORC_TARGET_POWERPC_64BIT = (1<<0)
} OrcTargetPowerPCFlags;
#ifdef ORC_ENABLE_UNSTABLE_API #ifdef ORC_ENABLE_UNSTABLE_API
enum { enum {
POWERPC_R0 = ORC_GP_REG_BASE, POWERPC_R0 = ORC_GP_REG_BASE,
POWERPC_R1, POWERPC_R1,
POWERPC_R2, POWERPC_R2,
POWERPC_R3, POWERPC_R3,
POWERPC_R4, POWERPC_R4,
POWERPC_R5, POWERPC_R5,
POWERPC_R6, POWERPC_R6,
skipping to change at line 89 skipping to change at line 93
int powerpc_regnum (int i); int powerpc_regnum (int i);
void powerpc_emit(OrcCompiler *compiler, unsigned int insn); void powerpc_emit(OrcCompiler *compiler, unsigned int insn);
void powerpc_emit_add (OrcCompiler *compiler, int regd, int rega, int regb) ; void powerpc_emit_add (OrcCompiler *compiler, int regd, int rega, int regb) ;
void powerpc_emit_addi_rec (OrcCompiler *compiler, int regd, int rega, int imm); void powerpc_emit_addi_rec (OrcCompiler *compiler, int regd, int rega, int imm);
void powerpc_emit_addi (OrcCompiler *compiler, int regd, int rega, int imm) ; void powerpc_emit_addi (OrcCompiler *compiler, int regd, int rega, int imm) ;
void powerpc_emit_lwz (OrcCompiler *compiler, int regd, int rega, int imm); void powerpc_emit_lwz (OrcCompiler *compiler, int regd, int rega, int imm);
void powerpc_emit_stw (OrcCompiler *compiler, int regs, int rega, int offse t); void powerpc_emit_stw (OrcCompiler *compiler, int regs, int rega, int offse t);
void powerpc_emit_stwu (OrcCompiler *compiler, int regs, int rega, int offs et); void powerpc_emit_stwu (OrcCompiler *compiler, int regs, int rega, int offs et);
void powerpc_emit_ld (OrcCompiler *compiler, int regd, int rega, int imm);
void powerpc_emit_std (OrcCompiler *compiler, int regs, int rega, int offse
t);
void powerpc_emit_stdu (OrcCompiler *compiler, int regs, int rega, int offs
et);
void powerpc_emit_ret (OrcCompiler *compiler); void powerpc_emit_ret (OrcCompiler *compiler);
void powerpc_emit_b (OrcCompiler *compiler, int label); void powerpc_emit_b (OrcCompiler *compiler, int label);
void powerpc_emit_beq (OrcCompiler *compiler, int label); void powerpc_emit_beq (OrcCompiler *compiler, int label);
void powerpc_emit_bne (OrcCompiler *compiler, int label); void powerpc_emit_bne (OrcCompiler *compiler, int label);
void powerpc_emit_label (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_add_fixup (OrcCompiler *compiler, int type, unsigned char *ptr , int label);
void powerpc_do_fixups (OrcCompiler *compiler); void powerpc_do_fixups (OrcCompiler *compiler);
void orc_powerpc_flush_cache (OrcCode *code); void orc_powerpc_flush_cache (OrcCode *code);
 End of changes. 2 change blocks. 
0 lines changed or deleted 9 lines changed or added


 orcprogram.h   orcprogram.h 
#ifndef _ORC_PROGRAM_H_ #ifndef _ORC_PROGRAM_H_
#define _ORC_PROGRAM_H_ #define _ORC_PROGRAM_H_
#include <orc/orcutils.h> #include <orc/orcutils.h>
#include <orc/orclimits.h>
#include <orc/orcexecutor.h>
#include <orc/orccode.h>
#include <orc/orcbytecode.h>
#include <orc/orccompiler.h>
#include <orc/orctarget.h>
#include <orc/orcrule.h>
ORC_BEGIN_DECLS ORC_BEGIN_DECLS
typedef struct _OrcOpcodeExecutor OrcOpcodeExecutor;
typedef struct _OrcExecutor OrcExecutor;
typedef struct _OrcExecutorAlt OrcExecutorAlt;
typedef struct _OrcVariable OrcVariable;
typedef struct _OrcOpcodeSet OrcOpcodeSet;
typedef struct _OrcStaticOpcode OrcStaticOpcode;
typedef struct _OrcInstruction OrcInstruction;
typedef struct _OrcProgram OrcProgram;
typedef struct _OrcCompiler OrcCompiler;
typedef struct _OrcRule OrcRule;
typedef struct _OrcRuleSet OrcRuleSet;
typedef struct _OrcConstant OrcConstant;
typedef struct _OrcFixup OrcFixup;
typedef struct _OrcTarget OrcTarget;
typedef struct _OrcCode OrcCode;
typedef struct _OrcCodeChunk OrcCodeChunk;
typedef void (*OrcOpcodeEmulateFunc)(OrcOpcodeExecutor *ex, void *user);
typedef void (*OrcOpcodeEmulateNFunc)(OrcOpcodeExecutor *ex, int index, int
n);
typedef void (*OrcOpcodeEmulate16Func)(OrcOpcodeExecutor *ex);
typedef void (*OrcRuleEmitFunc)(OrcCompiler *p, void *user, OrcInstruction
*insn);
typedef void (*OrcExecutorFunc)(OrcExecutor *ex);
#define ORC_N_REGS (32*4)
#define ORC_N_INSNS 100
#define ORC_N_VARIABLES 64
#define ORC_N_ARRAYS 12
#define ORC_N_REGISTERS 20
#define ORC_N_FIXUPS 100
#define ORC_N_CONSTANTS 20
#define ORC_N_LABELS 40
#define ORC_N_COMPILER_VARIABLES (ORC_N_VARIABLES+32)
#define ORC_GP_REG_BASE 32
#define ORC_VEC_REG_BASE 64
#define ORC_REG_INVALID 0
#define ORC_STATIC_OPCODE_N_SRC 4
#define ORC_STATIC_OPCODE_N_DEST 2
#define ORC_OPCODE_N_ARGS 4
#define ORC_N_TARGETS 10
#define ORC_N_RULE_SETS 10
#define ORC_MAX_VAR_SIZE 8
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define ORC_ENABLE_ASM_CODE
#ifdef ORC_ENABLE_ASM_CODE
#define ORC_ASM_CODE(compiler,...) orc_compiler_append_code(compiler, __VA_
ARGS__)
#else
#define ORC_ASM_CODE(compiler,...)
#endif
#define ORC_PROGRAM_ERROR(program, ...) do { \ #define ORC_PROGRAM_ERROR(program, ...) do { \
program->error = TRUE; \ program->error = TRUE; \
orc_debug_print(ORC_DEBUG_WARNING, __FILE__, ORC_FUNCTION, __LINE__, __VA _ARGS__); \ orc_debug_print(ORC_DEBUG_WARNING, __FILE__, ORC_FUNCTION, __LINE__, __VA _ARGS__); \
} while (0) } while (0)
#define ORC_COMPILER_ERROR(compiler, ...) do { \
compiler->error = TRUE; \
compiler->result = ORC_COMPILE_RESULT_UNKNOWN_PARSE; \
orc_debug_print(ORC_DEBUG_WARNING, __FILE__, ORC_FUNCTION, __LINE__, __VA
_ARGS__); \
} while (0)
enum {
ORC_TARGET_C_C99 = (1<<0),
ORC_TARGET_C_BARE = (1<<1),
ORC_TARGET_C_NOEXEC = (1<<2),
ORC_TARGET_C_OPCODE = (1<<3),
ORC_TARGET_CLEAN_COMPILE = (1<<29),
ORC_TARGET_FAST_NAN = (1<<30),
ORC_TARGET_FAST_DENORMAL = (1<<31)
};
enum {
ORC_TARGET_ALTIVEC_ALTIVEC = (1<<0)
};
enum {
ORC_TARGET_NEON_CLEAN_COMPILE = (1<<0),
ORC_TARGET_NEON_NEON = (1<<1),
ORC_TARGET_NEON_EDSP = (1<<2)
};
enum {
ORC_TARGET_ARM_EDSP = (1<<2),
ORC_TARGET_ARM_ARM6 = (1<<3)
};
typedef enum {
ORC_VAR_TYPE_TEMP,
ORC_VAR_TYPE_SRC,
ORC_VAR_TYPE_DEST,
ORC_VAR_TYPE_CONST,
ORC_VAR_TYPE_PARAM,
ORC_VAR_TYPE_ACCUMULATOR
} OrcVarType;
enum {
ORC_VAR_D1,
ORC_VAR_D2,
ORC_VAR_D3,
ORC_VAR_D4,
ORC_VAR_S1,
ORC_VAR_S2,
ORC_VAR_S3,
ORC_VAR_S4,
ORC_VAR_S5,
ORC_VAR_S6,
ORC_VAR_S7,
ORC_VAR_S8,
ORC_VAR_A1,
ORC_VAR_A2,
ORC_VAR_A3,
ORC_VAR_A4,
ORC_VAR_C1,
ORC_VAR_C2,
ORC_VAR_C3,
ORC_VAR_C4,
ORC_VAR_C5,
ORC_VAR_C6,
ORC_VAR_C7,
ORC_VAR_C8,
ORC_VAR_P1,
ORC_VAR_P2,
ORC_VAR_P3,
ORC_VAR_P4,
ORC_VAR_P5,
ORC_VAR_P6,
ORC_VAR_P7,
ORC_VAR_P8,
ORC_VAR_T1,
ORC_VAR_T2,
ORC_VAR_T3,
ORC_VAR_T4,
ORC_VAR_T5,
ORC_VAR_T6,
ORC_VAR_T7,
ORC_VAR_T8,
ORC_VAR_T9,
ORC_VAR_T10,
ORC_VAR_T11,
ORC_VAR_T12,
ORC_VAR_T13,
ORC_VAR_T14,
ORC_VAR_T15,
ORC_VAR_T16
};
enum {
ORC_CONST_ZERO,
ORC_CONST_SPLAT_B,
ORC_CONST_SPLAT_W,
ORC_CONST_SPLAT_L,
ORC_CONST_FULL
};
enum {
ORC_SAMPLE_REGULAR = 0,
ORC_SAMPLE_TRANSPOSED,
ORC_SAMPLE_NEAREST,
ORC_SAMPLE_BILINEAR,
ORC_SAMPLE_FOUR_TAP
};
enum {
ORC_PARAM_TYPE_INT = 0,
ORC_PARAM_TYPE_FLOAT,
ORC_PARAM_TYPE_INT64,
ORC_PARAM_TYPE_DOUBLE
};
typedef enum {
ORC_COMPILE_RESULT_OK = 0,
ORC_COMPILE_RESULT_UNKNOWN_COMPILE = 0x100,
ORC_COMPILE_RESULT_MISSING_RULE = 0x101,
ORC_COMPILE_RESULT_UNKNOWN_PARSE = 0x200,
ORC_COMPILE_RESULT_PARSE = 0x201,
ORC_COMPILE_RESULT_VARIABLE = 0x202
} OrcCompileResult;
#define ORC_COMPILE_RESULT_IS_SUCCESSFUL(x) ((x) < 0x100)
#define ORC_COMPILE_RESULT_IS_FATAL(x) ((x) >= 0x200)
/**
* OrcVariable:
*
* The OrcVariable structure has no public members
*/
struct _OrcVariable {
/*< private >*/
char *name;
char *type_name;
int size;
OrcVarType vartype;
int used;
int first_use;
int last_use;
int replaced;
int replacement;
int alloc;
int is_chained;
int is_aligned;
int alignment;
int is_uncached;
orc_union64 value;
int ptr_register;
int ptr_offset;
int mask_alloc;
int aligned_data;
int param_type;
int load_dest;
int update_type;
int need_offset_reg;
};
/**
* OrcRule:
*
* The OrcRule structure has no public members
*/
struct _OrcRule {
/*< private >*/
OrcRuleEmitFunc emit;
void *emit_user;
};
/**
* OrcRuleSet:
*
* The OrcRuleSet structure has no public members
*/
struct _OrcRuleSet {
/*< private >*/
int opcode_major;
int required_target_flags;
OrcRule *rules;
int n_rules;
};
/**
* OrcOpcodeSet:
*
* The OrcOpcodeSet structure has no public members
*/
struct _OrcOpcodeSet {
/*< private >*/
int opcode_major;
char prefix[8];
int n_opcodes;
OrcStaticOpcode *opcodes;
};
#define ORC_STATIC_OPCODE_ACCUMULATOR (1<<0)
#define ORC_STATIC_OPCODE_FLOAT_SRC (1<<1)
#define ORC_STATIC_OPCODE_FLOAT_DEST (1<<2)
#define ORC_STATIC_OPCODE_FLOAT (ORC_STATIC_OPCODE_FLOAT_SRC|ORC_STATIC_OPC
ODE_FLOAT_DEST)
#define ORC_STATIC_OPCODE_SCALAR (1<<3)
#define ORC_STATIC_OPCODE_LOAD (1<<4)
#define ORC_STATIC_OPCODE_STORE (1<<5)
#define ORC_STATIC_OPCODE_INVARIANT (1<<6)
#define ORC_STATIC_OPCODE_ITERATOR (1<<7)
struct _OrcStaticOpcode {
char name[16];
unsigned int flags;
int dest_size[ORC_STATIC_OPCODE_N_DEST];
int src_size[ORC_STATIC_OPCODE_N_SRC];
OrcOpcodeEmulateNFunc emulateN;
};
/**
* OrcInstruction:
*
* The OrcInstruction structure has no public members
*/
struct _OrcInstruction {
/*< private >*/
OrcStaticOpcode *opcode;
int dest_args[ORC_STATIC_OPCODE_N_DEST];
int src_args[ORC_STATIC_OPCODE_N_SRC];
OrcRule *rule;
unsigned int flags;
};
#define ORC_INSTRUCTION_FLAG_X2 (1<<0)
#define ORC_INSTRUCTION_FLAG_X4 (1<<1)
#define ORC_INSN_FLAG_INVARIANT (1<<2)
#define ORC_INSN_FLAG_ADDED (1<<3)
/**
* OrcConstant:
*
* The OrcConstant structure has no public members
*/
struct _OrcConstant {
/*< private >*/
int type;
int alloc_reg;
unsigned int value;
unsigned int full_value[4];
int use_count;
int is_long;
};
/**
* OrcFixup:
*
* The OrcFixup structure has no public members
*/
struct _OrcFixup {
/*< private >*/
unsigned char *ptr;
int type;
int label;
};
/** /**
* OrcProgram: * OrcProgram:
* *
* The OrcProgram structure has no public members * The OrcProgram structure has no public members
*/ */
struct _OrcProgram { struct _OrcProgram {
/*< private >*/ /*< private >*/
struct { struct {
OrcStaticOpcode *opcode; OrcStaticOpcode *opcode;
int dest_args[ORC_STATIC_OPCODE_N_DEST]; int dest_args[ORC_STATIC_OPCODE_N_DEST];
skipping to change at line 419 skipping to change at line 95
int n_multiple; int n_multiple;
int n_minimum; int n_minimum;
int n_maximum; int n_maximum;
int constant_m; int constant_m;
OrcCode *orccode; OrcCode *orccode;
/* Hide this here. Belongs in a Parser object */ /* Hide this here. Belongs in a Parser object */
char *init_function; char *init_function;
char *error_msg; char *error_msg;
}; unsigned int current_line;
/**
* OrcCompiler:
*
* The OrcCompiler structure has no public members
*/
struct _OrcCompiler {
/*< private >*/
OrcProgram *program;
OrcTarget *target;
unsigned int target_flags;
OrcInstruction insns[ORC_N_INSNS];
int n_insns;
OrcVariable vars[ORC_N_COMPILER_VARIABLES];
int n_temp_vars;
int n_dup_vars;
unsigned char *code;
unsigned char *codeptr;
OrcConstant constants[ORC_N_CONSTANTS];
int n_constants;
OrcFixup fixups[ORC_N_FIXUPS];
int n_fixups;
unsigned char *labels[ORC_N_LABELS];
int labels_int[ORC_N_LABELS];
int n_labels;
int error;
char *error_msg;
OrcCompileResult result;
int valid_regs[ORC_N_REGS];
int save_regs[ORC_N_REGS];
int used_regs[ORC_N_REGS];
int alloc_regs[ORC_N_REGS];
int loop_shift;
int long_jumps;
int use_frame_pointer;
char *asm_code;
int asm_code_len;
int is_64bit;
int tmpreg;
int tmpreg2;
int exec_reg;
int gp_tmpreg;
int insn_index;
int unroll_index;
int need_mask_regs;
int unroll_shift;
int alloc_loop_counter;
int allow_gp_on_stack;
int loop_counter;
int size_region;
int has_iterator_opcode;
int offset;
int min_temp_reg;
int max_used_temp_reg;
int insn_shift; /* used when emitting rules */
int max_var_size; /* size of largest var */
int load_params;
void *output_insns;
int n_output_insns;
int n_output_insns_alloc;
}; };
#define ORC_SRC_ARG(p,i,n) ((p)->vars[(i)->src_args[(n)]].alloc) #define ORC_SRC_ARG(p,i,n) ((p)->vars[(i)->src_args[(n)]].alloc)
#define ORC_DEST_ARG(p,i,n) ((p)->vars[(i)->dest_args[(n)]].alloc) #define ORC_DEST_ARG(p,i,n) ((p)->vars[(i)->dest_args[(n)]].alloc)
#define ORC_SRC_TYPE(p,i,n) ((p)->vars[(i)->src_args[(n)]].vartype) #define ORC_SRC_TYPE(p,i,n) ((p)->vars[(i)->src_args[(n)]].vartype)
#define ORC_DEST_TYPE(p,i,n) ((p)->vars[(i)->dest_args[(n)]].vartype) #define ORC_DEST_TYPE(p,i,n) ((p)->vars[(i)->dest_args[(n)]].vartype)
#define ORC_SRC_VAL(p,insn,n) ((p)->vars[(insn)->src_args[(n)]].value.i) #define ORC_SRC_VAL(p,insn,n) ((p)->vars[(insn)->src_args[(n)]].value.i)
#define ORC_DEST_VAL(p,insn,n) ((p)->vars[(insn)->dest_args[(n)]].value.i) #define ORC_DEST_VAL(p,insn,n) ((p)->vars[(insn)->dest_args[(n)]].value.i)
/**
* OrcOpcodeExecutor:
*
* The OrcOpcodeExecutor structure has no public members
*/
struct _OrcOpcodeExecutor {
/*< private >*/
int src_values[ORC_STATIC_OPCODE_N_SRC];
int dest_values[ORC_STATIC_OPCODE_N_DEST];
OrcOpcodeEmulateNFunc emulateN;
void *src_ptrs[ORC_STATIC_OPCODE_N_SRC];
void *dest_ptrs[ORC_STATIC_OPCODE_N_DEST];
int shift;
};
/**
* OrcExecutor:
*
*/
struct _OrcExecutor {
/*< private >*/
OrcProgram *program;
int n;
int counter1;
int counter2;
int counter3;
void *arrays[ORC_N_VARIABLES];
int params[ORC_N_VARIABLES];
int accumulators[4];
/* exec pointer is stored in arrays[ORC_VAR_A1] */
/* OrcCode pointer is stored in arrays[ORC_VAR_A2] */
/* row pointers are stored in arrays[i+ORC_VAR_C1] */
/* the stride for arrays[x] is stored in params[x] */
/* m is stored in params[ORC_VAR_A1] */
/* m_index is stored in params[ORC_VAR_A2] */
/* elapsed time is stored in params[ORC_VAR_A3] */
/* high half of params is stored in params[ORC_VAR_T1..] */
};
/* the alternate view of OrcExecutor */
struct _OrcExecutorAlt {
/*< private >*/
OrcProgram *program;
int n;
int counter1;
int counter2;
int counter3;
void *arrays[ORC_N_ARRAYS];
OrcExecutorFunc exec;
OrcCode *code;
void *unused1[ORC_N_VARIABLES - ORC_N_ARRAYS - 2];
int strides[ORC_N_ARRAYS];
int m;
int m_index;
int time;
int unused2;
int unused4[8];
int params[ORC_VAR_T1-ORC_VAR_P1];
int params_hi[ORC_VAR_T1-ORC_VAR_P1];
int unused3[ORC_N_VARIABLES - ORC_VAR_T9];
int accumulators[4];
};
#define ORC_EXECUTOR_EXEC(ex) ((OrcExecutorFunc)((ex)->arrays[ORC_VAR_A1]))
#define ORC_EXECUTOR_M(ex) ((ex)->params[ORC_VAR_A1])
#define ORC_EXECUTOR_M_INDEX(ex) ((ex)->params[ORC_VAR_A2])
#define ORC_EXECUTOR_TIME(ex) ((ex)->params[ORC_VAR_A3])
typedef struct _OrcCodeVariable OrcCodeVariable;
struct _OrcCodeVariable {
/*< private >*/
int vartype;
int size;
orc_union64 value;
};
struct _OrcCode {
/*< public >*/
OrcExecutorFunc exec;
/*< private >*/
OrcCompileResult result;
char *name;
/* for execution */
unsigned char *code;
int code_size;
void *chunk;
/* for emulation */
int n_insns;
OrcInstruction *insns;
OrcCodeVariable *vars;
int is_2d;
int constant_n;
int constant_m;
};
/**
* OrcTarget:
*
*/
struct _OrcTarget {
const char *name;
orc_bool executable;
int data_register_offset;
unsigned int (*get_default_flags)(void);
void (*compiler_init)(OrcCompiler *compiler);
void (*compile)(OrcCompiler *compiler);
OrcRuleSet rule_sets[ORC_N_RULE_SETS];
int n_rule_sets;
const char * (*get_asm_preamble)(void);
void (*load_constant)(OrcCompiler *compiler, int reg, int size, int value
);
const char * (*get_flag_name)(int shift);
void (*flush_cache) (OrcCode *code);
void (*load_constant_long)(OrcCompiler *compiler, int reg,
OrcConstant *constant);
void *_unused[5];
};
void orc_init (void); void orc_init (void);
OrcProgram * orc_program_new (void); OrcProgram * orc_program_new (void);
OrcProgram * orc_program_new_ds (int size1, int size2); OrcProgram * orc_program_new_ds (int size1, int size2);
OrcProgram * orc_program_new_dss (int size1, int size2, int size3); OrcProgram * orc_program_new_dss (int size1, int size2, int size3);
OrcProgram * orc_program_new_as (int size1, int size2); OrcProgram * orc_program_new_as (int size1, int size2);
OrcProgram * orc_program_new_ass (int size1, int size2, int size3); OrcProgram * orc_program_new_ass (int size1, int size2, int size3);
OrcStaticOpcode * orc_opcode_find_by_name (const char *name); OrcProgram * orc_program_new_from_static_bytecode (const orc_uint8 *bytecod
void orc_opcode_init (void); e);
const char * orc_program_get_name (OrcProgram *program); const char * orc_program_get_name (OrcProgram *program);
void orc_program_set_name (OrcProgram *program, const char *name); 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_2d (OrcProgram *program);
void orc_program_set_constant_n (OrcProgram *program, int n); 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_multiple (OrcProgram *ex, int n);
void orc_program_set_n_minimum (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_n_maximum (OrcProgram *ex, int n);
void orc_program_set_constant_m (OrcProgram *program, int m); void orc_program_set_constant_m (OrcProgram *program, int m);
void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int a rg1, int arg2); void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int a rg1, int arg2);
void orc_program_append_2 (OrcProgram *program, const char *name, void orc_program_append_2 (OrcProgram *program, const char *name,
unsigned int flags, int arg0, int arg1, int arg2, int arg3); unsigned int flags, int arg0, int arg1, int arg2, int arg3);
skipping to change at line 666 skipping to change at line 139
void orc_program_append_str_2 (OrcProgram *program, const char *name, void orc_program_append_str_2 (OrcProgram *program, const char *name,
unsigned int flags, const char *arg1, const char *arg2, const char *arg 3, unsigned int flags, const char *arg1, const char *arg2, const char *arg 3,
const char *arg4); const char *arg4);
void orc_program_append_ds (OrcProgram *program, const char *opcode, int ar g0, void orc_program_append_ds (OrcProgram *program, const char *opcode, int ar g0,
int arg1); int arg1);
void orc_program_append_ds_str (OrcProgram *p, const char *opcode, void orc_program_append_ds_str (OrcProgram *p, const char *opcode,
const char * arg0, const char * arg1); const char * arg0, const char * arg1);
void orc_program_append_dds_str (OrcProgram *program, const char *name, void orc_program_append_dds_str (OrcProgram *program, const char *name,
const char *arg1, const char *arg2, const char *arg3); const char *arg1, const char *arg2, const char *arg3);
void orc_mmx_init (void);
void orc_sse_init (void);
void orc_arm_init (void);
void orc_powerpc_init (void);
void orc_c_init (void);
void orc_neon_init (void);
void orc_c64x_init (void);
void orc_c64x_c_init (void);
OrcCompileResult orc_program_compile (OrcProgram *p); OrcCompileResult orc_program_compile (OrcProgram *p);
OrcCompileResult orc_program_compile_for_target (OrcProgram *p, OrcTarget * target); OrcCompileResult orc_program_compile_for_target (OrcProgram *p, OrcTarget * target);
OrcCompileResult orc_program_compile_full (OrcProgram *p, OrcTarget *target , OrcCompileResult orc_program_compile_full (OrcProgram *p, OrcTarget *target ,
unsigned int flags); unsigned int flags);
void orc_program_set_backup_function (OrcProgram *p, OrcExecutorFunc func); void orc_program_set_backup_function (OrcProgram *p, OrcExecutorFunc func);
void orc_program_free (OrcProgram *program); void orc_program_free (OrcProgram *program);
int orc_program_find_var_by_name (OrcProgram *program, const char *name); int orc_program_find_var_by_name (OrcProgram *program, const char *name);
int orc_program_add_temporary (OrcProgram *program, int size, const char *n ame); int orc_program_add_temporary (OrcProgram *program, int size, const char *n ame);
skipping to change at line 706 skipping to change at line 170
int orc_program_add_constant_str (OrcProgram *program, int size, const char *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 *n ame); int orc_program_add_parameter (OrcProgram *program, int size, const char *n ame);
int orc_program_add_parameter_float (OrcProgram *program, int size, const c har *name); int orc_program_add_parameter_float (OrcProgram *program, int size, const c har *name);
int orc_program_add_parameter_double (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 c har *name); int orc_program_add_parameter_int64 (OrcProgram *program, int size, const c har *name);
int orc_program_add_accumulator (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 *t ype_name); void orc_program_set_type_name (OrcProgram *program, int var, const char *t ype_name);
void orc_program_set_var_alignment (OrcProgram *program, int var, int align ment); void orc_program_set_var_alignment (OrcProgram *program, int var, int align ment);
void orc_program_set_sampling_type (OrcProgram *program, int var, int sampl ing_type); void orc_program_set_sampling_type (OrcProgram *program, int var, int sampl ing_type);
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 *p
tr);
void orc_executor_set_param (OrcExecutor *ex, int var, int value);
void orc_executor_set_param_str (OrcExecutor *ex, const char *name, int val
ue);
void orc_executor_set_param_float (OrcExecutor *ex, int var, float value);
void orc_executor_set_param_int64 (OrcExecutor *ex, int var, orc_int64 valu
e);
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);
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);
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,
OrcRuleEmitFunc emit, void *emit_user);
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);
int orc_program_allocate_register (OrcProgram *program, int is_data); int orc_program_allocate_register (OrcProgram *program, int is_data);
void orc_code_allocate_codemem (OrcCode *code, int size);
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 va
lue);
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, ...);
void orc_program_reset (OrcProgram *program); void orc_program_reset (OrcProgram *program);
OrcCode *orc_program_take_code (OrcProgram *program); OrcCode *orc_program_take_code (OrcProgram *program);
const char *orc_program_get_asm_code (OrcProgram *program); const char *orc_program_get_asm_code (OrcProgram *program);
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);
const char * orc_program_get_error (OrcProgram *program); const char * orc_program_get_error (OrcProgram *program);
void orc_compiler_append_code (OrcCompiler *p, const char *fmt, ...)
ORC_GNU_PRINTF(2,3);
void orc_target_register (OrcTarget *target);
OrcTarget *orc_target_get_by_name (const char *target_name);
int orc_program_get_max_array_size (OrcProgram *program); int orc_program_get_max_array_size (OrcProgram *program);
int orc_program_get_max_accumulator_size (OrcProgram *program); int orc_program_get_max_accumulator_size (OrcProgram *program);
void orc_get_data_cache_sizes (int *level1, int *level2, int *level3);
void orc_get_cpu_family_model_stepping (int *family, int *model, int *stepp
ing);
const char * orc_get_cpu_name (void);
OrcCode * orc_code_new (void);
void orc_code_free (OrcCode *code);
#ifdef ORC_ENABLE_UNSTABLE_API
int orc_compiler_flag_check (const char *flag);
extern int _orc_data_cache_size_level1;
extern int _orc_data_cache_size_level2;
extern int _orc_data_cache_size_level3;
extern int _orc_cpu_family;
extern int _orc_cpu_model;
extern int _orc_cpu_stepping;
extern const char *_orc_cpu_name;
extern int _orc_compiler_flag_backup;
extern int _orc_compiler_flag_emulate;
extern int _orc_compiler_flag_debug;
extern int _orc_compiler_flag_randomize;
void orc_code_chunk_free (OrcCodeChunk *chunk);
#endif
ORC_END_DECLS ORC_END_DECLS
#endif #endif
 End of changes. 13 change blocks. 
643 lines changed or deleted 11 lines changed or added


 orcsse.h   orcsse.h 
#ifndef _ORC_SSE_H_ #ifndef _ORC_SSE_H_
#define _ORC_SSE_H_ #define _ORC_SSE_H_
#include <orc/orcx86.h> #include <orc/orcx86.h>
#include <orc/orcx86insn.h> #include <orc/orcx86insn.h>
ORC_BEGIN_DECLS ORC_BEGIN_DECLS
typedef enum {
ORC_TARGET_SSE_SSE2 = (1<<0),
ORC_TARGET_SSE_SSE3 = (1<<1),
ORC_TARGET_SSE_SSSE3 = (1<<2),
ORC_TARGET_SSE_SSE4_1 = (1<<3),
ORC_TARGET_SSE_SSE4_2 = (1<<4),
ORC_TARGET_SSE_SSE4A = (1<<5),
ORC_TARGET_SSE_SSE5 = (1<<6),
ORC_TARGET_SSE_FRAME_POINTER = (1<<7),
ORC_TARGET_SSE_SHORT_JUMPS = (1<<8),
ORC_TARGET_SSE_64BIT = (1<<9)
}OrcTargetSSEFlags;
#ifdef ORC_ENABLE_UNSTABLE_API #ifdef ORC_ENABLE_UNSTABLE_API
typedef enum { typedef enum {
X86_XMM0 = ORC_VEC_REG_BASE + 16, X86_XMM0 = ORC_VEC_REG_BASE + 16,
X86_XMM1, X86_XMM1,
X86_XMM2, X86_XMM2,
X86_XMM3, X86_XMM3,
X86_XMM4, X86_XMM4,
X86_XMM5, X86_XMM5,
X86_XMM6, X86_XMM6,
 End of changes. 1 change blocks. 
13 lines changed or deleted 0 lines changed or added


 orctest.h   orctest.h 
skipping to change at line 24 skipping to change at line 24
} OrcTestResult; } OrcTestResult;
#define ORC_TEST_FLAGS_BACKUP (1<<0) #define ORC_TEST_FLAGS_BACKUP (1<<0)
#define ORC_TEST_FLAGS_FLOAT (1<<1) #define ORC_TEST_FLAGS_FLOAT (1<<1)
#define ORC_TEST_FLAGS_EMULATE (1<<2) #define ORC_TEST_FLAGS_EMULATE (1<<2)
void orc_test_init (void); void orc_test_init (void);
OrcTestResult orc_test_gcc_compile (OrcProgram *p); OrcTestResult orc_test_gcc_compile (OrcProgram *p);
OrcTestResult orc_test_gcc_compile_neon (OrcProgram *p); OrcTestResult orc_test_gcc_compile_neon (OrcProgram *p);
OrcTestResult orc_test_gcc_compile_c64x (OrcProgram *p); OrcTestResult orc_test_gcc_compile_c64x (OrcProgram *p);
OrcTestResult orc_test_gcc_compile_mips (OrcProgram *p);
void orc_test_random_bits (void *data, int n_bytes); void orc_test_random_bits (void *data, int n_bytes);
OrcTestResult orc_test_compare_output (OrcProgram *program); OrcTestResult orc_test_compare_output (OrcProgram *program);
OrcTestResult orc_test_compare_output_full (OrcProgram *program, int flags) ; OrcTestResult orc_test_compare_output_full (OrcProgram *program, int flags) ;
OrcTestResult orc_test_compare_output_backup (OrcProgram *program); OrcTestResult orc_test_compare_output_backup (OrcProgram *program);
OrcProgram *orc_test_get_program_for_opcode (OrcStaticOpcode *opcode); OrcProgram *orc_test_get_program_for_opcode (OrcStaticOpcode *opcode);
OrcProgram *orc_test_get_program_for_opcode_const (OrcStaticOpcode *opcode) ; OrcProgram *orc_test_get_program_for_opcode_const (OrcStaticOpcode *opcode) ;
OrcProgram *orc_test_get_program_for_opcode_param (OrcStaticOpcode *opcode) ; OrcProgram *orc_test_get_program_for_opcode_param (OrcStaticOpcode *opcode) ;
void orc_test_performance (OrcProgram *program, int flags); void orc_test_performance (OrcProgram *program, int flags);
 End of changes. 1 change blocks. 
0 lines changed or deleted 1 lines changed or added


 orcutils.h   orcutils.h 
skipping to change at line 31 skipping to change at line 31
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef _ORC_UTILS_H_ #ifndef _ORC_UTILS_H_
#define _ORC_UTILS_H_ #define _ORC_UTILS_H_
/* Orc objects */
//typedef struct _OrcVariable OrcVariable;
//typedef struct _OrcOpcodeSet OrcOpcodeSet;
//typedef struct _OrcStaticOpcode OrcStaticOpcode;
typedef struct _OrcInstruction OrcInstruction;
typedef struct _OrcProgram OrcProgram;
typedef struct _OrcCompiler OrcCompiler;
typedef struct _OrcConstant OrcConstant;
//typedef struct _OrcFixup OrcFixup;
typedef struct _OrcTarget OrcTarget;
typedef struct _OrcCode OrcCode;
//typedef struct _OrcCodeChunk OrcCodeChunk;
typedef enum {
ORC_COMPILE_RESULT_OK = 0,
ORC_COMPILE_RESULT_UNKNOWN_COMPILE = 0x100,
ORC_COMPILE_RESULT_MISSING_RULE = 0x101,
ORC_COMPILE_RESULT_UNKNOWN_PARSE = 0x200,
ORC_COMPILE_RESULT_PARSE = 0x201,
ORC_COMPILE_RESULT_VARIABLE = 0x202
} OrcCompileResult;
#ifndef _ORC_INTEGER_TYPEDEFS_ #ifndef _ORC_INTEGER_TYPEDEFS_
#define _ORC_INTEGER_TYPEDEFS_ #define _ORC_INTEGER_TYPEDEFS_
#if defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L #if defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L
#include <stdint.h> #include <stdint.h>
typedef int8_t orc_int8; typedef int8_t orc_int8;
typedef int16_t orc_int16; typedef int16_t orc_int16;
typedef int32_t orc_int32; typedef int32_t orc_int32;
typedef int64_t orc_int64; typedef int64_t orc_int64;
typedef uint8_t orc_uint8; typedef uint8_t orc_uint8;
typedef uint16_t orc_uint16; typedef uint16_t orc_uint16;
skipping to change at line 139 skipping to change at line 164
#endif #endif
#if defined(__GNUC__) && defined(__GNUC_MINOR__) #if defined(__GNUC__) && defined(__GNUC_MINOR__)
#define ORC_GNUC_PREREQ(maj, min) \ #define ORC_GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else #else
#define ORC_GNUC_PREREQ(maj, min) 0 #define ORC_GNUC_PREREQ(maj, min) 0
#endif #endif
#if ORC_GNUC_PREREQ(3,3) && defined(__ELF__) #ifndef ORC_INTERNAL
#define ORC_INTERNAL __attribute__ ((visibility ("internal"))) #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
#define ORC_INTERNAL __attribute__((visibility("hidden")))
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
#define ORC_INTERNAL __hidden
#elif defined (__GNUC__) && ORC_GNUC_PREREQ(3,3) && defined(__ELF__)
#define ORC_INTERNAL __attribute__((visibility("hidden")))
#else #else
#define ORC_INTERNAL #define ORC_INTERNAL
#endif #endif
#endif
#if ORC_GNUC_PREREQ(3,3) /* guess */ #if ORC_GNUC_PREREQ(3,3) /* guess */
#define ORC_GNU_PRINTF(a,b) __attribute__((__format__ (__printf__, a, b))) #define ORC_GNU_PRINTF(a,b) __attribute__((__format__ (__printf__, a, b)))
#else #else
#define ORC_GNU_PRINTF(a,b) #define ORC_GNU_PRINTF(a,b)
#endif #endif
#if ORC_GNUC_PREREQ(2,4) #if ORC_GNUC_PREREQ(2,4)
#define ORC_GNUC_UNUSED __attribute__((__unused__)) #define ORC_GNUC_UNUSED __attribute__((__unused__))
#else #else
 End of changes. 3 change blocks. 
2 lines changed or deleted 33 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/