diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/powerpc')
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/vsx-simode.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/vsx-simode2.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/vsx-simode3.c | 22 |
3 files changed, 59 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode.c new file mode 100644 index 0000000..e4b2113 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode.c @@ -0,0 +1,22 @@ +/* { 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 -mvsx-small-integer" } */ + +double load_asm_d_constraint (int *p) +{ + double ret; + __asm__ ("xxlor %x0,%x1,%x1\t# load d constraint" : "=d" (ret) : "d" (*p)); + return ret; +} + +void store_asm_d_constraint (int *p, double x) +{ + int i; + __asm__ ("xxlor %x0,%x1,%x1\t# store d constraint" : "=d" (i) : "d" (x)); + *p = i; +} + +/* { dg-final { scan-assembler "lfiwzx" } } */ +/* { dg-final { scan-assembler "stfiwx" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c new file mode 100644 index 0000000..92553b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode2.c @@ -0,0 +1,15 @@ +/* { 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 -mvsx-small-integer" } */ + +unsigned int foo (unsigned int u) +{ + unsigned int ret; + __asm__ ("xxlor %x0,%x1,%x1\t# v, v constraints" : "=v" (ret) : "v" (u)); + return ret; +} + +/* { dg-final { scan-assembler "mtvsrwz" } } */ +/* { dg-final { scan-assembler "mfvsrwz" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c b/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c new file mode 100644 index 0000000..fd15931 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsx-simode3.c @@ -0,0 +1,22 @@ +/* { 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 -mvsx-small-integer" } */ + +double load_asm_v_constraint (int *p) +{ + double ret; + __asm__ ("xxlor %x0,%x1,%x1\t# load v constraint" : "=d" (ret) : "v" (*p)); + return ret; +} + +void store_asm_v_constraint (int *p, double x) +{ + int i; + __asm__ ("xxlor %x0,%x1,%x1\t# store v constraint" : "=v" (i) : "d" (x)); + *p = i; +} + +/* { dg-final { scan-assembler "lxsiwzx" } } */ +/* { dg-final { scan-assembler "stxsiwx" } } */ |