/* * Test code generation for 64-bit shifts by a constant number of places. */ #include #include typedef unsigned long long ui64; typedef long long i64; /* Use patterns with top bit set to verify sign extension in ASR */ #define UI64 ((ui64) 0xdeadb0d101234567ULL) #define I64 ((i64) 0xdeadb0d101234567LL) /* templates to define functions asl1() asl2() etc */ #ifndef __MAERICK__ #define ASL(N) ui64 asl##N(ui64 foo) { return foo << N; } #define LSR(N) ui64 lsr##N(ui64 foo) { return foo >> N; } #define ASR(N) i64 asr##N( i64 foo) { return foo >> N; } #else #define ASL(N) ui64 asl##N(ui64 foo) { \ register ui64 bar asm("mvd0") = foo; \ return bar << N; \ } #define LSR(N) ui64 lsr##N(ui64 foo) { \ register ui64 bar asm("mvd0") = foo; \ return bar >> N; \ } #define ASR(N) i64 asr##N( i64 foo) { \ register i64 bar asm("mvd0") = foo; \ return bar >> N; \ } #endif ASL(0) ASL(1) ASL(2) ASL(3) ASL(4) ASL(5) ASL(6) ASL(7) ASL(8) ASL(9) ASL(10) ASL(11) ASL(12) ASL(13) ASL(14) ASL(15) ASL(16) ASL(17) ASL(18) ASL(19) ASL(20) ASL(21) ASL(22) ASL(23) ASL(24) ASL(25) ASL(26) ASL(27) ASL(28) ASL(29) ASL(30) ASL(31) ASL(32) ASL(33) ASL(34) ASL(35) ASL(36) ASL(37) ASL(38) ASL(39) ASL(40) ASL(41) ASL(42) ASL(43) ASL(44) ASL(45) ASL(46) ASL(47) ASL(48) ASL(49) ASL(50) ASL(51) ASL(52) ASL(53) ASL(54) ASL(55) ASL(56) ASL(57) ASL(58) ASL(59) ASL(60) ASL(61) ASL(62) ASL(63) ASL(64) LSR(0) LSR(1) LSR(2) LSR(3) LSR(4) LSR(5) LSR(6) LSR(7) LSR(8) LSR(9) LSR(10) LSR(11) LSR(12) LSR(13) LSR(14) LSR(15) LSR(16) LSR(17) LSR(18) LSR(19) LSR(20) LSR(21) LSR(22) LSR(23) LSR(24) LSR(25) LSR(26) LSR(27) LSR(28) LSR(29) LSR(30) LSR(31) LSR(32) LSR(33) LSR(34) LSR(35) LSR(36) LSR(37) LSR(38) LSR(39) LSR(40) LSR(41) LSR(42) LSR(43) LSR(44) LSR(45) LSR(46) LSR(47) LSR(48) LSR(49) LSR(50) LSR(51) LSR(52) LSR(53) LSR(54) LSR(55) LSR(56) LSR(57) LSR(58) LSR(59) LSR(60) LSR(61) LSR(62) LSR(63) LSR(64) ASR(0) ASR(1) ASR(2) ASR(3) ASR(4) ASR(5) ASR(6) ASR(7) ASR(8) ASR(9) ASR(10) ASR(11) ASR(12) ASR(13) ASR(14) ASR(15) ASR(16) ASR(17) ASR(18) ASR(19) ASR(20) ASR(21) ASR(22) ASR(23) ASR(24) ASR(25) ASR(26) ASR(27) ASR(28) ASR(29) ASR(30) ASR(31) ASR(32) ASR(33) ASR(34) ASR(35) ASR(36) ASR(37) ASR(38) ASR(39) ASR(40) ASR(41) ASR(42) ASR(43) ASR(44) ASR(45) ASR(46) ASR(47) ASR(48) ASR(49) ASR(50) ASR(51) ASR(52) ASR(53) ASR(54) ASR(55) ASR(56) ASR(57) ASR(58) ASR(59) ASR(60) ASR(61) ASR(62) ASR(63) ASR(64) #undef ASL #undef LSR #undef ASR main() { asltest(UI64); lsrtest(UI64); asrtest( I64); exit(0); } /* templates to call the functions */ #define ASL(N) if (asl##N(arg) != UI64 << N) \ printf("ASL failed at %02d: 0x%016llx should be 0x%016llx\n", \ N, asl##N(arg), UI64 << N); #define LSR(N) if (lsr##N(arg) != UI64 >> N) \ printf("LSR failed at %02d: 0x%016llx should be 0x%016llx\n", \ N, lsr##N(arg), UI64 >> N); #define ASR(N) if (asr##N(arg) != I64 >> N) \ printf("ASR failed at %02d: 0x%016llx should be 0x%016llx\n", \ N, asr##N(arg), I64 >> N); asltest(ui64 arg) { ASL(0) ASL(1) ASL(2) ASL(3) ASL(4) ASL(5) ASL(6) ASL(7) ASL(8) ASL(9) ASL(10) ASL(11) ASL(12) ASL(13) ASL(14) ASL(15) ASL(16) ASL(17) ASL(18) ASL(19) ASL(20) ASL(21) ASL(22) ASL(23) ASL(24) ASL(25) ASL(26) ASL(27) ASL(28) ASL(29) ASL(30) ASL(31) ASL(32) ASL(33) ASL(34) ASL(35) ASL(36) ASL(37) ASL(38) ASL(39) ASL(40) ASL(41) ASL(42) ASL(43) ASL(44) ASL(45) ASL(46) ASL(47) ASL(48) ASL(49) ASL(50) ASL(51) ASL(52) ASL(53) ASL(54) ASL(55) ASL(56) ASL(57) ASL(58) ASL(59) ASL(60) ASL(61) ASL(62) ASL(63) ASL(64) } lsrtest(ui64 arg) { LSR(0) LSR(1) LSR(2) LSR(3) LSR(4) LSR(5) LSR(6) LSR(7) LSR(8) LSR(9) LSR(10) LSR(11) LSR(12) LSR(13) LSR(14) LSR(15) LSR(16) LSR(17) LSR(18) LSR(19) LSR(20) LSR(21) LSR(22) LSR(23) LSR(24) LSR(25) LSR(26) LSR(27) LSR(28) LSR(29) LSR(30) LSR(31) LSR(32) LSR(33) LSR(34) LSR(35) LSR(36) LSR(37) LSR(38) LSR(39) LSR(40) LSR(41) LSR(42) LSR(43) LSR(44) LSR(45) LSR(46) LSR(47) LSR(48) LSR(49) LSR(50) LSR(51) LSR(52) LSR(53) LSR(54) LSR(55) LSR(56) LSR(57) LSR(58) LSR(59) LSR(60) LSR(61) LSR(62) LSR(63) LSR(64) } asrtest(i64 arg) { ASR(0) ASR(1) ASR(2) ASR(3) ASR(4) ASR(5) ASR(6) ASR(7) ASR(8) ASR(9) ASR(10) ASR(11) ASR(12) ASR(13) ASR(14) ASR(15) ASR(16) ASR(17) ASR(18) ASR(19) ASR(20) ASR(21) ASR(22) ASR(23) ASR(24) ASR(25) ASR(26) ASR(27) ASR(28) ASR(29) ASR(30) ASR(31) ASR(32) ASR(33) ASR(34) ASR(35) ASR(36) ASR(37) ASR(38) ASR(39) ASR(40) ASR(41) ASR(42) ASR(43) ASR(44) ASR(45) ASR(46) ASR(47) ASR(48) ASR(49) ASR(50) ASR(51) ASR(52) ASR(53) ASR(54) ASR(55) ASR(56) ASR(57) ASR(58) ASR(59) ASR(60) ASR(61) ASR(62) ASR(63) ASR(64) }