diff options
author | Janis Johnson <janis187@us.ibm.com> | 2009-09-28 16:55:52 +0000 |
---|---|---|
committer | Janis Johnson <janis@gcc.gnu.org> | 2009-09-28 16:55:52 +0000 |
commit | d366d023cbfcdefc9aebbbef54e49acc4fe4a5dd (patch) | |
tree | 81ba6a6f8ec196b7cfee02cf9fe08b7e0775d5ad | |
parent | 384c400a82f70420e31fbdc7c1b0b9368fc53b5b (diff) | |
download | gcc-d366d023cbfcdefc9aebbbef54e49acc4fe4a5dd.zip gcc-d366d023cbfcdefc9aebbbef54e49acc4fe4a5dd.tar.gz gcc-d366d023cbfcdefc9aebbbef54e49acc4fe4a5dd.tar.bz2 |
mangle.c (write_builtin_type): Support decimal float types.
* mangle.c (write_builtin_type): Support decimal float types.
* g++.dg/dfp: New directory.
* g++.dg/dg.exp: Prune tests in dfp directory.
* g++.dg/dfp/dfp/exp: New.
* g++.dg/dfp/mangle-mode.C: New test.
From-SVN: r152242
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/dfp/dfp.exp | 62 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/dfp/mangle-mode.C | 37 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/dg.exp | 1 |
6 files changed, 117 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index de0a97f..ff2d352 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2009-09-28 Janis Johnson <janis187@us.ibm.com> + + * mangle.c (write_builtin_type): Support decimal float types. + 2009-09-28 Richard Henderson <rth@redhat.com> * cp-objcp-common.h (LANG_HOOKS_EH_USE_CXA_END_CLEANUP): New. diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index bb046d2..bcaf5b0 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1894,6 +1894,12 @@ write_builtin_type (tree type) write_char ('d'); else if (type == long_double_type_node) write_char ('e'); + else if (type == dfloat32_type_node) + write_string ("Df"); + else if (type == dfloat64_type_node) + write_string ("Dd"); + else if (type == dfloat128_type_node) + write_string ("De"); else gcc_unreachable (); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a58e42e..566d5be 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-09-28 Janis Johnson <janis187@us.ibm.com> + + * g++.dg/dfp: New directory. + * g++.dg/dg.exp: Prune tests in dfp directory. + * g++.dg/dfp/dfp/exp: New. + * g++.dg/dfp/mangle-mode.C: New test. + 2009-09-28 Michael Matz <matz@suse.de> * gcc.dg/builtins-44.c: Use __builtin_isinf_sign when checking diff --git a/gcc/testsuite/g++.dg/dfp/dfp.exp b/gcc/testsuite/g++.dg/dfp/dfp.exp new file mode 100644 index 0000000..1f5d47c --- /dev/null +++ b/gcc/testsuite/g++.dg/dfp/dfp.exp @@ -0,0 +1,62 @@ +# Copyright (C) 2005, 2006, 2007, 2009 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 GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib g++-dg.exp + +# Skip these tests for targets that don't support this extension. +if { ![check_effective_target_dfp] } { + return; +} + +# If the decimal float is supported in the compiler but not yet in the +# runtime, treat all tests as compile-only. +global dg-do-what-default +set save-dg-do-what-default ${dg-do-what-default} +if { ![check_effective_target_dfprt] } { + verbose "dfp.exp: runtime support for decimal float does not exist" 2 + set dg-do-what-default compile +} else { + verbose "dfp.exp: runtime support for decimal float exists, use it" 2 + set dg-do-what-default run +} +verbose "dfp.exp: dg-do-what-default is ${dg-do-what-default}" 2 + +global DEFAULT_CXXFLAGS +if [info exists DEFAULT_CXXFLAGS] then { + set save_default_cxxflags DEFAULT_CXXFLAGS +} + +# If a testcase doesn't have special options, use these. +set DEFAULT_CXXFLAGS "" + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[C]] \ + "" $DEFAULT_CXXFLAGS + +# All done. +dg-finish + +set dg-do-what-default ${save-dg-do-what-default} +verbose "dfp.exp: dg-do-what-default is ${dg-do-what-default}" 2 +if [info exists save_default_cxxflags] { + set DEFAULT_CXXFLAGS $save_default_cxxflags +} diff --git a/gcc/testsuite/g++.dg/dfp/mangle-mode.C b/gcc/testsuite/g++.dg/dfp/mangle-mode.C new file mode 100644 index 0000000..ac30cb3 --- /dev/null +++ b/gcc/testsuite/g++.dg/dfp/mangle-mode.C @@ -0,0 +1,37 @@ +// { dg-do compile } + +// Check that the compiler mangles types defined with decimal float +// modes according to the vendor-neutral C++ ABI. + +typedef float _Decimal32 __attribute__((mode(SD))); +typedef float _Decimal64 __attribute__((mode(DD))); +typedef float _Decimal128 __attribute__((mode(TD))); + +extern void foo32 (_Decimal32 a, _Decimal32 &b, _Decimal32 *c); +extern void foo64 (_Decimal64 *a, _Decimal64 b, _Decimal64 &c); +extern void foo128 (_Decimal128 &a, _Decimal128 *b, _Decimal128 c); + +void +bar32 (void) +{ + _Decimal32 x, y, z; + foo32 (x, y, &z); +} + +void +bar64 (void) +{ + _Decimal64 x, y, z; + foo64 (&x, y, z); +} + +void +bar128 (void) +{ + _Decimal128 x, y, z; + foo128 (x, &y, z); +} + +// { dg-final { scan-assembler "Z5foo32DfRDfPDf" } } +// { dg-final { scan-assembler "Z5foo64PDdDdRDd" } } +// { dg-final { scan-assembler "Z6foo128RDePDeDe" } } diff --git a/gcc/testsuite/g++.dg/dg.exp b/gcc/testsuite/g++.dg/dg.exp index 54fc225..af8c147 100644 --- a/gcc/testsuite/g++.dg/dg.exp +++ b/gcc/testsuite/g++.dg/dg.exp @@ -35,6 +35,7 @@ set tests [prune $tests $srcdir/$subdir/bprob/*] set tests [prune $tests $srcdir/$subdir/charset/*] set tests [prune $tests $srcdir/$subdir/compat/*] set tests [prune $tests $srcdir/$subdir/debug/*] +set tests [prune $tests $srcdir/$subdir/dfp/*] set tests [prune $tests $srcdir/$subdir/gcov/*] set tests [prune $tests $srcdir/$subdir/pch/*] set tests [prune $tests $srcdir/$subdir/plugin/*] |