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/aarch64.cc (aarch64_cb_rhs): New function.
        * config/aarch64/aarch64-protos.h (aarch64_cb_rhs): 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-protos.h      |   2 +
 gcc/config/aarch64/aarch64.cc            |  34 ++
 gcc/config/aarch64/aarch64.md            |  93 +++-
 gcc/config/aarch64/iterators.md          |   5 +
 gcc/config/aarch64/predicates.md         |  15 +
 gcc/testsuite/gcc.target/aarch64/cmpbr.c | 586 ++++++++---------------
 6 files changed, 346 insertions(+), 389 deletions(-)

diff --git a/gcc/config/aarch64/aarch64-protos.h 
b/gcc/config/aarch64/aarch64-protos.h
index 31f2f5b8bd2..0f104d0641b 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -1135,6 +1135,8 @@ bool aarch64_general_check_builtin_call (location_t, 
vec<location_t>,
                                         unsigned int, tree, unsigned int,
                                         tree *);
 
+bool aarch64_cb_rhs (rtx op, rtx rhs);
+
 namespace aarch64 {
   void report_non_ice (location_t, tree, unsigned int);
   void report_out_of_range (location_t, tree, unsigned int, HOST_WIDE_INT,
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 9e45a31f159..262a681e933 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -966,6 +966,40 @@ svpattern_token (enum aarch64_svpattern pattern)
   gcc_unreachable ();
 }
 
+/* Return true if rhs is an operand suitable for a CB<cc> (immediate)
+ * instruction. */
+bool
+aarch64_cb_rhs (rtx op, rtx rhs)
+{
+  if (!CONST_INT_P (rhs))
+    return REG_P (rhs);
+
+  HOST_WIDE_INT rhs_val = INTVAL (rhs);
+  rtx_code code = GET_CODE (op);
+
+  switch (code)
+    {
+    case EQ:
+    case NE:
+    case GT:
+    case GTU:
+    case LT:
+    case LTU:
+      return IN_RANGE (rhs_val, 0, 63);
+
+    case GE:  /* CBGE:   signed greater than or equal */
+    case GEU: /* CBHS: unsigned greater than or equal */
+      return IN_RANGE (rhs_val, 1, 64);
+
+    case LE:  /* CBLE:   signed less than or equal */
+    case LEU: /* CBLS: unsigned less than or equal */
+      return IN_RANGE (rhs_val, -1, 62);
+
+    default:
+      return false;
+    }
+}
+
 /* Return the location of a piece that is known to be passed or returned
    in registers.  FIRST_ZR is the first unused vector argument register
    and FIRST_PR is the first unused predicate argument register.  */
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 0a378ab377d..11a7b9fb6d2 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -717,6 +717,10 @@ (define_constants
     ;; +/- 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)
   ]
 )
 
@@ -724,18 +728,37 @@ (define_constants
 ;; 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_rhs(operands[0], operands[2]))
+    {
+      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"
@@ -762,6 +785,58 @@ (define_expand "cbranchcc4"
   ""
 )
 
+;; 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%j0\\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>%j0\\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"
@@ -2995,8 +3070,8 @@ (define_insn "*subs_<optab><ALLX:mode>_<GPI:mode>"
 (define_insn "*adds_<optab><ALLX:mode>_shift_<GPI:mode>"
   [(set (reg:CC_NZ CC_REGNUM)
        (compare:CC_NZ
-        (plus:GPI (ashift:GPI 
-                   (ANY_EXTEND:GPI 
+        (plus:GPI (ashift:GPI
+                   (ANY_EXTEND:GPI
                     (match_operand:ALLX 1 "register_operand" "r"))
                    (match_operand 2 "aarch64_imm3" "Ui3"))
                   (match_operand:GPI 3 "register_operand" "rk"))
@@ -3014,7 +3089,7 @@ (define_insn "*subs_<optab><ALLX:mode>_shift_<GPI:mode>"
   [(set (reg:CC_NZ CC_REGNUM)
        (compare:CC_NZ
         (minus:GPI (match_operand:GPI 1 "register_operand" "rk")
-                   (ashift:GPI 
+                   (ashift:GPI
                     (ANY_EXTEND:GPI
                      (match_operand:ALLX 2 "register_operand" "r"))
                     (match_operand 3 "aarch64_imm3" "Ui3")))
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index a8957681357..0c89f1e8589 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -2961,6 +2961,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 d8e9725a1b6..f4595de5682 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)")
@@ -131,6 +135,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 b8925f14433..74e546ec0b7 100644
--- a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
+++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
@@ -86,9 +86,7 @@ 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
 ** .L4:
 **     b       taken
@@ -96,9 +94,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ne_x1:
-**     and     w1, w1, 255
-**     cmp     w1, w0, uxtb
-**     beq     .L6
+**     cbbeq   w1, w0, .L6
 **     b       taken
 ** .L6:
 **     b       not_taken
@@ -106,9 +102,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ult_x1:
-**     and     w1, w1, 255
-**     cmp     w1, w0, uxtb
-**     bls     .L8
+**     cbbls   w1, w0, .L8
 **     b       taken
 ** .L8:
 **     b       not_taken
@@ -116,9 +110,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ule_x1:
-**     and     w1, w1, 255
-**     cmp     w1, w0, uxtb
-**     bcc     .L10
+**     cbblo   w1, w0, .L10
 **     b       taken
 ** .L10:
 **     b       not_taken
@@ -126,9 +118,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ugt_x1:
-**     and     w1, w1, 255
-**     cmp     w1, w0, uxtb
-**     bcs     .L12
+**     cbbhs   w1, w0, .L12
 **     b       taken
 ** .L12:
 **     b       not_taken
@@ -136,9 +126,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_uge_x1:
-**     and     w1, w1, 255
-**     cmp     w1, w0, uxtb
-**     bhi     .L14
+**     cbbhi   w1, w0, .L14
 **     b       taken
 ** .L14:
 **     b       not_taken
@@ -146,9 +134,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_slt_x1:
-**     sxtb    w1, w1
-**     cmp     w1, w0, sxtb
-**     ble     .L16
+**     cbble   w1, w0, .L16
 **     b       taken
 ** .L16:
 **     b       not_taken
@@ -156,9 +142,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sle_x1:
-**     sxtb    w1, w1
-**     cmp     w1, w0, sxtb
-**     blt     .L18
+**     cbblt   w1, w0, .L18
 **     b       taken
 ** .L18:
 **     b       not_taken
@@ -166,9 +150,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sgt_x1:
-**     sxtb    w1, w1
-**     cmp     w1, w0, sxtb
-**     bge     .L20
+**     cbbge   w1, w0, .L20
 **     b       taken
 ** .L20:
 **     b       not_taken
@@ -176,9 +158,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sge_x1:
-**     sxtb    w1, w1
-**     cmp     w1, w0, sxtb
-**     bgt     .L22
+**     cbbgt   w1, w0, .L22
 **     b       taken
 ** .L22:
 **     b       not_taken
@@ -186,9 +166,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_eq_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     beq     .L25
+**     cbheq   w1, w0, .L25
 **     b       not_taken
 ** .L25:
 **     b       taken
@@ -196,9 +174,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ne_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     beq     .L27
+**     cbheq   w1, w0, .L27
 **     b       taken
 ** .L27:
 **     b       not_taken
@@ -206,9 +182,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ult_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     bls     .L29
+**     cbhls   w1, w0, .L29
 **     b       taken
 ** .L29:
 **     b       not_taken
@@ -216,9 +190,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ule_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     bcc     .L31
+**     cbhlo   w1, w0, .L31
 **     b       taken
 ** .L31:
 **     b       not_taken
@@ -226,9 +198,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ugt_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     bcs     .L33
+**     cbhhs   w1, w0, .L33
 **     b       taken
 ** .L33:
 **     b       not_taken
@@ -236,9 +206,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_uge_x1:
-**     and     w1, w1, 65535
-**     cmp     w1, w0, uxth
-**     bhi     .L35
+**     cbhhi   w1, w0, .L35
 **     b       taken
 ** .L35:
 **     b       not_taken
@@ -246,9 +214,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_slt_x1:
-**     sxth    w1, w1
-**     cmp     w1, w0, sxth
-**     ble     .L37
+**     cbhle   w1, w0, .L37
 **     b       taken
 ** .L37:
 **     b       not_taken
@@ -256,9 +222,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sle_x1:
-**     sxth    w1, w1
-**     cmp     w1, w0, sxth
-**     blt     .L39
+**     cbhlt   w1, w0, .L39
 **     b       taken
 ** .L39:
 **     b       not_taken
@@ -266,9 +230,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sgt_x1:
-**     sxth    w1, w1
-**     cmp     w1, w0, sxth
-**     bge     .L41
+**     cbhge   w1, w0, .L41
 **     b       taken
 ** .L41:
 **     b       not_taken
@@ -276,9 +238,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sge_x1:
-**     sxth    w1, w1
-**     cmp     w1, w0, sxth
-**     bgt     .L43
+**     cbhgt   w1, w0, .L43
 **     b       taken
 ** .L43:
 **     b       not_taken
@@ -286,8 +246,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_eq_x1:
-**     cmp     w0, w1
-**     beq     .L46
+**     cbeq    w0, w1, .L46
 **     b       not_taken
 ** .L46:
 **     b       taken
@@ -295,8 +254,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ne_x1:
-**     cmp     w0, w1
-**     beq     .L48
+**     cbeq    w0, w1, .L48
 **     b       taken
 ** .L48:
 **     b       not_taken
@@ -304,8 +262,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ult_x1:
-**     cmp     w0, w1
-**     bcs     .L50
+**     cbhs    w0, w1, .L50
 **     b       taken
 ** .L50:
 **     b       not_taken
@@ -313,8 +270,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ule_x1:
-**     cmp     w0, w1
-**     bhi     .L52
+**     cbhi    w0, w1, .L52
 **     b       taken
 ** .L52:
 **     b       not_taken
@@ -322,8 +278,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ugt_x1:
-**     cmp     w0, w1
-**     bls     .L54
+**     cbls    w0, w1, .L54
 **     b       taken
 ** .L54:
 **     b       not_taken
@@ -331,8 +286,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_uge_x1:
-**     cmp     w0, w1
-**     bcc     .L56
+**     cblo    w0, w1, .L56
 **     b       taken
 ** .L56:
 **     b       not_taken
@@ -340,8 +294,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_slt_x1:
-**     cmp     w0, w1
-**     bge     .L58
+**     cbge    w0, w1, .L58
 **     b       taken
 ** .L58:
 **     b       not_taken
@@ -349,8 +302,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sle_x1:
-**     cmp     w0, w1
-**     bgt     .L60
+**     cbgt    w0, w1, .L60
 **     b       taken
 ** .L60:
 **     b       not_taken
@@ -358,8 +310,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sgt_x1:
-**     cmp     w0, w1
-**     ble     .L62
+**     cble    w0, w1, .L62
 **     b       taken
 ** .L62:
 **     b       not_taken
@@ -367,8 +318,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sge_x1:
-**     cmp     w0, w1
-**     blt     .L64
+**     cblt    w0, w1, .L64
 **     b       taken
 ** .L64:
 **     b       not_taken
@@ -376,8 +326,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_eq_x1:
-**     cmp     x0, x1
-**     beq     .L67
+**     cbeq    x0, x1, .L67
 **     b       not_taken
 ** .L67:
 **     b       taken
@@ -385,8 +334,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ne_x1:
-**     cmp     x0, x1
-**     beq     .L69
+**     cbeq    x0, x1, .L69
 **     b       taken
 ** .L69:
 **     b       not_taken
@@ -394,8 +342,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ult_x1:
-**     cmp     x0, x1
-**     bcs     .L71
+**     cbhs    x0, x1, .L71
 **     b       taken
 ** .L71:
 **     b       not_taken
@@ -403,8 +350,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ule_x1:
-**     cmp     x0, x1
-**     bhi     .L73
+**     cbhi    x0, x1, .L73
 **     b       taken
 ** .L73:
 **     b       not_taken
@@ -412,8 +358,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ugt_x1:
-**     cmp     x0, x1
-**     bls     .L75
+**     cbls    x0, x1, .L75
 **     b       taken
 ** .L75:
 **     b       not_taken
@@ -421,8 +366,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_uge_x1:
-**     cmp     x0, x1
-**     bcc     .L77
+**     cblo    x0, x1, .L77
 **     b       taken
 ** .L77:
 **     b       not_taken
@@ -430,8 +374,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_slt_x1:
-**     cmp     x0, x1
-**     bge     .L79
+**     cbge    x0, x1, .L79
 **     b       taken
 ** .L79:
 **     b       not_taken
@@ -439,8 +382,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sle_x1:
-**     cmp     x0, x1
-**     bgt     .L81
+**     cbgt    x0, x1, .L81
 **     b       taken
 ** .L81:
 **     b       not_taken
@@ -448,8 +390,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sgt_x1:
-**     cmp     x0, x1
-**     ble     .L83
+**     cble    x0, x1, .L83
 **     b       taken
 ** .L83:
 **     b       not_taken
@@ -457,8 +398,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sge_x1:
-**     cmp     x0, x1
-**     blt     .L85
+**     cblt    x0, x1, .L85
 **     b       taken
 ** .L85:
 **     b       not_taken
@@ -466,8 +406,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_eq_42:
-**     cmp     w0, 42
-**     beq     .L88
+**     cbeq    w0, 42, .L88
 **     b       not_taken
 ** .L88:
 **     b       taken
@@ -475,8 +414,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ne_42:
-**     cmp     w0, 42
-**     beq     .L90
+**     cbeq    w0, 42, .L90
 **     b       taken
 ** .L90:
 **     b       not_taken
@@ -484,8 +422,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ult_42:
-**     cmp     w0, 41
-**     bhi     .L92
+**     cbhi    w0, 41, .L92
 **     b       taken
 ** .L92:
 **     b       not_taken
@@ -493,8 +430,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ule_42:
-**     cmp     w0, 42
-**     bhi     .L94
+**     cbhi    w0, 42, .L94
 **     b       taken
 ** .L94:
 **     b       not_taken
@@ -502,8 +438,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ugt_42:
-**     cmp     w0, 42
-**     bls     .L96
+**     cbls    w0, 42, .L96
 **     b       taken
 ** .L96:
 **     b       not_taken
@@ -511,8 +446,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_uge_42:
-**     cmp     w0, 41
-**     bls     .L98
+**     cbls    w0, 41, .L98
 **     b       taken
 ** .L98:
 **     b       not_taken
@@ -520,8 +454,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_slt_42:
-**     cmp     w0, 41
-**     bgt     .L100
+**     cbgt    w0, 41, .L100
 **     b       taken
 ** .L100:
 **     b       not_taken
@@ -529,8 +462,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sle_42:
-**     cmp     w0, 42
-**     bgt     .L102
+**     cbgt    w0, 42, .L102
 **     b       taken
 ** .L102:
 **     b       not_taken
@@ -538,8 +470,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sgt_42:
-**     cmp     w0, 42
-**     ble     .L104
+**     cble    w0, 42, .L104
 **     b       taken
 ** .L104:
 **     b       not_taken
@@ -547,8 +478,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sge_42:
-**     cmp     w0, 41
-**     ble     .L106
+**     cble    w0, 41, .L106
 **     b       taken
 ** .L106:
 **     b       not_taken
@@ -556,8 +486,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_eq_42:
-**     cmp     x0, 42
-**     beq     .L109
+**     cbeq    x0, 42, .L109
 **     b       not_taken
 ** .L109:
 **     b       taken
@@ -565,8 +494,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ne_42:
-**     cmp     x0, 42
-**     beq     .L111
+**     cbeq    x0, 42, .L111
 **     b       taken
 ** .L111:
 **     b       not_taken
@@ -574,8 +502,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ult_42:
-**     cmp     x0, 41
-**     bhi     .L113
+**     cbhi    x0, 41, .L113
 **     b       taken
 ** .L113:
 **     b       not_taken
@@ -583,8 +510,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ule_42:
-**     cmp     x0, 42
-**     bhi     .L115
+**     cbhi    x0, 42, .L115
 **     b       taken
 ** .L115:
 **     b       not_taken
@@ -592,8 +518,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ugt_42:
-**     cmp     x0, 42
-**     bls     .L117
+**     cbls    x0, 42, .L117
 **     b       taken
 ** .L117:
 **     b       not_taken
@@ -601,8 +526,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_uge_42:
-**     cmp     x0, 41
-**     bls     .L119
+**     cbls    x0, 41, .L119
 **     b       taken
 ** .L119:
 **     b       not_taken
@@ -610,8 +534,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_slt_42:
-**     cmp     x0, 41
-**     bgt     .L121
+**     cbgt    x0, 41, .L121
 **     b       taken
 ** .L121:
 **     b       not_taken
@@ -619,8 +542,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sle_42:
-**     cmp     x0, 42
-**     bgt     .L123
+**     cbgt    x0, 42, .L123
 **     b       taken
 ** .L123:
 **     b       not_taken
@@ -628,8 +550,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sgt_42:
-**     cmp     x0, 42
-**     ble     .L125
+**     cble    x0, 42, .L125
 **     b       taken
 ** .L125:
 **     b       not_taken
@@ -637,8 +558,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sge_42:
-**     cmp     x0, 41
-**     ble     .L127
+**     cble    x0, 41, .L127
 **     b       taken
 ** .L127:
 **     b       not_taken
@@ -646,8 +566,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_eq_0:
-**     tst     w0, 255
-**     bne     .L129
+**     cbbne   w0, wzr, .L129
 **     b       taken
 ** .L129:
 **     b       not_taken
@@ -655,8 +574,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ne_0:
-**     tst     w0, 255
-**     beq     .L131
+**     cbbeq   w0, wzr, .L131
 **     b       taken
 ** .L131:
 **     b       not_taken
@@ -669,8 +587,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ule_0:
-**     tst     w0, 255
-**     bne     .L134
+**     cbbne   w0, wzr, .L134
 **     b       taken
 ** .L134:
 **     b       not_taken
@@ -678,8 +595,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ugt_0:
-**     tst     w0, 255
-**     beq     .L136
+**     cbbeq   w0, wzr, .L136
 **     b       taken
 ** .L136:
 **     b       not_taken
@@ -692,7 +608,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_slt_0:
-**     tbnz    w0, 7, .L140
+**     cbblt   w0, wzr, .L140
 **     b       not_taken
 ** .L140:
 **     b       taken
@@ -700,9 +616,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sle_0:
-**     sxtb    w0, w0
-**     cmp     w0, 0
-**     ble     .L143
+**     cbble   w0, wzr, .L143
 **     b       not_taken
 ** .L143:
 **     b       taken
@@ -710,9 +624,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sgt_0:
-**     sxtb    w0, w0
-**     cmp     w0, 0
-**     ble     .L145
+**     cbble   w0, wzr, .L145
 **     b       taken
 ** .L145:
 **     b       not_taken
@@ -720,7 +632,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sge_0:
-**     tbnz    w0, 7, .L147
+**     cbblt   w0, wzr, .L147
 **     b       taken
 ** .L147:
 **     b       not_taken
@@ -728,8 +640,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_eq_0:
-**     tst     w0, 65535
-**     bne     .L149
+**     cbhne   w0, wzr, .L149
 **     b       taken
 ** .L149:
 **     b       not_taken
@@ -737,8 +648,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ne_0:
-**     tst     w0, 65535
-**     beq     .L151
+**     cbheq   w0, wzr, .L151
 **     b       taken
 ** .L151:
 **     b       not_taken
@@ -751,8 +661,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ule_0:
-**     tst     w0, 65535
-**     bne     .L154
+**     cbhne   w0, wzr, .L154
 **     b       taken
 ** .L154:
 **     b       not_taken
@@ -760,8 +669,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ugt_0:
-**     tst     w0, 65535
-**     beq     .L156
+**     cbheq   w0, wzr, .L156
 **     b       taken
 ** .L156:
 **     b       not_taken
@@ -774,7 +682,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_slt_0:
-**     tbnz    w0, 15, .L160
+**     cbhlt   w0, wzr, .L160
 **     b       not_taken
 ** .L160:
 **     b       taken
@@ -782,9 +690,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sle_0:
-**     sxth    w0, w0
-**     cmp     w0, 0
-**     ble     .L163
+**     cbhle   w0, wzr, .L163
 **     b       not_taken
 ** .L163:
 **     b       taken
@@ -792,9 +698,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sgt_0:
-**     sxth    w0, w0
-**     cmp     w0, 0
-**     ble     .L165
+**     cbhle   w0, wzr, .L165
 **     b       taken
 ** .L165:
 **     b       not_taken
@@ -802,7 +706,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sge_0:
-**     tbnz    w0, 15, .L167
+**     cbhlt   w0, wzr, .L167
 **     b       taken
 ** .L167:
 **     b       not_taken
@@ -810,7 +714,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_eq_0:
-**     cbnz    w0, .L169
+**     cbne    w0, wzr, .L169
 **     b       taken
 ** .L169:
 **     b       not_taken
@@ -818,7 +722,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ne_0:
-**     cbz     w0, .L171
+**     cbeq    w0, wzr, .L171
 **     b       taken
 ** .L171:
 **     b       not_taken
@@ -831,7 +735,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ule_0:
-**     cbnz    w0, .L174
+**     cbne    w0, wzr, .L174
 **     b       taken
 ** .L174:
 **     b       not_taken
@@ -839,7 +743,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ugt_0:
-**     cbz     w0, .L176
+**     cbeq    w0, wzr, .L176
 **     b       taken
 ** .L176:
 **     b       not_taken
@@ -852,7 +756,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_slt_0:
-**     tbnz    w0, #31, .L180
+**     cblt    w0, wzr, .L180
 **     b       not_taken
 ** .L180:
 **     b       taken
@@ -860,8 +764,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sle_0:
-**     cmp     w0, 0
-**     ble     .L183
+**     cble    w0, wzr, .L183
 **     b       not_taken
 ** .L183:
 **     b       taken
@@ -869,8 +772,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sgt_0:
-**     cmp     w0, 0
-**     ble     .L185
+**     cble    w0, wzr, .L185
 **     b       taken
 ** .L185:
 **     b       not_taken
@@ -878,7 +780,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_sge_0:
-**     tbnz    w0, #31, .L187
+**     cblt    w0, wzr, .L187
 **     b       taken
 ** .L187:
 **     b       not_taken
@@ -886,7 +788,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_eq_0:
-**     cbnz    x0, .L189
+**     cbne    x0, xzr, .L189
 **     b       taken
 ** .L189:
 **     b       not_taken
@@ -894,7 +796,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ne_0:
-**     cbz     x0, .L191
+**     cbeq    x0, xzr, .L191
 **     b       taken
 ** .L191:
 **     b       not_taken
@@ -907,7 +809,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ule_0:
-**     cbnz    x0, .L194
+**     cbne    x0, xzr, .L194
 **     b       taken
 ** .L194:
 **     b       not_taken
@@ -915,7 +817,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ugt_0:
-**     cbz     x0, .L196
+**     cbeq    x0, xzr, .L196
 **     b       taken
 ** .L196:
 **     b       not_taken
@@ -928,7 +830,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_slt_0:
-**     tbnz    x0, #63, .L200
+**     cblt    x0, xzr, .L200
 **     b       not_taken
 ** .L200:
 **     b       taken
@@ -936,8 +838,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sle_0:
-**     cmp     x0, 0
-**     ble     .L203
+**     cble    x0, xzr, .L203
 **     b       not_taken
 ** .L203:
 **     b       taken
@@ -945,8 +846,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sgt_0:
-**     cmp     x0, 0
-**     ble     .L205
+**     cble    x0, xzr, .L205
 **     b       taken
 ** .L205:
 **     b       not_taken
@@ -954,7 +854,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_sge_0:
-**     tbnz    x0, #63, .L207
+**     cblt    x0, xzr, .L207
 **     b       taken
 ** .L207:
 **     b       not_taken
@@ -962,9 +862,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_eq_42:
-**     and     w0, w0, 255
-**     cmp     w0, 42
-**     beq     .L210
+**     mov     w1, 42
+**     cbbeq   w0, w1, .L210
 **     b       not_taken
 ** .L210:
 **     b       taken
@@ -972,9 +871,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ne_42:
-**     and     w0, w0, 255
-**     cmp     w0, 42
-**     beq     .L212
+**     mov     w1, 42
+**     cbbeq   w0, w1, .L212
 **     b       taken
 ** .L212:
 **     b       not_taken
@@ -982,9 +880,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ult_42:
-**     and     w0, w0, 255
-**     cmp     w0, 41
-**     bhi     .L214
+**     mov     w1, 41
+**     cbbhi   w0, w1, .L214
 **     b       taken
 ** .L214:
 **     b       not_taken
@@ -992,9 +889,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ule_42:
-**     and     w0, w0, 255
-**     cmp     w0, 42
-**     bhi     .L216
+**     mov     w1, 42
+**     cbbhi   w0, w1, .L216
 **     b       taken
 ** .L216:
 **     b       not_taken
@@ -1002,9 +898,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ugt_42:
-**     and     w0, w0, 255
-**     cmp     w0, 42
-**     bls     .L218
+**     mov     w1, 42
+**     cbbls   w0, w1, .L218
 **     b       taken
 ** .L218:
 **     b       not_taken
@@ -1012,9 +907,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_uge_42:
-**     and     w0, w0, 255
-**     cmp     w0, 41
-**     bls     .L220
+**     mov     w1, 41
+**     cbbls   w0, w1, .L220
 **     b       taken
 ** .L220:
 **     b       not_taken
@@ -1022,9 +916,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_slt_42:
-**     sxtb    w0, w0
-**     cmp     w0, 41
-**     bgt     .L222
+**     mov     w1, 41
+**     cbbgt   w0, w1, .L222
 **     b       taken
 ** .L222:
 **     b       not_taken
@@ -1032,9 +925,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sle_42:
-**     sxtb    w0, w0
-**     cmp     w0, 42
-**     bgt     .L224
+**     mov     w1, 42
+**     cbbgt   w0, w1, .L224
 **     b       taken
 ** .L224:
 **     b       not_taken
@@ -1042,9 +934,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sgt_42:
-**     sxtb    w0, w0
-**     cmp     w0, 42
-**     ble     .L226
+**     mov     w1, 42
+**     cbble   w0, w1, .L226
 **     b       taken
 ** .L226:
 **     b       not_taken
@@ -1052,9 +943,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sge_42:
-**     sxtb    w0, w0
-**     cmp     w0, 41
-**     ble     .L228
+**     mov     w1, 41
+**     cbble   w0, w1, .L228
 **     b       taken
 ** .L228:
 **     b       not_taken
@@ -1062,9 +952,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_eq_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 42
-**     beq     .L231
+**     mov     w1, 42
+**     cbheq   w0, w1, .L231
 **     b       not_taken
 ** .L231:
 **     b       taken
@@ -1072,9 +961,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ne_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 42
-**     beq     .L233
+**     mov     w1, 42
+**     cbheq   w0, w1, .L233
 **     b       taken
 ** .L233:
 **     b       not_taken
@@ -1082,9 +970,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ult_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 41
-**     bhi     .L235
+**     mov     w1, 41
+**     cbhhi   w0, w1, .L235
 **     b       taken
 ** .L235:
 **     b       not_taken
@@ -1092,9 +979,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ule_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 42
-**     bhi     .L237
+**     mov     w1, 42
+**     cbhhi   w0, w1, .L237
 **     b       taken
 ** .L237:
 **     b       not_taken
@@ -1102,9 +988,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ugt_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 42
-**     bls     .L239
+**     mov     w1, 42
+**     cbhls   w0, w1, .L239
 **     b       taken
 ** .L239:
 **     b       not_taken
@@ -1112,9 +997,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_uge_42:
-**     and     w0, w0, 65535
-**     cmp     w0, 41
-**     bls     .L241
+**     mov     w1, 41
+**     cbhls   w0, w1, .L241
 **     b       taken
 ** .L241:
 **     b       not_taken
@@ -1122,9 +1006,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_slt_42:
-**     sxth    w0, w0
-**     cmp     w0, 41
-**     bgt     .L243
+**     mov     w1, 41
+**     cbhgt   w0, w1, .L243
 **     b       taken
 ** .L243:
 **     b       not_taken
@@ -1132,9 +1015,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sle_42:
-**     sxth    w0, w0
-**     cmp     w0, 42
-**     bgt     .L245
+**     mov     w1, 42
+**     cbhgt   w0, w1, .L245
 **     b       taken
 ** .L245:
 **     b       not_taken
@@ -1142,9 +1024,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sgt_42:
-**     sxth    w0, w0
-**     cmp     w0, 42
-**     ble     .L247
+**     mov     w1, 42
+**     cbhle   w0, w1, .L247
 **     b       taken
 ** .L247:
 **     b       not_taken
@@ -1152,9 +1033,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sge_42:
-**     sxth    w0, w0
-**     cmp     w0, 41
-**     ble     .L249
+**     mov     w1, 41
+**     cbhle   w0, w1, .L249
 **     b       taken
 ** .L249:
 **     b       not_taken
@@ -1162,9 +1042,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_eq_64:
-**     and     w0, w0, 255
-**     cmp     w0, 64
-**     beq     .L252
+**     mov     w1, 64
+**     cbbeq   w0, w1, .L252
 **     b       not_taken
 ** .L252:
 **     b       taken
@@ -1172,9 +1051,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ne_64:
-**     and     w0, w0, 255
-**     cmp     w0, 64
-**     beq     .L254
+**     mov     w1, 64
+**     cbbeq   w0, w1, .L254
 **     b       taken
 ** .L254:
 **     b       not_taken
@@ -1182,9 +1060,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ult_64:
-**     and     w0, w0, 255
-**     cmp     w0, 63
-**     bhi     .L256
+**     mov     w1, 63
+**     cbbhi   w0, w1, .L256
 **     b       taken
 ** .L256:
 **     b       not_taken
@@ -1192,9 +1069,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ule_64:
-**     and     w0, w0, 255
-**     cmp     w0, 64
-**     bhi     .L258
+**     mov     w1, 64
+**     cbbhi   w0, w1, .L258
 **     b       taken
 ** .L258:
 **     b       not_taken
@@ -1202,9 +1078,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_ugt_64:
-**     and     w0, w0, 255
-**     cmp     w0, 64
-**     bls     .L260
+**     mov     w1, 64
+**     cbbls   w0, w1, .L260
 **     b       taken
 ** .L260:
 **     b       not_taken
@@ -1212,9 +1087,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u8_x0_uge_64:
-**     and     w0, w0, 255
-**     cmp     w0, 63
-**     bls     .L262
+**     mov     w1, 63
+**     cbbls   w0, w1, .L262
 **     b       taken
 ** .L262:
 **     b       not_taken
@@ -1222,9 +1096,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_slt_64:
-**     sxtb    w0, w0
-**     cmp     w0, 63
-**     bgt     .L264
+**     mov     w1, 63
+**     cbbgt   w0, w1, .L264
 **     b       taken
 ** .L264:
 **     b       not_taken
@@ -1232,9 +1105,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sle_64:
-**     sxtb    w0, w0
-**     cmp     w0, 64
-**     bgt     .L266
+**     mov     w1, 64
+**     cbbgt   w0, w1, .L266
 **     b       taken
 ** .L266:
 **     b       not_taken
@@ -1242,9 +1114,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sgt_64:
-**     sxtb    w0, w0
-**     cmp     w0, 64
-**     ble     .L268
+**     mov     w1, 64
+**     cbble   w0, w1, .L268
 **     b       taken
 ** .L268:
 **     b       not_taken
@@ -1252,9 +1123,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i8_x0_sge_64:
-**     sxtb    w0, w0
-**     cmp     w0, 63
-**     ble     .L270
+**     mov     w1, 63
+**     cbble   w0, w1, .L270
 **     b       taken
 ** .L270:
 **     b       not_taken
@@ -1262,9 +1132,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_eq_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 64
-**     beq     .L273
+**     mov     w1, 64
+**     cbheq   w0, w1, .L273
 **     b       not_taken
 ** .L273:
 **     b       taken
@@ -1272,9 +1141,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ne_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 64
-**     beq     .L275
+**     mov     w1, 64
+**     cbheq   w0, w1, .L275
 **     b       taken
 ** .L275:
 **     b       not_taken
@@ -1282,9 +1150,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ult_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 63
-**     bhi     .L277
+**     mov     w1, 63
+**     cbhhi   w0, w1, .L277
 **     b       taken
 ** .L277:
 **     b       not_taken
@@ -1292,9 +1159,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ule_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 64
-**     bhi     .L279
+**     mov     w1, 64
+**     cbhhi   w0, w1, .L279
 **     b       taken
 ** .L279:
 **     b       not_taken
@@ -1302,9 +1168,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_ugt_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 64
-**     bls     .L281
+**     mov     w1, 64
+**     cbhls   w0, w1, .L281
 **     b       taken
 ** .L281:
 **     b       not_taken
@@ -1312,9 +1177,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u16_x0_uge_64:
-**     and     w0, w0, 65535
-**     cmp     w0, 63
-**     bls     .L283
+**     mov     w1, 63
+**     cbhls   w0, w1, .L283
 **     b       taken
 ** .L283:
 **     b       not_taken
@@ -1322,9 +1186,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_slt_64:
-**     sxth    w0, w0
-**     cmp     w0, 63
-**     bgt     .L285
+**     mov     w1, 63
+**     cbhgt   w0, w1, .L285
 **     b       taken
 ** .L285:
 **     b       not_taken
@@ -1332,9 +1195,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sle_64:
-**     sxth    w0, w0
-**     cmp     w0, 64
-**     bgt     .L287
+**     mov     w1, 64
+**     cbhgt   w0, w1, .L287
 **     b       taken
 ** .L287:
 **     b       not_taken
@@ -1342,9 +1204,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sgt_64:
-**     sxth    w0, w0
-**     cmp     w0, 64
-**     ble     .L289
+**     mov     w1, 64
+**     cbhle   w0, w1, .L289
 **     b       taken
 ** .L289:
 **     b       not_taken
@@ -1352,9 +1213,8 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i16_x0_sge_64:
-**     sxth    w0, w0
-**     cmp     w0, 63
-**     ble     .L291
+**     mov     w1, 63
+**     cbhle   w0, w1, .L291
 **     b       taken
 ** .L291:
 **     b       not_taken
@@ -1380,8 +1240,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u32_x0_ult_64:
-**     cmp     w0, 63
-**     bhi     .L298
+**     cbhi    w0, 63, .L298
 **     b       taken
 ** .L298:
 **     b       not_taken
@@ -1416,8 +1275,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i32_x0_slt_64:
-**     cmp     w0, 63
-**     bgt     .L306
+**     cbgt    w0, 63, .L306
 **     b       taken
 ** .L306:
 **     b       not_taken
@@ -1470,8 +1328,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** u64_x0_ult_64:
-**     cmp     x0, 63
-**     bhi     .L319
+**     cbhi    x0, 63, .L319
 **     b       taken
 ** .L319:
 **     b       not_taken
@@ -1506,8 +1363,7 @@ COMPARE_ALL(u64, i64, 4098);
 
 /*
 ** i64_x0_slt_64:
-**     cmp     x0, 63
-**     bgt     .L327
+**     cbgt    x0, 63, .L327
 **     b       taken
 ** .L327:
 **     b       not_taken
@@ -1543,8 +1399,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_eq_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, uxth
-**     beq     .L336
+**     cbheq   w0, w1, .L336
 **     b       not_taken
 ** .L336:
 **     b       taken
@@ -1553,8 +1408,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_ne_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, uxth
-**     beq     .L338
+**     cbheq   w0, w1, .L338
 **     b       taken
 ** .L338:
 **     b       not_taken
@@ -1563,8 +1417,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_ult_4098:
 **     mov     w1, 4097
-**     cmp     w1, w0, uxth
-**     bcc     .L340
+**     cbhhi   w0, w1, .L340
 **     b       taken
 ** .L340:
 **     b       not_taken
@@ -1573,8 +1426,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_ule_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, uxth
-**     bcc     .L342
+**     cbhhi   w0, w1, .L342
 **     b       taken
 ** .L342:
 **     b       not_taken
@@ -1583,8 +1435,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_ugt_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, uxth
-**     bcs     .L344
+**     cbhls   w0, w1, .L344
 **     b       taken
 ** .L344:
 **     b       not_taken
@@ -1593,8 +1444,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u16_x0_uge_4098:
 **     mov     w1, 4097
-**     cmp     w1, w0, uxth
-**     bcs     .L346
+**     cbhls   w0, w1, .L346
 **     b       taken
 ** .L346:
 **     b       not_taken
@@ -1603,8 +1453,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i16_x0_slt_4098:
 **     mov     w1, 4097
-**     cmp     w1, w0, sxth
-**     blt     .L348
+**     cbhgt   w0, w1, .L348
 **     b       taken
 ** .L348:
 **     b       not_taken
@@ -1613,8 +1462,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i16_x0_sle_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, sxth
-**     blt     .L350
+**     cbhgt   w0, w1, .L350
 **     b       taken
 ** .L350:
 **     b       not_taken
@@ -1623,8 +1471,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i16_x0_sgt_4098:
 **     mov     w1, 4098
-**     cmp     w1, w0, sxth
-**     bge     .L352
+**     cbhle   w0, w1, .L352
 **     b       taken
 ** .L352:
 **     b       not_taken
@@ -1633,8 +1480,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i16_x0_sge_4098:
 **     mov     w1, 4097
-**     cmp     w1, w0, sxth
-**     bge     .L354
+**     cbhle   w0, w1, .L354
 **     b       taken
 ** .L354:
 **     b       not_taken
@@ -1643,8 +1489,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_eq_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     beq     .L357
+**     cbeq    w0, w1, .L357
 **     b       not_taken
 ** .L357:
 **     b       taken
@@ -1653,8 +1498,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_ne_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     beq     .L359
+**     cbeq    w0, w1, .L359
 **     b       taken
 ** .L359:
 **     b       not_taken
@@ -1663,8 +1507,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_ult_4098:
 **     mov     w1, 4097
-**     cmp     w0, w1
-**     bhi     .L361
+**     cbhi    w0, w1, .L361
 **     b       taken
 ** .L361:
 **     b       not_taken
@@ -1673,8 +1516,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_ule_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     bhi     .L363
+**     cbhi    w0, w1, .L363
 **     b       taken
 ** .L363:
 **     b       not_taken
@@ -1683,8 +1525,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_ugt_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     bls     .L365
+**     cbls    w0, w1, .L365
 **     b       taken
 ** .L365:
 **     b       not_taken
@@ -1693,8 +1534,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u32_x0_uge_4098:
 **     mov     w1, 4097
-**     cmp     w0, w1
-**     bls     .L367
+**     cbls    w0, w1, .L367
 **     b       taken
 ** .L367:
 **     b       not_taken
@@ -1703,8 +1543,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i32_x0_slt_4098:
 **     mov     w1, 4097
-**     cmp     w0, w1
-**     bgt     .L369
+**     cbgt    w0, w1, .L369
 **     b       taken
 ** .L369:
 **     b       not_taken
@@ -1713,8 +1552,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i32_x0_sle_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     bgt     .L371
+**     cbgt    w0, w1, .L371
 **     b       taken
 ** .L371:
 **     b       not_taken
@@ -1723,8 +1561,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i32_x0_sgt_4098:
 **     mov     w1, 4098
-**     cmp     w0, w1
-**     ble     .L373
+**     cble    w0, w1, .L373
 **     b       taken
 ** .L373:
 **     b       not_taken
@@ -1733,8 +1570,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i32_x0_sge_4098:
 **     mov     w1, 4097
-**     cmp     w0, w1
-**     ble     .L375
+**     cble    w0, w1, .L375
 **     b       taken
 ** .L375:
 **     b       not_taken
@@ -1743,8 +1579,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_eq_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     beq     .L378
+**     cbeq    x0, x1, .L378
 **     b       not_taken
 ** .L378:
 **     b       taken
@@ -1753,8 +1588,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_ne_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     beq     .L380
+**     cbeq    x0, x1, .L380
 **     b       taken
 ** .L380:
 **     b       not_taken
@@ -1763,8 +1597,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_ult_4098:
 **     mov     x1, 4097
-**     cmp     x0, x1
-**     bhi     .L382
+**     cbhi    x0, x1, .L382
 **     b       taken
 ** .L382:
 **     b       not_taken
@@ -1773,8 +1606,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_ule_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     bhi     .L384
+**     cbhi    x0, x1, .L384
 **     b       taken
 ** .L384:
 **     b       not_taken
@@ -1783,8 +1615,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_ugt_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     bls     .L386
+**     cbls    x0, x1, .L386
 **     b       taken
 ** .L386:
 **     b       not_taken
@@ -1793,8 +1624,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** u64_x0_uge_4098:
 **     mov     x1, 4097
-**     cmp     x0, x1
-**     bls     .L388
+**     cbls    x0, x1, .L388
 **     b       taken
 ** .L388:
 **     b       not_taken
@@ -1803,8 +1633,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i64_x0_slt_4098:
 **     mov     x1, 4097
-**     cmp     x0, x1
-**     bgt     .L390
+**     cbgt    x0, x1, .L390
 **     b       taken
 ** .L390:
 **     b       not_taken
@@ -1813,8 +1642,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i64_x0_sle_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     bgt     .L392
+**     cbgt    x0, x1, .L392
 **     b       taken
 ** .L392:
 **     b       not_taken
@@ -1823,8 +1651,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i64_x0_sgt_4098:
 **     mov     x1, 4098
-**     cmp     x0, x1
-**     ble     .L394
+**     cble    x0, x1, .L394
 **     b       taken
 ** .L394:
 **     b       not_taken
@@ -1833,8 +1660,7 @@ COMPARE_ALL(u64, i64, 4098);
 /*
 ** i64_x0_sge_4098:
 **     mov     x1, 4097
-**     cmp     x0, x1
-**     ble     .L396
+**     cble    x0, x1, .L396
 **     b       taken
 ** .L396:
 **     b       not_taken
-- 
2.45.2

Reply via email to