blob: 70747710e9a03b5695c7efaaacb04c12d09ffd2f [file]
// Test that the instructions added by FEAT_CMPBR are emitted
// { dg-do compile }
// { 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 __builtin_expect(x0 op rhs, 0) ? 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);
// If the branch destination is out of range (1KiB), we have to generate an
// extra B instruction (which can handle larger displacements) and branch around
// it
// clang-format off
#define STORE_1() z = 0;
#define STORE_2() STORE_1() STORE_1()
#define STORE_4() STORE_2() STORE_2()
#define STORE_8() STORE_4() STORE_4()
#define STORE_16() STORE_8() STORE_8()
#define STORE_32() STORE_16() STORE_16()
#define STORE_64() STORE_32() STORE_32()
#define STORE_128() STORE_64() STORE_64()
#define STORE_256() STORE_128() STORE_128()
// clang-format on
#define FAR_BRANCH(ty, rhs) \
int far_branch_##ty##_x0_eq_##rhs(ty x0, ty x1) { \
volatile int z = 0; \
if (__builtin_expect(x0 == rhs, 1)) { \
STORE_256(); \
} \
return taken(); \
}
FAR_BRANCH(u8, x1);
FAR_BRANCH(u16, x1);
FAR_BRANCH(u32, x1);
FAR_BRANCH(u64, x1);
FAR_BRANCH(u8, 42);
FAR_BRANCH(u16, 42);
FAR_BRANCH(u32, 42);
FAR_BRANCH(u64, 42);
/*
** u8_x0_eq_x1:
** cbbeq (?:w1, w0|w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ne_x1:
** cbbne (?:w1, w0|w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ult_x1:
** (?:cbbhi w1, w0|cbblo w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ule_x1:
** (?:cbbhs w1, w0|cbbls w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ugt_x1:
** (?:cbblo w1, w0|cbbhi w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_uge_x1:
** (?:cbbls w1, w0|cbbhs w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_slt_x1:
** (?:cbbgt w1, w0|cbblt w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sle_x1:
** (?:cbbge w1, w0|cbble w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sgt_x1:
** (?:cbblt w1, w0|cbbgt w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sge_x1:
** (?:cbble w1, w0|cbbge w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_eq_x1:
** cbheq (?:w1, w0|w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ne_x1:
** cbhne (?:w1, w0|w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ult_x1:
** (?:cbhhi w1, w0|cbhlo w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ule_x1:
** (?:cbhhs w1, w0|cbhls w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ugt_x1:
** (?:cbhlo w1, w0|cbhhi w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_uge_x1:
** (?:cbhls w1, w0|cbhhs w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_slt_x1:
** (?:cbhgt w1, w0|cbhlt w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sle_x1:
** (?:cbhge w1, w0|cbhle w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sgt_x1:
** (?:cbhlt w1, w0|cbhgt w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sge_x1:
** (?:cbhle w1, w0|cbhge w0, w1), .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_eq_x1:
** cbeq w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ne_x1:
** cbne w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ult_x1:
** cblo w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ule_x1:
** cbls w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ugt_x1:
** cbhi w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_uge_x1:
** cbhs w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_slt_x1:
** cblt w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sle_x1:
** cble w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sgt_x1:
** cbgt w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sge_x1:
** cbge w0, w1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_eq_x1:
** cbeq x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ne_x1:
** cbne x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ult_x1:
** cblo x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ule_x1:
** cbls x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ugt_x1:
** cbhi x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_uge_x1:
** cbhs x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_slt_x1:
** cblt x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sle_x1:
** cble x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sgt_x1:
** cbgt x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sge_x1:
** cbge x0, x1, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_eq_42:
** cbeq w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ne_42:
** cbne w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ult_42:
** cbls w0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ule_42:
** cbls w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ugt_42:
** cbhi w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_uge_42:
** cbhi w0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_slt_42:
** cble w0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sle_42:
** cble w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sgt_42:
** cbgt w0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sge_42:
** cbgt w0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_eq_42:
** cbeq x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ne_42:
** cbne x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ult_42:
** cbls x0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ule_42:
** cbls x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ugt_42:
** cbhi x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_uge_42:
** cbhi x0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_slt_42:
** cble x0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sle_42:
** cble x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sgt_42:
** cbgt x0, 42, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sge_42:
** cbgt x0, 41, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_eq_0:
** cbbeq w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ne_0:
** cbbne w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ult_0:
** b not_taken
*/
/*
** u8_x0_ule_0:
** cbbeq w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_ugt_0:
** cbbne w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_uge_0:
** b taken
*/
/*
** i8_x0_slt_0:
** tbnz w0, #7, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sle_0:
** cbble w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sgt_0:
** cbbgt w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i8_x0_sge_0:
** tbz w0, #7, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_eq_0:
** cbheq w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ne_0:
** cbhne w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ult_0:
** b not_taken
*/
/*
** u16_x0_ule_0:
** cbheq w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_ugt_0:
** cbhne w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_uge_0:
** b taken
*/
/*
** i16_x0_slt_0:
** tbnz w0, #15, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sle_0:
** cbhle w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sgt_0:
** cbhgt w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i16_x0_sge_0:
** tbz w0, #15, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_eq_0:
** cbz w0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ne_0:
** cbnz w0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ult_0:
** b not_taken
*/
/*
** u32_x0_ule_0:
** cbz w0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ugt_0:
** cbnz w0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_uge_0:
** b taken
*/
/*
** i32_x0_slt_0:
** tbnz w0, #31, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sle_0:
** cble w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sgt_0:
** cbgt w0, wzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sge_0:
** tbz w0, #31, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_eq_0:
** cbz x0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ne_0:
** cbnz x0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ult_0:
** b not_taken
*/
/*
** u64_x0_ule_0:
** cbz x0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ugt_0:
** cbnz x0, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_uge_0:
** b taken
*/
/*
** i64_x0_slt_0:
** tbnz x0, #63, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sle_0:
** cble x0, xzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sgt_0:
** cbgt x0, xzr, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sge_0:
** tbz x0, #63, .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u8_x0_eq_42:
** mov w([0-9]+), 42
** cbbeq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ne_42:
** mov (w[0-9]+), 42
** cbbne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ult_42:
** mov (w[0-9]+), 41
** cbbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ule_42:
** mov (w[0-9]+), 42
** cbbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ugt_42:
** mov (w[0-9]+), 42
** cbbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_uge_42:
** mov (w[0-9]+), 41
** cbbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_slt_42:
** mov (w[0-9]+), 41
** cbble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sle_42:
** mov (w[0-9]+), 42
** cbble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sgt_42:
** mov (w[0-9]+), 42
** cbbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sge_42:
** mov (w[0-9]+), 41
** cbbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_eq_42:
** mov w([0-9]+), 42
** cbheq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ne_42:
** mov (w[0-9]+), 42
** cbhne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ult_42:
** mov (w[0-9]+), 41
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ule_42:
** mov (w[0-9]+), 42
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ugt_42:
** mov (w[0-9]+), 42
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_uge_42:
** mov (w[0-9]+), 41
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_slt_42:
** mov (w[0-9]+), 41
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sle_42:
** mov (w[0-9]+), 42
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sgt_42:
** mov (w[0-9]+), 42
** cbhgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sge_42:
** mov (w[0-9]+), 41
** cbhgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_eq_64:
** mov w([0-9]+), 64
** cbbeq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ne_64:
** mov (w[0-9]+), 64
** cbbne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ult_64:
** mov (w[0-9]+), 63
** cbbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ule_64:
** mov (w[0-9]+), 64
** cbbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_ugt_64:
** mov (w[0-9]+), 64
** cbbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u8_x0_uge_64:
** mov (w[0-9]+), 63
** cbbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_slt_64:
** mov (w[0-9]+), 63
** cbble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sle_64:
** mov (w[0-9]+), 64
** cbble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sgt_64:
** mov (w[0-9]+), 64
** cbbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i8_x0_sge_64:
** mov (w[0-9]+), 63
** cbbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_eq_64:
** mov w([0-9]+), 64
** cbheq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ne_64:
** mov (w[0-9]+), 64
** cbhne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ult_64:
** mov (w[0-9]+), 63
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ule_64:
** mov (w[0-9]+), 64
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ugt_64:
** mov (w[0-9]+), 64
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_uge_64:
** mov (w[0-9]+), 63
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_slt_64:
** mov (w[0-9]+), 63
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sle_64:
** mov (w[0-9]+), 64
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sgt_64:
** mov (w[0-9]+), 64
** cbhgt w0, w1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sge_64:
** mov (w[0-9]+), 63
** cbhgt w0, w1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_eq_64:
** cmp w0, 64
** beq .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ne_64:
** cmp w0, 64
** bne .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ult_64: { xfail *-*-* }
** cbhi w0, 63, .L([0-9]+)
** b taken
** .L\1:
** b not_taken
*/
/*
** u32_x0_ule_64:
** cmp w0, 64
** bls .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_ugt_64:
** cmp w0, 64
** bhi .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u32_x0_uge_64:
** cmp w0, 63
** bhi .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_slt_64: { xfail *-*-* }
** cbgt w0, 63, .L([0-9]+)
** b taken
** .L\1:
** b not_taken
*/
/*
** i32_x0_sle_64:
** cmp w0, 64
** ble .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sgt_64:
** cmp w0, 64
** bgt .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i32_x0_sge_64:
** cmp w0, 63
** bgt .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_eq_64:
** cmp x0, 64
** beq .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ne_64:
** cmp x0, 64
** bne .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ult_64: { xfail *-*-* }
** cbhi x0, 63, .L([0-9]+)
** b taken
** .L\1:
** b not_taken
*/
/*
** u64_x0_ule_64:
** cmp x0, 64
** bls .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_ugt_64:
** cmp x0, 64
** bhi .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u64_x0_uge_64:
** cmp x0, 63
** bhi .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_slt_64: { xfail *-*-* }
** cbgt x0, 63, .L([0-9]+)
** b taken
** .L\1:
** b not_taken
*/
/*
** i64_x0_sle_64:
** cmp x0, 64
** ble .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sgt_64:
** cmp x0, 64
** bgt .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** i64_x0_sge_64:
** cmp x0, 63
** bgt .L([0-9]+)
** b not_taken
** .L\1:
** b taken
*/
/*
** u16_x0_eq_4098:
** mov w([0-9]+), 4098
** cbheq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ne_4098:
** mov (w[0-9]+), 4098
** cbhne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ult_4098:
** mov (w[0-9]+), 4097
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ule_4098:
** mov (w[0-9]+), 4098
** cbhls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_ugt_4098:
** mov (w[0-9]+), 4098
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u16_x0_uge_4098:
** mov (w[0-9]+), 4097
** cbhhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_slt_4098:
** mov (w[0-9]+), 4097
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sle_4098:
** mov (w[0-9]+), 4098
** cbhle w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sgt_4098:
** mov (w[0-9]+), 4098
** cbhgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i16_x0_sge_4098:
** mov (w[0-9]+), 4097
** cbhgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_eq_4098:
** mov w([0-9]+), 4098
** cbeq w0, w\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_ne_4098:
** mov (w[0-9]+), 4098
** cbne w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_ult_4098:
** mov (w[0-9]+), 4097
** cbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_ule_4098:
** mov (w[0-9]+), 4098
** cbls w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_ugt_4098:
** mov (w[0-9]+), 4098
** cbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u32_x0_uge_4098:
** mov (w[0-9]+), 4097
** cbhi w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i32_x0_slt_4098:
** mov (w[0-9]+), 4097
** cble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i32_x0_sle_4098:
** mov (w[0-9]+), 4098
** cble w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i32_x0_sgt_4098:
** mov (w[0-9]+), 4098
** cbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i32_x0_sge_4098:
** mov (w[0-9]+), 4097
** cbgt w0, \1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_eq_4098:
** mov w([0-9]+), 4098
** cbeq x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_ne_4098:
** mov w([0-9]+), 4098
** cbne x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_ult_4098:
** mov w([0-9]+), 4097
** cbls x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_ule_4098:
** mov w([0-9]+), 4098
** cbls x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_ugt_4098:
** mov w([0-9]+), 4098
** cbhi x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** u64_x0_uge_4098:
** mov w([0-9]+), 4097
** cbhi x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i64_x0_slt_4098:
** mov w([0-9]+), 4097
** cble x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i64_x0_sle_4098:
** mov w([0-9]+), 4098
** cble x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i64_x0_sgt_4098:
** mov w([0-9]+), 4098
** cbgt x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** i64_x0_sge_4098:
** mov w([0-9]+), 4097
** cbgt x0, x\1, .L([0-9]+)
** b not_taken
** .L\2:
** b taken
*/
/*
** far_branch_u8_x0_eq_x1:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbbeq w0|w1, w1|w0, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u16_x0_eq_x1:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbheq w0|w1, w1|w0, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u32_x0_eq_x1:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbeq w0, w1, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u64_x0_eq_x1:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbeq x0, x1, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u8_x0_eq_42:
** sub sp, sp, #16
** mov w([0-9]+), 42
** str wzr, \[sp, 12\]
** cbbeq w0, w\1, .L([0-9]+)
** b .L([0-9]+)
** .L\2:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\3:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u16_x0_eq_42:
** sub sp, sp, #16
** mov w([0-9]+), 42
** str wzr, \[sp, 12\]
** cbheq w0, w\1, .L([0-9]+)
** b .L([0-9]+)
** .L\2:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\3:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u32_x0_eq_42:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbeq w0, 42, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/
/*
** far_branch_u64_x0_eq_42:
** sub sp, sp, #16
** str wzr, \[sp, 12\]
** cbeq x0, 42, .L([0-9]+)
** b .L([0-9]+)
** .L\1:
** str wzr, \[sp, 12\]
** ...
** str wzr, \[sp, 12\]
** .L\2:
** add sp, sp, 16
** b taken
*/