summaryrefslogtreecommitdiff
path: root/sim/ppc
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2004-06-28 19:02:49 +0000
committerJim Blandy <jimb@codesourcery.com>2004-06-28 19:02:49 +0000
commit71d39cfcfd3409f3746a20edc34f2106900ae1cb (patch)
treec20e9400d1de5a4f9c272cb77aaf9f3d98a0e5c5 /sim/ppc
parent06d5cf63af68c61ed05d1383d74d39073ffb9c6c (diff)
downloadbinutils-71d39cfcfd3409f3746a20edc34f2106900ae1cb.tar.gz
binutils-71d39cfcfd3409f3746a20edc34f2106900ae1cb.tar.bz2
binutils-71d39cfcfd3409f3746a20edc34f2106900ae1cb.zip
* 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.
Diffstat (limited to 'sim/ppc')
-rw-r--r--sim/ppc/ChangeLog5
-rw-r--r--sim/ppc/e500_registers.h7
2 files changed, 10 insertions, 2 deletions
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog
index 55b18cceec3..f2f1aa8014c 100644
--- a/sim/ppc/ChangeLog
+++ b/sim/ppc/ChangeLog
@@ -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
diff --git a/sim/ppc/e500_registers.h b/sim/ppc/e500_registers.h
index cd12ab5ec27..ccf5e0f88c0 100644
--- a/sim/ppc/e500_registers.h
+++ b/sim/ppc/e500_registers.h
@@ -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))