(match_operand:SVE_FULL_F 3 "register_operand")]
UNSPEC_COND_FABS)]
SVE_COND_SMAXMIN))]
- "TARGET_SVE_FAMINMAX"
+ "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2"
{@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
[ w , Upl , %0 , w ; * ] <faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
[ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;<faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
/* Floating Point Absolute Maximum/Minimum extension instructions are
enabled through +faminmax. */
#define TARGET_FAMINMAX AARCH64_HAVE_ISA (FAMINMAX)
-#define TARGET_SVE_FAMINMAX (TARGET_SVE && TARGET_FAMINMAX)
/* Lookup table (LUTI) extension instructions are enabled through +lut. */
#define TARGET_LUT AARCH64_HAVE_ISA (LUT)
(define_int_iterator SVE_COND_FP_BINARY
[UNSPEC_COND_FADD
- (UNSPEC_COND_FAMAX "TARGET_SVE_FAMINMAX")
- (UNSPEC_COND_FAMIN "TARGET_SVE_FAMINMAX")
+ (UNSPEC_COND_FAMAX "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2")
+ (UNSPEC_COND_FAMIN "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2")
UNSPEC_COND_FDIV
UNSPEC_COND_FMAX
UNSPEC_COND_FMAXNM
UNSPEC_COND_SMIN])
(define_int_iterator SVE_COND_FP_BINARY_REG
- [(UNSPEC_COND_FAMAX "TARGET_SVE_FAMINMAX")
- (UNSPEC_COND_FAMIN "TARGET_SVE_FAMINMAX")
+ [(UNSPEC_COND_FAMAX "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2")
+ (UNSPEC_COND_FAMIN "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2")
UNSPEC_COND_FDIV
UNSPEC_COND_FMULX])
#include "arm_sve.h"
-#pragma GCC target "+sve+faminmax"
+#pragma GCC target "+sve2+faminmax"
#define TEST_FAMAX(TYPE) \
void fn_famax_##TYPE (TYPE * restrict a, \
#include "arm_sve.h"
-#pragma GCC target "+sve+faminmax"
+#pragma GCC target "+sve2+faminmax"
#define TEST_WITH_SVMAX(TYPE) \
TYPE fn_fmax_##TYPE (TYPE x, TYPE y) { \
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv9.2-a+sve2")
+
+void
+test (svbool_t p, svfloat16_t a, svfloat16_t b)
+{
+ svamax_f16_m (p, a, b); /* { dg-error {ACLE function 'svamax_f16_m' requires ISA extension 'faminmax'} } */
+}