| /* { dg-do run } */ |
| /* { dg-options "-O0" } */ |
| /* { dg-additional-options -save-temps } */ |
| /* { dg-final { check-function-bodies {**} {} } } */ |
| |
| inline __attribute__((always_inline)) |
| unsigned long long bitreverse64(unsigned long long x) |
| { |
| return __builtin_nvptx_brevll(x); |
| } |
| |
| int main(void) |
| { |
| if (bitreverse64(0x0000000000000000ll) != 0x0000000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0xffffffffffffffffll) != 0xffffffffffffffffll) |
| __builtin_abort(); |
| |
| if (bitreverse64(0x0000000000000001ll) != 0x8000000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000002ll) != 0x4000000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000004ll) != 0x2000000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000008ll) != 0x1000000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000010ll) != 0x0800000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000020ll) != 0x0400000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000040ll) != 0x0200000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000080ll) != 0x0100000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000100ll) != 0x0080000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000200ll) != 0x0040000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000400ll) != 0x0020000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000000800ll) != 0x0010000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000001000ll) != 0x0008000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000002000ll) != 0x0004000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000004000ll) != 0x0002000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000008000ll) != 0x0001000000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000010000ll) != 0x0000800000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000020000ll) != 0x0000400000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000040000ll) != 0x0000200000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000080000ll) != 0x0000100000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000100000ll) != 0x0000080000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000200000ll) != 0x0000040000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000400000ll) != 0x0000020000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000000800000ll) != 0x0000010000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000001000000ll) != 0x0000008000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000002000000ll) != 0x0000004000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000004000000ll) != 0x0000002000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000008000000ll) != 0x0000001000000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000010000000ll) != 0x0000000800000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000020000000ll) != 0x0000000400000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000040000000ll) != 0x0000000200000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000080000000ll) != 0x0000000100000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000100000000ll) != 0x0000000080000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000200000000ll) != 0x0000000040000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000400000000ll) != 0x0000000020000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000000800000000ll) != 0x0000000010000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000001000000000ll) != 0x0000000008000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000002000000000ll) != 0x0000000004000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000004000000000ll) != 0x0000000002000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000008000000000ll) != 0x0000000001000000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000010000000000ll) != 0x0000000000800000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000020000000000ll) != 0x0000000000400000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000040000000000ll) != 0x0000000000200000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000080000000000ll) != 0x0000000000100000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000100000000000ll) != 0x0000000000080000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000200000000000ll) != 0x0000000000040000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000400000000000ll) != 0x0000000000020000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0000800000000000ll) != 0x0000000000010000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0001000000000000ll) != 0x0000000000008000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0002000000000000ll) != 0x0000000000004000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0004000000000000ll) != 0x0000000000002000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0008000000000000ll) != 0x0000000000001000ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0010000000000000ll) != 0x0000000000000800ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0020000000000000ll) != 0x0000000000000400ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0040000000000000ll) != 0x0000000000000200ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0080000000000000ll) != 0x0000000000000100ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0100000000000000ll) != 0x0000000000000080ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0200000000000000ll) != 0x0000000000000040ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0400000000000000ll) != 0x0000000000000020ll) |
| __builtin_abort(); |
| if (bitreverse64(0x0800000000000000ll) != 0x0000000000000010ll) |
| __builtin_abort(); |
| if (bitreverse64(0x1000000000000000ll) != 0x0000000000000008ll) |
| __builtin_abort(); |
| if (bitreverse64(0x2000000000000000ll) != 0x0000000000000004ll) |
| __builtin_abort(); |
| if (bitreverse64(0x4000000000000000ll) != 0x0000000000000002ll) |
| __builtin_abort(); |
| if (bitreverse64(0x8000000000000000ll) != 0x0000000000000001ll) |
| __builtin_abort(); |
| |
| if (bitreverse64(0x0123456789abcdefll) != 0xf7b3d591e6a2c480ll) |
| __builtin_abort(); |
| if (bitreverse64(0xf7b3d591e6a2c480ll) != 0x0123456789abcdefll) |
| __builtin_abort(); |
| if (bitreverse64(0xdeadbeefcafebabell) != 0x7d5d7f53f77db57bll) |
| __builtin_abort(); |
| if (bitreverse64(0x7d5d7f53f77db57bll) != 0xdeadbeefcafebabell) |
| __builtin_abort(); |
| |
| return 0; |
| } |
| /* |
| ** main: |
| ** ... |
| ** mov\.u64 (%r[0-9]+), 0; |
| ** st\.u64 (\[%frame[+0-9]*\]), \1; |
| ** ld\.u64 (%r[0-9]+), \2; |
| ** brev\.b64 (%r[0-9]+), \3; |
| ** setp\.[^.]+\.u64 %r[0-9]+, \4, 0; |
| ** ... |
| ** mov\.u64 (%r[0-9]+), -1; |
| ** st\.u64 (\[%frame[+0-9]*\]), \5; |
| ** ld\.u64 (%r[0-9]+), \6; |
| ** brev\.b64 (%r[0-9]+), \7; |
| ** setp\.[^.]+\.u64 %r[0-9]+, \8, -1; |
| ** ... |
| ** mov\.u64 (%r[0-9]+), 1; |
| ** st\.u64 (\[%frame[+0-9]*\]), \9; |
| ** ld\.u64 (%r[0-9]+), \10; |
| ** brev\.b64 (%r[0-9]+), \11; |
| ** setp\.[^.]+\.u64 %r[0-9]+, \12, -9223372036854775808; |
| ** ... |
| ** mov\.u64 (%r[0-9]+), 2; |
| ** st\.u64 (\[%frame[+0-9]*\]), \13; |
| ** ld\.u64 (%r[0-9]+), \14; |
| ** brev\.b64 (%r[0-9]+), \15; |
| ** setp\.[^.]+\.u64 %r[0-9]+, \16, 4611686018427387904; |
| ** ... |
| */ |
| |
| /* { dg-final { scan-assembler-times {\tbrev\.b64\t} 70 } } */ |
| /* { dg-final { scan-assembler {\mabort\M} } } */ |