Go to the documentation of this file.
9 #ifndef LLVM_SUPPORT_ARMWINEH_H
10 #define LLVM_SUPPORT_ARMWINEH_H
121 "unpacked form required for this operation");
128 "packed form required for this operation");
134 "packed form required for this operation");
135 return (((
UnwindData & 0x00001ffc) >> 2) << 1);
140 "packed form required for this operation");
147 "packed form required for this operation");
153 "packed form required for this operation");
159 "packed form required for this operation");
165 "packed form required for this operation");
171 "packed form required for this operation");
173 "L flag must be set, chaining requires r11 and LR");
175 "r11 must not be included in Reg; C implies r11");
181 "packed form required for this operation");
201 if (Adjustment >= 0x3f4)
202 return (Adjustment & 0
x3) + 1;
209 bool Prologue =
true);
242 "unpacked form required for this operation");
249 "packed form required for this operation");
255 "packed form required for this operation");
256 return (((
UnwindData & 0x00001ffc) >> 2) << 2);
261 "packed form required for this operation");
267 "packed form required for this operation");
273 "packed form required for this operation");
279 "packed form required for this operation");
285 "packed form required for this operation");
402 return (
ES & 0x0003ffff);
407 return ((
ES & 0x000c0000) >> 18);
411 return ((
ES & 0x000f0000) >> 18);
416 return ((
ES & 0x00f00000) >> 20);
421 return ((
ES & 0xff000000) >> 24);
425 return ((
ES & 0xffc00000) >> 22);
429 struct ExceptionDataRecord;
430 inline size_t HeaderWords(
const ExceptionDataRecord &XR);
440 return (
Data[0] & 0x0003ffff);
452 return (
Data[0] & 0x000C0000) >> 18;
456 return ((
Data[0] & 0x00100000) >> 20);
460 return ((
Data[0] & 0x00200000) >> 21);
465 return ((
Data[0] & 0x00400000) >> 22);
471 return (
Data[0] & 0x07C00000) >> 22;
472 return (
Data[0] & 0x0f800000) >> 23;
474 return Data[1] & 0x0000ffff;
480 return (
Data[0] & 0xf8000000) >> 27;
481 return (
Data[0] & 0xf0000000) >> 28;
483 return (
Data[1] & 0x00ff0000) >> 16;
487 assert(
E() == 0 &&
"epilogue scopes are only present when the E bit is 0");
495 const uint8_t *ByteCode =
496 reinterpret_cast<const uint8_t *
>(&
Data[Offset]);
501 assert(
X() &&
"Exception Handler RVA is only valid if the X bit is set");
506 assert(
X() &&
"Exception Handler RVA is only valid if the X bit is set");
514 return (XR.
Data[0] & 0xffc00000) ? 1 : 2;
515 return (XR.
Data[0] & 0xff800000) ? 1 : 2;
const support::ulittle32_t ES
RuntimeFunction(const support::ulittle32_t *Data)
@ RFF_Reserved
packed entry representing a fragment
This is an optimization pass for GlobalISel generic memory operations.
uint32_t ExceptionHandlerParameter() const
@ RT_NoEpilogue
32-bit branch
@ RFF_Packed
unpacked entry
ExceptionDataRecord - An entry in the table of exception data (.xdata)
uint32_t EpilogueStartOffset() const
RuntimeFunctionFlag Flag() const
const support::ulittle32_t * Data
ArrayRef< uint8_t > UnwindByteCode() const
uint8_t ResAArch64() const
@ RFF_PackedFragment
packed entry
uint16_t EpilogueCount() const
uint16_t FrameSize() const
bool PrologueFolding(const RuntimeFunction &RF)
PrologueFolding - pseudo-flag derived from Stack Adjust indicating that the prologue has stack adjust...
In x86 we generate this spiffy xmm0 xmm0 ret in x86 we generate this which could be xmm1 movss xmm1 xmm0 ret In sse4 we could use insertps to make both better Here s another testcase that could use x3
RuntimeFunction(const support::ulittle32_t BeginAddress, const support::ulittle32_t UnwindData)
uint16_t EpilogueStartIndexAArch64() const
std::pair< uint16_t, uint32_t > SavedRegisterMask(const RuntimeFunction &RF, bool Prologue=true)
SavedRegisterMask - Utility function to calculate the set of saved general purpose (r0-r15) and VFP (...
uint32_t FunctionLength() const
RuntimeFunctionARM64(const support::ulittle32_t *Data)
uint32_t ExceptionHandlerRVA() const
ArrayRef< support::ulittle32_t > EpilogueScopes() const
uint32_t ExceptionInformationRVA() const
const support::ulittle32_t UnwindData
@ RT_B
return via pop {pc} (L flag must be set)
uint8_t CodeWords() const
uint8_t Condition() const
uint32_t PackedUnwindData() const
const support::ulittle32_t UnwindData
RuntimeFunction
IDs for all omp runtime library (RTL) functions.
const support::ulittle32_t BeginAddress
uint32_t FunctionLengthInBytesARM() const
uint32_t FunctionLength() const
RuntimeFunction - An entry in the table of procedure data (.pdata)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
EpilogueScope(const support::ulittle32_t Data)
uint32_t PackedUnwindData() const
size_t HeaderWords(const ExceptionDataRecord &XR)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
uint8_t EpilogueStartIndexARM() const
RuntimeFunctionARM64 - An entry in the table of procedure data (.pdata)
const support::ulittle32_t BeginAddress
uint32_t FunctionLengthInBytesAArch64() const
@ WinEH
Windows Exception Handling.
uint16_t StackAdjust() const
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
uint32_t ExceptionInformationRVA() const
uint16_t StackAdjustment(const RuntimeFunction &RF)
StackAdjustment - calculated stack adjustment in words.
bool EpilogueFolding(const RuntimeFunction &RF)
Epilogue - pseudo-flag derived from Stack Adjust indicating that the epilogue has stack adjustment co...
uint32_t FunctionLength() const
ExceptionDataRecord(const support::ulittle32_t *Data, bool isAArch64)
RuntimeFunctionFlag Flag() const
RuntimeFunctionARM64(const support::ulittle32_t BeginAddress, const support::ulittle32_t UnwindData)