diff options
Diffstat (limited to 'lib/builtins/fp_fixint_impl.inc')
| -rw-r--r-- | lib/builtins/fp_fixint_impl.inc | 47 | 
1 files changed, 23 insertions, 24 deletions
diff --git a/lib/builtins/fp_fixint_impl.inc b/lib/builtins/fp_fixint_impl.inc index da70d4d39301..2196d712f05f 100644 --- a/lib/builtins/fp_fixint_impl.inc +++ b/lib/builtins/fp_fixint_impl.inc @@ -1,9 +1,8 @@  //===-- lib/fixdfsi.c - Double-precision -> integer conversion ----*- C -*-===//  // -//                     The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  //  //===----------------------------------------------------------------------===//  // @@ -15,27 +14,27 @@  #include "fp_lib.h"  static __inline fixint_t __fixint(fp_t a) { -    const fixint_t fixint_max = (fixint_t)((~(fixuint_t)0) / 2); -    const fixint_t fixint_min = -fixint_max - 1; -    // Break a into sign, exponent, significand -    const rep_t aRep = toRep(a); -    const rep_t aAbs = aRep & absMask; -    const fixint_t sign = aRep & signBit ? -1 : 1; -    const int exponent = (aAbs >> significandBits) - exponentBias; -    const rep_t significand = (aAbs & significandMask) | implicitBit; +  const fixint_t fixint_max = (fixint_t)((~(fixuint_t)0) / 2); +  const fixint_t fixint_min = -fixint_max - 1; +  // Break a into sign, exponent, significand parts. +  const rep_t aRep = toRep(a); +  const rep_t aAbs = aRep & absMask; +  const fixint_t sign = aRep & signBit ? -1 : 1; +  const int exponent = (aAbs >> significandBits) - exponentBias; +  const rep_t significand = (aAbs & significandMask) | implicitBit; -    // If exponent is negative, the result is zero. -    if (exponent < 0) -        return 0; +  // If exponent is negative, the result is zero. +  if (exponent < 0) +    return 0; -    // If the value is too large for the integer type, saturate. -    if ((unsigned)exponent >= sizeof(fixint_t) * CHAR_BIT) -        return sign == 1 ? fixint_max : fixint_min; +  // If the value is too large for the integer type, saturate. +  if ((unsigned)exponent >= sizeof(fixint_t) * CHAR_BIT) +    return sign == 1 ? fixint_max : fixint_min; -    // If 0 <= exponent < significandBits, right shift to get the result. -    // Otherwise, shift left. -    if (exponent < significandBits) -        return sign * (significand >> (significandBits - exponent)); -    else -        return sign * ((fixint_t)significand << (exponent - significandBits)); +  // If 0 <= exponent < significandBits, right shift to get the result. +  // Otherwise, shift left. +  if (exponent < significandBits) +    return sign * (significand >> (significandBits - exponent)); +  else +    return sign * ((fixint_t)significand << (exponent - significandBits));  }  | 
