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