Message ID | 56C49A6F.9010604@foss.arm.com |
---|---|
State | New |
Headers | show |
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. Thanks Christophe. > Thanks, > Kyrill > > 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.
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, 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. >
On 02/17/2016 09:06 AM, Kyrill Tkachov 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 ? > > Thanks, > Kyrill > > 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. Yes, this is fine. jeff
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 6d548aad7aa24c59b40ec13d9c99733d94ec0aa6..19fd938afff9bb480e2262d07ce5c8ff9ca167c7 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1606,6 +1606,10 @@ 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. The values of @code{ext} are defined in +the file config/aarch64/aarch64-option-extensions.def. @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..f399f185d25aa5a947b7a17fd6020dc311b18f58 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_lse_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 {