brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · a7dea9c Raw
136 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_floatundixf3 4#include "int_lib.h"5#include <stdio.h>6 7 8#if HAS_80_BIT_LONG_DOUBLE9// Returns: convert a to a long double, rounding toward even.10 11// Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits12//             du_int is a 64 bit integral type13 14// gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |15// 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm16 17COMPILER_RT_ABI long double __floatundixf(du_int a);18 19int test__floatundixf(du_int a, long double expected)20{21    long double x = __floatundixf(a);22    if (x != expected)23        printf("error in __floatundixf(%llX) = %LA, expected %LA\n",24               a, x, expected);25    return x != expected;26}27 28char assumption_1[sizeof(du_int) == 2*sizeof(si_int)] = {0};29char assumption_2[sizeof(du_int)*CHAR_BIT == 64] = {0};30char assumption_3[sizeof(long double)*CHAR_BIT == 128] = {0};31#endif32 33int main()34{35#if HAS_80_BIT_LONG_DOUBLE36    if (test__floatundixf(0, 0.0))37        return 1;38 39    if (test__floatundixf(1, 1.0))40        return 1;41    if (test__floatundixf(2, 2.0))42        return 1;43    if (test__floatundixf(20, 20.0))44        return 1;45 46    if (test__floatundixf(0x7FFFFF8000000000ULL, 0x1.FFFFFEp+62))47        return 1;48    if (test__floatundixf(0x7FFFFFFFFFFFF800ULL, 0x1.FFFFFFFFFFFFEp+62))49        return 1;50    if (test__floatundixf(0x7FFFFF0000000000ULL, 0x1.FFFFFCp+62))51        return 1;52    if (test__floatundixf(0x7FFFFFFFFFFFF000ULL, 0x1.FFFFFFFFFFFFCp+62))53        return 1;54    if (test__floatundixf(0x7FFFFFFFFFFFFFFFULL, 0xF.FFFFFFFFFFFFFFEp+59L))55        return 1;56    if (test__floatundixf(0xFFFFFFFFFFFFFFFEULL, 0xF.FFFFFFFFFFFFFFEp+60L))57        return 1;58    if (test__floatundixf(0xFFFFFFFFFFFFFFFFULL, 0xF.FFFFFFFFFFFFFFFp+60L))59        return 1;60 61    if (test__floatundixf(0x8000008000000000ULL, 0x8.000008p+60))62        return 1;63    if (test__floatundixf(0x8000000000000800ULL, 0x8.0000000000008p+60))64        return 1;65    if (test__floatundixf(0x8000010000000000ULL, 0x8.00001p+60))66        return 1;67    if (test__floatundixf(0x8000000000001000ULL, 0x8.000000000001p+60))68        return 1;69 70    if (test__floatundixf(0x8000000000000000ULL, 0x8p+60))71        return 1;72    if (test__floatundixf(0x8000000000000001ULL, 0x8.000000000000001p+60L))73        return 1;74 75    if (test__floatundixf(0x0007FB72E8000000ULL, 0x1.FEDCBAp+50))76        return 1;77 78    if (test__floatundixf(0x0007FB72EA000000ULL, 0x1.FEDCBA8p+50))79        return 1;80    if (test__floatundixf(0x0007FB72EB000000ULL, 0x1.FEDCBACp+50))81        return 1;82    if (test__floatundixf(0x0007FB72EBFFFFFFULL, 0x1.FEDCBAFFFFFFCp+50))83        return 1;84    if (test__floatundixf(0x0007FB72EC000000ULL, 0x1.FEDCBBp+50))85        return 1;86    if (test__floatundixf(0x0007FB72E8000001ULL, 0x1.FEDCBA0000004p+50))87        return 1;88 89    if (test__floatundixf(0x0007FB72E6000000ULL, 0x1.FEDCB98p+50))90        return 1;91    if (test__floatundixf(0x0007FB72E7000000ULL, 0x1.FEDCB9Cp+50))92        return 1;93    if (test__floatundixf(0x0007FB72E7FFFFFFULL, 0x1.FEDCB9FFFFFFCp+50))94        return 1;95    if (test__floatundixf(0x0007FB72E4000001ULL, 0x1.FEDCB90000004p+50))96        return 1;97    if (test__floatundixf(0x0007FB72E4000000ULL, 0x1.FEDCB9p+50))98        return 1;99 100    if (test__floatundixf(0x023479FD0E092DC0ULL, 0x1.1A3CFE870496Ep+57))101        return 1;102    if (test__floatundixf(0x023479FD0E092DA1ULL, 0x8.D1E7F43824B684p+54L))103        return 1;104    if (test__floatundixf(0x023479FD0E092DB0ULL, 0x8.D1E7f43824B6Cp+54L))105        return 1;106    if (test__floatundixf(0x023479FD0E092DB8ULL, 0x8.D1E7F43824B6Ep+54L))107        return 1;108    if (test__floatundixf(0x023479FD0E092DB6ULL, 0x8.D1E7F43824B6D8p+54L))109        return 1;110    if (test__floatundixf(0x023479FD0E092DBFULL, 0x8.D1E7F43824B6FCp+54L))111        return 1;112    if (test__floatundixf(0x023479FD0E092DC1ULL, 0x8.D1E7F43824B704p+54L))113        return 1;114    if (test__floatundixf(0x023479FD0E092DC7ULL, 0x8.D1E7F43824B71Cp+54L))115        return 1;116    if (test__floatundixf(0x023479FD0E092DC8ULL, 0x8.D1E7F43824B72p+54L))117        return 1;118    if (test__floatundixf(0x023479FD0E092DCFULL, 0x8.D1E7F43824B73Cp+54L))119        return 1;120    if (test__floatundixf(0x023479FD0E092DD0ULL, 0x8.D1E7F43824B74p+54L))121        return 1;122    if (test__floatundixf(0x023479FD0E092DD1ULL, 0x8.D1E7F43824B744p+54L))123        return 1;124    if (test__floatundixf(0x023479FD0E092DD8ULL, 0x8.D1E7F43824B76p+54L))125        return 1;126    if (test__floatundixf(0x023479FD0E092DDFULL, 0x8.D1E7F43824B77Cp+54L))127        return 1;128    if (test__floatundixf(0x023479FD0E092DE0ULL, 0x1.1A3CFE870496Fp+57))129        return 1;130 131#else132    printf("skipped\n");133#endif134   return 0;135}136