diff options
Diffstat (limited to 'gcc/testsuite')
36 files changed, 1283 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7afca7ef52f..fd164d46872 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,41 @@ +2010-09-30 Michael Eager <eager@eagercon.com> + + * gcc.c-torture/execute/cmpsi-2.c: New testcase. + * gcc.c-torture/execute/cmpsf-1.c: Ditto. + * gcc.target/microblaze/microblaze.exp: Ditto. + * gcc.target/microblaze/others/string_cst1.c: Ditto. + * gcc.target/microblaze/others/string_cst2.c: Ditto. + * gcc.target/microblaze/others/data_var1.c: Ditto. + * gcc.target/microblaze/others/data_var2.c: Ditto. + * gcc.target/microblaze/others/data_var3.c: Ditto. + * gcc.target/microblaze/others/string_cst1_gpopt.c:: Ditto. + * gcc.target/microblaze/others/strings1.c:: Ditto. + * gcc.target/microblaze/others/string_cst2_gpopt.c: Ditto. + * gcc.target/microblaze/others/interrupt_handler_leaf.c: Ditto. + * gcc.target/microblaze/others/sdata_var1.c: Ditto. + * gcc.target/microblaze/others/sdata_var2.c: Ditto. + * gcc.target/microblaze/others/sdata_var3.c: Ditto. + * gcc.target/microblaze/others/sdata_var4.c: Ditto. + * gcc.target/microblaze/others/sdata_var5.c: Ditto. + * gcc.target/microblaze/others/sdata_var6.c: Ditto. + * gcc.target/microblaze/isa/fsqrt.c: Ditto. + * gcc.target/microblaze/isa/pcmp.c: Ditto. + * gcc.target/microblaze/isa/nofloat.c: Ditto. + * gcc.target/microblaze/isa/fcvt.c: Ditto. + * gcc.target/microblaze/isa/float.c: Ditto. + * gcc.target/microblaze/isa/mulh.c: Ditto. + * gcc.target/microblaze/isa/fcmp1.c: Ditto. + * gcc.target/microblaze/isa/mul-bshift-pcmp.c: Ditto. + * gcc.target/microblaze/isa/fcmp2.c: Ditto. + * gcc.target/microblaze/isa/fcmp3.c: Ditto. + * gcc.target/microblaze/isa/mul-bshift.c: Ditto. + * gcc.target/microblaze/isa/mulh-bshift-pcmp.c: Ditto. + * gcc.target/microblaze/isa/bshift.c: Ditto. + * gcc.target/microblaze/isa/nofcmp.c: Ditto. + * gcc.target/microblaze/isa/div.c: Ditto. + * gcc.target/microblaze/isa/vanilla.c: Ditto. + * gcc.target/microblaze/isa/mul.c: Ditto. + 2010-09-30 Iain Sandoe <iains@gcc.gnu.org> merge from FSF 'apple/trunk' branch. @@ -348,6 +386,7 @@ PR fortran/45744 * gfortran.dg/dependency_36.f90: New test. +>>>>>>> .r164755 2010-09-23 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/pad-1.c: Remove -S from dg-options. diff --git a/gcc/testsuite/gcc.c-torture/execute/cmpsf-1.c b/gcc/testsuite/gcc.c-torture/execute/cmpsf-1.c new file mode 100644 index 00000000000..f5438a171d2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cmpsf-1.c @@ -0,0 +1,169 @@ +#include <limits.h> + +#define F 140 +#define T 13 + +feq (float x, float y) +{ + if (x == y) + return T; + else + return F; +} + +fne (float x, float y) +{ + if (x != y) + return T; + else + return F; +} + +flt (float x, float y) +{ + if (x < y) + return T; + else + return F; +} + +fge (float x, float y) +{ + if (x >= y) + return T; + else + return F; +} + +fgt (float x, float y) +{ + if (x > y) + return T; + else + return F; +} + +fle (float x, float y) +{ + if (x <= y) + return T; + else + return F; +} + +float args[] = +{ + 0.0F, + 1.0F, + -1.0F, + FLOAT_MAX, + FLOAT_MIN, + 0.0000000000001F, + 123456789.0F, + -987654321.0F +}; + +int correct_results[] = +{ + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T +}; + +int +main (void) +{ + int i, j, *res = correct_results; + + for (i = 0; i < 8; i++) + { + long arg0 = args[i]; + for (j = 0; j < 8; j++) + { + long arg1 = args[j]; + + if (feq (arg0, arg1) != *res++) + abort (); + if (fne (arg0, arg1) != *res++) + abort (); + if (flt (arg0, arg1) != *res++) + abort (); + if (fge (arg0, arg1) != *res++) + abort (); + if (fgt (arg0, arg1) != *res++) + abort (); + if (fle (arg0, arg1) != *res++) + abort (); + if (fltu (arg0, arg1) != *res++) + abort (); + if (fgeu (arg0, arg1) != *res++) + abort (); + if (fgtu (arg0, arg1) != *res++) + abort (); + if (fleu (arg0, arg1) != *res++) + abort (); + } + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c b/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c new file mode 100644 index 00000000000..cf58b9e7f93 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cmpsi-2.c @@ -0,0 +1,199 @@ +#define F 140 +#define T 13 + +feq (long x, long y) +{ + if (x == y) + return T; + else + return F; +} + +fne (long x, long y) +{ + if (x != y) + return T; + else + return F; +} + +flt (long x, long y) +{ + if (x < y) + return T; + else + return F; +} + +fge (long x, long y) +{ + if (x >= y) + return T; + else + return F; +} + +fgt (long x, long y) +{ + if (x > y) + return T; + else + return F; +} + +fle (long x, long y) +{ + if (x <= y) + return T; + else + return F; +} + +fltu (long x, long y) +{ + if (x < y) + return T; + else + return F; +} + +fgeu (long x, long y) +{ + if (x >= y) + return T; + else + return F; +} + +fgtu (long x, long y) +{ + if (x > y) + return T; + else + return F; +} + +fleu (long x, long y) +{ + if (x <= y) + return T; + else + return F; +} + +long args[] = +{ + 0L, + 1L, + -1L, + 0x7fffffffL, + 0x80000000L, + 0x80000001L, + 0x1A3F2373L, + 0x93850E92L +}; + +int correct_results[] = +{ + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T +}; + +int +main (void) +{ + int i, j, *res = correct_results; + + for (i = 0; i < 8; i++) + { + long arg0 = args[i]; + for (j = 0; j < 8; j++) + { + long arg1 = args[j]; + + if (feq (arg0, arg1) != *res++) + abort (); + if (fne (arg0, arg1) != *res++) + abort (); + if (flt (arg0, arg1) != *res++) + abort (); + if (fge (arg0, arg1) != *res++) + abort (); + if (fgt (arg0, arg1) != *res++) + abort (); + if (fle (arg0, arg1) != *res++) + abort (); + if (fltu (arg0, arg1) != *res++) + abort (); + if (fgeu (arg0, arg1) != *res++) + abort (); + if (fgtu (arg0, arg1) != *res++) + abort (); + if (fleu (arg0, arg1) != *res++) + abort (); + } + } + exit (0); +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/bshift.c b/gcc/testsuite/gcc.target/microblaze/isa/bshift.c new file mode 100644 index 00000000000..64cf1e2e59e --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/bshift.c @@ -0,0 +1,53 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mxl-barrel-shift" } */ + +volatile int m1, m2, m3; +volatile unsigned int u1, u2, u3; +volatile long l1, l2; +volatile long long llp; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler-not "mul\tr" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler-not "muli" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler "bslli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler "bsll\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler "bsrai\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler "bsra\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); + +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/div.c b/gcc/testsuite/gcc.target/microblaze/isa/div.c new file mode 100644 index 00000000000..25ee42ce5c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/div.c @@ -0,0 +1,52 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mno-xl-soft-div" } */ + +volatile int m1, m2, m3; +volatile long l1, l2; +volatile long long llp; +volatile unsigned int u1, u2, u3; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler-not "mul\tr" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler-not "muli" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler-not "bslli" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler-not "bsll" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler-not "bsrai" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler-not "bsra" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c new file mode 100644 index 00000000000..4041a241391 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp1.c @@ -0,0 +1,10 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler "fcmp\.(le|gt)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + if (f2 <= f3) + print ("le"); +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c new file mode 100644 index 00000000000..3902b839db9 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp2.c @@ -0,0 +1,10 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler "fcmp\.(lt|ge)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + if (f2 < f3) + print ("lt"); +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c b/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c new file mode 100644 index 00000000000..8555974dda5 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/fcmp3.c @@ -0,0 +1,10 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler "fcmp\.(eq|ne)\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + if (f2 == f3) + print ("eq"); +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fcvt.c b/gcc/testsuite/gcc.target/microblaze/isa/fcvt.c new file mode 100644 index 00000000000..ee057c1b6ac --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/fcvt.c @@ -0,0 +1,21 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float -mxl-float-convert" } */ + +int float_func (float f) +{ + /* { dg-final { scan-assembler "flt\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return f; +} + + +float int_func (int i) +{ + /* { dg-final { scan-assembler "fint\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return i; +} + + +float uint_func (unsigned int i) +{ + /* { dg-final { scan-assembler "fint\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return i; +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/float.c b/gcc/testsuite/gcc.target/microblaze/isa/float.c new file mode 100644 index 00000000000..f5ef3186cdd --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/float.c @@ -0,0 +1,18 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler "fmul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + f1 = f2 * f3; + + /* { dg-final { scan-assembler "fadd\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + f1 = f2 + f3; + + /* { dg-final { scan-assembler "frsub\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + f1 = f2 - f3; + + /* { dg-final { scan-assembler "fdiv\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + f1 = f2 / f3; +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/fsqrt.c b/gcc/testsuite/gcc.target/microblaze/isa/fsqrt.c new file mode 100644 index 00000000000..4c2466e4a55 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/fsqrt.c @@ -0,0 +1,10 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float -mxl-float-sqrt" } */ +#include <math.h> + +float sqrt_func (float f) +{ + /* { dg-final { scan-assembler "fsqrt\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return sqrtf (f); +} + + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift-pcmp.c b/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift-pcmp.c new file mode 100644 index 00000000000..ce186314e6a --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift-pcmp.c @@ -0,0 +1,53 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mxl-barrel-shift -mno-xl-soft-mul -mxl-pattern-compare" } */ + +volatile int m1, m2, m3; +volatile unsigned int u1, u2, u3; +volatile long l1, l2; +volatile long long llp; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler "mul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler "muli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),(0x\[0-9a-fA-F]+|\[+-]*\[0-9]+)" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler "bslli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler "bsll\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler "bsrai\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler "bsra\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler "pcmpne\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler "pcmpeq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return (m1 == m2); + +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift.c b/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift.c new file mode 100644 index 00000000000..76d174ec7c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/mul-bshift.c @@ -0,0 +1,53 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mxl-barrel-shift -mno-xl-soft-mul" } */ + +volatile int m1, m2, m3; +volatile unsigned int u1, u2, u3; +volatile long l1, l2; +volatile long long llp; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler "mul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler "muli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),(0x\[0-9a-fA-F]+|\[+-]*\[0-9]+)" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler "bslli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler "bsll\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler "bsrai\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler "bsra\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); + +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/mul.c b/gcc/testsuite/gcc.target/microblaze/isa/mul.c new file mode 100644 index 00000000000..d2a6bec61e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/mul.c @@ -0,0 +1,52 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mno-xl-soft-mul" } */ + +volatile int m1, m2, m3; +volatile long l1, l2; +volatile long long llp; +volatile unsigned int u1, u2, u3; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler "mul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler "muli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),(0x\[0-9a-fA-F]+|\[+-]*\[0-9]+)" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler-not "bslli" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler-not "bsll" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler-not "bsrai" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler-not "bsra" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/mulh-bshift-pcmp.c b/gcc/testsuite/gcc.target/microblaze/isa/mulh-bshift-pcmp.c new file mode 100644 index 00000000000..a15983af117 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/mulh-bshift-pcmp.c @@ -0,0 +1,53 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mxl-barrel-shift -mno-xl-soft-mul -mxl-pattern-compare -mxl-multiply-high" } */ + +volatile int m1, m2, m3; +volatile unsigned int u1, u2, u3; +volatile long l1, l2; +volatile long long llp; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler "mul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler "muli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),(0x\[0-9a-fA-F]+|\[+-]*\[0-9]+)" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler "mulh\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + llp = (long long)l1 * l2; + + /* { dg-final { scan-assembler "mulhu\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + ullp = (unsigned long long)ul1 * ul2; + + /* { dg-final { scan-assembler "mulhsu\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + llp = (long long)l1 * ul2; + + /* { dg-final { scan-assembler "bslli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler "bsll\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler "bsrai\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),25" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler "bsra\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler "pcmpne\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler "pcmpeq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + return (m1 == m2); + +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/mulh.c b/gcc/testsuite/gcc.target/microblaze/isa/mulh.c new file mode 100644 index 00000000000..6e0cc3ac470 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/mulh.c @@ -0,0 +1,53 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mno-xl-soft-mul -mxl-multiply-high" } */ + +volatile int m1, m2, m3; +volatile unsigned int u1, u2, u3; +volatile long l1, l2; +volatile long long llp; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler "mul\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler "muli\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),(0x\[0-9a-fA-F]+|\[+-]*\[0-9]+)" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler "mulh\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler "mulhu\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler "mulhsu\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler-not "bslli" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler-not "bsll" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler-not "bsrai" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler-not "bsra" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); + +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c b/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c new file mode 100644 index 00000000000..ebfb170ecee --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/nofcmp.c @@ -0,0 +1,21 @@ +/* { dg-options "-O3 -mcpu=v6.00.a " } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler-not "fcmp" } } */ + if (f2 <= f3) + print ("le"); + else if (f2 == f3) + print ("eq"); + else if (f2 < f3) + print ("lt"); + else if (f2 > f3) + print ("gt"); + else if (f2 >= f3) + print ("ge"); + else if (f2 != f3) + print ("ne"); + +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/nofloat.c b/gcc/testsuite/gcc.target/microblaze/isa/nofloat.c new file mode 100644 index 00000000000..647da3cfe24 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/nofloat.c @@ -0,0 +1,19 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -msoft-float" } */ + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler-not "fmul" } } */ + f1 = f2 * f3; + + /* { dg-final { scan-assembler-not "fadd" } } */ + f1 = f2 + f3; + + /* { dg-final { scan-assembler-not "frsub" } } */ + f1 = f2 - f3; + + /* { dg-final { scan-assembler-not "fdiv" } } */ + f1 = f2 / f3; + +} diff --git a/gcc/testsuite/gcc.target/microblaze/isa/pcmp.c b/gcc/testsuite/gcc.target/microblaze/isa/pcmp.c new file mode 100644 index 00000000000..aea79572103 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/pcmp.c @@ -0,0 +1,52 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mxl-pattern-compare" } */ + +volatile int m1, m2, m3; +volatile long l1, l2; +volatile long long llp; +volatile unsigned int u1, u2, u3; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler-not "mul\tr" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler-not "muli" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler-not "bslli" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler-not "bsll" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler-not "bsrai" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler-not "bsra" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler "pcmpeq" } } */ + return (m1 == m2); +} + diff --git a/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c b/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c new file mode 100644 index 00000000000..1d6ba807b12 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/isa/vanilla.c @@ -0,0 +1,89 @@ +/* { dg-options "-O3 -mcpu=v6.00.a -mcpu=v6.00.a" } */ + +volatile int m1, m2, m3; +volatile long l1, l2; +volatile long long llp; +volatile unsigned int u1, u2, u3; + +volatile unsigned long ul1, ul2; +volatile unsigned long long ullp; + +int test_mul () { + + /* { dg-final { scan-assembler-not "mul\tr" } } */ + m1 = m2 * m3 ; + + /* { dg-final { scan-assembler-not "muli" } } */ + m3 = m1 * 1234 ; + + /* { dg-final { scan-assembler-not "mulh" } } */ + llp = ((long long)l1 * l2); + + /* { dg-final { scan-assembler-not "mulhu" } } */ + ullp = ((unsigned long long)ul1 * ul2); + + /* { dg-final { scan-assembler-not "mulhsu" } } */ + llp = ((long long)l1 * ul2); + + /* { dg-final { scan-assembler-not "bslli" } } */ + m3 = m2 << 25; + + /* { dg-final { scan-assembler-not "bsll" } } */ + m2 = m1 << m3; + + /* { dg-final { scan-assembler-not "bsrai" } } */ + m3 = m2 >> 25; + + /* { dg-final { scan-assembler-not "bsra" } } */ + m2 = m1 >> m3; + + /* { dg-final { scan-assembler-not "idiv" } } */ + m1 = m2 / m1; + + /* { dg-final { scan-assembler-not "idivu" } } */ + u1 = u2 / u3; + + /* { dg-final { scan-assembler-not "pcmpne" } } */ + m3 = (m3 != m1); + + /* { dg-final { scan-assembler-not "pcmpeq" } } */ + return (m1 == m2); +} + + + +volatile float f1, f2, f3; + +void float_func () +{ + /* { dg-final { scan-assembler-not "fmul" } } */ + f1 = f2 * f3; + + /* { dg-final { scan-assembler-not "fadd" } } */ + f1 = f2 + f3; + + /* { dg-final { scan-assembler-not "frsub" } } */ + f1 = f2 - f3; + + /* { dg-final { scan-assembler-not "fdiv" } } */ + f1 = f2 / f3; + +} + +void float_cmp_func () +{ + /* { dg-final { scan-assembler-not "fcmp" } } */ + if (f2 <= f3) + print ("le"); + else if (f2 == f3) + print ("eq"); + else if (f2 < f3) + print ("lt"); + else if (f2 > f3) + print ("gt"); + else if (f2 >= f3) + print ("ge"); + else if (f2 != f3) + print ("ne"); + +} diff --git a/gcc/testsuite/gcc.target/microblaze/microblaze.exp b/gcc/testsuite/gcc.target/microblaze/microblaze.exp new file mode 100644 index 00000000000..a8994e91f1c --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/microblaze.exp @@ -0,0 +1,62 @@ +# Copyright 2009, 2010 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + + +# MicroBlaze test driver that uses the `dg.exp' driver. + +# Exit immediately if this isn't a MicroBlaze target. +if { ![istarget microblaze*-*-*] } then { + return +} + +# Don't execute when we are testing some configuration of GCC or G++. +# This we figure out by looking at target_config_cflags which needs to be "" for microblaze.exp +if { $target_config_cflags != "" } { + return +} + +global TORTURE_OPTIONS +set TORTURE_OPTIONS [list \ + { -O0 } \ + { -O1 } \ + { -O2 } \ + { -O3 } \ + { -Os } ] + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Load support procs. +load_lib gcc-dg.exp + +# Initialize `dg'. +dg-init + +set default_c_flags "" + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/isa/*.\[cSi\]]] \ +${default_c_flags} "" + +gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/others/*.\[cSi\]]] \ + "-mcpu=v6.00.a" + + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.target/microblaze/others/data_var1.c b/gcc/testsuite/gcc.target/microblaze/others/data_var1.c new file mode 100644 index 00000000000..15b85ca7780 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/data_var1.c @@ -0,0 +1,8 @@ +/* { dg-final { scan-assembler "\.bss*" } } */ +int global; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r0" } } */ + return global; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/data_var2.c b/gcc/testsuite/gcc.target/microblaze/others/data_var2.c new file mode 100644 index 00000000000..9fb7347bab4 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/data_var2.c @@ -0,0 +1,8 @@ +/* { dg-final { scan-assembler "\.data*" } } */ +int global = 10; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r0" } } */ + return global; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/data_var3.c b/gcc/testsuite/gcc.target/microblaze/others/data_var3.c new file mode 100644 index 00000000000..2b3f064108b --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/data_var3.c @@ -0,0 +1,7 @@ +/* { dg-final { scan-assembler "\.rodata*" } } */ +const int global = 10; + +int testfunc () +{ + return global; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/interrupt_handler_leaf.c b/gcc/testsuite/gcc.target/microblaze/others/interrupt_handler_leaf.c new file mode 100644 index 00000000000..9d068d05e07 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/interrupt_handler_leaf.c @@ -0,0 +1,10 @@ +int leaf_func () __attribute__ ((interrupt_handler)); +volatile int intr_occurred; + +int leaf_func () +{ + + /* { dg-final { scan-assembler "rtid\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),0" } } */ + /* { dg-final { scan-assembler-not "rtsd" } } */ + intr_occurred += 1; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var1.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var1.c new file mode 100644 index 00000000000..2337f5a1e78 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var1.c @@ -0,0 +1,15 @@ +/* { dg-options "-mxl-gp-opt" } */ + +/* { dg-final { scan-assembler "\.sbss\[^2]+" } } */ +typedef int Boolean; +volatile Boolean global = 0; +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + return global; +} + +int main () +{ + +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var2.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var2.c new file mode 100644 index 00000000000..1c91d004305 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var2.c @@ -0,0 +1,10 @@ +/* { dg-options "-mxl-gp-opt" } */ + +/* { dg-final { scan-assembler "\.sdata\[^2]+" } } */ +int global = 10; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + return global; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var3.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var3.c new file mode 100644 index 00000000000..07c80041c72 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var3.c @@ -0,0 +1,13 @@ +/* { dg-options "-mxl-gp-opt" } */ + +extern int a; + +/* { dg-final { scan-assembler "\.sdata2" } } */ +const int global1 = 10; +extern const int global2; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r2" } } */ + return global2 + global1; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var4.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var4.c new file mode 100644 index 00000000000..4dfa337d538 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var4.c @@ -0,0 +1,15 @@ +/* { dg-options "-mxl-gp-opt -G 16" } */ + +/* { dg-final { scan-assembler "\.sbss\[^2]+" } } */ +struct test_s { + int a; + int b; + int c; + int d; +} global; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + return global.a; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var5.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var5.c new file mode 100644 index 00000000000..5c61962bf4e --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var5.c @@ -0,0 +1,15 @@ +/* { dg-options "-mxl-gp-opt -G 16" } */ + +/* { dg-final { scan-assembler "\.sdata\[^2]+" } } */ +struct test_s { + int a; + int b; + int c; + int d; +} global = { 1, 2, 3, 4 }; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + return global.a; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/sdata_var6.c b/gcc/testsuite/gcc.target/microblaze/others/sdata_var6.c new file mode 100644 index 00000000000..0c8fe431f5d --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/sdata_var6.c @@ -0,0 +1,18 @@ +/* { dg-options "-mxl-gp-opt -G 16" } */ + +struct test_s { + int a; + int b; + int c; + int d; +}; + +/* { dg-final { scan-assembler "\.sdata2" } } */ +const struct test_s global1 = { 1, 2, 3, 4}; +extern const struct test_s global2; + +int testfunc () +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r2" } } */ + return global2.a + global1.a; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/string_cst1.c b/gcc/testsuite/gcc.target/microblaze/others/string_cst1.c new file mode 100644 index 00000000000..2a74f4ce721 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/string_cst1.c @@ -0,0 +1,12 @@ +#include <string.h> + +/* { dg-final { scan-assembler "\.rodata*" } } */ +/* { dg-final { scan-assembler "\.data*" } } */ + +char *string1 = "string1"; + +int testfunc (char *cptr) +{ +/* { dg-final { scan-assembler-not "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + strcpy (string1, cptr); +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/string_cst1_gpopt.c b/gcc/testsuite/gcc.target/microblaze/others/string_cst1_gpopt.c new file mode 100644 index 00000000000..5b5d3db18df --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/string_cst1_gpopt.c @@ -0,0 +1,13 @@ +/* { dg-options "-mxl-gp-opt" } */ + +#include <string.h> + +/* { dg-final { scan-assembler "\.rodata*" } } */ +/* { dg-final { scan-assembler "\.sdata\[^2]+" } } */ +char *string1 = "string1"; + +int testfunc (char *cptr) +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + strcpy (string1, cptr); +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/string_cst2.c b/gcc/testsuite/gcc.target/microblaze/others/string_cst2.c new file mode 100644 index 00000000000..c375339dcd1 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/string_cst2.c @@ -0,0 +1,13 @@ +#include <string.h> + +/* { dg-final { scan-assembler "\.rodata*" } } */ +/* { dg-final { scan-assembler "\.data*" } } */ +const char *string1 = "string1"; + +char* testfunc (char *cptr) +{ +/* { dg-final { scan-assembler-not "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + strcpy (cptr, string1); + + return cptr; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/string_cst2_gpopt.c b/gcc/testsuite/gcc.target/microblaze/others/string_cst2_gpopt.c new file mode 100644 index 00000000000..057e8c4479b --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/string_cst2_gpopt.c @@ -0,0 +1,15 @@ +/* { dg-options "-mxl-gp-opt" } */ + +#include <string.h> + +/* { dg-final { scan-assembler "\.rodata*" } } */ +/* { dg-final { scan-assembler "\.sdata\[^2]+" } } */ +const char *string1 = "string1"; + +char* testfunc (char *cptr) +{ +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r13" } } */ + strcpy (cptr, string1); + + return cptr; +} diff --git a/gcc/testsuite/gcc.target/microblaze/others/strings1.c b/gcc/testsuite/gcc.target/microblaze/others/strings1.c new file mode 100644 index 00000000000..7a63faf79f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/microblaze/others/strings1.c @@ -0,0 +1,13 @@ +/* { dg-options "-O3" } */ + +#include <string.h> + +/* { dg-final { scan-assembler "\.rodata*" } } */ +extern void somefunc (char *); +int testfunc () +{ + char string2[80]; +/* { dg-final { scan-assembler "\lwi\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r0,.LC*" } } */ + strcpy (string2, "hello"); + somefunc (string2); +} |