Why isn't the BXEQ instruction in the ARM documentation?

I am currently trying to learn assembly, so apologies if this is really rudimentary.

I have cross-compiled a C program using arm-linux-gnueabi-gcc -march=armv8-a, and then disassembled it with arm-none-eabi-objdump -d. In the disassembled instructions, I see a number of references to the BXEQ instruction, e.g.:

   1032c:   e08f3003    add r3, pc, r3
   10330:   e7932002    ldr r2, [r3, r2]
   10334:   e3520000    cmp r2, #0
   10338:   012fff1e    bxeq    lr

However, I don't see BXEQ in any of the ARM documentation. All I can find is its use in some code examples, but without any explanation or even mention of it: https://developer.arm.com/documentation/100748/0607/hpz1474359444075

Please note that I am not asking what BXEQ does - I am asking why it is not in the documentation like other ARM instructions.


Well, for a start, the document you link to is the compiler guide, not really anything to do with the underlying assembler instructions.

What you're looking for is the instruction set documentation for the BX instruction, which can use a condition flag to decide whether to do its work.

Perhaps a better (though not necessarily official) document can be found in this PDF link under section 4.3:

BX - branch and exchange.

  BX{cond} Rn
    {cond} Two character condition mnemonic.
           See Table 4-2: Condition code summary on page 4-5.
    Rn is an expression evaluating to a valid register number.

This is actually fairly fundamental to the ARM way of doing things, as indicated here:

Most A32 instructions only execute when previous instructions have set a particular condition code. This means that instructions only have their normal effect on the programmers’ model operation, memory and coprocessors if the N, Z, C and V flags satisfy a condition specified in the instruction.

If the flags do not satisfy this condition, the instruction acts as a NOP. This means that execution advances to the next instruction as normal, including any relevant checks for exceptions being taken, but has no other effect.

This conditional execution of instructions allows small sections of if- and while-statements to be encoded without the use of branch instructions.