Commit the test file `cmpbr.c` before rules for generating the new
instructions are added, so that the changes in codegen are more obvious
in the next commit.

gcc/testsuite/ChangeLog:

        * lib/target-supports.exp: Add `cmpbr` to the list of extensions.
        * gcc.target/aarch64/cmpbr.c: New test.
---
 gcc/testsuite/gcc.target/aarch64/cmpbr.c | 1841 ++++++++++++++++++++++
 gcc/testsuite/lib/target-supports.exp    |   14 +-
 2 files changed, 1849 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/cmpbr.c

diff --git a/gcc/testsuite/gcc.target/aarch64/cmpbr.c 
b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
new file mode 100644
index 00000000000..b8925f14433
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
@@ -0,0 +1,1841 @@
+// Test that the instructions added by FEAT_CMPBR are emitted
+// { dg-do compile }
+// { dg-do-if assemble { target aarch64_asm_cmpbr_ok } }
+// { dg-options "-march=armv9.5-a+cmpbr -O2" }
+// { dg-final { check-function-bodies "**" "*/" "" { target *-*-* } 
{\.L[0-9]+} } }
+
+#include <stdint.h>
+
+typedef uint8_t u8;
+typedef int8_t i8;
+
+typedef uint16_t u16;
+typedef int16_t i16;
+
+typedef uint32_t u32;
+typedef int32_t i32;
+
+typedef uint64_t u64;
+typedef int64_t i64;
+
+int taken();
+int not_taken();
+
+#define COMPARE(ty, name, op, rhs)                                             
\
+  int ty##_x0_##name##_##rhs(ty x0, ty x1) {                                   
\
+    return (x0 op rhs) ? taken() : not_taken();                                
\
+  }
+
+#define COMPARE_ALL(unsigned_ty, signed_ty, rhs)                               
\
+  COMPARE(unsigned_ty, eq, ==, rhs);                                           
\
+  COMPARE(unsigned_ty, ne, !=, rhs);                                           
\
+                                                                               
\
+  COMPARE(unsigned_ty, ult, <, rhs);                                           
\
+  COMPARE(unsigned_ty, ule, <=, rhs);                                          
\
+  COMPARE(unsigned_ty, ugt, >, rhs);                                           
\
+  COMPARE(unsigned_ty, uge, >=, rhs);                                          
\
+                                                                               
\
+  COMPARE(signed_ty, slt, <, rhs);                                             
\
+  COMPARE(signed_ty, sle, <=, rhs);                                            
\
+  COMPARE(signed_ty, sgt, >, rhs);                                             
\
+  COMPARE(signed_ty, sge, >=, rhs);
+
+// ==== CBB<cc> (register) ====
+COMPARE_ALL(u8, i8, x1);
+
+// ==== CBH<cc> (register) ====
+COMPARE_ALL(u16, i16, x1);
+
+// ==== CB<cc> (register) ====
+COMPARE_ALL(u32, i32, x1);
+COMPARE_ALL(u64, i64, x1);
+
+// ==== CB<cc> (immediate) ====
+COMPARE_ALL(u32, i32, 42);
+COMPARE_ALL(u64, i64, 42);
+
+// ==== Special cases ====
+// Comparisons against the immediate 0 can be done for all types,
+// because we can use the wzr/xzr register as one of the operands.
+// However, we should prefer to use CBZ/CBNZ or TBZ/TBNZ when possible,
+// because they have larger range.
+COMPARE_ALL(u8, i8, 0);
+COMPARE_ALL(u16, i16, 0);
+COMPARE_ALL(u32, i32, 0);
+COMPARE_ALL(u64, i64, 0);
+
+// CBB and CBH cannot have immediate operands.
+// Instead we have to do a MOV+CB.
+COMPARE_ALL(u8, i8, 42);
+COMPARE_ALL(u16, i16, 42);
+
+// 64 is out of the range for immediate operands (0 to 63).
+// * For 8/16-bit types, use a MOV+CB as above.
+// * For 32/64-bit types, use a CMP+B<cc> instead,
+//   because B<cc> has a longer range than CB<cc>.
+COMPARE_ALL(u8, i8, 64);
+COMPARE_ALL(u16, i16, 64);
+COMPARE_ALL(u32, i32, 64);
+COMPARE_ALL(u64, i64, 64);
+
+// 4098 is out of the range for CMP (0 to 4095, optionally shifted by left by 
12
+// bits), but it can be materialized in a single MOV.
+COMPARE_ALL(u16, i16, 4098);
+COMPARE_ALL(u32, i32, 4098);
+COMPARE_ALL(u64, i64, 4098);
+
+/*
+** u8_x0_eq_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     beq     .L4
+**     b       not_taken
+** .L4:
+**     b       taken
+*/
+
+/*
+** u8_x0_ne_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     beq     .L6
+**     b       taken
+** .L6:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ult_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     bls     .L8
+**     b       taken
+** .L8:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ule_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     bcc     .L10
+**     b       taken
+** .L10:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ugt_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     bcs     .L12
+**     b       taken
+** .L12:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_uge_x1:
+**     and     w1, w1, 255
+**     cmp     w1, w0, uxtb
+**     bhi     .L14
+**     b       taken
+** .L14:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_slt_x1:
+**     sxtb    w1, w1
+**     cmp     w1, w0, sxtb
+**     ble     .L16
+**     b       taken
+** .L16:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sle_x1:
+**     sxtb    w1, w1
+**     cmp     w1, w0, sxtb
+**     blt     .L18
+**     b       taken
+** .L18:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sgt_x1:
+**     sxtb    w1, w1
+**     cmp     w1, w0, sxtb
+**     bge     .L20
+**     b       taken
+** .L20:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sge_x1:
+**     sxtb    w1, w1
+**     cmp     w1, w0, sxtb
+**     bgt     .L22
+**     b       taken
+** .L22:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_eq_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     beq     .L25
+**     b       not_taken
+** .L25:
+**     b       taken
+*/
+
+/*
+** u16_x0_ne_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     beq     .L27
+**     b       taken
+** .L27:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ult_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     bls     .L29
+**     b       taken
+** .L29:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ule_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     bcc     .L31
+**     b       taken
+** .L31:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ugt_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     bcs     .L33
+**     b       taken
+** .L33:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_uge_x1:
+**     and     w1, w1, 65535
+**     cmp     w1, w0, uxth
+**     bhi     .L35
+**     b       taken
+** .L35:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_slt_x1:
+**     sxth    w1, w1
+**     cmp     w1, w0, sxth
+**     ble     .L37
+**     b       taken
+** .L37:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sle_x1:
+**     sxth    w1, w1
+**     cmp     w1, w0, sxth
+**     blt     .L39
+**     b       taken
+** .L39:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sgt_x1:
+**     sxth    w1, w1
+**     cmp     w1, w0, sxth
+**     bge     .L41
+**     b       taken
+** .L41:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sge_x1:
+**     sxth    w1, w1
+**     cmp     w1, w0, sxth
+**     bgt     .L43
+**     b       taken
+** .L43:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_eq_x1:
+**     cmp     w0, w1
+**     beq     .L46
+**     b       not_taken
+** .L46:
+**     b       taken
+*/
+
+/*
+** u32_x0_ne_x1:
+**     cmp     w0, w1
+**     beq     .L48
+**     b       taken
+** .L48:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ult_x1:
+**     cmp     w0, w1
+**     bcs     .L50
+**     b       taken
+** .L50:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ule_x1:
+**     cmp     w0, w1
+**     bhi     .L52
+**     b       taken
+** .L52:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ugt_x1:
+**     cmp     w0, w1
+**     bls     .L54
+**     b       taken
+** .L54:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_uge_x1:
+**     cmp     w0, w1
+**     bcc     .L56
+**     b       taken
+** .L56:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_slt_x1:
+**     cmp     w0, w1
+**     bge     .L58
+**     b       taken
+** .L58:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sle_x1:
+**     cmp     w0, w1
+**     bgt     .L60
+**     b       taken
+** .L60:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sgt_x1:
+**     cmp     w0, w1
+**     ble     .L62
+**     b       taken
+** .L62:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sge_x1:
+**     cmp     w0, w1
+**     blt     .L64
+**     b       taken
+** .L64:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_eq_x1:
+**     cmp     x0, x1
+**     beq     .L67
+**     b       not_taken
+** .L67:
+**     b       taken
+*/
+
+/*
+** u64_x0_ne_x1:
+**     cmp     x0, x1
+**     beq     .L69
+**     b       taken
+** .L69:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ult_x1:
+**     cmp     x0, x1
+**     bcs     .L71
+**     b       taken
+** .L71:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ule_x1:
+**     cmp     x0, x1
+**     bhi     .L73
+**     b       taken
+** .L73:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ugt_x1:
+**     cmp     x0, x1
+**     bls     .L75
+**     b       taken
+** .L75:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_uge_x1:
+**     cmp     x0, x1
+**     bcc     .L77
+**     b       taken
+** .L77:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_slt_x1:
+**     cmp     x0, x1
+**     bge     .L79
+**     b       taken
+** .L79:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sle_x1:
+**     cmp     x0, x1
+**     bgt     .L81
+**     b       taken
+** .L81:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sgt_x1:
+**     cmp     x0, x1
+**     ble     .L83
+**     b       taken
+** .L83:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sge_x1:
+**     cmp     x0, x1
+**     blt     .L85
+**     b       taken
+** .L85:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_eq_42:
+**     cmp     w0, 42
+**     beq     .L88
+**     b       not_taken
+** .L88:
+**     b       taken
+*/
+
+/*
+** u32_x0_ne_42:
+**     cmp     w0, 42
+**     beq     .L90
+**     b       taken
+** .L90:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ult_42:
+**     cmp     w0, 41
+**     bhi     .L92
+**     b       taken
+** .L92:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ule_42:
+**     cmp     w0, 42
+**     bhi     .L94
+**     b       taken
+** .L94:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ugt_42:
+**     cmp     w0, 42
+**     bls     .L96
+**     b       taken
+** .L96:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_uge_42:
+**     cmp     w0, 41
+**     bls     .L98
+**     b       taken
+** .L98:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_slt_42:
+**     cmp     w0, 41
+**     bgt     .L100
+**     b       taken
+** .L100:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sle_42:
+**     cmp     w0, 42
+**     bgt     .L102
+**     b       taken
+** .L102:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sgt_42:
+**     cmp     w0, 42
+**     ble     .L104
+**     b       taken
+** .L104:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sge_42:
+**     cmp     w0, 41
+**     ble     .L106
+**     b       taken
+** .L106:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_eq_42:
+**     cmp     x0, 42
+**     beq     .L109
+**     b       not_taken
+** .L109:
+**     b       taken
+*/
+
+/*
+** u64_x0_ne_42:
+**     cmp     x0, 42
+**     beq     .L111
+**     b       taken
+** .L111:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ult_42:
+**     cmp     x0, 41
+**     bhi     .L113
+**     b       taken
+** .L113:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ule_42:
+**     cmp     x0, 42
+**     bhi     .L115
+**     b       taken
+** .L115:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ugt_42:
+**     cmp     x0, 42
+**     bls     .L117
+**     b       taken
+** .L117:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_uge_42:
+**     cmp     x0, 41
+**     bls     .L119
+**     b       taken
+** .L119:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_slt_42:
+**     cmp     x0, 41
+**     bgt     .L121
+**     b       taken
+** .L121:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sle_42:
+**     cmp     x0, 42
+**     bgt     .L123
+**     b       taken
+** .L123:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sgt_42:
+**     cmp     x0, 42
+**     ble     .L125
+**     b       taken
+** .L125:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sge_42:
+**     cmp     x0, 41
+**     ble     .L127
+**     b       taken
+** .L127:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_eq_0:
+**     tst     w0, 255
+**     bne     .L129
+**     b       taken
+** .L129:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ne_0:
+**     tst     w0, 255
+**     beq     .L131
+**     b       taken
+** .L131:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ult_0:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ule_0:
+**     tst     w0, 255
+**     bne     .L134
+**     b       taken
+** .L134:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ugt_0:
+**     tst     w0, 255
+**     beq     .L136
+**     b       taken
+** .L136:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_uge_0:
+**     b       taken
+*/
+
+/*
+** i8_x0_slt_0:
+**     tbnz    w0, 7, .L140
+**     b       not_taken
+** .L140:
+**     b       taken
+*/
+
+/*
+** i8_x0_sle_0:
+**     sxtb    w0, w0
+**     cmp     w0, 0
+**     ble     .L143
+**     b       not_taken
+** .L143:
+**     b       taken
+*/
+
+/*
+** i8_x0_sgt_0:
+**     sxtb    w0, w0
+**     cmp     w0, 0
+**     ble     .L145
+**     b       taken
+** .L145:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sge_0:
+**     tbnz    w0, 7, .L147
+**     b       taken
+** .L147:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_eq_0:
+**     tst     w0, 65535
+**     bne     .L149
+**     b       taken
+** .L149:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ne_0:
+**     tst     w0, 65535
+**     beq     .L151
+**     b       taken
+** .L151:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ult_0:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ule_0:
+**     tst     w0, 65535
+**     bne     .L154
+**     b       taken
+** .L154:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ugt_0:
+**     tst     w0, 65535
+**     beq     .L156
+**     b       taken
+** .L156:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_uge_0:
+**     b       taken
+*/
+
+/*
+** i16_x0_slt_0:
+**     tbnz    w0, 15, .L160
+**     b       not_taken
+** .L160:
+**     b       taken
+*/
+
+/*
+** i16_x0_sle_0:
+**     sxth    w0, w0
+**     cmp     w0, 0
+**     ble     .L163
+**     b       not_taken
+** .L163:
+**     b       taken
+*/
+
+/*
+** i16_x0_sgt_0:
+**     sxth    w0, w0
+**     cmp     w0, 0
+**     ble     .L165
+**     b       taken
+** .L165:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sge_0:
+**     tbnz    w0, 15, .L167
+**     b       taken
+** .L167:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_eq_0:
+**     cbnz    w0, .L169
+**     b       taken
+** .L169:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ne_0:
+**     cbz     w0, .L171
+**     b       taken
+** .L171:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ult_0:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ule_0:
+**     cbnz    w0, .L174
+**     b       taken
+** .L174:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ugt_0:
+**     cbz     w0, .L176
+**     b       taken
+** .L176:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_uge_0:
+**     b       taken
+*/
+
+/*
+** i32_x0_slt_0:
+**     tbnz    w0, #31, .L180
+**     b       not_taken
+** .L180:
+**     b       taken
+*/
+
+/*
+** i32_x0_sle_0:
+**     cmp     w0, 0
+**     ble     .L183
+**     b       not_taken
+** .L183:
+**     b       taken
+*/
+
+/*
+** i32_x0_sgt_0:
+**     cmp     w0, 0
+**     ble     .L185
+**     b       taken
+** .L185:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sge_0:
+**     tbnz    w0, #31, .L187
+**     b       taken
+** .L187:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_eq_0:
+**     cbnz    x0, .L189
+**     b       taken
+** .L189:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ne_0:
+**     cbz     x0, .L191
+**     b       taken
+** .L191:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ult_0:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ule_0:
+**     cbnz    x0, .L194
+**     b       taken
+** .L194:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ugt_0:
+**     cbz     x0, .L196
+**     b       taken
+** .L196:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_uge_0:
+**     b       taken
+*/
+
+/*
+** i64_x0_slt_0:
+**     tbnz    x0, #63, .L200
+**     b       not_taken
+** .L200:
+**     b       taken
+*/
+
+/*
+** i64_x0_sle_0:
+**     cmp     x0, 0
+**     ble     .L203
+**     b       not_taken
+** .L203:
+**     b       taken
+*/
+
+/*
+** i64_x0_sgt_0:
+**     cmp     x0, 0
+**     ble     .L205
+**     b       taken
+** .L205:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sge_0:
+**     tbnz    x0, #63, .L207
+**     b       taken
+** .L207:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_eq_42:
+**     and     w0, w0, 255
+**     cmp     w0, 42
+**     beq     .L210
+**     b       not_taken
+** .L210:
+**     b       taken
+*/
+
+/*
+** u8_x0_ne_42:
+**     and     w0, w0, 255
+**     cmp     w0, 42
+**     beq     .L212
+**     b       taken
+** .L212:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ult_42:
+**     and     w0, w0, 255
+**     cmp     w0, 41
+**     bhi     .L214
+**     b       taken
+** .L214:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ule_42:
+**     and     w0, w0, 255
+**     cmp     w0, 42
+**     bhi     .L216
+**     b       taken
+** .L216:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ugt_42:
+**     and     w0, w0, 255
+**     cmp     w0, 42
+**     bls     .L218
+**     b       taken
+** .L218:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_uge_42:
+**     and     w0, w0, 255
+**     cmp     w0, 41
+**     bls     .L220
+**     b       taken
+** .L220:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_slt_42:
+**     sxtb    w0, w0
+**     cmp     w0, 41
+**     bgt     .L222
+**     b       taken
+** .L222:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sle_42:
+**     sxtb    w0, w0
+**     cmp     w0, 42
+**     bgt     .L224
+**     b       taken
+** .L224:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sgt_42:
+**     sxtb    w0, w0
+**     cmp     w0, 42
+**     ble     .L226
+**     b       taken
+** .L226:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sge_42:
+**     sxtb    w0, w0
+**     cmp     w0, 41
+**     ble     .L228
+**     b       taken
+** .L228:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_eq_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 42
+**     beq     .L231
+**     b       not_taken
+** .L231:
+**     b       taken
+*/
+
+/*
+** u16_x0_ne_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 42
+**     beq     .L233
+**     b       taken
+** .L233:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ult_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 41
+**     bhi     .L235
+**     b       taken
+** .L235:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ule_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 42
+**     bhi     .L237
+**     b       taken
+** .L237:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ugt_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 42
+**     bls     .L239
+**     b       taken
+** .L239:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_uge_42:
+**     and     w0, w0, 65535
+**     cmp     w0, 41
+**     bls     .L241
+**     b       taken
+** .L241:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_slt_42:
+**     sxth    w0, w0
+**     cmp     w0, 41
+**     bgt     .L243
+**     b       taken
+** .L243:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sle_42:
+**     sxth    w0, w0
+**     cmp     w0, 42
+**     bgt     .L245
+**     b       taken
+** .L245:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sgt_42:
+**     sxth    w0, w0
+**     cmp     w0, 42
+**     ble     .L247
+**     b       taken
+** .L247:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sge_42:
+**     sxth    w0, w0
+**     cmp     w0, 41
+**     ble     .L249
+**     b       taken
+** .L249:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_eq_64:
+**     and     w0, w0, 255
+**     cmp     w0, 64
+**     beq     .L252
+**     b       not_taken
+** .L252:
+**     b       taken
+*/
+
+/*
+** u8_x0_ne_64:
+**     and     w0, w0, 255
+**     cmp     w0, 64
+**     beq     .L254
+**     b       taken
+** .L254:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ult_64:
+**     and     w0, w0, 255
+**     cmp     w0, 63
+**     bhi     .L256
+**     b       taken
+** .L256:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ule_64:
+**     and     w0, w0, 255
+**     cmp     w0, 64
+**     bhi     .L258
+**     b       taken
+** .L258:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_ugt_64:
+**     and     w0, w0, 255
+**     cmp     w0, 64
+**     bls     .L260
+**     b       taken
+** .L260:
+**     b       not_taken
+*/
+
+/*
+** u8_x0_uge_64:
+**     and     w0, w0, 255
+**     cmp     w0, 63
+**     bls     .L262
+**     b       taken
+** .L262:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_slt_64:
+**     sxtb    w0, w0
+**     cmp     w0, 63
+**     bgt     .L264
+**     b       taken
+** .L264:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sle_64:
+**     sxtb    w0, w0
+**     cmp     w0, 64
+**     bgt     .L266
+**     b       taken
+** .L266:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sgt_64:
+**     sxtb    w0, w0
+**     cmp     w0, 64
+**     ble     .L268
+**     b       taken
+** .L268:
+**     b       not_taken
+*/
+
+/*
+** i8_x0_sge_64:
+**     sxtb    w0, w0
+**     cmp     w0, 63
+**     ble     .L270
+**     b       taken
+** .L270:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_eq_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 64
+**     beq     .L273
+**     b       not_taken
+** .L273:
+**     b       taken
+*/
+
+/*
+** u16_x0_ne_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 64
+**     beq     .L275
+**     b       taken
+** .L275:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ult_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 63
+**     bhi     .L277
+**     b       taken
+** .L277:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ule_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 64
+**     bhi     .L279
+**     b       taken
+** .L279:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ugt_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 64
+**     bls     .L281
+**     b       taken
+** .L281:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_uge_64:
+**     and     w0, w0, 65535
+**     cmp     w0, 63
+**     bls     .L283
+**     b       taken
+** .L283:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_slt_64:
+**     sxth    w0, w0
+**     cmp     w0, 63
+**     bgt     .L285
+**     b       taken
+** .L285:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sle_64:
+**     sxth    w0, w0
+**     cmp     w0, 64
+**     bgt     .L287
+**     b       taken
+** .L287:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sgt_64:
+**     sxth    w0, w0
+**     cmp     w0, 64
+**     ble     .L289
+**     b       taken
+** .L289:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sge_64:
+**     sxth    w0, w0
+**     cmp     w0, 63
+**     ble     .L291
+**     b       taken
+** .L291:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_eq_64:
+**     cmp     w0, 64
+**     beq     .L294
+**     b       not_taken
+** .L294:
+**     b       taken
+*/
+
+/*
+** u32_x0_ne_64:
+**     cmp     w0, 64
+**     beq     .L296
+**     b       taken
+** .L296:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ult_64:
+**     cmp     w0, 63
+**     bhi     .L298
+**     b       taken
+** .L298:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ule_64:
+**     cmp     w0, 64
+**     bhi     .L300
+**     b       taken
+** .L300:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ugt_64:
+**     cmp     w0, 64
+**     bls     .L302
+**     b       taken
+** .L302:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_uge_64:
+**     cmp     w0, 63
+**     bls     .L304
+**     b       taken
+** .L304:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_slt_64:
+**     cmp     w0, 63
+**     bgt     .L306
+**     b       taken
+** .L306:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sle_64:
+**     cmp     w0, 64
+**     bgt     .L308
+**     b       taken
+** .L308:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sgt_64:
+**     cmp     w0, 64
+**     ble     .L310
+**     b       taken
+** .L310:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sge_64:
+**     cmp     w0, 63
+**     ble     .L312
+**     b       taken
+** .L312:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_eq_64:
+**     cmp     x0, 64
+**     beq     .L315
+**     b       not_taken
+** .L315:
+**     b       taken
+*/
+
+/*
+** u64_x0_ne_64:
+**     cmp     x0, 64
+**     beq     .L317
+**     b       taken
+** .L317:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ult_64:
+**     cmp     x0, 63
+**     bhi     .L319
+**     b       taken
+** .L319:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ule_64:
+**     cmp     x0, 64
+**     bhi     .L321
+**     b       taken
+** .L321:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ugt_64:
+**     cmp     x0, 64
+**     bls     .L323
+**     b       taken
+** .L323:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_uge_64:
+**     cmp     x0, 63
+**     bls     .L325
+**     b       taken
+** .L325:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_slt_64:
+**     cmp     x0, 63
+**     bgt     .L327
+**     b       taken
+** .L327:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sle_64:
+**     cmp     x0, 64
+**     bgt     .L329
+**     b       taken
+** .L329:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sgt_64:
+**     cmp     x0, 64
+**     ble     .L331
+**     b       taken
+** .L331:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sge_64:
+**     cmp     x0, 63
+**     ble     .L333
+**     b       taken
+** .L333:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_eq_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, uxth
+**     beq     .L336
+**     b       not_taken
+** .L336:
+**     b       taken
+*/
+
+/*
+** u16_x0_ne_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, uxth
+**     beq     .L338
+**     b       taken
+** .L338:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ult_4098:
+**     mov     w1, 4097
+**     cmp     w1, w0, uxth
+**     bcc     .L340
+**     b       taken
+** .L340:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ule_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, uxth
+**     bcc     .L342
+**     b       taken
+** .L342:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_ugt_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, uxth
+**     bcs     .L344
+**     b       taken
+** .L344:
+**     b       not_taken
+*/
+
+/*
+** u16_x0_uge_4098:
+**     mov     w1, 4097
+**     cmp     w1, w0, uxth
+**     bcs     .L346
+**     b       taken
+** .L346:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_slt_4098:
+**     mov     w1, 4097
+**     cmp     w1, w0, sxth
+**     blt     .L348
+**     b       taken
+** .L348:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sle_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, sxth
+**     blt     .L350
+**     b       taken
+** .L350:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sgt_4098:
+**     mov     w1, 4098
+**     cmp     w1, w0, sxth
+**     bge     .L352
+**     b       taken
+** .L352:
+**     b       not_taken
+*/
+
+/*
+** i16_x0_sge_4098:
+**     mov     w1, 4097
+**     cmp     w1, w0, sxth
+**     bge     .L354
+**     b       taken
+** .L354:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_eq_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     beq     .L357
+**     b       not_taken
+** .L357:
+**     b       taken
+*/
+
+/*
+** u32_x0_ne_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     beq     .L359
+**     b       taken
+** .L359:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ult_4098:
+**     mov     w1, 4097
+**     cmp     w0, w1
+**     bhi     .L361
+**     b       taken
+** .L361:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ule_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     bhi     .L363
+**     b       taken
+** .L363:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_ugt_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     bls     .L365
+**     b       taken
+** .L365:
+**     b       not_taken
+*/
+
+/*
+** u32_x0_uge_4098:
+**     mov     w1, 4097
+**     cmp     w0, w1
+**     bls     .L367
+**     b       taken
+** .L367:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_slt_4098:
+**     mov     w1, 4097
+**     cmp     w0, w1
+**     bgt     .L369
+**     b       taken
+** .L369:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sle_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     bgt     .L371
+**     b       taken
+** .L371:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sgt_4098:
+**     mov     w1, 4098
+**     cmp     w0, w1
+**     ble     .L373
+**     b       taken
+** .L373:
+**     b       not_taken
+*/
+
+/*
+** i32_x0_sge_4098:
+**     mov     w1, 4097
+**     cmp     w0, w1
+**     ble     .L375
+**     b       taken
+** .L375:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_eq_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     beq     .L378
+**     b       not_taken
+** .L378:
+**     b       taken
+*/
+
+/*
+** u64_x0_ne_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     beq     .L380
+**     b       taken
+** .L380:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ult_4098:
+**     mov     x1, 4097
+**     cmp     x0, x1
+**     bhi     .L382
+**     b       taken
+** .L382:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ule_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     bhi     .L384
+**     b       taken
+** .L384:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_ugt_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     bls     .L386
+**     b       taken
+** .L386:
+**     b       not_taken
+*/
+
+/*
+** u64_x0_uge_4098:
+**     mov     x1, 4097
+**     cmp     x0, x1
+**     bls     .L388
+**     b       taken
+** .L388:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_slt_4098:
+**     mov     x1, 4097
+**     cmp     x0, x1
+**     bgt     .L390
+**     b       taken
+** .L390:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sle_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     bgt     .L392
+**     b       taken
+** .L392:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sgt_4098:
+**     mov     x1, 4098
+**     cmp     x0, x1
+**     ble     .L394
+**     b       taken
+** .L394:
+**     b       not_taken
+*/
+
+/*
+** i64_x0_sge_4098:
+**     mov     x1, 4097
+**     cmp     x0, x1
+**     ble     .L396
+**     b       taken
+** .L396:
+**     b       not_taken
+*/
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 82e5c31e499..2d568ff230b 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -12460,12 +12460,14 @@ proc 
check_effective_target_aarch64_gas_has_build_attributes { } {
 # 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" "dotprod" "sve"
-                         "i8mm" "f32mm" "f64mm" "bf16" "sb" "sve2" "ls64"
-                         "lut" "sme" "sme-i16i64" "sme2" "sve-b16b16"
-                         "sme-b16b16" "sme-f16f16" "sme2p1" "fp8" "fp8fma"
-                         "ssve-fp8fma" "fp8dot2" "ssve-fp8dot2" "fp8dot4"
-                         "ssve-fp8dot4"} {
+set exts {
+    "bf16" "cmpbr" "crc" "crypto" "dotprod" "f32mm" "f64mm" "fp" "fp8"
+    "fp8dot2" "fp8dot4" "fp8fma" "i8mm" "ls64" "lse" "lut" "sb" "simd"
+    "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "ssve-fp8dot2"
+    "ssve-fp8dot4" "ssve-fp8fma" "sve-b16b16" "sve" "sve2"
+}
+
+foreach { aarch64_ext } $exts {
     eval [string map [list FUNC $aarch64_ext] {
        proc check_effective_target_aarch64_asm_FUNC_ok { } {
          if { [istarget aarch64*-*-*] } {
-- 
2.45.2


Reply via email to