Go to the documentation of this file.
4 #ifdef CAPSTONE_HAS_TMS320C64X
8 #ifndef _CRT_SECURE_NO_WARNINGS
9 #define _CRT_SECURE_NO_WARNINGS
14 #pragma warning(disable:28719)
21 #include "../../MCInst.h"
22 #include "../../utils.h"
23 #include "../../SStream.h"
24 #include "../../MCRegisterInfo.h"
25 #include "../../MathExtras.h"
30 static char *getRegisterName(
unsigned RegNo);
31 static void printOperand(
MCInst *MI,
unsigned OpNo,
SStream *O);
32 static void printMemOperand(
MCInst *MI,
unsigned OpNo,
SStream *O);
33 static void printMemOperand2(
MCInst *MI,
unsigned OpNo,
SStream *O);
34 static void printRegPair(
MCInst *MI,
unsigned OpNo,
SStream *O);
40 unsigned int unit = 0;
45 tms320c64x = &mci->
flat_insn->detail->tms320c64x;
47 for (
i = 0;
i < insn->detail->groups_count;
i++) {
48 switch(insn->detail->groups[
i]) {
76 p = strchr(insn_asm,
'\t');
81 if ((
p != NULL) && (((p2 = strchr(
p,
'[')) != NULL) || ((p2 = strchr(
p,
'(')) != NULL))) {
82 while ((p2 >
p) && ((*p2 !=
'a') && (*p2 !=
'b')))
85 strcpy(insn_asm,
"Invalid!");
119 strcpy(insn_asm, ss.
buffer);
123 #define PRINT_ALIAS_INSTR
124 #include "TMS320C64xGenAsmWriter.inc"
126 #define GET_INSTRINFO_ENUM
127 #include "TMS320C64xGenInstrInfo.inc"
129 static void printOperand(
MCInst *MI,
unsigned OpNo,
SStream *O)
154 MI->
flat_insn->detail->tms320c64x.operands[MI->
flat_insn->detail->tms320c64x.op_count].reg = reg;
155 MI->
flat_insn->detail->tms320c64x.op_count++;
174 MI->
flat_insn->detail->tms320c64x.operands[MI->
flat_insn->detail->tms320c64x.op_count].imm = Imm;
175 MI->
flat_insn->detail->tms320c64x.op_count++;
180 static void printMemOperand(
MCInst *MI,
unsigned OpNo,
SStream *O)
188 scaled = (Val >> 19) & 1;
189 base = (Val >> 12) & 0x7f;
190 offset = (Val >> 5) & 0x7f;
191 mode = (Val >> 1) & 0xf;
242 tms320c64x = &MI->
flat_insn->detail->tms320c64x;
315 static void printMemOperand2(
MCInst *MI,
unsigned OpNo,
SStream *O)
323 basereg = Val & 0x7f;
324 offset = (Val >> 7) & 0x7fff;
328 tms320c64x = &MI->
flat_insn->detail->tms320c64x;
341 static void printRegPair(
MCInst *MI,
unsigned OpNo,
SStream *O)
347 SStream_concat(O,
"%s:%s", getRegisterName(reg + 1), getRegisterName(reg));
350 tms320c64x = &MI->
flat_insn->detail->tms320c64x;
365 case TMS320C64x_ADD_d2_rir:
367 case TMS320C64x_ADD_l1_irr:
368 case TMS320C64x_ADD_l1_ipp:
370 case TMS320C64x_ADD_s1_irr:
382 printOperand(MI, 1, O);
384 printOperand(MI, 2, O);
386 printOperand(MI, 0, O);
394 case TMS320C64x_ADD_d1_rir:
396 case TMS320C64x_OR_d2_rir:
398 case TMS320C64x_ADD_l1_irr:
399 case TMS320C64x_ADD_l1_ipp:
401 case TMS320C64x_OR_l1_irr:
403 case TMS320C64x_ADD_s1_irr:
405 case TMS320C64x_OR_s1_irr:
416 printOperand(MI, 1, O);
418 printOperand(MI, 0, O);
426 case TMS320C64x_XOR_d2_rir:
428 case TMS320C64x_XOR_l1_irr:
430 case TMS320C64x_XOR_s1_irr:
441 printOperand(MI, 1, O);
443 printOperand(MI, 0, O);
451 case TMS320C64x_MVK_d1_rr:
453 case TMS320C64x_MVK_l2_ir:
463 printOperand(MI, 0, O);
471 case TMS320C64x_SUB_l1_rrp_x1:
473 case TMS320C64x_SUB_s1_rrr:
484 printOperand(MI, 0, O);
492 case TMS320C64x_SUB_l1_irr:
493 case TMS320C64x_SUB_l1_ipp:
495 case TMS320C64x_SUB_s1_irr:
506 printOperand(MI, 1, O);
508 printOperand(MI, 0, O);
516 case TMS320C64x_PACKLH2_l1_rrr_x2:
518 case TMS320C64x_PACKLH2_s1_rrr:
529 printOperand(MI, 1, O);
531 printOperand(MI, 0, O);
540 case TMS320C64x_NOP_n:
570 if (!printAliasInstruction(MI, O, Info))
571 printInstruction(MI, O, Info);
unsigned MCOperand_getReg(const MCOperand *op)
getReg - Returns the register number.
tms320c64x_op_mem mem
base/disp value for MEM operand
MCOperand * MCInst_getOperand(MCInst *inst, unsigned i)
struct cs_tms320c64x::@169 condition
tms320c64x_op_type type
operand type
unsigned int disp
displacement/offset value
unsigned int scaled
offset scaled
@ TMS320C64X_GRP_FUNIT_NO
int64_t MCOperand_getImm(MCOperand *op)
@ TMS320C64X_MEM_MOD_POST
unsigned MCInst_getNumOperands(const MCInst *inst)
@ TMS320C64X_OP_IMM
= CS_OP_IMM (Immediate operand).
const CAPSTONE_EXPORT char *CAPSTONE_API cs_reg_name(csh ud, unsigned int reg)
void SStream_concat0(SStream *ss, const char *s)
@ TMS320C64X_MEM_DISP_CONSTANT
unsigned int disptype
displacement type
@ TMS320C64X_MEM_DISP_REGISTER
void TMS320C64x_printInst(MCInst *MI, SStream *O, void *Info)
unsigned int modify
modification
unsigned int unit
unit of base and offset register
void TMS320C64x_post_printer(csh ud, cs_insn *insn, char *insn_asm, MCInst *mci)
@ TMS320C64X_OP_MEM
= CS_OP_MEM (Memory operand).
unsigned MCInst_getOpcode(const MCInst *inst)
bool MCOperand_isImm(const MCOperand *op)
void MCOperand_setImm(MCOperand *op, int64_t Val)
void SStream_concat(SStream *ss, const char *fmt,...)
unsigned int direction
direction
void SStream_Init(SStream *ss)
@ TMS320C64X_OP_REG
= CS_OP_REG (Register operand).
unsigned int reg
register value for REG operand or first register for REGPAIR operand
void MCInst_setOpcodePub(MCInst *inst, unsigned Op)
@ TMS320C64X_OP_REGPAIR
Register pair for double word ops.
unsigned int base
base register
bool MCOperand_isReg(const MCOperand *op)
cs_tms320c64x_op operands[8]
operands for this instruction.
struct cs_tms320c64x::@170 funit
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:39