MCRegisterInfo.c
Go to the documentation of this file.
1 //=== MC/MCRegisterInfo.cpp - Target Register Description -------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements MCRegisterInfo functions.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 /* Capstone Disassembly Engine */
15 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
16 
17 #include "MCRegisterInfo.h"
18 
23 typedef struct DiffListIterator {
25  const MCPhysReg *List;
27 
29  const MCRegisterDesc *D, unsigned NR,
30  unsigned RA, unsigned PC,
31  const MCRegisterClass *C, unsigned NC,
32  uint16_t (*RURoots)[2], unsigned NRU,
33  const MCPhysReg *DL,
34  const char *Strings,
35  const uint16_t *SubIndices, unsigned NumIndices,
36  const uint16_t *RET)
37 {
38  RI->Desc = D;
39  RI->NumRegs = NR;
40  RI->RAReg = RA;
41  RI->PCReg = PC;
42  RI->Classes = C;
43  RI->DiffLists = DL;
44  RI->RegStrings = Strings;
45  RI->NumClasses = NC;
46  RI->RegUnitRoots = RURoots;
47  RI->NumRegUnits = NRU;
48  RI->SubRegIndices = SubIndices;
49  RI->NumSubRegIndices = NumIndices;
50  RI->RegEncodingTable = RET;
51 }
52 
53 static void DiffListIterator_init(DiffListIterator *d, MCPhysReg InitVal, const MCPhysReg *DiffList)
54 {
55  d->Val = InitVal;
56  d->List = DiffList;
57 }
58 
60 {
61  return d->Val;
62 }
63 
65 {
66  MCPhysReg D;
67 
68  if (d->List == 0)
69  return false;
70 
71  D = *d->List;
72  d->List++;
73  d->Val += D;
74 
75  if (!D)
76  d->List = 0;
77 
78  return (D != 0);
79 }
80 
82 {
83  return (d->List != 0);
84 }
85 
86 unsigned MCRegisterInfo_getMatchingSuperReg(const MCRegisterInfo *RI, unsigned Reg, unsigned SubIdx, const MCRegisterClass *RC)
87 {
89 
90  if (Reg >= RI->NumRegs) {
91  return 0;
92  }
93 
96 
99  if (MCRegisterClass_contains(RC, val) && Reg == MCRegisterInfo_getSubReg(RI, val, SubIdx))
100  return val;
101 
103  }
104 
105  return 0;
106 }
107 
108 unsigned MCRegisterInfo_getSubReg(const MCRegisterInfo *RI, unsigned Reg, unsigned Idx)
109 {
111  const uint16_t *SRI = RI->SubRegIndices + RI->Desc[Reg].SubRegIndices;
112 
115 
116  while(DiffListIterator_isValid(&iter)) {
117  if (*SRI == Idx)
118  return DiffListIterator_getVal(&iter);
120  ++SRI;
121  }
122 
123  return 0;
124 }
125 
127 {
128  //assert(i < getNumRegClasses() && "Register Class ID out of range");
129  if (i >= RI->NumClasses)
130  return 0;
131  return &(RI->Classes[i]);
132 }
133 
135 {
136  unsigned InByte = Reg % 8;
137  unsigned Byte = Reg / 8;
138 
139  if (Byte >= c->RegSetSize)
140  return false;
141 
142  return (c->RegSet[Byte] & (1 << InByte)) != 0;
143 }
MCRegisterInfo::NumRegUnits
unsigned NumRegUnits
Definition: MCRegisterInfo.h:85
DiffListIterator_isValid
static bool DiffListIterator_isValid(DiffListIterator *d)
Definition: MCRegisterInfo.c:81
uint16_t
unsigned short uint16_t
Definition: stdint-msvc2008.h:79
C
#define C(x)
Definition: abseil-cpp/absl/hash/internal/city_test.cc:49
MCRegisterInfo::RegEncodingTable
const uint16_t * RegEncodingTable
Definition: MCRegisterInfo.h:92
MCRegisterDesc
Definition: MCRegisterInfo.h:48
DiffListIterator_getVal
static uint16_t DiffListIterator_getVal(DiffListIterator *d)
Definition: MCRegisterInfo.c:59
MCPhysReg
uint16_t MCPhysReg
Definition: MCRegisterInfo.h:26
MCRegisterInfo_getSubReg
unsigned MCRegisterInfo_getSubReg(const MCRegisterInfo *RI, unsigned Reg, unsigned Idx)
Definition: MCRegisterInfo.c:108
MCRegisterInfo::NumRegs
unsigned NumRegs
Definition: MCRegisterInfo.h:80
MCRegisterInfo::Desc
const MCRegisterDesc * Desc
Definition: MCRegisterInfo.h:79
MCRegisterInfo::RegStrings
const char * RegStrings
Definition: MCRegisterInfo.h:88
MCRegisterInfo::PCReg
unsigned PCReg
Definition: MCRegisterInfo.h:82
DiffListIterator
struct DiffListIterator DiffListIterator
MCRegisterInfo::RegUnitRoots
uint16_t(* RegUnitRoots)[2]
Definition: MCRegisterInfo.h:86
MCRegisterDesc::SubRegIndices
uint32_t SubRegIndices
Definition: MCRegisterInfo.h:55
MCRegisterInfo::NumClasses
unsigned NumClasses
Definition: MCRegisterInfo.h:84
c
void c(T a)
Definition: miscompile_with_no_unique_address_test.cc:40
MCRegisterInfo::NumSubRegIndices
unsigned NumSubRegIndices
Definition: MCRegisterInfo.h:91
MCRegisterClass_contains
bool MCRegisterClass_contains(const MCRegisterClass *c, unsigned Reg)
Definition: MCRegisterInfo.c:134
DiffListIterator_next
static bool DiffListIterator_next(DiffListIterator *d)
Definition: MCRegisterInfo.c:64
MCRegisterInfo::Classes
const MCRegisterClass * Classes
Definition: MCRegisterInfo.h:83
MCRegisterClass
Definition: MCRegisterInfo.h:29
DiffListIterator_init
static void DiffListIterator_init(DiffListIterator *d, MCPhysReg InitVal, const MCPhysReg *DiffList)
Definition: MCRegisterInfo.c:53
MCRegisterInfo::DiffLists
const MCPhysReg * DiffLists
Definition: MCRegisterInfo.h:87
MCRegisterInfo.h
d
static const fe d
Definition: curve25519_tables.h:19
DiffListIterator
Definition: MCRegisterInfo.c:23
MCRegisterInfo_getMatchingSuperReg
unsigned MCRegisterInfo_getMatchingSuperReg(const MCRegisterInfo *RI, unsigned Reg, unsigned SubIdx, const MCRegisterClass *RC)
Definition: MCRegisterInfo.c:86
MCRegisterInfo_InitMCRegisterInfo
void MCRegisterInfo_InitMCRegisterInfo(MCRegisterInfo *RI, const MCRegisterDesc *D, unsigned NR, unsigned RA, unsigned PC, const MCRegisterClass *C, unsigned NC, uint16_t(*RURoots)[2], unsigned NRU, const MCPhysReg *DL, const char *Strings, const uint16_t *SubIndices, unsigned NumIndices, const uint16_t *RET)
Definition: MCRegisterInfo.c:28
MCRegisterInfo::RAReg
unsigned RAReg
Definition: MCRegisterInfo.h:81
MCRegisterDesc::SuperRegs
uint32_t SuperRegs
Definition: MCRegisterInfo.h:51
Byte
unsigned char Byte
Definition: bloaty/third_party/zlib/zconf.h:391
MCRegisterInfo_getRegClass
const MCRegisterClass * MCRegisterInfo_getRegClass(const MCRegisterInfo *RI, unsigned i)
Definition: MCRegisterInfo.c:126
testing::internal::Strings
::std::vector< ::std::string > Strings
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest-printers.h:872
Reg
Reg
Definition: X86DisassemblerDecoder.h:466
iter
Definition: test_winkernel.cpp:47
MCRegisterInfo
Definition: MCRegisterInfo.h:78
DiffListIterator::Val
uint16_t Val
Definition: MCRegisterInfo.c:24
MCRegisterDesc::SubRegs
uint32_t SubRegs
Definition: MCRegisterInfo.h:50
DiffListIterator::List
const MCPhysReg * List
Definition: MCRegisterInfo.c:25
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
MCRegisterInfo::SubRegIndices
const uint16_t * SubRegIndices
Definition: MCRegisterInfo.h:89


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:23