aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-08-05 13:09:43 +0000
committerNick Clifton <nickc@gcc.gnu.org>2015-08-05 13:09:43 +0000
commitb4bd32c169b461afd39a37318141f1c14af5e662 (patch)
treecf4cdea97a4c008ff67375631e6f948dae186737 /gcc
parentaad88aede922888994eda29d6847cf557b50a7fd (diff)
downloadgcc-b4bd32c169b461afd39a37318141f1c14af5e662.zip
gcc-b4bd32c169b461afd39a37318141f1c14af5e662.tar.gz
gcc-b4bd32c169b461afd39a37318141f1c14af5e662.tar.bz2
gcc * config/rl78/rl78.c (rl78_force_nonfar_3): Remove optimization
to allow identical far pointers to remain. tests * gcc.target/rl78: New directory. * gcc.target/rl78/rl78.exp: New file: Test driver. * gcc.target/rl78/test_addm3.c: New file: Test adds. From-SVN: r226624
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rl78/rl78.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/rl78/rl78.exp43
-rw-r--r--gcc/testsuite/gcc.target/rl78/test_addm3.c99
-rw-r--r--gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c22
6 files changed, 175 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 349bbcb..7769097 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-05 Nick Clifton <nickc@redhat.com>
+
+ * config/rl78/rl78.c (rl78_force_nonfar_3): Remove optimization
+ to allow identical far pointers to remain.
+
2015-08-05 Richard Biener <rguenther@suse.de>
PR middle-end/67120
diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c
index 7069530..e74d6c3 100644
--- a/gcc/config/rl78/rl78.c
+++ b/gcc/config/rl78/rl78.c
@@ -608,13 +608,6 @@ rl78_force_nonfar_3 (rtx *operands, rtx (*gen)(rtx,rtx,rtx))
int did = 0;
rtx temp_reg = NULL;
- /* As an exception, we allow two far operands if they're identical
- and the third operand is not a MEM. This allows global variables
- to be incremented, for example. */
- if (rtx_equal_p (operands[0], operands[1])
- && ! MEM_P (operands[2]))
- return 0;
-
/* FIXME: Likewise. */
if (rl78_far_p (operands[1]))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 61d9848..62a4080 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-05 Nick Clifton <nickc@redhat.com>
+
+ * gcc.target/rl78: New directory.
+ * gcc.target/rl78/rl78.exp: New file: Test driver.
+ * gcc.target/rl78/test_addm3.c: New file: Test adds.
+
2015-08-05 Richard Biener <rguenther@suse.de>
PR middle-end/67120
diff --git a/gcc/testsuite/gcc.target/rl78/rl78.exp b/gcc/testsuite/gcc.target/rl78/rl78.exp
new file mode 100644
index 0000000..f327402
--- /dev/null
+++ b/gcc/testsuite/gcc.target/rl78/rl78.exp
@@ -0,0 +1,43 @@
+# Copyright (C) 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't the right target.
+if { ![istarget rl78-*-*] } then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+ set DEFAULT_CFLAGS ""
+}
+
+# Initialize `dg'.
+dg-init
+
+# Find all tests
+set tests [lsort [find $srcdir/$subdir *.\[cS\]]]
+
+# Main loop.
+gcc-dg-runtest $tests "" $DEFAULT_CFLAGS
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.target/rl78/test_addm3.c b/gcc/testsuite/gcc.target/rl78/test_addm3.c
new file mode 100644
index 0000000..1beeb1b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/rl78/test_addm3.c
@@ -0,0 +1,99 @@
+/* Remove `-ansi' from options to enable the use of __far and long long. */
+/* { dg-options "" } */
+
+#define ADD(TYPE, name) \
+ TYPE \
+ add##name(TYPE a, TYPE b) \
+ { \
+ return a + b; \
+ } \
+
+#define ADDIMM(TYPE, name) \
+ TYPE \
+ addimm##name(TYPE a) \
+ { \
+ return a + 50; \
+ } \
+
+#define ADDFAR(TYPE, name) \
+ TYPE __far gf##name; \
+ void \
+ addfar##name(TYPE __far *pa, TYPE b) \
+ { \
+ gf##name += b; \
+ *pa += 50; \
+ } \
+
+
+ADD (char, qi3)
+ADD (int, hi3)
+ADD (long, si3)
+ADD (long long, di3)
+ADD (float, sf3)
+ADD (double, df3)
+
+ADDIMM (char, qi3)
+ADDIMM (int, hi3)
+ADDIMM (long, si3)
+ADDIMM (long long, di3)
+ADDIMM (float, sf3)
+ADDIMM (double, df3)
+
+ADDFAR (char, qi3)
+ADDFAR (int, hi3)
+ADDFAR (long, si3)
+ADDFAR (long long, di3)
+ADDFAR (float, sf3)
+ADDFAR (double, df3)
+
+char aqi1, aqi2;
+int ahi1, ahi2;
+long asi1, asi2;
+long long adi1, adi2;
+float af1, af2;
+double ad1, ad2;
+
+void
+testglobal (void)
+{
+ aqi1 += aqi2;
+ ahi1 += ahi2;
+ asi1 += asi2;
+ adi1 += adi2;
+ af1 += af2;
+ ad1 += ad2;
+}
+
+void
+testglobal2 (void)
+{
+ aqi1 += 10;
+ ahi1 += 11;
+ asi1 += 12;
+ adi1 += 13;
+ af1 += 2.0;
+ ad1 += 4.0;
+}
+
+void
+testptr (char *aqi1, int *ahi1, long *asi1, long long *adi1, float *af1, double *ad1,
+ char *aqi2, int *ahi2, long *asi2, long long *adi2, float *af2, double *ad2)
+{
+ *aqi1 += *aqi2;
+ *ahi1 += *ahi2;
+ *asi1 += *asi2;
+ *adi1 += *adi2;
+ *af1 += *af2;
+ *ad1 += *ad2;
+}
+
+void
+testptr2 (char *aqi1, int *ahi1, long *asi1, long long *adi1, float *af1, double *ad1)
+{
+ *aqi1 += 5;
+ *ahi1 += 10;
+ *asi1 += 11;
+ *adi1 += 12;
+ *af1 += 4.5;
+ *ad1 += 5.5;
+}
diff --git a/gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c b/gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
index e07ff71..81a43c8 100644
--- a/gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
+++ b/gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
@@ -15,7 +15,29 @@ extern float _COM_ADDf (float, float);
extern float _COM_SUBf (float, float);
extern float _COM_MULf (float, float);
extern float _COM_DIVf (float, float);
+
+#ifdef __RX_64BIT_DOUBLES__
+extern int _COM_CMPLTf (double, double);
+extern int _COM_CMPGTf (double, double);
+extern int _COM_CMPLEf (double, double);
+extern int _COM_CMPGEf (double, double);
+extern int _COM_CMPEQf (double, double);
+extern int _COM_CMPNEf (double, double);
+#else
extern int _COM_CMPLTf (float, float);
+extern int _COM_CMPGTf (float, float);
+extern int _COM_CMPLEf (float, float);
+extern int _COM_CMPGEf (float, float);
+extern int _COM_CMPEQf (float, float);
+extern int _COM_CMPNEf (float, float);
+#endif
+
+extern int _COM_CMPLTd (double, double);
+extern int _COM_CMPGTd (double, double);
+extern int _COM_CMPLEd (double, double);
+extern int _COM_CMPGEd (double, double);
+extern int _COM_CMPEQd (double, double);
+extern int _COM_CMPNEd (double, double);
extern long long _COM_MUL64 (long long, long long);
extern signed long long _COM_DIV64s (long long, long long);