summaryrefslogtreecommitdiff
path: root/src/jit/regset.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/regset.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/regset.cpp')
-rw-r--r--src/jit/regset.cpp35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/jit/regset.cpp b/src/jit/regset.cpp
index 15e6eb7275..f167879283 100644
--- a/src/jit/regset.cpp
+++ b/src/jit/regset.cpp
@@ -147,6 +147,31 @@ void RegSet::rsRemoveRegsModified(regMaskTP mask)
rsModifiedRegsMask &= ~mask;
}
+void RegSet::SetMaskVars(regMaskTP newMaskVars)
+{
+#ifdef DEBUG
+ if (m_rsCompiler->verbose)
+ {
+ printf("\t\t\t\t\t\t\tLive regs: ");
+ if (_rsMaskVars == newMaskVars)
+ {
+ printf("(unchanged) ");
+ }
+ else
+ {
+ printRegMaskInt(_rsMaskVars);
+ m_rsCompiler->getEmitter()->emitDispRegSet(_rsMaskVars);
+ printf(" => ");
+ }
+ printRegMaskInt(newMaskVars);
+ m_rsCompiler->getEmitter()->emitDispRegSet(newMaskVars);
+ printf("\n");
+ }
+#endif // DEBUG
+
+ _rsMaskVars = newMaskVars;
+}
+
#ifdef DEBUG
RegSet::rsStressRegsType RegSet::rsStressRegs()
@@ -1440,10 +1465,7 @@ void RegSet::rsSpillTree(regNumber reg, GenTreePtr tree)
tree->gtFlags &= ~GTF_SPILL;
#endif // !LEGACY_BACKEND
-#ifdef _TARGET_AMD64_
- assert(tree->InReg());
- assert(tree->gtRegNum == reg);
-#else
+#if CPU_LONG_USES_REGPAIR
/* Are we spilling a part of a register pair? */
if (treeType == TYP_LONG)
@@ -1457,7 +1479,10 @@ void RegSet::rsSpillTree(regNumber reg, GenTreePtr tree)
assert(tree->gtFlags & GTF_REG_VAL);
assert(tree->gtRegNum == reg);
}
-#endif // _TARGET_AMD64_
+#else
+ assert(tree->InReg());
+ assert(tree->gtRegNum == reg);
+#endif // CPU_LONG_USES_REGPAIR
/* Are any registers free for spillage? */