Coverage Report

Created: 2025-07-11 06:32

/src/capstonenext/include/capstone/arm.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef CAPSTONE_ARM_H
2
#define CAPSTONE_ARM_H
3
4
/* Capstone Disassembly Engine */
5
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
6
/*    Rot127 <unisono@quyllur.org>, 2022-2023 */
7
8
#ifdef __cplusplus
9
extern "C" {
10
#endif
11
12
#include <assert.h>
13
#include <string.h>
14
15
#include "cs_operand.h"
16
#include "platform.h"
17
18
#ifdef _MSC_VER
19
#pragma warning(disable:4201)
20
#endif
21
22
// Enums corresponding to ARM condition codes
23
// The CondCodes constants map directly to the 4-bit encoding of the
24
// condition field for predicated instructions.
25
typedef enum CondCodes {
26
  // Meaning (integer)          Meaning (floating-point)
27
  ARMCC_EQ, // Equal                      Equal
28
  ARMCC_NE, // Not equal                  Not equal, or unordered
29
  ARMCC_HS, // Carry set                  >, ==, or unordered
30
  ARMCC_LO, // Carry clear                Less than
31
  ARMCC_MI, // Minus, negative            Less than
32
  ARMCC_PL, // Plus, positive or zero     >, ==, or unordered
33
  ARMCC_VS, // Overflow                   Unordered
34
  ARMCC_VC, // No overflow                Not unordered
35
  ARMCC_HI, // Unsigned higher            Greater than, or unordered
36
  ARMCC_LS, // Unsigned lower or same     Less than or equal
37
  ARMCC_GE, // Greater than or equal      Greater than or equal
38
  ARMCC_LT, // Less than                  Less than, or unordered
39
  ARMCC_GT, // Greater than               Greater than
40
  ARMCC_LE, // Less than or equal         <, ==, or unordered
41
  ARMCC_AL, // Always (unconditional)     Always (unconditional)
42
  ARMCC_UNDEF = 15, // Undefined
43
  ARMCC_Invalid = 16, // Invalid
44
} ARMCC_CondCodes;
45
46
inline static ARMCC_CondCodes ARMCC_getOppositeCondition(ARMCC_CondCodes CC)
47
1.06k
{
48
1.06k
  switch (CC) {
49
0
  default:
50
    // llvm_unreachable("Unknown condition code");
51
0
    assert(0);
52
3
  case ARMCC_EQ:
53
3
    return ARMCC_NE;
54
191
  case ARMCC_NE:
55
191
    return ARMCC_EQ;
56
1
  case ARMCC_HS:
57
1
    return ARMCC_LO;
58
4
  case ARMCC_LO:
59
4
    return ARMCC_HS;
60
3
  case ARMCC_MI:
61
3
    return ARMCC_PL;
62
29
  case ARMCC_PL:
63
29
    return ARMCC_MI;
64
495
  case ARMCC_VS:
65
495
    return ARMCC_VC;
66
262
  case ARMCC_VC:
67
262
    return ARMCC_VS;
68
23
  case ARMCC_HI:
69
23
    return ARMCC_LS;
70
0
  case ARMCC_LS:
71
0
    return ARMCC_HI;
72
16
  case ARMCC_GE:
73
16
    return ARMCC_LT;
74
25
  case ARMCC_LT:
75
25
    return ARMCC_GE;
76
9
  case ARMCC_GT:
77
9
    return ARMCC_LE;
78
3
  case ARMCC_LE:
79
3
    return ARMCC_GT;
80
1.06k
  }
81
1.06k
}
Unexecuted instantiation: fuzz_disasm.c:ARMCC_getOppositeCondition
Unexecuted instantiation: platform.c:ARMCC_getOppositeCondition
Unexecuted instantiation: cs.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MCInst.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SStream.c:ARMCC_getOppositeCondition
Unexecuted instantiation: utils.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARMModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AArch64Module.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MipsModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: PPCModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86Module.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86ATTInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SparcModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XCoreModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M68KModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TMS320C64xModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M680XModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: EVMModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: WASMModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MOS65XXModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MOS65XXDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: BPFModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: RISCVModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SHModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TriCoreModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AlphaModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: HPPAModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: LoongArchModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XtensaModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARCModule.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARMMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AArch64Mapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MipsMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: PPCMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86Disassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86IntelInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86InstPrinterCommon.c:ARMCC_getOppositeCondition
Unexecuted instantiation: X86Mapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SparcMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XCoreDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XCoreInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XCoreMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M68KDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M68KInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TMS320C64xMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M680XDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: M680XInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: EVMDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: EVMInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: EVMMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: WASMDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: WASMInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: WASMMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: BPFDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: BPFInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: BPFMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: RISCVDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: RISCVInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: RISCVMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SHDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SHInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TriCoreDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TriCoreMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AlphaDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AlphaMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: HPPADisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: HPPAInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: HPPAMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: LoongArchMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XtensaMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARCMapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: Mapping.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARMBaseInfo.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARMDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMCC_getOppositeCondition
ARMInstPrinter.c:ARMCC_getOppositeCondition
Line
Count
Source
47
1.06k
{
48
1.06k
  switch (CC) {
49
0
  default:
50
    // llvm_unreachable("Unknown condition code");
51
0
    assert(0);
52
3
  case ARMCC_EQ:
53
3
    return ARMCC_NE;
54
191
  case ARMCC_NE:
55
191
    return ARMCC_EQ;
56
1
  case ARMCC_HS:
57
1
    return ARMCC_LO;
58
4
  case ARMCC_LO:
59
4
    return ARMCC_HS;
60
3
  case ARMCC_MI:
61
3
    return ARMCC_PL;
62
29
  case ARMCC_PL:
63
29
    return ARMCC_MI;
64
495
  case ARMCC_VS:
65
495
    return ARMCC_VC;
66
262
  case ARMCC_VC:
67
262
    return ARMCC_VS;
68
23
  case ARMCC_HI:
69
23
    return ARMCC_LS;
70
0
  case ARMCC_LS:
71
0
    return ARMCC_HI;
72
16
  case ARMCC_GE:
73
16
    return ARMCC_LT;
74
25
  case ARMCC_LT:
75
25
    return ARMCC_GE;
76
9
  case ARMCC_GT:
77
9
    return ARMCC_LE;
78
3
  case ARMCC_LE:
79
3
    return ARMCC_GT;
80
1.06k
  }
81
1.06k
}
Unexecuted instantiation: AArch64BaseInfo.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AArch64Disassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AArch64InstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MipsDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MipsInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: PPCDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: PPCInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SparcDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SparcInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMCC_getOppositeCondition
Unexecuted instantiation: TriCoreInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: AlphaInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: LoongArchDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMCC_getOppositeCondition
Unexecuted instantiation: LoongArchInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XtensaDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: XtensaInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARCDisassembler.c:ARMCC_getOppositeCondition
Unexecuted instantiation: ARCInstPrinter.c:ARMCC_getOppositeCondition
Unexecuted instantiation: MCInstPrinter.c:ARMCC_getOppositeCondition
82
83
/// getSwappedCondition - assume the flags are set by MI(a,b), return
84
/// the condition code if we modify the instructions such that flags are
85
/// set by MI(b,a).
86
inline static ARMCC_CondCodes ARMCC_getSwappedCondition(ARMCC_CondCodes CC)
87
0
{
88
0
  switch (CC) {
89
0
  default:
90
0
    return ARMCC_AL;
91
0
  case ARMCC_EQ:
92
0
    return ARMCC_EQ;
93
0
  case ARMCC_NE:
94
0
    return ARMCC_NE;
95
0
  case ARMCC_HS:
96
0
    return ARMCC_LS;
97
0
  case ARMCC_LO:
98
0
    return ARMCC_HI;
99
0
  case ARMCC_HI:
100
0
    return ARMCC_LO;
101
0
  case ARMCC_LS:
102
0
    return ARMCC_HS;
103
0
  case ARMCC_GE:
104
0
    return ARMCC_LE;
105
0
  case ARMCC_LT:
106
0
    return ARMCC_GT;
107
0
  case ARMCC_GT:
108
0
    return ARMCC_LT;
109
0
  case ARMCC_LE:
110
0
    return ARMCC_GE;
111
0
  }
112
0
}
Unexecuted instantiation: fuzz_disasm.c:ARMCC_getSwappedCondition
Unexecuted instantiation: platform.c:ARMCC_getSwappedCondition
Unexecuted instantiation: cs.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MCInst.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SStream.c:ARMCC_getSwappedCondition
Unexecuted instantiation: utils.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64Module.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MipsModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: PPCModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86Module.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86ATTInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SparcModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XCoreModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M68KModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TMS320C64xModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M680XModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: EVMModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: WASMModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MOS65XXModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MOS65XXDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: BPFModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: RISCVModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SHModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TriCoreModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AlphaModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: HPPAModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: LoongArchModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XtensaModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARCModule.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64Mapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MipsMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: PPCMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86Disassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86IntelInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86InstPrinterCommon.c:ARMCC_getSwappedCondition
Unexecuted instantiation: X86Mapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SparcMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XCoreDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XCoreInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XCoreMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M68KDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M68KInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TMS320C64xMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M680XDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: M680XInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: EVMDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: EVMInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: EVMMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: WASMDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: WASMInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: WASMMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: BPFDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: BPFInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: BPFMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: RISCVDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: RISCVInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: RISCVMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SHDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SHInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TriCoreDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TriCoreMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AlphaDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AlphaMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: HPPADisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: HPPAInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: HPPAMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: LoongArchMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XtensaMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARCMapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: Mapping.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMBaseInfo.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARMInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64BaseInfo.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64Disassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AArch64InstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MipsDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MipsInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: PPCDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: PPCInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SparcDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SparcInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMCC_getSwappedCondition
Unexecuted instantiation: TriCoreInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: AlphaInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: LoongArchDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMCC_getSwappedCondition
Unexecuted instantiation: LoongArchInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XtensaDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: XtensaInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARCDisassembler.c:ARMCC_getSwappedCondition
Unexecuted instantiation: ARCInstPrinter.c:ARMCC_getSwappedCondition
Unexecuted instantiation: MCInstPrinter.c:ARMCC_getSwappedCondition
113
114
typedef enum VPTCodes {
115
  ARMVCC_None = 0,
116
  ARMVCC_Then,
117
  ARMVCC_Else
118
} ARMVCC_VPTCodes;
119
120
/// Mask values for IT and VPT Blocks, to be used by MCOperands.
121
/// Note that this is different from the "real" encoding used by the
122
/// instructions. In this encoding, the lowest set bit indicates the end of
123
/// the encoding, and above that, "1" indicates an else, while "0" indicates
124
/// a then.
125
///   Tx = x100
126
///   Txy = xy10
127
///   Txyz = xyz1
128
typedef enum PredBlockMask {
129
  ARM_PredBlockMaskInvalid = 0,
130
  ARM_T = 0x8, // 0b1000
131
  ARM_TT = 0x4, // 0b0100
132
  ARM_TE = 0xc, // 0b1100
133
  ARM_TTT = 0x2, // 0b0010
134
  ARM_TTE = 0x6, // 0b0110
135
  ARM_TEE = 0xe, // 0b1110
136
  ARM_TET = 0xa, // 0b1010
137
  ARM_TTTT = 0x1, // 0b0001
138
  ARM_TTTE = 0x3, // 0b0011
139
  ARM_TTEE = 0x7, // 0b0111
140
  ARM_TTET = 0x5, // 0b0101
141
  ARM_TEEE = 0xf, // 0b1111
142
  ARM_TEET = 0xd, // 0b1101
143
  ARM_TETT = 0x9, // 0b1001
144
  ARM_TETE = 0xb, // 0b1011
145
} ARM_PredBlockMask;
146
147
// Expands a PredBlockMask by adding an E or a T at the end, depending on Kind.
148
// e.g ExpandPredBlockMask(T, Then) = TT, ExpandPredBlockMask(TT, Else) = TTE,
149
// and so on.
150
inline static const char *ARMVPTPredToString(ARMVCC_VPTCodes CC)
151
3.81k
{
152
3.81k
  switch (CC) {
153
0
  case ARMVCC_None:
154
0
    return "none";
155
2.34k
  case ARMVCC_Then:
156
2.34k
    return "t";
157
1.46k
  case ARMVCC_Else:
158
1.46k
    return "e";
159
3.81k
  }
160
0
  assert(0 && "Unknown VPT code");
161
0
  return "";
162
0
}
Unexecuted instantiation: fuzz_disasm.c:ARMVPTPredToString
Unexecuted instantiation: platform.c:ARMVPTPredToString
Unexecuted instantiation: cs.c:ARMVPTPredToString
Unexecuted instantiation: MCInst.c:ARMVPTPredToString
Unexecuted instantiation: SStream.c:ARMVPTPredToString
Unexecuted instantiation: utils.c:ARMVPTPredToString
Unexecuted instantiation: ARMModule.c:ARMVPTPredToString
Unexecuted instantiation: AArch64Module.c:ARMVPTPredToString
Unexecuted instantiation: MipsModule.c:ARMVPTPredToString
Unexecuted instantiation: PPCModule.c:ARMVPTPredToString
Unexecuted instantiation: X86Module.c:ARMVPTPredToString
Unexecuted instantiation: X86ATTInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: SparcModule.c:ARMVPTPredToString
Unexecuted instantiation: SystemZModule.c:ARMVPTPredToString
Unexecuted instantiation: XCoreModule.c:ARMVPTPredToString
Unexecuted instantiation: M68KModule.c:ARMVPTPredToString
Unexecuted instantiation: TMS320C64xModule.c:ARMVPTPredToString
Unexecuted instantiation: M680XModule.c:ARMVPTPredToString
Unexecuted instantiation: EVMModule.c:ARMVPTPredToString
Unexecuted instantiation: WASMModule.c:ARMVPTPredToString
Unexecuted instantiation: MOS65XXModule.c:ARMVPTPredToString
Unexecuted instantiation: MOS65XXDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: BPFModule.c:ARMVPTPredToString
Unexecuted instantiation: RISCVModule.c:ARMVPTPredToString
Unexecuted instantiation: SHModule.c:ARMVPTPredToString
Unexecuted instantiation: TriCoreModule.c:ARMVPTPredToString
Unexecuted instantiation: AlphaModule.c:ARMVPTPredToString
Unexecuted instantiation: HPPAModule.c:ARMVPTPredToString
Unexecuted instantiation: LoongArchModule.c:ARMVPTPredToString
Unexecuted instantiation: XtensaModule.c:ARMVPTPredToString
Unexecuted instantiation: ARCModule.c:ARMVPTPredToString
Unexecuted instantiation: ARMMapping.c:ARMVPTPredToString
Unexecuted instantiation: AArch64Mapping.c:ARMVPTPredToString
Unexecuted instantiation: MipsMapping.c:ARMVPTPredToString
Unexecuted instantiation: PPCMapping.c:ARMVPTPredToString
Unexecuted instantiation: X86Disassembler.c:ARMVPTPredToString
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMVPTPredToString
Unexecuted instantiation: X86IntelInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: X86InstPrinterCommon.c:ARMVPTPredToString
Unexecuted instantiation: X86Mapping.c:ARMVPTPredToString
Unexecuted instantiation: SparcMapping.c:ARMVPTPredToString
Unexecuted instantiation: SystemZMapping.c:ARMVPTPredToString
Unexecuted instantiation: XCoreDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: XCoreInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: XCoreMapping.c:ARMVPTPredToString
Unexecuted instantiation: M68KDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: M68KInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: TMS320C64xMapping.c:ARMVPTPredToString
Unexecuted instantiation: M680XDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: M680XInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: EVMDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: EVMInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: EVMMapping.c:ARMVPTPredToString
Unexecuted instantiation: WASMDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: WASMInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: WASMMapping.c:ARMVPTPredToString
Unexecuted instantiation: BPFDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: BPFInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: BPFMapping.c:ARMVPTPredToString
Unexecuted instantiation: RISCVDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: RISCVInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: RISCVMapping.c:ARMVPTPredToString
Unexecuted instantiation: SHDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: SHInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: TriCoreDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: TriCoreMapping.c:ARMVPTPredToString
Unexecuted instantiation: AlphaDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: AlphaMapping.c:ARMVPTPredToString
Unexecuted instantiation: HPPADisassembler.c:ARMVPTPredToString
Unexecuted instantiation: HPPAInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: HPPAMapping.c:ARMVPTPredToString
Unexecuted instantiation: LoongArchMapping.c:ARMVPTPredToString
Unexecuted instantiation: XtensaMapping.c:ARMVPTPredToString
Unexecuted instantiation: ARCMapping.c:ARMVPTPredToString
Unexecuted instantiation: Mapping.c:ARMVPTPredToString
Unexecuted instantiation: ARMBaseInfo.c:ARMVPTPredToString
Unexecuted instantiation: ARMDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMVPTPredToString
ARMInstPrinter.c:ARMVPTPredToString
Line
Count
Source
151
3.81k
{
152
3.81k
  switch (CC) {
153
0
  case ARMVCC_None:
154
0
    return "none";
155
2.34k
  case ARMVCC_Then:
156
2.34k
    return "t";
157
1.46k
  case ARMVCC_Else:
158
1.46k
    return "e";
159
3.81k
  }
160
0
  assert(0 && "Unknown VPT code");
161
0
  return "";
162
0
}
Unexecuted instantiation: AArch64BaseInfo.c:ARMVPTPredToString
Unexecuted instantiation: AArch64Disassembler.c:ARMVPTPredToString
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMVPTPredToString
Unexecuted instantiation: AArch64InstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: MipsDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: MipsInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: PPCDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: PPCInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: SparcDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMVPTPredToString
Unexecuted instantiation: SparcInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: SystemZDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMVPTPredToString
Unexecuted instantiation: SystemZInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMVPTPredToString
Unexecuted instantiation: TriCoreInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: AlphaInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: LoongArchDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMVPTPredToString
Unexecuted instantiation: LoongArchInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: XtensaDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: XtensaInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: ARCDisassembler.c:ARMVPTPredToString
Unexecuted instantiation: ARCInstPrinter.c:ARMVPTPredToString
Unexecuted instantiation: MCInstPrinter.c:ARMVPTPredToString
163
164
inline static unsigned ARMVectorCondCodeFromString(const char CC)
165
0
{
166
0
  switch (CC) {
167
0
  default:
168
0
    return ~0U;
169
0
  case 't':
170
0
    return ARMVCC_Then;
171
0
  case 'e':
172
0
    return ARMVCC_Else;
173
0
  }
174
0
}
Unexecuted instantiation: fuzz_disasm.c:ARMVectorCondCodeFromString
Unexecuted instantiation: platform.c:ARMVectorCondCodeFromString
Unexecuted instantiation: cs.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MCInst.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SStream.c:ARMVectorCondCodeFromString
Unexecuted instantiation: utils.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64Module.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MipsModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: PPCModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86Module.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86ATTInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SparcModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XCoreModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M68KModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TMS320C64xModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M680XModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: EVMModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: WASMModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MOS65XXModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MOS65XXDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: BPFModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: RISCVModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SHModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TriCoreModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AlphaModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: HPPAModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: LoongArchModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XtensaModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARCModule.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64Mapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MipsMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: PPCMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86Disassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86IntelInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86InstPrinterCommon.c:ARMVectorCondCodeFromString
Unexecuted instantiation: X86Mapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SparcMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XCoreDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XCoreInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XCoreMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M68KDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M68KInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TMS320C64xMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M680XDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: M680XInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: EVMDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: EVMInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: EVMMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: WASMDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: WASMInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: WASMMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: BPFDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: BPFInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: BPFMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: RISCVDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: RISCVInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: RISCVMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SHDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SHInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TriCoreDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TriCoreMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AlphaDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AlphaMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: HPPADisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: HPPAInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: HPPAMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: LoongArchMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XtensaMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARCMapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: Mapping.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMBaseInfo.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARMInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64BaseInfo.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64Disassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AArch64InstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MipsDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MipsInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: PPCDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: PPCInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SparcDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SparcInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMVectorCondCodeFromString
Unexecuted instantiation: TriCoreInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: AlphaInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: LoongArchDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMVectorCondCodeFromString
Unexecuted instantiation: LoongArchInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XtensaDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: XtensaInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARCDisassembler.c:ARMVectorCondCodeFromString
Unexecuted instantiation: ARCInstPrinter.c:ARMVectorCondCodeFromString
Unexecuted instantiation: MCInstPrinter.c:ARMVectorCondCodeFromString
175
176
inline static const char *ARMCondCodeToString(ARMCC_CondCodes CC)
177
177k
{
178
177k
  switch (CC) {
179
0
  default:
180
0
    assert(0 && "Unknown condition code");
181
28.4k
  case ARMCC_EQ:
182
28.4k
    return "eq";
183
10.6k
  case ARMCC_NE:
184
10.6k
    return "ne";
185
8.80k
  case ARMCC_HS:
186
8.80k
    return "hs";
187
9.51k
  case ARMCC_LO:
188
9.51k
    return "lo";
189
13.1k
  case ARMCC_MI:
190
13.1k
    return "mi";
191
8.58k
  case ARMCC_PL:
192
8.58k
    return "pl";
193
11.3k
  case ARMCC_VS:
194
11.3k
    return "vs";
195
10.8k
  case ARMCC_VC:
196
10.8k
    return "vc";
197
9.65k
  case ARMCC_HI:
198
9.65k
    return "hi";
199
7.98k
  case ARMCC_LS:
200
7.98k
    return "ls";
201
9.60k
  case ARMCC_GE:
202
9.60k
    return "ge";
203
25.1k
  case ARMCC_LT:
204
25.1k
    return "lt";
205
9.40k
  case ARMCC_GT:
206
9.40k
    return "gt";
207
13.0k
  case ARMCC_LE:
208
13.0k
    return "le";
209
1.61k
  case ARMCC_AL:
210
1.61k
    return "al";
211
177k
  }
212
177k
}
Unexecuted instantiation: fuzz_disasm.c:ARMCondCodeToString
Unexecuted instantiation: platform.c:ARMCondCodeToString
Unexecuted instantiation: cs.c:ARMCondCodeToString
Unexecuted instantiation: MCInst.c:ARMCondCodeToString
Unexecuted instantiation: SStream.c:ARMCondCodeToString
Unexecuted instantiation: utils.c:ARMCondCodeToString
Unexecuted instantiation: ARMModule.c:ARMCondCodeToString
Unexecuted instantiation: AArch64Module.c:ARMCondCodeToString
Unexecuted instantiation: MipsModule.c:ARMCondCodeToString
Unexecuted instantiation: PPCModule.c:ARMCondCodeToString
Unexecuted instantiation: X86Module.c:ARMCondCodeToString
Unexecuted instantiation: X86ATTInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: SparcModule.c:ARMCondCodeToString
Unexecuted instantiation: SystemZModule.c:ARMCondCodeToString
Unexecuted instantiation: XCoreModule.c:ARMCondCodeToString
Unexecuted instantiation: M68KModule.c:ARMCondCodeToString
Unexecuted instantiation: TMS320C64xModule.c:ARMCondCodeToString
Unexecuted instantiation: M680XModule.c:ARMCondCodeToString
Unexecuted instantiation: EVMModule.c:ARMCondCodeToString
Unexecuted instantiation: WASMModule.c:ARMCondCodeToString
Unexecuted instantiation: MOS65XXModule.c:ARMCondCodeToString
Unexecuted instantiation: MOS65XXDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: BPFModule.c:ARMCondCodeToString
Unexecuted instantiation: RISCVModule.c:ARMCondCodeToString
Unexecuted instantiation: SHModule.c:ARMCondCodeToString
Unexecuted instantiation: TriCoreModule.c:ARMCondCodeToString
Unexecuted instantiation: AlphaModule.c:ARMCondCodeToString
Unexecuted instantiation: HPPAModule.c:ARMCondCodeToString
Unexecuted instantiation: LoongArchModule.c:ARMCondCodeToString
Unexecuted instantiation: XtensaModule.c:ARMCondCodeToString
Unexecuted instantiation: ARCModule.c:ARMCondCodeToString
Unexecuted instantiation: ARMMapping.c:ARMCondCodeToString
Unexecuted instantiation: AArch64Mapping.c:ARMCondCodeToString
Unexecuted instantiation: MipsMapping.c:ARMCondCodeToString
Unexecuted instantiation: PPCMapping.c:ARMCondCodeToString
Unexecuted instantiation: X86Disassembler.c:ARMCondCodeToString
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMCondCodeToString
Unexecuted instantiation: X86IntelInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: X86InstPrinterCommon.c:ARMCondCodeToString
Unexecuted instantiation: X86Mapping.c:ARMCondCodeToString
Unexecuted instantiation: SparcMapping.c:ARMCondCodeToString
Unexecuted instantiation: SystemZMapping.c:ARMCondCodeToString
Unexecuted instantiation: XCoreDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: XCoreInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: XCoreMapping.c:ARMCondCodeToString
Unexecuted instantiation: M68KDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: M68KInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: TMS320C64xMapping.c:ARMCondCodeToString
Unexecuted instantiation: M680XDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: M680XInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: EVMDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: EVMInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: EVMMapping.c:ARMCondCodeToString
Unexecuted instantiation: WASMDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: WASMInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: WASMMapping.c:ARMCondCodeToString
Unexecuted instantiation: BPFDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: BPFInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: BPFMapping.c:ARMCondCodeToString
Unexecuted instantiation: RISCVDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: RISCVInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: RISCVMapping.c:ARMCondCodeToString
Unexecuted instantiation: SHDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: SHInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: TriCoreDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: TriCoreMapping.c:ARMCondCodeToString
Unexecuted instantiation: AlphaDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: AlphaMapping.c:ARMCondCodeToString
Unexecuted instantiation: HPPADisassembler.c:ARMCondCodeToString
Unexecuted instantiation: HPPAInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: HPPAMapping.c:ARMCondCodeToString
Unexecuted instantiation: LoongArchMapping.c:ARMCondCodeToString
Unexecuted instantiation: XtensaMapping.c:ARMCondCodeToString
Unexecuted instantiation: ARCMapping.c:ARMCondCodeToString
Unexecuted instantiation: Mapping.c:ARMCondCodeToString
Unexecuted instantiation: ARMBaseInfo.c:ARMCondCodeToString
Unexecuted instantiation: ARMDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMCondCodeToString
ARMInstPrinter.c:ARMCondCodeToString
Line
Count
Source
177
177k
{
178
177k
  switch (CC) {
179
0
  default:
180
0
    assert(0 && "Unknown condition code");
181
28.4k
  case ARMCC_EQ:
182
28.4k
    return "eq";
183
10.6k
  case ARMCC_NE:
184
10.6k
    return "ne";
185
8.80k
  case ARMCC_HS:
186
8.80k
    return "hs";
187
9.51k
  case ARMCC_LO:
188
9.51k
    return "lo";
189
13.1k
  case ARMCC_MI:
190
13.1k
    return "mi";
191
8.58k
  case ARMCC_PL:
192
8.58k
    return "pl";
193
11.3k
  case ARMCC_VS:
194
11.3k
    return "vs";
195
10.8k
  case ARMCC_VC:
196
10.8k
    return "vc";
197
9.65k
  case ARMCC_HI:
198
9.65k
    return "hi";
199
7.98k
  case ARMCC_LS:
200
7.98k
    return "ls";
201
9.60k
  case ARMCC_GE:
202
9.60k
    return "ge";
203
25.1k
  case ARMCC_LT:
204
25.1k
    return "lt";
205
9.40k
  case ARMCC_GT:
206
9.40k
    return "gt";
207
13.0k
  case ARMCC_LE:
208
13.0k
    return "le";
209
1.61k
  case ARMCC_AL:
210
1.61k
    return "al";
211
177k
  }
212
177k
}
Unexecuted instantiation: AArch64BaseInfo.c:ARMCondCodeToString
Unexecuted instantiation: AArch64Disassembler.c:ARMCondCodeToString
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMCondCodeToString
Unexecuted instantiation: AArch64InstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: MipsDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: MipsInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: PPCDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: PPCInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: SparcDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMCondCodeToString
Unexecuted instantiation: SparcInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: SystemZDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMCondCodeToString
Unexecuted instantiation: SystemZInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMCondCodeToString
Unexecuted instantiation: TriCoreInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: AlphaInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: LoongArchDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMCondCodeToString
Unexecuted instantiation: LoongArchInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: XtensaDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: XtensaInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: ARCDisassembler.c:ARMCondCodeToString
Unexecuted instantiation: ARCInstPrinter.c:ARMCondCodeToString
Unexecuted instantiation: MCInstPrinter.c:ARMCondCodeToString
213
214
inline static unsigned ARMCondCodeFromString(const char *CC)
215
0
{
216
0
  if (strcmp("eq", CC) == 0)
217
0
    return ARMCC_EQ;
218
0
  else if (strcmp("ne", CC) == 0)
219
0
    return ARMCC_NE;
220
0
  else if (strcmp("hs", CC) == 0)
221
0
    return ARMCC_HS;
222
0
  else if (strcmp("cs", CC) == 0)
223
0
    return ARMCC_HS;
224
0
  else if (strcmp("lo", CC) == 0)
225
0
    return ARMCC_LO;
226
0
  else if (strcmp("cc", CC) == 0)
227
0
    return ARMCC_LO;
228
0
  else if (strcmp("mi", CC) == 0)
229
0
    return ARMCC_MI;
230
0
  else if (strcmp("pl", CC) == 0)
231
0
    return ARMCC_PL;
232
0
  else if (strcmp("vs", CC) == 0)
233
0
    return ARMCC_VS;
234
0
  else if (strcmp("vc", CC) == 0)
235
0
    return ARMCC_VC;
236
0
  else if (strcmp("hi", CC) == 0)
237
0
    return ARMCC_HI;
238
0
  else if (strcmp("ls", CC) == 0)
239
0
    return ARMCC_LS;
240
0
  else if (strcmp("ge", CC) == 0)
241
0
    return ARMCC_GE;
242
0
  else if (strcmp("lt", CC) == 0)
243
0
    return ARMCC_LT;
244
0
  else if (strcmp("gt", CC) == 0)
245
0
    return ARMCC_GT;
246
0
  else if (strcmp("le", CC) == 0)
247
0
    return ARMCC_LE;
248
0
  else if (strcmp("al", CC) == 0)
249
0
    return ARMCC_AL;
250
0
  return (~0U);
251
0
}
Unexecuted instantiation: fuzz_disasm.c:ARMCondCodeFromString
Unexecuted instantiation: platform.c:ARMCondCodeFromString
Unexecuted instantiation: cs.c:ARMCondCodeFromString
Unexecuted instantiation: MCInst.c:ARMCondCodeFromString
Unexecuted instantiation: SStream.c:ARMCondCodeFromString
Unexecuted instantiation: utils.c:ARMCondCodeFromString
Unexecuted instantiation: ARMModule.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64Module.c:ARMCondCodeFromString
Unexecuted instantiation: MipsModule.c:ARMCondCodeFromString
Unexecuted instantiation: PPCModule.c:ARMCondCodeFromString
Unexecuted instantiation: X86Module.c:ARMCondCodeFromString
Unexecuted instantiation: X86ATTInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: SparcModule.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZModule.c:ARMCondCodeFromString
Unexecuted instantiation: XCoreModule.c:ARMCondCodeFromString
Unexecuted instantiation: M68KModule.c:ARMCondCodeFromString
Unexecuted instantiation: TMS320C64xModule.c:ARMCondCodeFromString
Unexecuted instantiation: M680XModule.c:ARMCondCodeFromString
Unexecuted instantiation: EVMModule.c:ARMCondCodeFromString
Unexecuted instantiation: WASMModule.c:ARMCondCodeFromString
Unexecuted instantiation: MOS65XXModule.c:ARMCondCodeFromString
Unexecuted instantiation: MOS65XXDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: BPFModule.c:ARMCondCodeFromString
Unexecuted instantiation: RISCVModule.c:ARMCondCodeFromString
Unexecuted instantiation: SHModule.c:ARMCondCodeFromString
Unexecuted instantiation: TriCoreModule.c:ARMCondCodeFromString
Unexecuted instantiation: AlphaModule.c:ARMCondCodeFromString
Unexecuted instantiation: HPPAModule.c:ARMCondCodeFromString
Unexecuted instantiation: LoongArchModule.c:ARMCondCodeFromString
Unexecuted instantiation: XtensaModule.c:ARMCondCodeFromString
Unexecuted instantiation: ARCModule.c:ARMCondCodeFromString
Unexecuted instantiation: ARMMapping.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64Mapping.c:ARMCondCodeFromString
Unexecuted instantiation: MipsMapping.c:ARMCondCodeFromString
Unexecuted instantiation: PPCMapping.c:ARMCondCodeFromString
Unexecuted instantiation: X86Disassembler.c:ARMCondCodeFromString
Unexecuted instantiation: X86DisassemblerDecoder.c:ARMCondCodeFromString
Unexecuted instantiation: X86IntelInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: X86InstPrinterCommon.c:ARMCondCodeFromString
Unexecuted instantiation: X86Mapping.c:ARMCondCodeFromString
Unexecuted instantiation: SparcMapping.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZMapping.c:ARMCondCodeFromString
Unexecuted instantiation: XCoreDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: XCoreInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: XCoreMapping.c:ARMCondCodeFromString
Unexecuted instantiation: M68KDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: M68KInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: TMS320C64xDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: TMS320C64xInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: TMS320C64xMapping.c:ARMCondCodeFromString
Unexecuted instantiation: M680XDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: M680XInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: EVMDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: EVMInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: EVMMapping.c:ARMCondCodeFromString
Unexecuted instantiation: WASMDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: WASMInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: WASMMapping.c:ARMCondCodeFromString
Unexecuted instantiation: BPFDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: BPFInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: BPFMapping.c:ARMCondCodeFromString
Unexecuted instantiation: RISCVDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: RISCVInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: RISCVMapping.c:ARMCondCodeFromString
Unexecuted instantiation: SHDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: SHInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: TriCoreDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: TriCoreMapping.c:ARMCondCodeFromString
Unexecuted instantiation: AlphaDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: AlphaMapping.c:ARMCondCodeFromString
Unexecuted instantiation: HPPADisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: HPPAInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: HPPAMapping.c:ARMCondCodeFromString
Unexecuted instantiation: LoongArchMapping.c:ARMCondCodeFromString
Unexecuted instantiation: XtensaMapping.c:ARMCondCodeFromString
Unexecuted instantiation: ARCMapping.c:ARMCondCodeFromString
Unexecuted instantiation: Mapping.c:ARMCondCodeFromString
Unexecuted instantiation: ARMBaseInfo.c:ARMCondCodeFromString
Unexecuted instantiation: ARMDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: ARMDisassemblerExtension.c:ARMCondCodeFromString
Unexecuted instantiation: ARMInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64BaseInfo.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64Disassembler.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64DisassemblerExtension.c:ARMCondCodeFromString
Unexecuted instantiation: AArch64InstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: MipsDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: MipsInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: PPCDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: PPCInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: SparcDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: SparcDisassemblerExtension.c:ARMCondCodeFromString
Unexecuted instantiation: SparcInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZDisassemblerExtension.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: SystemZMCTargetDesc.c:ARMCondCodeFromString
Unexecuted instantiation: TriCoreInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: AlphaInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: LoongArchDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: LoongArchDisassemblerExtension.c:ARMCondCodeFromString
Unexecuted instantiation: LoongArchInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: XtensaDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: XtensaInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: ARCDisassembler.c:ARMCondCodeFromString
Unexecuted instantiation: ARCInstPrinter.c:ARMCondCodeFromString
Unexecuted instantiation: MCInstPrinter.c:ARMCondCodeFromString
252
253
/// ARM shift type
254
typedef enum arm_shifter {
255
  ARM_SFT_INVALID = 0,
256
  ARM_SFT_ASR,
257
  ARM_SFT_LSL,
258
  ARM_SFT_LSR,
259
  ARM_SFT_ROR,
260
  ARM_SFT_RRX,
261
  ARM_SFT_UXTW,
262
263
  // Added by Capstone to signal that the shift amount is stored in a register.
264
  // shift.val should be interpreted as register id.
265
  ARM_SFT_REG,
266
  ARM_SFT_ASR_REG,
267
  ARM_SFT_LSL_REG,
268
  ARM_SFT_LSR_REG,
269
  ARM_SFT_ROR_REG,
270
  // Others are not defined in the ISA.
271
} arm_shifter;
272
273
/// The memory barrier constants map directly to the 4-bit encoding of
274
/// the option field for Memory Barrier operations.
275
typedef enum MemBOpt {
276
  ARM_MB_RESERVED_0,
277
  ARM_MB_OSHLD,
278
  ARM_MB_OSHST,
279
  ARM_MB_OSH,
280
  ARM_MB_RESERVED_4,
281
  ARM_MB_NSHLD,
282
  ARM_MB_NSHST,
283
  ARM_MB_NSH,
284
  ARM_MB_RESERVED_8,
285
  ARM_MB_ISHLD,
286
  ARM_MB_ISHST,
287
  ARM_MB_ISH,
288
  ARM_MB_RESERVED_12,
289
  ARM_MB_LD,
290
  ARM_MB_ST,
291
  ARM_MB_SY,
292
} arm_mem_bo_opt;
293
294
typedef enum {
295
  // SPSR* field flags can be OR combined
296
  ARM_FIELD_SPSR_C = 1,
297
  ARM_FIELD_SPSR_X = 2,
298
  ARM_FIELD_SPSR_S = 4,
299
  ARM_FIELD_SPSR_F = 8,
300
301
  // CPSR* field flags can be OR combined
302
  ARM_FIELD_CPSR_C = 16,
303
  ARM_FIELD_CPSR_X = 32,
304
  ARM_FIELD_CPSR_S = 64,
305
  ARM_FIELD_CPSR_F = 128,
306
} arm_spsr_cpsr_bits;
307
308
// From LLVM docs:
309
// The values here come from B9.2.3 of the ARM ARM, where bits 4-0 are SysM field
310
// and bit 5 is R.
311
typedef enum {
312
  // generated content <ARMGenCSSystemOperandsEnum.inc:GET_ENUM_VALUES_BankedReg> begin
313
  // clang-format off
314
315
  ARM_BANKEDREG_ELR_HYP = 0x1e,
316
  ARM_BANKEDREG_LR_ABT = 0x14,
317
  ARM_BANKEDREG_LR_FIQ = 0xe,
318
  ARM_BANKEDREG_LR_IRQ = 0x10,
319
  ARM_BANKEDREG_LR_MON = 0x1c,
320
  ARM_BANKEDREG_LR_SVC = 0x12,
321
  ARM_BANKEDREG_LR_UND = 0x16,
322
  ARM_BANKEDREG_LR_USR = 0x6,
323
  ARM_BANKEDREG_R10_FIQ = 0xa,
324
  ARM_BANKEDREG_R10_USR = 0x2,
325
  ARM_BANKEDREG_R11_FIQ = 0xb,
326
  ARM_BANKEDREG_R11_USR = 0x3,
327
  ARM_BANKEDREG_R12_FIQ = 0xc,
328
  ARM_BANKEDREG_R12_USR = 0x4,
329
  ARM_BANKEDREG_R8_FIQ = 0x8,
330
  ARM_BANKEDREG_R8_USR = 0x0,
331
  ARM_BANKEDREG_R9_FIQ = 0x9,
332
  ARM_BANKEDREG_R9_USR = 0x1,
333
  ARM_BANKEDREG_SPSR_ABT = 0x34,
334
  ARM_BANKEDREG_SPSR_FIQ = 0x2e,
335
  ARM_BANKEDREG_SPSR_HYP = 0x3e,
336
  ARM_BANKEDREG_SPSR_IRQ = 0x30,
337
  ARM_BANKEDREG_SPSR_MON = 0x3c,
338
  ARM_BANKEDREG_SPSR_SVC = 0x32,
339
  ARM_BANKEDREG_SPSR_UND = 0x36,
340
  ARM_BANKEDREG_SP_ABT = 0x15,
341
  ARM_BANKEDREG_SP_FIQ = 0xd,
342
  ARM_BANKEDREG_SP_HYP = 0x1f,
343
  ARM_BANKEDREG_SP_IRQ = 0x11,
344
  ARM_BANKEDREG_SP_MON = 0x1d,
345
  ARM_BANKEDREG_SP_SVC = 0x13,
346
  ARM_BANKEDREG_SP_UND = 0x17,
347
  ARM_BANKEDREG_SP_USR = 0x5,
348
349
  // clang-format on
350
  // generated content <ARMGenCSSystemOperandsEnum.inc:GET_ENUM_VALUES_BankedReg> end
351
} arm_bankedreg;
352
353
typedef enum {
354
  // generated content <ARMGenCSSystemOperandsEnum.inc:GET_ENUM_VALUES_MClassSysReg> begin
355
  // clang-format off
356
357
  ARM_MCLASSSYSREG_APSR = 0x800,
358
  ARM_MCLASSSYSREG_APSR_G = 0x400,
359
  ARM_MCLASSSYSREG_APSR_NZCVQ = 0x800,
360
  ARM_MCLASSSYSREG_APSR_NZCVQG = 0xc00,
361
  ARM_MCLASSSYSREG_BASEPRI = 0x811,
362
  ARM_MCLASSSYSREG_BASEPRI_MAX = 0x812,
363
  ARM_MCLASSSYSREG_BASEPRI_NS = 0x891,
364
  ARM_MCLASSSYSREG_CONTROL = 0x814,
365
  ARM_MCLASSSYSREG_CONTROL_NS = 0x894,
366
  ARM_MCLASSSYSREG_EAPSR = 0x802,
367
  ARM_MCLASSSYSREG_EAPSR_G = 0x402,
368
  ARM_MCLASSSYSREG_EAPSR_NZCVQ = 0x802,
369
  ARM_MCLASSSYSREG_EAPSR_NZCVQG = 0xc02,
370
  ARM_MCLASSSYSREG_EPSR = 0x806,
371
  ARM_MCLASSSYSREG_FAULTMASK = 0x813,
372
  ARM_MCLASSSYSREG_FAULTMASK_NS = 0x893,
373
  ARM_MCLASSSYSREG_IAPSR = 0x801,
374
  ARM_MCLASSSYSREG_IAPSR_G = 0x401,
375
  ARM_MCLASSSYSREG_IAPSR_NZCVQ = 0x801,
376
  ARM_MCLASSSYSREG_IAPSR_NZCVQG = 0xc01,
377
  ARM_MCLASSSYSREG_IEPSR = 0x807,
378
  ARM_MCLASSSYSREG_IPSR = 0x805,
379
  ARM_MCLASSSYSREG_MSP = 0x808,
380
  ARM_MCLASSSYSREG_MSPLIM = 0x80a,
381
  ARM_MCLASSSYSREG_MSPLIM_NS = 0x88a,
382
  ARM_MCLASSSYSREG_MSP_NS = 0x888,
383
  ARM_MCLASSSYSREG_PAC_KEY_P_0 = 0x820,
384
  ARM_MCLASSSYSREG_PAC_KEY_P_0_NS = 0x8a0,
385
  ARM_MCLASSSYSREG_PAC_KEY_P_1 = 0x821,
386
  ARM_MCLASSSYSREG_PAC_KEY_P_1_NS = 0x8a1,
387
  ARM_MCLASSSYSREG_PAC_KEY_P_2 = 0x822,
388
  ARM_MCLASSSYSREG_PAC_KEY_P_2_NS = 0x8a2,
389
  ARM_MCLASSSYSREG_PAC_KEY_P_3 = 0x823,
390
  ARM_MCLASSSYSREG_PAC_KEY_P_3_NS = 0x8a3,
391
  ARM_MCLASSSYSREG_PAC_KEY_U_0 = 0x824,
392
  ARM_MCLASSSYSREG_PAC_KEY_U_0_NS = 0x8a4,
393
  ARM_MCLASSSYSREG_PAC_KEY_U_1 = 0x825,
394
  ARM_MCLASSSYSREG_PAC_KEY_U_1_NS = 0x8a5,
395
  ARM_MCLASSSYSREG_PAC_KEY_U_2 = 0x826,
396
  ARM_MCLASSSYSREG_PAC_KEY_U_2_NS = 0x8a6,
397
  ARM_MCLASSSYSREG_PAC_KEY_U_3 = 0x827,
398
  ARM_MCLASSSYSREG_PAC_KEY_U_3_NS = 0x8a7,
399
  ARM_MCLASSSYSREG_PRIMASK = 0x810,
400
  ARM_MCLASSSYSREG_PRIMASK_NS = 0x890,
401
  ARM_MCLASSSYSREG_PSP = 0x809,
402
  ARM_MCLASSSYSREG_PSPLIM = 0x80b,
403
  ARM_MCLASSSYSREG_PSPLIM_NS = 0x88b,
404
  ARM_MCLASSSYSREG_PSP_NS = 0x889,
405
  ARM_MCLASSSYSREG_SP_NS = 0x898,
406
  ARM_MCLASSSYSREG_XPSR = 0x803,
407
  ARM_MCLASSSYSREG_XPSR_G = 0x403,
408
  ARM_MCLASSSYSREG_XPSR_NZCVQ = 0x803,
409
  ARM_MCLASSSYSREG_XPSR_NZCVQG = 0xc03,
410
411
  // clang-format on
412
  // generated content <ARMGenCSSystemOperandsEnum.inc:GET_ENUM_VALUES_MClassSysReg> end
413
} arm_sysreg;
414
415
typedef union {
416
  arm_sysreg mclasssysreg;
417
  arm_bankedreg bankedreg;
418
  int raw_val; ///< Raw value for assignment in generated files.
419
} arm_sysop_reg;
420
421
/// Operand type for instruction's operands
422
typedef enum arm_op_type {
423
  ARM_OP_INVALID = CS_OP_INVALID, ///< Invalid
424
  ARM_OP_REG = CS_OP_REG, ///< Register operand
425
  ARM_OP_IMM = CS_OP_IMM, ///< Immediate operand
426
  ARM_OP_FP = CS_OP_FP,  ///< Floating-Point operand
427
  ARM_OP_PRED = CS_OP_PRED, ///< Predicate
428
  ARM_OP_CIMM = CS_OP_SPECIAL + 0, ///< C-Immediate (coprocessor registers)
429
  ARM_OP_PIMM = CS_OP_SPECIAL + 1, ///< P-Immediate (coprocessor registers)
430
  ARM_OP_SETEND = CS_OP_SPECIAL + 2,  ///< operand for SETEND instruction
431
  ARM_OP_SYSREG = CS_OP_SPECIAL + 3,  ///< MSR/MRS special register operand
432
  ARM_OP_BANKEDREG = CS_OP_SPECIAL + 4, ///< Banked register operand
433
  ARM_OP_SPSR = CS_OP_SPECIAL + 5,  ///< Collection of SPSR bits
434
  ARM_OP_CPSR = CS_OP_SPECIAL + 6,  ///< Collection of CPSR bits
435
  ARM_OP_SYSM = CS_OP_SPECIAL + 7,  ///< Raw SYSm field
436
  ARM_OP_VPRED_R = CS_OP_SPECIAL + 8, ///< Vector predicate. Leaves inactive lanes of output vector register unchanged.
437
  ARM_OP_VPRED_N = CS_OP_SPECIAL + 9, ///< Vector predicate. Don't preserved inactive lanes of output register.
438
  ARM_OP_MEM = CS_OP_MEM, ///< Memory operand
439
} arm_op_type;
440
441
/// Operand type for SETEND instruction
442
typedef enum arm_setend_type {
443
  ARM_SETEND_INVALID = 0, ///< Uninitialized.
444
  ARM_SETEND_BE,  ///< BE operand.
445
  ARM_SETEND_LE, ///< LE operand
446
} arm_setend_type;
447
448
typedef enum arm_cpsmode_type {
449
  ARM_CPSMODE_INVALID = 0,
450
  ARM_CPSMODE_IE = 2,
451
  ARM_CPSMODE_ID = 3
452
} arm_cpsmode_type;
453
454
/// Operand type for SETEND instruction
455
typedef enum arm_cpsflag_type {
456
  ARM_CPSFLAG_INVALID = 0,
457
  ARM_CPSFLAG_F = 1,
458
  ARM_CPSFLAG_I = 2,
459
  ARM_CPSFLAG_A = 4,
460
  ARM_CPSFLAG_NONE = 16,  ///< no flag
461
} arm_cpsflag_type;
462
463
/// Data type for elements of vector instructions.
464
typedef enum arm_vectordata_type {
465
  ARM_VECTORDATA_INVALID = 0,
466
467
  // Integer type
468
  ARM_VECTORDATA_I8,
469
  ARM_VECTORDATA_I16,
470
  ARM_VECTORDATA_I32,
471
  ARM_VECTORDATA_I64,
472
473
  // Signed integer type
474
  ARM_VECTORDATA_S8,
475
  ARM_VECTORDATA_S16,
476
  ARM_VECTORDATA_S32,
477
  ARM_VECTORDATA_S64,
478
479
  // Unsigned integer type
480
  ARM_VECTORDATA_U8,
481
  ARM_VECTORDATA_U16,
482
  ARM_VECTORDATA_U32,
483
  ARM_VECTORDATA_U64,
484
485
  // Data type for VMUL/VMULL
486
  ARM_VECTORDATA_P8,
487
  ARM_VECTORDATA_P16,
488
489
  // Floating type
490
  ARM_VECTORDATA_F16,
491
  ARM_VECTORDATA_F32,
492
  ARM_VECTORDATA_F64,
493
494
  // Convert float <-> float
495
  ARM_VECTORDATA_F16F64, // f16.f64
496
  ARM_VECTORDATA_F64F16, // f64.f16
497
  ARM_VECTORDATA_F32F16, // f32.f16
498
  ARM_VECTORDATA_F16F32, // f32.f16
499
  ARM_VECTORDATA_F64F32, // f64.f32
500
  ARM_VECTORDATA_F32F64, // f32.f64
501
502
  // Convert integer <-> float
503
  ARM_VECTORDATA_S32F32, // s32.f32
504
  ARM_VECTORDATA_U32F32, // u32.f32
505
  ARM_VECTORDATA_F32S32, // f32.s32
506
  ARM_VECTORDATA_F32U32, // f32.u32
507
  ARM_VECTORDATA_F64S16, // f64.s16
508
  ARM_VECTORDATA_F32S16, // f32.s16
509
  ARM_VECTORDATA_F64S32, // f64.s32
510
  ARM_VECTORDATA_S16F64, // s16.f64
511
  ARM_VECTORDATA_S16F32, // s16.f64
512
  ARM_VECTORDATA_S32F64, // s32.f64
513
  ARM_VECTORDATA_U16F64, // u16.f64
514
  ARM_VECTORDATA_U16F32, // u16.f32
515
  ARM_VECTORDATA_U32F64, // u32.f64
516
  ARM_VECTORDATA_F64U16, // f64.u16
517
  ARM_VECTORDATA_F32U16, // f32.u16
518
  ARM_VECTORDATA_F64U32, // f64.u32
519
  ARM_VECTORDATA_F16U16, // f16.u16
520
  ARM_VECTORDATA_U16F16, // u16.f16
521
  ARM_VECTORDATA_F16U32, // f16.u32
522
  ARM_VECTORDATA_U32F16, // u32.f16
523
  ARM_VECTORDATA_F16S16,
524
  ARM_VECTORDATA_S16F16,
525
  ARM_VECTORDATA_F16S32,
526
  ARM_VECTORDATA_S32F16,
527
} arm_vectordata_type;
528
529
/// ARM registers
530
typedef enum arm_reg {
531
  // generated content <ARMGenCSRegEnum.inc> begin
532
  // clang-format off
533
534
  ARM_REG_INVALID = 0,
535
  ARM_REG_APSR = 1,
536
  ARM_REG_APSR_NZCV = 2,
537
  ARM_REG_CPSR = 3,
538
  ARM_REG_FPCXTNS = 4,
539
  ARM_REG_FPCXTS = 5,
540
  ARM_REG_FPEXC = 6,
541
  ARM_REG_FPINST = 7,
542
  ARM_REG_FPSCR = 8,
543
  ARM_REG_FPSCR_NZCV = 9,
544
  ARM_REG_FPSCR_NZCVQC = 10,
545
  ARM_REG_FPSID = 11,
546
  ARM_REG_ITSTATE = 12,
547
  ARM_REG_LR = 13,
548
  ARM_REG_PC = 14,
549
  ARM_REG_RA_AUTH_CODE = 15,
550
  ARM_REG_SP = 16,
551
  ARM_REG_SPSR = 17,
552
  ARM_REG_VPR = 18,
553
  ARM_REG_ZR = 19,
554
  ARM_REG_D0 = 20,
555
  ARM_REG_D1 = 21,
556
  ARM_REG_D2 = 22,
557
  ARM_REG_D3 = 23,
558
  ARM_REG_D4 = 24,
559
  ARM_REG_D5 = 25,
560
  ARM_REG_D6 = 26,
561
  ARM_REG_D7 = 27,
562
  ARM_REG_D8 = 28,
563
  ARM_REG_D9 = 29,
564
  ARM_REG_D10 = 30,
565
  ARM_REG_D11 = 31,
566
  ARM_REG_D12 = 32,
567
  ARM_REG_D13 = 33,
568
  ARM_REG_D14 = 34,
569
  ARM_REG_D15 = 35,
570
  ARM_REG_D16 = 36,
571
  ARM_REG_D17 = 37,
572
  ARM_REG_D18 = 38,
573
  ARM_REG_D19 = 39,
574
  ARM_REG_D20 = 40,
575
  ARM_REG_D21 = 41,
576
  ARM_REG_D22 = 42,
577
  ARM_REG_D23 = 43,
578
  ARM_REG_D24 = 44,
579
  ARM_REG_D25 = 45,
580
  ARM_REG_D26 = 46,
581
  ARM_REG_D27 = 47,
582
  ARM_REG_D28 = 48,
583
  ARM_REG_D29 = 49,
584
  ARM_REG_D30 = 50,
585
  ARM_REG_D31 = 51,
586
  ARM_REG_FPINST2 = 52,
587
  ARM_REG_MVFR0 = 53,
588
  ARM_REG_MVFR1 = 54,
589
  ARM_REG_MVFR2 = 55,
590
  ARM_REG_P0 = 56,
591
  ARM_REG_Q0 = 57,
592
  ARM_REG_Q1 = 58,
593
  ARM_REG_Q2 = 59,
594
  ARM_REG_Q3 = 60,
595
  ARM_REG_Q4 = 61,
596
  ARM_REG_Q5 = 62,
597
  ARM_REG_Q6 = 63,
598
  ARM_REG_Q7 = 64,
599
  ARM_REG_Q8 = 65,
600
  ARM_REG_Q9 = 66,
601
  ARM_REG_Q10 = 67,
602
  ARM_REG_Q11 = 68,
603
  ARM_REG_Q12 = 69,
604
  ARM_REG_Q13 = 70,
605
  ARM_REG_Q14 = 71,
606
  ARM_REG_Q15 = 72,
607
  ARM_REG_R0 = 73,
608
  ARM_REG_R1 = 74,
609
  ARM_REG_R2 = 75,
610
  ARM_REG_R3 = 76,
611
  ARM_REG_R4 = 77,
612
  ARM_REG_R5 = 78,
613
  ARM_REG_R6 = 79,
614
  ARM_REG_R7 = 80,
615
  ARM_REG_R8 = 81,
616
  ARM_REG_R9 = 82,
617
  ARM_REG_R10 = 83,
618
  ARM_REG_R11 = 84,
619
  ARM_REG_R12 = 85,
620
  ARM_REG_S0 = 86,
621
  ARM_REG_S1 = 87,
622
  ARM_REG_S2 = 88,
623
  ARM_REG_S3 = 89,
624
  ARM_REG_S4 = 90,
625
  ARM_REG_S5 = 91,
626
  ARM_REG_S6 = 92,
627
  ARM_REG_S7 = 93,
628
  ARM_REG_S8 = 94,
629
  ARM_REG_S9 = 95,
630
  ARM_REG_S10 = 96,
631
  ARM_REG_S11 = 97,
632
  ARM_REG_S12 = 98,
633
  ARM_REG_S13 = 99,
634
  ARM_REG_S14 = 100,
635
  ARM_REG_S15 = 101,
636
  ARM_REG_S16 = 102,
637
  ARM_REG_S17 = 103,
638
  ARM_REG_S18 = 104,
639
  ARM_REG_S19 = 105,
640
  ARM_REG_S20 = 106,
641
  ARM_REG_S21 = 107,
642
  ARM_REG_S22 = 108,
643
  ARM_REG_S23 = 109,
644
  ARM_REG_S24 = 110,
645
  ARM_REG_S25 = 111,
646
  ARM_REG_S26 = 112,
647
  ARM_REG_S27 = 113,
648
  ARM_REG_S28 = 114,
649
  ARM_REG_S29 = 115,
650
  ARM_REG_S30 = 116,
651
  ARM_REG_S31 = 117,
652
  ARM_REG_D0_D2 = 118,
653
  ARM_REG_D1_D3 = 119,
654
  ARM_REG_D2_D4 = 120,
655
  ARM_REG_D3_D5 = 121,
656
  ARM_REG_D4_D6 = 122,
657
  ARM_REG_D5_D7 = 123,
658
  ARM_REG_D6_D8 = 124,
659
  ARM_REG_D7_D9 = 125,
660
  ARM_REG_D8_D10 = 126,
661
  ARM_REG_D9_D11 = 127,
662
  ARM_REG_D10_D12 = 128,
663
  ARM_REG_D11_D13 = 129,
664
  ARM_REG_D12_D14 = 130,
665
  ARM_REG_D13_D15 = 131,
666
  ARM_REG_D14_D16 = 132,
667
  ARM_REG_D15_D17 = 133,
668
  ARM_REG_D16_D18 = 134,
669
  ARM_REG_D17_D19 = 135,
670
  ARM_REG_D18_D20 = 136,
671
  ARM_REG_D19_D21 = 137,
672
  ARM_REG_D20_D22 = 138,
673
  ARM_REG_D21_D23 = 139,
674
  ARM_REG_D22_D24 = 140,
675
  ARM_REG_D23_D25 = 141,
676
  ARM_REG_D24_D26 = 142,
677
  ARM_REG_D25_D27 = 143,
678
  ARM_REG_D26_D28 = 144,
679
  ARM_REG_D27_D29 = 145,
680
  ARM_REG_D28_D30 = 146,
681
  ARM_REG_D29_D31 = 147,
682
  ARM_REG_Q0_Q1 = 148,
683
  ARM_REG_Q1_Q2 = 149,
684
  ARM_REG_Q2_Q3 = 150,
685
  ARM_REG_Q3_Q4 = 151,
686
  ARM_REG_Q4_Q5 = 152,
687
  ARM_REG_Q5_Q6 = 153,
688
  ARM_REG_Q6_Q7 = 154,
689
  ARM_REG_Q7_Q8 = 155,
690
  ARM_REG_Q8_Q9 = 156,
691
  ARM_REG_Q9_Q10 = 157,
692
  ARM_REG_Q10_Q11 = 158,
693
  ARM_REG_Q11_Q12 = 159,
694
  ARM_REG_Q12_Q13 = 160,
695
  ARM_REG_Q13_Q14 = 161,
696
  ARM_REG_Q14_Q15 = 162,
697
  ARM_REG_Q0_Q1_Q2_Q3 = 163,
698
  ARM_REG_Q1_Q2_Q3_Q4 = 164,
699
  ARM_REG_Q2_Q3_Q4_Q5 = 165,
700
  ARM_REG_Q3_Q4_Q5_Q6 = 166,
701
  ARM_REG_Q4_Q5_Q6_Q7 = 167,
702
  ARM_REG_Q5_Q6_Q7_Q8 = 168,
703
  ARM_REG_Q6_Q7_Q8_Q9 = 169,
704
  ARM_REG_Q7_Q8_Q9_Q10 = 170,
705
  ARM_REG_Q8_Q9_Q10_Q11 = 171,
706
  ARM_REG_Q9_Q10_Q11_Q12 = 172,
707
  ARM_REG_Q10_Q11_Q12_Q13 = 173,
708
  ARM_REG_Q11_Q12_Q13_Q14 = 174,
709
  ARM_REG_Q12_Q13_Q14_Q15 = 175,
710
  ARM_REG_R0_R1 = 176,
711
  ARM_REG_R2_R3 = 177,
712
  ARM_REG_R4_R5 = 178,
713
  ARM_REG_R6_R7 = 179,
714
  ARM_REG_R8_R9 = 180,
715
  ARM_REG_R10_R11 = 181,
716
  ARM_REG_R12_SP = 182,
717
  ARM_REG_D0_D1_D2 = 183,
718
  ARM_REG_D1_D2_D3 = 184,
719
  ARM_REG_D2_D3_D4 = 185,
720
  ARM_REG_D3_D4_D5 = 186,
721
  ARM_REG_D4_D5_D6 = 187,
722
  ARM_REG_D5_D6_D7 = 188,
723
  ARM_REG_D6_D7_D8 = 189,
724
  ARM_REG_D7_D8_D9 = 190,
725
  ARM_REG_D8_D9_D10 = 191,
726
  ARM_REG_D9_D10_D11 = 192,
727
  ARM_REG_D10_D11_D12 = 193,
728
  ARM_REG_D11_D12_D13 = 194,
729
  ARM_REG_D12_D13_D14 = 195,
730
  ARM_REG_D13_D14_D15 = 196,
731
  ARM_REG_D14_D15_D16 = 197,
732
  ARM_REG_D15_D16_D17 = 198,
733
  ARM_REG_D16_D17_D18 = 199,
734
  ARM_REG_D17_D18_D19 = 200,
735
  ARM_REG_D18_D19_D20 = 201,
736
  ARM_REG_D19_D20_D21 = 202,
737
  ARM_REG_D20_D21_D22 = 203,
738
  ARM_REG_D21_D22_D23 = 204,
739
  ARM_REG_D22_D23_D24 = 205,
740
  ARM_REG_D23_D24_D25 = 206,
741
  ARM_REG_D24_D25_D26 = 207,
742
  ARM_REG_D25_D26_D27 = 208,
743
  ARM_REG_D26_D27_D28 = 209,
744
  ARM_REG_D27_D28_D29 = 210,
745
  ARM_REG_D28_D29_D30 = 211,
746
  ARM_REG_D29_D30_D31 = 212,
747
  ARM_REG_D0_D2_D4 = 213,
748
  ARM_REG_D1_D3_D5 = 214,
749
  ARM_REG_D2_D4_D6 = 215,
750
  ARM_REG_D3_D5_D7 = 216,
751
  ARM_REG_D4_D6_D8 = 217,
752
  ARM_REG_D5_D7_D9 = 218,
753
  ARM_REG_D6_D8_D10 = 219,
754
  ARM_REG_D7_D9_D11 = 220,
755
  ARM_REG_D8_D10_D12 = 221,
756
  ARM_REG_D9_D11_D13 = 222,
757
  ARM_REG_D10_D12_D14 = 223,
758
  ARM_REG_D11_D13_D15 = 224,
759
  ARM_REG_D12_D14_D16 = 225,
760
  ARM_REG_D13_D15_D17 = 226,
761
  ARM_REG_D14_D16_D18 = 227,
762
  ARM_REG_D15_D17_D19 = 228,
763
  ARM_REG_D16_D18_D20 = 229,
764
  ARM_REG_D17_D19_D21 = 230,
765
  ARM_REG_D18_D20_D22 = 231,
766
  ARM_REG_D19_D21_D23 = 232,
767
  ARM_REG_D20_D22_D24 = 233,
768
  ARM_REG_D21_D23_D25 = 234,
769
  ARM_REG_D22_D24_D26 = 235,
770
  ARM_REG_D23_D25_D27 = 236,
771
  ARM_REG_D24_D26_D28 = 237,
772
  ARM_REG_D25_D27_D29 = 238,
773
  ARM_REG_D26_D28_D30 = 239,
774
  ARM_REG_D27_D29_D31 = 240,
775
  ARM_REG_D0_D2_D4_D6 = 241,
776
  ARM_REG_D1_D3_D5_D7 = 242,
777
  ARM_REG_D2_D4_D6_D8 = 243,
778
  ARM_REG_D3_D5_D7_D9 = 244,
779
  ARM_REG_D4_D6_D8_D10 = 245,
780
  ARM_REG_D5_D7_D9_D11 = 246,
781
  ARM_REG_D6_D8_D10_D12 = 247,
782
  ARM_REG_D7_D9_D11_D13 = 248,
783
  ARM_REG_D8_D10_D12_D14 = 249,
784
  ARM_REG_D9_D11_D13_D15 = 250,
785
  ARM_REG_D10_D12_D14_D16 = 251,
786
  ARM_REG_D11_D13_D15_D17 = 252,
787
  ARM_REG_D12_D14_D16_D18 = 253,
788
  ARM_REG_D13_D15_D17_D19 = 254,
789
  ARM_REG_D14_D16_D18_D20 = 255,
790
  ARM_REG_D15_D17_D19_D21 = 256,
791
  ARM_REG_D16_D18_D20_D22 = 257,
792
  ARM_REG_D17_D19_D21_D23 = 258,
793
  ARM_REG_D18_D20_D22_D24 = 259,
794
  ARM_REG_D19_D21_D23_D25 = 260,
795
  ARM_REG_D20_D22_D24_D26 = 261,
796
  ARM_REG_D21_D23_D25_D27 = 262,
797
  ARM_REG_D22_D24_D26_D28 = 263,
798
  ARM_REG_D23_D25_D27_D29 = 264,
799
  ARM_REG_D24_D26_D28_D30 = 265,
800
  ARM_REG_D25_D27_D29_D31 = 266,
801
  ARM_REG_D1_D2 = 267,
802
  ARM_REG_D3_D4 = 268,
803
  ARM_REG_D5_D6 = 269,
804
  ARM_REG_D7_D8 = 270,
805
  ARM_REG_D9_D10 = 271,
806
  ARM_REG_D11_D12 = 272,
807
  ARM_REG_D13_D14 = 273,
808
  ARM_REG_D15_D16 = 274,
809
  ARM_REG_D17_D18 = 275,
810
  ARM_REG_D19_D20 = 276,
811
  ARM_REG_D21_D22 = 277,
812
  ARM_REG_D23_D24 = 278,
813
  ARM_REG_D25_D26 = 279,
814
  ARM_REG_D27_D28 = 280,
815
  ARM_REG_D29_D30 = 281,
816
  ARM_REG_D1_D2_D3_D4 = 282,
817
  ARM_REG_D3_D4_D5_D6 = 283,
818
  ARM_REG_D5_D6_D7_D8 = 284,
819
  ARM_REG_D7_D8_D9_D10 = 285,
820
  ARM_REG_D9_D10_D11_D12 = 286,
821
  ARM_REG_D11_D12_D13_D14 = 287,
822
  ARM_REG_D13_D14_D15_D16 = 288,
823
  ARM_REG_D15_D16_D17_D18 = 289,
824
  ARM_REG_D17_D18_D19_D20 = 290,
825
  ARM_REG_D19_D20_D21_D22 = 291,
826
  ARM_REG_D21_D22_D23_D24 = 292,
827
  ARM_REG_D23_D24_D25_D26 = 293,
828
  ARM_REG_D25_D26_D27_D28 = 294,
829
  ARM_REG_D27_D28_D29_D30 = 295,
830
  ARM_REG_ENDING, // 296
831
832
  // clang-format on
833
  // generated content <ARMGenCSRegEnum.inc> end
834
835
  // alias registers
836
  ARM_REG_R13 = ARM_REG_SP,
837
  ARM_REG_R14 = ARM_REG_LR,
838
  ARM_REG_R15 = ARM_REG_PC,
839
840
  ARM_REG_SB = ARM_REG_R9,
841
  ARM_REG_SL = ARM_REG_R10,
842
  ARM_REG_FP = ARM_REG_R11,
843
  ARM_REG_IP = ARM_REG_R12,
844
} arm_reg;
845
846
/// Instruction's operand referring to memory
847
/// This is associated with ARM_OP_MEM operand type above
848
typedef struct arm_op_mem {
849
  arm_reg base; ///< base register
850
  arm_reg index;  ///< index register
851
  int scale;  ///< scale for index register. Can be 1 if index reg is added, -1 if it is subtracted or 0 if unset.
852
  int disp; ///< displacement/offset value
853
  unsigned align; ///< Alignment of base register. 0 If not set.
854
} arm_op_mem;
855
856
typedef struct {
857
  arm_sysop_reg reg; ///< The system or banked register.
858
  arm_spsr_cpsr_bits psr_bits; ///< SPSR/CPSR bits.
859
  uint16_t sysm; ///< Raw SYSm field. UINT16_MAX if unset.
860
  uint8_t msr_mask; ///< Mask of MSR instructions. UINT8_MAX if invalid.
861
} arm_sysop;
862
863
/// Instruction operand
864
typedef struct cs_arm_op {
865
  int vector_index; ///< Vector Index for some vector operands (or -1 if irrelevant)
866
867
  struct {
868
    arm_shifter type; ///< The shift type
869
    unsigned int value; ///< The amount to shift. If shift.type > ARM_SFT_REG, the value must be interpreted as register id.
870
  } shift;
871
872
  arm_op_type type; ///< operand type
873
874
  union {
875
    int reg;  ///< register value for REG
876
    arm_sysop sysop;  ///< System operand.
877
    int64_t imm;      ///< immediate value for C-IMM, P-IMM or IMM operand
878
    int pred;     ///< Predicate operand value.
879
    double fp;      ///< floating point value for FP operand
880
    arm_op_mem mem;   ///< base/index/scale/disp value for MEM operand
881
    arm_setend_type setend; ///< SETEND instruction's operand type
882
  };
883
884
  /// in some instructions, an operand can be subtracted or added to
885
  /// the base register,
886
  /// if TRUE, this operand is subtracted. otherwise, it is added.
887
  bool subtracted;
888
889
  /// How is this operand accessed? (READ, WRITE or READ|WRITE)
890
  /// This field is combined of cs_ac_type.
891
  /// NOTE: this field is irrelevant if engine is compiled in DIET mode.
892
  cs_ac_type access;
893
894
  /// Neon lane index for NEON instructions (or -1 if irrelevant)
895
  int8_t neon_lane;
896
} cs_arm_op;
897
898
typedef struct {
899
  cs_ac_type mem_acc; ///< CGI memory access according to mayLoad and mayStore
900
} arm_suppl_info;
901
902
#define NUM_ARM_OPS 36
903
904
/// Instruction structure
905
typedef struct cs_arm {
906
  bool usermode;  ///< User-mode registers to be loaded (for LDM/STM instructions)
907
  int vector_size;  ///< Scalar size for vector instructions
908
  arm_vectordata_type vector_data; ///< Data type for elements of vector instructions
909
  arm_cpsmode_type cps_mode;  ///< CPS mode for CPS instruction
910
  arm_cpsflag_type cps_flag;  ///< CPS mode for CPS instruction
911
  ARMCC_CondCodes cc;   ///< conditional code for this insn
912
  ARMVCC_VPTCodes vcc;  ///< Vector conditional code for this instruction.
913
  bool update_flags;  ///< does this insn update flags?
914
  bool post_index;  ///< only set if writeback is 'True', if 'False' pre-index, otherwise post.
915
  arm_mem_bo_opt mem_barrier; ///< Option for some memory barrier instructions
916
  // Check ARM_PredBlockMask for encoding details.
917
  uint8_t /* ARM_PredBlockMask */ pred_mask;  ///< Used by IT/VPT block instructions.
918
  /// Number of operands of this instruction,
919
  /// or 0 when instruction has no operand.
920
  uint8_t op_count;
921
922
  cs_arm_op operands[NUM_ARM_OPS];  ///< operands for this instruction.
923
} cs_arm;
924
925
/// ARM instruction
926
typedef enum arm_insn {
927
  // generated content <ARMGenCSInsnEnum.inc> begin
928
  // clang-format off
929
930
  ARM_INS_INVALID,
931
  ARM_INS_ASR,
932
  ARM_INS_IT,
933
  ARM_INS_LDRBT,
934
  ARM_INS_LDR,
935
  ARM_INS_LDRHT,
936
  ARM_INS_LDRSBT,
937
  ARM_INS_LDRSHT,
938
  ARM_INS_LDRT,
939
  ARM_INS_LSL,
940
  ARM_INS_LSR,
941
  ARM_INS_ROR,
942
  ARM_INS_RRX,
943
  ARM_INS_STRBT,
944
  ARM_INS_STRT,
945
  ARM_INS_VLD1,
946
  ARM_INS_VLD2,
947
  ARM_INS_VLD3,
948
  ARM_INS_VLD4,
949
  ARM_INS_VST1,
950
  ARM_INS_VST2,
951
  ARM_INS_VST3,
952
  ARM_INS_VST4,
953
  ARM_INS_LDRB,
954
  ARM_INS_LDRH,
955
  ARM_INS_LDRSB,
956
  ARM_INS_LDRSH,
957
  ARM_INS_MOVS,
958
  ARM_INS_MOV,
959
  ARM_INS_STRB,
960
  ARM_INS_STRH,
961
  ARM_INS_STR,
962
  ARM_INS_ADC,
963
  ARM_INS_ADD,
964
  ARM_INS_ADR,
965
  ARM_INS_AESD,
966
  ARM_INS_AESE,
967
  ARM_INS_AESIMC,
968
  ARM_INS_AESMC,
969
  ARM_INS_AND,
970
  ARM_INS_VDOT,
971
  ARM_INS_VCVT,
972
  ARM_INS_VCVTB,
973
  ARM_INS_VCVTT,
974
  ARM_INS_BFC,
975
  ARM_INS_BFI,
976
  ARM_INS_BIC,
977
  ARM_INS_BKPT,
978
  ARM_INS_BL,
979
  ARM_INS_BLX,
980
  ARM_INS_BX,
981
  ARM_INS_BXJ,
982
  ARM_INS_B,
983
  ARM_INS_CX1,
984
  ARM_INS_CX1A,
985
  ARM_INS_CX1D,
986
  ARM_INS_CX1DA,
987
  ARM_INS_CX2,
988
  ARM_INS_CX2A,
989
  ARM_INS_CX2D,
990
  ARM_INS_CX2DA,
991
  ARM_INS_CX3,
992
  ARM_INS_CX3A,
993
  ARM_INS_CX3D,
994
  ARM_INS_CX3DA,
995
  ARM_INS_VCX1A,
996
  ARM_INS_VCX1,
997
  ARM_INS_VCX2A,
998
  ARM_INS_VCX2,
999
  ARM_INS_VCX3A,
1000
  ARM_INS_VCX3,
1001
  ARM_INS_CDP,
1002
  ARM_INS_CDP2,
1003
  ARM_INS_CLREX,
1004
  ARM_INS_CLZ,
1005
  ARM_INS_CMN,
1006
  ARM_INS_CMP,
1007
  ARM_INS_CPS,
1008
  ARM_INS_CRC32B,
1009
  ARM_INS_CRC32CB,
1010
  ARM_INS_CRC32CH,
1011
  ARM_INS_CRC32CW,
1012
  ARM_INS_CRC32H,
1013
  ARM_INS_CRC32W,
1014
  ARM_INS_DBG,
1015
  ARM_INS_DMB,
1016
  ARM_INS_DSB,
1017
  ARM_INS_EOR,
1018
  ARM_INS_ERET,
1019
  ARM_INS_VMOV,
1020
  ARM_INS_FLDMDBX,
1021
  ARM_INS_FLDMIAX,
1022
  ARM_INS_VMRS,
1023
  ARM_INS_FSTMDBX,
1024
  ARM_INS_FSTMIAX,
1025
  ARM_INS_HINT,
1026
  ARM_INS_HLT,
1027
  ARM_INS_HVC,
1028
  ARM_INS_ISB,
1029
  ARM_INS_LDA,
1030
  ARM_INS_LDAB,
1031
  ARM_INS_LDAEX,
1032
  ARM_INS_LDAEXB,
1033
  ARM_INS_LDAEXD,
1034
  ARM_INS_LDAEXH,
1035
  ARM_INS_LDAH,
1036
  ARM_INS_LDC2L,
1037
  ARM_INS_LDC2,
1038
  ARM_INS_LDCL,
1039
  ARM_INS_LDC,
1040
  ARM_INS_LDMDA,
1041
  ARM_INS_LDMDB,
1042
  ARM_INS_LDM,
1043
  ARM_INS_LDMIB,
1044
  ARM_INS_LDRD,
1045
  ARM_INS_LDREX,
1046
  ARM_INS_LDREXB,
1047
  ARM_INS_LDREXD,
1048
  ARM_INS_LDREXH,
1049
  ARM_INS_MCR,
1050
  ARM_INS_MCR2,
1051
  ARM_INS_MCRR,
1052
  ARM_INS_MCRR2,
1053
  ARM_INS_MLA,
1054
  ARM_INS_MLS,
1055
  ARM_INS_MOVT,
1056
  ARM_INS_MOVW,
1057
  ARM_INS_MRC,
1058
  ARM_INS_MRC2,
1059
  ARM_INS_MRRC,
1060
  ARM_INS_MRRC2,
1061
  ARM_INS_MRS,
1062
  ARM_INS_MSR,
1063
  ARM_INS_MUL,
1064
  ARM_INS_ASRL,
1065
  ARM_INS_DLSTP,
1066
  ARM_INS_LCTP,
1067
  ARM_INS_LETP,
1068
  ARM_INS_LSLL,
1069
  ARM_INS_LSRL,
1070
  ARM_INS_SQRSHR,
1071
  ARM_INS_SQRSHRL,
1072
  ARM_INS_SQSHL,
1073
  ARM_INS_SQSHLL,
1074
  ARM_INS_SRSHR,
1075
  ARM_INS_SRSHRL,
1076
  ARM_INS_UQRSHL,
1077
  ARM_INS_UQRSHLL,
1078
  ARM_INS_UQSHL,
1079
  ARM_INS_UQSHLL,
1080
  ARM_INS_URSHR,
1081
  ARM_INS_URSHRL,
1082
  ARM_INS_VABAV,
1083
  ARM_INS_VABD,
1084
  ARM_INS_VABS,
1085
  ARM_INS_VADC,
1086
  ARM_INS_VADCI,
1087
  ARM_INS_VADDLVA,
1088
  ARM_INS_VADDLV,
1089
  ARM_INS_VADDVA,
1090
  ARM_INS_VADDV,
1091
  ARM_INS_VADD,
1092
  ARM_INS_VAND,
1093
  ARM_INS_VBIC,
1094
  ARM_INS_VBRSR,
1095
  ARM_INS_VCADD,
1096
  ARM_INS_VCLS,
1097
  ARM_INS_VCLZ,
1098
  ARM_INS_VCMLA,
1099
  ARM_INS_VCMP,
1100
  ARM_INS_VCMUL,
1101
  ARM_INS_VCTP,
1102
  ARM_INS_VCVTA,
1103
  ARM_INS_VCVTM,
1104
  ARM_INS_VCVTN,
1105
  ARM_INS_VCVTP,
1106
  ARM_INS_VDDUP,
1107
  ARM_INS_VDUP,
1108
  ARM_INS_VDWDUP,
1109
  ARM_INS_VEOR,
1110
  ARM_INS_VFMAS,
1111
  ARM_INS_VFMA,
1112
  ARM_INS_VFMS,
1113
  ARM_INS_VHADD,
1114
  ARM_INS_VHCADD,
1115
  ARM_INS_VHSUB,
1116
  ARM_INS_VIDUP,
1117
  ARM_INS_VIWDUP,
1118
  ARM_INS_VLD20,
1119
  ARM_INS_VLD21,
1120
  ARM_INS_VLD40,
1121
  ARM_INS_VLD41,
1122
  ARM_INS_VLD42,
1123
  ARM_INS_VLD43,
1124
  ARM_INS_VLDRB,
1125
  ARM_INS_VLDRD,
1126
  ARM_INS_VLDRH,
1127
  ARM_INS_VLDRW,
1128
  ARM_INS_VMAXAV,
1129
  ARM_INS_VMAXA,
1130
  ARM_INS_VMAXNMAV,
1131
  ARM_INS_VMAXNMA,
1132
  ARM_INS_VMAXNMV,
1133
  ARM_INS_VMAXNM,
1134
  ARM_INS_VMAXV,
1135
  ARM_INS_VMAX,
1136
  ARM_INS_VMINAV,
1137
  ARM_INS_VMINA,
1138
  ARM_INS_VMINNMAV,
1139
  ARM_INS_VMINNMA,
1140
  ARM_INS_VMINNMV,
1141
  ARM_INS_VMINNM,
1142
  ARM_INS_VMINV,
1143
  ARM_INS_VMIN,
1144
  ARM_INS_VMLADAVA,
1145
  ARM_INS_VMLADAVAX,
1146
  ARM_INS_VMLADAV,
1147
  ARM_INS_VMLADAVX,
1148
  ARM_INS_VMLALDAVA,
1149
  ARM_INS_VMLALDAVAX,
1150
  ARM_INS_VMLALDAV,
1151
  ARM_INS_VMLALDAVX,
1152
  ARM_INS_VMLAS,
1153
  ARM_INS_VMLA,
1154
  ARM_INS_VMLSDAVA,
1155
  ARM_INS_VMLSDAVAX,
1156
  ARM_INS_VMLSDAV,
1157
  ARM_INS_VMLSDAVX,
1158
  ARM_INS_VMLSLDAVA,
1159
  ARM_INS_VMLSLDAVAX,
1160
  ARM_INS_VMLSLDAV,
1161
  ARM_INS_VMLSLDAVX,
1162
  ARM_INS_VMOVLB,
1163
  ARM_INS_VMOVLT,
1164
  ARM_INS_VMOVNB,
1165
  ARM_INS_VMOVNT,
1166
  ARM_INS_VMULH,
1167
  ARM_INS_VMULLB,
1168
  ARM_INS_VMULLT,
1169
  ARM_INS_VMUL,
1170
  ARM_INS_VMVN,
1171
  ARM_INS_VNEG,
1172
  ARM_INS_VORN,
1173
  ARM_INS_VORR,
1174
  ARM_INS_VPNOT,
1175
  ARM_INS_VPSEL,
1176
  ARM_INS_VPST,
1177
  ARM_INS_VPT,
1178
  ARM_INS_VQABS,
1179
  ARM_INS_VQADD,
1180
  ARM_INS_VQDMLADHX,
1181
  ARM_INS_VQDMLADH,
1182
  ARM_INS_VQDMLAH,
1183
  ARM_INS_VQDMLASH,
1184
  ARM_INS_VQDMLSDHX,
1185
  ARM_INS_VQDMLSDH,
1186
  ARM_INS_VQDMULH,
1187
  ARM_INS_VQDMULLB,
1188
  ARM_INS_VQDMULLT,
1189
  ARM_INS_VQMOVNB,
1190
  ARM_INS_VQMOVNT,
1191
  ARM_INS_VQMOVUNB,
1192
  ARM_INS_VQMOVUNT,
1193
  ARM_INS_VQNEG,
1194
  ARM_INS_VQRDMLADHX,
1195
  ARM_INS_VQRDMLADH,
1196
  ARM_INS_VQRDMLAH,
1197
  ARM_INS_VQRDMLASH,
1198
  ARM_INS_VQRDMLSDHX,
1199
  ARM_INS_VQRDMLSDH,
1200
  ARM_INS_VQRDMULH,
1201
  ARM_INS_VQRSHL,
1202
  ARM_INS_VQRSHRNB,
1203
  ARM_INS_VQRSHRNT,
1204
  ARM_INS_VQRSHRUNB,
1205
  ARM_INS_VQRSHRUNT,
1206
  ARM_INS_VQSHLU,
1207
  ARM_INS_VQSHL,
1208
  ARM_INS_VQSHRNB,
1209
  ARM_INS_VQSHRNT,
1210
  ARM_INS_VQSHRUNB,
1211
  ARM_INS_VQSHRUNT,
1212
  ARM_INS_VQSUB,
1213
  ARM_INS_VREV16,
1214
  ARM_INS_VREV32,
1215
  ARM_INS_VREV64,
1216
  ARM_INS_VRHADD,
1217
  ARM_INS_VRINTA,
1218
  ARM_INS_VRINTM,
1219
  ARM_INS_VRINTN,
1220
  ARM_INS_VRINTP,
1221
  ARM_INS_VRINTX,
1222
  ARM_INS_VRINTZ,
1223
  ARM_INS_VRMLALDAVHA,
1224
  ARM_INS_VRMLALDAVHAX,
1225
  ARM_INS_VRMLALDAVH,
1226
  ARM_INS_VRMLALDAVHX,
1227
  ARM_INS_VRMLSLDAVHA,
1228
  ARM_INS_VRMLSLDAVHAX,
1229
  ARM_INS_VRMLSLDAVH,
1230
  ARM_INS_VRMLSLDAVHX,
1231
  ARM_INS_VRMULH,
1232
  ARM_INS_VRSHL,
1233
  ARM_INS_VRSHRNB,
1234
  ARM_INS_VRSHRNT,
1235
  ARM_INS_VRSHR,
1236
  ARM_INS_VSBC,
1237
  ARM_INS_VSBCI,
1238
  ARM_INS_VSHLC,
1239
  ARM_INS_VSHLLB,
1240
  ARM_INS_VSHLLT,
1241
  ARM_INS_VSHL,
1242
  ARM_INS_VSHRNB,
1243
  ARM_INS_VSHRNT,
1244
  ARM_INS_VSHR,
1245
  ARM_INS_VSLI,
1246
  ARM_INS_VSRI,
1247
  ARM_INS_VST20,
1248
  ARM_INS_VST21,
1249
  ARM_INS_VST40,
1250
  ARM_INS_VST41,
1251
  ARM_INS_VST42,
1252
  ARM_INS_VST43,
1253
  ARM_INS_VSTRB,
1254
  ARM_INS_VSTRD,
1255
  ARM_INS_VSTRH,
1256
  ARM_INS_VSTRW,
1257
  ARM_INS_VSUB,
1258
  ARM_INS_WLSTP,
1259
  ARM_INS_MVN,
1260
  ARM_INS_ORR,
1261
  ARM_INS_PKHBT,
1262
  ARM_INS_PKHTB,
1263
  ARM_INS_PLDW,
1264
  ARM_INS_PLD,
1265
  ARM_INS_PLI,
1266
  ARM_INS_QADD,
1267
  ARM_INS_QADD16,
1268
  ARM_INS_QADD8,
1269
  ARM_INS_QASX,
1270
  ARM_INS_QDADD,
1271
  ARM_INS_QDSUB,
1272
  ARM_INS_QSAX,
1273
  ARM_INS_QSUB,
1274
  ARM_INS_QSUB16,
1275
  ARM_INS_QSUB8,
1276
  ARM_INS_RBIT,
1277
  ARM_INS_REV,
1278
  ARM_INS_REV16,
1279
  ARM_INS_REVSH,
1280
  ARM_INS_RFEDA,
1281
  ARM_INS_RFEDB,
1282
  ARM_INS_RFEIA,
1283
  ARM_INS_RFEIB,
1284
  ARM_INS_RSB,
1285
  ARM_INS_RSC,
1286
  ARM_INS_SADD16,
1287
  ARM_INS_SADD8,
1288
  ARM_INS_SASX,
1289
  ARM_INS_SB,
1290
  ARM_INS_SBC,
1291
  ARM_INS_SBFX,
1292
  ARM_INS_SDIV,
1293
  ARM_INS_SEL,
1294
  ARM_INS_SETEND,
1295
  ARM_INS_SETPAN,
1296
  ARM_INS_SHA1C,
1297
  ARM_INS_SHA1H,
1298
  ARM_INS_SHA1M,
1299
  ARM_INS_SHA1P,
1300
  ARM_INS_SHA1SU0,
1301
  ARM_INS_SHA1SU1,
1302
  ARM_INS_SHA256H,
1303
  ARM_INS_SHA256H2,
1304
  ARM_INS_SHA256SU0,
1305
  ARM_INS_SHA256SU1,
1306
  ARM_INS_SHADD16,
1307
  ARM_INS_SHADD8,
1308
  ARM_INS_SHASX,
1309
  ARM_INS_SHSAX,
1310
  ARM_INS_SHSUB16,
1311
  ARM_INS_SHSUB8,
1312
  ARM_INS_SMC,
1313
  ARM_INS_SMLABB,
1314
  ARM_INS_SMLABT,
1315
  ARM_INS_SMLAD,
1316
  ARM_INS_SMLADX,
1317
  ARM_INS_SMLAL,
1318
  ARM_INS_SMLALBB,
1319
  ARM_INS_SMLALBT,
1320
  ARM_INS_SMLALD,
1321
  ARM_INS_SMLALDX,
1322
  ARM_INS_SMLALTB,
1323
  ARM_INS_SMLALTT,
1324
  ARM_INS_SMLATB,
1325
  ARM_INS_SMLATT,
1326
  ARM_INS_SMLAWB,
1327
  ARM_INS_SMLAWT,
1328
  ARM_INS_SMLSD,
1329
  ARM_INS_SMLSDX,
1330
  ARM_INS_SMLSLD,
1331
  ARM_INS_SMLSLDX,
1332
  ARM_INS_SMMLA,
1333
  ARM_INS_SMMLAR,
1334
  ARM_INS_SMMLS,
1335
  ARM_INS_SMMLSR,
1336
  ARM_INS_SMMUL,
1337
  ARM_INS_SMMULR,
1338
  ARM_INS_SMUAD,
1339
  ARM_INS_SMUADX,
1340
  ARM_INS_SMULBB,
1341
  ARM_INS_SMULBT,
1342
  ARM_INS_SMULL,
1343
  ARM_INS_SMULTB,
1344
  ARM_INS_SMULTT,
1345
  ARM_INS_SMULWB,
1346
  ARM_INS_SMULWT,
1347
  ARM_INS_SMUSD,
1348
  ARM_INS_SMUSDX,
1349
  ARM_INS_SRSDA,
1350
  ARM_INS_SRSDB,
1351
  ARM_INS_SRSIA,
1352
  ARM_INS_SRSIB,
1353
  ARM_INS_SSAT,
1354
  ARM_INS_SSAT16,
1355
  ARM_INS_SSAX,
1356
  ARM_INS_SSUB16,
1357
  ARM_INS_SSUB8,
1358
  ARM_INS_STC2L,
1359
  ARM_INS_STC2,
1360
  ARM_INS_STCL,
1361
  ARM_INS_STC,
1362
  ARM_INS_STL,
1363
  ARM_INS_STLB,
1364
  ARM_INS_STLEX,
1365
  ARM_INS_STLEXB,
1366
  ARM_INS_STLEXD,
1367
  ARM_INS_STLEXH,
1368
  ARM_INS_STLH,
1369
  ARM_INS_STMDA,
1370
  ARM_INS_STMDB,
1371
  ARM_INS_STM,
1372
  ARM_INS_STMIB,
1373
  ARM_INS_STRD,
1374
  ARM_INS_STREX,
1375
  ARM_INS_STREXB,
1376
  ARM_INS_STREXD,
1377
  ARM_INS_STREXH,
1378
  ARM_INS_STRHT,
1379
  ARM_INS_SUB,
1380
  ARM_INS_SVC,
1381
  ARM_INS_SWP,
1382
  ARM_INS_SWPB,
1383
  ARM_INS_SXTAB,
1384
  ARM_INS_SXTAB16,
1385
  ARM_INS_SXTAH,
1386
  ARM_INS_SXTB,
1387
  ARM_INS_SXTB16,
1388
  ARM_INS_SXTH,
1389
  ARM_INS_TEQ,
1390
  ARM_INS_TRAP,
1391
  ARM_INS_TSB,
1392
  ARM_INS_TST,
1393
  ARM_INS_UADD16,
1394
  ARM_INS_UADD8,
1395
  ARM_INS_UASX,
1396
  ARM_INS_UBFX,
1397
  ARM_INS_UDF,
1398
  ARM_INS_UDIV,
1399
  ARM_INS_UHADD16,
1400
  ARM_INS_UHADD8,
1401
  ARM_INS_UHASX,
1402
  ARM_INS_UHSAX,
1403
  ARM_INS_UHSUB16,
1404
  ARM_INS_UHSUB8,
1405
  ARM_INS_UMAAL,
1406
  ARM_INS_UMLAL,
1407
  ARM_INS_UMULL,
1408
  ARM_INS_UQADD16,
1409
  ARM_INS_UQADD8,
1410
  ARM_INS_UQASX,
1411
  ARM_INS_UQSAX,
1412
  ARM_INS_UQSUB16,
1413
  ARM_INS_UQSUB8,
1414
  ARM_INS_USAD8,
1415
  ARM_INS_USADA8,
1416
  ARM_INS_USAT,
1417
  ARM_INS_USAT16,
1418
  ARM_INS_USAX,
1419
  ARM_INS_USUB16,
1420
  ARM_INS_USUB8,
1421
  ARM_INS_UXTAB,
1422
  ARM_INS_UXTAB16,
1423
  ARM_INS_UXTAH,
1424
  ARM_INS_UXTB,
1425
  ARM_INS_UXTB16,
1426
  ARM_INS_UXTH,
1427
  ARM_INS_VABAL,
1428
  ARM_INS_VABA,
1429
  ARM_INS_VABDL,
1430
  ARM_INS_VACGE,
1431
  ARM_INS_VACGT,
1432
  ARM_INS_VADDHN,
1433
  ARM_INS_VADDL,
1434
  ARM_INS_VADDW,
1435
  ARM_INS_VFMAB,
1436
  ARM_INS_VFMAT,
1437
  ARM_INS_VBIF,
1438
  ARM_INS_VBIT,
1439
  ARM_INS_VBSL,
1440
  ARM_INS_VCEQ,
1441
  ARM_INS_VCGE,
1442
  ARM_INS_VCGT,
1443
  ARM_INS_VCLE,
1444
  ARM_INS_VCLT,
1445
  ARM_INS_VCMPE,
1446
  ARM_INS_VCNT,
1447
  ARM_INS_VDIV,
1448
  ARM_INS_VEXT,
1449
  ARM_INS_VFMAL,
1450
  ARM_INS_VFMSL,
1451
  ARM_INS_VFNMA,
1452
  ARM_INS_VFNMS,
1453
  ARM_INS_VINS,
1454
  ARM_INS_VJCVT,
1455
  ARM_INS_VLDMDB,
1456
  ARM_INS_VLDMIA,
1457
  ARM_INS_VLDR,
1458
  ARM_INS_VLLDM,
1459
  ARM_INS_VLSTM,
1460
  ARM_INS_VMLAL,
1461
  ARM_INS_VMLS,
1462
  ARM_INS_VMLSL,
1463
  ARM_INS_VMMLA,
1464
  ARM_INS_VMOVX,
1465
  ARM_INS_VMOVL,
1466
  ARM_INS_VMOVN,
1467
  ARM_INS_VMSR,
1468
  ARM_INS_VMULL,
1469
  ARM_INS_VNMLA,
1470
  ARM_INS_VNMLS,
1471
  ARM_INS_VNMUL,
1472
  ARM_INS_VPADAL,
1473
  ARM_INS_VPADDL,
1474
  ARM_INS_VPADD,
1475
  ARM_INS_VPMAX,
1476
  ARM_INS_VPMIN,
1477
  ARM_INS_VQDMLAL,
1478
  ARM_INS_VQDMLSL,
1479
  ARM_INS_VQDMULL,
1480
  ARM_INS_VQMOVUN,
1481
  ARM_INS_VQMOVN,
1482
  ARM_INS_VQRDMLSH,
1483
  ARM_INS_VQRSHRN,
1484
  ARM_INS_VQRSHRUN,
1485
  ARM_INS_VQSHRN,
1486
  ARM_INS_VQSHRUN,
1487
  ARM_INS_VRADDHN,
1488
  ARM_INS_VRECPE,
1489
  ARM_INS_VRECPS,
1490
  ARM_INS_VRINTR,
1491
  ARM_INS_VRSHRN,
1492
  ARM_INS_VRSQRTE,
1493
  ARM_INS_VRSQRTS,
1494
  ARM_INS_VRSRA,
1495
  ARM_INS_VRSUBHN,
1496
  ARM_INS_VSCCLRM,
1497
  ARM_INS_VSDOT,
1498
  ARM_INS_VSELEQ,
1499
  ARM_INS_VSELGE,
1500
  ARM_INS_VSELGT,
1501
  ARM_INS_VSELVS,
1502
  ARM_INS_VSHLL,
1503
  ARM_INS_VSHRN,
1504
  ARM_INS_VSMMLA,
1505
  ARM_INS_VSQRT,
1506
  ARM_INS_VSRA,
1507
  ARM_INS_VSTMDB,
1508
  ARM_INS_VSTMIA,
1509
  ARM_INS_VSTR,
1510
  ARM_INS_VSUBHN,
1511
  ARM_INS_VSUBL,
1512
  ARM_INS_VSUBW,
1513
  ARM_INS_VSUDOT,
1514
  ARM_INS_VSWP,
1515
  ARM_INS_VTBL,
1516
  ARM_INS_VTBX,
1517
  ARM_INS_VCVTR,
1518
  ARM_INS_VTRN,
1519
  ARM_INS_VTST,
1520
  ARM_INS_VUDOT,
1521
  ARM_INS_VUMMLA,
1522
  ARM_INS_VUSDOT,
1523
  ARM_INS_VUSMMLA,
1524
  ARM_INS_VUZP,
1525
  ARM_INS_VZIP,
1526
  ARM_INS_ADDW,
1527
  ARM_INS_AUT,
1528
  ARM_INS_AUTG,
1529
  ARM_INS_BFL,
1530
  ARM_INS_BFLX,
1531
  ARM_INS_BF,
1532
  ARM_INS_BFCSEL,
1533
  ARM_INS_BFX,
1534
  ARM_INS_BTI,
1535
  ARM_INS_BXAUT,
1536
  ARM_INS_CLRM,
1537
  ARM_INS_CSEL,
1538
  ARM_INS_CSINC,
1539
  ARM_INS_CSINV,
1540
  ARM_INS_CSNEG,
1541
  ARM_INS_DCPS1,
1542
  ARM_INS_DCPS2,
1543
  ARM_INS_DCPS3,
1544
  ARM_INS_DLS,
1545
  ARM_INS_LE,
1546
  ARM_INS_ORN,
1547
  ARM_INS_PAC,
1548
  ARM_INS_PACBTI,
1549
  ARM_INS_PACG,
1550
  ARM_INS_SG,
1551
  ARM_INS_SUBS,
1552
  ARM_INS_SUBW,
1553
  ARM_INS_TBB,
1554
  ARM_INS_TBH,
1555
  ARM_INS_TT,
1556
  ARM_INS_TTA,
1557
  ARM_INS_TTAT,
1558
  ARM_INS_TTT,
1559
  ARM_INS_WLS,
1560
  ARM_INS_BLXNS,
1561
  ARM_INS_BXNS,
1562
  ARM_INS_CBNZ,
1563
  ARM_INS_CBZ,
1564
  ARM_INS_POP,
1565
  ARM_INS_PUSH,
1566
  ARM_INS___BRKDIV0,
1567
1568
  // clang-format on
1569
  // generated content <ARMGenCSInsnEnum.inc> end
1570
1571
  ARM_INS_ENDING, // <-- mark the end of the list of instructions
1572
1573
  ARM_INS_ALIAS_BEGIN,
1574
  // generated content <ARMGenCSAliasEnum.inc> begin
1575
  // clang-format off
1576
1577
  ARM_INS_ALIAS_VMOV, // Real instr.: ARM_MVE_VORR
1578
  ARM_INS_ALIAS_NOP, // Real instr.: ARM_HINT
1579
  ARM_INS_ALIAS_YIELD, // Real instr.: ARM_HINT
1580
  ARM_INS_ALIAS_WFE, // Real instr.: ARM_HINT
1581
  ARM_INS_ALIAS_WFI, // Real instr.: ARM_HINT
1582
  ARM_INS_ALIAS_SEV, // Real instr.: ARM_HINT
1583
  ARM_INS_ALIAS_SEVL, // Real instr.: ARM_HINT
1584
  ARM_INS_ALIAS_ESB, // Real instr.: ARM_HINT
1585
  ARM_INS_ALIAS_CSDB, // Real instr.: ARM_HINT
1586
  ARM_INS_ALIAS_CLRBHB, // Real instr.: ARM_HINT
1587
  ARM_INS_ALIAS_PACBTI, // Real instr.: ARM_t2HINT
1588
  ARM_INS_ALIAS_BTI, // Real instr.: ARM_t2HINT
1589
  ARM_INS_ALIAS_PAC, // Real instr.: ARM_t2HINT
1590
  ARM_INS_ALIAS_AUT, // Real instr.: ARM_t2HINT
1591
  ARM_INS_ALIAS_SSBB, // Real instr.: ARM_t2DSB
1592
  ARM_INS_ALIAS_PSSBB, // Real instr.: ARM_t2DSB
1593
  ARM_INS_ALIAS_DFB, // Real instr.: ARM_t2DSB
1594
  ARM_INS_ALIAS_CSETM, // Real instr.: ARM_t2CSINV
1595
  ARM_INS_ALIAS_CSET, // Real instr.: ARM_t2CSINC
1596
  ARM_INS_ALIAS_CINC, // Real instr.: ARM_t2CSINC
1597
  ARM_INS_ALIAS_CINV, // Real instr.: ARM_t2CSINV
1598
  ARM_INS_ALIAS_CNEG, // Real instr.: ARM_t2CSNEG
1599
  ARM_INS_ALIAS_VMLAV, // Real instr.: ARM_MVE_VMLADAVs8
1600
  ARM_INS_ALIAS_VMLAVA, // Real instr.: ARM_MVE_VMLADAVas8
1601
  ARM_INS_ALIAS_VRMLALVH, // Real instr.: ARM_MVE_VRMLALDAVHs32
1602
  ARM_INS_ALIAS_VRMLALVHA, // Real instr.: ARM_MVE_VRMLALDAVHas32
1603
  ARM_INS_ALIAS_VMLALV, // Real instr.: ARM_MVE_VMLALDAVs16
1604
  ARM_INS_ALIAS_VMLALVA, // Real instr.: ARM_MVE_VMLALDAVas16
1605
  ARM_INS_ALIAS_VBIC, // Real instr.: ARM_MVE_VBIC
1606
  ARM_INS_ALIAS_VEOR, // Real instr.: ARM_MVE_VEOR
1607
  ARM_INS_ALIAS_VORN, // Real instr.: ARM_MVE_VORN
1608
  ARM_INS_ALIAS_VORR, // Real instr.: ARM_MVE_VORR
1609
  ARM_INS_ALIAS_VAND, // Real instr.: ARM_MVE_VAND
1610
  ARM_INS_ALIAS_VPSEL, // Real instr.: ARM_MVE_VPSEL
1611
  ARM_INS_ALIAS_ERET, // Real instr.: ARM_t2SUBS_PC_LR
1612
1613
  // clang-format on
1614
  // generated content <ARMGenCSAliasEnum.inc> end
1615
1616
  // Hardcoded in LLVM printer
1617
  ARM_INS_ALIAS_ASR,
1618
  ARM_INS_ALIAS_LSL,
1619
  ARM_INS_ALIAS_LSR,
1620
  ARM_INS_ALIAS_ROR,
1621
  ARM_INS_ALIAS_RRX,
1622
  ARM_INS_ALIAS_UXTW,
1623
  ARM_INS_ALIAS_LDM,
1624
  ARM_INS_ALIAS_POP,
1625
  ARM_INS_ALIAS_PUSH,
1626
  ARM_INS_ALIAS_POPW,
1627
  ARM_INS_ALIAS_PUSHW,
1628
  ARM_INS_ALIAS_VPOP,
1629
  ARM_INS_ALIAS_VPUSH,
1630
1631
  ARM_INS_ALIAS_END,
1632
} arm_insn;
1633
1634
/// Group of ARM instructions
1635
typedef enum arm_insn_group {
1636
  ARM_GRP_INVALID = 0, ///< = CS_GRP_INVALID
1637
1638
  // Generic groups
1639
  // all jump instructions (conditional+direct+indirect jumps)
1640
  ARM_GRP_JUMP, ///< = CS_GRP_JUMP
1641
  ARM_GRP_CALL, ///< = CS_GRP_CALL
1642
  ARM_GRP_RET, ///<  = CS_GRP_RET
1643
  ARM_GRP_INT = 4, ///< = CS_GRP_INT
1644
  ARM_GRP_PRIVILEGE = 6, ///< = CS_GRP_PRIVILEGE
1645
  ARM_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE
1646
1647
  // Architecture-specific groups
1648
  // generated content <ARMGenCSFeatureEnum.inc> begin
1649
  // clang-format off
1650
1651
  ARM_FEATURE_HASV4T = 128,
1652
  ARM_FEATURE_HASV5T,
1653
  ARM_FEATURE_HASV5TE,
1654
  ARM_FEATURE_HASV6,
1655
  ARM_FEATURE_HASV6M,
1656
  ARM_FEATURE_HASV8MBASELINE,
1657
  ARM_FEATURE_HASV8MMAINLINE,
1658
  ARM_FEATURE_HASV8_1MMAINLINE,
1659
  ARM_FEATURE_HASMVEINT,
1660
  ARM_FEATURE_HASMVEFLOAT,
1661
  ARM_FEATURE_HASCDE,
1662
  ARM_FEATURE_HASFPREGS,
1663
  ARM_FEATURE_HASFPREGS16,
1664
  ARM_FEATURE_HASNOFPREGS16,
1665
  ARM_FEATURE_HASFPREGS64,
1666
  ARM_FEATURE_HASFPREGSV8_1M,
1667
  ARM_FEATURE_HASV6T2,
1668
  ARM_FEATURE_HASV6K,
1669
  ARM_FEATURE_HASV7,
1670
  ARM_FEATURE_HASV8,
1671
  ARM_FEATURE_PREV8,
1672
  ARM_FEATURE_HASV8_1A,
1673
  ARM_FEATURE_HASV8_2A,
1674
  ARM_FEATURE_HASV8_3A,
1675
  ARM_FEATURE_HASV8_4A,
1676
  ARM_FEATURE_HASV8_5A,
1677
  ARM_FEATURE_HASV8_6A,
1678
  ARM_FEATURE_HASV8_7A,
1679
  ARM_FEATURE_HASVFP2,
1680
  ARM_FEATURE_HASVFP3,
1681
  ARM_FEATURE_HASVFP4,
1682
  ARM_FEATURE_HASDPVFP,
1683
  ARM_FEATURE_HASFPARMV8,
1684
  ARM_FEATURE_HASNEON,
1685
  ARM_FEATURE_HASSHA2,
1686
  ARM_FEATURE_HASAES,
1687
  ARM_FEATURE_HASCRYPTO,
1688
  ARM_FEATURE_HASDOTPROD,
1689
  ARM_FEATURE_HASCRC,
1690
  ARM_FEATURE_HASRAS,
1691
  ARM_FEATURE_HASLOB,
1692
  ARM_FEATURE_HASPACBTI,
1693
  ARM_FEATURE_HASFP16,
1694
  ARM_FEATURE_HASFULLFP16,
1695
  ARM_FEATURE_HASFP16FML,
1696
  ARM_FEATURE_HASBF16,
1697
  ARM_FEATURE_HASMATMULINT8,
1698
  ARM_FEATURE_HASDIVIDEINTHUMB,
1699
  ARM_FEATURE_HASDIVIDEINARM,
1700
  ARM_FEATURE_HASDSP,
1701
  ARM_FEATURE_HASDB,
1702
  ARM_FEATURE_HASDFB,
1703
  ARM_FEATURE_HASV7CLREX,
1704
  ARM_FEATURE_HASACQUIRERELEASE,
1705
  ARM_FEATURE_HASMP,
1706
  ARM_FEATURE_HASVIRTUALIZATION,
1707
  ARM_FEATURE_HASTRUSTZONE,
1708
  ARM_FEATURE_HAS8MSECEXT,
1709
  ARM_FEATURE_ISTHUMB,
1710
  ARM_FEATURE_ISTHUMB2,
1711
  ARM_FEATURE_ISMCLASS,
1712
  ARM_FEATURE_ISNOTMCLASS,
1713
  ARM_FEATURE_ISARM,
1714
  ARM_FEATURE_USENACLTRAP,
1715
  ARM_FEATURE_USENEGATIVEIMMEDIATES,
1716
  ARM_FEATURE_HASSB,
1717
  ARM_FEATURE_HASCLRBHB,
1718
1719
  // clang-format on
1720
  // generated content <ARMGenCSFeatureEnum.inc> end
1721
1722
  ARM_GRP_ENDING,
1723
} arm_insn_group;
1724
1725
#ifdef CAPSTONE_ARM_COMPAT_HEADER
1726
#define arm_cc ARMCC_CondCodes
1727
#define ARM_CC_EQ ARMCC_EQ
1728
#define ARM_CC_NE ARMCC_NE
1729
#define ARM_CC_HS ARMCC_HS
1730
#define ARM_CC_LO ARMCC_LO
1731
#define ARM_CC_MI ARMCC_MI
1732
#define ARM_CC_PL ARMCC_PL
1733
#define ARM_CC_VS ARMCC_VS
1734
#define ARM_CC_VC ARMCC_VC
1735
#define ARM_CC_HI ARMCC_HI
1736
#define ARM_CC_LS ARMCC_LS
1737
#define ARM_CC_GE ARMCC_GE
1738
#define ARM_CC_LT ARMCC_LT
1739
#define ARM_CC_GT ARMCC_GT
1740
#define ARM_CC_LE ARMCC_LE
1741
#define ARM_CC_AL ARMCC_AL
1742
#define ARM_CC_INVALID ARMCC_Invalid
1743
#endif
1744
1745
#ifdef __cplusplus
1746
}
1747
#endif
1748
1749
#endif