brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 7603735 Raw
63 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_VECSIZE_OR_1 == 110 11_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_length(__CLC_GENTYPE p) {12  return __clc_fabs(p);13}14 15#elif (__CLC_VECSIZE_OR_1 == 2 || __CLC_VECSIZE_OR_1 == 3 ||                   \16       __CLC_VECSIZE_OR_1 == 4)17 18#if __CLC_FPSIZE == 3219#define __CLC_GENTYPE_MIN FLT_MIN20#define __CLC_GENTYPE_MIN_SCALE_UP 0x1.0p+86F21#define __CLC_GENTYPE_MIN_SCALE_DOWN 0x1.0p-86F22#define __CLC_GENTYPE_INF_SCALE_UP 0x1.0p+65F23#define __CLC_GENTYPE_INF_SCALE_DOWN 0x1.0p-65F24#elif __CLC_FPSIZE == 6425#define __CLC_GENTYPE_MIN DBL_MIN26#define __CLC_GENTYPE_MIN_SCALE_UP 0x1.0p+56327#define __CLC_GENTYPE_MIN_SCALE_DOWN 0x1.0p-56328#define __CLC_GENTYPE_INF_SCALE_UP 0x1.0p+51329#define __CLC_GENTYPE_INF_SCALE_DOWN 0x1.0p-51330#elif __CLC_FPSIZE == 1631#define __CLC_GENTYPE_MIN HALF_MIN32#define __CLC_GENTYPE_MIN_SCALE_UP 0x1.0p+12H33#define __CLC_GENTYPE_MIN_SCALE_DOWN 0x1.0p-12H34#define __CLC_GENTYPE_INF_SCALE_UP 0x1.0p+7H35#define __CLC_GENTYPE_INF_SCALE_DOWN 0x1.0p-7H36#else37#error "Unsupported FP size"38#endif39 40_CLC_OVERLOAD _CLC_DEF __CLC_SCALAR_GENTYPE __clc_length(__CLC_GENTYPE p) {41  __CLC_SCALAR_GENTYPE l2 = __clc_dot(p, p);42 43  if (l2 < __CLC_GENTYPE_MIN) {44    p *= __CLC_GENTYPE_MIN_SCALE_UP;45    return __clc_sqrt(__clc_dot(p, p)) * __CLC_GENTYPE_MIN_SCALE_DOWN;46  }47 48  if (l2 == INFINITY) {49    p *= __CLC_GENTYPE_INF_SCALE_DOWN;50    return __clc_sqrt(__clc_dot(p, p)) * __CLC_GENTYPE_INF_SCALE_UP;51  }52 53  return __clc_sqrt(l2);54}55 56#undef __CLC_GENTYPE_INF_SCALE_DOWN57#undef __CLC_GENTYPE_INF_SCALE_UP58#undef __CLC_GENTYPE_MIN_SCALE_DOWN59#undef __CLC_GENTYPE_MIN_SCALE_UP60#undef __CLC_GENTYPE_MIN61 62#endif63