update generated code
authorDavid Schleef <ds@schleef.org>
Sat, 8 Jan 2011 00:58:27 +0000 (16:58 -0800)
committerDavid Schleef <ds@schleef.org>
Sat, 8 Jan 2011 00:58:27 +0000 (16:58 -0800)
orc/orcemulateopcodes.c
orc/orcfunctions.c
orc/orcfunctions.h

index c618eee..ebf4e50 100644 (file)
@@ -1347,7 +1347,7 @@ emulate_div255w (OrcOpcodeExecutor *ex, int offset, int n)
     /* 0: loadw */
     var32 = ptr4[i];
     /* 1: div255w */
-    var33.i = ((uint16_t)(((orc_uint16)(var32.i+128)) + (((orc_uint16)(var32.i+128))>>8)))>>8;
+    var33.i = ((orc_uint16)(((orc_uint16)(var32.i+128)) + (((orc_uint16)(var32.i+128))>>8)))>>8;
     /* 2: storew */
     ptr0[i] = var33;
   }
@@ -1376,7 +1376,7 @@ emulate_divluw (OrcOpcodeExecutor *ex, int offset, int n)
     /* 1: loadw */
     var33 = ptr5[i];
     /* 2: divluw */
-    var34.i = ((var33.i&0xff) == 0) ? 255 : ORC_CLAMP_UB(((uint16_t)var32.i)/((uint16_t)var33.i&0xff));
+    var34.i = ((var33.i&0xff) == 0) ? 255 : ORC_CLAMP_UB(((orc_uint16)var32.i)/((orc_uint16)var33.i&0xff));
     /* 3: storew */
     ptr0[i] = var34;
   }
index 1151756..37dbe98 100644 (file)
@@ -31,6 +31,7 @@ typedef unsigned __int16 orc_uint16;
 typedef unsigned __int32 orc_uint32;
 typedef unsigned __int64 orc_uint64;
 #define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
 #else
 #include <limits.h>
 typedef signed char orc_int8;
@@ -156,13 +157,14 @@ orc_memcpy (void * d1, const void * s1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
       OrcCompileResult result;
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "orc_memcpy");
@@ -173,17 +175,20 @@ orc_memcpy (void * d1, const void * s1, int n)
       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1);
 
       result = orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->arrays[ORC_VAR_S1] = (void *)s1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
@@ -241,13 +246,14 @@ orc_memset (void * d1, int p1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static int p_inited = 0;
-  static OrcProgram *p = 0;
+  static OrcCode *c = 0;
   void (*func) (OrcExecutor *);
 
   if (!p_inited) {
     orc_once_mutex_lock ();
     if (!p_inited) {
       OrcCompileResult result;
+      OrcProgram *p;
 
       p = orc_program_new ();
       orc_program_set_name (p, "orc_memset");
@@ -258,17 +264,20 @@ orc_memset (void * d1, int p1, int n)
       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, ORC_VAR_D1);
 
       result = orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
     }
     p_inited = TRUE;
     orc_once_mutex_unlock ();
   }
-  ex->program = p;
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
 
   ex->n = n;
   ex->arrays[ORC_VAR_D1] = d1;
   ex->params[ORC_VAR_P1] = p1;
 
-  func = p->code_exec;
+  func = c->exec;
   func (ex);
 }
 #endif
index 07f5265..6ebc92c 100644 (file)
@@ -34,6 +34,7 @@ typedef unsigned __int16 orc_uint16;
 typedef unsigned __int32 orc_uint32;
 typedef unsigned __int64 orc_uint64;
 #define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
 #else
 #include <limits.h>
 typedef signed char orc_int8;