44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
/* { dg-do compile { target { powerpc*-*-* } } } */
|
|
/* { dg-require-effective-target powerpc_fprs } */
|
|
/* { dg-options "-O2" } */
|
|
/* { dg-final { scan-assembler-not "\[\+\]32768" } } */
|
|
|
|
/* -O2 -m32 store to x.d in w was
|
|
lis 9,x+32764@ha
|
|
stw 10,x+32764@l(9)
|
|
stw 11,x+32768@l(9) <-- wrap! */
|
|
|
|
struct big {
|
|
char a[32764];
|
|
double d __attribute__ ((aligned (4)));
|
|
} __attribute__ ((packed));
|
|
|
|
extern struct big x;
|
|
double y;
|
|
|
|
void r (void)
|
|
{
|
|
double tmp = x.d;
|
|
#if 1
|
|
asm ("#": "+r" (tmp)
|
|
: : "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
|
|
"fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
|
|
"fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
|
|
"fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31");
|
|
#endif
|
|
y = tmp;
|
|
}
|
|
|
|
void w (void)
|
|
{
|
|
double tmp = y;
|
|
#if 1
|
|
asm ("#": "+r" (tmp)
|
|
: : "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
|
|
"fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
|
|
"fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
|
|
"fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31");
|
|
#endif
|
|
x.d = tmp;
|
|
}
|