Print this page
6648 illumos build should be explicit about C standards

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/sparc/src/libm_inlines.h
          +++ new/usr/src/lib/libm/sparc/src/libm_inlines.h
↓ open down ↓ 34 lines elided ↑ open up ↑
  35   35  
  36   36  #ifdef __GNUC__
  37   37  
  38   38  #include <sys/types.h>
  39   39  #include <sys/ieeefp.h>
  40   40  
  41   41  #ifdef __cplusplus
  42   42  extern "C" {
  43   43  #endif
  44   44  
  45      -extern __inline__ double
       45 +extern __GNU_INLINE double
  46   46  __inline_sqrt(double d)
  47   47  {
  48   48          double ret;
  49   49  
  50   50          __asm__ __volatile__("fsqrtd %1,%0\n\t" : "=e" (ret) : "e" (d));
  51   51          return (ret);
  52   52  }
  53   53  
  54      -extern __inline__ float
       54 +extern __GNU_INLINE float
  55   55  __inline_sqrtf(float f)
  56   56  {
  57   57          float ret;
  58   58  
  59   59          __asm__ __volatile__("fsqrts %1,%0\n\t" : "=f" (ret) : "f" (f));
  60   60          return (ret);
  61   61  }
  62   62  
  63      -extern __inline__ enum fp_class_type
       63 +extern __GNU_INLINE enum fp_class_type
  64   64  fp_classf(float f)
  65   65  {
  66   66          enum fp_class_type ret;
  67   67          uint32_t tmp;
  68   68  
  69   69          /* XXX: Separate input and output */
  70   70          __asm__ __volatile__(
  71   71              "sethi  %%hi(0x80000000),%1\n\t"
  72   72              "andncc %2,%1,%0\n\t"
  73   73              "bne    1f\n\t"
↓ open down ↓ 32 lines elided ↑ open up ↑
 106  106              "2:\n\t"
 107  107              : "=r" (ret), "=&r" (tmp)
 108  108              : "r" (f)
 109  109              : "cc");
 110  110          return (ret);
 111  111  }
 112  112  
 113  113  #define _HI_WORD(x)     ((uint32_t *)&x)[0]
 114  114  #define _LO_WORD(x)     ((uint32_t *)&x)[1]
 115  115  
 116      -extern __inline__ enum fp_class_type
      116 +extern __GNU_INLINE enum fp_class_type
 117  117  fp_class(double d)
 118  118  {
 119  119          enum fp_class_type ret;
 120  120          uint32_t tmp;
 121  121  
 122  122          __asm__ __volatile__(
 123  123              "sethi %%hi(0x80000000),%1\n\t"     /* %1 gets 80000000 */
 124  124              "andn  %2,%1,%0\n\t"                /* %2-%0 gets abs(x) */
 125  125              "orcc  %0,%3,%%g0\n\t"              /* set cc as x is zero/nonzero */
 126  126              "bne   1f\n\t"                      /* branch if x is nonzero */
↓ open down ↓ 35 lines elided ↑ open up ↑
 162  162              "1:\n\t"
 163  163              "mov   5,%0\n\t"                    /* x is signaling NaN */
 164  164              "2:\n\t"
 165  165              : "=&r" (ret), "=&r" (tmp)
 166  166              : "r" (_HI_WORD(d)), "r" (_LO_WORD(d))
 167  167              : "cc");
 168  168  
 169  169          return (ret);
 170  170  }
 171  171  
 172      -extern __inline__ int
      172 +extern __GNU_INLINE int
 173  173  __swapEX(int i)
 174  174  {
 175  175          int ret;
 176  176          uint32_t fsr;
 177  177          uint32_t tmp1, tmp2;
 178  178  
 179  179          __asm__ __volatile__(
 180  180              "and  %4,0x1f,%2\n\t" /* tmp1 = %2 = %o1 */
 181  181              "sll  %2,5,%2\n\t"  /* shift input to aexc bit location */
 182  182              ".volatile\n\t"
↓ open down ↓ 11 lines elided ↑ open up ↑
 194  194              : "cc");
 195  195  
 196  196          return (ret);
 197  197  }
 198  198  
 199  199  /*
 200  200   * On the SPARC, __swapRP is a no-op; always return 0 for backward
 201  201   * compatibility
 202  202   */
 203  203  /* ARGSUSED */
 204      -extern __inline__ enum fp_precision_type
      204 +extern __GNU_INLINE enum fp_precision_type
 205  205  __swapRP(enum fp_precision_type i)
 206  206  {
 207  207          return (0);
 208  208  }
 209  209  
 210      -extern __inline__ enum fp_direction_type
      210 +extern __GNU_INLINE enum fp_direction_type
 211  211  __swapRD(enum fp_direction_type d)
 212  212  {
 213  213          enum fp_direction_type ret;
 214  214          uint32_t fsr;
 215  215          uint32_t tmp1, tmp2, tmp3;
 216  216  
 217  217          __asm__ __volatile__(
 218  218              "and  %5,0x3,%0\n\t"
 219  219              "sll  %0,30,%2\n\t"         /* shift input to RD bit location */
 220  220              ".volatile\n\t"
↓ open down ↓ 7 lines elided ↑ open up ↑
 228  228              "srl  %0,30,%0\n\t"
 229  229              "and  %0,0x3,%0\n\t"
 230  230              ".nonvolatile\n\t"
 231  231              : "=r" (ret), "=m" (fsr), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3)
 232  232              : "r" (d)
 233  233              : "cc");
 234  234  
 235  235          return (ret);
 236  236  }
 237  237  
 238      -extern __inline__ int
      238 +extern __GNU_INLINE int
 239  239  __swapTE(int i)
 240  240  {
 241  241          int ret;
 242  242          uint32_t fsr, tmp1, tmp2;
 243  243  
 244  244          __asm__ __volatile__(
 245  245              "and  %4,0x1f,%0\n\t"
 246  246              "sll  %0,23,%2\n\t"         /* shift input to TEM bit location */
 247  247              ".volatile\n\t"
 248  248              "st   %%fsr,%1\n\t"
↓ open down ↓ 6 lines elided ↑ open up ↑
 255  255              "srl  %0,23,%0\n\t"
 256  256              "and  %0,0x1f,%0\n\t"
 257  257              ".nonvolatile\n\t"
 258  258              : "=r" (ret), "=m" (fsr), "=r" (tmp1), "=r" (tmp2)
 259  259              : "r" (i)
 260  260              : "cc");
 261  261  
 262  262          return (ret);
 263  263  }
 264  264  
 265      -extern __inline__ double
      265 +extern __GNU_INLINE double
 266  266  sqrt(double d)
 267  267  {
 268  268          return (__inline_sqrt(d));
 269  269  }
 270  270  
 271      -extern __inline__ float
      271 +extern __GNU_INLINE float
 272  272  sqrtf(float f)
 273  273  {
 274  274          return (__inline_sqrtf(f));
 275  275  }
 276  276  
 277      -extern __inline__ double
      277 +extern __GNU_INLINE double
 278  278  fabs(double d)
 279  279  {
 280  280          double ret;
 281  281  
 282  282          __asm__ __volatile__("fabsd %1,%0\n\t" : "=e" (ret) : "e" (d));
 283  283          return (ret);
 284  284  }
 285  285  
 286      -extern __inline__ float
      286 +extern __GNU_INLINE float
 287  287  fabsf(float f)
 288  288  {
 289  289          float ret;
 290  290  
 291  291          __asm__ __volatile__("fabss %1,%0\n\t" : "=f" (ret) : "f" (f));
 292  292          return (ret);
 293  293  }
 294  294  
 295  295  #ifdef __cplusplus
 296  296  }
 297  297  #endif
 298  298  
 299  299  #endif  /* __GNUC */
 300  300  
 301  301  #endif /* _LIBM_INLINES_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX