diff options
Diffstat (limited to 'src/jit/emit.h')
-rw-r--r-- | src/jit/emit.h | 53 |
1 files changed, 18 insertions, 35 deletions
diff --git a/src/jit/emit.h b/src/jit/emit.h index f57cc0a0f7..e1c924f467 100644 --- a/src/jit/emit.h +++ b/src/jit/emit.h @@ -738,21 +738,13 @@ protected: // arm64: 48 bits CLANG_FORMAT_COMMENT_ANCHOR; -#ifdef RELOC_SUPPORT - unsigned _idCnsReloc : 1; // LargeCns is an RVA and needs reloc tag unsigned _idDspReloc : 1; // LargeDsp is an RVA and needs reloc tag #define ID_EXTRA_RELOC_BITS (2) -#else // RELOC_SUPPORT - -#define ID_EXTRA_RELOC_BITS (0) - -#endif // RELOC_SUPPORT - //////////////////////////////////////////////////////////////////////// - // Space taken up to here (assuming RELOC_SUPPORT): + // Space taken up to here: // x86: 40 bits // amd64: 48 bits // arm: 50 bits @@ -768,7 +760,7 @@ protected: #define ID_MAX_SMALL_CNS (int)((1 << ID_BIT_SMALL_CNS) - 1U) //////////////////////////////////////////////////////////////////////// - // Small constant size (assuming RELOC_SUPPORT): + // Small constant size: // x86: 24 bits // amd64: 16 bits // arm: 14 bits @@ -777,7 +769,7 @@ protected: unsigned _idSmallCns : ID_BIT_SMALL_CNS; //////////////////////////////////////////////////////////////////////// - // Space taken up to here (with RELOC_SUPPORT): 64 bits, all architectures, by design. + // Space taken up to here: 64 bits, all architectures, by design. //////////////////////////////////////////////////////////////////////// CLANG_FORMAT_COMMENT_ANCHOR; @@ -829,23 +821,13 @@ protected: #define ID_EXTRA_BITFIELD_BITS (7) -// -// For x86, we are using 7 bits from the second DWORD for bitfields. -// - -#ifdef RELOC_SUPPORT + // + // For x86, we are using 7 bits from the second DWORD for bitfields. + // unsigned _idCnsReloc : 1; // LargeCns is an RVA and needs reloc tag unsigned _idDspReloc : 1; // LargeDsp is an RVA and needs reloc tag -#define ID_EXTRA_RELOC_BITS (2) - -#else // RELOC_SUPPORT - -#define ID_EXTRA_RELOC_BITS (0) - -#endif // RELOC_SUPPORT - #define ID_EXTRA_REG_BITS (0) #define ID_EXTRA_BITS (ID_EXTRA_BITFIELD_BITS + ID_EXTRA_RELOC_BITS + ID_EXTRA_REG_BITS) @@ -856,7 +838,7 @@ protected: #define ID_MIN_SMALL_CNS 0 #define ID_MAX_SMALL_CNS (int)((1 << ID_BIT_SMALL_CNS) - 1U) - // For x86 (assuming RELOC_SUPPORT) we have 23 bits remaining for the + // For x86 we have 23 bits remaining for the // small constant in this extra DWORD. unsigned _idSmallCns : ID_BIT_SMALL_CNS; @@ -1283,8 +1265,6 @@ protected: } #endif // defined(_TARGET_ARM_) -#ifdef RELOC_SUPPORT - bool idIsCnsReloc() const { assert(!idIsTiny()); @@ -1311,8 +1291,6 @@ protected: return idIsDspReloc() || idIsCnsReloc(); } -#endif - unsigned idSmallCns() const { assert(!idIsTiny()); @@ -1518,14 +1496,20 @@ protected: // IG of the epilog, and use it to find the epilog offset at the end of code generation. struct EpilogList { - EpilogList* elNext; - insGroup* elIG; + EpilogList* elNext; + emitLocation elLoc; + + EpilogList() : elNext(nullptr), elLoc() + { + } }; EpilogList* emitEpilogList; // per method epilog list - head EpilogList* emitEpilogLast; // per method epilog list - tail public: + void emitStartEpilog(); + bool emitHasEpilogEnd(); size_t emitGenEpilogLst(size_t (*fp)(void*, unsigned), void* cp); @@ -1535,8 +1519,6 @@ public: void emitBegPrologEpilog(insGroup* igPh); void emitEndPrologEpilog(); - emitLocation emitEpilogBegLoc; - void emitBegFnEpilog(insGroup* igPh); void emitEndFnEpilog(); @@ -2036,8 +2018,9 @@ public: /* The following logic keeps track of live GC ref values */ /************************************************************************/ - bool emitFullGCinfo; // full GC pointer maps? - bool emitFullyInt; // fully interruptible code? + bool emitFullArgInfo; // full arg info (including non-ptr arg)? + bool emitFullGCinfo; // full GC pointer maps? + bool emitFullyInt; // fully interruptible code? #if EMIT_TRACK_STACK_DEPTH unsigned emitCntStackDepth; // 0 in prolog/epilog, One DWORD elsewhere |