absvti2_test.c revision b3a6901e66f55b35aa9e01bcb24134e6a65ea004
1//===-- absvti2_test.c - Test __absvti2 -----------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file tests __absvti2 for the compiler_rt library. 11// 12//===----------------------------------------------------------------------===// 13 14#if __x86_64 15 16#include "int_lib.h" 17#include <stdio.h> 18 19// Returns: absolute value 20 21// Effects: aborts if abs(x) < 0 22 23ti_int __absvti2(ti_int a); 24 25int test__absvti2(ti_int a) 26{ 27 ti_int x = __absvti2(a); 28 ti_int expected = a; 29 if (expected < 0) 30 expected = -expected; 31 if (x != expected || expected < 0) 32 { 33 twords at; 34 at.all = a; 35 twords xt; 36 xt.all = x; 37 twords expectedt; 38 expectedt.all = expected; 39 printf("error in __absvti2(0x%llX%.16llX) = " 40 "0x%llX%.16llX, expected positive 0x%llX%.16llX\n", 41 at.high, at.low, xt.high, xt.low, expectedt.high, expectedt.low); 42 } 43 return x != expected; 44} 45 46#endif 47 48int main() 49{ 50#if __x86_64 51 52// if (test__absvti2(make_ti(0x8000000000000000LL, 0))) // should abort 53// return 1; 54 if (test__absvti2(0x0000000000000000LL)) 55 return 1; 56 if (test__absvti2(0x0000000000000001LL)) 57 return 1; 58 if (test__absvti2(0x0000000000000002LL)) 59 return 1; 60 if (test__absvti2(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFELL))) 61 return 1; 62 if (test__absvti2(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 63 return 1; 64 if (test__absvti2(make_ti(0x8000000000000000LL, 0x0000000000000001LL))) 65 return 1; 66 if (test__absvti2(make_ti(0x8000000000000000LL, 0x0000000000000002LL))) 67 return 1; 68 if (test__absvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFELL))) 69 return 1; 70 if (test__absvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL))) 71 return 1; 72 73 int i; 74 for (i = 0; i < 10000; ++i) 75 if (test__absvti2(make_ti(((ti_int)rand() << 32) | rand(), 76 ((ti_int)rand() << 32) | rand()))) 77 return 1; 78#endif 79 return 0; 80} 81