| /* { dg-do compile { target ia32 } } */ |
| /* { dg-require-effective-target pie } */ |
| /* { dg-options "-O2 -fPIE -fcommon" } */ |
| |
| int look_nbits[256], loop_sym[256]; |
| const int ind[] = { |
| 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, |
| 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, |
| 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, |
| 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 |
| }; |
| int out[256]; |
| extern void bar (int *, int *); |
| void foo (int *l1, int *l2, int *v, int *v1, int *m1, int i) |
| { |
| int L = i + 1, b = 20; |
| int result, k; |
| |
| for (k = 1; k < 64; k++) |
| { |
| int look = (((L >> (b - 8))) & ((1 << 8) - 1)); |
| int nb = l1[look]; |
| int code; |
| int r; |
| |
| if (nb) |
| { |
| b -= nb; |
| result = l2[look]; |
| } |
| else |
| { |
| nb = 9; |
| code = (((L >> (b -= nb))) & ((1 << nb) - 1)); |
| result = v[(code + v1[nb])]; |
| } |
| r = result >> 4; |
| result &= 15; |
| if (result) |
| { |
| k += r; |
| r = (((L >> (b -= result))) & ((1 << result) - 1)); |
| if (r < (1 << (result - 1))) |
| result = r + (((-1) << result) + 1); |
| else |
| result = r; |
| |
| out[ind[k]] = result; |
| } |
| bar (&L, &b); |
| } |
| } |
| |
| /* { dg-final { scan-assembler-not "leal\[ \t\]ind@GOTOFF\\(%\[^,\]*\\), %" } } */ |