From patchwork Mon Nov 7 14:05:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiaolin Tang X-Patchwork-Id: 55270 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A4A0C385AE75 for ; Mon, 7 Nov 2022 14:06:18 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 3316A3858C74 for ; Mon, 7 Nov 2022 14:05:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3316A3858C74 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.2.5.5]) by gateway (Coremail) with SMTP id _____8Cxq9inEGljpw0FAA--.16352S3; Mon, 07 Nov 2022 22:05:28 +0800 (CST) Received: from 5.5.5 (unknown [10.2.5.5]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Cxb+KkEGljEHoOAA--.40708S2; Mon, 07 Nov 2022 22:05:25 +0800 (CST) From: Xiaolin Tang To: adhemerval.zanella@linaro.org, libc-alpha@sourceware.org, i.swmail@xen0n.name Cc: caiyinyu@loongson.cn, xry111@xry111.site, xuchenghua@loongson.cn, chenglulu@loongson.cn, Xiaolin Tang Subject: [PATCH v2 00/10] LoongArch: Hard Float Support Of Math Functions. Date: Mon, 7 Nov 2022 22:05:13 +0800 Message-Id: <20221107140523.896735-1-tangxiaolin@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-CM-TRANSID: AQAAf8Cxb+KkEGljEHoOAA--.40708S2 X-CM-SenderInfo: pwdqw5xldrzx3q6o00pqjv00gofq/ X-Coremail-Antispam: 1Uk129KBjvJXoWxtw43trWDAw47XF4fGF13twb_yoW3Gw1Upr Z7urn8Jr43GryftrZIy3WagFn5JF4kGr47ZF1av34kX3yIqrn5Zrs2y34DXF13Xw1xGryk WF95K3WDWF15J3JanT9S1TB71UUUUUDqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU b7kYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVWUJVWUCwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwA2z4 x0Y4vEx4A2jsIE14v26r4UJVWxJr1l84ACjcxK6I8E87Iv6xkF7I0E14v26F4UJVW0owAS 0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07AIYIkI8VC2zVCFFI0UMc02F40EFcxC0V AKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1l Ox8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JMxAIw28IcxkI7VAKI48JMxC20s 026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_ JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14 v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI42IY6xAIw20EY4v20xva j40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJV W8JbIYCTnIWIevJa73UjIFyTuYvjxUwmhFDUUUU X-Spam-Status: No, score=-5.2 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: , Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Hi, reviewers. Those patches contains hardware floating-point support of math fuctions for the LoongArch ISA. LoongArch ISA has many hardware floating-point instructions that can be used in the corresponding math functions, and the performance of those newly implemented functions is good. Changes from v1 to v2: 1. Delete copysign{f/ } to implement it on compiler. (https://gcc.gnu.org/pipermail/gcc-patches/2022-November/605071.html) 2. Replace __builtin_expect with __glibc_likely or __glibc_unlikely. 3. Add a brief description on each file header. 4. Split one patch to ten patches for similar functions implementation. instructions functions fma.{s/d} __fma{f/ } f{max/min}.{s/d}, fclass.{s/d} __f{max/min}i{mum/mum_mum}{f/ } f{maxa/mina}.{s/d} __f{max,min}mag{f/ } f{maxa/mina}.{s/d}, fclass.{s/d __f{max/min}imum{_mag/_mag_num}{f/ } frint.{s/d} __{ /l/ll}rint{f/ } fscaleb.{s/d}, fclass.{s/d} __scalbn{f/ }, __ieee754__scalb{f/ } flogb.{s/d}, fclass.{s/d} __logb{f/ }, __ieee754_ilogb{f/ } fclass.{s/d} __fpclassify{f/ }, __issignaling{f/ } __finite{f/ }, __isnan{f/ }, isinff{f/ } Xiaolin Tang (10): LoongArch: Hard Float Support for functions {ll/l/ }rint{f/ }. LoongArch: Use __builtin_{fma, fmaf} to implement function {fma, fmaf}. LoongArch: Hard Float Support for float-point classification functions. LoongArch: Hard Float Support for functions logb{f/ }, __ieee754_ilogb{f/ }. LoongArch: Hard Float Support for functions scalb{f/ }, scalbn{f/ }. LoongArch: Hard Float Support for fmaximum{f/ }, fminimum{f/ }. LoongArch: Hard Float Support for fmaximum_num{f/ }, fminimum_num{f/ }. LoongArch: Hard Float Support for fmaxmag{f/ }, fminmag{f/ }. LoongArch: Hard Float Support for fmaximum_mag{f/ }, fminimum_mag{f/ }. LoongArch: Hard Float Support for fmaximum_mag_num{f/ }, fminimum_mag_num{f/ }. sysdeps/loongarch/fpu/e_ilogb.c | 39 ++++++++++++ sysdeps/loongarch/fpu/e_ilogbf.c | 39 ++++++++++++ sysdeps/loongarch/fpu/e_scalb.c | 61 +++++++++++++++++++ sysdeps/loongarch/fpu/e_scalbf.c | 61 +++++++++++++++++++ sysdeps/loongarch/fpu/math-use-builtins-fma.h | 4 ++ sysdeps/loongarch/fpu/s_finite.c | 30 +++++++++ sysdeps/loongarch/fpu/s_finitef.c | 30 +++++++++ sysdeps/loongarch/fpu/s_fmaximum.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_mag.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_mag_num.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_mag_numf.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_magf.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_num.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fmaximum_numf.c | 49 +++++++++++++++ sysdeps/loongarch/fpu/s_fmaximumf.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fmaxmag.c | 29 +++++++++ sysdeps/loongarch/fpu/s_fmaxmagf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_fminimum.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fminimum_mag.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fminimum_mag_num.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fminimum_mag_numf.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fminimum_magf.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fminimum_num.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fminimum_numf.c | 48 +++++++++++++++ sysdeps/loongarch/fpu/s_fminimumf.c | 40 ++++++++++++ sysdeps/loongarch/fpu/s_fminmag.c | 29 +++++++++ sysdeps/loongarch/fpu/s_fminmagf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_fpclassify.c | 38 ++++++++++++ sysdeps/loongarch/fpu/s_fpclassifyf.c | 38 ++++++++++++ sysdeps/loongarch/fpu/s_isinf.c | 30 +++++++++ sysdeps/loongarch/fpu/s_isinff.c | 30 +++++++++ sysdeps/loongarch/fpu/s_isnan.c | 31 ++++++++++ sysdeps/loongarch/fpu/s_isnanf.c | 31 ++++++++++ sysdeps/loongarch/fpu/s_issignaling.c | 29 +++++++++ sysdeps/loongarch/fpu/s_issignalingf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_llrint.c | 29 +++++++++ sysdeps/loongarch/fpu/s_llrintf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_logb.c | 30 +++++++++ sysdeps/loongarch/fpu/s_logbf.c | 30 +++++++++ sysdeps/loongarch/fpu/s_lrint.c | 29 +++++++++ sysdeps/loongarch/fpu/s_lrintf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_rint.c | 29 +++++++++ sysdeps/loongarch/fpu/s_rintf.c | 29 +++++++++ sysdeps/loongarch/fpu/s_scalbn.c | 29 +++++++++ sysdeps/loongarch/fpu/s_scalbnf.c | 29 +++++++++ sysdeps/loongarch/fpu_control.h | 17 ++++++ 46 files changed, 1650 insertions(+) create mode 100644 sysdeps/loongarch/fpu/e_ilogb.c create mode 100644 sysdeps/loongarch/fpu/e_ilogbf.c create mode 100644 sysdeps/loongarch/fpu/e_scalb.c create mode 100644 sysdeps/loongarch/fpu/e_scalbf.c create mode 100644 sysdeps/loongarch/fpu/math-use-builtins-fma.h create mode 100644 sysdeps/loongarch/fpu/s_finite.c create mode 100644 sysdeps/loongarch/fpu/s_finitef.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_mag.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_mag_num.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_mag_numf.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_magf.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_num.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximum_numf.c create mode 100644 sysdeps/loongarch/fpu/s_fmaximumf.c create mode 100644 sysdeps/loongarch/fpu/s_fmaxmag.c create mode 100644 sysdeps/loongarch/fpu/s_fmaxmagf.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_mag.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_mag_num.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_mag_numf.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_magf.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_num.c create mode 100644 sysdeps/loongarch/fpu/s_fminimum_numf.c create mode 100644 sysdeps/loongarch/fpu/s_fminimumf.c create mode 100644 sysdeps/loongarch/fpu/s_fminmag.c create mode 100644 sysdeps/loongarch/fpu/s_fminmagf.c create mode 100644 sysdeps/loongarch/fpu/s_fpclassify.c create mode 100644 sysdeps/loongarch/fpu/s_fpclassifyf.c create mode 100644 sysdeps/loongarch/fpu/s_isinf.c create mode 100644 sysdeps/loongarch/fpu/s_isinff.c create mode 100644 sysdeps/loongarch/fpu/s_isnan.c create mode 100644 sysdeps/loongarch/fpu/s_isnanf.c create mode 100644 sysdeps/loongarch/fpu/s_issignaling.c create mode 100644 sysdeps/loongarch/fpu/s_issignalingf.c create mode 100644 sysdeps/loongarch/fpu/s_llrint.c create mode 100644 sysdeps/loongarch/fpu/s_llrintf.c create mode 100644 sysdeps/loongarch/fpu/s_logb.c create mode 100644 sysdeps/loongarch/fpu/s_logbf.c create mode 100644 sysdeps/loongarch/fpu/s_lrint.c create mode 100644 sysdeps/loongarch/fpu/s_lrintf.c create mode 100644 sysdeps/loongarch/fpu/s_rint.c create mode 100644 sysdeps/loongarch/fpu/s_rintf.c create mode 100644 sysdeps/loongarch/fpu/s_scalbn.c create mode 100644 sysdeps/loongarch/fpu/s_scalbnf.c