Index: gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c (revision 217391) +++ gcc/testsuite/gcc.target/powerpc/p8vector-ldst.c (revision 217392) @@ -1,43 +1,624 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ /* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf" } */ -float load_sf (float *p) +float +load_store_sf (unsigned long num, + const float *from_ptr, + float *to_ptr, + const unsigned long *in_mask_ptr, + const unsigned long *out_mask_ptr) { - float f = *p; - __asm__ ("# reg %x0" : "+v" (f)); - return f; -} + float value00 = 0.0f; + float value01 = 0.0f; + float value02 = 0.0f; + float value03 = 0.0f; + float value04 = 0.0f; + float value05 = 0.0f; + float value06 = 0.0f; + float value07 = 0.0f; + float value08 = 0.0f; + float value09 = 0.0f; + float value10 = 0.0f; + float value11 = 0.0f; + float value12 = 0.0f; + float value13 = 0.0f; + float value14 = 0.0f; + float value15 = 0.0f; + float value16 = 0.0f; + float value17 = 0.0f; + float value18 = 0.0f; + float value19 = 0.0f; + float value20 = 0.0f; + float value21 = 0.0f; + float value22 = 0.0f; + float value23 = 0.0f; + float value24 = 0.0f; + float value25 = 0.0f; + float value26 = 0.0f; + float value27 = 0.0f; + float value28 = 0.0f; + float value29 = 0.0f; + float value30 = 0.0f; + float value31 = 0.0f; + float value32 = 0.0f; + float value33 = 0.0f; + float value34 = 0.0f; + float value35 = 0.0f; + float value36 = 0.0f; + float value37 = 0.0f; + float value38 = 0.0f; + float value39 = 0.0f; + unsigned long in_mask; + unsigned long out_mask; + unsigned long i; -double load_df (double *p) -{ - double d = *p; - __asm__ ("# reg %x0" : "+v" (d)); - return d; -} + for (i = 0; i < num; i++) + { + in_mask = *in_mask_ptr++; + if ((in_mask & (1L << 0)) != 0L) + value00 = *from_ptr++; -double load_dfsf (float *p) -{ - double d = (double) *p; - __asm__ ("# reg %x0" : "+v" (d)); - return d; -} + if ((in_mask & (1L << 1)) != 0L) + value01 = *from_ptr++; -void store_sf (float *p, float f) -{ - __asm__ ("# reg %x0" : "+v" (f)); - *p = f; + if ((in_mask & (1L << 2)) != 0L) + value02 = *from_ptr++; + + if ((in_mask & (1L << 3)) != 0L) + value03 = *from_ptr++; + + if ((in_mask & (1L << 4)) != 0L) + value04 = *from_ptr++; + + if ((in_mask & (1L << 5)) != 0L) + value05 = *from_ptr++; + + if ((in_mask & (1L << 6)) != 0L) + value06 = *from_ptr++; + + if ((in_mask & (1L << 7)) != 0L) + value07 = *from_ptr++; + + if ((in_mask & (1L << 8)) != 0L) + value08 = *from_ptr++; + + if ((in_mask & (1L << 9)) != 0L) + value09 = *from_ptr++; + + if ((in_mask & (1L << 10)) != 0L) + value10 = *from_ptr++; + + if ((in_mask & (1L << 11)) != 0L) + value11 = *from_ptr++; + + if ((in_mask & (1L << 12)) != 0L) + value12 = *from_ptr++; + + if ((in_mask & (1L << 13)) != 0L) + value13 = *from_ptr++; + + if ((in_mask & (1L << 14)) != 0L) + value14 = *from_ptr++; + + if ((in_mask & (1L << 15)) != 0L) + value15 = *from_ptr++; + + if ((in_mask & (1L << 16)) != 0L) + value16 = *from_ptr++; + + if ((in_mask & (1L << 17)) != 0L) + value17 = *from_ptr++; + + if ((in_mask & (1L << 18)) != 0L) + value18 = *from_ptr++; + + if ((in_mask & (1L << 19)) != 0L) + value19 = *from_ptr++; + + if ((in_mask & (1L << 20)) != 0L) + value20 = *from_ptr++; + + if ((in_mask & (1L << 21)) != 0L) + value21 = *from_ptr++; + + if ((in_mask & (1L << 22)) != 0L) + value22 = *from_ptr++; + + if ((in_mask & (1L << 23)) != 0L) + value23 = *from_ptr++; + + if ((in_mask & (1L << 24)) != 0L) + value24 = *from_ptr++; + + if ((in_mask & (1L << 25)) != 0L) + value25 = *from_ptr++; + + if ((in_mask & (1L << 26)) != 0L) + value26 = *from_ptr++; + + if ((in_mask & (1L << 27)) != 0L) + value27 = *from_ptr++; + + if ((in_mask & (1L << 28)) != 0L) + value28 = *from_ptr++; + + if ((in_mask & (1L << 29)) != 0L) + value29 = *from_ptr++; + + if ((in_mask & (1L << 30)) != 0L) + value30 = *from_ptr++; + + if ((in_mask & (1L << 31)) != 0L) + value31 = *from_ptr++; + + if ((in_mask & (1L << 32)) != 0L) + value32 = *from_ptr++; + + if ((in_mask & (1L << 33)) != 0L) + value33 = *from_ptr++; + + if ((in_mask & (1L << 34)) != 0L) + value34 = *from_ptr++; + + if ((in_mask & (1L << 35)) != 0L) + value35 = *from_ptr++; + + if ((in_mask & (1L << 36)) != 0L) + value36 = *from_ptr++; + + if ((in_mask & (1L << 37)) != 0L) + value37 = *from_ptr++; + + if ((in_mask & (1L << 38)) != 0L) + value38 = *from_ptr++; + + if ((in_mask & (1L << 39)) != 0L) + value39 = *from_ptr++; + + out_mask = *out_mask_ptr++; + if ((out_mask & (1L << 0)) != 0L) + *to_ptr++ = value00; + + if ((out_mask & (1L << 1)) != 0L) + *to_ptr++ = value01; + + if ((out_mask & (1L << 2)) != 0L) + *to_ptr++ = value02; + + if ((out_mask & (1L << 3)) != 0L) + *to_ptr++ = value03; + + if ((out_mask & (1L << 4)) != 0L) + *to_ptr++ = value04; + + if ((out_mask & (1L << 5)) != 0L) + *to_ptr++ = value05; + + if ((out_mask & (1L << 6)) != 0L) + *to_ptr++ = value06; + + if ((out_mask & (1L << 7)) != 0L) + *to_ptr++ = value07; + + if ((out_mask & (1L << 8)) != 0L) + *to_ptr++ = value08; + + if ((out_mask & (1L << 9)) != 0L) + *to_ptr++ = value09; + + if ((out_mask & (1L << 10)) != 0L) + *to_ptr++ = value10; + + if ((out_mask & (1L << 11)) != 0L) + *to_ptr++ = value11; + + if ((out_mask & (1L << 12)) != 0L) + *to_ptr++ = value12; + + if ((out_mask & (1L << 13)) != 0L) + *to_ptr++ = value13; + + if ((out_mask & (1L << 14)) != 0L) + *to_ptr++ = value14; + + if ((out_mask & (1L << 15)) != 0L) + *to_ptr++ = value15; + + if ((out_mask & (1L << 16)) != 0L) + *to_ptr++ = value16; + + if ((out_mask & (1L << 17)) != 0L) + *to_ptr++ = value17; + + if ((out_mask & (1L << 18)) != 0L) + *to_ptr++ = value18; + + if ((out_mask & (1L << 19)) != 0L) + *to_ptr++ = value19; + + if ((out_mask & (1L << 20)) != 0L) + *to_ptr++ = value20; + + if ((out_mask & (1L << 21)) != 0L) + *to_ptr++ = value21; + + if ((out_mask & (1L << 22)) != 0L) + *to_ptr++ = value22; + + if ((out_mask & (1L << 23)) != 0L) + *to_ptr++ = value23; + + if ((out_mask & (1L << 24)) != 0L) + *to_ptr++ = value24; + + if ((out_mask & (1L << 25)) != 0L) + *to_ptr++ = value25; + + if ((out_mask & (1L << 26)) != 0L) + *to_ptr++ = value26; + + if ((out_mask & (1L << 27)) != 0L) + *to_ptr++ = value27; + + if ((out_mask & (1L << 28)) != 0L) + *to_ptr++ = value28; + + if ((out_mask & (1L << 29)) != 0L) + *to_ptr++ = value29; + + if ((out_mask & (1L << 30)) != 0L) + *to_ptr++ = value30; + + if ((out_mask & (1L << 31)) != 0L) + *to_ptr++ = value31; + + if ((out_mask & (1L << 32)) != 0L) + *to_ptr++ = value32; + + if ((out_mask & (1L << 33)) != 0L) + *to_ptr++ = value33; + + if ((out_mask & (1L << 34)) != 0L) + *to_ptr++ = value34; + + if ((out_mask & (1L << 35)) != 0L) + *to_ptr++ = value35; + + if ((out_mask & (1L << 36)) != 0L) + *to_ptr++ = value36; + + if ((out_mask & (1L << 37)) != 0L) + *to_ptr++ = value37; + + if ((out_mask & (1L << 38)) != 0L) + *to_ptr++ = value38; + + if ((out_mask & (1L << 39)) != 0L) + *to_ptr++ = value39; + } + + return ( value00 + value01 + value02 + value03 + value04 + + value05 + value06 + value07 + value08 + value09 + + value10 + value11 + value12 + value13 + value14 + + value15 + value16 + value17 + value18 + value19 + + value20 + value21 + value22 + value23 + value24 + + value25 + value26 + value27 + value28 + value29 + + value30 + value31 + value32 + value33 + value34 + + value35 + value36 + value37 + value38 + value39); } -void store_df (double *p, double d) +double +load_store_df (unsigned long num, + const double *from_ptr, + double *to_ptr, + const unsigned long *in_mask_ptr, + const unsigned long *out_mask_ptr) { - __asm__ ("# reg %x0" : "+v" (d)); - *p = d; + double value00 = 0.0; + double value01 = 0.0; + double value02 = 0.0; + double value03 = 0.0; + double value04 = 0.0; + double value05 = 0.0; + double value06 = 0.0; + double value07 = 0.0; + double value08 = 0.0; + double value09 = 0.0; + double value10 = 0.0; + double value11 = 0.0; + double value12 = 0.0; + double value13 = 0.0; + double value14 = 0.0; + double value15 = 0.0; + double value16 = 0.0; + double value17 = 0.0; + double value18 = 0.0; + double value19 = 0.0; + double value20 = 0.0; + double value21 = 0.0; + double value22 = 0.0; + double value23 = 0.0; + double value24 = 0.0; + double value25 = 0.0; + double value26 = 0.0; + double value27 = 0.0; + double value28 = 0.0; + double value29 = 0.0; + double value30 = 0.0; + double value31 = 0.0; + double value32 = 0.0; + double value33 = 0.0; + double value34 = 0.0; + double value35 = 0.0; + double value36 = 0.0; + double value37 = 0.0; + double value38 = 0.0; + double value39 = 0.0; + unsigned long in_mask; + unsigned long out_mask; + unsigned long i; + + for (i = 0; i < num; i++) + { + in_mask = *in_mask_ptr++; + if ((in_mask & (1L << 0)) != 0L) + value00 = *from_ptr++; + + if ((in_mask & (1L << 1)) != 0L) + value01 = *from_ptr++; + + if ((in_mask & (1L << 2)) != 0L) + value02 = *from_ptr++; + + if ((in_mask & (1L << 3)) != 0L) + value03 = *from_ptr++; + + if ((in_mask & (1L << 4)) != 0L) + value04 = *from_ptr++; + + if ((in_mask & (1L << 5)) != 0L) + value05 = *from_ptr++; + + if ((in_mask & (1L << 6)) != 0L) + value06 = *from_ptr++; + + if ((in_mask & (1L << 7)) != 0L) + value07 = *from_ptr++; + + if ((in_mask & (1L << 8)) != 0L) + value08 = *from_ptr++; + + if ((in_mask & (1L << 9)) != 0L) + value09 = *from_ptr++; + + if ((in_mask & (1L << 10)) != 0L) + value10 = *from_ptr++; + + if ((in_mask & (1L << 11)) != 0L) + value11 = *from_ptr++; + + if ((in_mask & (1L << 12)) != 0L) + value12 = *from_ptr++; + + if ((in_mask & (1L << 13)) != 0L) + value13 = *from_ptr++; + + if ((in_mask & (1L << 14)) != 0L) + value14 = *from_ptr++; + + if ((in_mask & (1L << 15)) != 0L) + value15 = *from_ptr++; + + if ((in_mask & (1L << 16)) != 0L) + value16 = *from_ptr++; + + if ((in_mask & (1L << 17)) != 0L) + value17 = *from_ptr++; + + if ((in_mask & (1L << 18)) != 0L) + value18 = *from_ptr++; + + if ((in_mask & (1L << 19)) != 0L) + value19 = *from_ptr++; + + if ((in_mask & (1L << 20)) != 0L) + value20 = *from_ptr++; + + if ((in_mask & (1L << 21)) != 0L) + value21 = *from_ptr++; + + if ((in_mask & (1L << 22)) != 0L) + value22 = *from_ptr++; + + if ((in_mask & (1L << 23)) != 0L) + value23 = *from_ptr++; + + if ((in_mask & (1L << 24)) != 0L) + value24 = *from_ptr++; + + if ((in_mask & (1L << 25)) != 0L) + value25 = *from_ptr++; + + if ((in_mask & (1L << 26)) != 0L) + value26 = *from_ptr++; + + if ((in_mask & (1L << 27)) != 0L) + value27 = *from_ptr++; + + if ((in_mask & (1L << 28)) != 0L) + value28 = *from_ptr++; + + if ((in_mask & (1L << 29)) != 0L) + value29 = *from_ptr++; + + if ((in_mask & (1L << 30)) != 0L) + value30 = *from_ptr++; + + if ((in_mask & (1L << 31)) != 0L) + value31 = *from_ptr++; + + if ((in_mask & (1L << 32)) != 0L) + value32 = *from_ptr++; + + if ((in_mask & (1L << 33)) != 0L) + value33 = *from_ptr++; + + if ((in_mask & (1L << 34)) != 0L) + value34 = *from_ptr++; + + if ((in_mask & (1L << 35)) != 0L) + value35 = *from_ptr++; + + if ((in_mask & (1L << 36)) != 0L) + value36 = *from_ptr++; + + if ((in_mask & (1L << 37)) != 0L) + value37 = *from_ptr++; + + if ((in_mask & (1L << 38)) != 0L) + value38 = *from_ptr++; + + if ((in_mask & (1L << 39)) != 0L) + value39 = *from_ptr++; + + out_mask = *out_mask_ptr++; + if ((out_mask & (1L << 0)) != 0L) + *to_ptr++ = value00; + + if ((out_mask & (1L << 1)) != 0L) + *to_ptr++ = value01; + + if ((out_mask & (1L << 2)) != 0L) + *to_ptr++ = value02; + + if ((out_mask & (1L << 3)) != 0L) + *to_ptr++ = value03; + + if ((out_mask & (1L << 4)) != 0L) + *to_ptr++ = value04; + + if ((out_mask & (1L << 5)) != 0L) + *to_ptr++ = value05; + + if ((out_mask & (1L << 6)) != 0L) + *to_ptr++ = value06; + + if ((out_mask & (1L << 7)) != 0L) + *to_ptr++ = value07; + + if ((out_mask & (1L << 8)) != 0L) + *to_ptr++ = value08; + + if ((out_mask & (1L << 9)) != 0L) + *to_ptr++ = value09; + + if ((out_mask & (1L << 10)) != 0L) + *to_ptr++ = value10; + + if ((out_mask & (1L << 11)) != 0L) + *to_ptr++ = value11; + + if ((out_mask & (1L << 12)) != 0L) + *to_ptr++ = value12; + + if ((out_mask & (1L << 13)) != 0L) + *to_ptr++ = value13; + + if ((out_mask & (1L << 14)) != 0L) + *to_ptr++ = value14; + + if ((out_mask & (1L << 15)) != 0L) + *to_ptr++ = value15; + + if ((out_mask & (1L << 16)) != 0L) + *to_ptr++ = value16; + + if ((out_mask & (1L << 17)) != 0L) + *to_ptr++ = value17; + + if ((out_mask & (1L << 18)) != 0L) + *to_ptr++ = value18; + + if ((out_mask & (1L << 19)) != 0L) + *to_ptr++ = value19; + + if ((out_mask & (1L << 20)) != 0L) + *to_ptr++ = value20; + + if ((out_mask & (1L << 21)) != 0L) + *to_ptr++ = value21; + + if ((out_mask & (1L << 22)) != 0L) + *to_ptr++ = value22; + + if ((out_mask & (1L << 23)) != 0L) + *to_ptr++ = value23; + + if ((out_mask & (1L << 24)) != 0L) + *to_ptr++ = value24; + + if ((out_mask & (1L << 25)) != 0L) + *to_ptr++ = value25; + + if ((out_mask & (1L << 26)) != 0L) + *to_ptr++ = value26; + + if ((out_mask & (1L << 27)) != 0L) + *to_ptr++ = value27; + + if ((out_mask & (1L << 28)) != 0L) + *to_ptr++ = value28; + + if ((out_mask & (1L << 29)) != 0L) + *to_ptr++ = value29; + + if ((out_mask & (1L << 30)) != 0L) + *to_ptr++ = value30; + + if ((out_mask & (1L << 31)) != 0L) + *to_ptr++ = value31; + + if ((out_mask & (1L << 32)) != 0L) + *to_ptr++ = value32; + + if ((out_mask & (1L << 33)) != 0L) + *to_ptr++ = value33; + + if ((out_mask & (1L << 34)) != 0L) + *to_ptr++ = value34; + + if ((out_mask & (1L << 35)) != 0L) + *to_ptr++ = value35; + + if ((out_mask & (1L << 36)) != 0L) + *to_ptr++ = value36; + + if ((out_mask & (1L << 37)) != 0L) + *to_ptr++ = value37; + + if ((out_mask & (1L << 38)) != 0L) + *to_ptr++ = value38; + + if ((out_mask & (1L << 39)) != 0L) + *to_ptr++ = value39; + } + + return ( value00 + value01 + value02 + value03 + value04 + + value05 + value06 + value07 + value08 + value09 + + value10 + value11 + value12 + value13 + value14 + + value15 + value16 + value17 + value18 + value19 + + value20 + value21 + value22 + value23 + value24 + + value25 + value26 + value27 + value28 + value29 + + value30 + value31 + value32 + value33 + value34 + + value35 + value36 + value37 + value38 + value39); } /* { dg-final { scan-assembler "lxsspx" } } */ /* { dg-final { scan-assembler "lxsdx" } } */ /* { dg-final { scan-assembler "stxsspx" } } */ /* { dg-final { scan-assembler "stxsdx" } } */ +/* { dg-final { scan-assembler "xsaddsp" } } */ +/* { dg-final { scan-assembler "xsadddp" } } */ Index: gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c (revision 0) +++ gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c (revision 217392) @@ -0,0 +1,726 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf" } */ + +/* Test for the -mupper-regs-df option to make sure double values are allocated + to the Altivec registers as well as the traditional FPR registers. */ + +#ifndef TYPE +#define TYPE float +#endif + +#ifndef MASK_TYPE +#define MASK_TYPE unsigned long long +#endif + +#define MASK_ONE ((MASK_TYPE)1) +#define ZERO ((TYPE) 0.0) + +TYPE +test_add (const MASK_TYPE *add_mask, const TYPE *add_values, + const MASK_TYPE *sub_mask, const TYPE *sub_values, + const MASK_TYPE *mul_mask, const TYPE *mul_values, + const MASK_TYPE *div_mask, const TYPE *div_values, + const MASK_TYPE *eq0_mask, int *eq0_ptr) +{ + TYPE value; + TYPE value00 = ZERO; + TYPE value01 = ZERO; + TYPE value02 = ZERO; + TYPE value03 = ZERO; + TYPE value04 = ZERO; + TYPE value05 = ZERO; + TYPE value06 = ZERO; + TYPE value07 = ZERO; + TYPE value08 = ZERO; + TYPE value09 = ZERO; + TYPE value10 = ZERO; + TYPE value11 = ZERO; + TYPE value12 = ZERO; + TYPE value13 = ZERO; + TYPE value14 = ZERO; + TYPE value15 = ZERO; + TYPE value16 = ZERO; + TYPE value17 = ZERO; + TYPE value18 = ZERO; + TYPE value19 = ZERO; + TYPE value20 = ZERO; + TYPE value21 = ZERO; + TYPE value22 = ZERO; + TYPE value23 = ZERO; + TYPE value24 = ZERO; + TYPE value25 = ZERO; + TYPE value26 = ZERO; + TYPE value27 = ZERO; + TYPE value28 = ZERO; + TYPE value29 = ZERO; + TYPE value30 = ZERO; + TYPE value31 = ZERO; + TYPE value32 = ZERO; + TYPE value33 = ZERO; + TYPE value34 = ZERO; + TYPE value35 = ZERO; + TYPE value36 = ZERO; + TYPE value37 = ZERO; + TYPE value38 = ZERO; + TYPE value39 = ZERO; + MASK_TYPE mask; + int eq0; + + while ((mask = *add_mask++) != 0) + { + value = *add_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 += value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 += value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 += value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 += value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 += value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 += value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 += value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 += value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 += value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 += value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 += value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 += value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 += value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 += value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 += value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 += value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 += value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 += value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 += value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 += value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 += value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 += value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 += value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 += value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 += value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 += value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 += value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 += value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 += value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 += value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 += value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 += value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 += value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 += value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 += value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 += value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 += value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 += value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 += value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 += value; + } + + while ((mask = *sub_mask++) != 0) + { + value = *sub_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 -= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 -= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 -= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 -= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 -= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 -= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 -= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 -= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 -= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 -= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 -= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 -= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 -= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 -= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 -= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 -= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 -= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 -= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 -= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 -= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 -= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 -= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 -= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 -= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 -= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 -= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 -= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 -= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 -= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 -= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 -= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 -= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 -= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 -= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 -= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 -= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 -= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 -= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 -= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 -= value; + } + + while ((mask = *mul_mask++) != 0) + { + value = *mul_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 *= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 *= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 *= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 *= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 *= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 *= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 *= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 *= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 *= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 *= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 *= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 *= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 *= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 *= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 *= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 *= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 *= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 *= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 *= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 *= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 *= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 *= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 *= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 *= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 *= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 *= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 *= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 *= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 *= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 *= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 *= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 *= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 *= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 *= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 *= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 *= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 *= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 *= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 *= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 *= value; + } + + while ((mask = *div_mask++) != 0) + { + value = *div_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 /= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 /= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 /= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 /= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 /= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 /= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 /= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 /= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 /= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 /= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 /= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 /= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 /= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 /= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 /= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 /= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 /= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 /= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 /= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 /= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 /= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 /= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 /= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 /= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 /= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 /= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 /= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 /= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 /= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 /= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 /= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 /= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 /= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 /= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 /= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 /= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 /= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 /= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 /= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 /= value; + } + + while ((mask = *eq0_mask++) != 0) + { + eq0 = 0; + + if ((mask & (MASK_ONE << 0)) != 0) + eq0 |= (value00 == ZERO); + + if ((mask & (MASK_ONE << 1)) != 0) + eq0 |= (value01 == ZERO); + + if ((mask & (MASK_ONE << 2)) != 0) + eq0 |= (value02 == ZERO); + + if ((mask & (MASK_ONE << 3)) != 0) + eq0 |= (value03 == ZERO); + + if ((mask & (MASK_ONE << 4)) != 0) + eq0 |= (value04 == ZERO); + + if ((mask & (MASK_ONE << 5)) != 0) + eq0 |= (value05 == ZERO); + + if ((mask & (MASK_ONE << 6)) != 0) + eq0 |= (value06 == ZERO); + + if ((mask & (MASK_ONE << 7)) != 0) + eq0 |= (value07 == ZERO); + + if ((mask & (MASK_ONE << 8)) != 0) + eq0 |= (value08 == ZERO); + + if ((mask & (MASK_ONE << 9)) != 0) + eq0 |= (value09 == ZERO); + + if ((mask & (MASK_ONE << 10)) != 0) + eq0 |= (value10 == ZERO); + + if ((mask & (MASK_ONE << 11)) != 0) + eq0 |= (value11 == ZERO); + + if ((mask & (MASK_ONE << 12)) != 0) + eq0 |= (value12 == ZERO); + + if ((mask & (MASK_ONE << 13)) != 0) + eq0 |= (value13 == ZERO); + + if ((mask & (MASK_ONE << 14)) != 0) + eq0 |= (value14 == ZERO); + + if ((mask & (MASK_ONE << 15)) != 0) + eq0 |= (value15 == ZERO); + + if ((mask & (MASK_ONE << 16)) != 0) + eq0 |= (value16 == ZERO); + + if ((mask & (MASK_ONE << 17)) != 0) + eq0 |= (value17 == ZERO); + + if ((mask & (MASK_ONE << 18)) != 0) + eq0 |= (value18 == ZERO); + + if ((mask & (MASK_ONE << 19)) != 0) + eq0 |= (value19 == ZERO); + + if ((mask & (MASK_ONE << 20)) != 0) + eq0 |= (value20 == ZERO); + + if ((mask & (MASK_ONE << 21)) != 0) + eq0 |= (value21 == ZERO); + + if ((mask & (MASK_ONE << 22)) != 0) + eq0 |= (value22 == ZERO); + + if ((mask & (MASK_ONE << 23)) != 0) + eq0 |= (value23 == ZERO); + + if ((mask & (MASK_ONE << 24)) != 0) + eq0 |= (value24 == ZERO); + + if ((mask & (MASK_ONE << 25)) != 0) + eq0 |= (value25 == ZERO); + + if ((mask & (MASK_ONE << 26)) != 0) + eq0 |= (value26 == ZERO); + + if ((mask & (MASK_ONE << 27)) != 0) + eq0 |= (value27 == ZERO); + + if ((mask & (MASK_ONE << 28)) != 0) + eq0 |= (value28 == ZERO); + + if ((mask & (MASK_ONE << 29)) != 0) + eq0 |= (value29 == ZERO); + + if ((mask & (MASK_ONE << 30)) != 0) + eq0 |= (value30 == ZERO); + + if ((mask & (MASK_ONE << 31)) != 0) + eq0 |= (value31 == ZERO); + + if ((mask & (MASK_ONE << 32)) != 0) + eq0 |= (value32 == ZERO); + + if ((mask & (MASK_ONE << 33)) != 0) + eq0 |= (value33 == ZERO); + + if ((mask & (MASK_ONE << 34)) != 0) + eq0 |= (value34 == ZERO); + + if ((mask & (MASK_ONE << 35)) != 0) + eq0 |= (value35 == ZERO); + + if ((mask & (MASK_ONE << 36)) != 0) + eq0 |= (value36 == ZERO); + + if ((mask & (MASK_ONE << 37)) != 0) + eq0 |= (value37 == ZERO); + + if ((mask & (MASK_ONE << 38)) != 0) + eq0 |= (value38 == ZERO); + + if ((mask & (MASK_ONE << 39)) != 0) + eq0 |= (value39 == ZERO); + + *eq0_ptr++ = eq0; + } + + return ( value00 + value01 + value02 + value03 + value04 + + value05 + value06 + value07 + value08 + value09 + + value10 + value11 + value12 + value13 + value14 + + value15 + value16 + value17 + value18 + value19 + + value20 + value21 + value22 + value23 + value24 + + value25 + value26 + value27 + value28 + value29 + + value30 + value31 + value32 + value33 + value34 + + value35 + value36 + value37 + value38 + value39); +} + +/* { dg-final { scan-assembler "fadds" } } */ +/* { dg-final { scan-assembler "fsubs" } } */ +/* { dg-final { scan-assembler "fmuls" } } */ +/* { dg-final { scan-assembler "fdivs" } } */ +/* { dg-final { scan-assembler "fcmpu" } } */ +/* { dg-final { scan-assembler "xsaddsp" } } */ +/* { dg-final { scan-assembler "xssubsp" } } */ +/* { dg-final { scan-assembler "xsmulsp" } } */ +/* { dg-final { scan-assembler "xsdivsp" } } */ +/* { dg-final { scan-assembler "xscmpudp" } } */ Property changes on: gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c:r215303-217365 Index: gcc/testsuite/gcc.target/powerpc/upper-regs-df.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/upper-regs-df.c (revision 0) +++ gcc/testsuite/gcc.target/powerpc/upper-regs-df.c (revision 217392) @@ -0,0 +1,726 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */ +/* { dg-options "-mcpu=power7 -O2 -mupper-regs-df" } */ + +/* Test for the -mupper-regs-df option to make sure double values are allocated + to the Altivec registers as well as the traditional FPR registers. */ + +#ifndef TYPE +#define TYPE double +#endif + +#ifndef MASK_TYPE +#define MASK_TYPE unsigned long long +#endif + +#define MASK_ONE ((MASK_TYPE)1) +#define ZERO ((TYPE) 0.0) + +TYPE +test_add (const MASK_TYPE *add_mask, const TYPE *add_values, + const MASK_TYPE *sub_mask, const TYPE *sub_values, + const MASK_TYPE *mul_mask, const TYPE *mul_values, + const MASK_TYPE *div_mask, const TYPE *div_values, + const MASK_TYPE *eq0_mask, int *eq0_ptr) +{ + TYPE value; + TYPE value00 = ZERO; + TYPE value01 = ZERO; + TYPE value02 = ZERO; + TYPE value03 = ZERO; + TYPE value04 = ZERO; + TYPE value05 = ZERO; + TYPE value06 = ZERO; + TYPE value07 = ZERO; + TYPE value08 = ZERO; + TYPE value09 = ZERO; + TYPE value10 = ZERO; + TYPE value11 = ZERO; + TYPE value12 = ZERO; + TYPE value13 = ZERO; + TYPE value14 = ZERO; + TYPE value15 = ZERO; + TYPE value16 = ZERO; + TYPE value17 = ZERO; + TYPE value18 = ZERO; + TYPE value19 = ZERO; + TYPE value20 = ZERO; + TYPE value21 = ZERO; + TYPE value22 = ZERO; + TYPE value23 = ZERO; + TYPE value24 = ZERO; + TYPE value25 = ZERO; + TYPE value26 = ZERO; + TYPE value27 = ZERO; + TYPE value28 = ZERO; + TYPE value29 = ZERO; + TYPE value30 = ZERO; + TYPE value31 = ZERO; + TYPE value32 = ZERO; + TYPE value33 = ZERO; + TYPE value34 = ZERO; + TYPE value35 = ZERO; + TYPE value36 = ZERO; + TYPE value37 = ZERO; + TYPE value38 = ZERO; + TYPE value39 = ZERO; + MASK_TYPE mask; + int eq0; + + while ((mask = *add_mask++) != 0) + { + value = *add_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 += value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 += value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 += value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 += value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 += value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 += value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 += value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 += value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 += value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 += value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 += value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 += value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 += value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 += value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 += value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 += value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 += value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 += value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 += value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 += value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 += value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 += value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 += value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 += value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 += value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 += value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 += value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 += value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 += value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 += value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 += value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 += value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 += value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 += value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 += value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 += value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 += value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 += value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 += value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 += value; + } + + while ((mask = *sub_mask++) != 0) + { + value = *sub_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 -= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 -= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 -= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 -= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 -= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 -= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 -= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 -= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 -= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 -= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 -= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 -= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 -= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 -= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 -= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 -= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 -= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 -= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 -= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 -= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 -= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 -= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 -= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 -= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 -= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 -= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 -= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 -= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 -= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 -= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 -= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 -= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 -= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 -= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 -= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 -= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 -= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 -= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 -= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 -= value; + } + + while ((mask = *mul_mask++) != 0) + { + value = *mul_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 *= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 *= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 *= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 *= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 *= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 *= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 *= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 *= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 *= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 *= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 *= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 *= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 *= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 *= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 *= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 *= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 *= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 *= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 *= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 *= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 *= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 *= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 *= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 *= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 *= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 *= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 *= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 *= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 *= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 *= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 *= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 *= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 *= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 *= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 *= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 *= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 *= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 *= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 *= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 *= value; + } + + while ((mask = *div_mask++) != 0) + { + value = *div_values++; + + __asm__ (" #reg %0" : "+d" (value)); + + if ((mask & (MASK_ONE << 0)) != 0) + value00 /= value; + + if ((mask & (MASK_ONE << 1)) != 0) + value01 /= value; + + if ((mask & (MASK_ONE << 2)) != 0) + value02 /= value; + + if ((mask & (MASK_ONE << 3)) != 0) + value03 /= value; + + if ((mask & (MASK_ONE << 4)) != 0) + value04 /= value; + + if ((mask & (MASK_ONE << 5)) != 0) + value05 /= value; + + if ((mask & (MASK_ONE << 6)) != 0) + value06 /= value; + + if ((mask & (MASK_ONE << 7)) != 0) + value07 /= value; + + if ((mask & (MASK_ONE << 8)) != 0) + value08 /= value; + + if ((mask & (MASK_ONE << 9)) != 0) + value09 /= value; + + if ((mask & (MASK_ONE << 10)) != 0) + value10 /= value; + + if ((mask & (MASK_ONE << 11)) != 0) + value11 /= value; + + if ((mask & (MASK_ONE << 12)) != 0) + value12 /= value; + + if ((mask & (MASK_ONE << 13)) != 0) + value13 /= value; + + if ((mask & (MASK_ONE << 14)) != 0) + value14 /= value; + + if ((mask & (MASK_ONE << 15)) != 0) + value15 /= value; + + if ((mask & (MASK_ONE << 16)) != 0) + value16 /= value; + + if ((mask & (MASK_ONE << 17)) != 0) + value17 /= value; + + if ((mask & (MASK_ONE << 18)) != 0) + value18 /= value; + + if ((mask & (MASK_ONE << 19)) != 0) + value19 /= value; + + if ((mask & (MASK_ONE << 20)) != 0) + value20 /= value; + + if ((mask & (MASK_ONE << 21)) != 0) + value21 /= value; + + if ((mask & (MASK_ONE << 22)) != 0) + value22 /= value; + + if ((mask & (MASK_ONE << 23)) != 0) + value23 /= value; + + if ((mask & (MASK_ONE << 24)) != 0) + value24 /= value; + + if ((mask & (MASK_ONE << 25)) != 0) + value25 /= value; + + if ((mask & (MASK_ONE << 26)) != 0) + value26 /= value; + + if ((mask & (MASK_ONE << 27)) != 0) + value27 /= value; + + if ((mask & (MASK_ONE << 28)) != 0) + value28 /= value; + + if ((mask & (MASK_ONE << 29)) != 0) + value29 /= value; + + if ((mask & (MASK_ONE << 30)) != 0) + value30 /= value; + + if ((mask & (MASK_ONE << 31)) != 0) + value31 /= value; + + if ((mask & (MASK_ONE << 32)) != 0) + value32 /= value; + + if ((mask & (MASK_ONE << 33)) != 0) + value33 /= value; + + if ((mask & (MASK_ONE << 34)) != 0) + value34 /= value; + + if ((mask & (MASK_ONE << 35)) != 0) + value35 /= value; + + if ((mask & (MASK_ONE << 36)) != 0) + value36 /= value; + + if ((mask & (MASK_ONE << 37)) != 0) + value37 /= value; + + if ((mask & (MASK_ONE << 38)) != 0) + value38 /= value; + + if ((mask & (MASK_ONE << 39)) != 0) + value39 /= value; + } + + while ((mask = *eq0_mask++) != 0) + { + eq0 = 0; + + if ((mask & (MASK_ONE << 0)) != 0) + eq0 |= (value00 == ZERO); + + if ((mask & (MASK_ONE << 1)) != 0) + eq0 |= (value01 == ZERO); + + if ((mask & (MASK_ONE << 2)) != 0) + eq0 |= (value02 == ZERO); + + if ((mask & (MASK_ONE << 3)) != 0) + eq0 |= (value03 == ZERO); + + if ((mask & (MASK_ONE << 4)) != 0) + eq0 |= (value04 == ZERO); + + if ((mask & (MASK_ONE << 5)) != 0) + eq0 |= (value05 == ZERO); + + if ((mask & (MASK_ONE << 6)) != 0) + eq0 |= (value06 == ZERO); + + if ((mask & (MASK_ONE << 7)) != 0) + eq0 |= (value07 == ZERO); + + if ((mask & (MASK_ONE << 8)) != 0) + eq0 |= (value08 == ZERO); + + if ((mask & (MASK_ONE << 9)) != 0) + eq0 |= (value09 == ZERO); + + if ((mask & (MASK_ONE << 10)) != 0) + eq0 |= (value10 == ZERO); + + if ((mask & (MASK_ONE << 11)) != 0) + eq0 |= (value11 == ZERO); + + if ((mask & (MASK_ONE << 12)) != 0) + eq0 |= (value12 == ZERO); + + if ((mask & (MASK_ONE << 13)) != 0) + eq0 |= (value13 == ZERO); + + if ((mask & (MASK_ONE << 14)) != 0) + eq0 |= (value14 == ZERO); + + if ((mask & (MASK_ONE << 15)) != 0) + eq0 |= (value15 == ZERO); + + if ((mask & (MASK_ONE << 16)) != 0) + eq0 |= (value16 == ZERO); + + if ((mask & (MASK_ONE << 17)) != 0) + eq0 |= (value17 == ZERO); + + if ((mask & (MASK_ONE << 18)) != 0) + eq0 |= (value18 == ZERO); + + if ((mask & (MASK_ONE << 19)) != 0) + eq0 |= (value19 == ZERO); + + if ((mask & (MASK_ONE << 20)) != 0) + eq0 |= (value20 == ZERO); + + if ((mask & (MASK_ONE << 21)) != 0) + eq0 |= (value21 == ZERO); + + if ((mask & (MASK_ONE << 22)) != 0) + eq0 |= (value22 == ZERO); + + if ((mask & (MASK_ONE << 23)) != 0) + eq0 |= (value23 == ZERO); + + if ((mask & (MASK_ONE << 24)) != 0) + eq0 |= (value24 == ZERO); + + if ((mask & (MASK_ONE << 25)) != 0) + eq0 |= (value25 == ZERO); + + if ((mask & (MASK_ONE << 26)) != 0) + eq0 |= (value26 == ZERO); + + if ((mask & (MASK_ONE << 27)) != 0) + eq0 |= (value27 == ZERO); + + if ((mask & (MASK_ONE << 28)) != 0) + eq0 |= (value28 == ZERO); + + if ((mask & (MASK_ONE << 29)) != 0) + eq0 |= (value29 == ZERO); + + if ((mask & (MASK_ONE << 30)) != 0) + eq0 |= (value30 == ZERO); + + if ((mask & (MASK_ONE << 31)) != 0) + eq0 |= (value31 == ZERO); + + if ((mask & (MASK_ONE << 32)) != 0) + eq0 |= (value32 == ZERO); + + if ((mask & (MASK_ONE << 33)) != 0) + eq0 |= (value33 == ZERO); + + if ((mask & (MASK_ONE << 34)) != 0) + eq0 |= (value34 == ZERO); + + if ((mask & (MASK_ONE << 35)) != 0) + eq0 |= (value35 == ZERO); + + if ((mask & (MASK_ONE << 36)) != 0) + eq0 |= (value36 == ZERO); + + if ((mask & (MASK_ONE << 37)) != 0) + eq0 |= (value37 == ZERO); + + if ((mask & (MASK_ONE << 38)) != 0) + eq0 |= (value38 == ZERO); + + if ((mask & (MASK_ONE << 39)) != 0) + eq0 |= (value39 == ZERO); + + *eq0_ptr++ = eq0; + } + + return ( value00 + value01 + value02 + value03 + value04 + + value05 + value06 + value07 + value08 + value09 + + value10 + value11 + value12 + value13 + value14 + + value15 + value16 + value17 + value18 + value19 + + value20 + value21 + value22 + value23 + value24 + + value25 + value26 + value27 + value28 + value29 + + value30 + value31 + value32 + value33 + value34 + + value35 + value36 + value37 + value38 + value39); +} + +/* { dg-final { scan-assembler "fadd" } } */ +/* { dg-final { scan-assembler "fsub" } } */ +/* { dg-final { scan-assembler "fmul" } } */ +/* { dg-final { scan-assembler "fdiv" } } */ +/* { dg-final { scan-assembler "fcmpu" } } */ +/* { dg-final { scan-assembler "xsadddp" } } */ +/* { dg-final { scan-assembler "xssubdp" } } */ +/* { dg-final { scan-assembler "xsmuldp" } } */ +/* { dg-final { scan-assembler "xsdivdp" } } */ +/* { dg-final { scan-assembler "xscmpudp" } } */ Property changes on: gcc/testsuite/gcc.target/powerpc/upper-regs-df.c ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/gcc/testsuite/gcc.target/powerpc/upper-regs-df.c:r215303-217365