summaryrefslogtreecommitdiff
path: root/src/jit/emit.cpp
diff options
context:
space:
mode:
authorBrian Sullivan <briansul@microsoft.com>2015-12-11 16:16:44 -0800
committerBrian Sullivan <briansul@microsoft.com>2015-12-11 16:16:44 -0800
commit121d095ed0b0076fb1c7ff59e6446fd19d506b32 (patch)
tree4a690f67e0117dd346a9de1937f018918a970ae9 /src/jit/emit.cpp
parentf05270a77a9782c5960d1bdff82b8521b1e3fa5d (diff)
downloadcoreclr-121d095ed0b0076fb1c7ff59e6446fd19d506b32.tar.gz
coreclr-121d095ed0b0076fb1c7ff59e6446fd19d506b32.tar.bz2
coreclr-121d095ed0b0076fb1c7ff59e6446fd19d506b32.zip
Port of all JIT changes for .NET Framework 4.6.1 changes
http://blogs.msdn.com/b/dotnet/archive/2015/11/30/net-framework-4-6-1-is-now-available.aspx .NET Framework list of changes in 4.6.1 https://github.com/Microsoft/dotnet/blob/master/releases/net461/dotnet461-changes.md Additional changes including - Working ARM64 JIT compiler - Additional JIT Optimizations o Tail call recursion optimization o Array length tracking optimization o CSE for widening casts o Smaller encoding for RIP relative and absolute addresses in addressing modes o Tracked Local Variable increased to 512 o Improved handling of Intrinsics System.GetType() o Improved handling of Math intrinsics - Work for the X86 Ryu-JIT compiler [tfs-changeset: 1557101]
Diffstat (limited to 'src/jit/emit.cpp')
-rw-r--r--src/jit/emit.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/jit/emit.cpp b/src/jit/emit.cpp
index e327657af5..2a5dbf8a8c 100644
--- a/src/jit/emit.cpp
+++ b/src/jit/emit.cpp
@@ -1414,14 +1414,19 @@ void * emitter::emitAllocInstr(size_t sz, emitAttr opsz)
#if RELOC_SUPPORT
- if (EA_IS_DSP_RELOC(opsz) && emitComp->opts.compReloc)
+ // Amd64: ip-relative addressing is supported even when not generating relocatable ngen code
+ if (EA_IS_DSP_RELOC(opsz)
+#ifndef _TARGET_AMD64_
+ && emitComp->opts.compReloc
+#endif //_TARGET_AMD64_
+ )
{
/* Mark idInfo()->idDspReloc to remember that the */
/* address mode has a displacement that is relocatable */
id->idSetIsDspReloc();
}
- if (EA_IS_CNS_RELOC(opsz) && emitComp->opts.compReloc)
+ if (EA_IS_CNS_RELOC(opsz) && emitComp->opts.compReloc)
{
/* Mark idInfo()->idCnsReloc to remember that the */
/* instruction has an immediate constant that is relocatable */
@@ -5654,6 +5659,7 @@ void emitter::emitRecordGCcall(BYTE * codePos,
call->cdGCrefRegs = (regMaskSmall)emitThisGCrefRegs;
call->cdByrefRegs = (regMaskSmall)emitThisByrefRegs;
+
#if EMIT_TRACK_STACK_DEPTH
#ifndef FEATURE_UNIX_AMD64_STRUCT_PASSING
noway_assert(FitsIn<USHORT>(emitCurStackLvl / ((unsigned)sizeof(unsigned))));
@@ -6883,7 +6889,7 @@ void emitter::emitRecordCallSite(ULONG instrOffset, /* I
CORINFO_SIG_INFO* callSig, /* IN */
CORINFO_METHOD_HANDLE methodHandle) /* IN */
{
-#if defined(DEBUG) && !defined(RYUJIT_CTPBUILD)
+#if defined(DEBUG)
// Since CORINFO_SIG_INFO is a heavyweight structure, in most cases we can
// lazily obtain it here using the given method handle (we only save the sig
// info when we explicitly need it, i.e. for CALLI calls, vararg calls, and
@@ -6905,7 +6911,7 @@ void emitter::emitRecordCallSite(ULONG instrOffset, /* I
}
emitCmpHandle->recordCallSite(instrOffset, callSig, methodHandle);
-#endif // defined(DEBUG) && !defined(RYUJIT_CTPBUILD)
+#endif // defined(DEBUG)
}
/*****************************************************************************/