177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===-- floatuntidf.c - Test __floatuntidf --------------------------------===//
277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//                     The LLVM Compiler Infrastructure
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// This file is distributed under the University of Illinois Open Source
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// License. See LICENSE.TXT for details.
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===----------------------------------------------------------------------===//
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// This file tests __floatuntidf for the compiler_rt library.
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===----------------------------------------------------------------------===//
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include "int_lib.h"
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <float.h>
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <stdio.h>
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Returns: convert a to a double, rounding toward even.
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Assumption: double is a IEEE 64 bit floating point type
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//             tu_int is a 64 bit integral type
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble __floatuntidf(tu_int a);
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint test__floatuntidf(tu_int a, double expected)
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    double x = __floatuntidf(a);
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (x != expected)
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    {
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        utwords at;
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        at.all = a;
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        printf("error in __floatuntidf(0x%.16llX%.16llX) = %a, expected %a\n",
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao               at.s.high, at.s.low, x, expected);
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    }
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return x != expected;
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_2[sizeof(ti_int)*CHAR_BIT == 128] = {0};
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_3[sizeof(double)*CHAR_BIT == 64] = {0};
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main()
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0, 0.0))
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(1, 1.0))
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(2, 2.0))
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(20, 20.0))
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x7FFFFF8000000000LL, 0x1.FFFFFEp+62))
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x7FFFFFFFFFFFF800LL, 0x1.FFFFFFFFFFFFEp+62))
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x7FFFFF0000000000LL, 0x1.FFFFFCp+62))
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x7FFFFFFFFFFFF000LL, 0x1.FFFFFFFFFFFFCp+62))
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000008000000000LL, 0), 0x1.000001p+127))
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000000000000800LL, 0), 0x1.0000000000001p+127))
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000010000000000LL, 0), 0x1.000002p+127))
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000000000001000LL, 0), 0x1.0000000000002p+127))
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000000000000000LL, 0), 0x1.000000p+127))
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x8000000000000001LL, 0), 0x1.0000000000000002p+127))
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50))
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72EA000000LL, 0x1.FEDCBA8p+50))
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72EB000000LL, 0x1.FEDCBACp+50))
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72EBFFFFFFLL, 0x1.FEDCBAFFFFFFCp+50))
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72EC000000LL, 0x1.FEDCBBp+50))
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E8000001LL, 0x1.FEDCBA0000004p+50))
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E6000000LL, 0x1.FEDCB98p+50))
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E7000000LL, 0x1.FEDCB9Cp+50))
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E7FFFFFFLL, 0x1.FEDCB9FFFFFFCp+50))
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E4000001LL, 0x1.FEDCB90000004p+50))
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x0007FB72E4000000LL, 0x1.FEDCB9p+50))
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DC0LL, 0x1.1A3CFE870496Ep+57))
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DA1LL, 0x1.1A3CFE870496Dp+57))
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DB0LL, 0x1.1A3CFE870496Ep+57))
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DB8LL, 0x1.1A3CFE870496Ep+57))
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DB6LL, 0x1.1A3CFE870496Ep+57))
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DBFLL, 0x1.1A3CFE870496Ep+57))
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DC1LL, 0x1.1A3CFE870496Ep+57))
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DC7LL, 0x1.1A3CFE870496Ep+57))
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DC8LL, 0x1.1A3CFE870496Ep+57))
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DCFLL, 0x1.1A3CFE870496Ep+57))
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DD0LL, 0x1.1A3CFE870496Ep+57))
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DD1LL, 0x1.1A3CFE870496Fp+57))
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DD8LL, 0x1.1A3CFE870496Fp+57))
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DDFLL, 0x1.1A3CFE870496Fp+57))
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(0x023479FD0E092DE0LL, 0x1.1A3CFE870496Fp+57))
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DC0LL, 0), 0x1.1A3CFE870496Ep+121))
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DA1LL, 1), 0x1.1A3CFE870496Dp+121))
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DB0LL, 2), 0x1.1A3CFE870496Ep+121))
14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DB8LL, 3), 0x1.1A3CFE870496Ep+121))
14777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DB6LL, 4), 0x1.1A3CFE870496Ep+121))
14977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DBFLL, 5), 0x1.1A3CFE870496Ep+121))
15177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DC1LL, 6), 0x1.1A3CFE870496Ep+121))
15377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DC7LL, 7), 0x1.1A3CFE870496Ep+121))
15577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DC8LL, 8), 0x1.1A3CFE870496Ep+121))
15777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DCFLL, 9), 0x1.1A3CFE870496Ep+121))
15977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DD0LL, 0), 0x1.1A3CFE870496Ep+121))
16177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DD1LL, 11), 0x1.1A3CFE870496Fp+121))
16377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DD8LL, 12), 0x1.1A3CFE870496Fp+121))
16577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DDFLL, 13), 0x1.1A3CFE870496Fp+121))
16777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatuntidf(make_ti(0x023479FD0E092DE0LL, 14), 0x1.1A3CFE870496Fp+121))
16977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
17077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
17177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao   return 0;
17277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
173