1156cd587Sjoerg /* ===-- fixdfdi.c - Implement __fixdfdi -----------------------------------=== 2156cd587Sjoerg * 3156cd587Sjoerg * The LLVM Compiler Infrastructure 4156cd587Sjoerg * 5156cd587Sjoerg * This file is dual licensed under the MIT and the University of Illinois Open 6156cd587Sjoerg * Source Licenses. See LICENSE.TXT for details. 7156cd587Sjoerg * 8156cd587Sjoerg * ===----------------------------------------------------------------------=== 9156cd587Sjoerg */ 10156cd587Sjoerg 11ef84fd3bSjoerg #define DOUBLE_PRECISION 12ef84fd3bSjoerg #include "fp_lib.h" 13156cd587Sjoerg 14ef84fd3bSjoerg #ifndef __SOFT_FP__ 15ef84fd3bSjoerg /* Support for systems that have hardware floating-point; can set the invalid 16ef84fd3bSjoerg * flag as a side-effect of computation. 17ef84fd3bSjoerg */ 18ef84fd3bSjoerg 19ef84fd3bSjoerg COMPILER_RT_ABI du_int __fixunsdfdi(double a); 20ef84fd3bSjoerg 21f7f78b33Sjoerg COMPILER_RT_ABI di_int __fixdfdi(double a)22156cd587Sjoerg__fixdfdi(double a) 23156cd587Sjoerg { 24ef84fd3bSjoerg if (a < 0.0) { 25ef84fd3bSjoerg return -__fixunsdfdi(-a); 26156cd587Sjoerg } 27ef84fd3bSjoerg return __fixunsdfdi(a); 28ef84fd3bSjoerg } 29ef84fd3bSjoerg 30ef84fd3bSjoerg #else 31ef84fd3bSjoerg /* Support for systems that don't have hardware floating-point; there are no 32ef84fd3bSjoerg * flags to set, and we don't want to code-gen to an unknown soft-float 33ef84fd3bSjoerg * implementation. 34ef84fd3bSjoerg */ 35ef84fd3bSjoerg 36ef84fd3bSjoerg typedef di_int fixint_t; 37ef84fd3bSjoerg typedef du_int fixuint_t; 38ef84fd3bSjoerg #include "fp_fixint_impl.inc" 39ef84fd3bSjoerg 40ef84fd3bSjoerg COMPILER_RT_ABI di_int __fixdfdi(fp_t a)41ef84fd3bSjoerg__fixdfdi(fp_t a) { 42ef84fd3bSjoerg return __fixint(a); 43ef84fd3bSjoerg } 44ef84fd3bSjoerg 45ef84fd3bSjoerg #endif 463044ee7eSrin 473044ee7eSrin #if defined(__ARM_EABI__) 48*d3143459Srin #if defined(COMPILER_RT_ARMHF_TARGET) __aeabi_d2lz(fp_t a)49*d3143459SrinAEABI_RTABI di_int __aeabi_d2lz(fp_t a) { 503044ee7eSrin return __fixdfdi(a); 513044ee7eSrin } 52*d3143459Srin #else 53*d3143459Srin AEABI_RTABI di_int __aeabi_d2lz(fp_t a) COMPILER_RT_ALIAS(__fixdfdi); 543044ee7eSrin #endif 55*d3143459Srin #endif 56