Blame sysdeps/s390/fpu/math_private.h

Packit Service b8110d
/* Configure optimized libm functions.  S390 version.
Packit Service b8110d
   Copyright (C) 2019 Free Software Foundation, Inc.
Packit Service b8110d
   This file is part of the GNU C Library.
Packit Service b8110d
Packit Service b8110d
   The GNU C Library is free software; you can redistribute it and/or
Packit Service b8110d
   modify it under the terms of the GNU Lesser General Public
Packit Service b8110d
   License as published by the Free Software Foundation; either
Packit Service b8110d
   version 2.1 of the License, or (at your option) any later version.
Packit Service b8110d
Packit Service b8110d
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service b8110d
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service b8110d
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service b8110d
   Lesser General Public License for more details.
Packit Service b8110d
Packit Service b8110d
   You should have received a copy of the GNU Lesser General Public
Packit Service b8110d
   License along with the GNU C Library; if not, see
Packit Service b8110d
   <https://www.gnu.org/licenses/>.  */
Packit Service b8110d
Packit Service b8110d
#ifndef S390_MATH_PRIVATE_H
Packit Service b8110d
#define S390_MATH_PRIVATE_H 1
Packit Service b8110d
Packit Service b8110d
#include <stdint.h>
Packit Service b8110d
#include <math.h>
Packit Service b8110d
Packit Service b8110d
#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT
Packit Service b8110d
# define TOINT_INTRINSICS 1
Packit Service b8110d
Packit Service b8110d
static inline double_t
Packit Service b8110d
roundtoint (double_t x)
Packit Service b8110d
{
Packit Service b8110d
  double_t y;
Packit Service b8110d
  /* The z196 zarch "load fp integer" (fidbra) instruction is rounding
Packit Service b8110d
     x to the nearest integer with ties away from zero (M3-field: 1)
Packit Service b8110d
     where inexact exceptions are suppressed (M4-field: 4).  */
Packit Service b8110d
  __asm__ ("fidbra %0,1,%1,4" : "=f" (y) : "f" (x));
Packit Service b8110d
  return y;
Packit Service b8110d
}
Packit Service b8110d
Packit Service b8110d
static inline int32_t
Packit Service b8110d
converttoint (double_t x)
Packit Service b8110d
{
Packit Service b8110d
  int32_t y;
Packit Service b8110d
  /* The z196 zarch "convert to fixed" (cfdbra) instruction is rounding
Packit Service b8110d
     x to the nearest integer with ties away from zero (M3-field: 1)
Packit Service b8110d
     where inexact exceptions are suppressed (M4-field: 4).  */
Packit Service b8110d
  __asm__ ("cfdbra %0,1,%1,4" : "=d" (y) : "f" (x) : "cc");
Packit Service b8110d
  return y;
Packit Service b8110d
}
Packit Service b8110d
#endif
Packit Service b8110d
Packit Service 887050
#include <fenv_private.h>
Packit Service b8110d
#include_next <math_private.h>
Packit Service b8110d
Packit Service b8110d
#endif