[Liboil-commit] orc/orcexecutor.c orc/orcprogram.c orc/orcprogram.h

David Schleef ds at kemper.freedesktop.org
Wed May 28 13:10:21 PDT 2008


 orc/orcexecutor.c |    8 ++++++++
 orc/orcprogram.c  |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 orc/orcprogram.h  |    7 +++++++
 3 files changed, 63 insertions(+)

New commits:
commit a60fdaca134c28fb774993f3f2555fd6afbb1352
Author: David Schleef <ds at ginger.bigkitten.com>
Date:   Wed May 28 13:10:04 2008 -0700

    [orc] add functions to refer to variables by name

diff --git a/orc/orcexecutor.c b/orc/orcexecutor.c
index a8f976e..8c221ff 100644
--- a/orc/orcexecutor.c
+++ b/orc/orcexecutor.c
@@ -45,6 +45,14 @@ orc_executor_set_array (OrcExecutor *ex, int var, void *ptr)
 }
 
 void
+orc_executor_set_array_str (OrcExecutor *ex, const char *name, void *ptr)
+{
+  int var;
+  var = orc_program_find_var_by_name (ex->program, name);
+  ex->arrays[var] = ptr;
+}
+
+void
 orc_executor_set_n (OrcExecutor *ex, int n)
 {
   ex->n = n;
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;
diff --git a/orc/orcprogram.h b/orc/orcprogram.h
index 3ae3e00..3281f0e 100644
--- a/orc/orcprogram.h
+++ b/orc/orcprogram.h
@@ -210,10 +210,14 @@ enum {
 void orc_init (void);
 
 OrcProgram * orc_program_new (void);
+OrcProgram * orc_program_new_dss (const char *type1, const char *type2,
+    const char *type3);
 OrcOpcode * orc_opcode_find_by_name (const char *name);
 void orc_opcode_init (void);
 
 void orc_program_append (OrcProgram *p, const char *opcode, int arg0, int arg1, int arg2);
+void orc_program_append_str (OrcProgram *p, const char *opcode,
+    const char * arg0, const char * arg1, const char * arg2);
 
 void orc_x86_init (void);
 void orc_powerpc_init (void);
@@ -227,6 +231,8 @@ void orc_program_assemble_powerpc (OrcProgram *p);
 void orc_program_assemble_c (OrcProgram *p);
 void orc_program_free (OrcProgram *program);
 
+int orc_program_find_var_by_name (OrcProgram *program, const char *name);
+
 int orc_program_add_temporary (OrcProgram *program, const char *type, const char *name);
 int orc_program_dup_temporary (OrcProgram *program, int i, int j);
 int orc_program_add_source (OrcProgram *program, const char *type, const char *name);
@@ -245,6 +251,7 @@ void orc_type_register (const char *name, int size);
 OrcExecutor * orc_executor_new (OrcProgram *program);
 void orc_executor_free (OrcExecutor *ex);
 void orc_executor_set_array (OrcExecutor *ex, int var, void *ptr);
+void orc_executor_set_array_str (OrcExecutor *ex, const char *name, void *ptr);
 void orc_executor_set_n (OrcExecutor *ex, int n);
 void orc_executor_emulate (OrcExecutor *ex);
 void orc_executor_run (OrcExecutor *ex);


More information about the Liboil-commit mailing list