From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot1-x330.google.com (mail-ot1-x330.google.com [IPv6:2607:f8b0:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 0B4B7383541E for ; Sun, 23 May 2021 19:04:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0B4B7383541E Received: by mail-ot1-x330.google.com with SMTP id t10-20020a05683022eab0290304ed8bc759so23102104otc.12 for ; Sun, 23 May 2021 12:04:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=NGN+CkUWFqfQT6nzFIbRAhFAmORemQXv0JN357gNQkg=; b=FGREMM5GdF5zcr6JIxsOidIV/FG0dWG/g/CIuyBdartCY6CqjKVLO5HA8jjhYkoLzo CnOqO/il1y1/546Fto5pN/fmB0VNmlrMcLTXFfcD4Us5H0IvSDwLMC2fYCvhRlUO7nDg fuvqYv2ODvtR/9f1mTIWez2Jb3cBtlO5s/H/3Pb1MROOnR581CekZzaY93shm7sfHnQB A6UhQLvifFEWfrPrn4vo3JSKJOHgXzczgeAtRWA2pEDTVG9v8hmjVYJO+YDIXFbHmNWz mRMWr1cwKOmyv+hqKjqb3+8amPBluvUTI8EDl0R/4Cv4qBRtgmM6trvBDNcUEpB0bM63 Xayg== X-Gm-Message-State: AOAM530MVYbj6zNhulwtfEc1Jbi+E9d1vjDc9blunTMFlUsyWan/OE0z XNdjdf3Hd8sWNWV015WhA2AfqaPOx5vUO8hXA8Q= X-Google-Smtp-Source: ABdhPJxjgd2IgW7J6xrVper9913tYDyNgJostVWNpNrMRTXHDpFxGmaqBh50Zc12+vEDCLh7BvOYC0O3/ozGGoRUNQU= X-Received: by 2002:a9d:66d4:: with SMTP id t20mr16465100otm.125.1621796667457; Sun, 23 May 2021 12:04:27 -0700 (PDT) MIME-Version: 1.0 References: <20210522002227.2234377-1-ibmibmibm.tw@gmail.com> <20210522002227.2234377-3-ibmibmibm.tw@gmail.com> In-Reply-To: <20210522002227.2234377-3-ibmibmibm.tw@gmail.com> From: "H.J. Lu" Date: Sun, 23 May 2021 12:03:51 -0700 Message-ID: Subject: Re: [PATCH v6 3/3] Use GCC builtins for roundeven functions if desired. To: Shen-Ta Hsieh Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3033.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 May 2021 19:04:29 -0000 On Fri, May 21, 2021 at 5:23 PM Shen-Ta Hsieh wrote: > > This patch is using the corresponding GCC builtin for roundevenf, > roundeven and roundevenl if the USE_FUNCTION_BUILTIN macros are defined > to one in math-use-builtins.h. > > These builtin functions is supported since GCC 10. > > The code of the generic implementation is not changed. > > Signed-off-by: Shen-Ta Hsieh > --- > sysdeps/generic/math-use-builtins-roundeven.h | 4 ++++ > sysdeps/generic/math-use-builtins.h | 1 + > sysdeps/ieee754/dbl-64/s_roundeven.c | 5 +++++ > sysdeps/ieee754/flt-32/s_roundevenf.c | 5 +++++ > sysdeps/ieee754/ldbl-128/s_roundevenl.c | 5 +++++ > 5 files changed, 20 insertions(+) > create mode 100644 sysdeps/generic/math-use-builtins-roundeven.h > > diff --git a/sysdeps/generic/math-use-builtins-roundeven.h b/sysdeps/generic/math-use-builtins-roundeven.h > new file mode 100644 > index 0000000000..bd2e84c93f > --- /dev/null > +++ b/sysdeps/generic/math-use-builtins-roundeven.h > @@ -0,0 +1,4 @@ > +#define USE_ROUNDEVEN_BUILTIN 0 > +#define USE_ROUNDEVENF_BUILTIN 0 > +#define USE_ROUNDEVENL_BUILTIN 0 > +#define USE_ROUNDEVENF128_BUILTIN 0 > diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h > index cc3e9f2201..19d2d1cf3c 100644 > --- a/sysdeps/generic/math-use-builtins.h > +++ b/sysdeps/generic/math-use-builtins.h > @@ -30,6 +30,7 @@ > #include > #include > #include > +#include > #include > #include > #include > diff --git a/sysdeps/ieee754/dbl-64/s_roundeven.c b/sysdeps/ieee754/dbl-64/s_roundeven.c > index 5deff3bb8a..88c051e9fe 100644 > --- a/sysdeps/ieee754/dbl-64/s_roundeven.c > +++ b/sysdeps/ieee754/dbl-64/s_roundeven.c > @@ -21,6 +21,7 @@ > #include > #include > #include > +#include > > #define BIAS 0x3ff > #define MANT_DIG 53 > @@ -29,6 +30,9 @@ > double > __roundeven (double x) > { > +#if USE_ROUNDEVEN_BUILTIN > + return __builtin_roundeven (x); > +#else > uint64_t ix, ux; > EXTRACT_WORDS64 (ix, x); > ux = ix & 0x7fffffffffffffffULL; > @@ -66,6 +70,7 @@ __roundeven (double x) > ix &= 0x8000000000000000ULL; > INSERT_WORDS64 (x, ix); > return x; > +#endif /* ! USE_ROUNDEVEN_BUILTIN */ > } > #ifndef __roundeven > libm_alias_double (__roundeven, roundeven) > diff --git a/sysdeps/ieee754/flt-32/s_roundevenf.c b/sysdeps/ieee754/flt-32/s_roundevenf.c > index 2cc0d7b001..4f568579d8 100644 > --- a/sysdeps/ieee754/flt-32/s_roundevenf.c > +++ b/sysdeps/ieee754/flt-32/s_roundevenf.c > @@ -21,6 +21,7 @@ > #include > #include > #include > +#include > #include > > #define BIAS 0x7f > @@ -30,6 +31,9 @@ > float > __roundevenf (float x) > { > +#if USE_ROUNDEVENF_BUILTIN > + return __builtin_roundevenf (x); > +#else > uint32_t ix, ux; > GET_FLOAT_WORD (ix, x); > ux = ix & 0x7fffffff; > @@ -67,6 +71,7 @@ __roundevenf (float x) > ix &= 0x80000000; > SET_FLOAT_WORD (x, ix); > return x; > +#endif /* ! USE_ROUNDEVENF_BUILTIN */ > } > #ifndef __roundevenf > libm_alias_float (__roundeven, roundeven) > diff --git a/sysdeps/ieee754/ldbl-128/s_roundevenl.c b/sysdeps/ieee754/ldbl-128/s_roundevenl.c > index 7c9c11fad2..afbf13d4f2 100644 > --- a/sysdeps/ieee754/ldbl-128/s_roundevenl.c > +++ b/sysdeps/ieee754/ldbl-128/s_roundevenl.c > @@ -21,6 +21,7 @@ > #include > #include > #include > +#include > #include > > #define BIAS 0x3fff > @@ -30,6 +31,9 @@ > _Float128 > __roundevenl (_Float128 x) > { > +#if USE_ROUNDEVENL_BUILTIN > + return __builtin_roundevenl (x); > +#else > uint64_t hx, lx, uhx; > GET_LDOUBLE_WORDS64 (hx, lx, x); > uhx = hx & 0x7fffffffffffffffULL; > @@ -101,5 +105,6 @@ __roundevenl (_Float128 x) > } > SET_LDOUBLE_WORDS64 (x, hx, lx); > return x; > +#endif /* ! USE_ROUNDEVENL_BUILTIN */ > } > libm_alias_ldouble (__roundeven, roundeven) > -- > 2.31.1 > Do you need to map USE_ROUNDEVENL_BUILTIN to USE_ROUNDEVENF128_BUILTIN in float128_private.h? -- H.J.