brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · d298bb6 Raw
156 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_floatuntisf3 4#include "int_lib.h"5#include <float.h>6#include <stdio.h>7 8#if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE9 10// Returns: convert a to a float, rounding toward even.11 12// Assumption: float is a IEEE 32 bit floating point type 13//             tu_int is a 128 bit integral type14 15// seee eeee emmm mmmm mmmm mmmm mmmm mmmm16 17COMPILER_RT_ABI float __floatuntisf(tu_int a);18 19int test__floatuntisf(tu_int a, float expected)20{21    float x = __floatuntisf(a);22    if (x != expected)23    {24        utwords at;25        at.all = a;26        printf("error in __floatuntisf(0x%.16llX%.16llX) = %a, expected %a\n",27               at.s.high, at.s.low, x, expected);28    }29    return x != expected;30}31 32COMPILE_TIME_ASSERT(sizeof(tu_int) == 2*sizeof(du_int));33COMPILE_TIME_ASSERT(sizeof(tu_int)*CHAR_BIT == 128);34COMPILE_TIME_ASSERT(sizeof(float)*CHAR_BIT == 32);35 36#endif37 38int main()39{40#if defined(CRT_HAS_128BIT) && HAS_80_BIT_LONG_DOUBLE41    if (test__floatuntisf(0, 0.0F))42        return 1;43 44    if (test__floatuntisf(1, 1.0F))45        return 1;46    if (test__floatuntisf(2, 2.0F))47        return 1;48    if (test__floatuntisf(20, 20.0F))49        return 1;50 51    if (test__floatuntisf(0x7FFFFF8000000000LL, 0x1.FFFFFEp+62F))52        return 1;53    if (test__floatuntisf(0x7FFFFF0000000000LL, 0x1.FFFFFCp+62F))54        return 1;55 56    if (test__floatuntisf(make_ti(0x8000008000000000LL, 0), 0x1.000001p+127F))57        return 1;58    if (test__floatuntisf(make_ti(0x8000000000000800LL, 0), 0x1.0p+127F))59        return 1;60    if (test__floatuntisf(make_ti(0x8000010000000000LL, 0), 0x1.000002p+127F))61        return 1;62 63    if (test__floatuntisf(make_ti(0x8000000000000000LL, 0), 0x1.000000p+127F))64        return 1;65 66    if (test__floatuntisf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50F))67        return 1;68 69    if (test__floatuntisf(0x0007FB72EA000000LL, 0x1.FEDCBA8p+50F))70        return 1;71    if (test__floatuntisf(0x0007FB72EB000000LL, 0x1.FEDCBACp+50F))72        return 1;73 74    if (test__floatuntisf(0x0007FB72EC000000LL, 0x1.FEDCBBp+50F))75        return 1;76 77    if (test__floatuntisf(0x0007FB72E6000000LL, 0x1.FEDCB98p+50F))78        return 1;79    if (test__floatuntisf(0x0007FB72E7000000LL, 0x1.FEDCB9Cp+50F))80        return 1;81    if (test__floatuntisf(0x0007FB72E4000000LL, 0x1.FEDCB9p+50F))82        return 1;83 84    if (test__floatuntisf(0xFFFFFFFFFFFFFFFELL, 0x1p+64F))85        return 1;86    if (test__floatuntisf(0xFFFFFFFFFFFFFFFFLL, 0x1p+64F))87        return 1;88 89    if (test__floatuntisf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50F))90        return 1;91 92    if (test__floatuntisf(0x0007FB72EA000000LL, 0x1.FEDCBAp+50F))93        return 1;94    if (test__floatuntisf(0x0007FB72EB000000LL, 0x1.FEDCBAp+50F))95        return 1;96    if (test__floatuntisf(0x0007FB72EBFFFFFFLL, 0x1.FEDCBAp+50F))97        return 1;98    if (test__floatuntisf(0x0007FB72EC000000LL, 0x1.FEDCBCp+50F))99        return 1;100    if (test__floatuntisf(0x0007FB72E8000001LL, 0x1.FEDCBAp+50F))101        return 1;102 103    if (test__floatuntisf(0x0007FB72E6000000LL, 0x1.FEDCBAp+50F))104        return 1;105    if (test__floatuntisf(0x0007FB72E7000000LL, 0x1.FEDCBAp+50F))106        return 1;107    if (test__floatuntisf(0x0007FB72E7FFFFFFLL, 0x1.FEDCBAp+50F))108        return 1;109    if (test__floatuntisf(0x0007FB72E4000001LL, 0x1.FEDCBAp+50F))110        return 1;111    if (test__floatuntisf(0x0007FB72E4000000LL, 0x1.FEDCB8p+50F))112        return 1;113 114    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCB90000000000001LL),115                          0x1.FEDCBAp+76F))116        return 1;117    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBA0000000000000LL),118                          0x1.FEDCBAp+76F))119        return 1;120    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBAFFFFFFFFFFFFFLL),121                          0x1.FEDCBAp+76F))122        return 1;123    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBB0000000000000LL),124                          0x1.FEDCBCp+76F))125        return 1;126    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBB0000000000001LL),127                          0x1.FEDCBCp+76F))128        return 1;129    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBBFFFFFFFFFFFFFLL),130                          0x1.FEDCBCp+76F))131        return 1;132    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBC0000000000000LL),133                          0x1.FEDCBCp+76F))134        return 1;135    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBC0000000000001LL),136                          0x1.FEDCBCp+76F))137        return 1;138    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBD0000000000000LL),139                          0x1.FEDCBCp+76F))140        return 1;141    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBD0000000000001LL),142                          0x1.FEDCBEp+76F))143        return 1;144    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBDFFFFFFFFFFFFFLL),145                          0x1.FEDCBEp+76F))146        return 1;147    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBE0000000000000LL),148                          0x1.FEDCBEp+76F))149        return 1;150 151#else152    printf("skipped\n");153#endif154   return 0;155}156