blob: 19bc3c8a77ddc6d0cc44720a117c8449a1e64c85 [file] [log] [blame]
/* { 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\\(%\[^,\]*\\), %" } } */