compiler->valid_regs[i] = 1;
}
- compiler->target->compiler_init (compiler);
-
orc_compiler_check_sizes (compiler);
if (compiler->error) goto error;
+ compiler->target->compiler_init (compiler);
+
orc_compiler_rewrite_insns (compiler);
if (compiler->error) goto error;
{
int i;
int j;
+ int max_size = 1;
for(i=0;i<compiler->n_insns;i++) {
OrcInstruction *insn = compiler->insns + i;
compiler->result = ORC_COMPILE_RESULT_UNKNOWN_PARSE;
return;
}
+ max_size = MAX(max_size, multiplier * opcode->dest_size[j]);
}
for(j=0;j<ORC_STATIC_OPCODE_N_SRC;j++){
if (opcode->src_size[j] == 0) continue;
compiler->result = ORC_COMPILE_RESULT_UNKNOWN_PARSE;
return;
}
+ max_size = MAX(max_size, multiplier * opcode->src_size[j]);
}
if (opcode->flags & ORC_STATIC_OPCODE_SCALAR &&
opcode->src_size[1] == 0 &&
return;
}
}
+ compiler->max_var_size = max_size;
}
static OrcStaticOpcode *
align_var = get_align_var (compiler);
- switch (orc_program_get_max_var_size (compiler->program)) {
+ switch (compiler->max_var_size) {
case 1:
loop_shift = 2;
break;
loop_shift = 0;
break;
default:
- ORC_ERROR("unhandled max var size %d",
- orc_program_get_max_var_size (compiler->program));
+ ORC_ERROR("unhandled max var size %d", compiler->max_var_size);
break;
}
compiler->valid_regs[compiler->gp_tmpreg] = 0;
compiler->valid_regs[compiler->exec_reg] = 0;
- switch (orc_program_get_max_var_size (compiler->program)) {
+ switch (compiler->max_var_size) {
case 1:
compiler->loop_shift = 4;
break;
compiler->loop_shift = 1;
break;
default:
- ORC_ERROR("unhandled max var size %d",
- orc_program_get_max_var_size (compiler->program));
+ ORC_ERROR("unhandled max var size %d", compiler->max_var_size);
break;
}
#ifdef MMX
compiler->valid_regs[compiler->tmpreg] = 0;
loop_shift = 0;
- switch (orc_program_get_max_var_size (compiler->program)) {
+ switch (compiler->max_var_size) {
case 1:
compiler->loop_shift = 4;
break;
compiler->loop_shift = 1;
break;
default:
- ORC_ERROR("unhandled max var size %d",
- orc_program_get_max_var_size (compiler->program));
+ ORC_ERROR("unhandled max var size %d", compiler->max_var_size);
break;
}
compiler->valid_regs[compiler->gp_tmpreg] = 0;
compiler->valid_regs[compiler->exec_reg] = 0;
- switch (orc_program_get_max_var_size (compiler->program)) {
+ switch (compiler->max_var_size) {
case 1:
compiler->loop_shift = 4;
break;
compiler->loop_shift = 1;
break;
default:
- ORC_ERROR("unhandled max var size %d",
- orc_program_get_max_var_size (compiler->program));
+ ORC_ERROR("unhandled max var size %d", compiler->max_var_size);
break;
}
#ifdef MMX
}
/**
- * orc_program_get_max_var_size:
- * @program: a pointer to an OrcProgram structure
- *
- * Returns the size of the largest variable used in the program.
- *
- * Returns: the number of bytes
- */
-int
-orc_program_get_max_var_size (OrcProgram *program)
-{
- int i;
- int max;
-
- max = 0;
- for(i=0;i<ORC_N_VARIABLES;i++){
- if (program->vars[i].size &&
- program->vars[i].vartype != ORC_VAR_TYPE_ACCUMULATOR) {
- max = MAX(max, program->vars[i].size);
- }
- }
-
- return max;
-}
-
-/**
* orc_program_get_max_array_size:
* @program: a pointer to an OrcProgram structure
*
int max_used_temp_reg;
int insn_shift; /* used when emitting rules */
+ int max_var_size; /* size of largest var */
};
#define ORC_SRC_ARG(p,i,n) ((p)->vars[(i)->src_args[(n)]].alloc)
void orc_target_register (OrcTarget *target);
OrcTarget *orc_target_get_by_name (const char *target_name);
-int orc_program_get_max_var_size (OrcProgram *program);
int orc_program_get_max_array_size (OrcProgram *program);
int orc_program_get_max_accumulator_size (OrcProgram *program);