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 | 1659 ++++++++++++++++++++++ gcc/testsuite/lib/target-supports.exp | 14 +- 2 files changed, 1667 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..8534283bc26 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c @@ -0,0 +1,1659 @@ +// 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 "**" "" "" } } + +#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 +** b taken +*/ + +/* +** u8_x0_ne_x1: +** and w1, w1, 255 +** cmp w1, w0, uxtb +** beq .L6 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ult_x1: +** and w1, w1, 255 +** cmp w1, w0, uxtb +** bls .L8 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ule_x1: +** and w1, w1, 255 +** cmp w1, w0, uxtb +** bcc .L10 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ugt_x1: +** and w1, w1, 255 +** cmp w1, w0, uxtb +** bcs .L12 +** b taken +** b not_taken +*/ + +/* +** u8_x0_uge_x1: +** and w1, w1, 255 +** cmp w1, w0, uxtb +** bhi .L14 +** b taken +** b not_taken +*/ + +/* +** i8_x0_slt_x1: +** sxtb w1, w1 +** cmp w1, w0, sxtb +** ble .L16 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sle_x1: +** sxtb w1, w1 +** cmp w1, w0, sxtb +** blt .L18 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sgt_x1: +** sxtb w1, w1 +** cmp w1, w0, sxtb +** bge .L20 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sge_x1: +** sxtb w1, w1 +** cmp w1, w0, sxtb +** bgt .L22 +** b taken +** b not_taken +*/ + +/* +** u16_x0_eq_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** beq .L25 +** b not_taken +** b taken +*/ + +/* +** u16_x0_ne_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** beq .L27 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ult_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** bls .L29 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ule_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** bcc .L31 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ugt_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** bcs .L33 +** b taken +** b not_taken +*/ + +/* +** u16_x0_uge_x1: +** and w1, w1, 65535 +** cmp w1, w0, uxth +** bhi .L35 +** b taken +** b not_taken +*/ + +/* +** i16_x0_slt_x1: +** sxth w1, w1 +** cmp w1, w0, sxth +** ble .L37 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sle_x1: +** sxth w1, w1 +** cmp w1, w0, sxth +** blt .L39 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sgt_x1: +** sxth w1, w1 +** cmp w1, w0, sxth +** bge .L41 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sge_x1: +** sxth w1, w1 +** cmp w1, w0, sxth +** bgt .L43 +** b taken +** b not_taken +*/ + +/* +** u32_x0_eq_x1: +** cmp w0, w1 +** beq .L46 +** b not_taken +** b taken +*/ + +/* +** u32_x0_ne_x1: +** cmp w0, w1 +** beq .L48 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ult_x1: +** cmp w0, w1 +** bcs .L50 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ule_x1: +** cmp w0, w1 +** bhi .L52 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ugt_x1: +** cmp w0, w1 +** bls .L54 +** b taken +** b not_taken +*/ + +/* +** u32_x0_uge_x1: +** cmp w0, w1 +** bcc .L56 +** b taken +** b not_taken +*/ + +/* +** i32_x0_slt_x1: +** cmp w0, w1 +** bge .L58 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sle_x1: +** cmp w0, w1 +** bgt .L60 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sgt_x1: +** cmp w0, w1 +** ble .L62 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sge_x1: +** cmp w0, w1 +** blt .L64 +** b taken +** b not_taken +*/ + +/* +** u64_x0_eq_x1: +** cmp x0, x1 +** beq .L67 +** b not_taken +** b taken +*/ + +/* +** u64_x0_ne_x1: +** cmp x0, x1 +** beq .L69 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ult_x1: +** cmp x0, x1 +** bcs .L71 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ule_x1: +** cmp x0, x1 +** bhi .L73 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ugt_x1: +** cmp x0, x1 +** bls .L75 +** b taken +** b not_taken +*/ + +/* +** u64_x0_uge_x1: +** cmp x0, x1 +** bcc .L77 +** b taken +** b not_taken +*/ + +/* +** i64_x0_slt_x1: +** cmp x0, x1 +** bge .L79 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sle_x1: +** cmp x0, x1 +** bgt .L81 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sgt_x1: +** cmp x0, x1 +** ble .L83 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sge_x1: +** cmp x0, x1 +** blt .L85 +** b taken +** b not_taken +*/ + +/* +** u32_x0_eq_42: +** cmp w0, 42 +** beq .L88 +** b not_taken +** b taken +*/ + +/* +** u32_x0_ne_42: +** cmp w0, 42 +** beq .L90 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ult_42: +** cmp w0, 41 +** bhi .L92 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ule_42: +** cmp w0, 42 +** bhi .L94 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ugt_42: +** cmp w0, 42 +** bls .L96 +** b taken +** b not_taken +*/ + +/* +** u32_x0_uge_42: +** cmp w0, 41 +** bls .L98 +** b taken +** b not_taken +*/ + +/* +** i32_x0_slt_42: +** cmp w0, 41 +** bgt .L100 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sle_42: +** cmp w0, 42 +** bgt .L102 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sgt_42: +** cmp w0, 42 +** ble .L104 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sge_42: +** cmp w0, 41 +** ble .L106 +** b taken +** b not_taken +*/ + +/* +** u64_x0_eq_42: +** cmp x0, 42 +** beq .L109 +** b not_taken +** b taken +*/ + +/* +** u64_x0_ne_42: +** cmp x0, 42 +** beq .L111 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ult_42: +** cmp x0, 41 +** bhi .L113 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ule_42: +** cmp x0, 42 +** bhi .L115 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ugt_42: +** cmp x0, 42 +** bls .L117 +** b taken +** b not_taken +*/ + +/* +** u64_x0_uge_42: +** cmp x0, 41 +** bls .L119 +** b taken +** b not_taken +*/ + +/* +** i64_x0_slt_42: +** cmp x0, 41 +** bgt .L121 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sle_42: +** cmp x0, 42 +** bgt .L123 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sgt_42: +** cmp x0, 42 +** ble .L125 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sge_42: +** cmp x0, 41 +** ble .L127 +** b taken +** b not_taken +*/ + +/* +** u8_x0_eq_0: +** tst w0, 255 +** bne .L129 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ne_0: +** tst w0, 255 +** beq .L131 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ult_0: +** b not_taken +*/ + +/* +** u8_x0_ule_0: +** tst w0, 255 +** bne .L134 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ugt_0: +** tst w0, 255 +** beq .L136 +** b taken +** b not_taken +*/ + +/* +** u8_x0_uge_0: +** b taken +*/ + +/* +** i8_x0_slt_0: +** tbnz w0, 7, .L140 +** b not_taken +** b taken +*/ + +/* +** i8_x0_sle_0: +** sxtb w0, w0 +** cmp w0, 0 +** ble .L143 +** b not_taken +** b taken +*/ + +/* +** i8_x0_sgt_0: +** sxtb w0, w0 +** cmp w0, 0 +** ble .L145 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sge_0: +** tbnz w0, 7, .L147 +** b taken +** b not_taken +*/ + +/* +** u16_x0_eq_0: +** tst w0, 65535 +** bne .L149 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ne_0: +** tst w0, 65535 +** beq .L151 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ult_0: +** b not_taken +*/ + +/* +** u16_x0_ule_0: +** tst w0, 65535 +** bne .L154 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ugt_0: +** tst w0, 65535 +** beq .L156 +** b taken +** b not_taken +*/ + +/* +** u16_x0_uge_0: +** b taken +*/ + +/* +** i16_x0_slt_0: +** tbnz w0, 15, .L160 +** b not_taken +** b taken +*/ + +/* +** i16_x0_sle_0: +** sxth w0, w0 +** cmp w0, 0 +** ble .L163 +** b not_taken +** b taken +*/ + +/* +** i16_x0_sgt_0: +** sxth w0, w0 +** cmp w0, 0 +** ble .L165 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sge_0: +** tbnz w0, 15, .L167 +** b taken +** b not_taken +*/ + +/* +** u32_x0_eq_0: +** cbnz w0, .L169 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ne_0: +** cbz w0, .L171 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ult_0: +** b not_taken +*/ + +/* +** u32_x0_ule_0: +** cbnz w0, .L174 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ugt_0: +** cbz w0, .L176 +** b taken +** b not_taken +*/ + +/* +** u32_x0_uge_0: +** b taken +*/ + +/* +** i32_x0_slt_0: +** tbnz w0, #31, .L180 +** b not_taken +** b taken +*/ + +/* +** i32_x0_sle_0: +** cmp w0, 0 +** ble .L183 +** b not_taken +** b taken +*/ + +/* +** i32_x0_sgt_0: +** cmp w0, 0 +** ble .L185 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sge_0: +** tbnz w0, #31, .L187 +** b taken +** b not_taken +*/ + +/* +** u64_x0_eq_0: +** cbnz x0, .L189 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ne_0: +** cbz x0, .L191 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ult_0: +** b not_taken +*/ + +/* +** u64_x0_ule_0: +** cbnz x0, .L194 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ugt_0: +** cbz x0, .L196 +** b taken +** b not_taken +*/ + +/* +** u64_x0_uge_0: +** b taken +*/ + +/* +** i64_x0_slt_0: +** tbnz x0, #63, .L200 +** b not_taken +** b taken +*/ + +/* +** i64_x0_sle_0: +** cmp x0, 0 +** ble .L203 +** b not_taken +** b taken +*/ + +/* +** i64_x0_sgt_0: +** cmp x0, 0 +** ble .L205 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sge_0: +** tbnz x0, #63, .L207 +** b taken +** b not_taken +*/ + +/* +** u8_x0_eq_42: +** and w0, w0, 255 +** cmp w0, 42 +** beq .L210 +** b not_taken +** b taken +*/ + +/* +** u8_x0_ne_42: +** and w0, w0, 255 +** cmp w0, 42 +** beq .L212 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ult_42: +** and w0, w0, 255 +** cmp w0, 41 +** bhi .L214 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ule_42: +** and w0, w0, 255 +** cmp w0, 42 +** bhi .L216 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ugt_42: +** and w0, w0, 255 +** cmp w0, 42 +** bls .L218 +** b taken +** b not_taken +*/ + +/* +** u8_x0_uge_42: +** and w0, w0, 255 +** cmp w0, 41 +** bls .L220 +** b taken +** b not_taken +*/ + +/* +** i8_x0_slt_42: +** sxtb w0, w0 +** cmp w0, 41 +** bgt .L222 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sle_42: +** sxtb w0, w0 +** cmp w0, 42 +** bgt .L224 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sgt_42: +** sxtb w0, w0 +** cmp w0, 42 +** ble .L226 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sge_42: +** sxtb w0, w0 +** cmp w0, 41 +** ble .L228 +** b taken +** b not_taken +*/ + +/* +** u16_x0_eq_42: +** and w0, w0, 65535 +** cmp w0, 42 +** beq .L231 +** b not_taken +** b taken +*/ + +/* +** u16_x0_ne_42: +** and w0, w0, 65535 +** cmp w0, 42 +** beq .L233 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ult_42: +** and w0, w0, 65535 +** cmp w0, 41 +** bhi .L235 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ule_42: +** and w0, w0, 65535 +** cmp w0, 42 +** bhi .L237 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ugt_42: +** and w0, w0, 65535 +** cmp w0, 42 +** bls .L239 +** b taken +** b not_taken +*/ + +/* +** u16_x0_uge_42: +** and w0, w0, 65535 +** cmp w0, 41 +** bls .L241 +** b taken +** b not_taken +*/ + +/* +** i16_x0_slt_42: +** sxth w0, w0 +** cmp w0, 41 +** bgt .L243 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sle_42: +** sxth w0, w0 +** cmp w0, 42 +** bgt .L245 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sgt_42: +** sxth w0, w0 +** cmp w0, 42 +** ble .L247 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sge_42: +** sxth w0, w0 +** cmp w0, 41 +** ble .L249 +** b taken +** b not_taken +*/ + +/* +** u8_x0_eq_64: +** and w0, w0, 255 +** cmp w0, 64 +** beq .L252 +** b not_taken +** b taken +*/ + +/* +** u8_x0_ne_64: +** and w0, w0, 255 +** cmp w0, 64 +** beq .L254 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ult_64: +** and w0, w0, 255 +** cmp w0, 63 +** bhi .L256 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ule_64: +** and w0, w0, 255 +** cmp w0, 64 +** bhi .L258 +** b taken +** b not_taken +*/ + +/* +** u8_x0_ugt_64: +** and w0, w0, 255 +** cmp w0, 64 +** bls .L260 +** b taken +** b not_taken +*/ + +/* +** u8_x0_uge_64: +** and w0, w0, 255 +** cmp w0, 63 +** bls .L262 +** b taken +** b not_taken +*/ + +/* +** i8_x0_slt_64: +** sxtb w0, w0 +** cmp w0, 63 +** bgt .L264 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sle_64: +** sxtb w0, w0 +** cmp w0, 64 +** bgt .L266 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sgt_64: +** sxtb w0, w0 +** cmp w0, 64 +** ble .L268 +** b taken +** b not_taken +*/ + +/* +** i8_x0_sge_64: +** sxtb w0, w0 +** cmp w0, 63 +** ble .L270 +** b taken +** b not_taken +*/ + +/* +** u16_x0_eq_64: +** and w0, w0, 65535 +** cmp w0, 64 +** beq .L273 +** b not_taken +** b taken +*/ + +/* +** u16_x0_ne_64: +** and w0, w0, 65535 +** cmp w0, 64 +** beq .L275 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ult_64: +** and w0, w0, 65535 +** cmp w0, 63 +** bhi .L277 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ule_64: +** and w0, w0, 65535 +** cmp w0, 64 +** bhi .L279 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ugt_64: +** and w0, w0, 65535 +** cmp w0, 64 +** bls .L281 +** b taken +** b not_taken +*/ + +/* +** u16_x0_uge_64: +** and w0, w0, 65535 +** cmp w0, 63 +** bls .L283 +** b taken +** b not_taken +*/ + +/* +** i16_x0_slt_64: +** sxth w0, w0 +** cmp w0, 63 +** bgt .L285 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sle_64: +** sxth w0, w0 +** cmp w0, 64 +** bgt .L287 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sgt_64: +** sxth w0, w0 +** cmp w0, 64 +** ble .L289 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sge_64: +** sxth w0, w0 +** cmp w0, 63 +** ble .L291 +** b taken +** b not_taken +*/ + +/* +** u32_x0_eq_64: +** cmp w0, 64 +** beq .L294 +** b not_taken +** b taken +*/ + +/* +** u32_x0_ne_64: +** cmp w0, 64 +** beq .L296 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ult_64: +** cmp w0, 63 +** bhi .L298 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ule_64: +** cmp w0, 64 +** bhi .L300 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ugt_64: +** cmp w0, 64 +** bls .L302 +** b taken +** b not_taken +*/ + +/* +** u32_x0_uge_64: +** cmp w0, 63 +** bls .L304 +** b taken +** b not_taken +*/ + +/* +** i32_x0_slt_64: +** cmp w0, 63 +** bgt .L306 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sle_64: +** cmp w0, 64 +** bgt .L308 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sgt_64: +** cmp w0, 64 +** ble .L310 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sge_64: +** cmp w0, 63 +** ble .L312 +** b taken +** b not_taken +*/ + +/* +** u64_x0_eq_64: +** cmp x0, 64 +** beq .L315 +** b not_taken +** b taken +*/ + +/* +** u64_x0_ne_64: +** cmp x0, 64 +** beq .L317 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ult_64: +** cmp x0, 63 +** bhi .L319 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ule_64: +** cmp x0, 64 +** bhi .L321 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ugt_64: +** cmp x0, 64 +** bls .L323 +** b taken +** b not_taken +*/ + +/* +** u64_x0_uge_64: +** cmp x0, 63 +** bls .L325 +** b taken +** b not_taken +*/ + +/* +** i64_x0_slt_64: +** cmp x0, 63 +** bgt .L327 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sle_64: +** cmp x0, 64 +** bgt .L329 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sgt_64: +** cmp x0, 64 +** ble .L331 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sge_64: +** cmp x0, 63 +** ble .L333 +** b taken +** b not_taken +*/ + +/* +** u16_x0_eq_4098: +** mov w1, 4098 +** cmp w1, w0, uxth +** beq .L336 +** b not_taken +** b taken +*/ + +/* +** u16_x0_ne_4098: +** mov w1, 4098 +** cmp w1, w0, uxth +** beq .L338 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ult_4098: +** mov w1, 4097 +** cmp w1, w0, uxth +** bcc .L340 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ule_4098: +** mov w1, 4098 +** cmp w1, w0, uxth +** bcc .L342 +** b taken +** b not_taken +*/ + +/* +** u16_x0_ugt_4098: +** mov w1, 4098 +** cmp w1, w0, uxth +** bcs .L344 +** b taken +** b not_taken +*/ + +/* +** u16_x0_uge_4098: +** mov w1, 4097 +** cmp w1, w0, uxth +** bcs .L346 +** b taken +** b not_taken +*/ + +/* +** i16_x0_slt_4098: +** mov w1, 4097 +** cmp w1, w0, sxth +** blt .L348 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sle_4098: +** mov w1, 4098 +** cmp w1, w0, sxth +** blt .L350 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sgt_4098: +** mov w1, 4098 +** cmp w1, w0, sxth +** bge .L352 +** b taken +** b not_taken +*/ + +/* +** i16_x0_sge_4098: +** mov w1, 4097 +** cmp w1, w0, sxth +** bge .L354 +** b taken +** b not_taken +*/ + +/* +** u32_x0_eq_4098: +** mov w1, 4098 +** cmp w0, w1 +** beq .L357 +** b not_taken +** b taken +*/ + +/* +** u32_x0_ne_4098: +** mov w1, 4098 +** cmp w0, w1 +** beq .L359 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ult_4098: +** mov w1, 4097 +** cmp w0, w1 +** bhi .L361 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ule_4098: +** mov w1, 4098 +** cmp w0, w1 +** bhi .L363 +** b taken +** b not_taken +*/ + +/* +** u32_x0_ugt_4098: +** mov w1, 4098 +** cmp w0, w1 +** bls .L365 +** b taken +** b not_taken +*/ + +/* +** u32_x0_uge_4098: +** mov w1, 4097 +** cmp w0, w1 +** bls .L367 +** b taken +** b not_taken +*/ + +/* +** i32_x0_slt_4098: +** mov w1, 4097 +** cmp w0, w1 +** bgt .L369 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sle_4098: +** mov w1, 4098 +** cmp w0, w1 +** bgt .L371 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sgt_4098: +** mov w1, 4098 +** cmp w0, w1 +** ble .L373 +** b taken +** b not_taken +*/ + +/* +** i32_x0_sge_4098: +** mov w1, 4097 +** cmp w0, w1 +** ble .L375 +** b taken +** b not_taken +*/ + +/* +** u64_x0_eq_4098: +** mov x1, 4098 +** cmp x0, x1 +** beq .L378 +** b not_taken +** b taken +*/ + +/* +** u64_x0_ne_4098: +** mov x1, 4098 +** cmp x0, x1 +** beq .L380 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ult_4098: +** mov x1, 4097 +** cmp x0, x1 +** bhi .L382 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ule_4098: +** mov x1, 4098 +** cmp x0, x1 +** bhi .L384 +** b taken +** b not_taken +*/ + +/* +** u64_x0_ugt_4098: +** mov x1, 4098 +** cmp x0, x1 +** bls .L386 +** b taken +** b not_taken +*/ + +/* +** u64_x0_uge_4098: +** mov x1, 4097 +** cmp x0, x1 +** bls .L388 +** b taken +** b not_taken +*/ + +/* +** i64_x0_slt_4098: +** mov x1, 4097 +** cmp x0, x1 +** bgt .L390 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sle_4098: +** mov x1, 4098 +** cmp x0, x1 +** bgt .L392 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sgt_4098: +** mov x1, 4098 +** cmp x0, x1 +** ble .L394 +** b taken +** b not_taken +*/ + +/* +** i64_x0_sge_4098: +** mov x1, 4097 +** cmp x0, x1 +** ble .L396 +** b taken +** b not_taken +*/ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index e0495d8437c..de6f48e38b7 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -12381,21 +12381,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" "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*-*-*] } { return [check_no_compiler_messages aarch64_FUNC_assembler object { __asm__ (".arch_extension FUNC"); } "-march=armv8-a+FUNC"] } else { return 0 } } }] } -- 2.45.2