diff options
Diffstat (limited to 'orc/orcprogram.c')
-rw-r--r-- | orc/orcprogram.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/orc/orcprogram.c b/orc/orcprogram.c index 52bff06..c944e09 100644 --- a/orc/orcprogram.c +++ b/orc/orcprogram.c @@ -32,6 +32,21 @@ orc_program_new (void) return p; } +OrcProgram * +orc_program_new_dss (const char *type_d1, const char *type_s1, + const char *type_s2) +{ + OrcProgram *p; + + p = orc_program_new (); + + orc_program_add_destination (p, type_d1, "d1"); + orc_program_add_source (p, type_d1, "s1"); + orc_program_add_source (p, type_d1, "s2"); + + return p; +} + void orc_program_free (OrcProgram *program) { @@ -136,6 +151,39 @@ orc_program_append (OrcProgram *program, const char *name, int arg0, } int +orc_program_find_var_by_name (OrcProgram *program, const char *name) +{ + int i; + + for(i=0;i<program->n_vars;i++){ + if (strcmp (program->vars[i].name, name) == 0) { + return i; + } + } + + return -1; +} + +void +orc_program_append_str (OrcProgram *program, const char *name, + const char *arg1, const char *arg2, const char *arg3) +{ + OrcInstruction *insn; + + insn = program->insns + program->n_insns; + + insn->opcode = orc_opcode_find_by_name (name); + if (!insn->opcode) { + printf("unknown opcode: %s\n", name); + } + insn->args[0] = orc_program_find_var_by_name (program, arg1); + insn->args[1] = orc_program_find_var_by_name (program, arg2); + insn->args[2] = orc_program_find_var_by_name (program, arg3); + + program->n_insns++; +} + +int orc_program_allocate_register (OrcProgram *program, int data_reg) { int i; |