/src/capstonenext/MCInstrDesc.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* Capstone Disassembly Engine */ |
2 | | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */ |
3 | | |
4 | | #include "MCInstrDesc.h" |
5 | | |
6 | | /// isPredicate - Set if this is one of the operands that made up of |
7 | | /// the predicate operand that controls an isPredicable() instruction. |
8 | | bool MCOperandInfo_isPredicate(const MCOperandInfo *m) |
9 | 5.49M | { |
10 | 5.49M | return m->Flags & (1 << MCOI_Predicate); |
11 | 5.49M | } |
12 | | |
13 | | /// isOptionalDef - Set if this operand is a optional def. |
14 | | /// |
15 | | bool MCOperandInfo_isOptionalDef(const MCOperandInfo *m) |
16 | 351k | { |
17 | 351k | return m->Flags & (1 << MCOI_OptionalDef); |
18 | 351k | } |
19 | | |
20 | | /// Checks if operand is tied to another one. |
21 | | bool MCOperandInfo_isTiedToOp(const MCOperandInfo *m) |
22 | 4.59M | { |
23 | 4.59M | if (m->Constraints & (1 << MCOI_TIED_TO)) |
24 | 205k | return true; |
25 | 4.39M | return false; |
26 | 4.59M | } |
27 | | |
28 | | /// Returns the value of the specified operand constraint if |
29 | | /// it is present. Returns -1 if it is not present. |
30 | | int MCOperandInfo_getOperandConstraint(const MCInstrDesc *InstrDesc, |
31 | | unsigned OpNum, |
32 | | MCOI_OperandConstraint Constraint) |
33 | 210k | { |
34 | 210k | const MCOperandInfo OpInfo = InstrDesc->OpInfo[OpNum]; |
35 | 210k | if (OpNum < InstrDesc->NumOperands && |
36 | 210k | (OpInfo.Constraints & (1 << Constraint))) { |
37 | 210k | unsigned ValuePos = 4 + Constraint * 4; |
38 | 210k | return (OpInfo.Constraints >> ValuePos) & 0xf; |
39 | 210k | } |
40 | 0 | return -1; |
41 | 210k | } |
42 | | |
43 | | /// Returns the instruction description for the given MCInst opcode. |
44 | | /// Function should be called like: |
45 | | /// MCInstrDesc_get(MCInst_getOpcode(MI), ARCHInstDesc, ARR_SIZE(ARCHInstDesc)); |
46 | 3.70M | const MCInstrDesc *MCInstrDesc_get(unsigned opcode, const MCInstrDesc *table, unsigned tbl_size) { |
47 | 3.70M | return &table[tbl_size - 1 - opcode]; |
48 | 3.70M | } |