Repository URL to install this package:
|
Version:
9.0~240925-3.fc42 ▾
|
idapro-debugsource
/
usr
/
src
/
debug
/
idapro-9.0~240925-3.fc42.x86_64
/
module
/
tms320c54
/
ins.cpp
|
|---|
/*
* Interactive disassembler (IDA).
* Copyright (c) 1990-99 by Ilfak Guilfanov.
* ALL RIGHTS RESERVED.
* E-mail: ig@datarescue.com
*
*
*/
#include "tms320c54.hpp"
const instruc_t Instructions[] =
{
{ "", 0 }, // Unknown Operation
// ARITHMETIC OPERATIONS
// ADD INSTRUCTIONS
{ "add", CF_CHG1 }, // Add to Accumulator
{ "add", CF_USE1|CF_CHG2 }, // Add to Accumulator
{ "add", CF_USE1|CF_USE2|CF_CHG3 }, // Add to Accumulator
{ "addc", CF_USE1|CF_CHG2 }, // Add to Accumulator With Carry
{ "addm", CF_USE1|CF_CHG2 }, // Add Long-Immediate Value to Memory
{ "adds", CF_USE1|CF_CHG2 }, // Add to Accumulator With Sign-Extension Suppressed
// SUBTRACT INSTRUCTIONS
{ "sub", CF_CHG1 }, // Sub From Accumulator
{ "sub", CF_USE1|CF_CHG2 }, // Sub From Accumulator
{ "sub", CF_USE1|CF_USE2|CF_CHG3 }, // Sub From Accumulator
{ "subb", CF_USE1|CF_CHG2 }, // Sub From Accumulator With Borrow
{ "subc", CF_USE1|CF_CHG2 }, // Subtract Conditionally
{ "subs", CF_USE1|CF_CHG2 }, // Subtract From Accumulator With Sign Extension Suppressed
// MULTIPLY INSTRUCTIONS
{ "mpy", CF_USE1|CF_CHG2 }, // Multiply Without Rounding
{ "mpy", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply Without Rounding
{ "mpyr", CF_USE1|CF_CHG2 }, // Multiply With Rounding
{ "mpya", CF_CHG1 }, // Multiply by Accumulator A
{ "mpyu", CF_USE1|CF_CHG2 }, // Multiply Unsigned
{ "squr", CF_USE1|CF_CHG2 }, // Square
// MULTIPLY-ACCUMULATE AND MULTIPLY-SUBTRACT INSTRUCTIONS
{ "mac", CF_USE1|CF_CHG2 }, // Multiply Accumulate Without Rounding
{ "mac", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply Accumulate Without Rounding
{ "macr", CF_USE1|CF_CHG2 }, // Multiply Accumulate With Rounding
{ "macr", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply Accumulate With Rounding
{ "maca", CF_CHG1 }, // Multiply by Accumulator A and Accumulate Without Rounding
{ "maca", CF_USE1|CF_CHG2 }, // Multiply by Accumulator A and Accumulate Without Rounding
{ "maca", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Accumulator A and Accumulate Without Rounding
{ "macar", CF_CHG1 }, // Multiply by Accumulator A and Accumulate With Rounding
{ "macar", CF_USE1|CF_CHG2 }, // Multiply by Accumulator A and Accumulate With Rounding
{ "macar", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Accumulator A and Accumulate With Rounding
{ "macd", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Program Memory and Accumulate With Delay
{ "macp", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Program Memory and Accumulate
{ "macsu", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply Signed by Unsigned and Accumulate
{ "mas", CF_USE1|CF_CHG2 }, // Multiply and Subtract Without Rounding
{ "mas", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply and Subtract Without Rounding
{ "masr", CF_USE1|CF_CHG2 }, // Multiply and Subtract With Rounding
{ "masr", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply and Subtract With Rounding
// TMS320C54_mas,
{ "masa", CF_CHG1 }, // Multiply by Accumulator A and Subtract Without Rounding
{ "masa", CF_USE1|CF_CHG2 }, // Multiply by Accumulator A and Subtract Without Rounding
{ "masa", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Accumulator A and Subtract Without Rounding
{ "masar", CF_CHG1 }, // Multiply by Accumulator A and Subtract With Rounding
{ "masar", CF_USE1|CF_CHG2 }, // Multiply by Accumulator A and Subtract With Rounding
{ "masar", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply by Accumulator A and Subtract With Rounding
{ "squra", CF_USE1|CF_CHG2 }, // Square and Accumulate
{ "squrs", CF_USE1|CF_CHG2 }, // Square and Subtract
// DOUBLE INSTRUCTIONS
{ "dadd", CF_USE1|CF_CHG2 }, // Double-Precision/Dual 16-Bit Add to Accumulator
{ "dadd", CF_USE1|CF_USE2|CF_CHG3 }, // Double-Precision/Dual 16-Bit Add to Accumulator
{ "dadst", CF_USE1|CF_CHG2 }, // Double-Precision Load With T Add/Dual 16-Bit Load With T Add/Subtract
{ "drsub", CF_USE1|CF_CHG2 }, // Double-Precision/Dual 16-Bit Subtract From Long Word
{ "dsadt", CF_USE1|CF_CHG2 }, // Long-Word Load With T Add/Dual 16-Bit Load With T Subtract/Add
{ "dsub", CF_USE1|CF_CHG2 }, // Double-Precision/Dual 16-Bit Subtract From Accumulator
{ "dsubt", CF_USE1|CF_CHG2 }, // Long-Word Load With T Subtract/Dual 16-Bit Load With T Subtract
// APPLICATION-SPECIFIC INSTRUCTIONS
{ "abdst", CF_USE1|CF_USE2 }, // Absolute distance
{ "abs", CF_CHG1 }, // Absolute Value of Accumulator
{ "abs", CF_USE1|CF_CHG2 }, // Absolute Value of Accumulator
{ "cmpl", CF_CHG1 }, // Complement Accumulator
{ "cmpl", CF_USE1|CF_CHG2 }, // Complement Accumulator
{ "delay", CF_USE1 }, // Memory Delay
{ "exp", CF_USE1 }, // Accumulator Exponent
{ "firs", CF_USE1|CF_USE2 }, // Symmetrical Finite Impulse Response Filter
{ "lms", CF_USE1|CF_USE2 }, // Least Mean Square
{ "max", CF_CHG1 }, // Accumulator Maximum
{ "min", CF_CHG1 }, // Accumulator Minimum
{ "neg", CF_CHG1 }, // Negate Accumulator
{ "neg", CF_USE1|CF_CHG2 }, // Negate Accumulator
{ "norm", CF_CHG1 }, // Normalization
{ "norm", CF_USE1|CF_CHG2 }, // Normalization
{ "poly", CF_USE1 }, // Polynominal Evaluation
{ "rnd", CF_CHG1 }, // Round Accumulator
{ "rnd", CF_USE1|CF_CHG2 }, // Round Accumulator
{ "sat", CF_CHG1 }, // Saturate Accumulator
{ "sqdst", CF_USE1|CF_USE2 }, // Square Distance
// LOGICAL OPERATIONS
// AND INSTRUCTIONS
{ "and", CF_CHG1 }, // AND With Accumulator
{ "and", CF_USE1|CF_CHG2 }, // AND With Accumulator
{ "and", CF_USE1|CF_USE2|CF_CHG3 }, // AND With Accumulator
{ "andm", CF_USE1|CF_CHG2 }, // AND Memory With Long Immediate
// OR INSTRUCTIONS
{ "or", CF_CHG1 }, // OR With Accumulator
{ "or", CF_USE1|CF_CHG2 }, // OR With Accumulator
{ "or", CF_USE1|CF_USE2|CF_CHG3 }, // OR With Accumulator
{ "orm", CF_USE1|CF_CHG2 }, // OR Memory With Constant
// XOR INSTRUCTIONS
{ "xor", CF_CHG1 }, // Exclusive OR With Accumulator
{ "xor", CF_USE1|CF_CHG2 }, // Exclusive OR With Accumulator
{ "xor", CF_USE1|CF_USE2|CF_CHG3 }, // Exclusive OR With Accumulator
{ "xorm", CF_USE1|CF_CHG2 }, // Exclusive OR Memory With Constant
// SHIFT INSTRUCTIONS
{ "rol", CF_CHG1 }, // Rotate Accumulator
{ "roltc", CF_CHG1 }, // Rotate Accumulator Left Using TC
{ "ror", CF_CHG1 }, // Rotate Accumulator Right
{ "sfta", CF_CHG1|CF_USE2 }, // Shift Accumulator Arithmetically
{ "sfta", CF_USE1|CF_USE2|CF_CHG3 }, // Shift Accumulator Arithmetically
{ "sftc", CF_CHG1 }, // Shift Accumulator Conditionally
{ "sftl", CF_CHG1|CF_USE2 }, // Shift Accumulator Logically
{ "sftl", CF_USE1|CF_USE2|CF_CHG3 }, // Shift Accumulator Logically
// TEST INSTRUCTIONS
{ "bit", CF_USE1|CF_USE2 }, // Test Bit
{ "bitf", CF_USE1|CF_USE2 }, // Test Bit Field Specified by Immediate Value
{ "bitt", CF_USE1 }, // Test Bit Specified by T
{ "cmpm", CF_USE1|CF_USE2 }, // Compare Memory With Long Immediate
{ "cmpr", CF_USE1|CF_USE2 }, // Compare Auxiliary Register with AR0
// PROGRAM CONTROL OPERATIONS
// BRANCH INSTRUCTIONS
{ "b", CF_USE1|CF_STOP }, // Branch Unconditionally
{ "bd", CF_USE1 }, // Branch Unconditionally
{ "bacc", CF_USE1|CF_STOP }, // Branch to Location Specified by Accumulator
{ "baccd", CF_USE1 }, // Branch to Location Specified by Accumulator
{ "banz", CF_USE1|CF_USE2 }, // Branch on Auxiliary Register Not Zero
{ "banzd", CF_USE1|CF_USE2 }, // Branch on Auxiliary Register Not Zero
{ "bc", CF_USE1|CF_USE2 }, // Branch Conditionally
{ "bc", CF_USE1|CF_USE2|CF_USE3 }, // Branch Conditionally
{ "bcd", CF_USE1|CF_USE2 }, // Branch Conditionally
{ "bcd", CF_USE1|CF_USE2|CF_USE3 }, // Branch Conditionally
{ "fb", CF_USE1|CF_STOP }, // Far Branch Unconditionally
{ "fbd", CF_USE1 }, // Far Branch Unconditionally
{ "fbacc", CF_USE1 }, // Far Branch to Location Specified by Accumulator
{ "fbaccd", CF_USE1 }, // Far Branch to Location Specified by Accumulator
// CALL INSTRUCTIONS
{ "cala", CF_USE1|CF_CALL }, // Call Subroutine at Location Specified by Accumulator
{ "calad", CF_USE1|CF_CALL }, // Call Subroutine at Location Specified by Accumulator
{ "call", CF_USE1|CF_CALL }, // Call Unconditionally
{ "calld", CF_USE1|CF_CALL }, // Call Unconditionally
{ "cc", CF_USE1|CF_USE2|CF_CALL }, // Call Conditionally
{ "cc", CF_USE1|CF_USE2|CF_USE3|CF_CALL }, // Call Conditionally
{ "ccd", CF_USE1|CF_USE2|CF_CALL }, // Call Conditionally
{ "ccd", CF_USE1|CF_USE2|CF_USE3|CF_CALL }, // Call Conditionally
{ "fcala", CF_USE1|CF_CALL }, // Far Call Subroutine at Location Specified by Accumulator
{ "fcalad", CF_USE1|CF_CALL }, // Far Call Subroutine at Location Specified by Accumulator
{ "fcall", CF_USE1|CF_CALL }, // Far Call Unconditionally
{ "fcalld", CF_USE1|CF_CALL }, // Far Call Unconditionally
// INTERRUPT INSTRUCTIONS
{ "intr", CF_USE1|CF_CALL }, // Software Interrupt
{ "trap", CF_USE1|CF_CALL }, // Software Interrupt
// RETURN INSTRUCTIONS
{ "fret", CF_STOP }, // Far Return
{ "fretd", 0 }, // Far Return
{ "frete", CF_STOP }, // Enable Interrupts and Far Return From Interrupt
{ "freted", 0 }, // Enable Interrupts and Far Return From Interrupt
{ "rc", CF_USE1 }, // Return Conditionally
{ "rc", CF_USE1|CF_USE2 }, // Return Conditionally
{ "rc", CF_USE1|CF_USE2|CF_USE3 }, // Return Conditionally
{ "rcd", CF_USE1 }, // Return Conditionally
{ "rcd", CF_USE1|CF_USE2 }, // Return Conditionally
{ "rcd", CF_USE1|CF_USE2|CF_USE3 }, // Return Conditionally
{ "ret", CF_STOP }, // Return
{ "retd", 0 }, // Return
{ "rete", CF_STOP }, // Enable Interrupts and Far Return From Interrupt
{ "reted", 0 }, // Enable Interrupts and Far Return From Interrupt
{ "retf", CF_STOP }, // Enable Interrupts and Fast Return From Interrupt
{ "retfd", 0 }, // Enable Interrupts and Fast Return From Interrupt
// REPEAT INSTRUCTIONS
{ "rpt", CF_USE1 }, // Repeat Next Instruction
{ "rptb", CF_USE1 }, // Block Repeat
{ "rptbd", CF_USE1 }, // Block Repeat
{ "rptz", CF_CHG1|CF_USE2 }, // Repeat Next Instruction And Clear Accumulator
// STACK MANIPULATING INSTRUCTIONS
{ "frame", CF_USE1 }, // Stack Pointer Immediate Offset
{ "popd", CF_CHG1 }, // Pop Top of Stack to Data Memory
{ "popm", CF_CHG1 }, // Pop Top of Stack to Memory-Mapped Register
{ "pshd", CF_USE1 }, // Push Data-Memory Value Onto Stack
{ "pshm", CF_USE1 }, // Push Memory-Mapped Register Onto Stack
// MISCELLANEOUS PROGRAM-CONTROL INSTRUCTIONS
{ "idle", CF_USE1 }, // Idle Until Interrupt
{ "mar", CF_USE1 }, // Modify Auxiliary Register
{ "nop", 0 }, // No Operation
{ "reset", 0 }, // Software Reset
{ "rsbx", CF_CHG1 }, // Reset Status Register Bit
{ "rsbx", CF_USE1|CF_USE2 }, // Reset Status Register Bit
{ "ssbx", CF_CHG1 }, // Set Status Register Bit
{ "ssbx", CF_USE1|CF_USE2 }, // Set Status Register Bit
{ "xc", CF_USE1|CF_USE2 }, // Execute Conditionally
{ "xc", CF_USE1|CF_USE2|CF_USE3 }, // Execute Conditionally
// LOAD AND STORE OPERATIONS
// LOAD INSTRUCTIONS
{ "dld", CF_USE1|CF_CHG2 }, // Double-Precision/Dual 16-Bit Long-Word Load to Accumulator
{ "ld", CF_CHG1 }, // Load Accumulator With Shift
{ "ld", CF_USE1|CF_CHG2 }, // Load Accumulator With Shift
{ "ld", CF_USE1|CF_USE2|CF_CHG3 }, // Load Accumulator With Shift
{ "ldm", CF_USE1|CF_CHG2 }, // Load Memory-Mapped Register
{ "ldr", CF_USE1|CF_CHG2 }, // Load Memory Value in Accumulator High With Rounding
{ "ldu", CF_USE1|CF_CHG2 }, // Load Unsigned Memory Value
{ "ltd", CF_USE1 }, // Load T and insert Delay
// STORE INSTRUCTIONS
{ "dst", CF_USE1|CF_CHG2 }, // Store Accumulator in Long Word
{ "st", CF_USE1|CF_CHG2 }, // Store T, TRN, or Immediate Value into Memory
{ "sth", CF_USE1|CF_CHG2 }, // Store Accumulator High Into Memory
{ "sth", CF_USE1|CF_USE2|CF_CHG3 }, // Store Accumulator High Into Memory
{ "stl", CF_USE1|CF_CHG2 }, // Store Accumulator Low Into Memory
{ "stl", CF_USE1|CF_USE2|CF_CHG3 }, // Store Accumulator Low Into Memory
{ "stlm", CF_USE1|CF_CHG2 }, // Store Accumulator Low Into Memory-Mapped Register
{ "stm", CF_USE1|CF_CHG2 }, // Store Immediate Value Into Memory-Mapped Register
// CONDITIONAL STORE INSTRUCTIONS
{ "cmps", CF_USE1|CF_CHG2 }, // Compare, Select and Store Maximum
{ "saccd", CF_USE1|CF_CHG2|CF_USE3 }, // Store Accumulator Conditionally
{ "srccd", CF_CHG1|CF_USE2 }, // Store Block Repeat Counter Conditionally
{ "strcd", CF_CHG1|CF_USE2 }, // Store T Conditionally
// PARALLEL LOAD AND STORE INSTRUCTIONS
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Load // TMS320C54_st_ld
// PARALLEL LOAD AND MULTIPLY INSTRUCTIONS
{ "ld", CF_USE1|CF_CHG2|CF_CHG3 }, // Load Accumulator With Parallel Multiply Accumulate Without Rounding // TMS320C54_ld_mac
{ "ld", CF_USE1|CF_CHG2|CF_CHG3 }, // Load Accumulator With Parallel Multiply Accumulate With Rounding // TMS320C54_ld_macr
{ "ld", CF_USE1|CF_CHG2|CF_CHG3 }, // Load Accumulator With Parallel Multiply Subtract Without Rounding // TMS320C54_ld_mas
{ "ld", CF_USE1|CF_CHG2|CF_CHG3 }, // Load Accumulator With Parallel Multiply Subtract With Rounding // TMS320C54_ld_masr
// PARALLEL STORE AND ADD/SUBSTRACT INSTRUCTIONS
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Add // TMS320C54_st_add
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Subtract // TMS320C54_st_sub
// PARALLEL STORE AND MULTIPLY INSTRUCTIONS
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Multiply Accumulate Without Rounding // TMS320C54_st_mac
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Multiply Accumulate With Rounding // TMS320C54_st_macr
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Multiply Subtract Without Rounding // TMS320C54_st_mas
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Multiply Subtract With Rounding // TMS320C54_st_masr
{ "st", CF_USE1|CF_CHG2|CF_CHG3 }, // Store Accumulator With Parallel Multiply // TMS320C54_st_mpy
// MISCELLANEOUS LOAD-TYPE AND STORE-TYPE INSTRUCTIONS
{ "mvdd", CF_USE1|CF_CHG2 }, // Move Data From Data Memory to Data Memory With X,Y Addressing
{ "mvdk", CF_USE1|CF_CHG2 }, // Move Data From Data Memory to Data Memory With Destination Addressing
{ "mvdm", CF_USE1|CF_CHG2 }, // Move Data From Data Memory to Memory-Mapped Register
{ "mvdp", CF_USE1|CF_CHG2 }, // Move Data From Data Memory to Program Memory
{ "mvkd", CF_USE1|CF_CHG2 }, // Move Data From Data Memory to Data Memory With Source Addressing
{ "mvmd", CF_USE1|CF_CHG2 }, // Move Data From Memory-Mapped Register to Data Memory
{ "mvmm", CF_USE1|CF_CHG2 }, // Move Data From Memory-Mapped Register to Memory-Mapped Register
{ "mvpd", CF_USE1|CF_CHG2 }, // Move Data From Program Memory to Data Memory
{ "portr", CF_USE1|CF_USE2 }, // Read Data From Port
{ "portw", CF_USE1|CF_USE2 }, // Write Data to Port
{ "reada", CF_CHG1 }, // Read Program Memory Addressed by Accumulator A and Store in Data Memory
{ "writa", CF_USE1 }, // Write Data to Program Memory Addressed by Accumulator A
};
CASSERT(qnumber(Instructions) == TMS320C54_last);