This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/17990] [3.4/4.0 Regression] sse used for negate without -mfpmath=sse
- From: "uros at kss-loka dot si" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Dec 2004 06:38:14 -0000
- Subject: [Bug target/17990] [3.4/4.0 Regression] sse used for negate without -mfpmath=sse
- References: <20041014032810.17990.shadow@serverart.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From uros at kss-loka dot si 2004-12-14 06:38 -------
(In reply to comment #25)
> I have been completely unable to reproduce an unaligned stack, with either 3.4
> or 4.0. Can those gcc folk that claim to have reproduced it in the past still
> do so? If so, what are you trying?
Testcase 1 (without threads):
--cut here--
float hmag[128],hphase[128];
void prepare(float *oscilFFTfreqs)
{
int i;
for (i=0;i<128;i++)
*oscilFFTfreqs=-hmag[i]*sin(hphase[i])/2.0;
}
--cut here--
Compile it with 'gcc -O2 msse2':
...
prepare:
pushl %ebp
movl %esp, %ebp
pushl %esi
pushl %ebx
xorl %ebx, %ebx
subl $64, %esp
movss .LC0, %xmm0
movl 8(%ebp), %esi
movaps %xmm0, -40(%ebp) <- here, load from unaligned stack
.p2align 4,,15
.L2:
...
Testcase 2: (with threads):
--cut here--
/* *** start ***/
#include <pthread.h>
#include <stdio.h>
#include <assert.h>
#include <xmmintrin.h>
#include <mmintrin.h>
#ifdef __ICC
#include <emmintrin.h>
#endif
void * f(void *p)
{
int x = (p == NULL) ? 0 : * (int *) p;
__m128i s;
printf("&x = %p &s= %p\n", &x, &s);
return NULL;
}
int main(int argc, char ** argv)
{
pthread_t th;
f(& argc);
assert(pthread_create(& th, NULL, f, &argc)==0);
assert(pthread_join(th, NULL)==0);
return 0;
}
/* ***end ***/
gcc -O2 -msse2 -lpthread:
./a.out
&x = 0xbffff9cc &s= 0xbffff9b0
&x = 0x4085fac8 &s= 0x4085faac <- here, s is not aligned correctly
It is a question whether ifor pthreads a stack alignment code should be present
in the function (that would be more robust), or it is a libc's job to provide
correctly alligned stack.
I think that summary of this bugreport is not correct now.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17990