From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x235.google.com (mail-oi1-x235.google.com [IPv6:2607:f8b0:4864:20::235]) by sourceware.org (Postfix) with ESMTPS id 833B83938C02 for ; Tue, 25 May 2021 12:03:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 833B83938C02 Received: by mail-oi1-x235.google.com with SMTP id s19so30011170oic.7 for ; Tue, 25 May 2021 05:03:30 -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=gkLhZ2os9Pbn3wte/yql20tFV3B5ITlaqorUnjCdt5M=; b=Ezlxgtlr+yR3ePdD2BayFEYBrtOFRFzG8I1JKXHoes2F0vWyfzJEuV44QMPnXP//c+ MBc3QL12UlCV40gkA4Q0Jf36rABB+qTaF/xX2M2desNhYV+YvH2MqaWl8VjUPY5FLrmo +QvVpLQuuyL8TgUtQp4fSk6F8IgYZrH6V6pPgJXZLfcmUSe2SIDVQX+souDHD5owgAcq CVkIi3JgtNioTIsvd5CHfW9t22uunh4AojVQLaUJIVMEEV+UOR00QwpzJFKFDuCyYhFn taUjyugMPEk2cSKRtTUyXnZIkmPufsGWI+8feIJXtDj2SO2RWvUQtNhdvSzbAeajDVw6 gSXA== X-Gm-Message-State: AOAM53186n+i3d2FPIJAc2EHJiysOQpWVnUv58EMuGyNPaVoawXPUsdu vrtk/5mOJLlG8tx81hfGQt/hY7Z46INIvWsPx5I= X-Google-Smtp-Source: ABdhPJwb2t5mVnnk7SF+/0uhwv6t9q3tvxYXDS23l+6hYF/DA68Gbrg01NIL/ZA+dfQp7wT42sahq+evC5q1ChQBcTo= X-Received: by 2002:a05:6808:a8f:: with SMTP id q15mr2532346oij.35.1621944209903; Tue, 25 May 2021 05:03:29 -0700 (PDT) MIME-Version: 1.0 References: <20210524014312.4111807-1-ibmibmibm.tw@gmail.com> <20210524014312.4111807-2-ibmibmibm.tw@gmail.com> In-Reply-To: <20210524014312.4111807-2-ibmibmibm.tw@gmail.com> From: "H.J. Lu" Date: Tue, 25 May 2021 05:02:53 -0700 Message-ID: Subject: Re: [PATCH v7 2/3] x86_64: roundeven with sse4.1 support To: Shen-Ta Hsieh Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3033.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, 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: Tue, 25 May 2021 12:03:32 -0000 On Sun, May 23, 2021 at 6:43 PM Shen-Ta Hsieh wrote: > > This patch adds support for the sse4.1 hardware floating point > roundeven. > > Here is some benchmark results on my systems: > > =AMD Ryzen 9 3900X 12-Core Processor= > > * benchmark result before this commit > | | roundeven | roundevenf | > |------------|--------------|--------------| > | duration | 3.75587e+09 | 3.75114e+09 | > | iterations | 3.93053e+08 | 4.35402e+08 | > | max | 52.592 | 58.71 | > | min | 7.98 | 7.22 | > | mean | 9.55563 | 8.61535 | > > * benchmark result after this commit > | | roundeven | roundevenf | > |------------|---------------|--------------| > | duration | 3.73815e+09 | 3.73738e+09 | > | iterations | 5.82692e+08 | 5.91498e+08 | > | max | 56.468 | 51.642 | > | min | 6.27 | 6.156 | > | mean | 6.41532 | 6.3185 | > > =Intel(R) Pentium(R) CPU D1508 @ 2.20GHz= > > * benchmark result before this commit > | | roundeven | roundevenf | > |------------|--------------|--------------| > | duration | 2.18208e+09 | 2.18258e+09 | > | iterations | 2.39932e+08 | 2.46924e+08 | > | max | 96.378 | 98.035 | > | min | 6.776 | 5.94 | > | mean | 9.09456 | 8.83907 | > > * benchmark result after this commit > | | roundeven | roundevenf | > |------------|--------------|--------------| > | duration | 2.17415e+09 | 2.17005e+09 | > | iterations | 3.56193e+08 | 4.09824e+08 | > | max | 51.693 | 97.192 | > | min | 5.926 | 5.093 | > | mean | 6.10385 | 5.29507 | > > Signed-off-by: Shen-Ta Hsieh > --- > sysdeps/x86_64/fpu/multiarch/Makefile | 5 +-- > sysdeps/x86_64/fpu/multiarch/s_roundeven-c.c | 2 ++ > .../x86_64/fpu/multiarch/s_roundeven-sse4_1.S | 24 ++++++++++++++ > sysdeps/x86_64/fpu/multiarch/s_roundeven.c | 31 +++++++++++++++++++ > sysdeps/x86_64/fpu/multiarch/s_roundevenf-c.c | 3 ++ > .../fpu/multiarch/s_roundevenf-sse4_1.S | 24 ++++++++++++++ > sysdeps/x86_64/fpu/multiarch/s_roundevenf.c | 31 +++++++++++++++++++ > 7 files changed, 118 insertions(+), 2 deletions(-) > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundeven-c.c > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundeven-sse4_1.S > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundeven.c > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundevenf-c.c > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundevenf-sse4_1.S > create mode 100644 sysdeps/x86_64/fpu/multiarch/s_roundevenf.c > > diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile > index 57892c56bb..d425ffd6d3 100644 > --- a/sysdeps/x86_64/fpu/multiarch/Makefile > +++ b/sysdeps/x86_64/fpu/multiarch/Makefile > @@ -1,11 +1,12 @@ > ifeq ($(subdir),math) > libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \ > s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c \ > - s_trunc-c s_truncf-c > + s_roundeven-c s_roundevenf-c s_trunc-c s_truncf-c > > libm-sysdep_routines += s_ceil-sse4_1 s_ceilf-sse4_1 s_floor-sse4_1 \ > s_floorf-sse4_1 s_nearbyint-sse4_1 \ > - s_nearbyintf-sse4_1 s_rint-sse4_1 s_rintf-sse4_1 \ > + s_nearbyintf-sse4_1 s_roundeven-sse4_1 \ > + s_roundevenf-sse4_1 s_rint-sse4_1 s_rintf-sse4_1 \ > s_trunc-sse4_1 s_truncf-sse4_1 > > libm-sysdep_routines += e_exp-fma e_log-fma e_pow-fma s_atan-fma \ > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundeven-c.c b/sysdeps/x86_64/fpu/multiarch/s_roundeven-c.c > new file mode 100644 > index 0000000000..c7be43cb22 > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundeven-c.c > @@ -0,0 +1,2 @@ > +#define __roundeven __roundeven_c > +#include > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundeven-sse4_1.S b/sysdeps/x86_64/fpu/multiarch/s_roundeven-sse4_1.S > new file mode 100644 > index 0000000000..6ae8f6b1d3 > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundeven-sse4_1.S > @@ -0,0 +1,24 @@ > +/* Copyright (C) 2021 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 > + > + .section .text.sse4.1,"ax",@progbits > +ENTRY(__roundeven_sse41) > + roundsd $8, %xmm0, %xmm0 > + ret > +END(__roundeven_sse41) > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundeven.c b/sysdeps/x86_64/fpu/multiarch/s_roundeven.c > new file mode 100644 > index 0000000000..d92eda652a > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundeven.c > @@ -0,0 +1,31 @@ > +/* Multiple versions of __roundeven. > + Copyright (C) 2021 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 > + > +#define roundeven __redirect_roundeven > +#define __roundeven __redirect___roundeven > +#include > +#undef roundeven > +#undef __roundeven > + > +#define SYMBOL_NAME roundeven > +#include "ifunc-sse4_1.h" > + > +libc_ifunc_redirected (__redirect_roundeven, __roundeven, IFUNC_SELECTOR ()); > +libm_alias_double (__roundeven, roundeven) > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundevenf-c.c b/sysdeps/x86_64/fpu/multiarch/s_roundevenf-c.c > new file mode 100644 > index 0000000000..72a6e7d1fb > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundevenf-c.c > @@ -0,0 +1,3 @@ > +#undef __roundevenf > +#define __roundevenf __roundevenf_c > +#include > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundevenf-sse4_1.S b/sysdeps/x86_64/fpu/multiarch/s_roundevenf-sse4_1.S > new file mode 100644 > index 0000000000..a76e10807e > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundevenf-sse4_1.S > @@ -0,0 +1,24 @@ > +/* Copyright (C) 2021 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 > + > + .section .text.sse4.1,"ax",@progbits > +ENTRY(__roundevenf_sse41) > + roundss $8, %xmm0, %xmm0 > + ret > +END(__roundevenf_sse41) > diff --git a/sysdeps/x86_64/fpu/multiarch/s_roundevenf.c b/sysdeps/x86_64/fpu/multiarch/s_roundevenf.c > new file mode 100644 > index 0000000000..2ee196e68f > --- /dev/null > +++ b/sysdeps/x86_64/fpu/multiarch/s_roundevenf.c > @@ -0,0 +1,31 @@ > +/* Multiple versions of __roundevenf. > + Copyright (C) 2021 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 > + > +#define roundevenf __redirect_roundevenf > +#define __roundevenf __redirect___roundevenf > +#include > +#undef roundevenf > +#undef __roundevenf > + > +#define SYMBOL_NAME roundevenf > +#include "ifunc-sse4_1.h" > + > +libc_ifunc_redirected (__redirect_roundevenf, __roundevenf, IFUNC_SELECTOR ()); > +libm_alias_float (__roundeven, roundeven) > -- > 2.31.1 > LGTM. Reviewed-by: H.J. Lu Thanks. -- H.J.