diff options
author | Andrew Stubbs <andrew.stubbs@st.com> | 2008-02-04 17:26:07 +0000 |
---|---|---|
committer | Andrew Stubbs <andrew.stubbs@st.com> | 2008-02-04 17:26:07 +0000 |
commit | f3876f690925c2febc6964e43e5646fd3bd0b954 (patch) | |
tree | 890eada9fd354057518d6e49e8e37431535ca5d3 /sim/sh/interp.c | |
parent | c39c82565f3bf5a918aebbe329f66622e941e027 (diff) | |
download | gdb-f3876f690925c2febc6964e43e5646fd3bd0b954.zip gdb-f3876f690925c2febc6964e43e5646fd3bd0b954.tar.gz gdb-f3876f690925c2febc6964e43e5646fd3bd0b954.tar.bz2 |
2008-02-04 Antony King <antony.king@st.com>
* interp.c (macl): Fix non-portable implementation.
Diffstat (limited to 'sim/sh/interp.c')
-rw-r--r-- | sim/sh/interp.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/sim/sh/interp.c b/sim/sh/interp.c index d89b0dc..a2472ad 100644 --- a/sim/sh/interp.c +++ b/sim/sh/interp.c @@ -1429,14 +1429,9 @@ macl (regs, memory, n, m) int m, n; { long tempm, tempn; - long prod, macl, mach, sum; - long long ans,ansl,ansh,t; - unsigned long long high,low,combine; - union mac64 - { - long m[2]; /* mach and macl*/ - long long m64; /* 64 bit MAC */ - }mac64; + long macl, mach; + long long ans; + long long mac64; tempm = RSLAT (regs[m]); regs[m] += 4; @@ -1447,15 +1442,15 @@ macl (regs, memory, n, m) mach = MACH; macl = MACL; - mac64.m[0] = macl; - mac64.m[1] = mach; + mac64 = ((long long) macl & 0xffffffff) | + ((long long) mach & 0xffffffff) << 32; ans = (long long) tempm * (long long) tempn; /* Multiply 32bit * 32bit */ - mac64.m64 += ans; /* Accumulate 64bit + 64 bit */ + mac64 += ans; /* Accumulate 64bit + 64 bit */ - macl = mac64.m[0]; - mach = mac64.m[1]; + macl = (long) (mac64 & 0xffffffff); + mach = (long) ((mac64 >> 32) & 0xffffffff); if (S) /* Store only 48 bits of the result */ { |