* e500_registers.h (EVR): Cast the 32-bit value of the GPR to an
authorJim Blandy <jimb@codesourcery.com>
Mon, 28 Jun 2004 19:02:49 +0000 (19:02 +0000)
committerJim Blandy <jimb@codesourcery.com>
Mon, 28 Jun 2004 19:02:49 +0000 (19:02 +0000)
unsigned type before or-ing it with a 64-bit value.

sim/ppc/ChangeLog
sim/ppc/e500_registers.h

index 55b18cceec3841bcebebeff7d4e4db0ace91f846..f2f1aa8014c35722aad994470365d1294ddcd5a9 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-28  Jim Blandy  <jimb@redhat.com>
+
+       * e500_registers.h (EVR): Cast the 32-bit value of the GPR to an
+       unsigned type before or-ing it with a 64-bit value.
+
 2004-06-15  Alan Modra  <amodra@bigpond.net.au>
 
        * hw_htab.c (htab_sum_binary(bfd): Use bfd_get_section_size
index cd12ab5ec27e420bbfe5a2ccd7b756ed288f0dab..ccf5e0f88c0a20d6219241ab34dec9f03d9212b3 100644 (file)
@@ -79,5 +79,8 @@ struct e500_regs {
 /* e500 register high bits */
 #define GPRH(N)                cpu_registers(processor)->e500.gprh[N]
 
-/* e500 unified vector register */
-#define EVR(N)         ((((unsigned64)GPRH(N)) << 32) | GPR(N))
+/* e500 unified vector register
+   We need to cast the gpr value to an unsigned type so that it
+   doesn't get sign-extended when it's or-ed with a 64-bit value; that
+   would wipe out the upper 32 bits of the register's value.  */
+#define EVR(N)         ((((unsigned64)GPRH(N)) << 32) | (unsigned32) GPR(N))