From patchwork Tue Jul 5 09:46:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 55745 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 97EFD3854140 for ; Tue, 5 Jul 2022 09:50:53 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id 21BBD385828E for ; Tue, 5 Jul 2022 09:50:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 21BBD385828E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sifive.com Received: by mail-pl1-x62f.google.com with SMTP id d5so10518431plo.12 for ; Tue, 05 Jul 2022 02:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rnxS74pQhnzJjfjiALtGqhFXwb9fwGI4Lw/1SmC01Yw=; b=BpPAQllOu36QF57i2VEQ7gcWkKnHG2vHUvYqZ5nrQM1QDEX9Q9XNE/Jh1lqiPew9o8 mqOfZqXjvQOJ4InW64zFbWnwjMZkbR0D1+JYznh6qu2mX3qLu8YIfuVEOV4R1Eo70HTa xC/T30RbAKM4j6vHYkIy4NAtKMTdsvY9dyMRQfJsPSNQqPxicDgIwX3bhG3gb6WofRGZ il4YtuNgbz5FfQsoepwAU9L0zBvduyIZ2Bu+hzznWeyiW9ddQLo112KDm0oL1mw2OrKp Xgv7FWUsOb8zikrzpDN0MCSd5NppBwbhu+qg+0yjcN9IrHmeUiucvSslzd5pyg7hVwu2 MBhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rnxS74pQhnzJjfjiALtGqhFXwb9fwGI4Lw/1SmC01Yw=; b=PyaEtKhWDXZrn645SM2k7K55oFzpbj/fRzlediEaJTTGSc9hJycEgHVZ/CHbOaj98I dxuBDjsc5qV5QpLGARFLGdISo3L/NMGB0mZBulNiGEaSDVLv4YZmHCkJOoW10jWTnuNw DX9MiZHiaLF7di3MeIuqH0Vzy+UbNcLgBv89DUmVfjX3XEIC+1ZgnPjiAehlFUadA8ap +0eT7MCQ/N6CDV+iOBeUZnF6zSdxlqAo/dCtOp9jRVeEUR5/vjcs1tPtouDAK6zuxdJF Ts98p8pXxqMV0g/KX9beJsfk2dVHgOhkxaSWWvUs4eYn/w4i3T+DNholvhAfVqQfwlxk /cAg== X-Gm-Message-State: AJIora+BvEoMjublaAiWLtxezAYBvdbqFTVU8OfakdCyu6vJKuzdNzLe 1md6FvRlFFLv4cP0LHAFLWBp657SVDhChA== X-Google-Smtp-Source: AGRyM1vXW6LXCIfP9cbN0yCtrAkh+KB9DF9kPsIvjngz+7GMt41CbtPcWKvmn+vLc/424wx9YbjVZw== X-Received: by 2002:a17:902:d581:b0:16b:e6b8:4080 with SMTP id k1-20020a170902d58100b0016be6b84080mr8189123plh.146.1657014637412; Tue, 05 Jul 2022 02:50:37 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id b5-20020a170902bd4500b0016a565f3f34sm22485700plx.168.2022.07.05.02.50.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 02:50:36 -0700 (PDT) From: Kito Cheng To: libc-alpha@sourceware.org, joseph@codesourcery.com Subject: [PATCH] soft-fp: Add fixhf[uns][di|si] and float[uns][di|si]hf Date: Tue, 5 Jul 2022 17:46:31 +0800 Message-Id: <20220705094631.2162-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.34.0 MIME-Version: 1.0 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: , Cc: Kito Cheng Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Add more IEEE half conversion routines: - Convert 32-bit/64-bit integer to IEEE half. - Convert IEEE half to 32-bit/64-bit integer. They are required by RISC-V _Float16 support, tested with RISC-V GCC. --- soft-fp/fixhfdi.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/fixhfsi.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/fixunshfdi.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/fixunshfsi.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/floatdihf.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/floatsihf.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/floatundihf.c | 45 +++++++++++++++++++++++++++++++++++++++++++ soft-fp/floatunsihf.c | 45 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 360 insertions(+) create mode 100644 soft-fp/fixhfdi.c create mode 100644 soft-fp/fixhfsi.c create mode 100644 soft-fp/fixunshfdi.c create mode 100644 soft-fp/fixunshfsi.c create mode 100644 soft-fp/floatdihf.c create mode 100644 soft-fp/floatsihf.c create mode 100644 soft-fp/floatundihf.c create mode 100644 soft-fp/floatunsihf.c diff --git a/soft-fp/fixhfdi.c b/soft-fp/fixhfdi.c new file mode 100644 index 0000000000..630a1e3c5f --- /dev/null +++ b/soft-fp/fixhfdi.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a IEEE half to 64bit signed integer + Copyright (C) 2022 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" + +DItype +__fixhfdi (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_TO_INT_H (r, A, DI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/soft-fp/fixhfsi.c b/soft-fp/fixhfsi.c new file mode 100644 index 0000000000..4699a75533 --- /dev/null +++ b/soft-fp/fixhfsi.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a IEEE half to 32bit signed integer + Copyright (C) 2022 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" + +SItype +__fixhfsi (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_TO_INT_H (r, A, SI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/soft-fp/fixunshfdi.c b/soft-fp/fixunshfdi.c new file mode 100644 index 0000000000..3ca9c1aee4 --- /dev/null +++ b/soft-fp/fixunshfdi.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE half to 64bit unsigned integer + Copyright (C) 2022 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" + +UDItype +__fixunshfdi (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_TO_INT_H (r, A, DI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/soft-fp/fixunshfsi.c b/soft-fp/fixunshfsi.c new file mode 100644 index 0000000000..66dd6996ba --- /dev/null +++ b/soft-fp/fixunshfsi.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert IEEE half to 32bit unsigned integer + Copyright (C) 2022 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" + +USItype +__fixunshfsi (HFtype a) +{ + FP_DECL_EX; + FP_DECL_H (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_H (A, a); + FP_TO_INT_H (r, A, SI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/soft-fp/floatdihf.c b/soft-fp/floatdihf.c new file mode 100644 index 0000000000..284a516cb9 --- /dev/null +++ b/soft-fp/floatdihf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 64bit signed integer to IEEE half + Copyright (C) 2022 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" + +HFtype +__floatdihf (DItype i) +{ + FP_DECL_EX; + FP_DECL_H (A); + HFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_H (A, i, DI_BITS, UDItype); + FP_PACK_RAW_H (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/soft-fp/floatsihf.c b/soft-fp/floatsihf.c new file mode 100644 index 0000000000..2caa11d99c --- /dev/null +++ b/soft-fp/floatsihf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit signed integer to IEEE half + Copyright (C) 2022 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" + +HFtype +__floatsihf (SItype i) +{ + FP_DECL_EX; + FP_DECL_H (A); + HFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_H (A, i, SI_BITS, USItype); + FP_PACK_RAW_H (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/soft-fp/floatundihf.c b/soft-fp/floatundihf.c new file mode 100644 index 0000000000..f325a8099e --- /dev/null +++ b/soft-fp/floatundihf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 64bit unsigned integer to IEEE half. + Copyright (C) 2022 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" + +HFtype +__floatundihf (UDItype i) +{ + FP_DECL_EX; + FP_DECL_H (A); + HFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_H (A, i, DI_BITS, UDItype); + FP_PACK_RAW_H (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/soft-fp/floatunsihf.c b/soft-fp/floatunsihf.c new file mode 100644 index 0000000000..8d690a038f --- /dev/null +++ b/soft-fp/floatunsihf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit unsigned integer to IEEE half. + Copyright (C) 2022 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" + +HFtype +__floatunsihf (USItype i) +{ + FP_DECL_EX; + FP_DECL_H (A); + HFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_H (A, i, SI_BITS, USItype); + FP_PACK_RAW_H (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +}