diff options
author | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-01 21:28:06 +0000 |
---|---|---|
committer | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-01 21:28:06 +0000 |
commit | f761149f877ea0843033578c7795dec8c4ff9b6f (patch) | |
tree | b4c52f705add0f69580fff6bac66527d6bb4db3c /gcc/testsuite/gcc.target/cris | |
parent | c1d3813f300942817e1d19b05af0b4f8eb895ad1 (diff) | |
download | gcc-f761149f877ea0843033578c7795dec8c4ff9b6f.tar.gz |
PR rtl-optimization/34773
* gcc.target/cris/torture/pr34773.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132052 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.target/cris')
-rw-r--r-- | gcc/testsuite/gcc.target/cris/torture/pr34773.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/cris/torture/pr34773.c b/gcc/testsuite/gcc.target/cris/torture/pr34773.c new file mode 100644 index 00000000000..4912611b853 --- /dev/null +++ b/gcc/testsuite/gcc.target/cris/torture/pr34773.c @@ -0,0 +1,74 @@ +/* { dg-do run } */ +union double_union +{ + double d; + int i[2]; +}; +void _dtoa_r (double) __attribute__ ((__noinline__)); +void _vfprintf_r (double) __attribute__ ((__noinline__)); +void +__sprint_r(int); +void +_vfprintf_r(double da) +{ + double ffp = da; + double value = ffp; + union double_union tmp; + + tmp.d = value; + + if ((tmp.i[1]) & ((unsigned)0x80000000L)) { + value = -value; + } + + _dtoa_r (value); + + if (ffp != 0) + __sprint_r(value == 0); + asm (""); +} + + +double dd = -.012; +double ff = .012; + +void exit (int) __attribute__ ((__noreturn__)); +void abort (void) __attribute__ ((__noreturn__)); +void *memset(void *s, int c, __SIZE_TYPE__ n); +void _dtoa_r (double d) +{ + if (d != ff) + abort (); + asm (""); +} + +void __sprint_r (int i) +{ + if (i != 0) + abort (); + asm (""); +} + +int clearstack (void) __attribute__ ((__noinline__)); +int clearstack (void) +{ + char doodle[128]; + memset (doodle, 0, sizeof doodle); + asm volatile ("" : : "g" (doodle) : "memory"); + return doodle[127]; +} + +void doit (void) __attribute__ ((__noinline__)); +void doit (void) +{ + _vfprintf_r (dd); + _vfprintf_r (ff); + asm (""); +} + +int main(void) +{ + clearstack (); + doit (); + exit (0); +} |