From 6c9b0f68267cf365d060d4e51e7cb8f61498b875 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 12 Sep 2012 23:36:19 +0000 Subject: Make strtod respect the rounding mode (bug 14518). --- ports/ChangeLog.arm | 4 +++ ports/ChangeLog.powerpc | 4 +++ ports/sysdeps/arm/get-rounding-mode.h | 42 +++++++++++++++++++++++++ ports/sysdeps/powerpc/nofpu/get-rounding-mode.h | 35 +++++++++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 ports/sysdeps/arm/get-rounding-mode.h create mode 100644 ports/sysdeps/powerpc/nofpu/get-rounding-mode.h (limited to 'ports') diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 1fae5f7..a0c583b 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,7 @@ +2012-09-12 Joseph Myers + + * sysdeps/arm/get-rounding-mode.h: New file. + 2012-08-27 Joseph Myers * sysdeps/unix/sysv/linux/arm/kernel-features.h diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc index c8a8584..af98f82 100644 --- a/ports/ChangeLog.powerpc +++ b/ports/ChangeLog.powerpc @@ -1,3 +1,7 @@ +2012-09-12 Joseph Myers + + * sysdeps/powerpc/nofpu/get-rounding-mode.h: New file. + 2012-07-25 Florian Weimer * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libc.abilist: diff --git a/ports/sysdeps/arm/get-rounding-mode.h b/ports/sysdeps/arm/get-rounding-mode.h new file mode 100644 index 0000000..a614fe4 --- /dev/null +++ b/ports/sysdeps/arm/get-rounding-mode.h @@ -0,0 +1,42 @@ +/* Determine floating-point rounding mode within libc. ARM version. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ARM_GET_ROUNDING_MODE_H +#define _ARM_GET_ROUNDING_MODE_H 1 + +#include +#include +#include + +/* Return the floating-point rounding mode. */ + +static inline int +get_rounding_mode (void) +{ + if (ARM_HAVE_VFP) + { + fpu_control_t fc; + + _FPU_GETCW (fc); + return fc & FE_TOWARDZERO; + } + else + return FE_TONEAREST; +} + +#endif /* get-rounding-mode.h */ diff --git a/ports/sysdeps/powerpc/nofpu/get-rounding-mode.h b/ports/sysdeps/powerpc/nofpu/get-rounding-mode.h new file mode 100644 index 0000000..14be20f --- /dev/null +++ b/ports/sysdeps/powerpc/nofpu/get-rounding-mode.h @@ -0,0 +1,35 @@ +/* Determine floating-point rounding mode within libc. PowerPC + soft-float version. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _POWERPC_NOFPU_GET_ROUNDING_MODE_H +#define _POWERPC_NOFPU_GET_ROUNDING_MODE_H 1 + +#include + +#include "soft-supp.h" + +/* Return the floating-point rounding mode. */ + +static inline int +get_rounding_mode (void) +{ + return __sim_round_mode; +} + +#endif /* get-rounding-mode.h */ -- cgit v1.1