| #include <limits.h> |
| |
| extern void abort(void); |
| extern void exit(int); |
| |
| #if __LONG_LONG_MAX__ == 9223372036854775807LL |
| #define BITS 64 |
| |
| static unsigned long long const zext[64] = { |
| 0x87654321fedcba90ULL, |
| 0x43b2a190ff6e5d48ULL, |
| 0x21d950c87fb72ea4ULL, |
| 0x10eca8643fdb9752ULL, |
| 0x87654321fedcba9ULL, |
| 0x43b2a190ff6e5d4ULL, |
| 0x21d950c87fb72eaULL, |
| 0x10eca8643fdb975ULL, |
| 0x87654321fedcbaULL, |
| 0x43b2a190ff6e5dULL, |
| 0x21d950c87fb72eULL, |
| 0x10eca8643fdb97ULL, |
| 0x87654321fedcbULL, |
| 0x43b2a190ff6e5ULL, |
| 0x21d950c87fb72ULL, |
| 0x10eca8643fdb9ULL, |
| 0x87654321fedcULL, |
| 0x43b2a190ff6eULL, |
| 0x21d950c87fb7ULL, |
| 0x10eca8643fdbULL, |
| 0x87654321fedULL, |
| 0x43b2a190ff6ULL, |
| 0x21d950c87fbULL, |
| 0x10eca8643fdULL, |
| 0x87654321feULL, |
| 0x43b2a190ffULL, |
| 0x21d950c87fULL, |
| 0x10eca8643fULL, |
| 0x87654321fULL, |
| 0x43b2a190fULL, |
| 0x21d950c87ULL, |
| 0x10eca8643ULL, |
| 0x87654321ULL, |
| 0x43b2a190ULL, |
| 0x21d950c8ULL, |
| 0x10eca864ULL, |
| 0x8765432ULL, |
| 0x43b2a19ULL, |
| 0x21d950cULL, |
| 0x10eca86ULL, |
| 0x876543ULL, |
| 0x43b2a1ULL, |
| 0x21d950ULL, |
| 0x10eca8ULL, |
| 0x87654ULL, |
| 0x43b2aULL, |
| 0x21d95ULL, |
| 0x10ecaULL, |
| 0x8765ULL, |
| 0x43b2ULL, |
| 0x21d9ULL, |
| 0x10ecULL, |
| 0x876ULL, |
| 0x43bULL, |
| 0x21dULL, |
| 0x10eULL, |
| 0x87ULL, |
| 0x43ULL, |
| 0x21ULL, |
| 0x10ULL, |
| 0x8ULL, |
| 0x4ULL, |
| 0x2ULL, |
| 0x1ULL |
| }; |
| |
| #elif __LONG_LONG_MAX__ == 2147483647LL |
| #define BITS 32 |
| |
| static unsigned long long const zext[32] = { |
| 0x87654321ULL, |
| 0x43b2a190ULL, |
| 0x21d950c8ULL, |
| 0x10eca864ULL, |
| 0x8765432ULL, |
| 0x43b2a19ULL, |
| 0x21d950cULL, |
| 0x10eca86ULL, |
| 0x876543ULL, |
| 0x43b2a1ULL, |
| 0x21d950ULL, |
| 0x10eca8ULL, |
| 0x87654ULL, |
| 0x43b2aULL, |
| 0x21d95ULL, |
| 0x10ecaULL, |
| 0x8765ULL, |
| 0x43b2ULL, |
| 0x21d9ULL, |
| 0x10ecULL, |
| 0x876ULL, |
| 0x43bULL, |
| 0x21dULL, |
| 0x10eULL, |
| 0x87ULL, |
| 0x43ULL, |
| 0x21ULL, |
| 0x10ULL, |
| 0x8ULL, |
| 0x4ULL, |
| 0x2ULL, |
| 0x1ULL, |
| }; |
| |
| #else |
| #error "Update the test case." |
| #endif |
| |
| static unsigned long long |
| variable_shift(unsigned long long x, int i) |
| { |
| return x >> i; |
| } |
| |
| static unsigned long long |
| constant_shift(unsigned long long x, int i) |
| { |
| switch (i) |
| { |
| case 0: x = x >> 0; break; |
| case 1: x = x >> 1; break; |
| case 2: x = x >> 2; break; |
| case 3: x = x >> 3; break; |
| case 4: x = x >> 4; break; |
| case 5: x = x >> 5; break; |
| case 6: x = x >> 6; break; |
| case 7: x = x >> 7; break; |
| case 8: x = x >> 8; break; |
| case 9: x = x >> 9; break; |
| case 10: x = x >> 10; break; |
| case 11: x = x >> 11; break; |
| case 12: x = x >> 12; break; |
| case 13: x = x >> 13; break; |
| case 14: x = x >> 14; break; |
| case 15: x = x >> 15; break; |
| case 16: x = x >> 16; break; |
| case 17: x = x >> 17; break; |
| case 18: x = x >> 18; break; |
| case 19: x = x >> 19; break; |
| case 20: x = x >> 20; break; |
| case 21: x = x >> 21; break; |
| case 22: x = x >> 22; break; |
| case 23: x = x >> 23; break; |
| case 24: x = x >> 24; break; |
| case 25: x = x >> 25; break; |
| case 26: x = x >> 26; break; |
| case 27: x = x >> 27; break; |
| case 28: x = x >> 28; break; |
| case 29: x = x >> 29; break; |
| case 30: x = x >> 30; break; |
| case 31: x = x >> 31; break; |
| #if BITS > 32 |
| case 32: x = x >> 32; break; |
| case 33: x = x >> 33; break; |
| case 34: x = x >> 34; break; |
| case 35: x = x >> 35; break; |
| case 36: x = x >> 36; break; |
| case 37: x = x >> 37; break; |
| case 38: x = x >> 38; break; |
| case 39: x = x >> 39; break; |
| case 40: x = x >> 40; break; |
| case 41: x = x >> 41; break; |
| case 42: x = x >> 42; break; |
| case 43: x = x >> 43; break; |
| case 44: x = x >> 44; break; |
| case 45: x = x >> 45; break; |
| case 46: x = x >> 46; break; |
| case 47: x = x >> 47; break; |
| case 48: x = x >> 48; break; |
| case 49: x = x >> 49; break; |
| case 50: x = x >> 50; break; |
| case 51: x = x >> 51; break; |
| case 52: x = x >> 52; break; |
| case 53: x = x >> 53; break; |
| case 54: x = x >> 54; break; |
| case 55: x = x >> 55; break; |
| case 56: x = x >> 56; break; |
| case 57: x = x >> 57; break; |
| case 58: x = x >> 58; break; |
| case 59: x = x >> 59; break; |
| case 60: x = x >> 60; break; |
| case 61: x = x >> 61; break; |
| case 62: x = x >> 62; break; |
| case 63: x = x >> 63; break; |
| #endif |
| |
| default: |
| abort (); |
| } |
| return x; |
| } |
| |
| int |
| main() |
| { |
| int i; |
| |
| for (i = 0; i < BITS; ++i) |
| { |
| unsigned long long y = variable_shift (zext[0], i); |
| if (y != zext[i]) |
| abort (); |
| } |
| for (i = 0; i < BITS; ++i) |
| { |
| unsigned long long y = constant_shift (zext[0], i); |
| if (y != zext[i]) |
| abort (); |
| } |
| |
| exit (0); |
| } |