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