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