From daee9ce2953033be80e974fd467201934eb1ed01 Mon Sep 17 00:00:00 2001 From: Andrew Bennett Date: Wed, 8 Jul 2015 09:40:35 +0000 Subject: [PATCH] MIPS: Fix failing branch range checks for micromips. The current branch range tests assume that the MIPS branch instructions have a 16 bit branch offset which is shifted by 2. Unfortunately for microMIPS this offset is shifted by 1 which reduces the branch range and caused the branch-*.c tests to fail. testsuite/ * gcc.target/mips/branch-2.c: Change NOMIPS16 to NOCOMPRESSION. * gcc.target/mips/branch-3.c: Ditto * gcc.target/mips/branch-4.c: Ditto. * gcc.target/mips/branch-5.c: Ditto. * gcc.target/mips/branch-6.c: Ditto. * gcc.target/mips/branch-7.c: Ditto. * gcc.target/mips/branch-8.c: Ditto. * gcc.target/mips/branch-9.c: Ditto. * gcc.target/mips/branch-10.c: Ditto. * gcc.target/mips/branch-11.c: Ditto. * gcc.target/mips/branch-12.c: Ditto. * gcc.target/mips/branch-13.c: Ditto. * gcc.target/mips/umips-branch-5.c: New file. * gcc.target/mips/umips-branch-6.c: New file. * gcc.target/mips/umips-branch-7.c: New file. * gcc.target/mips/umips-branch-8.c: New file. * gcc.target/mips/umips-branch-9.c: New file. * gcc.target/mips/umips-branch-10.c: New file. * gcc.target/mips/umips-branch-11.c: New file. * gcc.target/mips/umips-branch-12.c: New file. * gcc.target/mips/umips-branch-13.c: New file. * gcc.target/mips/umips-branch-14.c: New file. * gcc.target/mips/umips-branch-15.c: New file. * gcc.target/mips/umips-branch-16.c: New file. * gcc.target/mips/branch-helper.h (OCCUPY_0x10000): New define. (OCCUPY_0xfffc): New define. From-SVN: r225540 --- gcc/testsuite/ChangeLog | 29 +++++++++++++++++++++++++ gcc/testsuite/gcc.target/mips/branch-10.c | 2 +- gcc/testsuite/gcc.target/mips/branch-11.c | 2 +- gcc/testsuite/gcc.target/mips/branch-12.c | 2 +- gcc/testsuite/gcc.target/mips/branch-13.c | 2 +- gcc/testsuite/gcc.target/mips/branch-2.c | 2 +- gcc/testsuite/gcc.target/mips/branch-3.c | 2 +- gcc/testsuite/gcc.target/mips/branch-4.c | 2 +- gcc/testsuite/gcc.target/mips/branch-5.c | 2 +- gcc/testsuite/gcc.target/mips/branch-6.c | 2 +- gcc/testsuite/gcc.target/mips/branch-7.c | 2 +- gcc/testsuite/gcc.target/mips/branch-8.c | 2 +- gcc/testsuite/gcc.target/mips/branch-9.c | 2 +- gcc/testsuite/gcc.target/mips/branch-helper.h | 20 +++++++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-10.c | 14 ++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-11.c | 13 +++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-12.c | 18 +++++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-13.c | 13 +++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-14.c | 17 +++++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-15.c | 13 +++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-16.c | 17 +++++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-5.c | 13 +++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-6.c | 13 +++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-7.c | 12 ++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-8.c | 14 ++++++++++++ gcc/testsuite/gcc.target/mips/umips-branch-9.c | 12 ++++++++++ 26 files changed, 230 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-10.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-11.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-12.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-13.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-14.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-15.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-16.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-5.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-6.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-7.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-8.c create mode 100644 gcc/testsuite/gcc.target/mips/umips-branch-9.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9ee034f..f02d3e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,32 @@ +2015-07-08 Andrew Bennett + + * gcc.target/mips/branch-2.c: Change NOMIPS16 to NOCOMPRESSION. + * gcc.target/mips/branch-3.c: Ditto + * gcc.target/mips/branch-4.c: Ditto. + * gcc.target/mips/branch-5.c: Ditto. + * gcc.target/mips/branch-6.c: Ditto. + * gcc.target/mips/branch-7.c: Ditto. + * gcc.target/mips/branch-8.c: Ditto. + * gcc.target/mips/branch-9.c: Ditto. + * gcc.target/mips/branch-10.c: Ditto. + * gcc.target/mips/branch-11.c: Ditto. + * gcc.target/mips/branch-12.c: Ditto. + * gcc.target/mips/branch-13.c: Ditto. + * gcc.target/mips/umips-branch-5.c: New file. + * gcc.target/mips/umips-branch-6.c: New file. + * gcc.target/mips/umips-branch-7.c: New file. + * gcc.target/mips/umips-branch-8.c: New file. + * gcc.target/mips/umips-branch-9.c: New file. + * gcc.target/mips/umips-branch-10.c: New file. + * gcc.target/mips/umips-branch-11.c: New file. + * gcc.target/mips/umips-branch-12.c: New file. + * gcc.target/mips/umips-branch-13.c: New file. + * gcc.target/mips/umips-branch-14.c: New file. + * gcc.target/mips/umips-branch-15.c: New file. + * gcc.target/mips/umips-branch-16.c: New file. + * gcc.target/mips/branch-helper.h (OCCUPY_0x10000): New define. + (OCCUPY_0xfffc): New define. + 2015-07-08 Renlin Li * gcc.target/arm/unsigned-float.c: Different options for hf toolchain. diff --git a/gcc/testsuite/gcc.target/mips/branch-10.c b/gcc/testsuite/gcc.target/mips/branch-10.c index e2b1b5f..eb21c16 100644 --- a/gcc/testsuite/gcc.target/mips/branch-10.c +++ b/gcc/testsuite/gcc.target/mips/branch-10.c @@ -4,7 +4,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-11.c b/gcc/testsuite/gcc.target/mips/branch-11.c index 962eb1b..bd8e834 100644 --- a/gcc/testsuite/gcc.target/mips/branch-11.c +++ b/gcc/testsuite/gcc.target/mips/branch-11.c @@ -8,7 +8,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-12.c b/gcc/testsuite/gcc.target/mips/branch-12.c index 4aef160..4944634 100644 --- a/gcc/testsuite/gcc.target/mips/branch-12.c +++ b/gcc/testsuite/gcc.target/mips/branch-12.c @@ -4,7 +4,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-13.c b/gcc/testsuite/gcc.target/mips/branch-13.c index 8a6fb04..f5269b9 100644 --- a/gcc/testsuite/gcc.target/mips/branch-13.c +++ b/gcc/testsuite/gcc.target/mips/branch-13.c @@ -8,7 +8,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-2.c b/gcc/testsuite/gcc.target/mips/branch-2.c index 6409c4c..b60e9cd 100644 --- a/gcc/testsuite/gcc.target/mips/branch-2.c +++ b/gcc/testsuite/gcc.target/mips/branch-2.c @@ -5,7 +5,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-3.c b/gcc/testsuite/gcc.target/mips/branch-3.c index 5fcfece..69300f6 100644 --- a/gcc/testsuite/gcc.target/mips/branch-3.c +++ b/gcc/testsuite/gcc.target/mips/branch-3.c @@ -5,7 +5,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-4.c b/gcc/testsuite/gcc.target/mips/branch-4.c index 31e4909..29f5c9f 100644 --- a/gcc/testsuite/gcc.target/mips/branch-4.c +++ b/gcc/testsuite/gcc.target/mips/branch-4.c @@ -4,7 +4,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-5.c b/gcc/testsuite/gcc.target/mips/branch-5.c index 1e9c120..0538646 100644 --- a/gcc/testsuite/gcc.target/mips/branch-5.c +++ b/gcc/testsuite/gcc.target/mips/branch-5.c @@ -6,7 +6,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-6.c b/gcc/testsuite/gcc.target/mips/branch-6.c index 77e0340..19baee1 100644 --- a/gcc/testsuite/gcc.target/mips/branch-6.c +++ b/gcc/testsuite/gcc.target/mips/branch-6.c @@ -4,7 +4,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-7.c b/gcc/testsuite/gcc.target/mips/branch-7.c index 8ad6808..16c6d8e 100644 --- a/gcc/testsuite/gcc.target/mips/branch-7.c +++ b/gcc/testsuite/gcc.target/mips/branch-7.c @@ -6,7 +6,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (volatile int *x) { if (__builtin_expect (*x == 0, 1)) diff --git a/gcc/testsuite/gcc.target/mips/branch-8.c b/gcc/testsuite/gcc.target/mips/branch-8.c index ba5f954..2e46844 100644 --- a/gcc/testsuite/gcc.target/mips/branch-8.c +++ b/gcc/testsuite/gcc.target/mips/branch-8.c @@ -4,7 +4,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-9.c b/gcc/testsuite/gcc.target/mips/branch-9.c index cad1c00..b87f2ba 100644 --- a/gcc/testsuite/gcc.target/mips/branch-9.c +++ b/gcc/testsuite/gcc.target/mips/branch-9.c @@ -9,7 +9,7 @@ #include "branch-helper.h" -NOMIPS16 void +NOCOMPRESSION void foo (int (*bar) (void), int *x) { *x = bar (); diff --git a/gcc/testsuite/gcc.target/mips/branch-helper.h b/gcc/testsuite/gcc.target/mips/branch-helper.h index 85399be..3d033cc 100644 --- a/gcc/testsuite/gcc.target/mips/branch-helper.h +++ b/gcc/testsuite/gcc.target/mips/branch-helper.h @@ -33,5 +33,25 @@ D2 ("nop") "\n\t" \ D1 ("nop")) +/* Emit something that is 0xfffc bytes long, which is the largest + permissible range for microMIPS forward branches when branches + have delay slots. */ +#define OCCUPY_0xfffc \ + asm (D13 ("nop32") "\n\t" \ + D12 ("nop32") "\n\t" \ + D11 ("nop32") "\n\t" \ + D10 ("nop32") "\n\t" \ + D9 ("nop32") "\n\t" \ + D8 ("nop32") "\n\t" \ + D7 ("nop32") "\n\t" \ + D6 ("nop32") "\n\t" \ + D5 ("nop32") "\n\t" \ + D4 ("nop32") "\n\t" \ + D3 ("nop32") "\n\t" \ + D2 ("nop32") "\n\t" \ + D1 ("nop32") "\n\t" \ + D0 ("nop32")) /* Likewise emit something that is 0x1fffc bytes long. */ #define OCCUPY_0x1fffc do { asm ("nop"); OCCUPY_0x1fff8; } while (0) +/* Likewise emit something that is 0x10000 bytes long. */ +#define OCCUPY_0x10000 do { asm ("nop32"); OCCUPY_0xfffc; } while (0) diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-10.c b/gcc/testsuite/gcc.target/mips/umips-branch-10.c new file mode 100644 index 0000000..714691b --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-10.c @@ -0,0 +1,14 @@ +/* { dg-options "-mshared -mabi=64 -mmicromips" } */ +/* { dg-final { scan-assembler "\tdaddiu\t\\\$3,\\\$3,%lo\\(%neg\\(%gp_rel\\(foo\\)\\)\\)\n" } } */ +/* { dg-final { scan-assembler "\tld\t\\\$1,%got_page\\(\[^)\]*\\)\\(\\\$3\\)\\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ +/* { dg-final { scan-assembler-not "\\\$28" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-11.c b/gcc/testsuite/gcc.target/mips/umips-branch-11.c new file mode 100644 index 0000000..5050669 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-11.c @@ -0,0 +1,13 @@ +/* { dg-options "-mshared -mabi=32 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$28|cpload|cprestore)" } } */ +/* { dg-final { scan-assembler-not "\tjrc?\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-12.c b/gcc/testsuite/gcc.target/mips/umips-branch-12.c new file mode 100644 index 0000000..a393de9 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-12.c @@ -0,0 +1,18 @@ +/* { dg-options "-mshared -mabi=32 -mmicromips" } */ +/* { dg-final { scan-assembler "\t\\.cpload\t\\\$25\n" } } */ +/* { dg-final { scan-assembler "\t\\.cprestore\t16\n" } } */ +/* { dg-final { scan-assembler "\tlw\t\\\$1,16\\(\\\$(fp|sp)\\)\n" } } */ +/* { dg-final { scan-assembler "\tlw\t\\\$1,%got\\(\[^)\]*\\)\\(\\\$1\\)\n" } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$1,\\\$1,%lo\\(\[^)\]*\\)\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ +/* { dg-final { scan-assembler-not "\\\$28" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-13.c b/gcc/testsuite/gcc.target/mips/umips-branch-13.c new file mode 100644 index 0000000..e84b462 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-13.c @@ -0,0 +1,13 @@ +/* { dg-options "-mshared -mabi=n32 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$28|%gp_rel|%got)" } } */ +/* { dg-final { scan-assembler-not "\tjrc?\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-14.c b/gcc/testsuite/gcc.target/mips/umips-branch-14.c new file mode 100644 index 0000000..f9f30a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-14.c @@ -0,0 +1,17 @@ +/* { dg-options "-mshared -mabi=n32 -mmicromips" } */ +/* { dg-final { scan-assembler "\tsd\t\\\$28," } } */ +/* { dg-final { scan-assembler "\tld\t\\\$28," } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$28,\\\$28,%lo\\(%neg\\(%gp_rel\\(foo\\)\\)\\)\n" } } */ +/* { dg-final { scan-assembler "\tlw\t\\\$1,%got_page\\(\[^)\]*\\)\\(\\\$28\\)\n" } } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$1,\\\$1,%got_ofst\\(\[^)\]*\\)\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-15.c b/gcc/testsuite/gcc.target/mips/umips-branch-15.c new file mode 100644 index 0000000..6704aad --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-15.c @@ -0,0 +1,13 @@ +/* { dg-options "-mshared -mabi=64 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$28|%gp_rel|%got)" } } */ +/* { dg-final { scan-assembler-not "\tjrc?\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-16.c b/gcc/testsuite/gcc.target/mips/umips-branch-16.c new file mode 100644 index 0000000..95f7db5 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-16.c @@ -0,0 +1,17 @@ +/* { dg-options "-mshared -mabi=64 -mmicromips" } */ +/* { dg-final { scan-assembler "\tsd\t\\\$28," } } */ +/* { dg-final { scan-assembler "\tld\t\\\$28," } } */ +/* { dg-final { scan-assembler "\tdaddiu\t\\\$28,\\\$28,%lo\\(%neg\\(%gp_rel\\(foo\\)\\)\\)\n" } } */ +/* { dg-final { scan-assembler "\tld\t\\\$1,%got_page\\(\[^)\]*\\)\\(\\\$28\\)\n" } } */ +/* { dg-final { scan-assembler "\tdaddiu\t\\\$1,\\\$1,%got_ofst\\(\[^)\]*\\)\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (int (*bar) (void), int *x) +{ + *x = bar (); + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-5.c b/gcc/testsuite/gcc.target/mips/umips-branch-5.c new file mode 100644 index 0000000..d124f91 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-5.c @@ -0,0 +1,13 @@ +/* { dg-options "-mshared -mabi=32 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$25|\\\$28|cpload)" } } */ +/* { dg-final { scan-assembler-not "\tjr\t\\\$1\n" } } */ +/* { dg-final { scan-assembler-not "\\.cprestore" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-6.c b/gcc/testsuite/gcc.target/mips/umips-branch-6.c new file mode 100644 index 0000000..d688bc9 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-6.c @@ -0,0 +1,13 @@ +/* { dg-options "-mshared -mabi=32 -mmicromips" } */ +/* { dg-final { scan-assembler "\t\\.cpload\t\\\$25\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ +/* { dg-final { scan-assembler-not "\\.cprestore" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-7.c b/gcc/testsuite/gcc.target/mips/umips-branch-7.c new file mode 100644 index 0000000..294805a --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-7.c @@ -0,0 +1,12 @@ +/* { dg-options "-mshared -mabi=n32 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$25|\\\$28|%gp_rel|%got)" } } */ +/* { dg-final { scan-assembler-not "\tjrc?\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-8.c b/gcc/testsuite/gcc.target/mips/umips-branch-8.c new file mode 100644 index 0000000..02273cf --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-8.c @@ -0,0 +1,14 @@ +/* { dg-options "-mshared -mabi=n32 -mmicromips" } */ +/* { dg-final { scan-assembler "\taddiu\t\\\$3,\\\$3,%lo\\(%neg\\(%gp_rel\\(foo\\)\\)\\)\n" } } */ +/* { dg-final { scan-assembler "\tlw\t\\\$1,%got_page\\(\[^)\]*\\)\\(\\\$3\\)\\n" } } */ +/* { dg-final { scan-assembler "\tjr\t\\\$1\n" } } */ +/* { dg-final { scan-assembler-not "\\\$28" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0x10000; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-9.c b/gcc/testsuite/gcc.target/mips/umips-branch-9.c new file mode 100644 index 0000000..ab02e88 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-9.c @@ -0,0 +1,12 @@ +/* { dg-options "-mshared -mabi=64 -mmicromips" } */ +/* { dg-final { scan-assembler-not "(\\\$25|\\\$28|%gp_rel|%got)" } } */ +/* { dg-final { scan-assembler-not "\tjrc?\t\\\$1\n" } } */ + +#include "branch-helper.h" + +NOMIPS16 void +foo (volatile int *x) +{ + if (__builtin_expect (*x == 0, 1)) + OCCUPY_0xfffc; +} -- 2.7.4