From patchwork Fri Dec 1 10:08:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Yujie X-Patchwork-Id: 81100 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 466753861877 for ; Fri, 1 Dec 2023 10:09:09 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 579763858404 for ; Fri, 1 Dec 2023 10:08:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 579763858404 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 579763858404 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425327; cv=none; b=vq+euzPF0aHjHYU2+tR+S0rYsTUgikW/omSdQZcsWiflqpU1dACLNtUCFp9kFUG5PulqykI2CX+JpJODOotydQifWAODhW4tu9oT4I7vBIe/cGS+ggPJzcoTq9Gvn0E0SqOyaK/hr+BGi0H97UtZmS5hZmT+GxzF5Hu9LDeqdRA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425327; c=relaxed/simple; bh=NAN+o+K4AmuRJhjzLBMHqV2j1cByht7WjWp3uzVpd/I=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=qpU5J0GnnNHe5Jz9/M/KMvi2GQL5WOilgOQpZjpWPn5hZrT6IUgTtB3ulfjXLYmD3jl/yz4Gg8u0klqHfSiachNsJfK2NzaJOmQhie0we3N6zRt1hW/KQQXYnML/ixdLf04Pa+2/Mefq0wAjG2jWVn+PWr9kRQkCAR6J/xXwLsk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from loongson.cn (unknown [114.243.104.185]) by gateway (Coremail) with SMTP id _____8Cx5_GosGlliCs+AA--.58139S3; Fri, 01 Dec 2023 18:08:40 +0800 (CST) Received: from localhost.localdomain (unknown [114.243.104.185]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxLC+lsGllaYRRAA--.8937S3; Fri, 01 Dec 2023 18:08:39 +0800 (CST) From: Yang Yujie To: gcc-patches@gcc.gnu.org Cc: ibuclaw@gdcproject.org, chenglulu@loongson.cn, xuchenghua@loongson.cn, Yang Yujie Subject: [PATCH v3 1/3] LoongArch: Adjust D version strings. Date: Fri, 1 Dec 2023 18:08:25 +0800 Message-ID: <20231201100827.227376-2-yangyujie@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231201100827.227376-1-yangyujie@loongson.cn> References: <20231201100827.227376-1-yangyujie@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8CxLC+lsGllaYRRAA--.8937S3 X-CM-SenderInfo: 51dqw5pxmlvqxorr0wxvrqhubq/1tbiAQAMAGVpQqsJIgAAsD X-Coremail-Antispam: 1Uk129KBj93XoWxXrWftrWkXFWxurWDGrWUKFX_yoW5ZFyrpr y7ur13uF4xJFZxZ3Z7K3sxX3Z8AryxG34xXF4a9ry8ua1UXryvg348tFWYgF4jyay5Cr4S vw18ta43Za1UJwcCm3ZEXasCq-sJn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUk2b4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1Y6r17McIj6I8E87Iv 67AKxVW8JVWxJwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2 Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s02 6x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0x vE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE 42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JVWxJwCI42IY6I8E87Iv6x kF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUcVc_UUUUU X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org gcc/ChangeLog: * config/loongarch/loongarch-d.cc: Undefine LoongArch32. Define LoongArch_SF, LoongArch_F32, LoongArch_F64 gcc/d/ChangeLog: * dmd/cond.d: Same. * implement-d.texi: Same. --- gcc/config/loongarch/loongarch-d.cc | 27 ++++++++++++++------------- gcc/d/dmd/cond.d | 6 +++--- gcc/d/implement-d.texi | 6 ++++++ 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/gcc/config/loongarch/loongarch-d.cc b/gcc/config/loongarch/loongarch-d.cc index 9ac483c39a7..4692b78708a 100644 --- a/gcc/config/loongarch/loongarch-d.cc +++ b/gcc/config/loongarch/loongarch-d.cc @@ -29,24 +29,27 @@ along with GCC; see the file COPYING3. If not see void loongarch_d_target_versions (void) { - if (TARGET_64BIT) + if (TARGET_ABI_LP64) d_add_builtin_version ("LoongArch64"); - else - d_add_builtin_version ("LoongArch32"); - if (TARGET_HARD_FLOAT_ABI) + if (TARGET_DOUBLE_FLOAT_ABI) + { + d_add_builtin_version ("LoongArch_F64"); + d_add_builtin_version ("D_HardFloat"); + } + else if (TARGET_SINGLE_FLOAT_ABI) { - d_add_builtin_version ("LoongArch_HardFloat"); + d_add_builtin_version ("LoongArch_F32"); d_add_builtin_version ("D_HardFloat"); } - else if (TARGET_SOFT_FLOAT_ABI) + else { - d_add_builtin_version ("LoongArch_SoftFloat"); + d_add_builtin_version ("LoongArch_SF"); d_add_builtin_version ("D_SoftFloat"); } } -/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ +/* Handle trait getTargetInfo with key "floatAbi" */ static tree loongarch_d_handle_target_float_abi (void) @@ -55,10 +58,8 @@ loongarch_d_handle_target_float_abi (void) if (TARGET_HARD_FLOAT_ABI) abi = "hard"; - else if (TARGET_SOFT_FLOAT_ABI) - abi = "soft"; else - abi = ""; + abi = "soft"; return build_string_literal (strlen (abi) + 1, abi); } @@ -69,8 +70,8 @@ void loongarch_d_register_target_info (void) { const struct d_target_info_spec handlers[] = { - {"floatAbi", loongarch_d_handle_target_float_abi}, - {NULL, NULL}, + { "floatAbi", loongarch_d_handle_target_float_abi }, + { NULL, NULL }, }; d_add_target_info_handlers (handlers); diff --git a/gcc/d/dmd/cond.d b/gcc/d/dmd/cond.d index 568b639e0b6..02af0cc9e29 100644 --- a/gcc/d/dmd/cond.d +++ b/gcc/d/dmd/cond.d @@ -693,10 +693,10 @@ extern (C++) final class VersionCondition : DVCondition case "LDC": case "linux": case "LittleEndian": - case "LoongArch32": case "LoongArch64": - case "LoongArch_HardFloat": - case "LoongArch_SoftFloat": + case "LoongArch_F64": + case "LoongArch_F32": + case "LoongArch_SF": case "MinGW": case "MIPS32": case "MIPS64": diff --git a/gcc/d/implement-d.texi b/gcc/d/implement-d.texi index 6f33bc192fe..cc0d1ecf593 100644 --- a/gcc/d/implement-d.texi +++ b/gcc/d/implement-d.texi @@ -1966,6 +1966,12 @@ Version relating to GNU Hurd systems. @item linux Version relating to Linux systems. +@item LoongArch64 +@item LoongArch_SF +@item LoongArch_F32 +@item LoongArch_F64 +Versions relating to the LoongArch family of processors. + @item MinGW Version relating to the MinGW environment. From patchwork Fri Dec 1 10:08:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Yujie X-Patchwork-Id: 81102 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 7AE05384DEF5 for ; Fri, 1 Dec 2023 10:09:23 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id 58E3A3857B8B for ; Fri, 1 Dec 2023 10:08:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 58E3A3857B8B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 58E3A3857B8B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:470:142:3::10 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425341; cv=none; b=GAfBkDEgGaVIR25EZUgYtxHzFWkblZb5I1KOJ5NT6VJ1jltCMGyEC0aUyLo26HZDwJhxFq8AYr+hpIs5olPSRd20mtNpWrI7ZSRuRihsbRFegqy+I3qGARhCikFOeUfkJyqB0BCgfsHAd6pnb7Fhwc7eIwmVkqu3Y3v/TEq526E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425341; c=relaxed/simple; bh=XZtIQtDy9hGFgK0lb5LE8Zd+WM+WvEsqmbW6xA3rASI=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=WosfWEWvMilw4/giuoQWWFfC5TBfY7CJ33dXKKtEzu/v4P2BzEsx9whBAKQxDVYXqQB2lq5KVAL5ZLX+2jW38O466RVxW47e+jmgyCzPTa7OgQe13UYrXfVxDQlKQzqDm04v/15oXdsrT25oys5uDfM1etju8N7F8XO0S9M31Xw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from mail.loongson.cn ([114.242.206.163]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r90Ry-00083R-Mm for gcc-patches@gcc.gnu.org; Fri, 01 Dec 2023 05:08:57 -0500 Received: from loongson.cn (unknown [114.243.104.185]) by gateway (Coremail) with SMTP id _____8BxbOqpsGlliis+AA--.30871S3; Fri, 01 Dec 2023 18:08:41 +0800 (CST) Received: from localhost.localdomain (unknown [114.243.104.185]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxLC+lsGllaYRRAA--.8937S4; Fri, 01 Dec 2023 18:08:40 +0800 (CST) From: Yang Yujie To: gcc-patches@gcc.gnu.org Cc: ibuclaw@gdcproject.org, chenglulu@loongson.cn, xuchenghua@loongson.cn, Yang Yujie Subject: [PATCH v3 2/3] libphobos: Update build scripts for LoongArch64. Date: Fri, 1 Dec 2023 18:08:26 +0800 Message-ID: <20231201100827.227376-3-yangyujie@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231201100827.227376-1-yangyujie@loongson.cn> References: <20231201100827.227376-1-yangyujie@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8CxLC+lsGllaYRRAA--.8937S4 X-CM-SenderInfo: 51dqw5pxmlvqxorr0wxvrqhubq/1tbiAQAMAGVpQqsJJAAAsF X-Coremail-Antispam: 1Uk129KBj9fXoW3ur1DJr45WrW3CryrKr4xXwc_yoW8CFy7Go WrWrySqFW0gryfu3Wkt3s7KrWUWa4vqFyUAayaq397KF1kJrnxA3Wjkr15u347tFW0yrn8 XF9xuFW7Z34rA3s8l-sFpf9Il3svdjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8wcxFpf 9Il3svdxBIdaVrn0xqx4xG64xvF2IEw4CE5I8CrVC2j2Jv73VFW2AGmfu7bjvjm3AaLaJ3 UjIYCTnIWjp_UUUY87kC6x804xWl14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI 8IcIk0rVWrJVCq3wAFIxvE14AKwVWUGVWUXwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xG Y2AK021l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14 v26r4j6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAF wI0_Gr1j6F4UJwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07AIYIkI8VC2zVCFFI 0UMc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUAVWUtwAv7VC2z280 aVAFwI0_Gr0_Cr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JMxAIw28Icx kI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2Iq xVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrwCI42 IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI42IY 6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aV CY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7IU8vD73UUUUU== Received-SPF: pass client-ip=114.242.206.163; envelope-from=yangyujie@loongson.cn; helo=mail.loongson.cn X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, SPF_FAIL, SPF_HELO_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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org libphobos/ChangeLog: * m4/druntime/cpu.m4: Support loongarch* targets. * libdruntime/Makefile.am: Same. * libdruntime/Makefile.in: Regenerate. * configure: Regenerate. --- libphobos/configure | 21 ++++++- libphobos/libdruntime/Makefile.am | 3 + libphobos/libdruntime/Makefile.in | 98 +++++++++++++++++++------------ libphobos/m4/druntime/cpu.m4 | 5 ++ 4 files changed, 87 insertions(+), 40 deletions(-) diff --git a/libphobos/configure b/libphobos/configure index 25b13bdd93e..9a59bad34ac 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -696,6 +696,8 @@ DRUNTIME_CPU_POWERPC_FALSE DRUNTIME_CPU_POWERPC_TRUE DRUNTIME_CPU_MIPS_FALSE DRUNTIME_CPU_MIPS_TRUE +DRUNTIME_CPU_LOONGARCH_FALSE +DRUNTIME_CPU_LOONGARCH_TRUE DRUNTIME_CPU_ARM_FALSE DRUNTIME_CPU_ARM_TRUE DRUNTIME_CPU_AARCH64_FALSE @@ -11865,7 +11867,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11868 "configure" +#line 11870 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11971,7 +11973,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11974 "configure" +#line 11976 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14305,6 +14307,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; arm*) druntime_target_cpu_parsed="arm" ;; + loongarch*) + druntime_target_cpu_parsed="loongarch" + ;; mips*) druntime_target_cpu_parsed="mips" ;; powerpc*) @@ -14336,6 +14341,14 @@ else DRUNTIME_CPU_ARM_FALSE= fi + if test "$druntime_target_cpu_parsed" = "loongarch"; then + DRUNTIME_CPU_LOONGARCH_TRUE= + DRUNTIME_CPU_LOONGARCH_FALSE='#' +else + DRUNTIME_CPU_LOONGARCH_TRUE='#' + DRUNTIME_CPU_LOONGARCH_FALSE= +fi + if test "$druntime_target_cpu_parsed" = "mips"; then DRUNTIME_CPU_MIPS_TRUE= DRUNTIME_CPU_MIPS_FALSE='#' @@ -15997,6 +16010,10 @@ if test -z "${DRUNTIME_CPU_ARM_TRUE}" && test -z "${DRUNTIME_CPU_ARM_FALSE}"; th as_fn_error $? "conditional \"DRUNTIME_CPU_ARM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${DRUNTIME_CPU_LOONGARCH_TRUE}" && test -z "${DRUNTIME_CPU_LOONGARCH_FALSE}"; then + as_fn_error $? "conditional \"DRUNTIME_CPU_LOONGARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${DRUNTIME_CPU_MIPS_TRUE}" && test -z "${DRUNTIME_CPU_MIPS_FALSE}"; then as_fn_error $? "conditional \"DRUNTIME_CPU_MIPS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 23205fd3301..ca43a0753c4 100644 --- a/libphobos/libdruntime/Makefile.am +++ b/libphobos/libdruntime/Makefile.am @@ -83,6 +83,9 @@ endif if DRUNTIME_CPU_ARM DRUNTIME_SOURCES_CONFIGURED += config/arm/switchcontext.S endif +if DRUNTIME_CPU_LOONGARCH + DRUNTIME_SOURCES_CONFIGURED += config/loongarch/switchcontext.S +endif if DRUNTIME_CPU_MIPS DRUNTIME_SOURCES_CONFIGURED += config/mips/switchcontext.S endif diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 410245d71ca..f52bf36c282 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -124,12 +124,13 @@ target_triplet = @target@ # CPU specific sources @DRUNTIME_CPU_AARCH64_TRUE@am__append_11 = config/aarch64/switchcontext.S @DRUNTIME_CPU_ARM_TRUE@am__append_12 = config/arm/switchcontext.S -@DRUNTIME_CPU_MIPS_TRUE@am__append_13 = config/mips/switchcontext.S -@DRUNTIME_CPU_POWERPC_TRUE@am__append_14 = config/powerpc/switchcontext.S -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__append_15 = config/mingw/switchcontext.S -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__append_16 = config/x86/switchcontext.S -@DRUNTIME_CPU_SYSTEMZ_TRUE@am__append_17 = config/systemz/get_tls_offset.S -@DRUNTIME_CPU_S390_TRUE@am__append_18 = config/s390/get_tls_offset.S +@DRUNTIME_CPU_LOONGARCH_TRUE@am__append_13 = config/loongarch/switchcontext.S +@DRUNTIME_CPU_MIPS_TRUE@am__append_14 = config/mips/switchcontext.S +@DRUNTIME_CPU_POWERPC_TRUE@am__append_15 = config/powerpc/switchcontext.S +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__append_16 = config/mingw/switchcontext.S +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__append_17 = config/x86/switchcontext.S +@DRUNTIME_CPU_SYSTEMZ_TRUE@am__append_18 = config/systemz/get_tls_offset.S +@DRUNTIME_CPU_S390_TRUE@am__append_19 = config/s390/get_tls_offset.S subdir = libdruntime ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ @@ -485,46 +486,50 @@ am__objects_23 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \ @DRUNTIME_OS_SOLARIS_TRUE@am__objects_24 = $(am__objects_23) @DRUNTIME_CPU_AARCH64_TRUE@am__objects_25 = config/aarch64/libgdruntime_la-switchcontext.lo @DRUNTIME_CPU_ARM_TRUE@am__objects_26 = config/arm/libgdruntime_la-switchcontext.lo -@DRUNTIME_CPU_MIPS_TRUE@am__objects_27 = config/mips/libgdruntime_la-switchcontext.lo -@DRUNTIME_CPU_POWERPC_TRUE@am__objects_28 = config/powerpc/libgdruntime_la-switchcontext.lo -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_29 = config/mingw/libgdruntime_la-switchcontext.lo -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_30 = config/x86/libgdruntime_la-switchcontext.lo -@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_31 = config/systemz/libgdruntime_la-get_tls_offset.lo -@DRUNTIME_CPU_S390_TRUE@am__objects_32 = config/s390/libgdruntime_la-get_tls_offset.lo -am__objects_33 = $(am__objects_6) $(am__objects_8) $(am__objects_10) \ +@DRUNTIME_CPU_LOONGARCH_TRUE@am__objects_27 = config/loongarch/libgdruntime_la-switchcontext.lo +@DRUNTIME_CPU_MIPS_TRUE@am__objects_28 = config/mips/libgdruntime_la-switchcontext.lo +@DRUNTIME_CPU_POWERPC_TRUE@am__objects_29 = config/powerpc/libgdruntime_la-switchcontext.lo +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_30 = config/mingw/libgdruntime_la-switchcontext.lo +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_31 = config/x86/libgdruntime_la-switchcontext.lo +@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_32 = config/systemz/libgdruntime_la-get_tls_offset.lo +@DRUNTIME_CPU_S390_TRUE@am__objects_33 = config/s390/libgdruntime_la-get_tls_offset.lo +am__objects_34 = $(am__objects_6) $(am__objects_8) $(am__objects_10) \ $(am__objects_12) $(am__objects_14) $(am__objects_16) \ $(am__objects_18) $(am__objects_20) $(am__objects_22) \ $(am__objects_24) $(am__objects_25) $(am__objects_26) \ $(am__objects_27) $(am__objects_28) $(am__objects_29) \ - $(am__objects_30) $(am__objects_31) $(am__objects_32) -am__objects_34 = gcc/config.lo gcc/libbacktrace.lo -am__objects_35 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ - $(am__objects_4) $(am__objects_33) $(am__objects_34) -am_libgdruntime_la_OBJECTS = $(am__objects_35) + $(am__objects_30) $(am__objects_31) $(am__objects_32) \ + $(am__objects_33) +am__objects_35 = gcc/config.lo gcc/libbacktrace.lo +am__objects_36 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ + $(am__objects_4) $(am__objects_34) $(am__objects_35) +am_libgdruntime_la_OBJECTS = $(am__objects_36) libgdruntime_la_OBJECTS = $(am_libgdruntime_la_OBJECTS) am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am__objects_36 = core/stdc/libgdruntime_convenience_la-errno_.lo \ +am__objects_37 = core/stdc/libgdruntime_convenience_la-errno_.lo \ etc/valgrind/libgdruntime_convenience_la-valgrind_.lo -@DRUNTIME_OS_MINGW_TRUE@am__objects_37 = $(am__objects_21) \ +@DRUNTIME_OS_MINGW_TRUE@am__objects_38 = $(am__objects_21) \ @DRUNTIME_OS_MINGW_TRUE@ config/mingw/libgdruntime_convenience_la-msvc.lo -@DRUNTIME_CPU_AARCH64_TRUE@am__objects_38 = config/aarch64/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_ARM_TRUE@am__objects_39 = config/arm/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_MIPS_TRUE@am__objects_40 = config/mips/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_POWERPC_TRUE@am__objects_41 = config/powerpc/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_42 = config/mingw/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_43 = config/x86/libgdruntime_convenience_la-switchcontext.lo -@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_44 = config/systemz/libgdruntime_convenience_la-get_tls_offset.lo -@DRUNTIME_CPU_S390_TRUE@am__objects_45 = config/s390/libgdruntime_convenience_la-get_tls_offset.lo -am__objects_46 = $(am__objects_6) $(am__objects_8) $(am__objects_10) \ +@DRUNTIME_CPU_AARCH64_TRUE@am__objects_39 = config/aarch64/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_ARM_TRUE@am__objects_40 = config/arm/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_LOONGARCH_TRUE@am__objects_41 = config/loongarch/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_MIPS_TRUE@am__objects_42 = config/mips/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_POWERPC_TRUE@am__objects_43 = config/powerpc/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_44 = config/mingw/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_45 = config/x86/libgdruntime_convenience_la-switchcontext.lo +@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_46 = config/systemz/libgdruntime_convenience_la-get_tls_offset.lo +@DRUNTIME_CPU_S390_TRUE@am__objects_47 = config/s390/libgdruntime_convenience_la-get_tls_offset.lo +am__objects_48 = $(am__objects_6) $(am__objects_8) $(am__objects_10) \ $(am__objects_12) $(am__objects_14) $(am__objects_16) \ - $(am__objects_18) $(am__objects_20) $(am__objects_37) \ - $(am__objects_24) $(am__objects_38) $(am__objects_39) \ - $(am__objects_40) $(am__objects_41) $(am__objects_42) \ - $(am__objects_43) $(am__objects_44) $(am__objects_45) -am__objects_47 = $(am__objects_1) $(am__objects_36) $(am__objects_3) \ - $(am__objects_4) $(am__objects_46) $(am__objects_34) -am__objects_48 = $(am__objects_47) -am_libgdruntime_convenience_la_OBJECTS = $(am__objects_48) + $(am__objects_18) $(am__objects_20) $(am__objects_38) \ + $(am__objects_24) $(am__objects_39) $(am__objects_40) \ + $(am__objects_41) $(am__objects_42) $(am__objects_43) \ + $(am__objects_44) $(am__objects_45) $(am__objects_46) \ + $(am__objects_47) +am__objects_49 = $(am__objects_1) $(am__objects_37) $(am__objects_3) \ + $(am__objects_4) $(am__objects_48) $(am__objects_35) +am__objects_50 = $(am__objects_49) +am_libgdruntime_convenience_la_OBJECTS = $(am__objects_50) libgdruntime_convenience_la_OBJECTS = \ $(am_libgdruntime_convenience_la_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) @@ -799,7 +804,7 @@ DRUNTIME_SOURCES_CONFIGURED = $(am__append_1) $(am__append_2) \ $(am__append_9) $(am__append_10) $(am__append_11) \ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) $(am__append_16) $(am__append_17) \ - $(am__append_18) + $(am__append_18) $(am__append_19) # Provide __start_minfo, __stop_minfo if linker doesn't. @DRUNTIME_OS_MINFO_BRACKETING_FALSE@DRTSTUFF = gcc/drtbegin.o gcc/drtend.o @@ -1953,6 +1958,11 @@ config/arm/$(am__dirstamp): @: > config/arm/$(am__dirstamp) config/arm/libgdruntime_la-switchcontext.lo: \ config/arm/$(am__dirstamp) +config/loongarch/$(am__dirstamp): + @$(MKDIR_P) config/loongarch + @: > config/loongarch/$(am__dirstamp) +config/loongarch/libgdruntime_la-switchcontext.lo: \ + config/loongarch/$(am__dirstamp) config/mips/$(am__dirstamp): @$(MKDIR_P) config/mips @: > config/mips/$(am__dirstamp) @@ -1995,6 +2005,8 @@ config/aarch64/libgdruntime_convenience_la-switchcontext.lo: \ config/aarch64/$(am__dirstamp) config/arm/libgdruntime_convenience_la-switchcontext.lo: \ config/arm/$(am__dirstamp) +config/loongarch/libgdruntime_convenience_la-switchcontext.lo: \ + config/loongarch/$(am__dirstamp) config/mips/libgdruntime_convenience_la-switchcontext.lo: \ config/mips/$(am__dirstamp) config/powerpc/libgdruntime_convenience_la-switchcontext.lo: \ @@ -2017,6 +2029,8 @@ mostlyclean-compile: -rm -f config/aarch64/*.lo -rm -f config/arm/*.$(OBJEXT) -rm -f config/arm/*.lo + -rm -f config/loongarch/*.$(OBJEXT) + -rm -f config/loongarch/*.lo -rm -f config/mingw/*.$(OBJEXT) -rm -f config/mingw/*.lo -rm -f config/mips/*.$(OBJEXT) @@ -2150,6 +2164,9 @@ config/aarch64/libgdruntime_la-switchcontext.lo: config/aarch64/switchcontext.S config/arm/libgdruntime_la-switchcontext.lo: config/arm/switchcontext.S $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/arm/libgdruntime_la-switchcontext.lo `test -f 'config/arm/switchcontext.S' || echo '$(srcdir)/'`config/arm/switchcontext.S +config/loongarch/libgdruntime_la-switchcontext.lo: config/loongarch/switchcontext.S + $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/loongarch/libgdruntime_la-switchcontext.lo `test -f 'config/loongarch/switchcontext.S' || echo '$(srcdir)/'`config/loongarch/switchcontext.S + config/mips/libgdruntime_la-switchcontext.lo: config/mips/switchcontext.S $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/mips/libgdruntime_la-switchcontext.lo `test -f 'config/mips/switchcontext.S' || echo '$(srcdir)/'`config/mips/switchcontext.S @@ -2174,6 +2191,9 @@ config/aarch64/libgdruntime_convenience_la-switchcontext.lo: config/aarch64/swit config/arm/libgdruntime_convenience_la-switchcontext.lo: config/arm/switchcontext.S $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/arm/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/arm/switchcontext.S' || echo '$(srcdir)/'`config/arm/switchcontext.S +config/loongarch/libgdruntime_convenience_la-switchcontext.lo: config/loongarch/switchcontext.S + $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/loongarch/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/loongarch/switchcontext.S' || echo '$(srcdir)/'`config/loongarch/switchcontext.S + config/mips/libgdruntime_convenience_la-switchcontext.lo: config/mips/switchcontext.S $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/mips/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/mips/switchcontext.S' || echo '$(srcdir)/'`config/mips/switchcontext.S @@ -2226,6 +2246,7 @@ clean-libtool: -rm -rf .libs _libs -rm -rf config/aarch64/.libs config/aarch64/_libs -rm -rf config/arm/.libs config/arm/_libs + -rm -rf config/loongarch/.libs config/loongarch/_libs -rm -rf config/mingw/.libs config/mingw/_libs -rm -rf config/mips/.libs config/mips/_libs -rm -rf config/powerpc/.libs config/powerpc/_libs @@ -2391,6 +2412,7 @@ distclean-generic: -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f config/aarch64/$(am__dirstamp) -rm -f config/arm/$(am__dirstamp) + -rm -f config/loongarch/$(am__dirstamp) -rm -f config/mingw/$(am__dirstamp) -rm -f config/mips/$(am__dirstamp) -rm -f config/powerpc/$(am__dirstamp) diff --git a/libphobos/m4/druntime/cpu.m4 b/libphobos/m4/druntime/cpu.m4 index db3a92c15fa..3461b2d3c51 100644 --- a/libphobos/m4/druntime/cpu.m4 +++ b/libphobos/m4/druntime/cpu.m4 @@ -15,6 +15,9 @@ AC_DEFUN([DRUNTIME_CPU_SOURCES], ;; arm*) druntime_target_cpu_parsed="arm" ;; + loongarch*) + druntime_target_cpu_parsed="loongarch" + ;; mips*) druntime_target_cpu_parsed="mips" ;; powerpc*) @@ -34,6 +37,8 @@ AC_DEFUN([DRUNTIME_CPU_SOURCES], [test "$druntime_target_cpu_parsed" = "aarch64"]) AM_CONDITIONAL([DRUNTIME_CPU_ARM], [test "$druntime_target_cpu_parsed" = "arm"]) + AM_CONDITIONAL([DRUNTIME_CPU_LOONGARCH], + [test "$druntime_target_cpu_parsed" = "loongarch"]) AM_CONDITIONAL([DRUNTIME_CPU_MIPS], [test "$druntime_target_cpu_parsed" = "mips"]) AM_CONDITIONAL([DRUNTIME_CPU_POWERPC], From patchwork Fri Dec 1 10:08:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Yujie X-Patchwork-Id: 81101 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 581AD385C6F7 for ; Fri, 1 Dec 2023 10:09:12 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id 5A47C385C338 for ; Fri, 1 Dec 2023 10:08:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5A47C385C338 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=loongson.cn ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5A47C385C338 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:470:142:3::10 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425333; cv=none; b=Hz2qR/J2P7Ps1B4J3VMwVRUbr9K5WU46egUW2IicEz9hnS5x7042MptKkzDrX3kLg3oZyGVJkizzuJ8m5Odwnx1tJYSDjhQj3x2lGKTiCYGItTQwgywY0kICeI7wwWxhT8SrvhOW+K/G2yh5tqKZyEIo0xKEQ0+/78HKe+nwD0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701425333; c=relaxed/simple; bh=+pBpcKjglEtFhfkqaURqjRVOTWf7+YayzV0apnZ/CMA=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=mvcsagGDyRMfIbFT0nLdr+00qA4hmsgcs8vTvpwq3/Ix7NuJIaFexJyxwRN6NjPVApELQ/KxZY51RbB1rdwCDH36QG1zmE3ruJJbqgkVVbMNAP98w/BsB/BEO/HcV2o7MsHZ6OcQnUYP0RMBBHccvOzjvFLGiQ0Nw+8XI9vRA8Q= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from mail.loongson.cn ([114.242.206.163]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r90Ry-00083S-Ou for gcc-patches@gcc.gnu.org; Fri, 01 Dec 2023 05:08:51 -0500 Received: from loongson.cn (unknown [114.243.104.185]) by gateway (Coremail) with SMTP id _____8Dxg_CpsGlljCs+AA--.58556S3; Fri, 01 Dec 2023 18:08:41 +0800 (CST) Received: from localhost.localdomain (unknown [114.243.104.185]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxLC+lsGllaYRRAA--.8937S5; Fri, 01 Dec 2023 18:08:41 +0800 (CST) From: Yang Yujie To: gcc-patches@gcc.gnu.org Cc: ibuclaw@gdcproject.org, chenglulu@loongson.cn, xuchenghua@loongson.cn, Yang Yujie Subject: [PATCH v3 3/3] libruntime: Add fiber context switch code for LoongArch. Date: Fri, 1 Dec 2023 18:08:27 +0800 Message-ID: <20231201100827.227376-4-yangyujie@loongson.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231201100827.227376-1-yangyujie@loongson.cn> References: <20231201100827.227376-1-yangyujie@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8CxLC+lsGllaYRRAA--.8937S5 X-CM-SenderInfo: 51dqw5pxmlvqxorr0wxvrqhubq/1tbiAQAMAGVpQqsJJgAAsH X-Coremail-Antispam: 1Uk129KBj93XoWxWF4kXr18Wr1ftF17WF4UAwc_yoWrCr48pr 48Ar4DWr40yrZxJwn7t3yaqr15Gwn3Z34kAr98KFWjv34rAF1SyrnakFyak39Yq3WfG3WY v34Y9w4DAFnrGFXCm3ZEXasCq-sJn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUk2b4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r126r1DMcIj6I8E87Iv 67AKxVW8JVWxJwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2 Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s02 6x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0x vE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE 42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JVWxJwCI42IY6I8E87Iv6x kF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjxUcDDGUUUUU Received-SPF: pass client-ip=114.242.206.163; envelope-from=yangyujie@loongson.cn; helo=mail.loongson.cn X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, SPF_FAIL, SPF_HELO_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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org libphobos/ChangeLog: * libdruntime/config/loongarch/switchcontext.S: New file. --- .../config/loongarch/switchcontext.S | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 libphobos/libdruntime/config/loongarch/switchcontext.S diff --git a/libphobos/libdruntime/config/loongarch/switchcontext.S b/libphobos/libdruntime/config/loongarch/switchcontext.S new file mode 100644 index 00000000000..edfb9b67e8f --- /dev/null +++ b/libphobos/libdruntime/config/loongarch/switchcontext.S @@ -0,0 +1,133 @@ +/* LoongArch support code for fibers and multithreading. + Copyright (C) 2023 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC 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 General Public License +for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "../common/threadasm.S" + +/** + * Performs a context switch. + * + * $a0 - void** - ptr to old stack pointer + * $a1 - void* - new stack pointer + * + */ + +#if defined(__loongarch_lp64) +# define GPR_L ld.d +# define GPR_S st.d +# define SZ_GPR 8 +# define ADDSP(si) addi.d $sp, $sp, si +#elif defined(__loongarch64_ilp32) +# define GPR_L ld.w +# define GPR_S st.w +# define SZ_GPR 4 +# define ADDSP(si) addi.w $sp, $sp, si +#else +# error Unsupported GPR size (must be 64-bit or 32-bit). +#endif + +#if defined(__loongarch_double_float) +# define FPR_L fld.d +# define FPR_S fst.d +# define SZ_FPR 8 +#elif defined(__loongarch_single_float) +# define FPR_L fld.s +# define FPR_S fst.s +# define SZ_FPR 4 +#else +# define SZ_FPR 0 +#endif + + .text + .align 2 + .global fiber_switchContext + .type fiber_switchContext, @function +fiber_switchContext: + .cfi_startproc + ADDSP(-11 * SZ_GPR) + + // fp regs and return address are stored below the stack + // because we don't want the GC to scan them. + + // return address (r1) + GPR_S $r1, $sp, -SZ_GPR + +#if SZ_FPR != 0 + // callee-saved scratch FPRs (f24-f31) + FPR_S $f24, $sp, -SZ_GPR-1*SZ_FPR + FPR_S $f25, $sp, -SZ_GPR-2*SZ_FPR + FPR_S $f26, $sp, -SZ_GPR-3*SZ_FPR + FPR_S $f27, $sp, -SZ_GPR-4*SZ_FPR + FPR_S $f28, $sp, -SZ_GPR-5*SZ_FPR + FPR_S $f29, $sp, -SZ_GPR-6*SZ_FPR + FPR_S $f30, $sp, -SZ_GPR-7*SZ_FPR + FPR_S $f31, $sp, -SZ_GPR-8*SZ_FPR +#endif + + // callee-saved GPRs (r21, fp (r22), r23-r31) + GPR_S $r21, $sp, 0*SZ_GPR + GPR_S $fp, $sp, 1*SZ_GPR + GPR_S $s0, $sp, 2*SZ_GPR + GPR_S $s1, $sp, 3*SZ_GPR + GPR_S $s2, $sp, 4*SZ_GPR + GPR_S $s3, $sp, 5*SZ_GPR + GPR_S $s4, $sp, 6*SZ_GPR + GPR_S $s5, $sp, 7*SZ_GPR + GPR_S $s6, $sp, 8*SZ_GPR + GPR_S $s7, $sp, 9*SZ_GPR + GPR_S $s8, $sp, 10*SZ_GPR + + // swap stack pointer + GPR_S $sp, $a0, 0 + move $sp, $a1 + + GPR_L $r1, $sp, -SZ_GPR + +#if SZ_FPR != 0 + FPR_L $f24, $sp, -SZ_GPR-1*SZ_FPR + FPR_L $f25, $sp, -SZ_GPR-2*SZ_FPR + FPR_L $f26, $sp, -SZ_GPR-3*SZ_FPR + FPR_L $f27, $sp, -SZ_GPR-4*SZ_FPR + FPR_L $f28, $sp, -SZ_GPR-5*SZ_FPR + FPR_L $f29, $sp, -SZ_GPR-6*SZ_FPR + FPR_L $f30, $sp, -SZ_GPR-7*SZ_FPR + FPR_L $f31, $sp, -SZ_GPR-8*SZ_FPR +#endif + + GPR_L $r21, $sp, 0*SZ_GPR + GPR_L $fp, $sp, 1*SZ_GPR + GPR_L $s0, $sp, 2*SZ_GPR + GPR_L $s1, $sp, 3*SZ_GPR + GPR_L $s2, $sp, 4*SZ_GPR + GPR_L $s3, $sp, 5*SZ_GPR + GPR_L $s4, $sp, 6*SZ_GPR + GPR_L $s5, $sp, 7*SZ_GPR + GPR_L $s6, $sp, 8*SZ_GPR + GPR_L $s7, $sp, 9*SZ_GPR + GPR_L $s8, $sp, 10*SZ_GPR + + ADDSP(11 * SZ_GPR) + + jr $r1 // return + .cfi_endproc + .size fiber_switchContext,.-fiber_switchContext