11.1Sjoerg//===-- floattisf_test.c - Test __floattisf -------------------------------===//
21.1Sjoerg//
31.1Sjoerg//                     The LLVM Compiler Infrastructure
41.1Sjoerg//
51.1Sjoerg// This file is dual licensed under the MIT and the University of Illinois Open
61.1Sjoerg// Source Licenses. See LICENSE.TXT for details.
71.1Sjoerg//
81.1Sjoerg//===----------------------------------------------------------------------===//
91.1Sjoerg//
101.1Sjoerg// This file tests __floattisf for the compiler_rt library.
111.1Sjoerg//
121.1Sjoerg//===----------------------------------------------------------------------===//
131.1Sjoerg
141.1Sjoerg#if __x86_64
151.1Sjoerg
161.1Sjoerg#include "int_lib.h"
171.1Sjoerg#include <float.h>
181.1Sjoerg#include <stdio.h>
191.1Sjoerg
201.1Sjoerg// Returns: convert a to a float, rounding toward even.
211.1Sjoerg
221.1Sjoerg// Assumption: float is a IEEE 32 bit floating point type
231.1Sjoerg//             ti_int is a 64 bit integral type
241.1Sjoerg
251.1Sjoerg// seee eeee emmm mmmm mmmm mmmm mmmm mmmm
261.1Sjoerg
271.1Sjoergfloat __floattisf(ti_int a);
281.1Sjoerg
291.1Sjoergint test__floattisf(ti_int a, float expected)
301.1Sjoerg{
311.1Sjoerg    float x = __floattisf(a);
321.1Sjoerg    if (x != expected)
331.1Sjoerg    {
341.1Sjoerg        twords at;
351.1Sjoerg        at.all = a;
361.1Sjoerg        printf("error in __floattisf(0x%.16llX%.16llX) = %a, expected %a\n",
371.1Sjoerg               at.s.high, at.s.low, x, expected);
381.1Sjoerg    }
391.1Sjoerg    return x != expected;
401.1Sjoerg}
411.1Sjoerg
421.1Sjoergchar assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
431.1Sjoergchar assumption_2[sizeof(ti_int)*CHAR_BIT == 128] = {0};
441.1Sjoergchar assumption_3[sizeof(float)*CHAR_BIT == 32] = {0};
451.1Sjoerg
461.1Sjoerg#endif
471.1Sjoerg
481.1Sjoergint main()
491.1Sjoerg{
501.1Sjoerg#if __x86_64
511.1Sjoerg    if (test__floattisf(0, 0.0F))
521.1Sjoerg        return 1;
531.1Sjoerg
541.1Sjoerg    if (test__floattisf(1, 1.0F))
551.1Sjoerg        return 1;
561.1Sjoerg    if (test__floattisf(2, 2.0F))
571.1Sjoerg        return 1;
581.1Sjoerg    if (test__floattisf(-1, -1.0F))
591.1Sjoerg        return 1;
601.1Sjoerg    if (test__floattisf(-2, -2.0F))
611.1Sjoerg        return 1;
621.1Sjoerg
631.1Sjoerg    if (test__floattisf(0x7FFFFF8000000000LL, 0x1.FFFFFEp+62F))
641.1Sjoerg        return 1;
651.1Sjoerg    if (test__floattisf(0x7FFFFF0000000000LL, 0x1.FFFFFCp+62F))
661.1Sjoerg        return 1;
671.1Sjoerg
681.1Sjoerg    if (test__floattisf(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000008000000000LL),
691.1Sjoerg                        -0x1.FFFFFEp+62F))
701.1Sjoerg        return 1;
711.1Sjoerg    if (test__floattisf(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000010000000000LL),
721.1Sjoerg                        -0x1.FFFFFCp+62F))
731.1Sjoerg        return 1;
741.1Sjoerg
751.1Sjoerg    if (test__floattisf(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000000LL),
761.1Sjoerg                        -0x1.000000p+63F))
771.1Sjoerg        return 1;
781.1Sjoerg    if (test__floattisf(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL),
791.1Sjoerg                        -0x1.000000p+63F))
801.1Sjoerg        return 1;
811.1Sjoerg
821.1Sjoerg    if (test__floattisf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50F))
831.1Sjoerg        return 1;
841.1Sjoerg
851.1Sjoerg    if (test__floattisf(0x0007FB72EA000000LL, 0x1.FEDCBAp+50F))
861.1Sjoerg        return 1;
871.1Sjoerg    if (test__floattisf(0x0007FB72EB000000LL, 0x1.FEDCBAp+50F))
881.1Sjoerg        return 1;
891.1Sjoerg    if (test__floattisf(0x0007FB72EBFFFFFFLL, 0x1.FEDCBAp+50F))
901.1Sjoerg        return 1;
911.1Sjoerg    if (test__floattisf(0x0007FB72EC000000LL, 0x1.FEDCBCp+50F))
921.1Sjoerg        return 1;
931.1Sjoerg    if (test__floattisf(0x0007FB72E8000001LL, 0x1.FEDCBAp+50F))
941.1Sjoerg        return 1;
951.1Sjoerg
961.1Sjoerg    if (test__floattisf(0x0007FB72E6000000LL, 0x1.FEDCBAp+50F))
971.1Sjoerg        return 1;
981.1Sjoerg    if (test__floattisf(0x0007FB72E7000000LL, 0x1.FEDCBAp+50F))
991.1Sjoerg        return 1;
1001.1Sjoerg    if (test__floattisf(0x0007FB72E7FFFFFFLL, 0x1.FEDCBAp+50F))
1011.1Sjoerg        return 1;
1021.1Sjoerg    if (test__floattisf(0x0007FB72E4000001LL, 0x1.FEDCBAp+50F))
1031.1Sjoerg        return 1;
1041.1Sjoerg    if (test__floattisf(0x0007FB72E4000000LL, 0x1.FEDCB8p+50F))
1051.1Sjoerg        return 1;
1061.1Sjoerg
1071.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E8000000LL, 0), 0x1.FEDCBAp+114F))
1081.1Sjoerg        return 1;
1091.1Sjoerg
1101.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72EA000000LL, 0), 0x1.FEDCBAp+114F))
1111.1Sjoerg        return 1;
1121.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72EB000000LL, 0), 0x1.FEDCBAp+114F))
1131.1Sjoerg        return 1;
1141.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72EBFFFFFFLL, 0), 0x1.FEDCBAp+114F))
1151.1Sjoerg        return 1;
1161.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72EC000000LL, 0), 0x1.FEDCBCp+114F))
1171.1Sjoerg        return 1;
1181.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E8000001LL, 0), 0x1.FEDCBAp+114F))
1191.1Sjoerg        return 1;
1201.1Sjoerg
1211.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E6000000LL, 0), 0x1.FEDCBAp+114F))
1221.1Sjoerg        return 1;
1231.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E7000000LL, 0), 0x1.FEDCBAp+114F))
1241.1Sjoerg        return 1;
1251.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E7FFFFFFLL, 0), 0x1.FEDCBAp+114F))
1261.1Sjoerg        return 1;
1271.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E4000001LL, 0), 0x1.FEDCBAp+114F))
1281.1Sjoerg        return 1;
1291.1Sjoerg    if (test__floattisf(make_ti(0x0007FB72E4000000LL, 0), 0x1.FEDCB8p+114F))
1301.1Sjoerg        return 1;
1311.1Sjoerg
1321.1Sjoerg#else
1331.1Sjoerg    printf("skipped\n");
1341.1Sjoerg#endif
1351.1Sjoerg   return 0;
1361.1Sjoerg}
137