[Bug target/26636] use of r1-r3 across __sdivsi3_4 call
rmansfield at qnx dot com
gcc-bugzilla@gcc.gnu.org
Fri Mar 10 18:23:00 GMT 2006
------- Comment #1 from rmansfield at qnx dot com 2006-03-10 18:23 -------
When attaching the test case, I experience a internal error with gcc bugzilla
which I reported to dberlin. I am going to attach the test case in a comment.
I attempted to reduce the test case, but it changed reg. allocation which made
reproducing it difficult.
#include <stdlib.h>
#include <stdio.h>
# define M 14
# define PIT_MIN 30
# define SS_AUDIO_SAMPLE_SIZE 2
int main(int argc, char *argv[]) {
int iMarkEvntDelayTime = 0;
int iSampleRate = 0;
int iBlockSize = 0;
int t_op;
int corr[19999];
int f_io4[19999];
int daten[19999];
t_op = wbe_ol_pitch_estimate( daten, corr, f_io4);
return EXIT_SUCCESS;
}
#define PIT_MIN 30
#define PIT_MAX 193
#define L_SUBFR_LB 60
#define DIM (3*L_SUBFR_LB)
#define OLPX_SHIFT 4
int
wbe_ol_pitch_estimate
(
short *x_i,
int *corr,
int *x_local
)
{
int temp, temp1;
int energy;
int denom;
int thresh, thresh2;
int *x_t1_ptr, *x_t2_ptr;
int *x_t_max;
int *x;
int i,index,p;
for (i=0; i < PIT_MIN; i++)
corr[i] = 0;
x = x_local;
for (i = -PIT_MAX; i < DIM; i++)
{
*(x++) = x_i[i]>>OLPX_SHIFT;
}
x = x_local+PIT_MAX;
x_t_max = x +DIM;
x_t1_ptr = x;
x_t2_ptr = x-PIT_MIN;
energy= 0;
temp = 0;
while( x_t1_ptr < x_t_max)
{
temp1 = (int)(*x_t2_ptr);
temp += (*x_t1_ptr) * temp1;
energy += temp1 * temp1;
x_t1_ptr++;
x_t2_ptr++;
}
denom = energy>>10;
if (denom <= 0) denom=1;
corr[PIT_MIN] = temp/denom;
index = PIT_MIN;
for( i=PIT_MIN+1; i<PIT_MAX; i++)
{
temp = 0;
x_t1_ptr = x;
x_t2_ptr = x-i;
while( x_t1_ptr < x_t_max)
{
temp += (*x_t1_ptr) * (*x_t2_ptr);
x_t1_ptr++;
x_t2_ptr++;
}
temp1 = (int)x[DIM-i];
temp1 *= temp1;
energy -= temp1;
temp1 = (int)x[-i];
temp1 *= temp1;
energy += temp1;
/* calculate the normalized correlation temp/energy */
denom = energy>>10;
if (denom <= 0) denom=1;
temp = temp/denom;
corr[i] = temp;
thresh = (temp>>2) + (temp>>1);
if( i<((index<<1)-5))
if( temp > corr[index] )
index = i;
if( i>=((index<<1)-5))
if( thresh > corr[index] )
index = i;
}
thresh2=(corr[index]>>1);
p = index/3;
for( i=p-5; i<p+5; i++)
{
if( thresh2 < corr[i] )
{
index = i;
thresh2=(corr[index]>>1);
}
}
return( index );
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26636
More information about the Gcc-bugs
mailing list