diff options
author | Nick Clifton <nickc@redhat.com> | 2015-08-05 13:09:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2015-08-05 13:09:43 +0000 |
commit | b4bd32c169b461afd39a37318141f1c14af5e662 (patch) | |
tree | cf4cdea97a4c008ff67375631e6f948dae186737 /gcc | |
parent | aad88aede922888994eda29d6847cf557b50a7fd (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rl78/rl78.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/rl78/rl78.exp | 43 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/rl78/test_addm3.c | 99 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c | 22 |
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); |