From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by sourceware.org (Postfix) with ESMTPS id 7FAD6395542C for ; Wed, 7 Jul 2021 15:13:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7FAD6395542C Received: by mail-pj1-x102e.google.com with SMTP id fs7so1737928pjb.2 for ; Wed, 07 Jul 2021 08:13:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ygnks834z4dLnzGguayw19FgHpIezFQfAUbQsqsYsbk=; b=So23JrQ4yhqsgJPufzIhxFSdZZHpFkBWscBqz4qu1B7fE8bf0wNhtRV5DqnVAL1zcU QUPGRZnBjyfW0YkGIXfggNAlT5KOcrimlx955Q4qN7D2MF8dDQFRJhEjFhGU8/3DLqcn 14Lbjqyd3rDLgPZ0CTUcsEB3FcK7oj64G8qdCb6bWddozd8apgmqhATdXFOskL4VkOx+ 1SmN7n3nqBMq9752BXQx7oIkPXdGaFLvXX0fVy11sSEIrOAQave78FCWyay3VEIICuIG /kUFZeXJMxwP+480ezRH2RtC5HOxjaTlIzU0FAnezSKp/zO7m/S2jgy1v8a6egv64ivR YRrQ== X-Gm-Message-State: AOAM531FbebeIMr6tdVAfWHKpZSZ2fvU5RgNR6J6SAOJmoXFhY381EMO pc5uYvrmg3UkRRSKjrOz65c= X-Google-Smtp-Source: ABdhPJzyW8g6+b/+f1WxDo8ROfKt4lSfulv+fxUk38WprTqmkCKTVTziblneGRnFeGZ1Y42JXPSdsQ== X-Received: by 2002:a17:902:830a:b029:128:bcba:6be9 with SMTP id bd10-20020a170902830ab0290128bcba6be9mr21761164plb.53.1625670804493; Wed, 07 Jul 2021 08:13:24 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.56.39.115]) by smtp.gmail.com with ESMTPSA id o3sm6753659pjp.27.2021.07.07.08.13.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jul 2021 08:13:24 -0700 (PDT) Received: from gnu-cfl-2.. (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 8D63CC0048; Wed, 7 Jul 2021 08:13:22 -0700 (PDT) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: Joseph Myers , liuhongt Subject: [PATCH] soft-fp: Update soft-fp from glibc Date: Wed, 7 Jul 2021 08:13:22 -0700 Message-Id: <20210707151322.2451471-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3032.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Jul 2021 15:13:27 -0000 From: liuhongt 1. Add __extendhfdf2/__extendhfsf2 to return an IEEE half converted to IEEE double/single. 2. Add __truncdfhf2/__extendsfhf2 to truncate IEEE double/single into IEEE half. 3. Add __eqhf2/__nehf2 to return 0 if a == b and a,b are not NAN, otherwise return 1. These are needed by x86 _Float16. * soft-fp/eqhf2.c: New file. * soft-fp/extendhfdf2.c: Likewise. * soft-fp/extendhfsf2.c: Likewise. * soft-fp/truncdfhf2.c: Likewise. * soft-fp/truncsfhf2.c: Likewise. * soft-fp/half.h (FP_CMP_EQ_H): New. --- libgcc/soft-fp/eqhf2.c | 49 +++++++++++++++++++++++++++++++++ libgcc/soft-fp/extendhfdf2.c | 53 ++++++++++++++++++++++++++++++++++++ libgcc/soft-fp/extendhfsf2.c | 49 +++++++++++++++++++++++++++++++++ libgcc/soft-fp/half.h | 2 ++ libgcc/soft-fp/truncdfhf2.c | 52 +++++++++++++++++++++++++++++++++++ libgcc/soft-fp/truncsfhf2.c | 48 ++++++++++++++++++++++++++++++++ 6 files changed, 253 insertions(+) create mode 100644 libgcc/soft-fp/eqhf2.c create mode 100644 libgcc/soft-fp/extendhfdf2.c create mode 100644 libgcc/soft-fp/extendhfsf2.c create mode 100644 libgcc/soft-fp/truncdfhf2.c create mode 100644 libgcc/soft-fp/truncsfhf2.c diff --git a/libgcc/soft-fp/eqhf2.c b/libgcc/soft-fp/eqhf2.c new file mode 100644 index 00000000000..6d6634e5c54 --- /dev/null +++ b/libgcc/soft-fp/eqhf2.c @@ -0,0 +1,49 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 otherwise + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 "soft-fp.h" +#include "half.h" + +CMPtype +__eqhf2 (HFtype a, HFtype b) +{ + FP_DECL_EX; + FP_DECL_H (A); + FP_DECL_H (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_UNPACK_RAW_H (B, b); + FP_CMP_EQ_H (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__eqhf2, __nehf2); diff --git a/libgcc/soft-fp/extendhfdf2.c b/libgcc/soft-fp/extendhfdf2.c new file mode 100644 index 00000000000..337ba791d48 --- /dev/null +++ b/libgcc/soft-fp/extendhfdf2.c @@ -0,0 +1,53 @@ +/* Software floating-point emulation. + Return an IEEE half converted to IEEE double + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXACT_UNDERFLOW +#include "soft-fp.h" +#include "half.h" +#include "double.h" + +DFtype +__extendhfdf2 (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + FP_DECL_D (R); + DFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_EXTEND (D, H, 2, 1, R, A); +#else + FP_EXTEND (D, H, 1, 1, R, A); +#endif + FP_PACK_RAW_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/libgcc/soft-fp/extendhfsf2.c b/libgcc/soft-fp/extendhfsf2.c new file mode 100644 index 00000000000..a02f46d9a99 --- /dev/null +++ b/libgcc/soft-fp/extendhfsf2.c @@ -0,0 +1,49 @@ +/* Software floating-point emulation. + Return an IEEE half converted to IEEE single + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXACT_UNDERFLOW +#include "soft-fp.h" +#include "half.h" +#include "single.h" + +SFtype +__extendhfsf2 (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + FP_DECL_S (R); + SFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_EXTEND (S, H, 1, 1, R, A); + FP_PACK_RAW_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/libgcc/soft-fp/half.h b/libgcc/soft-fp/half.h index c7823ac61d3..7af8b68ac5f 100644 --- a/libgcc/soft-fp/half.h +++ b/libgcc/soft-fp/half.h @@ -167,4 +167,6 @@ union _FP_UNION_H #define _FP_FRAC_HIGH_RAW_H(X) _FP_FRAC_HIGH_1 (X) #define _FP_FRAC_HIGH_DW_H(X) _FP_FRAC_HIGH_1 (X) +#define FP_CMP_EQ_H(r, X, Y, ex) _FP_CMP_EQ (H, 1, (r), X, Y, (ex)) + #endif /* !SOFT_FP_HALF_H */ diff --git a/libgcc/soft-fp/truncdfhf2.c b/libgcc/soft-fp/truncdfhf2.c new file mode 100644 index 00000000000..8bcb2787692 --- /dev/null +++ b/libgcc/soft-fp/truncdfhf2.c @@ -0,0 +1,52 @@ +/* Software floating-point emulation. + Truncate IEEE double into IEEE half. + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 "soft-fp.h" +#include "half.h" +#include "double.h" + +HFtype +__truncdfhf2 (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_H (R); + HFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_TRUNC (H, D, 1, 2, R, A); +#else + FP_TRUNC (H, D, 1, 1, R, A); +#endif + FP_PACK_SEMIRAW_H (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/libgcc/soft-fp/truncsfhf2.c b/libgcc/soft-fp/truncsfhf2.c new file mode 100644 index 00000000000..25bee29f7f5 --- /dev/null +++ b/libgcc/soft-fp/truncsfhf2.c @@ -0,0 +1,48 @@ +/* Software floating-point emulation. + Truncate IEEE single into IEEE half. + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 "soft-fp.h" +#include "half.h" +#include "single.h" + +HFtype +__truncsfhf2 (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_H (R); + HFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_S (A, a); + FP_TRUNC (H, S, 1, 1, R, A); + FP_PACK_SEMIRAW_H (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} -- 2.31.1