1 1.1 joerg //===-- ashrti3_test.c - Test __ashrti3 -----------------------------------===// 2 1.1 joerg // 3 1.1 joerg // The LLVM Compiler Infrastructure 4 1.1 joerg // 5 1.1 joerg // This file is dual licensed under the MIT and the University of Illinois Open 6 1.1 joerg // Source Licenses. See LICENSE.TXT for details. 7 1.1 joerg // 8 1.1 joerg //===----------------------------------------------------------------------===// 9 1.1 joerg // 10 1.1 joerg // This file tests __ashrti3 for the compiler_rt library. 11 1.1 joerg // 12 1.1 joerg //===----------------------------------------------------------------------===// 13 1.1 joerg 14 1.1 joerg #if __x86_64 15 1.1 joerg 16 1.1 joerg #include "int_lib.h" 17 1.1 joerg #include <stdio.h> 18 1.1 joerg 19 1.1 joerg // Returns: arithmetic a >> b 20 1.1 joerg 21 1.1 joerg // Precondition: 0 <= b < bits_in_tword 22 1.1 joerg 23 1.1 joerg ti_int __ashrti3(ti_int a, si_int b); 24 1.1 joerg 25 1.1 joerg int test__ashrti3(ti_int a, si_int b, ti_int expected) 26 1.1 joerg { 27 1.1 joerg ti_int x = __ashrti3(a, b); 28 1.1 joerg if (x != expected) 29 1.1 joerg { 30 1.1 joerg twords at; 31 1.1 joerg at.all = a; 32 1.1 joerg twords xt; 33 1.1 joerg xt.all = x; 34 1.1 joerg twords expectedt; 35 1.1 joerg expectedt.all = expected; 36 1.1 joerg printf("error in __ashrti3: 0x%llX%.16llX >> %d = 0x%llX%.16llX," 37 1.1 joerg " expected 0x%llX%.16llX\n", 38 1.1 joerg at.s.high, at.s.low, b, xt.s.high, xt.s.low, 39 1.1 joerg expectedt.s.high, expectedt.s.low); 40 1.1 joerg } 41 1.1 joerg return x != expected; 42 1.1 joerg } 43 1.1 joerg 44 1.1 joerg char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0}; 45 1.1 joerg 46 1.1 joerg #endif 47 1.1 joerg 48 1.1 joerg int main() 49 1.1 joerg { 50 1.1 joerg #if __x86_64 51 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0, 52 1.1 joerg make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL))) 53 1.1 joerg return 1; 54 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1, 55 1.1 joerg make_ti(0xFF6E5D4C3B2A190ALL, 0xFF6E5D4C3B2A190ALL))) 56 1.1 joerg return 1; 57 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2, 58 1.1 joerg make_ti(0xFFB72EA61D950C85LL, 0x7FB72EA61D950C85LL))) 59 1.1 joerg return 1; 60 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3, 61 1.1 joerg make_ti(0xFFDB97530ECA8642LL, 0xBFDB97530ECA8642LL))) 62 1.1 joerg return 1; 63 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4, 64 1.1 joerg make_ti(0xFFEDCBA987654321LL, 0x5FEDCBA987654321LL))) 65 1.1 joerg return 1; 66 1.1 joerg 67 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28, 68 1.1 joerg make_ti(0xFFFFFFFFEDCBA987LL, 0x6543215FEDCBA987LL))) 69 1.1 joerg return 1; 70 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29, 71 1.1 joerg make_ti(0xFFFFFFFFF6E5D4C3LL, 0xB2A190AFF6E5D4C3LL))) 72 1.1 joerg return 1; 73 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30, 74 1.1 joerg make_ti(0xFFFFFFFFFB72EA61LL, 0xD950C857FB72EA61LL))) 75 1.1 joerg return 1; 76 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31, 77 1.1 joerg make_ti(0xFFFFFFFFFDB97530LL, 0xECA8642BFDB97530LL))) 78 1.1 joerg return 1; 79 1.1 joerg 80 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32, 81 1.1 joerg make_ti(0xFFFFFFFFFEDCBA98LL, 0x76543215FEDCBA98LL))) 82 1.1 joerg return 1; 83 1.1 joerg 84 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33, 85 1.1 joerg make_ti(0xFFFFFFFFFF6E5D4CLL, 0x3B2A190AFF6E5D4CLL))) 86 1.1 joerg return 1; 87 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34, 88 1.1 joerg make_ti(0xFFFFFFFFFFB72EA6LL, 0x1D950C857FB72EA6LL))) 89 1.1 joerg return 1; 90 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35, 91 1.1 joerg make_ti(0xFFFFFFFFFFDB9753LL, 0x0ECA8642BFDB9753LL))) 92 1.1 joerg return 1; 93 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36, 94 1.1 joerg make_ti(0xFFFFFFFFFFEDCBA9LL, 0x876543215FEDCBA9LL))) 95 1.1 joerg return 1; 96 1.1 joerg 97 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60, 98 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xEDCBA9876543215FLL))) 99 1.1 joerg return 1; 100 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61, 101 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xF6E5D4C3B2A190AFLL))) 102 1.1 joerg return 1; 103 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62, 104 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFB72EA61D950C857LL))) 105 1.1 joerg return 1; 106 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63, 107 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFDB97530ECA8642BLL))) 108 1.1 joerg return 1; 109 1.1 joerg 110 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64, 111 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFEDCBA9876543215LL))) 112 1.1 joerg return 1; 113 1.1 joerg 114 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65, 115 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFF6E5D4C3B2A190ALL))) 116 1.1 joerg return 1; 117 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66, 118 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFB72EA61D950C85LL))) 119 1.1 joerg return 1; 120 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67, 121 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFDB97530ECA8642LL))) 122 1.1 joerg return 1; 123 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68, 124 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFEDCBA987654321LL))) 125 1.1 joerg return 1; 126 1.1 joerg 127 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92, 128 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFEDCBA987LL))) 129 1.1 joerg return 1; 130 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93, 131 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFF6E5D4C3LL))) 132 1.1 joerg return 1; 133 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94, 134 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFB72EA61LL))) 135 1.1 joerg return 1; 136 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95, 137 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFDB97530LL))) 138 1.1 joerg return 1; 139 1.1 joerg 140 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96, 141 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFEDCBA98LL))) 142 1.1 joerg return 1; 143 1.1 joerg 144 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97, 145 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFF6E5D4CLL))) 146 1.1 joerg return 1; 147 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98, 148 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFB72EA6LL))) 149 1.1 joerg return 1; 150 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99, 151 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFDB9753LL))) 152 1.1 joerg return 1; 153 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100, 154 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFEDCBA9LL))) 155 1.1 joerg return 1; 156 1.1 joerg 157 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124, 158 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 159 1.1 joerg return 1; 160 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125, 161 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 162 1.1 joerg return 1; 163 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126, 164 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 165 1.1 joerg return 1; 166 1.1 joerg if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127, 167 1.1 joerg make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 168 1.1 joerg return 1; 169 1.1 joerg #else 170 1.1 joerg printf("skipped\n"); 171 1.1 joerg #endif 172 1.1 joerg return 0; 173 1.1 joerg } 174