memset (rule_set, 0, sizeof(OrcRuleSet));
- rule_set->opcode_set = opcode_set;
+ rule_set->opcode_major = opcode_set->opcode_major;
rule_set->required_target_flags = required_flags;
rule_set->rules = malloc (sizeof(OrcRule) * opcode_set->n_opcodes);
if (opcode_sets[k].opcodes + j != opcode) continue;
for(i=0;i<target->n_rule_sets;i++){
- if (target->rule_sets[i].opcode_set != opcode_sets + k) continue;
+ if (target->rule_sets[i].opcode_major != opcode_sets[k].opcode_major) continue;
if (target->rule_sets[i].required_target_flags & (~target_flags)) continue;
rule = target->rule_sets[i].rules + j;
return NULL;
}
+OrcOpcodeSet *
+orc_opcode_set_get_nth (int opcode_major)
+{
+ return opcode_sets + opcode_major;
+}
+
int
orc_opcode_set_find_by_name (OrcOpcodeSet *opcode_set, const char *name)
{
*/
struct _OrcRuleSet {
/*< private >*/
- OrcOpcodeSet *opcode_set;
+ int opcode_major;
int required_target_flags;
OrcRule *rules;
int need_mask_regs;
};
+#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)
+
/**
* OrcOpcodeExecutor:
*
void orc_executor_run (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);
OrcRuleEmitFunc emit, void *emit_user)
{
int i;
+ OrcOpcodeSet *opcode_set;
- i = orc_opcode_set_find_by_name (rule_set->opcode_set, opcode_name);
+ opcode_set = orc_opcode_set_get_nth (rule_set->opcode_major);
+
+ i = orc_opcode_set_find_by_name (opcode_set, opcode_name);
if (i == -1) {
ORC_ERROR("failed to find opcode \"%s\"", opcode_name);
return;