From e70fc2f8ef726cd2ef60928045d402b6be7f3514 Mon Sep 17 00:00:00 2001 From: Michael Frysinger Date: Sat, 18 Jun 2011 19:42:55 +0000 Subject: [PATCH] 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 Signed-off-by: Mike Frysinger --- include/opcode/ChangeLog | 4 ++++ include/opcode/bfin.h | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index f33c0e65c..5474c8569 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,3 +1,7 @@ +2011-06-18 Robin Getz + + * bfin.h (is_macmod_signed): New func + 2011-06-18 Mike Frysinger * bfin.h (is_macmod_pmove): Add missing space before func args. diff --git a/include/opcode/bfin.h b/include/opcode/bfin.h index 30bb90d26..26f019381 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...|