From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10169 invoked by alias); 5 Sep 2016 15:16:56 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 10134 invoked by uid 89); 5 Sep 2016 15:16:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS,URIBL_RED autolearn=ham version=3.3.2 spammy= X-HELO: relay1.mentorg.com Date: Mon, 05 Sep 2016 15:16:00 -0000 From: Joseph Myers To: Yury Norov CC: , , , Subject: Re: [10/12] Add femode_t functions: s390 In-Reply-To: <20160903144759.GC29995@yury-N73SV> Message-ID: References: <20160903143832.GB29995@yury-N73SV> <20160903144759.GC29995@yury-N73SV> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" X-ClientProxiedBy: svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-SW-Source: 2016-09/txt/msg00068.txt.bz2 On Sat, 3 Sep 2016, Yury Norov wrote: > > You do fpc = (fpc & FPC_STATUS) in both branches of condition. > > So you can save few instruction if move this snippet upper, > > and also increase readability. > > > > Not sure how much gcc-s390 is smart, maybe it can do it for you, but > > readability is still in case. > > The same is true for sh, spark, mips and hppa. I've updated the relevant patches. Add femode_t functions: hppa. This patch adds HPPA versions of fegetmode and fesetmode. Untested. 2016-09-02 Joseph Myers * sysdeps/hppa/fpu/fegetmode.c: New file. * sysdeps/hppa/fpu/fesetmode.c: Likewise. diff --git a/sysdeps/hppa/fpu/fegetmode.c b/sysdeps/hppa/fpu/fegetmode.c new file mode 100644 index 0000000..b307495 --- /dev/null +++ b/sysdeps/hppa/fpu/fegetmode.c @@ -0,0 +1,27 @@ +/* Store current floating-point control modes. HPPA version. + Copyright (C) 2016 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 + . */ + +#include +#include + +int +fegetmode (femode_t *modep) +{ + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/hppa/fpu/fesetmode.c b/sysdeps/hppa/fpu/fesetmode.c new file mode 100644 index 0000000..6416dab --- /dev/null +++ b/sysdeps/hppa/fpu/fesetmode.c @@ -0,0 +1,36 @@ +/* Install given floating-point control modes. HPPA version. + Copyright (C) 2016 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 + . */ + +#include +#include + +#define FPU_CONTROL_BITS (_FPU_HPPA_MASK_RM | 0x20 | _FPU_HPPA_MASK_INT) + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t cw; + _FPU_GETCW (cw); + cw &= ~FPU_CONTROL_BITS; + if (modep == FE_DFL_MODE) + cw |= _FPU_DEFAULT; + else + cw |= *modep & FPU_CONTROL_BITS; + _FPU_SETCW (cw); + return 0; +} Add femode_t functions: mips. This patch adds MIPS versions of fegetmode and fesetmode. 2016-09-02 Joseph Myers * sysdeps/mips/fpu/fegetmode.c: New file. * sysdeps/mips/fpu/fesetmode.c: Likewise. diff --git a/sysdeps/mips/fpu/fegetmode.c b/sysdeps/mips/fpu/fegetmode.c new file mode 100644 index 0000000..3754aef --- /dev/null +++ b/sysdeps/mips/fpu/fegetmode.c @@ -0,0 +1,27 @@ +/* Store current floating-point control modes. MIPS version. + Copyright (C) 2016 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 + . */ + +#include +#include + +int +fegetmode (femode_t *modep) +{ + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/mips/fpu/fesetmode.c b/sysdeps/mips/fpu/fesetmode.c new file mode 100644 index 0000000..d15c9eb --- /dev/null +++ b/sysdeps/mips/fpu/fesetmode.c @@ -0,0 +1,38 @@ +/* Install given floating-point control modes. MIPS version. + Copyright (C) 2016 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 + . */ + +#include +#include + +#define FCSR_STATUS 0xfe83f07c + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t cw; + + _FPU_GETCW (cw); + cw &= FCSR_STATUS; + if (modep == FE_DFL_MODE) + cw |= _FPU_DEFAULT; + else + cw |= *modep & ~FCSR_STATUS; + _FPU_SETCW (cw); + + return 0; +} Add femode_t functions: s390. This patch adds S/390 versions of fegetmode and fesetmode. Untested. 2016-09-02 Joseph Myers * sysdeps/s390/fpu/fegetmode.c: New file. * sysdeps/s390/fpu/fesetmode.c: Likewise. diff --git a/sysdeps/s390/fpu/fegetmode.c b/sysdeps/s390/fpu/fegetmode.c new file mode 100644 index 0000000..a6e67c2 --- /dev/null +++ b/sysdeps/s390/fpu/fegetmode.c @@ -0,0 +1,27 @@ +/* Store current floating-point control modes. S/390 version. + Copyright (C) 2016 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 + . */ + +#include +#include + +int +fegetmode (femode_t *modep) +{ + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/s390/fpu/fesetmode.c b/sysdeps/s390/fpu/fesetmode.c new file mode 100644 index 0000000..85a2f2b --- /dev/null +++ b/sysdeps/s390/fpu/fesetmode.c @@ -0,0 +1,39 @@ +/* Install given floating-point control modes. S/390 version. + Copyright (C) 2016 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 + . */ + +#include +#include +#include + +#define FPC_STATUS (FPC_FLAGS_MASK | FPC_DXC_MASK) + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t fpc; + + _FPU_GETCW (fpc); + fpc &= FPC_STATUS; + if (modep == FE_DFL_MODE) + fpc |= _FPU_DEFAULT; + else + fpc |= *modep & ~FPC_STATUS; + _FPU_SETCW (fpc); + + return 0; +} Add femode_t functions: sh. This patch adds SH versions of fegetmode and fesetmode. Untested. 2016-09-02 Joseph Myers * sysdeps/sh/sh4/fpu/fegetmode.c: New file. * sysdeps/sh/sh4/fpu/fesetmode.c: Likewise. diff --git a/sysdeps/sh/sh4/fpu/fegetmode.c b/sysdeps/sh/sh4/fpu/fegetmode.c new file mode 100644 index 0000000..53691b2 --- /dev/null +++ b/sysdeps/sh/sh4/fpu/fegetmode.c @@ -0,0 +1,27 @@ +/* Store current floating-point control modes. SH4 version. + Copyright (C) 2016 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 + . */ + +#include +#include + +int +fegetmode (femode_t *modep) +{ + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/sh/sh4/fpu/fesetmode.c b/sysdeps/sh/sh4/fpu/fesetmode.c new file mode 100644 index 0000000..eb1cddc --- /dev/null +++ b/sysdeps/sh/sh4/fpu/fesetmode.c @@ -0,0 +1,38 @@ +/* Install given floating-point control modes. SH4 version. + Copyright (C) 2016 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 + . */ + +#include +#include + +#define FPU_STATUS 0x3f07c + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t fpscr; + + _FPU_GETCW (fpscr); + fpscr &= FPU_STATUS; + if (modep == FE_DFL_MODE) + fpscr |= _FPU_DEFAULT; + else + fpscr |= *modep & ~FPU_STATUS; + _FPU_SETCW (fpscr); + + return 0; +} Add femode_t functions: sparc. This patch adds SPARC versions of fegetmode and fesetmode. Untested. 2016-09-02 Joseph Myers * sysdeps/sparc/fpu/fegetmode.c: New file. * sysdeps/sparc/fpu/fesetmode.c: Likewise. diff --git a/sysdeps/sparc/fpu/fegetmode.c b/sysdeps/sparc/fpu/fegetmode.c new file mode 100644 index 0000000..68e694e --- /dev/null +++ b/sysdeps/sparc/fpu/fegetmode.c @@ -0,0 +1,26 @@ +/* Store current floating-point control modes. SPARC version. + Copyright (C) 2016 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 + . */ + +#include + +int +fegetmode (femode_t *modep) +{ + __fenv_stfsr (*modep); + return 0; +} diff --git a/sysdeps/sparc/fpu/fesetmode.c b/sysdeps/sparc/fpu/fesetmode.c new file mode 100644 index 0000000..4a0080e --- /dev/null +++ b/sysdeps/sparc/fpu/fesetmode.c @@ -0,0 +1,38 @@ +/* Install given floating-point control modes. SPARC version. + Copyright (C) 2016 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 + . */ + +#include +#include + +#define FPU_CONTROL_BITS 0xcfc00000UL + +int +fesetmode (const femode_t *modep) +{ + femode_t fsr; + + __fenv_stfsr (fsr); + fsr &= ~FPU_CONTROL_BITS; + if (modep == FE_DFL_MODE) + fsr |= _FPU_DEFAULT; + else + fsr |= *modep & FPU_CONTROL_BITS; + __fenv_ldfsr (fsr); + + return 0; +} -- Joseph S. Myers joseph@codesourcery.com