diff options
author | Brian Sullivan <briansul@microsoft.com> | 2015-12-11 16:16:44 -0800 |
---|---|---|
committer | Brian Sullivan <briansul@microsoft.com> | 2015-12-11 16:16:44 -0800 |
commit | 121d095ed0b0076fb1c7ff59e6446fd19d506b32 (patch) | |
tree | 4a690f67e0117dd346a9de1937f018918a970ae9 /src/jit/emit.cpp | |
parent | f05270a77a9782c5960d1bdff82b8521b1e3fa5d (diff) | |
download | coreclr-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.cpp | 14 |
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) } /*****************************************************************************/ |