CMP (extended register)

Compare (extended register)

This instruction subtracts a sign or zero-extended register value, followed by an optional left shift amount, from a register value. The argument that is extended from the <Rm> register can be a byte, halfword, word, or doubleword. It updates the condition flags based on the result, and discards the result.

Encoding: Setting the condition flags

313029282726252423222120191817161514131211109876543210
110101100111111
sfopSoptRmoptionimm3RnRd

32-bit (sf == 0)

CMP <Wn|WSP>, <Wm>{, <extend> {#<amount>}}

Equivalent to: SUBS WZR, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}

64-bit (sf == 1)

CMP <Xn|SP>, <R><m>{, <extend> {#<amount>}}

Equivalent to: SUBS XZR, <Xn|SP>, <R><m>{, <extend> {#<amount>}}

Explanations

<Wn|WSP>: Is the 32-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field.
<Wm>: Is the 32-bit name of the second general-purpose source register, encoded in the "Rm" field.
<extend>: <extend>: <amount>: Is the left shift amount to be applied after extension in the range 0 to 4, defaulting to 0, encoded in the "imm3" field. It must be absent when <extend> is absent, is required when <extend> is LSL, and is optional when <extend> is present but not LSL.
<Xn|SP>: Is the 64-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field.
<R>: <m>: Is the number [0-30] of the second general-purpose source register or the name ZR (31), encoded in the "Rm" field.

Operational Notes

If PSTATE.DIT is 1: