brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 5b12c74 Raw
42 lines · plain
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#if __CLC_FPSIZE == 6410#define MIN_CONSTANT 0x1.fffffffffffffp-111#elif __CLC_FPSIZE == 3212#define MIN_CONSTANT 0x1.fffffep-1f13#elif __CLC_FPSIZE == 1614#define MIN_CONSTANT 0x1.ffcp-1h15#endif16 17_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract(__CLC_GENTYPE x,18                                                 private __CLC_GENTYPE *iptr) {19  *iptr = __clc_floor(x);20  __CLC_GENTYPE r = __clc_fmin(x - *iptr, MIN_CONSTANT);21  r = __clc_isinf(x) ? __CLC_FP_LIT(0.0) : r;22  r = __clc_isnan(x) ? x : r;23  return r;24}25 26#define __CLC_FRACT_DEF(addrspace)                                             \27  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract(                            \28      __CLC_GENTYPE x, addrspace __CLC_GENTYPE *iptr) {                        \29    __CLC_GENTYPE private_iptr;                                                \30    __CLC_GENTYPE ret = __clc_fract(x, &private_iptr);                         \31    *iptr = private_iptr;                                                      \32    return ret;                                                                \33  }34 35__CLC_FRACT_DEF(local);36__CLC_FRACT_DEF(global);37#if _CLC_DISTINCT_GENERIC_AS_SUPPORTED38__CLC_FRACT_DEF(generic);39#endif40 41#undef MIN_CONSTANT42