From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 81469 invoked by alias); 29 Apr 2016 10:18:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 81451 invoked by uid 89); 29 Apr 2016 10:18:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=5811, 58,11, Runtime, 58,16 X-HELO: smtprelay.synopsys.com Received: from us01smtprelay-2.synopsys.com (HELO smtprelay.synopsys.com) (198.182.60.111) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Fri, 29 Apr 2016 10:18:14 +0000 Received: from us02secmta1.synopsys.com (us02secmta1.synopsys.com [10.12.235.96]) by smtprelay.synopsys.com (Postfix) with ESMTP id 7E33310C01B5; Fri, 29 Apr 2016 03:18:12 -0700 (PDT) Received: from us02secmta1.internal.synopsys.com (us02secmta1.internal.synopsys.com [127.0.0.1]) by us02secmta1.internal.synopsys.com (Service) with ESMTP id 72A994E214; Fri, 29 Apr 2016 03:18:12 -0700 (PDT) Received: from mailhost.synopsys.com (mailhost3.synopsys.com [10.12.238.238]) by us02secmta1.internal.synopsys.com (Service) with ESMTP id 3D51E4E202; Fri, 29 Apr 2016 03:18:12 -0700 (PDT) Received: from mailhost.synopsys.com (localhost [127.0.0.1]) by mailhost.synopsys.com (Postfix) with ESMTP id 2867BDEF; Fri, 29 Apr 2016 03:18:12 -0700 (PDT) Received: from us01wehtc1.internal.synopsys.com (us01wehtc1.internal.synopsys.com [10.12.239.235]) by mailhost.synopsys.com (Postfix) with ESMTP id E8DDCDEB; Fri, 29 Apr 2016 03:18:11 -0700 (PDT) Received: from IN01WEHTCB.internal.synopsys.com (10.144.199.106) by us01wehtc1.internal.synopsys.com (10.12.239.231) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 29 Apr 2016 03:18:11 -0700 Received: from IN01WEHTCA.internal.synopsys.com (10.144.199.103) by IN01WEHTCB.internal.synopsys.com (10.144.199.105) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 29 Apr 2016 15:48:09 +0530 Received: from nl20droid1.internal.synopsys.com (10.100.24.228) by IN01WEHTCA.internal.synopsys.com (10.144.199.243) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 29 Apr 2016 15:48:09 +0530 From: Claudiu Zissulescu To: CC: , , , Subject: [PATCH] [ARC] Handle FPX NaN within optimized floating point library. Date: Fri, 29 Apr 2016 10:18:00 -0000 Message-ID: <1461924998-9190-1-git-send-email-claziss@synopsys.com> In-Reply-To: <5722261F.1070102@amylaar.uk> References: <5722261F.1070102@amylaar.uk> MIME-Version: 1.0 Content-Type: text/plain X-SW-Source: 2016-04/txt/msg01966.txt.bz2 This is the updated patch on handling FPX NaNs. Ok to apply? Claudiu gcc/ 2016-04-18 Claudiu Zissulescu * testsuite/gcc.target/arc/ieee_eq.c: New test. libgcc/ 2016-04-18 Claudiu Zissulescu * config/arc/ieee-754/eqdf2.S: Handle FPX NaN. --- gcc/testsuite/gcc.target/arc/ieee_eq.c | 47 ++++++++++++++++++++++++++++++++++ libgcc/config/arc/ieee-754/eqdf2.S | 15 +++++++---- 2 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/arc/ieee_eq.c diff --git a/gcc/testsuite/gcc.target/arc/ieee_eq.c b/gcc/testsuite/gcc.target/arc/ieee_eq.c new file mode 100644 index 0000000..70aebad --- /dev/null +++ b/gcc/testsuite/gcc.target/arc/ieee_eq.c @@ -0,0 +1,47 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include +#include + +#define TEST_EQ(TYPE,X,Y,RES) \ + do { \ + volatile TYPE a, b; \ + a = (TYPE) X; \ + b = (TYPE) Y; \ + if ((a == b) != RES) \ + { \ + printf ("Runtime computation error @%d. %g " \ + "!= %g\n", __LINE__, a, b); \ + error = 1; \ + } \ + } while (0) + +#ifndef __HS__ +/* Special type of NaN found when using double FPX instructions. */ +static const unsigned long long __nan = 0x7FF0000080000000ULL; +# define W (*(double *) &__nan) +#else +# define W __builtin_nan ("") +#endif + +#define Q __builtin_nan ("") +#define H __builtin_inf () + +int main (void) +{ + int error = 0; + + TEST_EQ (double, 1, 1, 1); + TEST_EQ (double, 1, 2, 0); + TEST_EQ (double, W, W, 0); + TEST_EQ (double, Q, Q, 0); + TEST_EQ (double, __DBL_MAX__, __DBL_MAX__, 1); + TEST_EQ (double, __DBL_MIN__, __DBL_MIN__, 1); + TEST_EQ (double, H, H, 1); + + if (error) + __builtin_abort (); + + return 0; +} diff --git a/libgcc/config/arc/ieee-754/eqdf2.S b/libgcc/config/arc/ieee-754/eqdf2.S index bc7d88e..7e80ef5 100644 --- a/libgcc/config/arc/ieee-754/eqdf2.S +++ b/libgcc/config/arc/ieee-754/eqdf2.S @@ -58,11 +58,16 @@ __eqdf2: well predictable (as seen from the branch predictor). */ __eqdf2: brne.d DBL0H,DBL1H,.Lhighdiff - bmsk r12,DBL0H,20 -#ifdef DPFP_COMPAT - or.f 0,DBL0L,DBL1L - bset.ne r12,r12,21 -#endif /* DPFP_COMPAT */ +#ifndef __HS__ + /* The next two instructions are required to recognize the FPX + NaN, which has a pattern like this: 0x7ff0_0000_8000_0000, as + oposite to 0x7ff8_0000_0000_0000. */ + or.f 0,DBL0L,DBL1L + mov_s r12,0x00200000 + bset.ne r12,r12,0 +#else + bmsk r12,DBL0H,20 +#endif /* __HS__ */ add1.f r12,r12,DBL0H /* set c iff NaN; also, clear z if NaN. */ j_s.d [blink] cmp.cc DBL0L,DBL1L -- 1.9.1