1 write to _transitionBlock
ILCompiler.ReadyToRun (1)
Compiler\DependencyAnalysis\ReadyToRun\ArgIterator.cs (1)
534
_transitionBlock
= TransitionBlock.FromTarget(context.Target);
208 references to _transitionBlock
ILCompiler.ReadyToRun (208)
Compiler\DependencyAnalysis\ReadyToRun\ArgIterator.cs (208)
543
Debug.Assert((_nSizeOfArgStack %
_transitionBlock
.PointerSize) == 0);
557
if (
_transitionBlock
.IsX64 && !
_transitionBlock
.IsX64UnixABI)
560
size += (uint)
_transitionBlock
.SizeOfArgumentRegisters;
563
Debug.Assert((size %
_transitionBlock
.PointerSize) == 0);
571
if (
_transitionBlock
.IsX86)
616
if (
_transitionBlock
.EnregisteredParamTypeMaxSize != 0)
618
switch (
_transitionBlock
.Architecture)
621
return
_transitionBlock
.IsArgPassedByRef(_argSize);
626
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) && (!_argTypeHandle.IsHomogeneousAggregate() || IsVarArg));
633
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) ||
_transitionBlock
.IsArgPassedByRef(_argTypeHandle));
640
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) ||
_transitionBlock
.IsArgPassedByRef(_argTypeHandle));
649
if (
_transitionBlock
.IsWasm32)
653
return
_transitionBlock
.IsArgPassedByRef(_argTypeHandle);
672
return
_transitionBlock
.ThisOffset;
681
if (
_transitionBlock
.IsX86)
684
return
_transitionBlock
.SizeOfTransitionBlock;
689
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
690
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
697
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
710
if (
_transitionBlock
.IsX86)
719
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEcx;
721
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEdx;
727
return
_transitionBlock
.SizeOfTransitionBlock;
732
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
733
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
740
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
753
if (
_transitionBlock
.IsX86)
762
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEcx;
764
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEdx;
774
return
_transitionBlock
.SizeOfTransitionBlock +
_transitionBlock
.PointerSize;
777
return
_transitionBlock
.SizeOfTransitionBlock;
782
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
783
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
790
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
823
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
831
if (!
_transitionBlock
.IsX86)
844
if (!
_transitionBlock
.IsX86 && IsVarArg)
849
switch (
_transitionBlock
.Architecture)
854
numRegistersUsed =
_transitionBlock
.NumArgumentRegisters; // Nothing else gets passed in registers for varargs
857
_x86OfsStack = (int)(
_transitionBlock
.OffsetOfArgs + SizeOfArgStack());
861
if (
_transitionBlock
.IsX64UnixABI)
869
_x64WindowsCurOfs =
_transitionBlock
.OffsetOfArgs + numRegistersUsed *
_transitionBlock
.PointerSize;
874
_wasmOfsStack = numRegistersUsed *
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
921
argSize = _argForceByRef ?
_transitionBlock
.PointerSize : argSize;
925
switch (
_transitionBlock
.Architecture)
928
if (
_transitionBlock
.IsArgumentInRegister(ref _x86NumRegistersUsed, argType, _argTypeHandle))
930
return
_transitionBlock
.OffsetOfArgumentRegisters + (
_transitionBlock
.NumArgumentRegisters - _x86NumRegistersUsed) *
_transitionBlock
.PointerSize;
933
_x86OfsStack -=
_transitionBlock
.StackElemSize(argSize);
936
Debug.Assert(argOfs >=
_transitionBlock
.OffsetOfArgs);
940
if (
_transitionBlock
.IsX64UnixABI)
942
int cbArg =
_transitionBlock
.StackElemSize(argSize);
989
if ((cFPRegs + _x64UnixIdxFPReg <= TransitionBlock.X64UnixTransitionBlock.NUM_FLOAT_ARGUMENT_REGISTERS) && (cGenRegs + _x64UnixIdxGenReg) <=
_transitionBlock
.NumArgumentRegisters)
1021
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _x64UnixIdxFPReg * 8;
1028
if (_x64UnixIdxGenReg + cGenRegs <=
_transitionBlock
.NumArgumentRegisters)
1030
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _x64UnixIdxGenReg * 8;
1038
argOfs =
_transitionBlock
.OffsetOfArgs + _x64UnixIdxStack * 8;
1039
int cArgSlots = cbArg /
_transitionBlock
.PointerSize;
1062
argOfs = _x64WindowsCurOfs -
_transitionBlock
.OffsetOfArgs;
1063
_x64WindowsCurOfs +=
_transitionBlock
.PointerSize;
1065
if ((cFPRegs == 0) || (argOfs >=
_transitionBlock
.SizeOfArgumentRegisters))
1067
return argOfs +
_transitionBlock
.OffsetOfArgs;
1071
int idxFpReg = argOfs /
_transitionBlock
.PointerSize;
1072
return
_transitionBlock
.OffsetOfFloatArgumentRegisters + idxFpReg * TransitionBlock.SizeOfM128A;
1091
argOfs =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1154
int cbArg =
_transitionBlock
.StackElemSize(argSize);
1155
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1159
if (fFloatingPoint &&
_transitionBlock
.IsArmhfABI && !IsVarArg)
1190
return
_transitionBlock
.OffsetOfFloatArgumentRegisters + (i * cShift * 4);
1201
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1204
int argOfsInner =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1225
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _armIdxGenReg * 4;
1228
if (cbArg <= cRemainingRegs *
_transitionBlock
.PointerSize)
1231
_armIdxGenReg += ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1244
_armOfsStack += cbArg - cRemainingRegs *
_transitionBlock
.PointerSize;
1253
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1256
argOfs =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1307
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1309
argSize =
_transitionBlock
.PointerSize;
1321
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, isFloatHFA);
1328
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _arm64IdxFPReg * 16;
1339
Debug.Assert(
_transitionBlock
.IsAppleArm64ABI || (cbArg %
_transitionBlock
.PointerSize) == 0);
1341
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1346
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1355
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1359
_arm64OfsStack += cbArg + (_arm64IdxGenReg - 8) *
_transitionBlock
.PointerSize;
1373
if (
_transitionBlock
.IsAppleArm64ABI)
1392
argOfs =
_transitionBlock
.OffsetOfArgs + _arm64OfsStack;
1418
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1420
argSize =
_transitionBlock
.PointerSize;
1440
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, false);
1451
if ((1 + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters) && (1 + _rvLa64IdxGenReg <=
_transitionBlock
.NumArgumentRegisters))
1465
?
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize
1466
:
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1473
else if (cFPRegs + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters)
1475
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1492
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1494
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1495
if (_rvLa64IdxGenReg + regSlots <=
_transitionBlock
.NumArgumentRegisters)
1498
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize;
1502
else if (_rvLa64IdxGenReg <
_transitionBlock
.NumArgumentRegisters)
1506
int lastReg =
_transitionBlock
.NumArgumentRegisters - 1;
1510
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + lastReg *
_transitionBlock
.PointerSize;
1511
_rvLa64IdxGenReg =
_transitionBlock
.NumArgumentRegisters;
1512
_rvLa64OfsStack =
_transitionBlock
.PointerSize;
1518
argOfs =
_transitionBlock
.OffsetOfArgs + _rvLa64OfsStack;
1571
if (
_transitionBlock
.IsX86)
1580
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
1587
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1588
numRegistersUsed =
_transitionBlock
.NumArgumentRegisters; // Nothing else gets passed in registers for varargs
1600
if (!
_transitionBlock
.IsArgumentInRegister(ref numRegistersUsed, type, thArgType))
1604
nSizeOfArgStack +=
_transitionBlock
.StackElemSize(structSize);
1616
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1624
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1631
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1639
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1646
int maxOffset =
_transitionBlock
.OffsetOfArgs;
1653
if (
_transitionBlock
.IsX64)
1655
if (
_transitionBlock
.IsX64UnixABI)
1662
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize());
1668
stackElemSize =
_transitionBlock
.PointerSize;
1673
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize(), IsValueType(), IsFloatHfa());
1676
stackElemSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
1690
if (maxOffset ==
_transitionBlock
.OffsetOfArgs &&
_transitionBlock
.IsWasm32)
1693
maxOffset =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1699
nSizeOfArgStack = maxOffset -
_transitionBlock
.OffsetOfArgs;
1701
if (
_transitionBlock
.IsX64 && !
_transitionBlock
.IsX64UnixABI)
1703
nSizeOfArgStack = (nSizeOfArgStack > (int)
_transitionBlock
.SizeOfArgumentRegisters) ?
1704
(nSizeOfArgStack -
_transitionBlock
.SizeOfArgumentRegisters) : 0;
1709
nSizeOfArgStack = ALIGN_UP(nSizeOfArgStack,
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize));
1721
switch (
_transitionBlock
.Architecture)
1729
byteArgSize =
_transitionBlock
.PointerSize;
1730
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1731
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1744
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1746
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1747
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1748
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1749
pLoc.m_cFloatReg = ALIGN_UP(byteArgSize,
_transitionBlock
.FloatRegisterSize) /
_transitionBlock
.FloatRegisterSize;
1753
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1755
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1757
if (byteArgSize <= (4 - pLoc.m_idxGenReg) *
_transitionBlock
.PointerSize)
1759
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1766
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize) - pLoc.m_cGenReg *
_transitionBlock
.PointerSize;
1771
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1772
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1783
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1785
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1786
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1787
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1806
byteArgSize =
_transitionBlock
.PointerSize;
1809
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1811
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1812
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1816
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1817
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1834
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1836
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1837
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1838
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1848
if (GetArgType(out dummy) == CorElementType.ELEMENT_TYPE_VALUETYPE && GetArgSize() >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1850
byteArgSize =
_transitionBlock
.PointerSize;
1853
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1855
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1856
if ((pLoc.m_idxGenReg == 7) && (byteArgSize >
_transitionBlock
.PointerSize))
1863
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1867
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1868
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1874
if (
_transitionBlock
.IsX64UnixABI)
1891
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1893
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1894
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1895
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1898
else if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1900
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1905
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1908
argSizeInBytes =
_transitionBlock
.PointerSize;
1911
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(argSizeInBytes);
2019
_transitionBlock
.ComputeReturnValueTreatment(type, thRetType, IsVarArg, out _RETURN_HAS_RET_BUFFER, out _fpReturnSize, out _returnedFpFieldOffset1st, out _returnedFpFieldOffset2nd);