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