From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 5FF003858D1E for ; Fri, 8 Sep 2023 01:33:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5FF003858D1E 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 [113.200.148.30]) by gateway (Coremail) with SMTP id _____8DxBfHyefpkbtghAA--.1980S3; Fri, 08 Sep 2023 09:33:38 +0800 (CST) Received: from [10.130.0.191] (unknown [113.200.148.30]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bx3yPoefpk2q5xAA--.35246S3; Fri, 08 Sep 2023 09:33:37 +0800 (CST) Subject: Re: [PATCH] gdb: LoongArch: Add vector extensions support To: Luis Machado , gdb-patches@sourceware.org References: <20230829121041.13650-1-lihui@loongson.cn> <3cf2dba4-ee15-a33c-b700-f6d3a9d3185b@arm.com> From: Hui Li Message-ID: <87228760-7105-966e-6f23-3079ddab5342@loongson.cn> Date: Fri, 8 Sep 2023 09:33:28 +0800 User-Agent: Mozilla/5.0 (X11; Linux mips64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <3cf2dba4-ee15-a33c-b700-f6d3a9d3185b@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8Bx3yPoefpk2q5xAA--.35246S3 X-CM-SenderInfo: 5olk3xo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBj93XoW3Xw15Kw1UuF1UKw43ArW5Arc_yoWfur45pr WkCr90yF48JFn7A3Zaqry5Zrs8Xr4xGayj9rsa93ZruF4UuryIyr1YkF18uFZrt3yFqr15 ur1UXwnxC3W7CFXCm3ZEXasCq-sJn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUv2b4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj6I8E87Iv 67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07 AlzVAYIcxG8wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02 F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jrv_JF 1lIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7Cj xVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r 1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU1wL 05UUUUU== X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_NONE,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 List-Id: Hi, On 2023/8/29 下午11:04, Luis Machado wrote: > Hi, > > On 8/29/23 13:10, Hui Li wrote: >> Add LoongArch's vector extensions support, which including 128bit LSX >> (i.e., Loongson SIMD eXtension) and 256bit LASX (i.e., Loongson Advanced >> SIMD eXtension). >> >> Signed-off-by: Hui Li >> Change-Id: I04e92203a86547654d9f6c8cd1a9c3a789cb73db >> --- >> gdb/arch/loongarch.c | 7 ++ >> gdb/arch/loongarch.h | 4 + >> gdb/features/Makefile | 2 + >> gdb/features/loongarch/lasx.c | 85 +++++++++++++++++++++ >> gdb/features/loongarch/lasx.xml | 61 ++++++++++++++++ >> gdb/features/loongarch/lsx.c | 82 +++++++++++++++++++++ >> gdb/features/loongarch/lsx.xml | 60 +++++++++++++++ >> gdb/loongarch-linux-nat.c | 123 +++++++++++++++++++++++++++++++ >> gdb/loongarch-linux-tdep.c | 126 ++++++++++++++++++++++++++++++++ >> gdb/loongarch-tdep.c | 32 ++++++++ >> gdb/loongarch-tdep.h | 2 + >> 11 files changed, 584 insertions(+) >> create mode 100644 gdb/features/loongarch/lasx.c >> create mode 100644 gdb/features/loongarch/lasx.xml >> create mode 100644 gdb/features/loongarch/lsx.c >> create mode 100644 gdb/features/loongarch/lsx.xml >> >> diff --git a/gdb/arch/loongarch.c b/gdb/arch/loongarch.c >> index 168fcbc15df..1fb3c24149e 100644 >> --- a/gdb/arch/loongarch.c >> +++ b/gdb/arch/loongarch.c >> @@ -25,6 +25,8 @@ >> #include "../features/loongarch/base32.c" >> #include "../features/loongarch/base64.c" >> #include "../features/loongarch/fpu.c" >> +#include "../features/loongarch/lsx.c" >> +#include "../features/loongarch/lasx.c" >> >> #ifndef GDBSERVER >> #define STATIC_IN_GDB static >> @@ -63,6 +65,11 @@ loongarch_create_target_description (const struct loongarch_gdbarch_features fea >> /* For now we only support creating single float and double float. */ >> regnum = create_feature_loongarch_fpu (tdesc.get (), regnum); >> >> + >> + /* For now we only support creating lsx and lasx. */ >> + regnum = create_feature_loongarch_lsx (tdesc.get (), regnum); >> + regnum = create_feature_loongarch_lasx (tdesc.get (), regnum); >> + >> return tdesc; >> } >> >> diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h >> index d0a63dc2ac5..48662af8c11 100644 >> --- a/gdb/arch/loongarch.h >> +++ b/gdb/arch/loongarch.h >> @@ -41,6 +41,10 @@ enum loongarch_regnum >> LOONGARCH_FIRST_FCC_REGNUM = LOONGARCH_FIRST_FP_REGNUM + LOONGARCH_LINUX_NUM_FPREGSET, >> LOONGARCH_LINUX_NUM_FCC = 8, >> LOONGARCH_FCSR_REGNUM = LOONGARCH_FIRST_FCC_REGNUM + LOONGARCH_LINUX_NUM_FCC, >> + LOONGARCH_FIRST_LSX_REGNUM = LOONGARCH_FCSR_REGNUM + 1, >> + LOONGARCH_LINUX_NUM_LSXREGSET = 32, >> + LOONGARCH_FIRST_LASX_REGNUM = LOONGARCH_FIRST_LSX_REGNUM + LOONGARCH_LINUX_NUM_LSXREGSET, >> + LOONGARCH_LINUX_NUM_LASXREGSET = 32, >> }; >> >> enum loongarch_fputype >> diff --git a/gdb/features/Makefile b/gdb/features/Makefile >> index 32341f71815..965e32d3f04 100644 >> --- a/gdb/features/Makefile >> +++ b/gdb/features/Makefile >> @@ -237,6 +237,8 @@ FEATURE_XMLFILES = aarch64-core.xml \ >> loongarch/base32.xml \ >> loongarch/base64.xml \ >> loongarch/fpu.xml \ >> + loongarch/lsx.xml \ >> + loongarch/lasx.xml \ >> riscv/rv32e-xregs.xml \ >> riscv/32bit-cpu.xml \ >> riscv/32bit-fpu.xml \ >> diff --git a/gdb/features/loongarch/lasx.c b/gdb/features/loongarch/lasx.c >> new file mode 100644 >> index 00000000000..52d486ecb09 >> --- /dev/null >> +++ b/gdb/features/loongarch/lasx.c >> @@ -0,0 +1,85 @@ >> +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: >> + Original: lasx.xml */ >> + >> +#include "gdbsupport/tdesc.h" >> + >> +static int >> +create_feature_loongarch_lasx (struct target_desc *result, long regnum) >> +{ >> + struct tdesc_feature *feature; >> + >> + feature = tdesc_create_feature (result, "org.gnu.gdb.loongarch.lasx"); >> + tdesc_type *element_type; >> + element_type = tdesc_named_type (feature, "ieee_single"); >> + tdesc_create_vector (feature, "v8f32", element_type, 8); >> + >> + element_type = tdesc_named_type (feature, "ieee_double"); >> + tdesc_create_vector (feature, "v4f64", element_type, 4); >> + >> + element_type = tdesc_named_type (feature, "int8"); >> + tdesc_create_vector (feature, "v32i8", element_type, 32); >> + >> + element_type = tdesc_named_type (feature, "int16"); >> + tdesc_create_vector (feature, "v16i16", element_type, 16); >> + >> + element_type = tdesc_named_type (feature, "int32"); >> + tdesc_create_vector (feature, "v8i32", element_type, 8); >> + >> + element_type = tdesc_named_type (feature, "int64"); >> + tdesc_create_vector (feature, "v4i64", element_type, 4); >> + >> + element_type = tdesc_named_type (feature, "uint128"); >> + tdesc_create_vector (feature, "v2ui128", element_type, 2); >> + >> + tdesc_type_with_fields *type_with_fields; >> + type_with_fields = tdesc_create_union (feature, "lasxv"); >> + tdesc_type *field_type; >> + field_type = tdesc_named_type (feature, "v8f32"); >> + tdesc_add_field (type_with_fields, "v8_float", field_type); >> + field_type = tdesc_named_type (feature, "v4f64"); >> + tdesc_add_field (type_with_fields, "v4_double", field_type); >> + field_type = tdesc_named_type (feature, "v32i8"); >> + tdesc_add_field (type_with_fields, "v32_int8", field_type); >> + field_type = tdesc_named_type (feature, "v16i16"); >> + tdesc_add_field (type_with_fields, "v16_int16", field_type); >> + field_type = tdesc_named_type (feature, "v8i32"); >> + tdesc_add_field (type_with_fields, "v8_int32", field_type); >> + field_type = tdesc_named_type (feature, "v4i64"); >> + tdesc_add_field (type_with_fields, "v4_int64", field_type); >> + field_type = tdesc_named_type (feature, "v2ui128"); >> + tdesc_add_field (type_with_fields, "v2_uint128", field_type); >> + >> + tdesc_create_reg (feature, "xr0", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr1", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr2", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr3", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr4", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr5", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr6", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr7", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr8", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr9", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr10", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr11", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr12", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr13", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr14", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr15", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr16", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr17", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr18", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr19", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr20", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr21", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr22", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr23", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr24", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr25", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr26", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr27", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr28", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr29", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr30", regnum++, 1, "lasx", 256, "lasxv"); >> + tdesc_create_reg (feature, "xr31", regnum++, 1, "lasx", 256, "lasxv"); >> + return regnum; >> +} >> diff --git a/gdb/features/loongarch/lasx.xml b/gdb/features/loongarch/lasx.xml >> new file mode 100644 >> index 00000000000..c6ce56660f2 >> --- /dev/null >> +++ b/gdb/features/loongarch/lasx.xml >> @@ -0,0 +1,61 @@ >> + >> + > > You might want to adjust the headers of the xml files to drop the "Contributed by ARM Ltd.". > I will modify this in V2, thanks for your review. Hui