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

index a2329be759398350e3a389bc39c80cf3b210f6f8..4780f0a2a6e51c57ee844c61c999c8661847197b 100644 (file)
@@ -1,3 +1,7 @@
+2000-06-22  Alexandre Oliva  <aoliva@cygnus.com>
+
+       * armemu.c (MultiplyAdd64): Fix computation of flag N.
+
 2000-06-20  Alexandre Oliva  <aoliva@cygnus.com>
 
        * armemu.h (NEGBRANCH): Do not overwrite the two most significant
index acbcb752959c83e55b94696b240772312c68ba42..426617d6bb3ac725c846fc55043391829595d627 100644 (file)
@@ -3871,10 +3871,9 @@ MultiplyAdd64 (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));
     }
 
   return scount + 1;           /* extra cycle for addition */