diff mbox

[AArch64,v2] Skip gcc.target/aarch64/assembler_arch_1.c if assembler does not support it

Message ID 56C724C3.8090506@foss.arm.com
State New
Headers show

Commit Message

Kyrill Tkachov Feb. 19, 2016, 2:20 p.m. UTC
On 18/02/16 14:24, James Greenhalgh wrote:
> On Thu, Feb 18, 2016 at 11:31:02AM +0100, Christophe Lyon wrote:
>> On 17 February 2016 at 17:06, Kyrill Tkachov
>> <kyrylo.tkachov@foss.arm.com> wrote:
>>> Hi all,
>>>
>>> I've thought about this check a bit more and I think we can compactly
>>> auto-generate checks
>>> for any aarch64 architecture extension support in the assembler.
>>> This is done in a similar way we autogenerate the arm_arch_*_ok checks for
>>> arm.
>>>
>>> So in this revision we autogenerate aarch64_asm_<ext>_ok checks for every
>>> architecture extension
>>> using some of the expect machinery. This should make this approach a bit
>>> more general to handle
>>> checks for any .arch_extension argument without much extra cost.
>>>
>>> This still assumes that the assembler supports the .arch_extension
>>> pseudo-op, the effective
>>> target check will fail if it doesn't. This is what we want for this
>>> testcase.
>>>
>>> Is this patch ok instead of
>>> https://gcc.gnu.org/ml/gcc-patches/2016-02/msg01052.html ?
>>>
>> Nice indeed.
>>
>> Regarding the doc, it's not accurate to say that the values of ext
>> are defined in aarch64-option-extensions.def, since that file is not
>> actually parsed by DJ. I mean there is no guarantee the two lists
>> will be kept in sync.
>>
>> In the new test itself, I think that
>> return [check_no_compiler_messages aarch64_lse_assembler object
>> should be:
>> return [check_no_compiler_messages aarch64_FUNC_assembler object
>>
>> for consistency although your patch is functional as-is.
> Agreed.
>
> OK with that change.

Thanks, here's what I committed with r233559.

Kyrill

2016-02-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

     * lib/target-supports.exp: Define aarch64_asm_FUNC_ok checks
     for fp, simd, crypto, crc, lse.
     * doc/sourcebuild.texi (AArch64-specific attributes): Document the
     above.
     * gcc.target/aarch64/assembler_arch_1.c: Add aarch64_asm_lse_ok
     effective target check.


> Thanks,
> James
>
>>> 2016-02-17  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>>
>>>      * lib/target-supports.exp: Define aarch64_asm_FUNC_ok checks
>>>      for fp, simd, crypto, crc, lse.
>>>      * doc/sourcebuild.texi (AArch64-specific attributes): Document the
>>>      above.
>>>      * gcc.target/aarch64/assembler_arch_1.c: Add aarch64_asm_lse_ok
>>>      effective target check.
diff mbox

Patch

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 6d548aad7aa24c59b40ec13d9c99733d94ec0aa6..c5354cfc8f36f453fedf0b6879b1dc1ec663f1b5 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1606,6 +1606,9 @@  ARM target prefers @code{LDRD} and @code{STRD} instructions over
 @subsubsection AArch64-specific attributes
 
 @table @code
+@item aarch64_asm_<ext>_ok
+AArch64 assembler supports the architecture extension @code{ext} via the
+@code{.arch_extension} pseudo-op.
 @item aarch64_tiny
 AArch64 target which generates instruction sequences for tiny memory model.
 @item aarch64_small
diff --git a/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c b/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
index 901e50a178d7a4a443a5ad0abe63f624688db268..5deea5cf0ee9306743bc47bace6f762d0e35ce65 100644
--- a/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
@@ -1,4 +1,5 @@ 
 /* { dg-do assemble } */
+/* { dg-require-effective-target aarch64_asm_lse_ok } */
 /* { dg-options "-march=armv8-a" } */
 
 /* Make sure that the function header in assembly doesn't override
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 66fb1eaf7bd4aa58d23cfc9203e9f27573c7a303..0b4252f6434fb8223423e06882a061ccf0f5a015 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6719,6 +6719,23 @@  proc check_effective_target_aarch64_tiny { } {
     }
 }
 
+# Create functions to check that the AArch64 assembler supports the
+# various architecture extensions via the .arch_extension pseudo-op.
+
+foreach { aarch64_ext } { "fp" "simd" "crypto" "crc" "lse"} {
+    eval [string map [list FUNC $aarch64_ext] {
+	proc check_effective_target_aarch64_asm_FUNC_ok { } {
+	  if { [istarget aarch64*-*-*] } {
+		return [check_no_compiler_messages aarch64_FUNC_assembler object {
+			__asm__ (".arch_extension FUNC");
+		} "-march=armv8-a+FUNC"]
+	  } else {
+		return 0
+	  }
+	}
+    }]
+}
+
 proc check_effective_target_aarch64_small { } {
     if { [istarget aarch64*-*-*] } {
 	return [check_no_compiler_messages aarch64_small object {