1// RUN: %clang_builtins %s %librt -o %t && %run %t 2// REQUIRES: int128 3//===-- lshrti3_test.c - Test __lshrti3 -----------------------------------===// 4// 5// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 6// See https://llvm.org/LICENSE.txt for license information. 7// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 8// 9//===----------------------------------------------------------------------===// 10// 11// This file tests __lshrti3 for the compiler_rt library. 12// 13//===----------------------------------------------------------------------===// 14 15#include "int_lib.h" 16#include <stdio.h> 17 18#ifdef CRT_HAS_128BIT 19 20// Returns: logical a >> b 21 22// Precondition: 0 <= b < bits_in_dword 23 24COMPILER_RT_ABI ti_int __lshrti3(ti_int a, si_int b); 25 26int test__lshrti3(ti_int a, si_int b, ti_int expected) 27{ 28 ti_int x = __lshrti3(a, b); 29 if (x != expected) 30 { 31 twords at; 32 at.all = a; 33 twords xt; 34 xt.all = x; 35 twords expectedt; 36 expectedt.all = expected; 37 printf("error in __lshrti3: 0x%llX%.16llX >> %d = 0x%llX%.16llX," 38 " expected 0x%llX%.16llX\n", 39 at.s.high, at.s.low, b, xt.s.high, xt.s.low, 40 expectedt.s.high, expectedt.s.low); 41 } 42 return x != expected; 43} 44 45char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0}; 46 47#endif 48 49int main() 50{ 51#ifdef CRT_HAS_128BIT 52 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0, 53 make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL))) 54 return 1; 55 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1, 56 make_ti(0x7F6E5D4C3B2A190ALL, 0xFF6E5D4C3B2A190ALL))) 57 return 1; 58 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2, 59 make_ti(0x3FB72EA61D950C85LL, 0x7FB72EA61D950C85LL))) 60 return 1; 61 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3, 62 make_ti(0x1FDB97530ECA8642LL, 0xBFDB97530ECA8642LL))) 63 return 1; 64 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4, 65 make_ti(0x0FEDCBA987654321LL, 0x5FEDCBA987654321LL))) 66 return 1; 67 68 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28, 69 make_ti(0x0000000FEDCBA987LL, 0x6543215FEDCBA987LL))) 70 return 1; 71 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29, 72 make_ti(0x00000007F6E5D4C3LL, 0xB2A190AFF6E5D4C3LL))) 73 return 1; 74 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30, 75 make_ti(0x00000003FB72EA61LL, 0xD950C857FB72EA61LL))) 76 return 1; 77 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31, 78 make_ti(0x00000001FDB97530LL, 0xECA8642BFDB97530LL))) 79 return 1; 80 81 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32, 82 make_ti(0x00000000FEDCBA98LL, 0x76543215FEDCBA98LL))) 83 return 1; 84 85 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33, 86 make_ti(0x000000007F6E5D4CLL, 0x3B2A190AFF6E5D4CLL))) 87 return 1; 88 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34, 89 make_ti(0x000000003FB72EA6LL, 0x1D950C857FB72EA6LL))) 90 return 1; 91 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35, 92 make_ti(0x000000001FDB9753LL, 0x0ECA8642BFDB9753LL))) 93 return 1; 94 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36, 95 make_ti(0x000000000FEDCBA9LL, 0x876543215FEDCBA9LL))) 96 return 1; 97 98 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60, 99 make_ti(0x000000000000000FLL, 0xEDCBA9876543215FLL))) 100 return 1; 101 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61, 102 make_ti(0x0000000000000007LL, 0xF6E5D4C3B2A190AFLL))) 103 return 1; 104 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62, 105 make_ti(0x0000000000000003LL, 0xFB72EA61D950C857LL))) 106 return 1; 107 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63, 108 make_ti(0x0000000000000001LL, 0xFDB97530ECA8642BLL))) 109 return 1; 110 111 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64, 112 make_ti(0x0000000000000000LL, 0xFEDCBA9876543215LL))) 113 return 1; 114 115 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65, 116 make_ti(0x0000000000000000LL, 0x7F6E5D4C3B2A190ALL))) 117 return 1; 118 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66, 119 make_ti(0x0000000000000000LL, 0x3FB72EA61D950C85LL))) 120 return 1; 121 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67, 122 make_ti(0x0000000000000000LL, 0x1FDB97530ECA8642LL))) 123 return 1; 124 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68, 125 make_ti(0x0000000000000000LL, 0x0FEDCBA987654321LL))) 126 return 1; 127 128 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92, 129 make_ti(0x0000000000000000LL, 0x0000000FEDCBA987LL))) 130 return 1; 131 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93, 132 make_ti(0x0000000000000000LL, 0x00000007F6E5D4C3LL))) 133 return 1; 134 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94, 135 make_ti(0x0000000000000000LL, 0x00000003FB72EA61LL))) 136 return 1; 137 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95, 138 make_ti(0x0000000000000000LL, 0x00000001FDB97530LL))) 139 return 1; 140 141 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96, 142 make_ti(0x0000000000000000LL, 0x00000000FEDCBA98LL))) 143 return 1; 144 145 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97, 146 make_ti(0x0000000000000000LL, 0x000000007F6E5D4CLL))) 147 return 1; 148 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98, 149 make_ti(0x0000000000000000LL, 0x000000003FB72EA6LL))) 150 return 1; 151 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99, 152 make_ti(0x0000000000000000LL, 0x000000001FDB9753LL))) 153 return 1; 154 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100, 155 make_ti(0x0000000000000000LL, 0x000000000FEDCBA9LL))) 156 return 1; 157 158 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124, 159 make_ti(0x0000000000000000LL, 0x000000000000000FLL))) 160 return 1; 161 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125, 162 make_ti(0x0000000000000000LL, 0x0000000000000007LL))) 163 return 1; 164 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126, 165 make_ti(0x0000000000000000LL, 0x0000000000000003LL))) 166 return 1; 167 if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127, 168 make_ti(0x0000000000000000LL, 0x0000000000000001LL))) 169 return 1; 170#else 171 printf("skipped\n"); 172#endif 173 return 0; 174} 175