diff options
| author | Joseph Myers <joseph@codesourcery.com> | 2013-11-04 11:53:50 -0500 |
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2014-01-07 19:34:47 -0500 |
| commit | 4f6db5efff8256c7f608285877e892e7e649137a (patch) | |
| tree | f648d440e360788aadef2f5cd0c8d68f027af9ac /include/math-emu | |
| parent | 28414a6def9dc00dcd0d0f3eea6911fda9a4a4e1 (diff) | |
math-emu: fix floating-point to integer unsigned saturation
The math-emu macros _FP_TO_INT and _FP_TO_INT_ROUND are supposed to
saturate their results for out-of-range arguments, except in the case
rsigned == 2 (when instead the low bits of the result are taken).
However, in the case rsigned == 0 (converting to unsigned integers),
they mistakenly produce 0 for positive results and the maximum
unsigned integer for negative results, the opposite of correct
unsigned saturation. This patch fixes the logic.
Signed-off-by: Joseph Myers <joseph@codesourcery.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'include/math-emu')
| -rw-r--r-- | include/math-emu/op-common.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h index 9696a5e2c437..70fe5e989ace 100644 --- a/include/math-emu/op-common.h +++ b/include/math-emu/op-common.h | |||
| @@ -685,7 +685,7 @@ do { \ | |||
| 685 | else \ | 685 | else \ |
| 686 | { \ | 686 | { \ |
| 687 | r = 0; \ | 687 | r = 0; \ |
| 688 | if (X##_s) \ | 688 | if (!X##_s) \ |
| 689 | r = ~r; \ | 689 | r = ~r; \ |
| 690 | } \ | 690 | } \ |
| 691 | FP_SET_EXCEPTION(FP_EX_INVALID); \ | 691 | FP_SET_EXCEPTION(FP_EX_INVALID); \ |
| @@ -762,7 +762,7 @@ do { \ | |||
| 762 | if (!rsigned) \ | 762 | if (!rsigned) \ |
| 763 | { \ | 763 | { \ |
| 764 | r = 0; \ | 764 | r = 0; \ |
| 765 | if (X##_s) \ | 765 | if (!X##_s) \ |
| 766 | r = ~r; \ | 766 | r = ~r; \ |
| 767 | } \ | 767 | } \ |
| 768 | else if (rsigned != 2) \ | 768 | else if (rsigned != 2) \ |
