SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
Table 8-348 lists the instructions for the ARP32 CPU.
Instruction | Description | Size |
---|---|---|
ABS src2, dst | Absolute value of a register | 16-bit |
ADD ucst16, src2, dst | Add 16-bit unsigned constant to a register | 32-bit |
ADD ucst16, SP | Add 16-bit unsigned constant to stack pointer, result to stack pointer | 32-bit |
ADD ucst16, SP, dst | Add 16-bit unsigned constant to stack pointer, result to register | 32-bit |
ADD ucst3, src2, dst | Add 3-bit unsigned constant to a register | 16-bit |
ADD src1, src2, dst | Signed addition of two register values | 16-bit |
AND ucst16, src2, dst | Bitwise AND 16-bit unsigned constant with a register | 32-bit |
AND src1, src2, dst | Bitwise AND two registers | 16-bit |
B dst | Indirect unconditional branch using a register | 16-bit |
BEQ dst | Indirect conditional branch using a register | 16-bit |
BGE dst | Indirect conditional branch using a register | 16-bit |
BGT dst | Indirect conditional branch using a register | 16-bit |
BLE dst | Indirect conditional branch using a register | 16-bit |
BLT dst | Indirect conditional branch using a register | 16-bit |
BNE dst | Indirect conditional branch using a register | 16-bit |
B scst9 | Direct unconditional branch using a 9-bit signed constant offset | 16-bit |
BEQ scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
BGE scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
BGT scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
BLE scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
BLT scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
BNE scst9 | Direct conditional branch using a 9-bit signed constant offset | 16-bit |
B scst16 | Direct unconditional branch using a 16-bit signed constant offset | 32-bit |
BEQ scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BGE scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BGT scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BLE scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BLT scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BNE scst16 | Direct conditional branch using a 16-bit signed constant offset | 32-bit |
BIRP | Unconditional branch to interrupt return pointer | 16-bit |
BKPT | Software breakpoint | 16-bit |
BNRP | Unconditional branch to NMI return pointer | 16-bit |
CALL src1 | Unconditional call using a register | 16-bit |
CALL scst22 | Unconditional call using a 22-bit signed constant offset | 32-bit |
CLR ucst5_1, ucst5_2, src2, dst | Clear bit field bounded by two immediate values | 32-bit |
CLR src1, src2, dst | Clear bit field bounded by two register values | 32-bit |
CMP scst16, src2 | Compare for equality, less than, greater than, 16-bit signed constant to a register | 32-bit |
CMP scst3, src2 | Compare for equality, less than, greater than, 3-bit signed constant to a register | 16-bit |
CMP src1, src2 | Signed compare for equality, less than, greater than, two register values | 16-bit |
CMPU ucst16, src2 | Compare for equality, less than, greater than, 16-bit unsigned constant to a register | 32-bit |
CMPU ucst3, src2 | Compare for equality, less than, greater than, 3-bit unsigned constant to a register | 16-bit |
CMPU src1, src2 | Unsigned compare for equality, less than, greater than, two register values | 16-bit |
DIV src1, src2, dst | Signed division of two register values | 32-bit |
DIVU src1, src2, dst | Unsigned division of two register values | 32-bit |
EXT ucst5_1, ucst5_2, src2, dst | Extract and sign-extend a bit field bounded by two immediate values | 32-bit |
EXT src1, src2, dst | Extract and sign-extend a bit field bounded by two register values | 32-bit |
EXTU ucst5_1, ucst5_2, src2, dst | Extract and zero-extend a bit field bounded by two immediate values | 32-bit |
EXTU src1, src2, dst | Extract and zero-extend a bit field bounded by two register values | 32-bit |
IDLE | Idle until interrupt or reset | 16-bit |
LDB *+baseR[ucst3], dst | Load signed byte from memory with a 3-bit unsigned constant offset | 16-bit |
LDB *+baseR[ucst16], dst | Load signed byte from memory with a 16-bit unsigned constant offset | 32-bit |
LDB *+baseR[src1], dst | Load signed byte from memory with a register offset | 16-bit |
LDB *baseR++[ucst3], dst | Load signed byte from memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
LDB *baseR++[src1], dst | Load signed byte from memory, postincrement memory with a register offset | 16-bit |
LDB *+SP[ucst6], dst | Load signed byte from memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
LDB *+SP[ucst19], dst | Load signed byte from memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
LDB *+GDP[ucst19], dst | Load signed byte from memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
LDBU *+baseR[ucst3], dst | Load unsigned byte from memory with a 3-bit unsigned constant offset | 16-bit |
LDBU *+baseR[ucst16], dst | Load unsigned byte from memory with a 16-bit unsigned constant offset | 32-bit |
LDBU *+baseR[src1], dst | Load unsigned byte from memory with a register offset | 16-bit |
LDBU *baseR++[ucst3], dst | Load unsigned byte from memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
LDBU *baseR++[src1], dst | Load unsigned byte from memory, postincrement memory with a register offset | 16-bit |
LDBU *+SP[ucst6], dst | Load unsigned byte from memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
LDBU *+SP[ucst19], dst | Load unsigned byte from memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
LDBU *+GDP[ucst19], dst | Load unsigned byte from memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
LDH *+baseR[ucst3], dst | Load signed halfword from memory with a 3-bit unsigned constant offset | 16-bit |
LDH *+baseR[ucst16], dst | Load signed halfword from memory with a 16-bit unsigned constant offset | 32-bit |
LDH *+baseR[src1], dst | Load signed halfword from memory with a register offset | 16-bit |
LDH *baseR++[ucst3], dst | Load signed halfword from memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
LDH *baseR++[src1], dst | Load signed halfword from memory, postincrement memory with a register offset | 16-bit |
LDH *+SP[ucst6], dst | Load signed halfword from memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
LDH *+SP[ucst19], dst | Load signed halfword from memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
LDH *+GDP[ucst19], dst | Load signed halfword from memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
LDHU *+baseR[ucst3], dst | Load unsigned halfword from memory with a 3-bit unsigned constant offset | 16-bit |
LDHU *+baseR[ucst16], dst | Load unsigned halfword from memory with a 16-bit unsigned constant offset | 32-bit |
LDHU *+baseR[src1], dst | Load unsigned halfword from memory with a register offset | 16-bit |
LDHU *baseR++[ucst3], dst | Load unsigned halfword from memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
LDHU *baseR++[src1], dst | Load unsigned halfword from memory, postincrement memory with a register offset | 16-bit |
LDHU *+SP[ucst6], dst | Load unsigned halfword from memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
LDHU *+SP[ucst19], dst | Load unsigned halfword from memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
LDHU *+GDP[ucst19], dst | Load unsigned halfword from memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
LDW *+baseR[ucst3], dst | Load word from memory with a 3-bit unsigned constant offset | 16-bit |
LDW *+baseR[ucst16], dst | Load word from memory with a 16-bit unsigned constant offset | 32-bit |
LDW *+baseR[src1], dst | Load word from memory with a register offset | 16-bit |
LDW *baseR++[ucst3], dst | Load word from memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
LDW *baseR++[src1], dst | Load word from memory, postincrement memory with a register offset | 16-bit |
LDW *+SP[ucst6], dst | Load word from memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
LDW *+SP[ucst19], dst | Load word from memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
LDW *+GDP[ucst19], dst | Load word from memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
LDRF op1, op2 | Load register file from stack pointer | 16-bit |
LMBD ucst3, src2, dst | Left most bit detection | 32-bit |
MAX src1, src2, dst | Maximum of two signed register values | 32-bit |
MAXU src1, src2, dst | Maximum of two unsigned register values | 32-bit |
MIN src1, src2, dst | Minimum of two signed register values | 32-bit |
MINU src1, src2, dst | Minimum of two unsigned register values | 32-bit |
MOD src1, src2, dst | Signed modulo (32 % 32 = 32) | 32-bit |
MODU src1, src2, dst | Unsigned modulo (32 % 32 = 32) | 32-bit |
MPY src1, src2, dst | Signed multiplication of two register values (32-bit × 32-bit = 32-bit) | 32-bit |
MPYU src1, src2, dst | Unsigned multiplication of two register values (32-bit × 32-bit = 32-bit) | 32-bit |
MV src1, dst | Move register to register | 16-bit |
MVC areg, creg | Move architectural register to control register | 16-bit |
MVC creg, areg | Move control register to architectural register | 16-bit |
MVC ucst16, creg | Move 16-bit unsigned constant to control register | 32-bit |
MVCH ucst16, creg | Move 16-bit unsigned constant to upper bits of control register | 32-bit |
MVK ucst16, dst | Move 16-bit unsigned constant to register | 32-bit |
MVKH ucst16, dst | Move 16-bit unsigned constant to upper bits of register | 32-bit |
MVKLS scst16, dst | Move 16-bit signed constant to register | 32-bit |
MVKS scst6, dst | Move 6-bit signed constant to register | 16-bit |
MVS areg, sreg | Move architectural register to shadow register | 16-bit |
MVS sreg, areg | Move shadow register to architectural register | 16-bit |
NEG src2, dst | Negation | 16-bit |
NOP | No operation | 16-bit |
NOT src2, dst | Bitwise NOT | 16-bit |
OR ucst16, src2, dst | Bitwise OR 16-bit unsigned constant with a register | 32-bit |
OR src1, src2, dst | Bitwise OR two registers | 16-bit |
RET | Return from subroutine | 16-bit |
REV src1, src2, dst | Reverse a bit field bounded by two register values | 32-bit |
ROT src1, src2, dst | Rotate right | 32-bit |
ROTC src1, src2, dst | Rotate right through carry bit | 32-bit |
SADD src1, src2, dst | Signed addition of two register values with saturation | 16-bit |
SATN ucst3, src2, dst | Saturation to signed/unsigned n-bit value with sign/zero extend | 32-bit |
SET ucst5_1, ucst5_2, src2, dst | Set bit field bounded by two immediate values | 32-bit |
SET src1, src2, dst | Set bit field bounded by two register values | 32-bit |
SHL ucst5, src2, dst | Logical shift left by 5-bit unsigned constant | 32-bit |
SHL src1, src2, dst | Logical shift left by register value | 16-bit |
SHRA ucst5, src2, dst | Arithmetic shift right by 5-bit unsigned constant | 32-bit |
SHRA src1, src2, dst | Arithmetic shift right by register value | 16-bit |
SHRU ucst5, src2, dst | Logical shift right by 5-bit unsigned constant | 32-bit |
SHRU src1, src2, dst | Logical shift right by register value | 16-bit |
SLA ucst16, creg | Set loop address | 32-bit |
SSUB src1, src2, dst | Subtraction of two register values with saturation | 16-bit |
STB dst, *+baseR[ucst3] | Store byte to memory with a 3-bit unsigned constant offset | 16-bit |
STB dst, *+baseR[ucst16] | Store byte to memory with a 16-bit unsigned constant offset | 32-bit |
STB dst, *+baseR[src1] | Store byte to memory with a register offset | 16-bit |
STB dst, *baseR++[ucst3] | Store byte to memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
STB dst, *baseR++[src1] | Store byte to memory, postincrement memory with a register offset | 16-bit |
STB dst, *+SP[ucst6] | Store byte to memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
STB dst, *+SP[ucst19] | Store byte to memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
STB dst, *+GDP[ucst19] | Store byte to memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
STH dst, *+baseR[ucst3] | Store halfword to memory with a 3-bit unsigned constant offset | 16-bit |
STH dst, *+baseR[ucst16] | Store halfword to memory with a 16-bit unsigned constant offset | 32-bit |
STH dst, *+baseR[src1] | Store halfword to memory with a register offset | 16-bit |
STH dst, *baseR++[ucst3] | Store halfword to memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
STH dst, *baseR++[src1] | Store halfword to memory, postincrement memory with a register offset | 16-bit |
STH dst, *+SP[ucst6] | Store halfword to memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
STH dst, *+SP[ucst19] | Store halfword to memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
STH dst, *+GDP[ucst19] | Store halfword to memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
STW dst, *+baseR[ucst3] | Store word to memory with a 3-bit unsigned constant offset | 16-bit |
STW dst, *+baseR[ucst16] | Store word to memory with a 16-bit unsigned constant offset | 32-bit |
STW dst, *+baseR[src1] | Store word to memory with a register offset | 16-bit |
STW dst, *baseR++[ucst3] | Store word to memory, postincrement memory with a 3-bit unsigned constant offset | 16-bit |
STW dst, *baseR++[src1] | Store word to memory, postincrement memory with a register offset | 16-bit |
STW dst, *+SP[ucst6] | Store word to memory with a SP-relative 6-bit unsigned constant offset | 16-bit |
STW dst, *+SP[ucst19] | Store word to memory with a SP-relative 19-bit unsigned constant offset | 32-bit |
STW dst, *+GDP[ucst19] | Store word to memory with a GDP-relative 19-bit unsigned constant offset | 32-bit |
STHI ucst16, *+baseR[ucst6] | Store 16-bit halfword to memory with a 6-bit unsigned constant offset | 32-bit |
STRF op1, op2 | Store register file to stack pointer | 16-bit |
SUB ucst16, src2, dst | Subtract 16-bit unsigned constant from a register | 32-bit |
SUB ucst16, SP | Subtract 16-bit unsigned constant from stack pointer, result to stack pointer | 32-bit |
SUB ucst16, SP, dst | Subtract 16-bit unsigned constant from stack pointer, result to register | 32-bit |
SUB ucst3, src2, dst | Subtract 3-bit unsigned constant from a register | 16-bit |
SUB src1, src2, dst | Signed subtraction of two register values | 16-bit |
SWI | Software interrupt | 16-bit |
XOR ucst16, src2, dst | Bitwise XOR 16-bit unsigned constant with a register | 32-bit |
XOR src1, src2, dst | Bitwise XOR two registers | 16-bit |