2.3 Instruction Set Summary Tables
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
EXCH Wns,Wnd | Swap Wns with Wnd | 1 | 2 |
MOV Ws, Wd | Move Ws to Wd | 0.5/1 | 1 |
MOV.l lit32,Wnd | Move 32-bit unsigned literal to Wnd | 2 | 2 |
MOV.sl lit24,Wnd | Move 24-bit unsigned literal to Wnd; 0 extend to 32-bits | 1 | 1 |
MOV.w lit16,Wnd | Move 16-bit unsigned literal to Wnd; 0 extend to 32-bits | 1 | 1 |
MOV.bz lit8,Wnd | Move 8-bit unsigned literal to Wnd; 0 extend to 32-bits | 1 | 1 |
MOV.l [W15-lit7], Wnd
| Move from system stack with literal offset to Wnd using SP or FP | 0.5 | 1 |
MOV.l Wns, [W15-lit7] Wns, [W14+slit7] | Move from Wns to system stack with literal off-set using SP or FP | 0.5 | 1 |
MOV.l f,Wnd | Move f to Wnd (Word or Long Word)(f < ~1MB) | 1 | 1 |
MOV.b f,Wnd | Move f to Wnd (Byte) | 1 | 1 |
MOV.l Wns,f | Move Wns to f (Word or Long Word)(f < ~1MB) | 1 | 1 |
MOV.w Wns,f | Move Wns to f (Word or Long Word)(f > ~ 1MB) | 2 | 2 |
MOV.b Wns,f | Move Wns to f (Byte) | 1 | 1 |
MOV [Wns+Slit12],Wnd | Move [Wns+Slit12] to Wnd | 1 | 1 |
MOV Wns,[Wnd+Slit12] | Move Wns to [Wnd+Slit12] | 1 | 1 |
MOVIF.l CC, Wb, Wns, Wd | If CC == True Move W1 to [W15++] Else Move W2 to [W15++] where, CC -> Z, N, C, OV, GT, LT, GTU | 1 | 1 |
MOVR.l | Move Ws to Wd with destination Bit Reversed addressing | ||
MOVS.l slit16, Wd | Move signed extended 16-bit literal to Wd | 1 | 1 |
MOVS.b slit8, Wnd | Move 8-bit literal to Wd; no extension. | 1 | 1 |
SWAP Wn | Wn = Word or byte swap Wn | 1 | 1 |
TST f | Test f | 1 | 1 |
TST f,Wnd | Test f and move f to Wnd | 1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
ADD f,Wn | f = f + Wn | 1 | 1 |
ADD f,Wn,Wn | Wn = f + Wn | 1 | 1 |
ADD.l lit5,Wn | Wn = Wn + lit5 | 0.5 | 1 |
ADD lit16,Wn | Wn = Wn + lit16 | 1 | 1 |
ADD Wb,Ws,Wd | Wd = Wb + Ws | 0.5/1 | 1 |
ADD Wb,lit7,Wd | Wd = Wb + lit7(literal zero-extended) | 1 | 1 |
ADDC f,Wn | f = f + Wn + (C) | 1 | 1 |
ADDC f,Wn,Wn | Wn = f + Wn + (C) | 1 | 1 |
ADDC lit16,Wn | Wn = Wn + lit16 + (C) | 1 | 1 |
ADDC Wb,Ws,Wd | Wd = Wb + Ws + (C) | 0.5/1 | 1 |
ADDC Wb,lit7,Wd | Wd = Wb + lit7 + (C)(literal zero-extended) | 1 | 1 |
DEC f | f = f -1 | 1 | 1 |
DEC f,Wd | W5 = f -1 | 1 | 1 |
DEC Ws,Wd | Wd = Ws - 1 | 1 | 1 |
DEC2 f | f = f -2 | 1 | 1 |
DEC2 f,Wd | W5 = f -2 | 1 | 1 |
DEC2 Ws,Wd | Wd = Ws - 2 | 1 | 1 |
DIVF Wm/Wn | Interruptible Signed 16/16 or 32/16 Fractional Divide | 1 | 1 |
DIVFL Wm/Wn | Interruptible Signed 32/32 Fractional Divide | 1 | 1 |
DIVS.w Wm/Wn | Interruptible Signed 16/16-bit Integer Divide | 1 | 1 |
DIVS.l Wm/Wn | Interruptible Signed 32/16-bit Integer Divide | 1 | 1 |
DIVSL Wm/Wn | Interruptible Signed 32/32 Integer Divide | 1 | 1 |
DIVU.w Wm/Wn | Interruptible Unsigned 16/16-bit Integer Divide | 1 | 1 |
DIVU.l Wm/Wn | Interruptible Unsigned 32/16-bit Integer Divide | 1 | 1 |
DIVUL Wm/Wn | Interruptible Unsigned 32/32 Integer Divide | 1 | 1 |
FLIM Wb, Ws | Force Data (Upper and Lower) Range Limit without Limit Excess Result | 1 | 1 |
FLIM Wb, Ws, Wd | Force Data (Upper and Lower) Range Limit with Limit Excess Flag (Wd=-1) | 1 | 2 |
FLIM.V Wb, Ws, Wd | Force Data (Upper and Lower) Range Limit with Limit Excess Result | 1 | 2 |
INC f | f = f + 1 | 1 | 1 |
INC f,Wd | W5 = f + 1 | 1 | 1 |
INC Ws,Wd | Wd = Ws + 1 | 1 | 1 |
INC2 f | f = f + 2 | 1 | 1 |
INC2 f,Wd | W5 = f + 2 | 1 | 1 |
INC2 Ws,Wd | Wd = Ws +2 | 1 | 1 |
MULSS Wb,Ws,Wnd | {Wd}=signed(Wb) * signed(Ws) | 0.5/1 | 1 |
MULSU Wb,Ws,Wnd | {Wd}=signed(Wb) * unsigned(Ws) | 0.5/1 | 1 |
MULUS Wb,Ws,Wnd | {Wd}=unsigned(Wb) * signed(Ws) | 0.5/1 | 1 |
MULUU Wb,Ws,Wnd | {Wd}=unsigned(Wb) * unsigned(Ws) | 0.5/1 | 1 |
MULSU Wb,lit8,Wnd | {Wd}=signed(Wb) * unsigned(lit8) | 1 | 1 |
MULUU Wb,lit8,Wnd | {Wd}=unsigned(Wb) * unsigned(lit8) | 1 | 1 |
MULSS Wb,slit8,Wnd | {Wd}=signed(Wb) * signed(slit8) | 1 | 1 |
MULUS Wb,slit8,Wnd | {Wd}=unsigned(Wb) * signed(slit8) | 1 | 1 |
MUL f, Wn | W2 = f * Wn | 1 | 1 |
SE Ws,Wnd | Wd = sign-extended Ws | 0.5/1 | 1 |
SUB f,Wn | f = f - Wn | 1 | 1 |
SUB f,Wn,Wn | Wn = f - Wn | 1 | 1 |
SUB.l lit5,Wn | Wn = Wn - lit5 | 0.5 | 1 |
SUB lit16,Wn | Wn = Wn - lit16 | 1 | 1 |
SUB Wb,Ws,Wd | Wd = Wb - Ws | 0.5/1 | 1 |
SUB Ws,lit7,Wd | Wd = Ws - lit7 (literal zero-extended) | 1 | 1 |
SUBB f,Wn | f = f - Wn - (C) | 1 | 1 |
SUBB f,Wn,Wn | Wn = f - Wn - (C) | 1 | 1 |
SUBB lit16,Wn | Wn = Wn - lit16 - (C) | 1 | 1 |
SUBB Wb,Ws,Wd | Wd = Wb - Ws - (C) | 0.5/1 | 1 |
SUBB Ws,lit7,Wd | Wd = Ws - lit7 - (literal zero-extended) | 1 | 1 |
SUBR f,Wn | f = Wn - f | 1 | 1 |
SUBR f,Wn,Wn | Wn = Wn - f | 1 | 1 |
SUBR Wb,Ws,Wd | Wd = Ws - Wb | 0.5/1 | 1 |
SUBR Ws,lit7,Wd | Wd = lit7 - Ws (literal zero-extended) | 0.5/1 | 1 |
SUBBR f,Wn | f = Wn - f - (C) | 1 | 1 |
SUBBR f,Wn,Wn | Wn = Wn -f - (C) | 1 | 1 |
SUBBR Wb,Ws,Wd | Wd = Ws - Wb - (C) | 0.5/1 | 1 |
SUBBR Ws,lit7,Wd | Wd = lit7 - Ws - (C) (literal zero-extended) | 1 | 1 |
ZE Ws,Wnd | Wd = Zero-extend Ws | 0.5/1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
AND f,Wn | f = f .AND. Wn | 1 | 1 |
AND f,Wn,Wn | W0 = f .AND. Wn | 1 | 1 |
AND lit16,Wn | Wn = Wn .AND. lit16 | 1 | 1 |
AND Wb,Ws,Wd | Wd = Wb .AND. Ws | 0.5/1 | 1 |
AND Wb,lit7,Wd | Wd = Wb .AND. Lit7 (literal zero-extended) | 1 | 1 |
AND1 Wb,lit7,Wd | Wd = Wb .AND. Lit7 (literal zero-extended) | 1 | 1 |
CLR f | f = 0x0000 | 1 | 1 |
CLR Wd | Wd = 0x0000 | 1 | 1 |
COM f | f = f | 1 | 1 |
COM f,Wd | Wd = f | 1 | 1 |
COM Ws,Wd | Wd = Ws | 0.5/1 | 1 |
IOR f,Wn | f = f .IOR. Wn | 1 | 1 |
IOR f,Wn,Wn | Wn = f .IOR. Wn | 1 | 1 |
IOR lit16,Wn | Wn = Wn .IOR. lit16 | 1 | 1 |
IOR Wb,Ws,Wd | Wd = Wb .IOR. Ws | 0.5/1 | 1 |
IOR Wb,lit7,Wd | Wd = Wb .IOR. lit7 | 1 | 1 |
NEG f | f = f + 1 | 1 | 1 |
NEG f,Wd | Wd = f + 1 | 1 | 1 |
NEG Ws,Wd | Wd = Ws + 1 | 0.5/1 | 1 |
SETM f | f = 0xFFFF | 1 | 1 |
SETM Wd | Wd = 0xFFFF | 1 | 1 |
XOR f,Wn | f = f .XOR. Wn | 1 | 1 |
XOR f,Wn,Wn | Wn = f .XOR. Wn | 1 | 1 |
XOR lit16,Wn | Wn = Wn .XOR. lit16 | 1 | 1 |
XOR Wb,Ws,Wd | Wd = Wb .XOR. Ws | 0.5/1 | 1 |
XOR Wb,lit7,Wd | Wd = Wb .XOR. Lit7 (literal zero-extended) | 1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
ASR f | f = Arithmetic Right Shift f by 1 | 1 | 1 |
ASR f,Wn | Wn = Arithmetic Right Shift f by 1 | 1 | 1 |
ASR Ws,Wd | Wd = Arithmetic Right Shift Ws by 1 | 0.5/1 | 1 |
ASR Ws,Wb,Wd | Wnd = Arithmetic Right Shift Ws by Wb | 0.5/1 | 1 |
ASR Ws,lit5,Wd | Wnd = Arithmetic Right Shift Ws by lit5 | 0.5/1 | 1 |
ASRM Ws, lit5, Wnd | Wnd = Arithmetic Right Shift Ws by lit5, then logically OR with next lsw | 1 | 2 |
ASRM Ws, Wb, Wnd | Wnd = Arithmetic Right Shift Ws by Wb, then logically OR with next lsw | 1 | 2 |
LSR f | f = Logical Right Shift f by 1 | 1 | 1 |
LSR f,Wd | Wd = Logical Right Shift f by 1 | 1 | 1 |
LSR Ws,Wd | Wd = Logical Right Shift Ws by 1 | 0.5/1 | 1 |
LSR Ws,Wb,Wd | Wnd = Logical Right Shift Ws by Wns | 0.5/1 | 1 |
LSR Ws,lit5,Wd | Wnd = Logical Right Shift Ws by lit5 | 0.5/1 | 1 |
LSRM Ws, lit5, Wnd | Wnd = Logical Right Shift Ws by lit5, then logically OR with next lsw | 1 | 2 |
LSRM Ws, Wb, Wnd | Wnd = Logical Right Shift Ws by Wb, then logically OR with next lsw | 1 | 2 |
RLC f | f = Rotate Left through Carry f | 1 | 1 |
RLC f,Wd | Wd = Rotate Left through Carry f | 1 | 1 |
RLC Ws,Wd | Wd = Rotate Left through Carry Ws | 0.5/1 | 1 |
RLNC f | f = Rotate Left (No Carry) f | 1 | 1 |
RLNC f,Wd | Wd = Rotate Left (No Carry) f | 1 | 1 |
RLNC Ws,Wd | Wd = Rotate Left (No Carry) Ws | 0.5/1 | 1 |
RRC f | f = Rotate Right through Carry f | 1 | 1 |
RRC f,Wd | Wd = Rotate Right through Carry f | 1 | 1 |
RRC Ws,Wd | Wd = Rotate Right through Carry Ws | 0.5/1 | 1 |
RRNC f | f = Rotate Right (No Carry) f | 1 | 1 |
RRNC f,Wd | Wd = Rotate Right (No Carry) f | 1 | 1 |
RRNC Ws,Wd | Wd = Rotate Right (No Carry) Ws | 0.5/1 | 1 |
SL f | f = Left Shift f by 1 | 1 | 1 |
SL f,Wd | Wd = Left Shift f by 1 | 1 | 1 |
SL Ws,Wd | Wd = Left Shift Ws by 1 | 0.5/1 | 1 |
SL Ws,Wb,Wnd | Wnd = Left Shift Wb by Wns | 0.5/1 | 1 |
SL Ws,lit5,Wnd | Wnd = Left Shift Ws by lit5 | 0.5/1 | 1 |
SLM Ws, lit5, Wnd | Wnd = Left Shift Wb by lit5, then logically OR with next msw | 1 | 2 |
SLM Ws, Wb, Wnd | Wnd = Left Shift Wb by Wb, then logically OR with next msw | 1 | 2 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
BCLR.b f,bit3 | Bit Clear f | 1 | 1 |
BCLR Ws,bit5 | Bit Clear Ws | 0.5/1 | 1 |
BFEXT bit5,wid6,Ws,Wb | Bit Field Extract from Ws to Wb | 1 | 1 |
BFEXT bit5,wid6,f,Wb | Bit Field Extract from f to Wb | 2 | 2 |
BFINS bit5,wid6,Wb,Ws | Bit Field Insert from Wb into Ws | 1 | 1 |
BFINS bit5,wid6,Wb,f | Bit Field Insert from Wb into f | 2 | 2 |
BFINS bit5, wid6, lit16, Ws | Bit Field Insert lit8 into Ws | 2 | 2 |
BSET.b f,bit3 | Bit Set f | 1 | 1 |
BSET Ws,bit5 | Bit Set Ws | 0.5/1 | 1 |
BSW.C Ws,Wb | Write C or Z bit to Ws<Wb> | 1 | 1 |
BSW.Z Ws,Wb | Write C or Z bit to Ws<Wb> | 0.5/1 | 1 |
BTG.b f,bit3 | Bit Toggle f | 1 | 1 |
BTG Ws,bit5 | Bit Toggle Ws | 0.5/1 | 1 |
BTST.b f,bit3 | Bit Test f | 1 | 1 |
BTST.C Ws,bit5 | Bit Test Ws to C | 0.5/1 | 1 |
BTST.Z Ws,bit5 | Bit Test Ws to Z | 1 | 1 |
BTST.C Ws,Wb | Bit Test Ws<Wb> to C | 0.5/1 | 1 |
BTST.Z Ws,Wb | Bit Test Ws<Wb> to Z | 1 | 1 |
BTSTS.b f,bit3 | Bit Test then Set f | 1 | 1 |
BTSTS.C Ws,bit5 | Bit Test Ws to C then Set | 0.5/1 | 1 |
BTSTS.Z Ws,bit5 | Bit Test Ws to Z then Set | 1 | 1 |
FBCL Ws,Wnd | Find Bit Change from Left (MSb) Side | 1 | 1 |
FF1L Ws,Wnd | Find First One from Left (MSb) Side | 1 | 1 |
FF1R Ws,Wnd | Find First One from Right (LSb) Side | 1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
CP f,Ws | Compare f with Ws | 1 | 1 |
CP Ws,lit13 | Compare Ws with lit13 (literal zero-extended) | 1 | 1 |
CP Wb,lit16 | Compare Wb with lit16 (literal zero-extended) | 1 | 1 |
CP Wb, Ws | Compare Wb with Ws | 0.5/1 | 1 |
CP0 f | Compare f with 0x0000 | 1 | 1 |
CP0 Ws | Compare Ws with 0x0000 (substitute CPLS Ws ,#0) | 1 | 1 |
CPB f,Ws | Compare f with Ws, with borrow | 1 | 1 |
CP Wb,lit13 | Compare Wb with lit13, with borrow (literal zero-extended) | 1 | 1 |
CP Wb,lit16 | Compare Wb with lit16, with borrow (literal zero-extended) | 1 | 1 |
CPB Wb,Ws | Compare Borrow Wb with Ws | 0.5/1 | 1 |
DTB Wn,Label | Decrement Wn, then branch if not zero | 1 | 1(2/3) |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
BRA Label | Branch Unconditionally | 1 | 1 |
BRA Wn | Computed Branch | 1 | 2 |
BRA C,Label | Branch if Carry | 1 | 1(2/3) |
BRA GE,Label | Branch if greater than or equal | 1 | 1(2/3) |
BRA GEU,Label | Branch if unsigned greater than or equal | 1 | 1(2/3) |
BRA GT,Label | Branch if greater than | 1 | 1(2/3) |
BRA GTU,Label | Branch if unsigned greater than | 1 | 1(2/3) |
BRA LE,Label | Branch if less than or equal | 1 | 1(2/3) |
BRA LEU,Label | Branch if unsigned less than or equal | 1 | 1(2/3) |
BRA LT,Label | Branch if less than | 1 | 1(2/3) |
BRA LTU,Label | Branch if unsigned less than | 1 | 1(2/3) |
BRA N,Label | Branch if Negative | 1 | 1(2/3) |
BRA NC,Label | Branch if Not Carry | 1 | 1(2/3) |
BRA NN,Label | Branch if Not Negative | 1 | 1(2/3) |
BRA NOV,Label | Branch if Not Overflow | 1 | 1(2/3) |
BRA NZ,Label | Branch if Not Zero | 1 | 1(2/3) |
BRA Z,Label | Branch if Zero | 1 | 1(2/3) |
BREAK | Stop user code execution | 0.5/1 | 1 |
CALL Label | Call subroutine (label < ~ 16MB) | 1 | 1 |
CALL Wns | Call indirect subroutine at address [W11] | 1 | 2 |
GOTO Label | Goto address (address < ~ 16MB) | 1 | 1 |
GOTO Wn | Go to indirect address at [W11] | 1 | 2 |
RCALL Label | Relative Call | 1 | 1 |
RCALL Wns | Computed Call | 1 | 2 |
REPEAT lit15 | Repeat Next Instruction lit15+1 times | 1 | 1 |
REPEAT lit5 | Repeat Next Instruction lit5+1 times | 0.5 | 1 |
REPEAT Wn | Repeat Next Instruction (Wn)+1 times | 1 | 1 |
RETFIE | Return from interrupt enable | 0.5 | 4 |
RETLW lit16,Wn | Return from Subroutine with literal in Wn | 1 | 3 |
RETURN | Return from Subroutine | 0.5 | 3 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
BOOTSWP | Swap Active and Inactive address space | 0.5 | 2 |
CTXTSWP lit3 | Swap to CPU register context #2 | 0.5 | 2 |
CTXTSWP Wn | Swap to CPU register context defined in Wn[2:0] | 1 | 2 |
LNK lit16 | Link frame pointer | 1 | 1 |
LNK lit7 | Link frame pointer (literal < 128) | 0.5 | 1 |
POP f | Pop f from top of stack (TOS) | 1 | 1 |
POP {[--Ws],} Wnd | Pop Wnd Register from system stack. | 0.5 | 1 |
POP Fd | Pop Fd Register from system stack. | 0.5 | 1 |
PUSH f | Push f to top of stack (TOS) | 1 | 1 |
PUSH Wns, {[Wd++]} | Push Wns Register to system stack | 0.5 | 1 |
PUSH Fs | Push Fs Register to system stack | 0.5 | 1 |
ULNK | Unlink frame pointer | 0.5 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
CLRWDT | Clear Watchdog Timer | 0.5 | 1 |
DISICTL lit3 {,Wd} | Disable interrupts at IPL <= lit3 Optionally save prior IPL threshold to Wd | 1 | 1 |
DISICTL Wns {,Wd} | Disable interrupts at IPL <= Wns[2:0] Optionally save prior IPL threshold to Wd | 1 | 1 |
NEOP | None executable NOP (16-bit instruction pad) | 0.5 | 0 |
NOP | No Operation | 1 | 1 |
NOPR | No Operation | 1 | 1 |
PWRSAV mode | Go into standby mode | 0.5 | 2 |
RESET | Software device RESET | 1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
ADD A | Add Accumulators | 0.5 | 1 |
ADD Ws,Slit6, A | Signed Add to Accumulator | 1 | 1 |
BRA OA,Label | Branch if accumulator A overflow | 1 | 1(2/3) |
BRA OB,Label | Branch if accumulator B overflow | 1 | 1(2/3) |
BRA OV,Label | Branch if Overflow | 1 | 1(2/3) |
BRA SA,Label | Branch if accumulator A saturated | 1 | 1(2/3) |
BRA SB,Label | Branch if accumulator B saturated | 1 | 1(2/3) |
CLR A | Clear Accumulator | 0.5 | 1 |
ED Wx, Wy, A, AWB | Euclidean Distance | 1 | 2 |
EDAC Wx, Wy, A, AWB | Euclidean Distance Accumulate | 1 | 2 |
LAC Ws,Slit6, A | Load Accumulator (16/32-bit), literal shift | 1 | 1 |
LLAC.l Ws Slit6, A | Load Lower (LS-word of) Accumulator (32-bit), literal shift | 1 | 1 |
LUAC.l Ws, Slit6, A | Load Upper (LS-byte) of Accumulator (32-bit), literal shift | 1 | 1 |
MAC Wx, Wy, A, AWB | Multiply and Accumulate | 1 | 1 |
MAX Wb, Ws | Force Data Maximum Range Limit | 1 | 1 |
MAX A | Force Data Maximum Range Limit | 0.5 | 1 |
MAX.V A, Wd | Force Data Maximum Range Limit with Result | 1 | 2 |
MIN Wb, Ws | Force Data Minimum Range Limit | 1 | 1 |
MIN A | Force Data Minimum Range Limit | 0.5 | 1 |
MIN.V A, Wd | Force Data Minimum Range Limit with Result | 1 | 2 |
MULISS Wb,Ws,A | Integer: Acc(A or B) = signed(Wb) * signed(Ws) | 1 | 1 |
MULFSS Wb,Ws,A | Fractional: Acc(A or B) = signed(Wb) * signed(Ws) | 1 | 1 |
MULISU Wb,Ws,A | Integer: Acc(A or B) = signed(Wb) * unsigned(Ws) | 1 | 1 |
MULFSU Wb,Ws,A | Fractional: Acc(A or B) = signed(Wb) * unsigned(Ws) | 1 | 1 |
MULIUS Wb,Ws,A | Integer: Acc(A or B) = unsigned(Wb) * signed(Ws) | 1 | 1 |
MULFUS Wb,Ws,A | Fractional: Acc(A or B) = unsigned(Wb) * signed(Ws) | 1 | 1 |
MULIUU Wb,Ws,A | Integer: Acc(A or B) = unsigned(Wb) * unsigned(Ws) | 1 | 1 |
MULFUU Wb,Ws,A | Fractional: Acc(A or B) = unsigned(Wb) * unsigned(Ws) | 1 | 1 |
MULISS Wb,slit8,A | Integer: Acc(A or B) = signed(Wb) * signed(slit8) | 1 | 1 |
MULFSS Wb,slit8,A | Integer: Acc(A or B) = signed(Wb) * signed(slit8) | 1 | 1 |
MULISU Wb,lit8,A | Integer: Acc(A or B) = signed(Wb) * unsigned(lit8) | 1 | 1 |
MULFSU Wb,lit8,A | Integer: Acc(A or B) = signed(Wb) * unsigned(lit8) | 1 | 1 |
MULIUS Wb,slit8,A | Integer: Acc(A or B) = signed(Wb) * signed(slit8) | 1 | 1 |
MULFUS Wb,slit8,A | Integer: Acc(A or B) = signed(Wb) * signed(slit8) | 1 | 1 |
MULIUU Wb,lit8,A | Integer: Acc(A or B) = signed(Wb) * unsigned(lit8) | 1 | 1 |
MULFUU Wb,lit8,A | Integer: Acc(A or B) = signed(Wb) * unsigned(lit8) | 1 | 1 |
MPY Wx, Wy, A, AWB | Multiply Wm by Wn to Accumulator | 1 | 1 |
MPYN Wx, Wy, A, AWB | -(Multiply Wm by Wn) to Accumulator | 1 | 1 |
MSC Wx, Wy, A, AWB | Multiply and Subtract from Accumulator | 1 | 1 |
NEG A | Negate Accumulator | 0.5 | 1 |
NORM A, Wd | Normalize Accumulator | 1 | 1 |
SAC A,Slit6, Wd | Store Accumulator (16/32-bit) | 1 | 1 |
SACR A,Slit6,Wd | Store Rounded Accumulator (16/32-bit), literal shift | 1 | 1 |
SACR A,Ws,Wd | Store Rounded Accumulator (16/32-bit), Wb shift | 1 | 1 |
SLAC.l A,Slit6,Wd | Store Lower (LS-Word of) Accumulator (32-bit), literal shift | 1 | 1 |
SUAC.l A,Slit6,Wd | Store sign extended Upper (MS-Byte of) Accumulator (32-bit), literal shift | 1 | 1 |
SFTAC A,Wn | Arithmetic Shift by (Wn) Accumulator | 1 | 1 |
SFTAC A,Slit7 | Arithmetic Shift by Slit7 Accumulator | 1 | 1 |
SQR Wx, A, AWB | Square to Accumulator | 1 | 1 |
SQRAC Wx, A, AWB | Square and Accumulate | 1 | 1 |
SQRN Wx, A, AWB | Negated Square to Accumulator | 1 | 1 |
SQRSC Wx, A, AWB | Square and Subtract from Accumulator | 1 | 1 |
SUB A | Subtract Accumulators | 0.5 | 1 |
SUB Ws,Slit6, A | Signed Subtract from Accumulator | 1 | 1 |
Assembled Syntax | Description | Words | Cycles |
---|---|---|---|
ABS Fs, Fd | Absolute value of Fs | 1 | 1 |
ADD Fb, Fs, Fd | Fd = Fb + Fs | 1 | 2 |
AND lit16, FSR | FSR = FSR AND lit16 | 1 | 1 |
AND lit16, FCR | FCR = FCR AND lit16 | 1 | 1 |
AND lit16, FEAR | FEAR = FEAR AND lit16 | 1 | 1 |
COS Fs , Fd | Fd = COS(Fs) | 1 | 4 |
CPQ Fb, Fs | Compare Fb with Fs, Quiet Signaling | 1 | 1 |
CPS Fb, Fs | Compare Fb with Fs, Signaling | 1 | 1 |
DI2F Fs, Fd | Convert Double Word (64-bit) Integer to Floating-Point, Fs (integer) -->Fd (float) | 1 | 2 |
DIV Fb, Fs, Fd | Signed Floating-Point Divide, Fd = Fb/Fs | 1 | 11/32 |
FBRA EQ,Label | Floating Point Branch if Equal | 1 | 1(2/3) |
FBRA NE,Label | Floating Point Branch if Not Equal | 1 | 1(2/3) |
FBRA GT,Label | Floating Point Branch if Greater Than | 1 | 1(2/3) |
FBRA GE,Label | Floating Point Branch if Greater Than or Equal | 1 | 1(2/3) |
FBRA LT,Label | Floating Point Branch if Less Than | 1 | 1(2/3) |
FBRA LE,Label | Floating Point Branch if Less Than or Equal | 1 | 1(2/3) |
FBRA OR,Label | Floating Point Branch if Ordered | 1 | 1(2/3) |
FBRA UNE,Label | Floating Point Branch if Unordered or Not Equal | 1 | 1(2/3) |
FBRA UEQ,Label | Floating Point Branch if Unordered or Equal | 1 | 1(2/3) |
FBRA ULE,Label | Floating Point Branch if Unordered or Less Than or Equal | 1 | 1(2/3) |
FBRA ULT,Label | Floating Point Branch if Unordered or Less Than | 1 | 1(2/3) |
FBRA UGE,Label | Floating Point Branch if Unordered or Greater Than or Equal | 1 | 1(2/3) |
FBRA UGT,Label | Floating Point Branch if Unordered or Greater Than | 1 | 1(2/3) |
FBRA UN,Label | Floating Point Branch if Unordered | 1 | 1(2/3) |
FLIM Fb, Fs, Fd | Force Signed Data Limit, If Fd > Fs Then Fd = Fs If Fd < Fb then Fd = Fb | 1 | 1 |
F2DI Fs, Fd | Convert Floating-Point Fs to Double Word (64-bit) Integer,Fs (float)--> Fd (integer) | 1 | 1/2 |
F2LI Fs, Fd | Convert Floating-Point Fs to Long Word (32-bit) Integer,Fs (float)-->Fd (integer) | 1 | 1/2 |
IOR lit16, FSR | Inclusive OR FSR, FSR = FSR .IOR. lit16 | 1 | 1 |
IOR lit16, FCR | Inclusive OR FCR, FCR = FCR .IOR. Lit16 | 1 | 1 |
IOR lit16, FEAR | Inclusive OR FEAR, FEAR = FEAR .IOR. Lit16 | 1 | 1 |
LI2F Fs, Fd | Convert Long Word (32-bit) Integer to Floating-Point,Fs (integer)-->Fd (float) | 1 | 1 |
MAC Fb, Fs, Fd | Floating-Point Signed Multiply and Accumulate,Fd = Fd +(Fb * Fs) | 1 | 3/4 |
MAX Fb, Fs, Fd | Select the Signed Maximum of Fb and Fs {IEEE 754-2019 maximum(x,y)}, if Fs >= Fb then Fd = Fs Else Fd= Fb | 1 | 1 |
MAXNM Fb, Fs, Fd | Select the Signed Maximum of Fb and Fs {IEEE 754-2019 maxmumNumber(x,y)},, if Fs >= Fb then Fd = Fs Else Fd= Fb | 1 | 1 |
MIN Fb, Fs, Fd | Select the Signed Minimum of Fb and Fs {IEEE 754-2019 minimum(x,y)}, if Fs =< Fb then Fd = Fs Else Fd= Fb | 1 | 1 |
MINNM Fb, Fs, Fd | Select the Signed Minimum of Fb and Fs [minmumNumber()], if Fs =< Fb then Fd = Fs Else Fd= Fb | 1 | 1 |
MOV.l Fs, Wd | Move coprocessor register to Wd | 0.5/1 | 1 |
MOV.l Ws, Fd | Move Ws to coprocessor register | 0.5/1 | 1 |
MOV.l lit32,Fd | Move 32-bit unsigned literal to coprocessor register | 2 | 2 |
MOV Fs,[Wnd+Slit12] | Move Fs to [Wnd+Slit12] | 1 | 1 |
MOV [Wns+Slit12],Fd | Move [Wns+Slit12] to Fd | 1 | 1 |
MOV Fs, Fd | Move Fs to Fd | 1 | 1 |
MOV index, Fd | Fd = Constant table (index) Fd | 1 | 1 |
MUL Fb, Fs, Fd | Fd = Fb * Fs | 1 | 3 |
NEG Fs, Fd | Fd = -Fs | 1 | 1 |
SIN Fs, Fd | Fd = SIN(Fs) | 1 | 4 |
SQRT Fs, Fd | Fd = √Fs | 1 | 10/13 |
SUB Fb, Fs, Fd | Fd= Fb- Fs | 1 | 2 |
TST Fs | Test Fs | 1 | 1 |