summaryrefslogtreecommitdiff
path: root/src/vm/callingconvention.h
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2015-10-22 10:55:02 -0700
committerJan Vorlicek <janvorli@microsoft.com>2015-10-22 10:55:02 -0700
commitc13593b553ca78c6a94a2523e8f8549031077b60 (patch)
tree929291b42dc757dcc054ca5b876779034846a655 /src/vm/callingconvention.h
parente9f018f94407e80c3ed76f227717deac70cc85f7 (diff)
downloadcoreclr-c13593b553ca78c6a94a2523e8f8549031077b60.tar.gz
coreclr-c13593b553ca78c6a94a2523e8f8549031077b60.tar.bz2
coreclr-c13593b553ca78c6a94a2523e8f8549031077b60.zip
Fix floatingpoint register offsets in TransitionBlock for Unix
The conversion between floating point register index and offset was incorrectly multiplying the the index by 8 instead of 16. The xmm registers in the TransitionBlock on Unix take 16 bytes each, not 8.
Diffstat (limited to 'src/vm/callingconvention.h')
-rw-r--r--src/vm/callingconvention.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/vm/callingconvention.h b/src/vm/callingconvention.h
index 490ae3ce87..f382f50d63 100644
--- a/src/vm/callingconvention.h
+++ b/src/vm/callingconvention.h
@@ -611,7 +611,7 @@ public:
if (TransitionBlock::IsFloatArgumentRegisterOffset(argOffset))
{
// Dividing by 8 as size of each register in FloatArgumentRegisters is 8 bytes.
- pLoc->m_idxFloatReg = (argOffset - TransitionBlock::GetOffsetOfFloatArgumentRegisters()) / 8;
+ pLoc->m_idxFloatReg = (argOffset - TransitionBlock::GetOffsetOfFloatArgumentRegisters()) / 16;
pLoc->m_cFloatReg = 1;
}
else if (!TransitionBlock::IsStackArgumentOffset(argOffset))
@@ -1032,7 +1032,7 @@ int ArgIteratorTemplate<ARGITERATOR_BASE>::GetNextOffset()
if ((cFPRegs > 0) && (cFPRegs + m_idxFPReg <= NUM_FLOAT_ARGUMENT_REGISTERS))
{
- int argOfs = TransitionBlock::GetOffsetOfFloatArgumentRegisters() + m_idxFPReg * 8;
+ int argOfs = TransitionBlock::GetOffsetOfFloatArgumentRegisters() + m_idxFPReg * 16;
m_idxFPReg += cFPRegs;
return argOfs;
}