aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-11-04 16:53:50 +0000
committerScott Wood <scottwood@freescale.com>2014-01-07 18:34:47 -0600
commit4f6db5efff8256c7f608285877e892e7e649137a (patch)
treef648d440e360788aadef2f5cd0c8d68f027af9ac
parentpowerpc: fix e500 SPE float rounding inexactness detection (diff)
downloadwireguard-linux-4f6db5efff8256c7f608285877e892e7e649137a.tar.xz
wireguard-linux-4f6db5efff8256c7f608285877e892e7e649137a.zip
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>
-rw-r--r--include/math-emu/op-common.h4
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 { \
else \
{ \
r = 0; \
- if (X##_s) \
+ if (!X##_s) \
r = ~r; \
} \
FP_SET_EXCEPTION(FP_EX_INVALID); \
@@ -762,7 +762,7 @@ do { \
if (!rsigned) \
{ \
r = 0; \
- if (X##_s) \
+ if (!X##_s) \
r = ~r; \
} \
else if (rsigned != 2) \