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 |