| /* { dg-do compile { target i?86-*-* } } */ |
| /* { dg-options "-O2 -mtune=k6" } */ |
| |
| void |
| foo (unsigned char *x, const unsigned char *y) |
| { |
| int a = 6; |
| unsigned char *b; |
| for (;;) |
| { |
| unsigned char *c = x; |
| |
| while (1) |
| { |
| if (c + 2 < y) |
| c += 3; |
| else |
| break; |
| } |
| b = x + a; |
| if (*c == 4 || *c == 5) |
| { |
| unsigned char d = c[2]; |
| |
| if (b[3] == 7 || b[3] == 8) |
| { |
| int e = b[3] == 8; |
| if (d < b[4] * 8 && b[5 + d / 8] & (1 << (d % 8))) |
| e = !e; |
| if (!e) |
| x[-3] = 26; |
| } |
| } |
| else if (*c == 7 && b[3] == 8) |
| { |
| int f; |
| for (f = 0; f < (int) c[1]; f++) |
| if (!(c[2 + f] == 0)) |
| break; |
| if (f == c[1]) |
| x[-3] = 26; |
| } |
| x -= 2; |
| } |
| } |