From patchwork Mon Sep 5 11:17:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Liebler X-Patchwork-Id: 15338 Received: (qmail 102264 invoked by alias); 5 Sep 2016 11:17:59 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 102250 invoked by uid 89); 5 Sep 2016 11:17:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW, URIBL_RED autolearn=no version=3.3.2 spammy=omits X-HELO: mx0a-001b2d01.pphosted.com X-IBM-Helo: d06dlp01.portsmouth.uk.ibm.com X-IBM-MailFrom: stli@linux.vnet.ibm.com X-IBM-RcptTo: libc-alpha@sourceware.org Subject: Re: [10/12] Add femode_t functions: s390 To: libc-alpha@sourceware.org References: From: Stefan Liebler Date: Mon, 5 Sep 2016 13:17:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 MIME-Version: 1.0 In-Reply-To: X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16090511-0020-0000-0000-0000023E0491 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16090511-0021-0000-0000-00003DEC8890 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-09-05_05:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=4 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1609050172 On 09/02/2016 11:58 PM, Joseph Myers wrote: > 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..8feb9b6 > --- /dev/null > +++ b/sysdeps/s390/fpu/fesetmode.c > @@ -0,0 +1,38 @@ > +/* 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); > + if (modep == FE_DFL_ENV) > + fpc = (fpc & FPC_STATUS) | _FPU_DEFAULT; > + else > + fpc = (fpc & FPC_STATUS) | (*modep & ~FPC_STATUS); > + _FPU_SETCW (fpc); > + > + return 0; > +} > Hi Joseph, please compare against FE_DFL_MODE as you would compare different pointer types instead: Afterwards, glibc builds on s390/s390x and the new testcases run successfully. Only as a side note to Yuri's comment: gcc-s390 is smart enough and moves the (fpc & FPC_STATUS) up. Furthermore it omits the or'ing with _FPU_DEFAULT as it is zero. Thanks. Stefan diff --git a/sysdeps/s390/fpu/fesetmode.c b/sysdeps/s390/fpu/fesetmode.c index 8feb9b6..f95a777 100644 --- a/sysdeps/s390/fpu/fesetmode.c +++ b/sysdeps/s390/fpu/fesetmode.c @@ -28,7 +28,7 @@ fesetmode (const femode_t *modep) fpu_control_t fpc; _FPU_GETCW (fpc); - if (modep == FE_DFL_ENV) + if (modep == FE_DFL_MODE) fpc = (fpc & FPC_STATUS) | _FPU_DEFAULT; else fpc = (fpc & FPC_STATUS) | (*modep & ~FPC_STATUS);