Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jit/jit-reg-alloc.h view on Meta::CPAN
unsigned thrash : 1;
unsigned store : 1;
unsigned load : 1;
unsigned copy : 1;
unsigned kill : 1;
} _jit_regdesc_t;
/*
* Contains scratch register assignment data.
*/
typedef struct
{
int reg;
_jit_regclass_t *regclass;
} _jit_scratch_t;
/*
* Contains register assignment data for instruction.
*/
typedef struct
{
_jit_regdesc_t descs[_JIT_REGS_VALUE_MAX];
_jit_scratch_t scratch[_JIT_REGS_SCRATCH_MAX];
int num_scratch;
unsigned ternary : 1;
unsigned branch : 1;
unsigned copy : 1;
unsigned commutative : 1;
unsigned free_dest : 1;
#ifdef JIT_REG_STACK
unsigned on_stack : 1;
unsigned x87_arith : 1;
unsigned reversible : 1;
unsigned no_pop : 1;
unsigned flip_args : 1;
#endif
/* The input value index that is going to be overwritten
by the destination value. For ordinary binary and unary
opcodes it is equal to 1, for notes and three-address
opcodes it is equal to 0, and for some x87 instructions
it could be equal to 2. */
int dest_input_index;
jit_regused_t assigned;
jit_regused_t clobber;
#ifdef JIT_REG_STACK
int wanted_stack_count;
int loaded_stack_count;
#endif
} _jit_regs_t;
int _jit_regs_lookup(char *name);
void _jit_regs_alloc_global(jit_gencode_t gen, jit_function_t func);
void _jit_regs_init_for_block(jit_gencode_t gen);
void _jit_regs_spill_all(jit_gencode_t gen);
void _jit_regs_set_incoming(jit_gencode_t gen, int reg, jit_value_t value);
void _jit_regs_set_outgoing(jit_gencode_t gen, int reg, jit_value_t value);
void _jit_regs_clear_all_outgoing(jit_gencode_t gen);
void _jit_regs_force_out(jit_gencode_t gen, jit_value_t value, int is_dest);
int _jit_regs_load_value(jit_gencode_t gen, jit_value_t value, int destroy, int used_again);
void _jit_regs_init(jit_gencode_t gen, _jit_regs_t *regs, int flags);
void _jit_regs_init_dest(_jit_regs_t *regs, jit_insn_t insn,
int flags, _jit_regclass_t *regclass);
void _jit_regs_init_value1(_jit_regs_t *regs, jit_insn_t insn,
int flags, _jit_regclass_t *regclass);
void _jit_regs_init_value2(_jit_regs_t *regs, jit_insn_t insn,
int flags, _jit_regclass_t *regclass);
void _jit_regs_add_scratch(_jit_regs_t *regs, _jit_regclass_t *regclass);
void _jit_regs_set_dest(jit_gencode_t gen, _jit_regs_t *regs, int reg, int other_reg);
void _jit_regs_set_value1(jit_gencode_t gen, _jit_regs_t *regs, int reg, int other_reg);
void _jit_regs_set_value2(jit_gencode_t gen, _jit_regs_t *regs, int reg, int other_reg);
void _jit_regs_set_scratch(jit_gencode_t gen, _jit_regs_t *regs, int index, int reg);
void _jit_regs_clobber(_jit_regs_t *regs, int reg);
void _jit_regs_clobber_class(jit_gencode_t gen, _jit_regs_t *regs, _jit_regclass_t *regclass);
void _jit_regs_clobber_all(jit_gencode_t gen, _jit_regs_t *regs);
void _jit_regs_assign(jit_gencode_t gen, _jit_regs_t *regs);
void _jit_regs_gen(jit_gencode_t gen, _jit_regs_t *regs);
#ifdef JIT_REG_STACK
int _jit_regs_select(_jit_regs_t *regs);
#endif
void _jit_regs_commit(jit_gencode_t gen, _jit_regs_t *regs);
int _jit_regs_get_dest(_jit_regs_t *regs);
int _jit_regs_get_value1(_jit_regs_t *regs);
int _jit_regs_get_value2(_jit_regs_t *regs);
int _jit_regs_get_dest_other(_jit_regs_t *regs);
int _jit_regs_get_value1_other(_jit_regs_t *regs);
int _jit_regs_get_value2_other(_jit_regs_t *regs);
int _jit_regs_get_scratch(_jit_regs_t *regs, int index);
void _jit_regs_begin(jit_gencode_t gen, _jit_regs_t *regs, int space);
#ifdef __cplusplus
};
#endif
#endif /* _JIT_REG_ALLOC_H */
( run in 1.029 second using v1.01-cache-2.11-cpan-f0fbb3f571b )