From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by sourceware.org (Postfix) with ESMTPS id EEC263858C50 for ; Fri, 4 Aug 2023 00:59:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EEC263858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oi1-x229.google.com with SMTP id 5614622812f47-3a37909a64eso1179024b6e.1 for ; Thu, 03 Aug 2023 17:59:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1691110779; x=1691715579; h=mime-version:message-id:date:in-reply-to:subject:cc:to:from :user-agent:references:from:to:cc:subject:date:message-id:reply-to; bh=TCsmiQgPfgMvRginHqi3i3PywWFquulL05kto4EfOWw=; b=lJjHZjoHOE9WFaL20EnnIE413MVQUnF8+JySGaVIjH3+KfDexGTzdccwVczI2Q63Zm 9rs+0aMHcrTp4hyFlw7TGgM17Kv5Iuz1jCXwsFA7ZqH/Eemk7GwhaDFRfMfsOEm0xoUy LOWG9lJ24hy01u01bRo8Hy87OKwK2m8GDNgnlMr1Rs9tjJhV7fqIeUdV3FjYMyjp221J MLtKg/NqefVPodPygnzzWTfIf4t6TgWA3FGRBjC4pbsf/O0X0a3CLmyy2K++d+Hsnc4n axh9s0wzWFTYYMi4/vdNEVhsyyjS/hQC01HN3VaQqbLsPl9JDByWURa7FqyXCK9HvMHZ 3fgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691110779; x=1691715579; h=mime-version:message-id:date:in-reply-to:subject:cc:to:from :user-agent:references:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=TCsmiQgPfgMvRginHqi3i3PywWFquulL05kto4EfOWw=; b=XnkVSHhb9bqESyonseYvBmLg7q/Ur1sW4XB16CJu+DsCv9MtCyqnVy7T/eFOsCmmeX vKzgKS8Ia96Umjmzo71mj3XSnIzoAH65esjeNJnQ51KKElU1By++c1184WGqX5Grmwn0 TZnviDXO8dRd39DHVDxys3ebVHIAuwSBl+gPKwtJFnEQA63WY2+6K1GnDXq+3M/nu1gf F1tKWgVE5e/nAOByRgZ8rDk8L0dH8q5oQ231uPCNBof/goO/WkUGGj0WOFaXqFe5Z+1I l1bVHa01CU4V+c1nfMgUtZfQe++jB5ZcEuy5BQy6kPOM8ReT3iZXcEOaj6OL1n5IvCu2 PV+g== X-Gm-Message-State: AOJu0YzLZZgtU6l8APegU95u8W/Wn2aEMX8eO4eiPudljSCu1cTlN6al qvYLzp9pHEzlNwGnVj3bGcPm6eIta5AwkadRAto= X-Google-Smtp-Source: AGHT+IFU4uR3l6wErUls2kbq0fsmZhw3tAW3328Z/NVSknxvi0t/yh5J2uTVYdxeI8MpGO/r8FYnVg== X-Received: by 2002:a54:4088:0:b0:3a7:654:89dd with SMTP id i8-20020a544088000000b003a7065489ddmr264709oii.12.1691110779019; Thu, 03 Aug 2023 17:59:39 -0700 (PDT) Received: from localhost ([2804:14d:7e39:8470:d818:80ca:15a5:9094]) by smtp.gmail.com with ESMTPSA id bp2-20020a056808238200b003a390ca26aasm469678oib.5.2023.08.03.17.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Aug 2023 17:59:38 -0700 (PDT) References: <20230630134616.1238105-1-luis.machado@arm.com> <20230630134616.1238105-16-luis.machado@arm.com> User-agent: mu4e 1.10.5; emacs 28.2 From: Thiago Jung Bauermann To: Luis Machado Cc: gdb-patches@sourceware.org Subject: Re: [PATCH v3 15/16] [gdb/testsuite] sme: Add SVE/SME testcases In-reply-to: <20230630134616.1238105-16-luis.machado@arm.com> Date: Thu, 03 Aug 2023 21:59:35 -0300 Message-ID: <87r0ojzkp4.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-11.7 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 List-Id: Luis Machado via Gdb-patches writes: > diff --git a/gdb/testsuite/gdb.arch/aarch64-sme-core-0.exp b/gdb/testsuite/gdb.arch/aarch64-sme-core-0.exp > new file mode 100644 > index 00000000000..c4755346bc8 > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-sme-core-0.exp > @@ -0,0 +1,18 @@ > +# Copyright 2023 Free Software Foundation, Inc. > + > +# This program 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 of the License, or > +# (at your option) any later version. > +# > +# This program 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. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . */ > + > +set id_start 0 > +set id_end 24 It would be useful to have a comment mentioning that the range above tests the fpsimd state. Same comment for the other aarch64-sme-*.exp tests. > +source $srcdir/$subdir/aarch64-sme-core.exp.tcl > +require is_aarch64_target > + > +if {![allow_aarch64_sve_tests]} { > + verbose "Skipping ${gdb_test_file_name}." > + return > +} > + > +if {![allow_aarch64_sme_tests]} { > + verbose "Skipping ${gdb_test_file_name}." > + return > +} Can these "allow" tests also be invoked using "require"? This question applies for all aarch64-sme-*.exp.tcl files. > + > +test_sme_core_file $id_start $id_end > +# > +# Return the state string based on STATE > +# > +proc state_id_to_state_string { state } { > + if {$state == 0} { > + return "fpsimd" > + } elseif {$state == 1} { > + return "sve" > + } elseif {$state == 2} { > + return "ssve" > + } elseif {$state == 3} { > + return "za" > + } elseif {$state == 4} { > + return "za_ssve" > + } > +} > + > +# > +# Given a test ID, return the string representing the register state. > +# The state is one of fpsimd, sve, ssve, za and za_ssve. > +# > +proc test_id_to_state { id } { > + set state [expr $id / 25] > + > + return [state_id_to_state_string $state] > +} > + > +# > +# Given a test ID, return the associated vector length. > +# > +proc test_id_to_vl { id } { > + return [expr 16 << (($id / 5) % 5)] > +} > + > +# > +# Given a test ID, return the associated streaming vector length. > +# > +proc test_id_to_svl { id } { > + return [expr 16 << ($id % 5)] > +} I suggest adding an sme_ prefix to the procedures above, since "id" here is specific to SME testcases. > +# > +# With register STATE, vector length VL and streaming vector length SVL, > +# run some register state checks to make sure the values are the expected > +# ones > +# > +proc check_state { state vl svl } { > + # The FPSIMD registers are initialized with a value of 0x55 (85) > + # for each byte. > + # > + # The SVE registers are initialized with a value of 0xff (255) for each > + # byte, including the predicate registers and FFR. > + # > + # The SME (ZA) register is initialized with a value of 0xaa (170) for > + # each byte. > + > + # Check VG to make sure it is correct > + set expected_vg [expr $vl / 8] > + # If streaming mode is enabled, then vg is actually svg. > + if {$state == "ssve" || $state == "za_ssve"} { > + set expected_vg [expr $svl / 8] > + } > + gdb_test "print \$vg" " = ${expected_vg}" > + > + # Check SVG to make sure it is correct > + set expected_svg [expr $svl / 8] > + gdb_test "print \$svg" " = ${expected_svg}" > + > + # Check the value of SVCR. > + gdb_test "print \$svcr" [get_svcr_value $state] > + > + # When we have any SVE or SSVE state, the FPSIMD registers will have > + # the same values as the SVE/SSVE Z registers. > + set fpsimd_byte 85 > + if {$state == "sve" || $state == "ssve" || $state == "za_ssve"} { > + set fpsimd_byte 255 > + } > + > + set sve_byte 255 > + if {$state == "fpsimd" || $state == "za"} { > + set sve_byte 85 > + } > + > + # Check FPSIMD registers > + check_fpsimd_regs $fpsimd_byte $state $vl $svl > + # Check SVE registers > + check_sve_regs $sve_byte $state $vl $svl > + # Check SME registers > + check_sme_regs 170 $state $svl > +} Also here, perhaps call this function "check_sme_state"? > +# Run a test on the target to see if it supports Aarch64 SME extensions. > +# Return 0 if so, 1 if it does not. Note this causes a restart of GDB. > + > +gdb_caching_proc allow_aarch64_sme_tests {} { > + global srcdir subdir gdb_prompt inferior_exited_re > + > + set me "allow_aarch64_sme_tests" > + > + if { ![is_aarch64_target]} { > + return 0 > + } > + > + set compile_flags "{additional_flags=-march=armv8-a+sme}" > + > + # Compile a test program containing SVE instructions. s/SVE/SME/ > + set src { > + int main() { > + asm volatile ("smstart za"); > + return 0; > + } > + } > + if {![gdb_simple_compile $me $src executable $compile_flags]} { -- Thiago