88 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_extendhfdf23 4#include <stdio.h>5 6#include "fp_test.h"7 8double __extendhfdf2(TYPE_FP16 a);9 10int test__extendhfdf2(TYPE_FP16 a, uint64_t expected)11{12 double x = __extendhfdf2(a);13 int ret = compareResultD(x, expected);14 15 if (ret){16 printf("error in test__extendhfdf2(%#.4x) = %f, "17 "expected %f\n", toRep16(a), x, fromRep64(expected));18 }19 return ret;20}21 22char assumption_1[sizeof(TYPE_FP16) * CHAR_BIT == 16] = {0};23 24int main()25{26 // qNaN27 if (test__extendhfdf2(makeQNaN16(),28 UINT64_C(0x7ff8000000000000)))29 return 1;30 // NaN31 if (test__extendhfdf2(fromRep16(0x7f80),32 UINT64_C(0x7ffe000000000000)))33 return 1;34 // inf35 if (test__extendhfdf2(makeInf16(),36 UINT64_C(0x7ff0000000000000)))37 return 1;38 // -inf39 if (test__extendhfdf2(makeNegativeInf16(),40 UINT64_C(0xfff0000000000000)))41 return 1;42 // zero43 if (test__extendhfdf2(fromRep16(0x0),44 UINT64_C(0x0)))45 return 1;46 // -zero47 if (test__extendhfdf2(fromRep16(0x8000),48 UINT64_C(0x8000000000000000)))49 return 1;50 if (test__extendhfdf2(fromRep16(0x4248),51 UINT64_C(0x4009200000000000)))52 return 1;53 if (test__extendhfdf2(fromRep16(0xc248),54 UINT64_C(0xc009200000000000)))55 return 1;56 if (test__extendhfdf2(fromRep16(0x6e62),57 UINT64_C(0x40b9880000000000)))58 return 1;59 if (test__extendhfdf2(fromRep16(0x3c00),60 UINT64_C(0x3ff0000000000000)))61 return 1;62 if (test__extendhfdf2(fromRep16(0x0400),63 UINT64_C(0x3f10000000000000)))64 return 1;65 // denormal66 if (test__extendhfdf2(fromRep16(0x0010),67 UINT64_C(0x3eb0000000000000)))68 return 1;69 if (test__extendhfdf2(fromRep16(0x0001),70 UINT64_C(0x3e70000000000000)))71 return 1;72 if (test__extendhfdf2(fromRep16(0x8001),73 UINT64_C(0xbe70000000000000)))74 return 1;75 if (test__extendhfdf2(fromRep16(0x0001),76 UINT64_C(0x3e70000000000000)))77 return 1;78 // max (precise)79 if (test__extendhfdf2(fromRep16(0x7bff),80 UINT64_C(0x40effc0000000000)))81 return 1;82 // max (rounded)83 if (test__extendhfdf2(fromRep16(0x7bff),84 UINT64_C(0x40effc0000000000)))85 return 1;86 return 0;87}88