aboutsummaryrefslogtreecommitdiff
path: root/sim/sh/gencode.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2021-11-11 19:30:41 -0500
committerMike Frysinger <vapier@gentoo.org>2021-11-13 00:57:00 -0500
commitdc5a4621600e650b89deb92c79eaacc73fcc767a (patch)
tree751639d6cd55b404a0ec0ccc03411649abfa7eb2 /sim/sh/gencode.c
parentb9252d079a28c6da1b42e501217f25e8a6652321 (diff)
downloadfsf-binutils-gdb-dc5a4621600e650b89deb92c79eaacc73fcc767a.zip
fsf-binutils-gdb-dc5a4621600e650b89deb92c79eaacc73fcc767a.tar.gz
fsf-binutils-gdb-dc5a4621600e650b89deb92c79eaacc73fcc767a.tar.bz2
sim: sh: rework carry checks to not rely on integer overflows
In <=gcc-7 versions, -fstrict-overflow is enabled by default, and that triggers warnings in this code that relies on integer overflows to test for carries. Change the logic to test against the limit directly.
Diffstat (limited to 'sim/sh/gencode.c')
-rw-r--r--sim/sh/gencode.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sim/sh/gencode.c b/sim/sh/gencode.c
index 80eecfd..5eb7caf 100644
--- a/sim/sh/gencode.c
+++ b/sim/sh/gencode.c
@@ -2266,7 +2266,7 @@ op ppi_tab[] =
"int Sx_grd = GET_DSP_GRD (x);",
"",
"res = Sx - 0x10000;",
- "carry = res > Sx;",
+ "carry = Sx < (INT_MIN + 0x10000);",
"res_grd = Sx_grd - carry;",
"COMPUTE_OVERFLOW;",
"ADD_SUB_GE;",
@@ -2277,7 +2277,7 @@ op ppi_tab[] =
"int Sx_grd = GET_DSP_GRD (x);",
"",
"res = Sx + 0x10000;",
- "carry = res < Sx;",
+ "carry = Sx > (INT_MAX - 0x10000);",
"res_grd = Sx_grd + carry;",
"COMPUTE_OVERFLOW;",
"ADD_SUB_GE;",
@@ -2288,7 +2288,7 @@ op ppi_tab[] =
"int Sy_grd = SIGN32 (Sy);",
"",
"res = Sy - 0x10000;",
- "carry = res > Sy;",
+ "carry = Sy < (INT_MIN + 0x10000);",
"res_grd = Sy_grd - carry;",
"COMPUTE_OVERFLOW;",
"ADD_SUB_GE;",
@@ -2299,7 +2299,7 @@ op ppi_tab[] =
"int Sy_grd = SIGN32 (Sy);",
"",
"res = Sy + 0x10000;",
- "carry = res < Sy;",
+ "carry = Sy > (INT_MAX - 0x10000);",
"res_grd = Sy_grd + carry;",
"COMPUTE_OVERFLOW;",
"ADD_SUB_GE;",