[gcc]
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / safe-indirect-jump-2.c
blob1c23a5d9addfc4bf3d20764791a0469dea31d203
1 /* { dg-do compile } */
2 /* { dg-options "-mno-speculate-indirect-jumps" } */
4 /* Test for deliberate misprediction of computed goto. */
6 int bar (int);
7 int baz (int);
8 int spaz (int);
10 int foo (int x)
12 static void *labptr[] = { &&lab0, &&lab1, &&lab2 };
14 if (x < 0 || x > 2)
15 return -1;
17 goto *labptr[x];
19 lab0:
20 return bar (x);
22 lab1:
23 return baz (x) + 1;
25 lab2:
26 return spaz (x) / 2;
29 /* The following assumes CR7 as the first chosen volatile. */
31 /* { dg-final { scan-assembler "crset 30" } } */
32 /* { dg-final { scan-assembler "beqctr- 7" } } */
33 /* { dg-final { scan-assembler {b \$} } } */