From a369a55c5f8d099ee641b0561200dafd197df552 Mon Sep 17 00:00:00 2001 From: uros Date: Mon, 28 Apr 2008 07:52:01 +0000 Subject: [PATCH] PR target/36064 * config/i386/i386.md (floatdi2_i387_with_xmm splitters): Use match_scratch instead of match_operand for operands 3 and 4. testsuite/ChangeLog: PR target/36064 * gcc.target/i386/pr36064.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134744 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++ gcc/config/i386/i386.md | 10 +++--- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gcc.target/i386/pr36064.c | 55 +++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr36064.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1144d6..95fcc4b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-04-28 Uros Bizjak + + PR target/36064 + * config/i386/i386.md (floatdi2_i387_with_xmm splitters): + Use match_scratch instead of match_operand for operands 3 and 4. + 2008-04-27 Richard Guenther PR tree-optimization/18754 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 71f6031..6e62157 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -5362,8 +5362,8 @@ (define_split [(set (match_operand:X87MODEF 0 "register_operand" "") (float:X87MODEF (match_operand:DI 1 "register_operand" ""))) - (clobber (match_operand:V4SI 3 "register_operand" "")) - (clobber (match_operand:V4SI 4 "register_operand" "")) + (clobber (match_scratch:V4SI 3 "")) + (clobber (match_scratch:V4SI 4 "")) (clobber (match_operand:DI 2 "memory_operand" ""))] "TARGET_80387 && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES && !TARGET_64BIT && !optimize_size @@ -5386,9 +5386,9 @@ (define_split [(set (match_operand:X87MODEF 0 "register_operand" "") (float:X87MODEF (match_operand:DI 1 "memory_operand" ""))) - (clobber (match_operand:V4SI 2 "register_operand" "")) - (clobber (match_operand:V4SI 3 "register_operand" "")) - (clobber (match_operand:DI 4 "memory_operand" ""))] + (clobber (match_scratch:V4SI 3 "")) + (clobber (match_scratch:V4SI 4 "")) + (clobber (match_operand:DI 2 "memory_operand" ""))] "TARGET_80387 && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES && !TARGET_64BIT && !optimize_size && reload_completed diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 487696c..1cb44d3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2008-04-28 Uros Bizjak + PR target/36064 + * gcc.target/i386/pr36064.c: New test. + +2008-04-28 Uros Bizjak + PR testsuite/36056 * g++.dg/ext/vector14.C: Add -msse for 32bit x86 targets. diff --git a/gcc/testsuite/gcc.target/i386/pr36064.c b/gcc/testsuite/gcc.target/i386/pr36064.c new file mode 100644 index 0000000..7964f28 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr36064.c @@ -0,0 +1,55 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O1 -march=core2" } */ + +typedef long long ogg_int64_t; + +typedef struct vorbis_info +{ + long rate; +} vorbis_info; + +typedef struct OggVorbis_File +{ + int seekable; + int links; + ogg_int64_t *pcmlengths; + vorbis_info *vi; + int ready_state; +} OggVorbis_File; + +extern double ov_time_total (OggVorbis_File * vf, int i); +extern int ov_pcm_seek_page (OggVorbis_File * vf, ogg_int64_t pos); + +int +ov_time_seek_page (OggVorbis_File * vf, double seconds) +{ + int link = -1; + ogg_int64_t pcm_total = 0; + double time_total = 0.; + + if (vf->ready_state < 2) + return (-131); + if (!vf->seekable) + return (-138); + if (seconds < 0) + return (-131); + + for (link = 0; link < vf->links; link++) + { + double addsec = ov_time_total (vf, link); + if (seconds < time_total + addsec) + break; + time_total += addsec; + pcm_total += vf->pcmlengths[link * 2 + 1]; + } + + if (link == vf->links) + return (-131); + + { + ogg_int64_t target = + pcm_total + (seconds - time_total) * vf->vi[link].rate; + return (ov_pcm_seek_page (vf, target)); + } +} -- 2.7.4