Move the rules for CBZ/TBZ to be above the rules for
CBB<cond>/CBH<cond>/CB<cond>. We want them to have higher priority
because they can express larger displacements.
gcc/ChangeLog:
* config/aarch64/aarch64.md (aarch64_cbz<optab><mode>1): Move
above rules for CBB<cond>/CBH<cond>/CB<cond>.
(*aarch64_tbz<optab><mode>1): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/cmpbr.c: Update tests.
---
gcc/config/aarch64/aarch64.md | 162 ++++++++++++-----------
gcc/testsuite/gcc.target/aarch64/cmpbr.c | 32 ++---
2 files changed, 104 insertions(+), 90 deletions(-)
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 0b708f8b2f6..d3514ff1ef9 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -697,27 +697,38 @@ (define_insn "jump"
;; Maximum PC-relative positive/negative displacements for various branching
;; instructions.
(define_constants
[
;; +/- 128MiB. Used by B, BL.
(BRANCH_LEN_P_128MiB 134217724)
(BRANCH_LEN_N_128MiB -134217728)
;; +/- 1MiB. Used by B.<cond>, CBZ, CBNZ.
(BRANCH_LEN_P_1MiB 1048572)
(BRANCH_LEN_N_1MiB -1048576)
;; +/- 32KiB. Used by TBZ, TBNZ.
(BRANCH_LEN_P_32KiB 32764)
(BRANCH_LEN_N_32KiB -32768)
;; +/- 1KiB. Used by CBB<cond>, CBH<cond>, CB<cond>.
(BRANCH_LEN_P_1Kib 1020)
(BRANCH_LEN_N_1Kib -1024)
]
)
;; -------------------------------------------------------------------
;; Conditional jumps
+;; The order of the rules below is important.
+;; Higher priority rules are preferred because they can express larger
+;; displacements.
+;; 1) EQ/NE comparisons against zero are handled by CBZ/CBNZ.
+;; 2) LT/GE comparisons against zero are handled by TBZ/TBNZ.
+;; 3) When the CMPBR extension is enabled:
+;; a) Comparisons between two registers are handled by
+;; CBB<cond>/CBH<cond>/CB<cond>.
+;; b) Comparisons between a GP register and an immediate in the range 0-63
are
+;; handled by CB<cond> (immediate).
+;; 4) Otherwise, emit a CMP+B<cond> sequence.
;; -------------------------------------------------------------------
(define_expand "cbranch<GPI:mode>4"
@@ -770,14 +781,91 @@ (define_expand "cbranch<mode>4"
(define_expand "cbranchcc4"
[(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
[(match_operand 1 "cc_register")
(match_operand 2 "const0_operand")])
(label_ref (match_operand 3))
(pc)))]
""
""
)
+;; For an EQ/NE comparison against zero, emit `CBZ`/`CBNZ`
+(define_insn "aarch64_cbz<optab><mode>1"
+ [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
+ (const_int 0))
+ (label_ref (match_operand 1))
+ (pc)))]
+ "!aarch64_track_speculation"
+ {
+ if (get_attr_length (insn) == 8)
+ return aarch64_gen_far_branch (operands, 1, "Lcb", "<inv_cb>\\t%<w>0, ");
+ else
+ return "<cbz>\\t%<w>0, %l1";
+ }
+ [(set_attr "type" "branch")
+ (set (attr "length")
+ (if_then_else (and (ge (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_N_1MiB))
+ (lt (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_P_1MiB)))
+ (const_int 4)
+ (const_int 8)))
+ (set (attr "far_branch")
+ (if_then_else (and (ge (minus (match_dup 2) (pc))
+ (const_int BRANCH_LEN_N_1MiB))
+ (lt (minus (match_dup 2) (pc))
+ (const_int BRANCH_LEN_P_1MiB)))
+ (const_string "no")
+ (const_string "yes")))]
+)
+
+;; For an LT/GE comparison against zero, emit `TBZ`/`TBNZ`
+(define_insn "*aarch64_tbz<optab><mode>1"
+ [(set (pc) (if_then_else (LTGE (match_operand:ALLI 0 "register_operand" "r")
+ (const_int 0))
+ (label_ref (match_operand 1))
+ (pc)))
+ (clobber (reg:CC CC_REGNUM))]
+ "!aarch64_track_speculation"
+ {
+ if (get_attr_length (insn) == 8)
+ {
+ if (get_attr_far_branch (insn) == FAR_BRANCH_YES)
+ return aarch64_gen_far_branch (operands, 1, "Ltb",
+ "<inv_tb>\\t%<w>0, <sizem1>, ");
+ else
+ {
+ char buf[64];
+ uint64_t val = ((uint64_t) 1)
+ << (GET_MODE_SIZE (<MODE>mode) * BITS_PER_UNIT - 1);
+ sprintf (buf, "tst\t%%<w>0, %" PRId64, val);
+ output_asm_insn (buf, operands);
+ return "<bcond>\t%l1";
+ }
+ }
+ else
+ return "<tbz>\t%<w>0, <sizem1>, %l1";
+ }
+ [(set_attr "type" "branch")
+ (set (attr "length")
+ (if_then_else (and (ge (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_N_32KiB))
+ (lt (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_P_32KiB)))
+ (const_int 4)
+ (const_int 8)))
+ (set (attr "far_branch")
+ (if_then_else (and (ge (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_N_1MiB))
+ (lt (minus (match_dup 1) (pc))
+ (const_int BRANCH_LEN_P_1MiB)))
+ (const_string "no")
+ (const_string "yes")))]
+)
+
;; Emit a `CB<cond> (register)` or `CB<cond> (immediate)` instruction.
+;; Only immediates in the range 0-63 are supported.
+;; Comparisons against immediates outside this range fall back to
+;; CMP + B<cond>.
(define_insn "aarch64_cb<GPI:mode>"
[(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
[(match_operand:GPI 1 "register_operand" "r")
@@ -867,112 +955,38 @@ (define_insn "aarch64_bcond"
;; For a 24-bit immediate CST we can optimize the compare for equality
;; and branch sequence from:
;; mov x0, #imm1
;; movk x0, #imm2, lsl 16 /* x0 contains CST. */
;; cmp x1, x0
;; b<ne,eq> .Label
;; into the shorter:
;; sub x0, x1, #(CST & 0xfff000)
;; subs x0, x0, #(CST & 0x000fff)
;; b<ne,eq> .Label
(define_insn_and_split "*aarch64_bcond_wide_imm<GPI:mode>"
[(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
(match_operand:GPI 1 "aarch64_imm24" "n"))
(label_ref:P (match_operand 2))
(pc)))]
"!aarch64_move_imm (INTVAL (operands[1]), <GPI:MODE>mode)
&& !aarch64_plus_operand (operands[1], <GPI:MODE>mode)
&& !reload_completed"
"#"
"&& true"
[(const_int 0)]
{
HOST_WIDE_INT lo_imm = UINTVAL (operands[1]) & 0xfff;
HOST_WIDE_INT hi_imm = UINTVAL (operands[1]) & 0xfff000;
rtx tmp = gen_reg_rtx (<GPI:MODE>mode);
emit_insn (gen_add<GPI:mode>3 (tmp, operands[0], GEN_INT (-hi_imm)));
emit_insn (gen_add<GPI:mode>3_compare0 (tmp, tmp, GEN_INT (-lo_imm)));
rtx cc_reg = gen_rtx_REG (CC_NZmode, CC_REGNUM);
rtx cmp_rtx = gen_rtx_fmt_ee (<EQL:CMP>, <GPI:MODE>mode,
cc_reg, const0_rtx);
emit_jump_insn (gen_aarch64_bcond (cmp_rtx, cc_reg, operands[2]));
DONE;
}
)
-;; For an EQ/NE comparison against zero, emit `CBZ`/`CBNZ`
-(define_insn "aarch64_cbz<optab><mode>1"
- [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
- (const_int 0))
- (label_ref (match_operand 1))
- (pc)))]
- "!aarch64_track_speculation"
- {
- if (get_attr_length (insn) == 8)
- return aarch64_gen_far_branch (operands, 1, "Lcb", "<inv_cb>\\t%<w>0, ");
- else
- return "<cbz>\\t%<w>0, %l1";
- }
- [(set_attr "type" "branch")
- (set (attr "length")
- (if_then_else (and (ge (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_N_1MiB))
- (lt (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_P_1MiB)))
- (const_int 4)
- (const_int 8)))
- (set (attr "far_branch")
- (if_then_else (and (ge (minus (match_dup 2) (pc))
- (const_int BRANCH_LEN_N_1MiB))
- (lt (minus (match_dup 2) (pc))
- (const_int BRANCH_LEN_P_1MiB)))
- (const_string "no")
- (const_string "yes")))]
-)
-
-;; For an LT/GE comparison against zero, emit `TBZ`/`TBNZ`
-(define_insn "*aarch64_tbz<optab><mode>1"
- [(set (pc) (if_then_else (LTGE (match_operand:ALLI 0 "register_operand" "r")
- (const_int 0))
- (label_ref (match_operand 1))
- (pc)))
- (clobber (reg:CC CC_REGNUM))]
- "!aarch64_track_speculation"
- {
- if (get_attr_length (insn) == 8)
- {
- if (get_attr_far_branch (insn) == FAR_BRANCH_YES)
- return aarch64_gen_far_branch (operands, 1, "Ltb",
- "<inv_tb>\\t%<w>0, <sizem1>, ");
- else
- {
- char buf[64];
- uint64_t val = ((uint64_t) 1)
- << (GET_MODE_SIZE (<MODE>mode) * BITS_PER_UNIT - 1);
- sprintf (buf, "tst\t%%<w>0, %" PRId64, val);
- output_asm_insn (buf, operands);
- return "<bcond>\t%l1";
- }
- }
- else
- return "<tbz>\t%<w>0, <sizem1>, %l1";
- }
- [(set_attr "type" "branch")
- (set (attr "length")
- (if_then_else (and (ge (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_N_32KiB))
- (lt (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_P_32KiB)))
- (const_int 4)
- (const_int 8)))
- (set (attr "far_branch")
- (if_then_else (and (ge (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_N_1MiB))
- (lt (minus (match_dup 1) (pc))
- (const_int BRANCH_LEN_P_1MiB)))
- (const_string "no")
- (const_string "yes")))]
-)
-
;; -------------------------------------------------------------------
;; Test bit and branch
;; -------------------------------------------------------------------
diff --git a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
index f97b8026efe..62448214892 100644
--- a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
+++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
@@ -85,1397 +85,1397 @@ COMPARE_ALL(u32, i32, 4098);
COMPARE_ALL(u64, i64, 4098);
/*
** u8_x0_eq_x1:
** cbbeq w1, w0, .L4
** b not_taken
** b taken
*/
/*
** u8_x0_ne_x1:
** cbbeq w1, w0, .L6
** b taken
** b not_taken
*/
/*
** u8_x0_ult_x1:
** cbbls w1, w0, .L8
** b taken
** b not_taken
*/
/*
** u8_x0_ule_x1:
** cbbcc w1, w0, .L10
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_x1:
** cbbcs w1, w0, .L12
** b taken
** b not_taken
*/
/*
** u8_x0_uge_x1:
** cbbhi w1, w0, .L14
** b taken
** b not_taken
*/
/*
** i8_x0_slt_x1:
** cbble w1, w0, .L16
** b taken
** b not_taken
*/
/*
** i8_x0_sle_x1:
** cbblt w1, w0, .L18
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_x1:
** cbbge w1, w0, .L20
** b taken
** b not_taken
*/
/*
** i8_x0_sge_x1:
** cbbgt w1, w0, .L22
** b taken
** b not_taken
*/
/*
** u16_x0_eq_x1:
** cbheq w1, w0, .L25
** b not_taken
** b taken
*/
/*
** u16_x0_ne_x1:
** cbheq w1, w0, .L27
** b taken
** b not_taken
*/
/*
** u16_x0_ult_x1:
** cbhls w1, w0, .L29
** b taken
** b not_taken
*/
/*
** u16_x0_ule_x1:
** cbhcc w1, w0, .L31
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_x1:
** cbhcs w1, w0, .L33
** b taken
** b not_taken
*/
/*
** u16_x0_uge_x1:
** cbhhi w1, w0, .L35
** b taken
** b not_taken
*/
/*
** i16_x0_slt_x1:
** cbhle w1, w0, .L37
** b taken
** b not_taken
*/
/*
** i16_x0_sle_x1:
** cbhlt w1, w0, .L39
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_x1:
** cbhge w1, w0, .L41
** b taken
** b not_taken
*/
/*
** i16_x0_sge_x1:
** cbhgt w1, w0, .L43
** b taken
** b not_taken
*/
/*
** u32_x0_eq_x1:
** cbeq w0, w1, .L46
** b not_taken
** b taken
*/
/*
** u32_x0_ne_x1:
** cbeq w0, w1, .L48
** b taken
** b not_taken
*/
/*
** u32_x0_ult_x1:
** cbcs w0, w1, .L50
** b taken
** b not_taken
*/
/*
** u32_x0_ule_x1:
** cbhi w0, w1, .L52
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_x1:
** cbls w0, w1, .L54
** b taken
** b not_taken
*/
/*
** u32_x0_uge_x1:
** cbcc w0, w1, .L56
** b taken
** b not_taken
*/
/*
** i32_x0_slt_x1:
** cbge w0, w1, .L58
** b taken
** b not_taken
*/
/*
** i32_x0_sle_x1:
** cbgt w0, w1, .L60
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_x1:
** cble w0, w1, .L62
** b taken
** b not_taken
*/
/*
** i32_x0_sge_x1:
** cblt w0, w1, .L64
** b taken
** b not_taken
*/
/*
** u64_x0_eq_x1:
** cbeq x0, x1, .L67
** b not_taken
** b taken
*/
/*
** u64_x0_ne_x1:
** cbeq x0, x1, .L69
** b taken
** b not_taken
*/
/*
** u64_x0_ult_x1:
** cbcs x0, x1, .L71
** b taken
** b not_taken
*/
/*
** u64_x0_ule_x1:
** cbhi x0, x1, .L73
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_x1:
** cbls x0, x1, .L75
** b taken
** b not_taken
*/
/*
** u64_x0_uge_x1:
** cbcc x0, x1, .L77
** b taken
** b not_taken
*/
/*
** i64_x0_slt_x1:
** cbge x0, x1, .L79
** b taken
** b not_taken
*/
/*
** i64_x0_sle_x1:
** cbgt x0, x1, .L81
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_x1:
** cble x0, x1, .L83
** b taken
** b not_taken
*/
/*
** i64_x0_sge_x1:
** cblt x0, x1, .L85
** b taken
** b not_taken
*/
/*
** u32_x0_eq_42:
** cbeq w0, 42, .L88
** b not_taken
** b taken
*/
/*
** u32_x0_ne_42:
** cbeq w0, 42, .L90
** b taken
** b not_taken
*/
/*
** u32_x0_ult_42:
** cbhi w0, 41, .L92
** b taken
** b not_taken
*/
/*
** u32_x0_ule_42:
** cbhi w0, 42, .L94
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_42:
** cbls w0, 42, .L96
** b taken
** b not_taken
*/
/*
** u32_x0_uge_42:
** cbls w0, 41, .L98
** b taken
** b not_taken
*/
/*
** i32_x0_slt_42:
** cbgt w0, 41, .L100
** b taken
** b not_taken
*/
/*
** i32_x0_sle_42:
** cbgt w0, 42, .L102
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_42:
** cble w0, 42, .L104
** b taken
** b not_taken
*/
/*
** i32_x0_sge_42:
** cble w0, 41, .L106
** b taken
** b not_taken
*/
/*
** u64_x0_eq_42:
** cbeq x0, 42, .L109
** b not_taken
** b taken
*/
/*
** u64_x0_ne_42:
** cbeq x0, 42, .L111
** b taken
** b not_taken
*/
/*
** u64_x0_ult_42:
** cbhi x0, 41, .L113
** b taken
** b not_taken
*/
/*
** u64_x0_ule_42:
** cbhi x0, 42, .L115
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_42:
** cbls x0, 42, .L117
** b taken
** b not_taken
*/
/*
** u64_x0_uge_42:
** cbls x0, 41, .L119
** b taken
** b not_taken
*/
/*
** i64_x0_slt_42:
** cbgt x0, 41, .L121
** b taken
** b not_taken
*/
/*
** i64_x0_sle_42:
** cbgt x0, 42, .L123
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_42:
** cble x0, 42, .L125
** b taken
** b not_taken
*/
/*
** i64_x0_sge_42:
** cble x0, 41, .L127
** b taken
** b not_taken
*/
/*
** u8_x0_eq_0:
** cbbne w0, wzr, .L129
** b taken
** b not_taken
*/
/*
** u8_x0_ne_0:
** cbbeq w0, wzr, .L131
** b taken
** b not_taken
*/
/*
** u8_x0_ult_0:
** b not_taken
*/
/*
** u8_x0_ule_0:
** cbbne w0, wzr, .L134
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_0:
** cbbeq w0, wzr, .L136
** b taken
** b not_taken
*/
/*
** u8_x0_uge_0:
** b taken
*/
/*
** i8_x0_slt_0:
-** cbblt w0, wzr, .L140
+** tbnz w0, #7, .L140
** b not_taken
** b taken
*/
/*
** i8_x0_sle_0:
** cbble w0, wzr, .L143
** b not_taken
** b taken
*/
/*
** i8_x0_sgt_0:
** cbble w0, wzr, .L145
** b taken
** b not_taken
*/
/*
** i8_x0_sge_0:
-** cbblt w0, wzr, .L147
+** tbnz w0, #7, .L147
** b taken
** b not_taken
*/
/*
** u16_x0_eq_0:
** cbhne w0, wzr, .L149
** b taken
** b not_taken
*/
/*
** u16_x0_ne_0:
** cbheq w0, wzr, .L151
** b taken
** b not_taken
*/
/*
** u16_x0_ult_0:
** b not_taken
*/
/*
** u16_x0_ule_0:
** cbhne w0, wzr, .L154
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_0:
** cbheq w0, wzr, .L156
** b taken
** b not_taken
*/
/*
** u16_x0_uge_0:
** b taken
*/
/*
** i16_x0_slt_0:
-** cbhlt w0, wzr, .L160
+** tbnz w0, #15, .L160
** b not_taken
** b taken
*/
/*
** i16_x0_sle_0:
** cbhle w0, wzr, .L163
** b not_taken
** b taken
*/
/*
** i16_x0_sgt_0:
** cbhle w0, wzr, .L165
** b taken
** b not_taken
*/
/*
** i16_x0_sge_0:
-** cbhlt w0, wzr, .L167
+** tbnz w0, #15, .L167
** b taken
** b not_taken
*/
/*
** u32_x0_eq_0:
-** cbne w0, wzr, .L169
+** cbnz w0, .L169
** b taken
** b not_taken
*/
/*
** u32_x0_ne_0:
-** cbeq w0, wzr, .L171
+** cbz w0, .L171
** b taken
** b not_taken
*/
/*
** u32_x0_ult_0:
** b not_taken
*/
/*
** u32_x0_ule_0:
-** cbne w0, wzr, .L174
+** cbnz w0, .L174
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_0:
-** cbeq w0, wzr, .L176
+** cbz w0, .L176
** b taken
** b not_taken
*/
/*
** u32_x0_uge_0:
** b taken
*/
/*
** i32_x0_slt_0:
-** cblt w0, wzr, .L180
+** tbnz w0, #31, .L180
** b not_taken
** b taken
*/
/*
** i32_x0_sle_0:
** cble w0, wzr, .L183
** b not_taken
** b taken
*/
/*
** i32_x0_sgt_0:
** cble w0, wzr, .L185
** b taken
** b not_taken
*/
/*
** i32_x0_sge_0:
-** cblt w0, wzr, .L187
+** tbnz w0, #31, .L187
** b taken
** b not_taken
*/
/*
** u64_x0_eq_0:
-** cbne x0, xzr, .L189
+** cbnz x0, .L189
** b taken
** b not_taken
*/
/*
** u64_x0_ne_0:
-** cbeq x0, xzr, .L191
+** cbz x0, .L191
** b taken
** b not_taken
*/
/*
** u64_x0_ult_0:
** b not_taken
*/
/*
** u64_x0_ule_0:
-** cbne x0, xzr, .L194
+** cbnz x0, .L194
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_0:
-** cbeq x0, xzr, .L196
+** cbz x0, .L196
** b taken
** b not_taken
*/
/*
** u64_x0_uge_0:
** b taken
*/
/*
** i64_x0_slt_0:
-** cblt x0, xzr, .L200
+** tbnz x0, #63, .L200
** b not_taken
** b taken
*/
/*
** i64_x0_sle_0:
** cble x0, xzr, .L203
** b not_taken
** b taken
*/
/*
** i64_x0_sgt_0:
** cble x0, xzr, .L205
** b taken
** b not_taken
*/
/*
** i64_x0_sge_0:
-** cblt x0, xzr, .L207
+** tbnz x0, #63, .L207
** b taken
** b not_taken
*/
/*
** u8_x0_eq_42:
** mov w1, 42
** cbbeq w0, w1, .L210
** b not_taken
** b taken
*/
/*
** u8_x0_ne_42:
** mov w1, 42
** cbbeq w0, w1, .L212
** b taken
** b not_taken
*/
/*
** u8_x0_ult_42:
** mov w1, 41
** cbbhi w0, w1, .L214
** b taken
** b not_taken
*/
/*
** u8_x0_ule_42:
** mov w1, 42
** cbbhi w0, w1, .L216
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_42:
** mov w1, 42
** cbbls w0, w1, .L218
** b taken
** b not_taken
*/
/*
** u8_x0_uge_42:
** mov w1, 41
** cbbls w0, w1, .L220
** b taken
** b not_taken
*/
/*
** i8_x0_slt_42:
** mov w1, 41
** cbbgt w0, w1, .L222
** b taken
** b not_taken
*/
/*
** i8_x0_sle_42:
** mov w1, 42
** cbbgt w0, w1, .L224
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_42:
** mov w1, 42
** cbble w0, w1, .L226
** b taken
** b not_taken
*/
/*
** i8_x0_sge_42:
** mov w1, 41
** cbble w0, w1, .L228
** b taken
** b not_taken
*/
/*
** u16_x0_eq_42:
** mov w1, 42
** cbheq w0, w1, .L231
** b not_taken
** b taken
*/
/*
** u16_x0_ne_42:
** mov w1, 42
** cbheq w0, w1, .L233
** b taken
** b not_taken
*/
/*
** u16_x0_ult_42:
** mov w1, 41
** cbhhi w0, w1, .L235
** b taken
** b not_taken
*/
/*
** u16_x0_ule_42:
** mov w1, 42
** cbhhi w0, w1, .L237
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_42:
** mov w1, 42
** cbhls w0, w1, .L239
** b taken
** b not_taken
*/
/*
** u16_x0_uge_42:
** mov w1, 41
** cbhls w0, w1, .L241
** b taken
** b not_taken
*/
/*
** i16_x0_slt_42:
** mov w1, 41
** cbhgt w0, w1, .L243
** b taken
** b not_taken
*/
/*
** i16_x0_sle_42:
** mov w1, 42
** cbhgt w0, w1, .L245
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_42:
** mov w1, 42
** cbhle w0, w1, .L247
** b taken
** b not_taken
*/
/*
** i16_x0_sge_42:
** mov w1, 41
** cbhle w0, w1, .L249
** b taken
** b not_taken
*/
/*
** u8_x0_eq_64:
** mov w1, 64
** cbbeq w0, w1, .L252
** b not_taken
** b taken
*/
/*
** u8_x0_ne_64:
** mov w1, 64
** cbbeq w0, w1, .L254
** b taken
** b not_taken
*/
/*
** u8_x0_ult_64:
** mov w1, 63
** cbbhi w0, w1, .L256
** b taken
** b not_taken
*/
/*
** u8_x0_ule_64:
** mov w1, 64
** cbbhi w0, w1, .L258
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_64:
** mov w1, 64
** cbbls w0, w1, .L260
** b taken
** b not_taken
*/
/*
** u8_x0_uge_64:
** mov w1, 63
** cbbls w0, w1, .L262
** b taken
** b not_taken
*/
/*
** i8_x0_slt_64:
** mov w1, 63
** cbbgt w0, w1, .L264
** b taken
** b not_taken
*/
/*
** i8_x0_sle_64:
** mov w1, 64
** cbbgt w0, w1, .L266
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_64:
** mov w1, 64
** cbble w0, w1, .L268
** b taken
** b not_taken
*/
/*
** i8_x0_sge_64:
** mov w1, 63
** cbble w0, w1, .L270
** b taken
** b not_taken
*/
/*
** u16_x0_eq_64:
** mov w1, 64
** cbheq w0, w1, .L273
** b not_taken
** b taken
*/
/*
** u16_x0_ne_64:
** mov w1, 64
** cbheq w0, w1, .L275
** b taken
** b not_taken
*/
/*
** u16_x0_ult_64:
** mov w1, 63
** cbhhi w0, w1, .L277
** b taken
** b not_taken
*/
/*
** u16_x0_ule_64:
** mov w1, 64
** cbhhi w0, w1, .L279
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_64:
** mov w1, 64
** cbhls w0, w1, .L281
** b taken
** b not_taken
*/
/*
** u16_x0_uge_64:
** mov w1, 63
** cbhls w0, w1, .L283
** b taken
** b not_taken
*/
/*
** i16_x0_slt_64:
** mov w1, 63
** cbhgt w0, w1, .L285
** b taken
** b not_taken
*/
/*
** i16_x0_sle_64:
** mov w1, 64
** cbhgt w0, w1, .L287
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_64:
** mov w1, 64
** cbhle w0, w1, .L289
** b taken
** b not_taken
*/
/*
** i16_x0_sge_64:
** mov w1, 63
** cbhle w0, w1, .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:
** cbhi w0, 63, .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:
** cbls w0, 63, .L304
** b taken
** b not_taken
*/
/*
** i32_x0_slt_64:
** cbgt w0, 63, .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:
** cble w0, 63, .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:
** cbhi x0, 63, .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:
** cbls x0, 63, .L325
** b taken
** b not_taken
*/
/*
** i64_x0_slt_64:
** cbgt x0, 63, .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:
** cble x0, 63, .L333
** b taken
** b not_taken
*/
/*
** u16_x0_eq_4098:
** mov w1, 4098
** cbheq w0, w1, .L336
** b not_taken
** b taken
*/
/*
** u16_x0_ne_4098:
** mov w1, 4098
** cbheq w0, w1, .L338
** b taken
** b not_taken
*/
/*
** u16_x0_ult_4098:
** mov w1, 4097
** cbhhi w0, w1, .L340
** b taken
** b not_taken
*/
/*
** u16_x0_ule_4098:
** mov w1, 4098
** cbhhi w0, w1, .L342
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_4098:
** mov w1, 4098
** cbhls w0, w1, .L344
** b taken
** b not_taken
*/
/*
** u16_x0_uge_4098:
** mov w1, 4097
** cbhls w0, w1, .L346
** b taken
** b not_taken
*/
/*
** i16_x0_slt_4098:
** mov w1, 4097
** cbhgt w0, w1, .L348
** b taken
** b not_taken
*/
/*
** i16_x0_sle_4098:
** mov w1, 4098
** cbhgt w0, w1, .L350
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_4098:
** mov w1, 4098
** cbhle w0, w1, .L352
** b taken
** b not_taken
*/
/*
** i16_x0_sge_4098:
** mov w1, 4097
** cbhle w0, w1, .L354
** b taken
** b not_taken
*/
/*
** u32_x0_eq_4098:
** mov w1, 4098
** cbeq w0, w1, .L357
** b not_taken
** b taken
*/
/*
** u32_x0_ne_4098:
** mov w1, 4098
** cbeq w0, w1, .L359
** b taken
** b not_taken
*/
/*
** u32_x0_ult_4098:
** mov w1, 4097
** cbhi w0, w1, .L361
** b taken
** b not_taken
*/
/*
** u32_x0_ule_4098:
** mov w1, 4098
** cbhi w0, w1, .L363
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_4098:
** mov w1, 4098
** cbls w0, w1, .L365
** b taken
** b not_taken
*/
/*
** u32_x0_uge_4098:
** mov w1, 4097
** cbls w0, w1, .L367
** b taken
** b not_taken
*/
/*
** i32_x0_slt_4098:
** mov w1, 4097
** cbgt w0, w1, .L369
** b taken
** b not_taken
*/
/*
** i32_x0_sle_4098:
** mov w1, 4098
** cbgt w0, w1, .L371
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_4098:
** mov w1, 4098
** cble w0, w1, .L373
** b taken
** b not_taken
*/
/*
** i32_x0_sge_4098:
** mov w1, 4097
** cble w0, w1, .L375
** b taken
** b not_taken
*/
/*
** u64_x0_eq_4098:
** mov x1, 4098
** cbeq x0, x1, .L378
** b not_taken
** b taken
*/
/*
** u64_x0_ne_4098:
** mov x1, 4098
** cbeq x0, x1, .L380
** b taken
** b not_taken
*/
/*
** u64_x0_ult_4098:
** mov x1, 4097
** cbhi x0, x1, .L382
** b taken
** b not_taken
*/
/*
** u64_x0_ule_4098:
** mov x1, 4098
** cbhi x0, x1, .L384
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_4098:
** mov x1, 4098
** cbls x0, x1, .L386
** b taken
** b not_taken
*/
/*
** u64_x0_uge_4098:
** mov x1, 4097
** cbls x0, x1, .L388
** b taken
** b not_taken
*/
/*
** i64_x0_slt_4098:
** mov x1, 4097
** cbgt x0, x1, .L390
** b taken
** b not_taken
*/
/*
** i64_x0_sle_4098:
** mov x1, 4098
** cbgt x0, x1, .L392
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_4098:
** mov x1, 4098
** cble x0, x1, .L394
** b taken
** b not_taken
*/
/*
** i64_x0_sge_4098:
** mov x1, 4097
** cble x0, x1, .L396
** b taken
** b not_taken
*/
--
2.45.2