76 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_extendhfxf23 4#include <limits.h>5#include <math.h> // for isnan, isinf6#include <stdio.h>7 8#include "fp_test.h"9 10#if HAS_80_BIT_LONG_DOUBLE11 12xf_float __extendhfxf2(TYPE_FP16 f);13 14int test_extendhfxf2(TYPE_FP16 a, uint16_t expectedHi, uint64_t expectedLo) {15 xf_float x = __extendhfxf2(a);16 int ret = compareResultF80(x, expectedHi, expectedLo);17 if (ret) {18 printf("error in test__extendhfxf2(%#.4x) = %.20Lf, "19 "expected %.20Lf\n",20 toRep16(a), x, F80FromRep80(expectedHi, expectedLo));21 }22 return ret;23}24 25int main() {26 // Small positive value27 if (test_extendhfxf2(fromRep16(0x2e66), UINT16_C(0x3ffb),28 UINT64_C(0xccc0000000000000)))29 return 1;30 31 // Small negative value32 if (test_extendhfxf2(fromRep16(0xae66), UINT16_C(0xbffb),33 UINT64_C(0xccc0000000000000)))34 return 1;35 36 // Zero37 if (test_extendhfxf2(fromRep16(0), UINT16_C(0x0), UINT64_C(0x0)))38 return 1;39 40 // Smallest positive non-zero value41 if (test_extendhfxf2(fromRep16(0x0100), UINT16_C(0x3fef),42 UINT64_C(0x8000000000000000)))43 return 1;44 45 // Smallest negative non-zero value46 if (test_extendhfxf2(fromRep16(0x8100), UINT16_C(0xbfef),47 UINT64_C(0x8000000000000000)))48 return 1;49 50 // Positive infinity51 if (test_extendhfxf2(makeInf16(), UINT16_C(0x7fff),52 UINT64_C(0x8000000000000000)))53 return 1;54 55 // Negative infinity56 if (test_extendhfxf2(makeNegativeInf16(), UINT16_C(0xffff),57 UINT64_C(0x8000000000000000)))58 return 1;59 60 // NaN61 if (test_extendhfxf2(makeQNaN16(), UINT16_C(0x7fff),62 UINT64_C(0xc000000000000000)))63 return 1;64 65 return 0;66}67 68#else69 70int main() {71 printf("skipped\n");72 return 0;73}74 75#endif76