/* SVE2p1 instructions, enabled through +sve2p1. */
#define TARGET_SVE2p1 AARCH64_HAVE_ISA (SVE2p1)
+/* SVE2p2 instructions, enabled through +sve2p2. */
+#define TARGET_SVE2p2 AARCH64_HAVE_ISA (SVE2p2)
+
/* SME instructions, enabled through +sme. Note that this does not
imply anything about the state of PSTATE.SM; instructions that require
SME and streaming mode should use TARGET_STREAMING instead. */
/* SME2 instructions, enabled through +sme2. */
#define TARGET_SME2 AARCH64_HAVE_ISA (SME2)
+/* SME2p2 instructions, enabled through +sme2p2. */
+#define TARGET_SME2p2 AARCH64_HAVE_ISA (SME2p2)
+
/* Same with streaming mode enabled. */
#define TARGET_STREAMING_SME2 (TARGET_STREAMING && TARGET_SME2)
((TARGET_SVE2p1 || TARGET_STREAMING) \
&& (TARGET_SME2 || TARGET_NON_STREAMING))
+#define TARGET_SVE2p2_OR_SME2p2 \
+ ((TARGET_SVE2p2 || TARGET_STREAMING) \
+ && (TARGET_SME2p2 || TARGET_NON_STREAMING))
+
#define TARGET_SSVE_B16B16 \
(AARCH64_HAVE_ISA (SVE_B16B16) && TARGET_SVE2_OR_SME2)
;; Q registers and is equivalent to "simd".
(define_enum "arches" [any rcpc8_4 fp fp_q base_simd nobase_simd
- simd nosimd sve fp16 sme cssc])
+ simd nosimd sve fp16 sme cssc sve2p2_or_sme2p2])
(define_enum_attr "arch" "arches" (const_string "any"))
(match_test "TARGET_SVE"))
(and (eq_attr "arch" "sme")
- (match_test "TARGET_SME"))))
+ (match_test "TARGET_SME"))
+
+ (and (eq_attr "arch" "sve2p2_or_sme2p2")
+ (match_test "TARGET_SVE2p2_OR_SME2p2"))))
(const_string "yes")
(const_string "no")))
Enable SVE2 sha3 instructions. This also enables SVE2 instructions.
@item sve2p1
Enable SVE2.1 instructions. This also enables SVE2 instructions.
+@item sve2p2
+Enable SVE2.2 instructions. This also enables SVE2 and SVE2.1 instructions.
@item tme
Enable the Transactional Memory Extension.
@item i8mm
@item sme2p1
Enable the Scalable Matrix Extension version 2.1. This also enables SME2
instructions.
+@item sme2p2
+Enable the Scalable Matrix Extension version 2.2. This also enables SME2
+and SME2.1 instructions.
@item fcma
Enable the complex number SIMD extensions.
@item jscvt
}]
}
+# Return true if this is an AArch64 target that can run SVE2.2 code.
+
+proc check_effective_target_aarch64_sve2p2_hw { } {
+ if { ![istarget aarch64*-*-*] } {
+ return 0
+ }
+ return [check_runtime aarch64_sve2p2_hw_available {
+ #pragma GCC target "+sve2p2"
+ int
+ main (void)
+ {
+ asm volatile ("compact z0.b, p0, z1.b");
+ return 0;
+ }
+ }]
+}
+
# Return true if this is an AArch64 target that can run SVE code and
# if its SVE vectors have exactly BITS bits.
"sb" "simd" "sve-b16b16" "sve" "sve2" "sve-sm4" "sve-aes" "sve-bitperm"
"sve-sha3" "f8f16mm" "f8f32mm" "sve-f16f32mm"
"sme-f8f16" "sme-f8f32"
- "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1"
+ "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "sme2p2"
"ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma" "sve-bfscale" "sme-lutv2"
}
}
}
+proc check_effective_target_aarch64_asm_sve2p2_ok { } {
+ if { [istarget aarch64*-*-*] } {
+ return [check_no_compiler_messages aarch64_sve2p2_assembler object {
+ __asm__ (".arch_extension sve2p2; compact z0.b,p0,z1.b");
+ } "-march=armv8-a+sve2p2"]
+ } else {
+ return 0
+ }
+}
+
proc check_effective_target_aarch64_small { } {
if { [istarget aarch64*-*-*] } {
return [check_no_compiler_messages aarch64_small object {