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