| /* PR debug/65779 */ |
| /* { dg-do assemble } */ |
| /* { dg-options "-O2 -fcompare-debug" } */ |
| |
| unsigned long |
| foo (unsigned long x, unsigned char *y, unsigned int z) |
| { |
| unsigned long a = x & 0xffff; |
| unsigned long b = (x >> 16) & 0xffff; |
| int k; |
| if (y == 0) return 1L; |
| while (z > 0) |
| { |
| k = z < 5552 ? z : 5552; |
| z -= k; |
| while (k >= 16) |
| { |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| a += *y++; b += a; |
| k -= 16; |
| } |
| if (k != 0) |
| do { a += *y++; b += a; } while (--k); |
| a %= 65521L; |
| b %= 65521L; |
| } |
| return (b << 16) | a; |
| } |