Fix mulhul opcode and update generated code
authorDavid Schleef <ds@schleef.org>
Mon, 2 Aug 2010 23:09:02 +0000 (16:09 -0700)
committerDavid Schleef <ds@schleef.org>
Mon, 2 Aug 2010 23:10:38 +0000 (16:10 -0700)
orc/opcodes.h
orc/orcemulateopcodes.c
orc/orcfunctions.c
orc/orcopcodes.c

index 2ea8fcf..f933299 100644 (file)
@@ -79,7 +79,7 @@ BINARY_SL(minsl, "ORC_MIN(%s, %s)")
 BINARY_UL(minul, "ORC_MIN((orc_uint32)%s, (orc_uint32)%s)")
 BINARY_SL(mulll, "(%s * %s) & 0xffffffff")
 BINARY_SL(mulhsl, "((orc_int64)%s * (orc_int64)%s) >> 32")
-BINARY_UL(mulhul, "((orc_uint64)%s * (orc_uint64)%s) >> 32")
+BINARY_UL(mulhul, "((orc_uint64)(orc_uint32)%s * (orc_uint64)(orc_uint32)%s) >> 32")
 BINARY_SL(orl, "%s | %s")
 BINARY_SL(shll, "%s << %s")
 BINARY_SL(shrsl, "%s >> %s")
index 0566dba..5b0a8ed 100644 (file)
@@ -2798,7 +2798,7 @@ emulate_mulhul (OrcOpcodeExecutor *ex, int n)
     /* 1: loadl */
     var33.i = var5.i;
     /* 2: mulhul */
-    var34.i = ((orc_uint64)var32.i * (orc_uint64)var33.i) >> 32;
+    var34.i = ((orc_uint64)(orc_uint32)var32.i * (orc_uint64)(orc_uint32)var33.i) >> 32;
     /* 3: storel */
     var0.i = var34.i;
     *ptr0 = var0;
index cba5ae6..0d4db6b 100644 (file)
@@ -195,14 +195,17 @@ orc_memset (void * d1, int p1, int n){
   orc_int8 * ptr0;
   const int var24 = p1;
   orc_int8 var32;
+  orc_int8 var33;
 
   ptr0 = (orc_int8 *)d1;
 
   for (i = 0; i < n; i++) {
-    /* 0: copyb */
+    /* 0: loadpb */
     var32 = var24;
-    /* 1: storeb */
-    var0 = var32;
+    /* 1: copyb */
+    var33 = var32;
+    /* 2: storeb */
+    var0 = var33;
     *ptr0 = var0;
     ptr0++;
   }
@@ -219,14 +222,17 @@ _backup_orc_memset (OrcExecutor *ex)
   orc_int8 * ptr0;
   const int var24 = ex->params[24];
   orc_int8 var32;
+  orc_int8 var33;
 
   ptr0 = (orc_int8 *)ex->arrays[0];
 
   for (i = 0; i < n; i++) {
-    /* 0: copyb */
+    /* 0: loadpb */
     var32 = var24;
-    /* 1: storeb */
-    var0 = var32;
+    /* 1: copyb */
+    var33 = var32;
+    /* 2: storeb */
+    var0 = var33;
     *ptr0 = var0;
     ptr0++;
   }
index 2e7d30e..6152f6e 100644 (file)
@@ -468,7 +468,7 @@ BINARY_SL(minsl, (a < b) ? a : b)
 BINARY_UL(minul, ((orc_uint32)a < (orc_uint32)b) ? a : b)
 BINARY_SL(mulll, (a * b) & 0xffffffff)
 BINARY_SL(mulhsl, ((orc_int64)a * (orc_int64)b) >> 32)
-BINARY_UL(mulhul, ((orc_uint64)a * (orc_uint64)b) >> 32)
+BINARY_UL(mulhul, ((orc_uint64)(orc_uint32)a * (orc_uint64)(orc_uint32)b) >> 32)
 BINARY_SL(orl, a | b)
 BINARY_SL(shll, a << b)
 BINARY_SL(shrsl, a >> b)