diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/920501-24.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/920501-24.c | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-24.c b/gcc/testsuite/gcc.c-torture/compile/920501-24.c new file mode 100644 index 00000000000..ae9c145ef1b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-24.c @@ -0,0 +1,221 @@ +char *malloc (); + +main () +{ + char *buf1; + int i; + int cnt; + + buf1 = malloc (8193); + + read (0, buf1, 8192); + + for (i = 500; i > 0; i--) + cnt = shift (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = shift_xor (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = bitfield (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = char_autoincr (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = xorand (buf1, 8192, '\n'); + printf ("%d ", cnt); +} + +shift (b1, n, c) + int *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + int w1; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + } + return cnt; +} + +shift_xor (b1, n, c) + int *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + int w1; + int cccc = (c << 24) | (c << 16) | (c << 8) | c; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + } + return cnt; +} + +typedef +struct +{ + unsigned b0:8; + unsigned b1:8; + unsigned b2:8; + unsigned b3:8; +} foo; + +bitfield (b1, n, c) + foo *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + register foo w1; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + } + return cnt; +} + + +char_autoincr (b1, n, c) + char *b1; + int n; + char c; +{ + int cnt = 0; + char *bend = b1 + n; + *bend = c; + + for (;;) + { + while (*b1++ != c) + ; + cnt++; + if (b1 > bend) + break; + } + return cnt; +} + +typedef unsigned int uint; + +xorand (b1, n, c) + int *b1; + int n; + unsigned char c; +{ + int xm = ((int) c << 24) | ((int) c << 16) | ((int) c << 8) | ((int) c); + byte_match_count2 (b1, n, xm, 0xff000000, 0xff0000, 0xff00, 0xff); +} + +byte_match_count2 (buf, n, xm, m1, m2, m3, m4) + int *buf; + int n; + uint m1, m2, m3, m4; +{ + int w, cnt = 0; + int *bp; + + n /= 4; + + buf[n] = xm; + + bp = buf; + while (bp < buf + n) + { + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + } + return cnt; +} |