Add rules for lowering `cbranch<mode>4` to CBB<cond>/CBH<cond>/CB<cond> when
CMPBR extension is enabled.
gcc/ChangeLog:
* config/aarch64/aarch64.md (BRANCH_LEN_P_1Kib): New constant.
(BRANCH_LEN_N_1Kib): Likewise.
(cbranch<GPI:mode>4): Emit CMPBR instructions if possible.
(cbranch<SHORT:mode>4): New expand rule.
(*aarch64_cb<GPI:mode>): Likewise.
(*aarch64_cb<SHORT:mode>): Likewise.
* config/aarch64/iterators.md (cmpbr_suffix): New mode attr.
* config/aarch64/predicates.md (const_0_to_63_operand): New
predicate.
(aarch64_cb_immediate): Likewise.
(aarch64_cb_operand): Likewise.
(aarch64_cb_short_operand): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/cmpbr.c: update tests.
---
gcc/config/aarch64/aarch64.md | 87 +++-
gcc/config/aarch64/iterators.md | 5 +
gcc/config/aarch64/predicates.md | 15 +
gcc/testsuite/gcc.target/aarch64/cmpbr.c | 598 ++++++++---------------
4 files changed, 311 insertions(+), 394 deletions(-)
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index b61e3e5a72f..0b708f8b2f6 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -697,37 +697,60 @@ (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
;; -------------------------------------------------------------------
-(define_expand "cbranch<mode>4"
+(define_expand "cbranch<GPI:mode>4"
[(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
[(match_operand:GPI 1 "register_operand")
(match_operand:GPI 2 "aarch64_plus_operand")])
(label_ref (match_operand 3))
(pc)))]
""
- "
- operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]), operands[1],
- operands[2]);
- operands[2] = const0_rtx;
- "
+ {
+ if (TARGET_CMPBR && aarch64_cb_operand (operands[2], <MODE>mode))
+ {
+ emit_jump_insn (gen_aarch64_cb<mode> (operands[0], operands[1],
+ operands[2], operands[3]));
+ DONE;
+ }
+ else
+ {
+ operands[1] = aarch64_gen_compare_reg (GET_CODE (operands[0]),
+ operands[1], operands[2]);
+ operands[2] = const0_rtx;
+ }
+ }
+)
+
+(define_expand "cbranch<SHORT:mode>4"
+ [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
+ [(match_operand:SHORT 1 "register_operand")
+ (match_operand:SHORT 2
"aarch64_cb_short_operand")])
+ (label_ref (match_operand 3))
+ (pc)))]
+ "TARGET_CMPBR"
+ ""
)
(define_expand "cbranch<mode>4"
@@ -747,13 +770,65 @@ (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)))]
""
""
)
+;; Emit a `CB<cond> (register)` or `CB<cond> (immediate)` instruction.
+(define_insn "aarch64_cb<GPI:mode>"
+ [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
+ [(match_operand:GPI 1 "register_operand" "r")
+ (match_operand:GPI 2 "aarch64_cb_operand" "ri")])
+ (label_ref (match_operand 3))
+ (pc)))]
+ "TARGET_CMPBR"
+ "cb%m0\\t%<w>1, %<w>2, %l3";
+ [(set_attr "type" "branch")
+ (set (attr "length")
+ (if_then_else (and (ge (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_N_1Kib))
+ (lt (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_P_1Kib)))
+ (const_int 4)
+ (const_int 8)))
+ (set (attr "far_branch")
+ (if_then_else (and (ge (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_N_1Kib))
+ (lt (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_P_1Kib)))
+ (const_string "no")
+ (const_string "yes")))]
+)
+
+;; Emit a `CBB<cond> (register)` or `CBH<cond> (register)` instruction.
+(define_insn "aarch64_cb<SHORT:mode>"
+ [(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
+ [(match_operand:SHORT 1 "register_operand" "r")
+ (match_operand:SHORT 2 "aarch64_cb_short_operand"
"rZ")])
+ (label_ref (match_operand 3))
+ (pc)))]
+ "TARGET_CMPBR"
+ "cb<SHORT:cmpbr_suffix>%m0\\t%<w>1, %<w>2, %l3"
+ [(set_attr "type" "branch")
+ (set (attr "length")
+ (if_then_else (and (ge (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_N_1Kib))
+ (lt (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_P_1Kib)))
+ (const_int 4)
+ (const_int 8)))
+ (set (attr "far_branch")
+ (if_then_else (and (ge (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_N_1Kib))
+ (lt (minus (match_dup 3) (pc))
+ (const_int BRANCH_LEN_P_1Kib)))
+ (const_string "no")
+ (const_string "yes")))]
+)
+
;; Emit `B<cond>`, assuming that the condition is already in the CC register.
(define_insn "aarch64_bcond"
[(set (pc) (if_then_else (match_operator 0 "aarch64_comparison_operator"
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index 146453b0516..5c4db3fc109 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -2879,6 +2879,11 @@ (define_code_attr cmp_op [(lt "lt")
(geu "hs")
(gtu "hi")])
+(define_mode_attr cmpbr_suffix [(QI "b")
+ (HI "h")
+ (SI "")
+ (DI "")])
+
(define_code_attr fix_trunc_optab [(fix "fix_trunc")
(unsigned_fix "fixuns_trunc")])
diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
index 1ab1c696c62..7dffe7ab110 100644
--- a/gcc/config/aarch64/predicates.md
+++ b/gcc/config/aarch64/predicates.md
@@ -50,6 +50,10 @@ (define_predicate "const_0_to_7_operand"
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 0, 7)")))
+(define_predicate "const_0_to_63_operand"
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (INTVAL (op), 0, 63)")))
+
(define_predicate "const_0_to_4_step_4_operand"
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 0, 4)")
@@ -130,6 +134,17 @@ (define_predicate "aarch64_reg_or_xor_imm"
(and (match_code "const_vector")
(match_test "aarch64_simd_valid_xor_imm (op)"))))
+(define_predicate "aarch64_cb_immediate"
+ (match_operand 0 "const_0_to_63_operand"))
+
+(define_predicate "aarch64_cb_operand"
+ (ior (match_operand 0 "register_operand")
+ (match_operand 0 "aarch64_cb_immediate")))
+
+(define_predicate "aarch64_cb_short_operand"
+ (ior (match_operand 0 "register_operand")
+ (match_operand 0 "const0_operand")))
+
(define_predicate "aarch64_fp_compare_operand"
(ior (match_operand 0 "register_operand")
(and (match_code "const_double")
diff --git a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
index 8534283bc26..f97b8026efe 100644
--- a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
+++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
@@ -85,1575 +85,1397 @@ COMPARE_ALL(u32, i32, 4098);
COMPARE_ALL(u64, i64, 4098);
/*
** u8_x0_eq_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** beq .L4
+** cbbeq w1, w0, .L4
** b not_taken
** b taken
*/
/*
** u8_x0_ne_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** beq .L6
+** cbbeq w1, w0, .L6
** b taken
** b not_taken
*/
/*
** u8_x0_ult_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** bls .L8
+** cbbls w1, w0, .L8
** b taken
** b not_taken
*/
/*
** u8_x0_ule_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** bcc .L10
+** cbbcc w1, w0, .L10
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** bcs .L12
+** cbbcs w1, w0, .L12
** b taken
** b not_taken
*/
/*
** u8_x0_uge_x1:
-** and w1, w1, 255
-** cmp w1, w0, uxtb
-** bhi .L14
+** cbbhi w1, w0, .L14
** b taken
** b not_taken
*/
/*
** i8_x0_slt_x1:
-** sxtb w1, w1
-** cmp w1, w0, sxtb
-** ble .L16
+** cbble w1, w0, .L16
** b taken
** b not_taken
*/
/*
** i8_x0_sle_x1:
-** sxtb w1, w1
-** cmp w1, w0, sxtb
-** blt .L18
+** cbblt w1, w0, .L18
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_x1:
-** sxtb w1, w1
-** cmp w1, w0, sxtb
-** bge .L20
+** cbbge w1, w0, .L20
** b taken
** b not_taken
*/
/*
** i8_x0_sge_x1:
-** sxtb w1, w1
-** cmp w1, w0, sxtb
-** bgt .L22
+** cbbgt w1, w0, .L22
** b taken
** b not_taken
*/
/*
** u16_x0_eq_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** beq .L25
+** cbheq w1, w0, .L25
** b not_taken
** b taken
*/
/*
** u16_x0_ne_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** beq .L27
+** cbheq w1, w0, .L27
** b taken
** b not_taken
*/
/*
** u16_x0_ult_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** bls .L29
+** cbhls w1, w0, .L29
** b taken
** b not_taken
*/
/*
** u16_x0_ule_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** bcc .L31
+** cbhcc w1, w0, .L31
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** bcs .L33
+** cbhcs w1, w0, .L33
** b taken
** b not_taken
*/
/*
** u16_x0_uge_x1:
-** and w1, w1, 65535
-** cmp w1, w0, uxth
-** bhi .L35
+** cbhhi w1, w0, .L35
** b taken
** b not_taken
*/
/*
** i16_x0_slt_x1:
-** sxth w1, w1
-** cmp w1, w0, sxth
-** ble .L37
+** cbhle w1, w0, .L37
** b taken
** b not_taken
*/
/*
** i16_x0_sle_x1:
-** sxth w1, w1
-** cmp w1, w0, sxth
-** blt .L39
+** cbhlt w1, w0, .L39
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_x1:
-** sxth w1, w1
-** cmp w1, w0, sxth
-** bge .L41
+** cbhge w1, w0, .L41
** b taken
** b not_taken
*/
/*
** i16_x0_sge_x1:
-** sxth w1, w1
-** cmp w1, w0, sxth
-** bgt .L43
+** cbhgt w1, w0, .L43
** b taken
** b not_taken
*/
/*
** u32_x0_eq_x1:
-** cmp w0, w1
-** beq .L46
+** cbeq w0, w1, .L46
** b not_taken
** b taken
*/
/*
** u32_x0_ne_x1:
-** cmp w0, w1
-** beq .L48
+** cbeq w0, w1, .L48
** b taken
** b not_taken
*/
/*
** u32_x0_ult_x1:
-** cmp w0, w1
-** bcs .L50
+** cbcs w0, w1, .L50
** b taken
** b not_taken
*/
/*
** u32_x0_ule_x1:
-** cmp w0, w1
-** bhi .L52
+** cbhi w0, w1, .L52
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_x1:
-** cmp w0, w1
-** bls .L54
+** cbls w0, w1, .L54
** b taken
** b not_taken
*/
/*
** u32_x0_uge_x1:
-** cmp w0, w1
-** bcc .L56
+** cbcc w0, w1, .L56
** b taken
** b not_taken
*/
/*
** i32_x0_slt_x1:
-** cmp w0, w1
-** bge .L58
+** cbge w0, w1, .L58
** b taken
** b not_taken
*/
/*
** i32_x0_sle_x1:
-** cmp w0, w1
-** bgt .L60
+** cbgt w0, w1, .L60
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_x1:
-** cmp w0, w1
-** ble .L62
+** cble w0, w1, .L62
** b taken
** b not_taken
*/
/*
** i32_x0_sge_x1:
-** cmp w0, w1
-** blt .L64
+** cblt w0, w1, .L64
** b taken
** b not_taken
*/
/*
** u64_x0_eq_x1:
-** cmp x0, x1
-** beq .L67
+** cbeq x0, x1, .L67
** b not_taken
** b taken
*/
/*
** u64_x0_ne_x1:
-** cmp x0, x1
-** beq .L69
+** cbeq x0, x1, .L69
** b taken
** b not_taken
*/
/*
** u64_x0_ult_x1:
-** cmp x0, x1
-** bcs .L71
+** cbcs x0, x1, .L71
** b taken
** b not_taken
*/
/*
** u64_x0_ule_x1:
-** cmp x0, x1
-** bhi .L73
+** cbhi x0, x1, .L73
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_x1:
-** cmp x0, x1
-** bls .L75
+** cbls x0, x1, .L75
** b taken
** b not_taken
*/
/*
** u64_x0_uge_x1:
-** cmp x0, x1
-** bcc .L77
+** cbcc x0, x1, .L77
** b taken
** b not_taken
*/
/*
** i64_x0_slt_x1:
-** cmp x0, x1
-** bge .L79
+** cbge x0, x1, .L79
** b taken
** b not_taken
*/
/*
** i64_x0_sle_x1:
-** cmp x0, x1
-** bgt .L81
+** cbgt x0, x1, .L81
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_x1:
-** cmp x0, x1
-** ble .L83
+** cble x0, x1, .L83
** b taken
** b not_taken
*/
/*
** i64_x0_sge_x1:
-** cmp x0, x1
-** blt .L85
+** cblt x0, x1, .L85
** b taken
** b not_taken
*/
/*
** u32_x0_eq_42:
-** cmp w0, 42
-** beq .L88
+** cbeq w0, 42, .L88
** b not_taken
** b taken
*/
/*
** u32_x0_ne_42:
-** cmp w0, 42
-** beq .L90
+** cbeq w0, 42, .L90
** b taken
** b not_taken
*/
/*
** u32_x0_ult_42:
-** cmp w0, 41
-** bhi .L92
+** cbhi w0, 41, .L92
** b taken
** b not_taken
*/
/*
** u32_x0_ule_42:
-** cmp w0, 42
-** bhi .L94
+** cbhi w0, 42, .L94
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_42:
-** cmp w0, 42
-** bls .L96
+** cbls w0, 42, .L96
** b taken
** b not_taken
*/
/*
** u32_x0_uge_42:
-** cmp w0, 41
-** bls .L98
+** cbls w0, 41, .L98
** b taken
** b not_taken
*/
/*
** i32_x0_slt_42:
-** cmp w0, 41
-** bgt .L100
+** cbgt w0, 41, .L100
** b taken
** b not_taken
*/
/*
** i32_x0_sle_42:
-** cmp w0, 42
-** bgt .L102
+** cbgt w0, 42, .L102
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_42:
-** cmp w0, 42
-** ble .L104
+** cble w0, 42, .L104
** b taken
** b not_taken
*/
/*
** i32_x0_sge_42:
-** cmp w0, 41
-** ble .L106
+** cble w0, 41, .L106
** b taken
** b not_taken
*/
/*
** u64_x0_eq_42:
-** cmp x0, 42
-** beq .L109
+** cbeq x0, 42, .L109
** b not_taken
** b taken
*/
/*
** u64_x0_ne_42:
-** cmp x0, 42
-** beq .L111
+** cbeq x0, 42, .L111
** b taken
** b not_taken
*/
/*
** u64_x0_ult_42:
-** cmp x0, 41
-** bhi .L113
+** cbhi x0, 41, .L113
** b taken
** b not_taken
*/
/*
** u64_x0_ule_42:
-** cmp x0, 42
-** bhi .L115
+** cbhi x0, 42, .L115
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_42:
-** cmp x0, 42
-** bls .L117
+** cbls x0, 42, .L117
** b taken
** b not_taken
*/
/*
** u64_x0_uge_42:
-** cmp x0, 41
-** bls .L119
+** cbls x0, 41, .L119
** b taken
** b not_taken
*/
/*
** i64_x0_slt_42:
-** cmp x0, 41
-** bgt .L121
+** cbgt x0, 41, .L121
** b taken
** b not_taken
*/
/*
** i64_x0_sle_42:
-** cmp x0, 42
-** bgt .L123
+** cbgt x0, 42, .L123
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_42:
-** cmp x0, 42
-** ble .L125
+** cble x0, 42, .L125
** b taken
** b not_taken
*/
/*
** i64_x0_sge_42:
-** cmp x0, 41
-** ble .L127
+** cble x0, 41, .L127
** b taken
** b not_taken
*/
/*
** u8_x0_eq_0:
-** tst w0, 255
-** bne .L129
+** cbbne w0, wzr, .L129
** b taken
** b not_taken
*/
/*
** u8_x0_ne_0:
-** tst w0, 255
-** beq .L131
+** cbbeq w0, wzr, .L131
** b taken
** b not_taken
*/
/*
** u8_x0_ult_0:
** b not_taken
*/
/*
** u8_x0_ule_0:
-** tst w0, 255
-** bne .L134
+** cbbne w0, wzr, .L134
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_0:
-** tst w0, 255
-** beq .L136
+** cbbeq w0, wzr, .L136
** b taken
** b not_taken
*/
/*
** u8_x0_uge_0:
** b taken
*/
/*
** i8_x0_slt_0:
-** tbnz w0, 7, .L140
+** cbblt w0, wzr, .L140
** b not_taken
** b taken
*/
/*
** i8_x0_sle_0:
-** sxtb w0, w0
-** cmp w0, 0
-** ble .L143
+** cbble w0, wzr, .L143
** b not_taken
** b taken
*/
/*
** i8_x0_sgt_0:
-** sxtb w0, w0
-** cmp w0, 0
-** ble .L145
+** cbble w0, wzr, .L145
** b taken
** b not_taken
*/
/*
** i8_x0_sge_0:
-** tbnz w0, 7, .L147
+** cbblt w0, wzr, .L147
** b taken
** b not_taken
*/
/*
** u16_x0_eq_0:
-** tst w0, 65535
-** bne .L149
+** cbhne w0, wzr, .L149
** b taken
** b not_taken
*/
/*
** u16_x0_ne_0:
-** tst w0, 65535
-** beq .L151
+** cbheq w0, wzr, .L151
** b taken
** b not_taken
*/
/*
** u16_x0_ult_0:
** b not_taken
*/
/*
** u16_x0_ule_0:
-** tst w0, 65535
-** bne .L154
+** cbhne w0, wzr, .L154
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_0:
-** tst w0, 65535
-** beq .L156
+** cbheq w0, wzr, .L156
** b taken
** b not_taken
*/
/*
** u16_x0_uge_0:
** b taken
*/
/*
** i16_x0_slt_0:
-** tbnz w0, 15, .L160
+** cbhlt w0, wzr, .L160
** b not_taken
** b taken
*/
/*
** i16_x0_sle_0:
-** sxth w0, w0
-** cmp w0, 0
-** ble .L163
+** cbhle w0, wzr, .L163
** b not_taken
** b taken
*/
/*
** i16_x0_sgt_0:
-** sxth w0, w0
-** cmp w0, 0
-** ble .L165
+** cbhle w0, wzr, .L165
** b taken
** b not_taken
*/
/*
** i16_x0_sge_0:
-** tbnz w0, 15, .L167
+** cbhlt w0, wzr, .L167
** b taken
** b not_taken
*/
/*
** u32_x0_eq_0:
-** cbnz w0, .L169
+** cbne w0, wzr, .L169
** b taken
** b not_taken
*/
/*
** u32_x0_ne_0:
-** cbz w0, .L171
+** cbeq w0, wzr, .L171
** b taken
** b not_taken
*/
/*
** u32_x0_ult_0:
** b not_taken
*/
/*
** u32_x0_ule_0:
-** cbnz w0, .L174
+** cbne w0, wzr, .L174
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_0:
-** cbz w0, .L176
+** cbeq w0, wzr, .L176
** b taken
** b not_taken
*/
/*
** u32_x0_uge_0:
** b taken
*/
/*
** i32_x0_slt_0:
-** tbnz w0, #31, .L180
+** cblt w0, wzr, .L180
** b not_taken
** b taken
*/
/*
** i32_x0_sle_0:
-** cmp w0, 0
-** ble .L183
+** cble w0, wzr, .L183
** b not_taken
** b taken
*/
/*
** i32_x0_sgt_0:
-** cmp w0, 0
-** ble .L185
+** cble w0, wzr, .L185
** b taken
** b not_taken
*/
/*
** i32_x0_sge_0:
-** tbnz w0, #31, .L187
+** cblt w0, wzr, .L187
** b taken
** b not_taken
*/
/*
** u64_x0_eq_0:
-** cbnz x0, .L189
+** cbne x0, xzr, .L189
** b taken
** b not_taken
*/
/*
** u64_x0_ne_0:
-** cbz x0, .L191
+** cbeq x0, xzr, .L191
** b taken
** b not_taken
*/
/*
** u64_x0_ult_0:
** b not_taken
*/
/*
** u64_x0_ule_0:
-** cbnz x0, .L194
+** cbne x0, xzr, .L194
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_0:
-** cbz x0, .L196
+** cbeq x0, xzr, .L196
** b taken
** b not_taken
*/
/*
** u64_x0_uge_0:
** b taken
*/
/*
** i64_x0_slt_0:
-** tbnz x0, #63, .L200
+** cblt x0, xzr, .L200
** b not_taken
** b taken
*/
/*
** i64_x0_sle_0:
-** cmp x0, 0
-** ble .L203
+** cble x0, xzr, .L203
** b not_taken
** b taken
*/
/*
** i64_x0_sgt_0:
-** cmp x0, 0
-** ble .L205
+** cble x0, xzr, .L205
** b taken
** b not_taken
*/
/*
** i64_x0_sge_0:
-** tbnz x0, #63, .L207
+** cblt x0, xzr, .L207
** b taken
** b not_taken
*/
/*
** u8_x0_eq_42:
-** and w0, w0, 255
-** cmp w0, 42
-** beq .L210
+** mov w1, 42
+** cbbeq w0, w1, .L210
** b not_taken
** b taken
*/
/*
** u8_x0_ne_42:
-** and w0, w0, 255
-** cmp w0, 42
-** beq .L212
+** mov w1, 42
+** cbbeq w0, w1, .L212
** b taken
** b not_taken
*/
/*
** u8_x0_ult_42:
-** and w0, w0, 255
-** cmp w0, 41
-** bhi .L214
+** mov w1, 41
+** cbbhi w0, w1, .L214
** b taken
** b not_taken
*/
/*
** u8_x0_ule_42:
-** and w0, w0, 255
-** cmp w0, 42
-** bhi .L216
+** mov w1, 42
+** cbbhi w0, w1, .L216
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_42:
-** and w0, w0, 255
-** cmp w0, 42
-** bls .L218
+** mov w1, 42
+** cbbls w0, w1, .L218
** b taken
** b not_taken
*/
/*
** u8_x0_uge_42:
-** and w0, w0, 255
-** cmp w0, 41
-** bls .L220
+** mov w1, 41
+** cbbls w0, w1, .L220
** b taken
** b not_taken
*/
/*
** i8_x0_slt_42:
-** sxtb w0, w0
-** cmp w0, 41
-** bgt .L222
+** mov w1, 41
+** cbbgt w0, w1, .L222
** b taken
** b not_taken
*/
/*
** i8_x0_sle_42:
-** sxtb w0, w0
-** cmp w0, 42
-** bgt .L224
+** mov w1, 42
+** cbbgt w0, w1, .L224
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_42:
-** sxtb w0, w0
-** cmp w0, 42
-** ble .L226
+** mov w1, 42
+** cbble w0, w1, .L226
** b taken
** b not_taken
*/
/*
** i8_x0_sge_42:
-** sxtb w0, w0
-** cmp w0, 41
-** ble .L228
+** mov w1, 41
+** cbble w0, w1, .L228
** b taken
** b not_taken
*/
/*
** u16_x0_eq_42:
-** and w0, w0, 65535
-** cmp w0, 42
-** beq .L231
+** mov w1, 42
+** cbheq w0, w1, .L231
** b not_taken
** b taken
*/
/*
** u16_x0_ne_42:
-** and w0, w0, 65535
-** cmp w0, 42
-** beq .L233
+** mov w1, 42
+** cbheq w0, w1, .L233
** b taken
** b not_taken
*/
/*
** u16_x0_ult_42:
-** and w0, w0, 65535
-** cmp w0, 41
-** bhi .L235
+** mov w1, 41
+** cbhhi w0, w1, .L235
** b taken
** b not_taken
*/
/*
** u16_x0_ule_42:
-** and w0, w0, 65535
-** cmp w0, 42
-** bhi .L237
+** mov w1, 42
+** cbhhi w0, w1, .L237
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_42:
-** and w0, w0, 65535
-** cmp w0, 42
-** bls .L239
+** mov w1, 42
+** cbhls w0, w1, .L239
** b taken
** b not_taken
*/
/*
** u16_x0_uge_42:
-** and w0, w0, 65535
-** cmp w0, 41
-** bls .L241
+** mov w1, 41
+** cbhls w0, w1, .L241
** b taken
** b not_taken
*/
/*
** i16_x0_slt_42:
-** sxth w0, w0
-** cmp w0, 41
-** bgt .L243
+** mov w1, 41
+** cbhgt w0, w1, .L243
** b taken
** b not_taken
*/
/*
** i16_x0_sle_42:
-** sxth w0, w0
-** cmp w0, 42
-** bgt .L245
+** mov w1, 42
+** cbhgt w0, w1, .L245
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_42:
-** sxth w0, w0
-** cmp w0, 42
-** ble .L247
+** mov w1, 42
+** cbhle w0, w1, .L247
** b taken
** b not_taken
*/
/*
** i16_x0_sge_42:
-** sxth w0, w0
-** cmp w0, 41
-** ble .L249
+** mov w1, 41
+** cbhle w0, w1, .L249
** b taken
** b not_taken
*/
/*
** u8_x0_eq_64:
-** and w0, w0, 255
-** cmp w0, 64
-** beq .L252
+** mov w1, 64
+** cbbeq w0, w1, .L252
** b not_taken
** b taken
*/
/*
** u8_x0_ne_64:
-** and w0, w0, 255
-** cmp w0, 64
-** beq .L254
+** mov w1, 64
+** cbbeq w0, w1, .L254
** b taken
** b not_taken
*/
/*
** u8_x0_ult_64:
-** and w0, w0, 255
-** cmp w0, 63
-** bhi .L256
+** mov w1, 63
+** cbbhi w0, w1, .L256
** b taken
** b not_taken
*/
/*
** u8_x0_ule_64:
-** and w0, w0, 255
-** cmp w0, 64
-** bhi .L258
+** mov w1, 64
+** cbbhi w0, w1, .L258
** b taken
** b not_taken
*/
/*
** u8_x0_ugt_64:
-** and w0, w0, 255
-** cmp w0, 64
-** bls .L260
+** mov w1, 64
+** cbbls w0, w1, .L260
** b taken
** b not_taken
*/
/*
** u8_x0_uge_64:
-** and w0, w0, 255
-** cmp w0, 63
-** bls .L262
+** mov w1, 63
+** cbbls w0, w1, .L262
** b taken
** b not_taken
*/
/*
** i8_x0_slt_64:
-** sxtb w0, w0
-** cmp w0, 63
-** bgt .L264
+** mov w1, 63
+** cbbgt w0, w1, .L264
** b taken
** b not_taken
*/
/*
** i8_x0_sle_64:
-** sxtb w0, w0
-** cmp w0, 64
-** bgt .L266
+** mov w1, 64
+** cbbgt w0, w1, .L266
** b taken
** b not_taken
*/
/*
** i8_x0_sgt_64:
-** sxtb w0, w0
-** cmp w0, 64
-** ble .L268
+** mov w1, 64
+** cbble w0, w1, .L268
** b taken
** b not_taken
*/
/*
** i8_x0_sge_64:
-** sxtb w0, w0
-** cmp w0, 63
-** ble .L270
+** mov w1, 63
+** cbble w0, w1, .L270
** b taken
** b not_taken
*/
/*
** u16_x0_eq_64:
-** and w0, w0, 65535
-** cmp w0, 64
-** beq .L273
+** mov w1, 64
+** cbheq w0, w1, .L273
** b not_taken
** b taken
*/
/*
** u16_x0_ne_64:
-** and w0, w0, 65535
-** cmp w0, 64
-** beq .L275
+** mov w1, 64
+** cbheq w0, w1, .L275
** b taken
** b not_taken
*/
/*
** u16_x0_ult_64:
-** and w0, w0, 65535
-** cmp w0, 63
-** bhi .L277
+** mov w1, 63
+** cbhhi w0, w1, .L277
** b taken
** b not_taken
*/
/*
** u16_x0_ule_64:
-** and w0, w0, 65535
-** cmp w0, 64
-** bhi .L279
+** mov w1, 64
+** cbhhi w0, w1, .L279
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_64:
-** and w0, w0, 65535
-** cmp w0, 64
-** bls .L281
+** mov w1, 64
+** cbhls w0, w1, .L281
** b taken
** b not_taken
*/
/*
** u16_x0_uge_64:
-** and w0, w0, 65535
-** cmp w0, 63
-** bls .L283
+** mov w1, 63
+** cbhls w0, w1, .L283
** b taken
** b not_taken
*/
/*
** i16_x0_slt_64:
-** sxth w0, w0
-** cmp w0, 63
-** bgt .L285
+** mov w1, 63
+** cbhgt w0, w1, .L285
** b taken
** b not_taken
*/
/*
** i16_x0_sle_64:
-** sxth w0, w0
-** cmp w0, 64
-** bgt .L287
+** mov w1, 64
+** cbhgt w0, w1, .L287
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_64:
-** sxth w0, w0
-** cmp w0, 64
-** ble .L289
+** mov w1, 64
+** cbhle w0, w1, .L289
** b taken
** b not_taken
*/
/*
** i16_x0_sge_64:
-** sxth w0, w0
-** cmp w0, 63
-** ble .L291
+** 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:
-** cmp w0, 63
-** bhi .L298
+** 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:
-** cmp w0, 63
-** bls .L304
+** cbls w0, 63, .L304
** b taken
** b not_taken
*/
/*
** i32_x0_slt_64:
-** cmp w0, 63
-** bgt .L306
+** 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:
-** cmp w0, 63
-** ble .L312
+** 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:
-** cmp x0, 63
-** bhi .L319
+** 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:
-** cmp x0, 63
-** bls .L325
+** cbls x0, 63, .L325
** b taken
** b not_taken
*/
/*
** i64_x0_slt_64:
-** cmp x0, 63
-** bgt .L327
+** 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:
-** cmp x0, 63
-** ble .L333
+** cble x0, 63, .L333
** b taken
** b not_taken
*/
/*
** u16_x0_eq_4098:
** mov w1, 4098
-** cmp w1, w0, uxth
-** beq .L336
+** cbheq w0, w1, .L336
** b not_taken
** b taken
*/
/*
** u16_x0_ne_4098:
** mov w1, 4098
-** cmp w1, w0, uxth
-** beq .L338
+** cbheq w0, w1, .L338
** b taken
** b not_taken
*/
/*
** u16_x0_ult_4098:
** mov w1, 4097
-** cmp w1, w0, uxth
-** bcc .L340
+** cbhhi w0, w1, .L340
** b taken
** b not_taken
*/
/*
** u16_x0_ule_4098:
** mov w1, 4098
-** cmp w1, w0, uxth
-** bcc .L342
+** cbhhi w0, w1, .L342
** b taken
** b not_taken
*/
/*
** u16_x0_ugt_4098:
** mov w1, 4098
-** cmp w1, w0, uxth
-** bcs .L344
+** cbhls w0, w1, .L344
** b taken
** b not_taken
*/
/*
** u16_x0_uge_4098:
** mov w1, 4097
-** cmp w1, w0, uxth
-** bcs .L346
+** cbhls w0, w1, .L346
** b taken
** b not_taken
*/
/*
** i16_x0_slt_4098:
** mov w1, 4097
-** cmp w1, w0, sxth
-** blt .L348
+** cbhgt w0, w1, .L348
** b taken
** b not_taken
*/
/*
** i16_x0_sle_4098:
** mov w1, 4098
-** cmp w1, w0, sxth
-** blt .L350
+** cbhgt w0, w1, .L350
** b taken
** b not_taken
*/
/*
** i16_x0_sgt_4098:
** mov w1, 4098
-** cmp w1, w0, sxth
-** bge .L352
+** cbhle w0, w1, .L352
** b taken
** b not_taken
*/
/*
** i16_x0_sge_4098:
** mov w1, 4097
-** cmp w1, w0, sxth
-** bge .L354
+** cbhle w0, w1, .L354
** b taken
** b not_taken
*/
/*
** u32_x0_eq_4098:
** mov w1, 4098
-** cmp w0, w1
-** beq .L357
+** cbeq w0, w1, .L357
** b not_taken
** b taken
*/
/*
** u32_x0_ne_4098:
** mov w1, 4098
-** cmp w0, w1
-** beq .L359
+** cbeq w0, w1, .L359
** b taken
** b not_taken
*/
/*
** u32_x0_ult_4098:
** mov w1, 4097
-** cmp w0, w1
-** bhi .L361
+** cbhi w0, w1, .L361
** b taken
** b not_taken
*/
/*
** u32_x0_ule_4098:
** mov w1, 4098
-** cmp w0, w1
-** bhi .L363
+** cbhi w0, w1, .L363
** b taken
** b not_taken
*/
/*
** u32_x0_ugt_4098:
** mov w1, 4098
-** cmp w0, w1
-** bls .L365
+** cbls w0, w1, .L365
** b taken
** b not_taken
*/
/*
** u32_x0_uge_4098:
** mov w1, 4097
-** cmp w0, w1
-** bls .L367
+** cbls w0, w1, .L367
** b taken
** b not_taken
*/
/*
** i32_x0_slt_4098:
** mov w1, 4097
-** cmp w0, w1
-** bgt .L369
+** cbgt w0, w1, .L369
** b taken
** b not_taken
*/
/*
** i32_x0_sle_4098:
** mov w1, 4098
-** cmp w0, w1
-** bgt .L371
+** cbgt w0, w1, .L371
** b taken
** b not_taken
*/
/*
** i32_x0_sgt_4098:
** mov w1, 4098
-** cmp w0, w1
-** ble .L373
+** cble w0, w1, .L373
** b taken
** b not_taken
*/
/*
** i32_x0_sge_4098:
** mov w1, 4097
-** cmp w0, w1
-** ble .L375
+** cble w0, w1, .L375
** b taken
** b not_taken
*/
/*
** u64_x0_eq_4098:
** mov x1, 4098
-** cmp x0, x1
-** beq .L378
+** cbeq x0, x1, .L378
** b not_taken
** b taken
*/
/*
** u64_x0_ne_4098:
** mov x1, 4098
-** cmp x0, x1
-** beq .L380
+** cbeq x0, x1, .L380
** b taken
** b not_taken
*/
/*
** u64_x0_ult_4098:
** mov x1, 4097
-** cmp x0, x1
-** bhi .L382
+** cbhi x0, x1, .L382
** b taken
** b not_taken
*/
/*
** u64_x0_ule_4098:
** mov x1, 4098
-** cmp x0, x1
-** bhi .L384
+** cbhi x0, x1, .L384
** b taken
** b not_taken
*/
/*
** u64_x0_ugt_4098:
** mov x1, 4098
-** cmp x0, x1
-** bls .L386
+** cbls x0, x1, .L386
** b taken
** b not_taken
*/
/*
** u64_x0_uge_4098:
** mov x1, 4097
-** cmp x0, x1
-** bls .L388
+** cbls x0, x1, .L388
** b taken
** b not_taken
*/
/*
** i64_x0_slt_4098:
** mov x1, 4097
-** cmp x0, x1
-** bgt .L390
+** cbgt x0, x1, .L390
** b taken
** b not_taken
*/
/*
** i64_x0_sle_4098:
** mov x1, 4098
-** cmp x0, x1
-** bgt .L392
+** cbgt x0, x1, .L392
** b taken
** b not_taken
*/
/*
** i64_x0_sgt_4098:
** mov x1, 4098
-** cmp x0, x1
-** ble .L394
+** cble x0, x1, .L394
** b taken
** b not_taken
*/
/*
** i64_x0_sge_4098:
** mov x1, 4097
-** cmp x0, x1
-** ble .L396
+** cble x0, x1, .L396
** b taken
** b not_taken
*/
--
2.45.2