diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2008-07-03 12:14:16 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2008-07-03 05:14:16 -0700 |
commit | 192f2d33a186d7de36534c6695b4b61c0dfbee31 (patch) | |
tree | 4c59e49f57ad45fef96548d4fb4cbe36637e70e3 /gcc | |
parent | e85edc9ed5f31da291d8c16a5f1a044ff3c46c11 (diff) | |
download | gcc-192f2d33a186d7de36534c6695b4b61c0dfbee31.zip gcc-192f2d33a186d7de36534c6695b4b61c0dfbee31.tar.gz gcc-192f2d33a186d7de36534c6695b4b61c0dfbee31.tar.bz2 |
i386.c (contains_aligned_value_p): Return true for TCmode.
gcc/
2008-07-03 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (contains_aligned_value_p): Return true
for TCmode.
(ix86_data_alignment): Align TCmode to 128bits.
(ix86_local_alignment): Likewise.
testsuite/
2008-07-03 H.J. Lu <hongjiu.lu@intel.com>
Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/float128-1.c: New.
Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
From-SVN: r137416
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/float128-1.c | 24 |
4 files changed, 42 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ad8bbd0..1bd9de6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-07-03 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.c (contains_aligned_value_p): Return true + for TCmode. + (ix86_data_alignment): Align TCmode to 128bits. + (ix86_local_alignment): Likewise. + 2008-07-03 Andrew Haley <aph@redhat.com> PR bootstrap/33304 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 58c3dba..a0edaca 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4746,7 +4746,8 @@ contains_aligned_value_p (tree type) enum machine_mode mode = TYPE_MODE (type); if (((TARGET_SSE && SSE_REG_MODE_P (mode)) || mode == TDmode - || mode == TFmode) + || mode == TFmode + || mode == TCmode) && (!TYPE_USER_ALIGN (type) || TYPE_ALIGN (type) > 128)) return true; if (TYPE_ALIGN (type) < 128) @@ -17103,7 +17104,8 @@ ix86_data_alignment (tree type, int align) if (TYPE_MODE (type) == DCmode && align < 64) return 64; - if (TYPE_MODE (type) == XCmode && align < 128) + if ((TYPE_MODE (type) == XCmode + || TYPE_MODE (type) == TCmode) && align < 128) return 128; } else if ((TREE_CODE (type) == RECORD_TYPE @@ -17169,7 +17171,8 @@ ix86_local_alignment (tree type, enum machine_mode mode, { if (TYPE_MODE (type) == DCmode && align < 64) return 64; - if (TYPE_MODE (type) == XCmode && align < 128) + if ((TYPE_MODE (type) == XCmode + || TYPE_MODE (type) == TCmode) && align < 128) return 128; } else if ((TREE_CODE (type) == RECORD_TYPE diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cc23a06..a511bfd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-03 H.J. Lu <hongjiu.lu@intel.com> + Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/float128-1.c: New. + 2008-07-03 Andrew Haley <aph@redhat.com> PR preprocessor/33305 diff --git a/gcc/testsuite/gcc.target/i386/float128-1.c b/gcc/testsuite/gcc.target/i386/float128-1.c new file mode 100644 index 0000000..9c6d227 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/float128-1.c @@ -0,0 +1,24 @@ +/* { dg-do run { target *-*-linux* } } */ +/* { dg-options "-O2 -msse2" } */ + +#include "sse2-check.h" + +extern void abort (void); + +typedef _Complex float __attribute__((mode(TC))) _Complex128; + +_Complex128 __attribute__ ((noinline)) +foo (_Complex128 x, _Complex128 y) +{ + return x * y; +} + +static void +sse2_test (void) +{ + _Complex128 a = 1.3q + 3.4qi, b = 5.6q + 7.8qi, c; + + c = foo (a, b); + if (__real__(c) == 0.0q || __imag__ (c) == 0.0q) + abort (); +} |