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;
1125
argOfs =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1188
int cbArg =
_transitionBlock
.StackElemSize(argSize);
1189
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1193
if (fFloatingPoint &&
_transitionBlock
.IsArmhfABI && !IsVarArg)
1224
return
_transitionBlock
.OffsetOfFloatArgumentRegisters + (i * cShift * 4);
1235
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1238
int argOfsInner =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1259
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _armIdxGenReg * 4;
1262
if (cbArg <= cRemainingRegs *
_transitionBlock
.PointerSize)
1265
_armIdxGenReg += ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1278
_armOfsStack += cbArg - cRemainingRegs *
_transitionBlock
.PointerSize;
1287
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1290
argOfs =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1341
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1343
argSize =
_transitionBlock
.PointerSize;
1355
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, isFloatHFA);
1362
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _arm64IdxFPReg * 16;
1373
Debug.Assert(
_transitionBlock
.IsAppleArm64ABI || (cbArg %
_transitionBlock
.PointerSize) == 0);
1375
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1380
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1389
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1393
_arm64OfsStack += cbArg + (_arm64IdxGenReg - 8) *
_transitionBlock
.PointerSize;
1407
if (
_transitionBlock
.IsAppleArm64ABI)
1426
argOfs =
_transitionBlock
.OffsetOfArgs + _arm64OfsStack;
1452
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1454
argSize =
_transitionBlock
.PointerSize;
1474
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, false);
1485
if ((1 + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters) && (1 + _rvLa64IdxGenReg <=
_transitionBlock
.NumArgumentRegisters))
1499
?
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize
1500
:
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1507
else if (cFPRegs + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters)
1509
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1526
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1528
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1529
if (_rvLa64IdxGenReg + regSlots <=
_transitionBlock
.NumArgumentRegisters)
1532
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize;
1536
else if (_rvLa64IdxGenReg <
_transitionBlock
.NumArgumentRegisters)
1540
int lastReg =
_transitionBlock
.NumArgumentRegisters - 1;
1544
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + lastReg *
_transitionBlock
.PointerSize;
1545
_rvLa64IdxGenReg =
_transitionBlock
.NumArgumentRegisters;
1546
_rvLa64OfsStack =
_transitionBlock
.PointerSize;
1552
argOfs =
_transitionBlock
.OffsetOfArgs + _rvLa64OfsStack;
1605
if (
_transitionBlock
.IsX86)
1614
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
1621
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1622
numRegistersUsed =
_transitionBlock
.NumArgumentRegisters; // Nothing else gets passed in registers for varargs
1634
if (!
_transitionBlock
.IsArgumentInRegister(ref numRegistersUsed, type, thArgType))
1638
nSizeOfArgStack +=
_transitionBlock
.StackElemSize(structSize);
1650
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1658
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1665
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1673
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1680
int maxOffset =
_transitionBlock
.OffsetOfArgs;
1687
if (
_transitionBlock
.IsX64)
1689
if (
_transitionBlock
.IsX64UnixABI)
1696
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize());
1702
stackElemSize =
_transitionBlock
.PointerSize;
1707
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize(), IsValueType(), IsFloatHfa());
1710
stackElemSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
1724
if (maxOffset ==
_transitionBlock
.OffsetOfArgs &&
_transitionBlock
.IsWasm32)
1727
maxOffset =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1733
nSizeOfArgStack = maxOffset -
_transitionBlock
.OffsetOfArgs;
1735
if (
_transitionBlock
.IsX64 && !
_transitionBlock
.IsX64UnixABI)
1737
nSizeOfArgStack = (nSizeOfArgStack > (int)
_transitionBlock
.SizeOfArgumentRegisters) ?
1738
(nSizeOfArgStack -
_transitionBlock
.SizeOfArgumentRegisters) : 0;
1743
nSizeOfArgStack = ALIGN_UP(nSizeOfArgStack,
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize));
1755
switch (
_transitionBlock
.Architecture)
1763
byteArgSize =
_transitionBlock
.PointerSize;
1764
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1765
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1778
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1780
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1781
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1782
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1783
pLoc.m_cFloatReg = ALIGN_UP(byteArgSize,
_transitionBlock
.FloatRegisterSize) /
_transitionBlock
.FloatRegisterSize;
1787
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1789
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1791
if (byteArgSize <= (4 - pLoc.m_idxGenReg) *
_transitionBlock
.PointerSize)
1793
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1800
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize) - pLoc.m_cGenReg *
_transitionBlock
.PointerSize;
1805
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1806
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1817
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1819
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1820
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1821
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1840
byteArgSize =
_transitionBlock
.PointerSize;
1843
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1845
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1846
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1850
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1851
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1868
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1870
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1871
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1872
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1882
if (GetArgType(out dummy) == CorElementType.ELEMENT_TYPE_VALUETYPE && GetArgSize() >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1884
byteArgSize =
_transitionBlock
.PointerSize;
1887
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1889
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1890
if ((pLoc.m_idxGenReg == 7) && (byteArgSize >
_transitionBlock
.PointerSize))
1897
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1901
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1902
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1908
if (
_transitionBlock
.IsX64UnixABI)
1925
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1927
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1928
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1929
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1932
else if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1934
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1939
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1942
argSizeInBytes =
_transitionBlock
.PointerSize;
1945
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(argSizeInBytes);
2053
_transitionBlock
.ComputeReturnValueTreatment(type, thRetType, IsVarArg, out _RETURN_HAS_RET_BUFFER, out _fpReturnSize, out _returnedFpFieldOffset1st, out _returnedFpFieldOffset2nd);