* armemu.c (Multiply64): Fix computation of flag N.
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 22 Jun 2000 20:42:34 +0000 (20:42 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Thu, 22 Jun 2000 20:42:34 +0000 (20:42 +0000)
sim/arm/ChangeLog
sim/arm/armemu.c

index 4780f0a2a6e51c57ee844c61c999c8661847197b..c0990c72b40c4a73ce6013a04946e3e7d04201b9 100644 (file)
@@ -1,5 +1,7 @@
 2000-06-22  Alexandre Oliva  <aoliva@cygnus.com>
 
+       * armemu.c (Multiply64): Fix computation of flag N.
+
        * armemu.c (MultiplyAdd64): Fix computation of flag N.
 
 2000-06-20  Alexandre Oliva  <aoliva@cygnus.com>
index 426617d6bb3ac725c846fc55043391829595d627..e4e963ba3c85a08448f2c949f078e94730e85fec 100644 (file)
@@ -3819,10 +3819,9 @@ Multiply64 (ARMul_State * state, ARMword instr, int msigned, int scc)
 
   if (scc)
     {
-      if ((RdHi == 0) && (RdLo == 0))
-       ARMul_NegZero (state, RdHi);    /* zero value */
-      else
-       ARMul_NegZero (state, scc);     /* non-zero value */
+      /* Ensure that both RdHi and RdLo are used to compute Z, but
+        don't let RdLo's sign bit make it to N.  */
+      ARMul_NegZero (state, RdHi | (RdLo >> 16) | (RdLo & 0xFFFF));
     }
 
   /* The cycle count depends on whether the instruction is a signed or