Print this page
    
5261 libm should stop using synonyms.h
5298 fabs is 0-sized, confuses dis(1) and others
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Gordon Ross <gwr@nexenta.com>
5262 libm needs to be carefully unifdef'd
5268 libm doesn't need to hide symbols which are already local
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Gordon Ross <gwr@nexenta.com>
Approved by: Gordon Ross <gwr@nexenta.com>
    
      
        | Split | Close | 
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/lib/libm/common/m9x/lrint.c
          +++ new/usr/src/lib/libm/common/m9x/lrint.c
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  
    | ↓ open down ↓ | 19 lines elided | ↑ open up ↑ | 
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  24   24   */
  25   25  /*
  26   26   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  27   27   * Use is subject to license terms.
  28   28   */
  29   29  
  30      -#if defined(ELFOBJ)
  31      -#pragma weak lrint = __lrint
  32      -#endif
       30 +#pragma weak __lrint = lrint
  33   31  
  34   32  /*
  35   33   * lrint(x) rounds its argument to the nearest integer according
  36   34   * to the current rounding direction and converts the result to
  37   35   * a 32 bit signed integer.
  38   36   *
  39   37   * If x is NaN, infinite, or so large that the nearest integer
  40   38   * would exceed 32 bits, the invalid operation exception is raised.
  41   39   * If x is not an integer, the inexact exception is raised.
  42   40   */
  43   41  
  44   42  #include <sys/isa_defs.h>       /* _ILP32 */
  45   43  #include "libm.h"
  46   44  
  47   45  #if defined(_ILP32)
  48   46  long
  49   47  lrint(double x) {
  50   48          /*
  51   49           * Note: The following code works on x86 (in the default rounding
  52   50           * precision mode), but one should just use the fistpl instruction
  53   51           * instead.
  54   52           */
  55   53          union {
  56   54                  unsigned i[2];
  57   55                  double d;
  58   56          } xx, yy;
  59   57          unsigned hx;
  60   58  
  61   59          xx.d = x;
  62   60          hx = xx.i[HIWORD] & ~0x80000000;
  63   61          if (hx < 0x43300000) { /* |x| < 2^52 */
  64   62                  /* add and subtract a power of two to round x to an integer */
  65   63  #if defined(__sparc)
  66   64                  yy.i[HIWORD] = (xx.i[HIWORD] & 0x80000000) | 0x43300000;
  67   65  #elif defined(__x86)
  68   66                  yy.i[HIWORD] = (xx.i[HIWORD] & 0x80000000) | 0x43e00000;
  69   67  #else
  70   68  #error Unknown architecture
  71   69  #endif
  72   70                  yy.i[LOWORD] = 0;
  73   71                  x = (x + yy.d) - yy.d;
  74   72          }
  75   73  
  76   74          /* now x is nan, inf, or integral */
  77   75          return ((long) x);
  78   76  }
  79   77  #else
  80   78  #error Unsupported architecture
  81   79  #endif  /* defined(_ILP32) */
  
    | ↓ open down ↓ | 39 lines elided | ↑ open up ↑ | 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX