https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62664
Bug ID: 62664
Summary: MMX set intrinsics
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: g.peterhoff.home at talkplus dot de
Hello,
the set/set1-mmx intrinsics do not work with optimizations on Windows. The
code:
typedef union
{
__m64 m;
int32_t e[2];
} ZZ;
int main()
{
srand(time(nullptr));
int32_t r=rand()%100;
double d; // or float; integer works
ZZ z;
z.m=_mm_set1_pi32(r); // or other _mm_setX_piXX with correct ZZ.e
d=z.e[0];
std::cout<<z.e[0]<<std::endl<<d<<std::endl<<d<<std::endl<<d<<std::endl<<d;
return 0;
}
result (eg):
81
nan
-81
81
81
Without optimizations it is correct. I have tested with
Win 8.0
cygwin/32 gcc 4.8.3
mingw/32 gcc 4.8.1
mingw/64 gcc 4.8.1
Suse 12.3/64 gcc 4.7 -> working properly