177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===-- floatundixf_test.c - Test __floatundixf ---------------------------===//
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 __floatundixf for the compiler_rt library.
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===----------------------------------------------------------------------===//
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include "int_lib.h"
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <stdio.h>
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if HAS_80_BIT_LONG_DOUBLE
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Returns: convert a to a long double, rounding toward even.
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//             du_int is a 64 bit integral type
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaolong double __floatundixf(du_int a);
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint test__floatundixf(du_int a, long double expected)
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    long double x = __floatundixf(a);
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (x != expected)
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        printf("error in __floatundixf(%llX) = %LA, expected %LA\n",
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao               a, x, expected);
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return x != expected;
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_1[sizeof(du_int) == 2*sizeof(si_int)] = {0};
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_2[sizeof(du_int)*CHAR_BIT == 64] = {0};
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_3[sizeof(long double)*CHAR_BIT == 128] = {0};
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main()
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if HAS_80_BIT_LONG_DOUBLE
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0, 0.0))
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(1, 1.0))
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(2, 2.0))
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(20, 20.0))
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x7FFFFF8000000000ULL, 0x1.FFFFFEp+62))
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x7FFFFFFFFFFFF800ULL, 0x1.FFFFFFFFFFFFEp+62))
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x7FFFFF0000000000ULL, 0x1.FFFFFCp+62))
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x7FFFFFFFFFFFF000ULL, 0x1.FFFFFFFFFFFFCp+62))
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x7FFFFFFFFFFFFFFFULL, 0xF.FFFFFFFFFFFFFFEp+59L))
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0xFFFFFFFFFFFFFFFEULL, 0xF.FFFFFFFFFFFFFFEp+60L))
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0xFFFFFFFFFFFFFFFFULL, 0xF.FFFFFFFFFFFFFFFp+60L))
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000008000000000ULL, 0x8.000008p+60))
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000000000000800ULL, 0x8.0000000000008p+60))
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000010000000000ULL, 0x8.00001p+60))
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000000000001000ULL, 0x8.000000000001p+60))
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000000000000000ULL, 0x8p+60))
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x8000000000000001ULL, 0x8.000000000000001p+60L))
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E8000000ULL, 0x1.FEDCBAp+50))
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72EA000000ULL, 0x1.FEDCBA8p+50))
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72EB000000ULL, 0x1.FEDCBACp+50))
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72EBFFFFFFULL, 0x1.FEDCBAFFFFFFCp+50))
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72EC000000ULL, 0x1.FEDCBBp+50))
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E8000001ULL, 0x1.FEDCBA0000004p+50))
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E6000000ULL, 0x1.FEDCB98p+50))
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E7000000ULL, 0x1.FEDCB9Cp+50))
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E7FFFFFFULL, 0x1.FEDCB9FFFFFFCp+50))
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E4000001ULL, 0x1.FEDCB90000004p+50))
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x0007FB72E4000000ULL, 0x1.FEDCB9p+50))
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DC0ULL, 0x1.1A3CFE870496Ep+57))
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DA1ULL, 0x8.D1E7F43824B684p+54L))
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DB0ULL, 0x8.D1E7f43824B6Cp+54L))
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DB8ULL, 0x8.D1E7F43824B6Ep+54L))
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DB6ULL, 0x8.D1E7F43824B6D8p+54L))
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DBFULL, 0x8.D1E7F43824B6FCp+54L))
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DC1ULL, 0x8.D1E7F43824B704p+54L))
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DC7ULL, 0x8.D1E7F43824B71Cp+54L))
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DC8ULL, 0x8.D1E7F43824B72p+54L))
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DCFULL, 0x8.D1E7F43824B73Cp+54L))
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DD0ULL, 0x8.D1E7F43824B74p+54L))
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DD1ULL, 0x8.D1E7F43824B744p+54L))
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DD8ULL, 0x8.D1E7F43824B76p+54L))
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DDFULL, 0x8.D1E7F43824B77Cp+54L))
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__floatundixf(0x023479FD0E092DE0ULL, 0x1.1A3CFE870496Fp+57))
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao   return 0;
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
144