On 28/05/2025 18:17, Karl Meakin wrote:
> The CB<cond> family of instructions does not support using the CS or CC
> condition codes; instead the synonyms HS and LO must be used. GCC has
> traditionally used the CS and CC names. To work around this while
> avoiding test churn, add new `j` and `J` format specifiers and use them
> when generating CB<cond> instructions.
> 
> Also reformat the definition of the `aarch64_cond_code` enum while we're
> in the same neighbourhood, to make the relationship between each code
> and its inverse more obvious.
> 
> gcc/ChangeLog:
> 
>       * config/aarch64/aarch64.cc (aarch64_cond_code): Reformat.
>       (aarch64_print_operand): Add new 'j' and 'J' format specifiers.
>       * config/aarch64/aarch64.md: Use new specifiers.


This seems to me to be a sensible approach to this problem.  But really this 
patch is in the wrong position in the series.  It should be much earlier so 
that the supporting code (the ability to emit HS/LO) for the new instructions 
exists before you need to introduce the instructions themselves.  Then you 
wouldn't need to fix the broken code that the earlier patches have introduced 
because they can use the new operand modifier from the start.  The principle is 
that each patch should produce a correct compiler, even if functionality is 
perhaps incomplete.

Not related to the patch itself, but why is there so much context in your diff? 
 It makes spotting the changes themselves much harder when scrolling through 
the message.

R.

> 
> gcc/testsuite/ChangeLog:
> 
>       * gcc.target/aarch64/cmpbr.c: Update tests.
> ---
>  gcc/config/aarch64/aarch64.cc            | 36 ++++++++++++++++++------
>  gcc/config/aarch64/aarch64.md            |  4 +--
>  gcc/testsuite/gcc.target/aarch64/cmpbr.c | 16 +++++------
>  3 files changed, 38 insertions(+), 18 deletions(-)
> 
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 1d4ae73a963..734d0593ad9 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -913,11 +913,18 @@ static const scoped_attribute_specs *const 
> aarch64_attribute_table[] =
>    &aarch64_arm_attribute_table
>  };
>  
> -typedef enum aarch64_cond_code
> -{
> -  AARCH64_EQ = 0, AARCH64_NE, AARCH64_CS, AARCH64_CC, AARCH64_MI, AARCH64_PL,
> -  AARCH64_VS, AARCH64_VC, AARCH64_HI, AARCH64_LS, AARCH64_GE, AARCH64_LT,
> -  AARCH64_GT, AARCH64_LE, AARCH64_AL, AARCH64_NV
> +/* The condition codes come in opposing pairs.  To get the inverse of a given
> +   condition, simply flip the LSB.  */
> +typedef enum aarch64_cond_code {
> +  AARCH64_EQ = 0x00,       AARCH64_NE = 0x01,
> +  AARCH64_CS = 0x02,       AARCH64_CC = 0x03,
> +  AARCH64_HS = AARCH64_CS, AARCH64_LO = AARCH64_CC,
> +  AARCH64_MI = 0x04,       AARCH64_PL = 0x05,
> +  AARCH64_VS = 0x06,       AARCH64_VC = 0x07,
> +  AARCH64_HI = 0x08,       AARCH64_LS = 0x09,
> +  AARCH64_GE = 0x0A,       AARCH64_LT = 0x0B,
> +  AARCH64_GT = 0x0C,       AARCH64_LE = 0x0D,
> +  AARCH64_AL = 0x0E,       AARCH64_NV = 0x0F,
>  }
>  aarch64_cc;
>  
> @@ -12322,64 +12329,67 @@ static char
>  sizetochar (int size)
>  {
>    switch (size)
>      {
>      case 64: return 'd';
>      case 32: return 's';
>      case 16: return 'h';
>      case 8:  return 'b';
>      default: gcc_unreachable ();
>      }
>  }
>  
>  /* Print operand X to file F in a target specific manner according to CODE.
>     The acceptable formatting commands given by CODE are:
>       'c':            An integer or symbol address without a preceding #
>                       sign.
>       'C':            Take the duplicated element in a vector constant
>                       and print it in hex.
>       'D':            Take the duplicated element in a vector constant
>                       and print it as an unsigned integer, in decimal.
>       'e':            Print the sign/zero-extend size as a character 8->b,
>                       16->h, 32->w.  Can also be used for masks:
>                       0xff->b, 0xffff->h, 0xffffffff->w.
>       'I':            If the operand is a duplicated vector constant,
>                       replace it with the duplicated scalar.  If the
>                       operand is then a floating-point constant, replace
>                       it with the integer bit representation.  Print the
>                       transformed constant as a signed decimal number.
>       'p':            Prints N such that 2^N == X (X must be power of 2 and
>                       const int).
>       'P':            Print the number of non-zero bits in X (a const_int).
>       'H':            Print the higher numbered register of a pair (TImode)
>                       of regs.
>       'm':            Print a condition (eq, ne, etc).
>       'M':            Same as 'm', but invert condition.
> +     'j':            Same as 'm', but use use `hs` and `lo`
> +                     instead of `cs` and `cc`.
> +     'J':            Same as 'j', but invert condition.
>       'N':            Take the duplicated element in a vector constant
>                       and print the negative of it in decimal.
>       'b/h/s/d/q':    Print a scalar FP/SIMD register name.
>       'Z':            Same for SVE registers.  ('z' was already taken.)
>                       Note that it is not necessary to use %Z for operands
>                       that have SVE modes.  The convention is to use %Z
>                       only for non-SVE (or potentially non-SVE) modes.
>       'S/T/U/V':              Print a FP/SIMD register name for a register 
> list.
>                       The register printed is the FP/SIMD register name
>                       of X + 0/1/2/3 for S/T/U/V.
>       'R':            Print a scalar Integer/FP/SIMD register name + 1.
>       'X':            Print bottom 16 bits of integer constant in hex.
>       'w/x':          Print a general register name or the zero register
>                       (32-bit or 64-bit).
>       '0':            Print a normal operand, if it's a general register,
>                       then we assume DImode.
>       'k':            Print NZCV for conditional compare instructions.
>       'K':            Print a predicate register as pn<N> rather than p<N>
>       'A':            Output address constant representing the first
>                       argument of X, specifying a relocation offset
>                       if appropriate.
>       'L':            Output constant address specified by X
>                       with a relocation offset if appropriate.
>       'G':            Prints address of X, specifying a PC relative
>                       relocation mode if appropriate.
>       'y':            Output address of LDP or STP - this is used for
>                       some LDP/STPs which don't use a PARALLEL in their
>                       pattern (so the mode needs to be adjusted).
>       'z':            Output address of a typical LDP or STP.  */
> @@ -12388,494 +12398,504 @@ static void
>  aarch64_print_operand (FILE *f, rtx x, int code)
>  {
>    rtx elt;
>    switch (code)
>      {
>      case 'c':
>        if (CONST_INT_P (x))
>       fprintf (f, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
>        else
>       {
>         poly_int64 offset;
>         rtx base = strip_offset_and_salt (x, &offset);
>         if (SYMBOL_REF_P (base))
>           output_addr_const (f, x);
>         else
>           output_operand_lossage ("unsupported operand for code '%c'", code);
>       }
>        break;
>  
>      case 'e':
>        {
>       x = unwrap_const_vec_duplicate (x);
>       if (!CONST_INT_P (x))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>  
>       HOST_WIDE_INT val = INTVAL (x);
>       if ((val & ~7) == 8 || val == 0xff)
>         fputc ('b', f);
>       else if ((val & ~7) == 16 || val == 0xffff)
>         fputc ('h', f);
>       else if ((val & ~7) == 32 || val == 0xffffffff)
>         fputc ('w', f);
>       else
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>        }
>        break;
>  
>      case 'p':
>        {
>       int n;
>  
>       if (!CONST_INT_P (x) || (n = exact_log2 (INTVAL (x))) < 0)
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>  
>       asm_fprintf (f, "%d", n);
>        }
>        break;
>  
>      case 'P':
>        if (!CONST_INT_P (x))
>       {
>         output_operand_lossage ("invalid operand for '%%%c'", code);
>         return;
>       }
>  
>        asm_fprintf (f, "%u", popcount_hwi (INTVAL (x)));
>        break;
>  
>      case 'H':
>        if (x == const0_rtx)
>       {
>         asm_fprintf (f, "xzr");
>         break;
>       }
>  
>        if (!REG_P (x) || !GP_REGNUM_P (REGNO (x) + 1))
>       {
>         output_operand_lossage ("invalid operand for '%%%c'", code);
>         return;
>       }
>  
>        asm_fprintf (f, "%s", reg_names [REGNO (x) + 1]);
>        break;
>  
>      case 'I':
>        {
>       x = aarch64_bit_representation (unwrap_const_vec_duplicate (x));
>       if (CONST_INT_P (x))
>         asm_fprintf (f, "%wd", INTVAL (x));
>       else
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>       break;
>        }
>  
>      case 'M':
>      case 'm':
> +    case 'j':
> +    case 'J':
>        {
>          int cond_code;
>       /* CONST_TRUE_RTX means al/nv (al is the default, don't print it).  */
>       if (x == const_true_rtx)
>         {
> -         if (code == 'M')
> +         if (code == 'M' || code == 'J')
>             fputs ("nv", f);
>           return;
>         }
>  
>          if (!COMPARISON_P (x))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>  
>          cond_code = aarch64_get_condition_code (x);
>          gcc_assert (cond_code >= 0);
> -     if (code == 'M')
> +     if (code == 'M' || code == 'J')
>         cond_code = AARCH64_INVERSE_CONDITION_CODE (cond_code);
>       if (GET_MODE (XEXP (x, 0)) == CC_NZCmode)
>         fputs (aarch64_sve_condition_codes[cond_code], f);
>       else
> -       fputs (aarch64_condition_codes[cond_code], f);
> +       {
> +         auto name = aarch64_condition_codes[cond_code];
> +         if (code == 'j' || code == 'J')
> +           {
> +             if (cond_code == AARCH64_CS) name = "hs";
> +             if (cond_code == AARCH64_CC) name = "lo";
> +           }
> +         fputs (name, f);
> +       }
>        }
>        break;
>  
>      case 'N':
>        if (!const_vec_duplicate_p (x, &elt))
>       {
>         output_operand_lossage ("invalid vector constant");
>         return;
>       }
>  
>        if (GET_MODE_CLASS (GET_MODE (x)) == MODE_VECTOR_INT)
>       asm_fprintf (f, "%wd", (HOST_WIDE_INT) -UINTVAL (elt));
>        else if (GET_MODE_CLASS (GET_MODE (x)) == MODE_VECTOR_FLOAT
>              && aarch64_print_vector_float_operand (f, x, true))
>       ;
>        else
>       {
>         output_operand_lossage ("invalid vector constant");
>         return;
>       }
>        break;
>  
>      case 'b':
>      case 'h':
>      case 's':
>      case 'd':
>      case 'q':
>      case 'Z':
>        code = TOLOWER (code);
>        if (!REG_P (x) || !FP_REGNUM_P (REGNO (x)))
>       {
>         output_operand_lossage ("incompatible floating point / vector 
> register operand for '%%%c'", code);
>         return;
>       }
>        asm_fprintf (f, "%c%d", code, REGNO (x) - V0_REGNUM);
>        break;
>  
>      case 'S':
>      case 'T':
>      case 'U':
>      case 'V':
>        if (!REG_P (x) || (!FP_REGNUM_P (REGNO (x)) && !PR_REGNUM_P (REGNO 
> (x))))
>       {
>         output_operand_lossage ("incompatible operand for '%%%c'", code);
>         return;
>       }
>        if (PR_REGNUM_P (REGNO (x)))
>       asm_fprintf (f, "p%d", REGNO (x) - P0_REGNUM + (code - 'S'));
>        else
>       asm_fprintf (f, "%c%d",
>                    aarch64_sve_data_mode_p (GET_MODE (x)) ? 'z' : 'v',
>                    REGNO (x) - V0_REGNUM + (code - 'S'));
>        break;
>  
>      case 'R':
>        if (REG_P (x) && FP_REGNUM_P (REGNO (x))
>         && (aarch64_advsimd_partial_struct_mode_p (GET_MODE (x))))
>       asm_fprintf (f, "d%d", REGNO (x) - V0_REGNUM + 1);
>        else if (REG_P (x) && FP_REGNUM_P (REGNO (x)))
>       asm_fprintf (f, "q%d", REGNO (x) - V0_REGNUM + 1);
>        else if (REG_P (x) && GP_REGNUM_P (REGNO (x)))
>       asm_fprintf (f, "x%d", REGNO (x) - R0_REGNUM + 1);
>        else
>       output_operand_lossage ("incompatible register operand for '%%%c'",
>                               code);
>        break;
>  
>      case 'X':
>        if (!CONST_INT_P (x))
>       {
>         output_operand_lossage ("invalid operand for '%%%c'", code);
>         return;
>       }
>        asm_fprintf (f, "0x%wx", UINTVAL (x) & 0xffff);
>        break;
>  
>      case 'C':
>        {
>       /* Print a replicated constant in hex.  */
>       if (!const_vec_duplicate_p (x, &elt) || !CONST_INT_P (elt))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>       scalar_mode inner_mode = GET_MODE_INNER (GET_MODE (x));
>       asm_fprintf (f, "0x%wx", UINTVAL (elt) & GET_MODE_MASK (inner_mode));
>        }
>        break;
>  
>      case 'D':
>        {
>       /* Print a replicated constant in decimal, treating it as
>          unsigned.  */
>       if (!const_vec_duplicate_p (x, &elt) || !CONST_INT_P (elt))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>       scalar_mode inner_mode = GET_MODE_INNER (GET_MODE (x));
>       asm_fprintf (f, "%wd", UINTVAL (elt) & GET_MODE_MASK (inner_mode));
>        }
>        break;
>  
>      case 'w':
>      case 'x':
>        if (aarch64_const_zero_rtx_p (x))
>       {
>         asm_fprintf (f, "%czr", code);
>         break;
>       }
>  
>        if (REG_P (x) && GP_REGNUM_P (REGNO (x)))
>       {
>         asm_fprintf (f, "%c%d", code, REGNO (x) - R0_REGNUM);
>         break;
>       }
>  
>        if (REG_P (x) && REGNO (x) == SP_REGNUM)
>       {
>         asm_fprintf (f, "%ssp", code == 'w' ? "w" : "");
>         break;
>       }
>  
>        /* Fall through */
>  
>      case 0:
>        if (x == NULL)
>       {
>         output_operand_lossage ("missing operand");
>         return;
>       }
>  
>        switch (GET_CODE (x))
>       {
>       case CONST_STRING:
>         {
>           asm_fprintf (f, "%s", XSTR (x, 0));
>           break;
>         }
>       case REG:
>         if (aarch64_sve_data_mode_p (GET_MODE (x)))
>           {
>             if (REG_NREGS (x) == 1)
>               asm_fprintf (f, "z%d", REGNO (x) - V0_REGNUM);
>             else
>               {
>                 char suffix
>                   = sizetochar (GET_MODE_UNIT_BITSIZE (GET_MODE (x)));
>                 asm_fprintf (f, "{z%d.%c - z%d.%c}",
>                              REGNO (x) - V0_REGNUM, suffix,
>                              END_REGNO (x) - V0_REGNUM - 1, suffix);
>               }
>           }
>         else
>           asm_fprintf (f, "%s", reg_names [REGNO (x)]);
>         break;
>  
>       case MEM:
>         output_address (GET_MODE (x), XEXP (x, 0));
>         break;
>  
>       case LABEL_REF:
>       case SYMBOL_REF:
>         output_addr_const (asm_out_file, x);
>         break;
>  
>       case CONST_INT:
>         asm_fprintf (f, "%wd", INTVAL (x));
>         break;
>  
>       case CONST:
>         if (!VECTOR_MODE_P (GET_MODE (x)))
>           {
>             output_addr_const (asm_out_file, x);
>             break;
>           }
>         /* fall through */
>  
>       case CONST_VECTOR:
>         if (!const_vec_duplicate_p (x, &elt))
>           {
>             output_operand_lossage ("invalid vector constant");
>             return;
>           }
>  
>         if (GET_MODE_CLASS (GET_MODE (x)) == MODE_VECTOR_INT)
>           asm_fprintf (f, "%wd", INTVAL (elt));
>         else if (GET_MODE_CLASS (GET_MODE (x)) == MODE_VECTOR_FLOAT
>                  && aarch64_print_vector_float_operand (f, x, false))
>           ;
>         else
>           {
>             output_operand_lossage ("invalid vector constant");
>             return;
>           }
>         break;
>  
>       case CONST_DOUBLE:
>         /* Since we define TARGET_SUPPORTS_WIDE_INT we shouldn't ever
>            be getting CONST_DOUBLEs holding integers.  */
>         gcc_assert (GET_MODE (x) != VOIDmode);
>         if (aarch64_float_const_zero_rtx_p (x))
>           {
>             fputc ('0', f);
>             break;
>           }
>         else if (aarch64_float_const_representable_p (x))
>           {
>  #define buf_size 20
>             char float_buf[buf_size] = {'\0'};
>             real_to_decimal_for_mode (float_buf,
>                                       CONST_DOUBLE_REAL_VALUE (x),
>                                       buf_size, buf_size,
>                                       1, GET_MODE (x));
>             asm_fprintf (asm_out_file, "%s", float_buf);
>             break;
>  #undef buf_size
>           }
>         output_operand_lossage ("invalid constant");
>         return;
>       default:
>         output_operand_lossage ("invalid operand");
>         return;
>       }
>        break;
>  
>      case 'A':
>        if (GET_CODE (x) == HIGH)
>       x = XEXP (x, 0);
>  
>        switch (aarch64_classify_symbolic_expression (x))
>       {
>       case SYMBOL_SMALL_GOT_4G:
>         asm_fprintf (asm_out_file, ":got:");
>         break;
>  
>       case SYMBOL_SMALL_TLSGD:
>         asm_fprintf (asm_out_file, ":tlsgd:");
>         break;
>  
>       case SYMBOL_SMALL_TLSDESC:
>         asm_fprintf (asm_out_file, ":tlsdesc:");
>         break;
>  
>       case SYMBOL_SMALL_TLSIE:
>         asm_fprintf (asm_out_file, ":gottprel:");
>         break;
>  
>       case SYMBOL_TLSLE24:
>         asm_fprintf (asm_out_file, ":tprel:");
>         break;
>  
>       case SYMBOL_TINY_GOT:
>         gcc_unreachable ();
>         break;
>  
>       default:
>         break;
>       }
>        output_addr_const (asm_out_file, x);
>        break;
>  
>      case 'L':
>        switch (aarch64_classify_symbolic_expression (x))
>       {
>       case SYMBOL_SMALL_GOT_4G:
>         asm_fprintf (asm_out_file, ":got_lo12:");
>         break;
>  
>       case SYMBOL_SMALL_TLSGD:
>         asm_fprintf (asm_out_file, ":tlsgd_lo12:");
>         break;
>  
>       case SYMBOL_SMALL_TLSDESC:
>         asm_fprintf (asm_out_file, ":tlsdesc_lo12:");
>         break;
>  
>       case SYMBOL_SMALL_TLSIE:
>         asm_fprintf (asm_out_file, ":gottprel_lo12:");
>         break;
>  
>       case SYMBOL_TLSLE12:
>         asm_fprintf (asm_out_file, ":tprel_lo12:");
>         break;
>  
>       case SYMBOL_TLSLE24:
>         asm_fprintf (asm_out_file, ":tprel_lo12_nc:");
>         break;
>  
>       case SYMBOL_TINY_GOT:
>         asm_fprintf (asm_out_file, ":got:");
>         break;
>  
>       case SYMBOL_TINY_TLSIE:
>         asm_fprintf (asm_out_file, ":gottprel:");
>         break;
>  
>       default:
>         break;
>       }
>        output_addr_const (asm_out_file, x);
>        break;
>  
>      case 'G':
>        switch (aarch64_classify_symbolic_expression (x))
>       {
>       case SYMBOL_TLSLE24:
>         asm_fprintf (asm_out_file, ":tprel_hi12:");
>         break;
>       default:
>         break;
>       }
>        output_addr_const (asm_out_file, x);
>        break;
>  
>      case 'k':
>        {
>       HOST_WIDE_INT cond_code;
>  
>       if (!CONST_INT_P (x))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>  
>       cond_code = INTVAL (x);
>       gcc_assert (cond_code >= 0 && cond_code <= AARCH64_NV);
>       asm_fprintf (f, "%d", aarch64_nzcv_codes[cond_code]);
>        }
>        break;
>  
>      case 'K':
>        if (!REG_P (x) || !PR_REGNUM_P (REGNO (x)))
>       {
>         output_operand_lossage ("invalid operand for '%%%c'", code);
>         return;
>       }
>        asm_fprintf (f, "pn%d", REGNO (x) - P0_REGNUM);
>        break;
>  
>      case 'y':
>      case 'z':
>        {
>       machine_mode mode = GET_MODE (x);
>  
>       if (!MEM_P (x)
>           || (code == 'y'
>               && maybe_ne (GET_MODE_SIZE (mode), 8)
>               && maybe_ne (GET_MODE_SIZE (mode), 16)
>               && maybe_ne (GET_MODE_SIZE (mode), 32)))
>         {
>           output_operand_lossage ("invalid operand for '%%%c'", code);
>           return;
>         }
>  
>       if (!aarch64_print_address_internal (f, mode, XEXP (x, 0),
>                                           code == 'y'
>                                           ? ADDR_QUERY_LDP_STP_N
>                                           : ADDR_QUERY_LDP_STP))
>         output_operand_lossage ("invalid operand prefix '%%%c'", code);
>        }
>        break;
>  
>      default:
>        output_operand_lossage ("invalid operand prefix '%%%c'", code);
>        return;
>      }
>  }
>  
>  /* Print address 'x' of a memory access with mode 'mode'.
>     'op' is the context required by aarch64_classify_address.  It can either 
> be
>     MEM for a normal memory access or PARALLEL for LDP/STP.  */
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 2963e9c2317..9ac7383c020 100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -865,56 +865,56 @@ (define_insn "*aarch64_tbz<optab><mode>1"
>  ;; 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")
>                            (match_operand:GPI 2 "aarch64_cb_operand" "ri")])
>                          (label_ref (match_operand 3))
>                          (pc)))]
>    "TARGET_CMPBR"
> -  "cb%m0\\t%<w>1, %<w>2, %l3";
> +  "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>%m0\\t%<w>1, %<w>2, %l3"
> +  "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.
> diff --git a/gcc/testsuite/gcc.target/aarch64/cmpbr.c 
> b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
> index 0c25ec980c1..2878c406125 100644
> --- a/gcc/testsuite/gcc.target/aarch64/cmpbr.c
> +++ b/gcc/testsuite/gcc.target/aarch64/cmpbr.c
> @@ -85,1401 +85,1401 @@ 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
> +**   cbblo   w1, w0, .L10
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u8_x0_ugt_x1:
> -**   cbbcs   w1, w0, .L12
> +**   cbbhs   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
> +**   cbhlo   w1, w0, .L31
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u16_x0_ugt_x1:
> -**   cbhcs   w1, w0, .L33
> +**   cbhhs   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
> +**   cbhs    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
> +**   cblo    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
> +**   cbhs    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
> +**   cblo    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:
>  **   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:
>  **   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:
>  **   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:
>  **   tbnz    w0, #15, .L167
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_eq_0:
>  **   cbnz    w0, .L169
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_ne_0:
>  **   cbz     w0, .L171
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_ult_0:
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_ule_0:
>  **   cbnz    w0, .L174
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_ugt_0:
>  **   cbz     w0, .L176
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u32_x0_uge_0:
>  **   b       taken
>  */
>  
>  /*
>  ** i32_x0_slt_0:
>  **   tbnz    w0, #31, .L180
>  **   b       not_taken
>  **   b       taken
>  */
>  
>  /*
>  ** i32_x0_sle_0:
>  **   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:
>  **   tbnz    w0, #31, .L187
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_eq_0:
>  **   cbnz    x0, .L189
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_ne_0:
>  **   cbz     x0, .L191
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_ult_0:
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_ule_0:
>  **   cbnz    x0, .L194
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_ugt_0:
>  **   cbz     x0, .L196
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_uge_0:
>  **   b       taken
>  */
>  
>  /*
>  ** i64_x0_slt_0:
>  **   tbnz    x0, #63, .L200
>  **   b       not_taken
>  **   b       taken
>  */
>  
>  /*
>  ** i64_x0_sle_0:
>  **   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:
>  **   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:
>  **   cmp     w0, 63
>  **   bls     .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:
>  **   cmp     w0, 63
>  **   ble     .L312
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_eq_64:
>  **   cmp     x0, 64
>  **   beq     .L315
>  **   b       not_taken
>  **   b       taken
>  */
>  
>  /*
>  ** u64_x0_ne_64:
>  **   cmp     x0, 64
>  **   beq     .L317
>  **   b       taken
>  **   b       not_taken
>  */
>  
>  /*
>  ** u64_x0_ult_64:
>  **   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
>  **   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:
>  **   cmp     x0, 63
>  **   ble     .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
>  */


Reply via email to