10 #ifndef LLVM_SUPPORT_ARMWINEH_H
11 #define LLVM_SUPPORT_ARMWINEH_H
111 : BeginAddress(BeginAddress), UnwindData(UnwindData) {}
119 "unpacked form required for this operation");
126 "packed form required for this operation");
132 "packed form required for this operation");
133 return (((
UnwindData & 0x00001ffc) >> 2) << 1);
138 "packed form required for this operation");
145 "packed form required for this operation");
151 "packed form required for this operation");
157 "packed form required for this operation");
163 "packed form required for this operation");
169 "packed form required for this operation");
171 "L flag must be set, chaining requires r11 and LR");
173 "r11 must not be included in Reg; C implies r11");
179 "packed form required for this operation");
199 if (Adjustment >= 0x3f4)
200 return (Adjustment & 0x3) ? ((Adjustment & 0x3) << 2) - 1 : 0;
297 return (
ES & 0x0003ffff);
300 return ((
ES & 0x000c0000) >> 18);
303 return ((
ES & 0x00f00000) >> 20);
306 return ((
ES & 0xff000000) >> 24);
310 struct ExceptionDataRecord;
311 inline size_t HeaderWords(
const ExceptionDataRecord &XR);
319 return (
Data[0] & 0x0003ffff);
323 return (
Data[0] & 0x000C0000) >> 18;
327 return ((
Data[0] & 0x00100000) >> 20);
331 return ((
Data[0] & 0x00200000) >> 21);
335 return ((
Data[0] & 0x00400000) >> 22);
340 return (
Data[0] & 0x0f800000) >> 23;
341 return Data[1] & 0x0000ffff;
346 return (
Data[0] & 0xf0000000) >> 28;
347 return (
Data[1] & 0x00ff0000) >> 16;
351 assert(
E() == 0 &&
"epilogue scopes are only present when the E bit is 0");
359 const uint8_t *ByteCode =
360 reinterpret_cast<const uint8_t *
>(&
Data[
Offset]);
365 assert(
X() &&
"Exception Handler RVA is only valid if the X bit is set");
370 assert(
X() &&
"Exception Handler RVA is only valid if the X bit is set");
376 return (XR.
Data[0] & 0xff800000) ? 1 : 2;
ExceptionDataRecord(const support::ulittle32_t *Data)
uint32_t ExceptionHandlerRVA() const
uint8_t Condition() const
const support::ulittle32_t ES
uint16_t StackAdjust() const
uint32_t ExceptionInformationRVA() const
bool EpilogueFolding(const RuntimeFunction &RF)
Epilogue - pseudo-flag derived from Stack Adjust indicating that the epilogue has stack adjustment co...
uint32_t FunctionLength() const
uint32_t EpilogueStartOffset() const
uint8_t CodeWords() const
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
ExceptionDataRecord - An entry in the table of exception data (.xdata)
uint16_t StackAdjustment(const RuntimeFunction &RF)
StackAdjustment - calculated stack adjustment in words.
bool PrologueFolding(const RuntimeFunction &RF)
PrologueFolding - pseudo-flag derived from Stack Adjust indicating that the prologue has stack adjust...
RuntimeFunction(const support::ulittle32_t *Data)
const support::ulittle32_t * Data
uint32_t ExceptionHandlerParameter() const
RuntimeFunction(const support::ulittle32_t BeginAddress, const support::ulittle32_t UnwindData)
uint32_t PackedUnwindData() const
uint8_t EpilogueStartIndex() const
uint8_t EpilogueCount() const
packed entry representing a fragment
RuntimeFunction - An entry in the table of procedure data (.pdata)
ArrayRef< support::ulittle32_t > EpilogueScopes() const
size_t HeaderWords(const ExceptionDataRecord &XR)
const support::ulittle32_t BeginAddress
ArrayRef< uint8_t > UnwindByteCode() const
uint32_t FunctionLength() const
EpilogueScope(const support::ulittle32_t Data)
const support::ulittle32_t UnwindData
return via pop {pc} (L flag must be set)
std::pair< uint16_t, uint32_t > SavedRegisterMask(const RuntimeFunction &RF)
SavedRegisterMask - Utility function to calculate the set of saved general purpose (r0-r15) and VFP (...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
RuntimeFunctionFlag Flag() const