From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106294 invoked by alias); 7 Jun 2017 15:42:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 104427 invoked by uid 89); 7 Jun 2017 15:42:39 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=v8a, Baseline X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 07 Jun 2017 15:42:37 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 70CCF80D; Wed, 7 Jun 2017 08:42:40 -0700 (PDT) Received: from [10.2.206.52] (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A3F3B3F3E1; Wed, 7 Jun 2017 08:42:39 -0700 (PDT) To: Kyrill Tkachov , Ramana Radhakrishnan , Richard Earnshaw , "gcc-patches@gcc.gnu.org" From: Thomas Preudhomme Subject: [PATCH, GCC/testsuite/ARM] Allow arm_arch_*_ok to test several macros Message-ID: <09bc6f3c-1f45-bdb7-4e83-82200e6ef1f5@foss.arm.com> Date: Wed, 07 Jun 2017 15:42:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------41AA2A11CE7D122C42F2A4F2" X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00444.txt.bz2 This is a multi-part message in MIME format. --------------41AA2A11CE7D122C42F2A4F2 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1510 Hi, The general arm_arch_*_ok procedures check architecture availability by substituting macros inside a defined preprocessor operator. This limits them to only check definition of only one macro and force ARMv7VE to be special cased. This patch takes advantage of the fact that architecture macros, when defined, are not null to allow expressing architecture availability by a boolean operation of possibly several macros. It then takes advantage of this to deal with ARMv7VE in the general case. The patch also adds a comment to make it clear that check_effective_target_arm_arch_FUNC_ok does not work as intendend for architecture extensions (eg. ARMv8.1-A) due to lack of extension-specific macro similar to __ARM_ARCH_*__. ChangeLog entry is as follows: *** gcc/testsuite/ChangeLog *** 2017-06-06 Thomas Preud'homme * lib/target-supports.exp (check_effective_target_arm_arch_FUNC_ok): Test for null definitions instead of them being undefined. Add entry for ARMv7VE. Reindent entry for ARMv8-M Baseline. Add comment warning about using the effective target for architecture extension. (check_effective_target_arm_arch_v7ve_ok): Remove. (add_options_for_arm_arch_v7ve): Likewise. Testing: - gcc.target/arm/atomic_loaddi_10.c passes with the patch for armv7ve but is marked unsupported for armv7-a - verified in the logs that -march=armv7ve is correctly added when running gcc.target/arm/ftest-armv7ve-arm.c Is this ok for trunk? Best regards, Thomas --------------41AA2A11CE7D122C42F2A4F2 Content-Type: text/x-patch; name="arm_arch_x_ok_several_macros.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="arm_arch_x_ok_several_macros.patch" Content-length: 3198 diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ded6383cc1f9a1489cd83e1dace0c2fc48e252c3..e83ec757ae3c0dd7c3cad19cfd5d9577547d18a5 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3775,12 +3775,13 @@ proc check_effective_target_arm_fp16_hw { } { # can be selected and a routine to give the flags to select that architecture # Note: Extra flags may be added to disable options from newer compilers # (Thumb in particular - but others may be added in the future). -# -march=armv7ve is special and is handled explicitly after this loop because -# it needs more than one predefine check to identify. +# Warning: Do not use check_effective_target_arm_arch_*_ok for architecture +# extension (eg. ARMv8.1-A) since there is no macro defined for them. See +# how only __ARM_ARCH_8A__ is checked for ARMv8.1-A. # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */ # /* { dg-add-options arm_arch_v5 } */ # /* { dg-require-effective-target arm_arch_v5_multilib } */ -foreach { armfunc armflag armdef } { +foreach { armfunc armflag armdefs } { v4 "-march=armv4 -marm" __ARM_ARCH_4__ v4t "-march=armv4t" __ARM_ARCH_4T__ v5 "-march=armv5 -marm" __ARM_ARCH_5__ @@ -3795,20 +3796,23 @@ foreach { armfunc armflag armdef } { v7r "-march=armv7-r" __ARM_ARCH_7R__ v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__ v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__ + v7ve "-march=armv7ve -marm" + "__ARM_ARCH_7A__ && __ARM_FEATURE_IDIV" v8a "-march=armv8-a" __ARM_ARCH_8A__ v8_1a "-march=armv8.1a" __ARM_ARCH_8A__ v8_2a "-march=armv8.2a" __ARM_ARCH_8A__ - v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__ + v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" + __ARM_ARCH_8M_BASE__ v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } { - eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] { + eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] { proc check_effective_target_arm_arch_FUNC_ok { } { if { [ string match "*-marm*" "FLAG" ] && ![check_effective_target_arm_arm_ok] } { return 0 } return [check_no_compiler_messages arm_arch_FUNC_ok assembly { - #if !defined (DEF) - #error !DEF + #if !(DEFS) + #error !(DEFS) #endif } "FLAG" ] } @@ -3829,26 +3833,6 @@ foreach { armfunc armflag armdef } { }] } -# Same functions as above but for -march=armv7ve. To uniquely identify -# -march=armv7ve we need to check for __ARM_ARCH_7A__ as well as -# __ARM_FEATURE_IDIV otherwise it aliases with armv7-a. - -proc check_effective_target_arm_arch_v7ve_ok { } { - if { [ string match "*-marm*" "-march=armv7ve" ] && - ![check_effective_target_arm_arm_ok] } { - return 0 - } - return [check_no_compiler_messages arm_arch_v7ve_ok assembly { - #if !defined (__ARM_ARCH_7A__) || !defined (__ARM_FEATURE_IDIV) - #error !armv7ve - #endif - } "-march=armv7ve" ] -} - -proc add_options_for_arm_arch_v7ve { flags } { - return "$flags -march=armv7ve" -} - # Return 1 if GCC was configured with --with-mode= proc check_effective_target_default_mode { } { --------------41AA2A11CE7D122C42F2A4F2--