aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-06-18 19:42:55 +0000
committerMike Frysinger <vapier@gentoo.org>2011-06-18 19:42:55 +0000
commitef26d60eba5736240c27c545e275667bb4b0fbd1 (patch)
tree1964dea48acfb2df2639d14cb5cb8fd8b8b62f5b /include
parent075a845a9281b4bdef459b6494a7db3bf666b911 (diff)
downloadfsf-binutils-gdb-ef26d60eba5736240c27c545e275667bb4b0fbd1.zip
fsf-binutils-gdb-ef26d60eba5736240c27c545e275667bb4b0fbd1.tar.gz
fsf-binutils-gdb-ef26d60eba5736240c27c545e275667bb4b0fbd1.tar.bz2
sim: bfin: fix sign extension in dsp insns with MM flag
After testing the hardware with all the different dsp flags, the MM flag triggers sign extension in all modes. So drop the limited use of it, and the local custom helper that was also extending unsigned values. We also can see that the flag checks in the mult/mac insns have the same behavior with sign extending, so add a helper func to keep the logic the same in both places. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'include')
-rw-r--r--include/opcode/ChangeLog4
-rwxr-xr-xinclude/opcode/bfin.h6
2 files changed, 10 insertions, 0 deletions
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index f33c0e6..5474c85 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,7 @@
+2011-06-18 Robin Getz <robin.getz@analog.com>
+
+ * bfin.h (is_macmod_signed): New func
+
2011-06-18 Mike Frysinger <vapier@gentoo.org>
* bfin.h (is_macmod_pmove): Add missing space before func args.
diff --git a/include/opcode/bfin.h b/include/opcode/bfin.h
index 30bb90d..26f0193 100755
--- a/include/opcode/bfin.h
+++ b/include/opcode/bfin.h
@@ -53,6 +53,12 @@ static inline int is_macmod_hmove (int x)
|| (x == M_TFU) || (x == M_S2RND) || (x == M_ISS2) || (x == M_IH);
}
+static inline int is_macmod_signed (int x)
+{
+ return (x == 0) || (x == M_IS) || (x == M_T) || (x == M_S2RND)
+ || (x == M_ISS2) || (x == M_IH) || (x == M_W32);
+}
+
/* dsp32mac
+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
| 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...|