mod ;x0=dividend, x1=divisor udiv x2,x0,x1 msub x3,x2,x1,x0 ;x2=quotient, x3=remainder abs - absolute value - computes the absolute value of the signed integer value in the source register, and writes the result to the destination register. .101101011000000001000.......... f S code2opcodeRn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the general-purpose source register, encoded in the "Rn" field. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the general-purpose source register, encoded in the "Rn" field. adc - add with carry - adds two register values and the Carry flag value, and writes the result to the destination register. .0011010000.....000000.......... fpS Rm Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the first general-purpose source register, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the first general-purpose source register, encoded in the "Rn" field. :64-bit name of the second general-purpose source register, encoded in the "Rm" field. adcs - add with carry, setting flags - adds two register values and the Carry flag value, and writes the result to the destination register. It updates the condition flags based on the result. .0111010000.....000000.......... fpS Rm Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the first general-purpose source register, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the first general-purpose source register, encoded in the "Rn" field. :64-bit name of the second general-purpose source register, encoded in the "Rm" field. add (extended register) - add extended and scaled register - adds a register value and a sign or zero-extended register value, followed by an optional left shift amount, and writes the result to the destination register. The argument that is extended from the register can be a byte, halfword, word, or doubleword. .0001011001..................... fpS pt Rm ionmm3Rn Rd :32-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field. :32-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. option | 000 | UXTB 001 | UXTH 010 | LSL|UXTW 011 | UXTX 100 | SXTB 101 | SXTH 110 | SXTW 111 | SXTX If "Rd" or "Rn" is '11111' (WSP) and "option" is '010' then LSL is preferred, but may be omitted when "imm3" is '000'. In all other cases is required and must be UXTW when "option" is '010'. option | 000 | UXTB 001 | UXTH 010 | UXTW 011 | LSL|UXTX 100 | SXTB 101 | SXTH 110 | SXTW 111 | SXTX If "Rd" or "Rn" is '11111' (SP) and "option" is '011' then LSL is preferred, but may be omitted when "imm3" is '000'. In all other cases is required and must be UXTX when "option" is '011'. :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 is absent, is required when is LSL, and is optional when is present but not LSL. :64-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field. :64-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field. option | 00x | W 010 | W x11 | X 10x | W 110 | W :number [0-30] of the second general-purpose source register or the name ZR (31), encoded in the "Rm" field. add (immediate) - add immediate value - adds a register value and an optionally-shifted immediate value, and writes the result to the destination register. .00100010....................... fpS himm12 Rn Rd :32-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field. :32-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field. :Is an unsigned immediate, in the range 0 to 4095, encoded in the "imm12" field. sh | 0 | LSL #0 1 | LSL #12 :64-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field. :64-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field. add (shifted register) - add optionally-shifted register - adds a register value and an optionally-shifted register value, and writes the result to the destination register. .0001011..0..................... fpS ft Rm imm6 Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the first general-purpose source register, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. shift | 00 | LSL 01 | LSR 10 | ASR 11 | RESERVED :For the "32-bit" variant: is the shift amount, in the range 0 to 31, defaulting to 0 and encoded in the "imm6" field. :For the "64-bit" variant: is the shift amount, in the range 0 to 63, defaulting to 0 and encoded in the "imm6" field. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the first general-purpose source register, encoded in the "Rn" field. :64-bit name of the second general-purpose source register, encoded in the "Rm" field. addg - add with tag - adds an immediate value scaled by the Tag Granule to the address in the source register, modifies the Logical Address Tag of the address using an immediate value, and writes the result to the destination register. Tags specified in GCR_EL1.Exclude are excluded from the possible outputs when modifying the Logical Address Tag. 1001000110......00.............. fpS imm6 p3imm4Rn Rd :64-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field. :64-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field. :Is an unsigned immediate, a multiple of 16 in the range 0 to 1008, encoded in the "imm6" field. :Is an unsigned immediate, in the range 0 to 15, encoded in the "imm4" field. addpt - add checked pointer - adds a base address register value and an optionally-shifted register value, and writes the result to the destination register. The optionally-shifted register value is treated as the offset. If the operation would have generated a result where the most significant 8 bits of the result register differ from the most significant 8 bits of the base register, then the result is modified such that it is likely to be non-canonical when used as an address. 10011010000.....001............. fpS Rm mm3Rn Rd :64-bit name of the general-purpose destination register or stack pointer, encoded in the "Rd" field. :64-bit name of the first general-purpose source register or stack pointer, encoded in the "Rn" field. :64-bit name of the second general-purpose source register, encoded in the "Rm" field. :left shift amount, in the range 0 to 7, defaulting to 0, encoded in the "imm3" field. adds (extended register) - add extended and scaled register, setting flags - adds a register value and a sign or zero-extended register value, followed by an optional left shift amount, and writes the result to the destination register. The argument that is extended from the register can be a byte, halfword, word, or doubleword. It updates the condition flags based on the result. .0101011001..................... fpS pt Rm ionmm3Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. option | 000 | UXTB 001 | UXTH 010 | LSL|UXTW 011 | UXTX 100 | SXTB 101 | SXTH 110 | SXTW 111 | SXTX If "Rn" is '11111' (WSP) and "option" is '010' then LSL is preferred, but may be omitted when "imm3" is '000'. In all other cases is required and must be UXTW when "option" is '010'. option | 000 | UXTB 001 | UXTH 010 | UXTW 011 | LSL|UXTX 100 | SXTB 101 | SXTH 110 | SXTW 111 | SXTX If "Rn" is '11111' (SP) and "option" is '011' then LSL is preferred, but may be omitted when "imm3" is '000'. In all other cases is required and must be UXTX when "option" is '011'. :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 is absent, is required when is LSL, and is optional when is present but not LSL. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the first source general-purpose register or stack pointer, encoded in the "Rn" field. option | 00x | W 010 | W x11 | X 10x | W 110 | W :number [0-30] of the second general-purpose source register or the name ZR (31), encoded in the "Rm" field. adds (immediate) - add immediate value, setting flags - adds a register value and an optionally-shifted immediate value, and writes the result to the destination register. It updates the condition flags based on the result. .01100010....................... fpS himm12 Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field. :Is an unsigned immediate, in the range 0 to 4095, encoded in the "imm12" field. sh | 0 | LSL #0 1 | LSL #12 :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field. adds (shifted register) - add optionally-shifted register, setting flags - adds a register value and an optionally-shifted register value, and writes the result to the destination register. It updates the condition flags based on the result. .0101011..0..................... fpS ft Rm imm6 Rn Rd :32-bit name of the general-purpose destination register, encoded in the "Rd" field. :32-bit name of the first general-purpose source register, encoded in the "Rn" field. :32-bit name of the second general-purpose source register, encoded in the "Rm" field. shift | 00 | LSL 01 | LSR 10 | ASR 11 | RESERVED :For the "32-bit" variant: is the shift amount, in the range 0 to 31, defaulting to 0 and encoded in the "imm6" field. :For the "64-bit" variant: is the shift amount, in the range 0 to 63, defaulting to 0 and encoded in the "imm6" field. :64-bit name of the general-purpose destination register, encoded in the "Rd" field. :64-bit name of the first general-purpose source register, encoded in the "Rn" field. :64-bit name of the second general-purpose source register, encoded in the "Rm" field. adr - form pc-relative address - adds an immediate value to the PC value to form a PC-relative address, and writes the result to the destination register. 0..10000........................ plo immhi Rd :64-bit name of the general-purpose destination register, encoded in the "Rd" field.