summaryrefslogtreecommitdiff
path: root/src/jit/emit.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/emit.h')
-rw-r--r--src/jit/emit.h53
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