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

David Schleef ds at kemper.freedesktop.org
Sat May 24 20:27:57 PDT 2008


 orc/orcexecutor.c        |    1 
 orc/orcprogram-powerpc.c |   88 +++++++++++++++++++++++++++--------------------
 orc/orcprogram.c         |    4 ++
 3 files changed, 56 insertions(+), 37 deletions(-)

New commits:
commit eebf9ef1eda07482656cab3d9932ee3f5058cf95
Author: David Schleef <ds at wendolyne.(none)>
Date:   Sat May 24 20:27:36 2008 -0700

    [orc] powerpc fixes

diff --git a/orc/orcexecutor.c b/orc/orcexecutor.c
index 732e0f4..a8f976e 100644
--- a/orc/orcexecutor.c
+++ b/orc/orcexecutor.c
@@ -64,7 +64,6 @@ orc_executor_emulate (OrcExecutor *ex)
   //printf("n_insns %d\n", program->n_insns);
 
   for(i=0;i<ex->n;i++){
-    printf("%d\n", i);
     for(j=0;j<program->n_insns;j++){
       insn = program->insns + j;
       opcode = insn->opcode;
diff --git a/orc/orcprogram-powerpc.c b/orc/orcprogram-powerpc.c
index 8d22e38..543b95b 100644
--- a/orc/orcprogram-powerpc.c
+++ b/orc/orcprogram-powerpc.c
@@ -88,7 +88,39 @@ enum {
   POWERPC_V28,
   POWERPC_V29,
   POWERPC_V30,
-  POWERPC_V31
+  POWERPC_V31,
+  POWERPC_F0 = ORC_VEC2_REG_BASE,
+  POWERPC_F1,
+  POWERPC_F2,
+  POWERPC_F3,
+  POWERPC_F4,
+  POWERPC_F5,
+  POWERPC_F6,
+  POWERPC_F7,
+  POWERPC_F8,
+  POWERPC_F9,
+  POWERPC_F10,
+  POWERPC_F11,
+  POWERPC_F12,
+  POWERPC_F13,
+  POWERPC_F14,
+  POWERPC_F15,
+  POWERPC_F16,
+  POWERPC_F17,
+  POWERPC_F18,
+  POWERPC_F19,
+  POWERPC_F20,
+  POWERPC_F21,
+  POWERPC_F22,
+  POWERPC_F23,
+  POWERPC_F24,
+  POWERPC_F25,
+  POWERPC_F26,
+  POWERPC_F27,
+  POWERPC_F28,
+  POWERPC_F29,
+  POWERPC_F30,
+  POWERPC_F31
 };
 
 const char *
@@ -124,36 +156,6 @@ powerpc_regnum (int i)
   return (i-ORC_GP_REG_BASE)&0x1f;
 }
 
-int
-orc_program_powerpc_allocate_register (OrcProgram *program, int data_reg)
-{
-  int i;
-
-  if (!data_reg) {
-    for(i=ORC_GP_REG_BASE;i<ORC_GP_REG_BASE+32;i++){
-      if (program->alloc_regs[i] == 0) {
-        program->alloc_regs[i]++;
-        program->used_regs[i] = 1;
-        return i;
-      }
-    }
-  } else {
-    for(i=ORC_GP_REG_BASE+32;i<ORC_GP_REG_BASE+64;i++){
-      if (program->alloc_regs[i] == 0) {
-        program->alloc_regs[i]++;
-        program->used_regs[i] = 1;
-        return i;
-      }
-    }
-  }
-  printf("register overflow\n");
-  return 0;
-}
-
-
-void orc_program_rewrite_vars (OrcProgram *program);
-void orc_program_dump (OrcProgram *program);
-
 void
 powerpc_emit(OrcProgram *program, unsigned int insn)
 {
@@ -354,13 +356,27 @@ orc_program_powerpc_init (OrcProgram *program)
 {
   int i;
 
-  for(i=ORC_GP_REG_BASE;i<ORC_GP_REG_BASE+64;i++){
-    program->alloc_regs[i] = 0;
+  for(i=0;i<32;i++){
+    program->valid_regs[POWERPC_R0+i] = 1;
+    program->valid_regs[POWERPC_F0+i] = 1;
+    program->valid_regs[POWERPC_V0+i] = 1;
+  }
+  program->valid_regs[POWERPC_R0] = 0; /* used for temp space */
+  program->valid_regs[POWERPC_R1] = 0; /* stack pointer */
+  program->valid_regs[POWERPC_R2] = 0; /* TOC pointer */
+  program->valid_regs[POWERPC_R3] = 0; /* pointer to OrcExecutor */
+  program->valid_regs[POWERPC_R13] = 0; /* reserved */
+  program->valid_regs[POWERPC_V0] = 0; /* used for temp space */
+
+  for(i=14;i<32;i++){
+    program->save_regs[POWERPC_R0 + i] = 1;
+    program->save_regs[POWERPC_F0 + i] = 1;
   }
-  for(i=0;i<9;i++){
-    program->alloc_regs[POWERPC_R0 + i] = 1;
+  for(i=20;i<32;i++){
+    program->save_regs[POWERPC_V0 + i] = 1;
   }
-  program->alloc_regs[POWERPC_V0] = 1;
+
+  program->data_register_class = 2;
 }
 
 void
diff --git a/orc/orcprogram.c b/orc/orcprogram.c
index 30e595b..b64d41a 100644
--- a/orc/orcprogram.c
+++ b/orc/orcprogram.c
@@ -21,7 +21,11 @@ orc_program_new (void)
   p = malloc(sizeof(OrcProgram));
   memset (p, 0, sizeof(OrcProgram));
 
+#if defined(HAVE_POWERPC)
+  p->rule_set = ORC_RULE_ALTIVEC_1;
+#else
   p->rule_set = ORC_RULE_MMX_1;
+#endif
   p->n_per_loop = 1;
   p->loop_shift = 0;
 


More information about the Liboil-commit mailing list