100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger//===--------------- floatsitf_test.c - Test __floatsitf ------------------===// 200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// 300a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// The LLVM Compiler Infrastructure 400a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// 500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// This file is dual licensed under the MIT and the University of Illinois Open 600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// Source Licenses. See LICENSE.TXT for details. 700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// 800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger//===----------------------------------------------------------------------===// 900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// 1000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// This file tests __floatsitf for the compiler_rt library. 1100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger// 1200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger//===----------------------------------------------------------------------===// 1300a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 14cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include "int_lib.h" 1500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#include <stdio.h> 1600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 1700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#if __LDBL_MANT_DIG__ == 113 1800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 1900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#include "fp_test.h" 2000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 21cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainarlong COMPILER_RT_ABI double __floatsitf(int a); 2200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 2300a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenbergerint test__floatsitf(int a, uint64_t expectedHi, uint64_t expectedLo) 2400a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger{ 2500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger long double x = __floatsitf(a); 2600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger int ret = compareResultLD(x, expectedHi, expectedLo); 2700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 2800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (ret) 2900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger { 3000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger printf("error in test__floatsitf(%d) = %.20Lf, " 3100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger "expected %.20Lf\n", a, x, fromRep128(expectedHi, expectedLo)); 3200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger } 3300a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return ret; 3400a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger} 3500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 3600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenbergerchar assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0}; 3700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 3800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#endif 3900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 4000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenbergerint main() 4100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger{ 4200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#if __LDBL_MANT_DIG__ == 113 43799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar if (test__floatsitf(0x80000000, UINT64_C(0xc01e000000000000), UINT64_C(0x0))) 44799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar return 1; 4500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (test__floatsitf(0x7fffffff, UINT64_C(0x401dfffffffc0000), UINT64_C(0x0))) 4600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 1; 4700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (test__floatsitf(0, UINT64_C(0x0), UINT64_C(0x0))) 4800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 1; 4900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (test__floatsitf(0xffffffff, UINT64_C(0xbfff000000000000), UINT64_C(0x0))) 5000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 1; 5100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (test__floatsitf(0x12345678, UINT64_C(0x401b234567800000), UINT64_C(0x0))) 5200a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 1; 5300a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger if (test__floatsitf(-0x12345678, UINT64_C(0xc01b234567800000), UINT64_C(0x0))) 5400a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 1; 5500a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 5600a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#else 5700a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger printf("skipped\n"); 5800a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger 5900a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger#endif 6000a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger return 0; 6100a7da1552bc8a69ccf529a831b4cd46853c77e9Joerg Sonnenberger} 62