1 write to _transitionBlock
Microsoft.Diagnostics.DataContractReader.Contracts (1)
src\runtime\src\coreclr\tools\Common\CallingConvention\ArgIterator.cs (1)
371
_transitionBlock
= transitionBlock;
208 references to _transitionBlock
Microsoft.Diagnostics.DataContractReader.Contracts (208)
src\runtime\src\coreclr\tools\Common\CallingConvention\ArgIterator.cs (208)
392
Debug.Assert((_nSizeOfArgStack %
_transitionBlock
.PointerSize) == 0);
406
if (
_transitionBlock
.IsX64 && !
_transitionBlock
.IsX64UnixABI)
409
size += (uint)
_transitionBlock
.SizeOfArgumentRegisters;
412
Debug.Assert((size %
_transitionBlock
.PointerSize) == 0);
420
if (
_transitionBlock
.IsX86)
465
if (
_transitionBlock
.EnregisteredParamTypeMaxSize != 0)
467
switch (
_transitionBlock
.Architecture)
470
return
_transitionBlock
.IsArgPassedByRef(_argSize);
475
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) && (!_argTypeHandle.IsHomogeneousAggregate() || IsVarArg));
482
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) ||
_transitionBlock
.IsArgPassedByRef(_argTypeHandle));
489
return ((_argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize) ||
_transitionBlock
.IsArgPassedByRef(_argTypeHandle));
498
if (
_transitionBlock
.IsWasm32)
502
return
_transitionBlock
.IsArgPassedByRef(_argTypeHandle);
521
return
_transitionBlock
.ThisOffset;
530
if (
_transitionBlock
.IsX86)
533
return
_transitionBlock
.SizeOfTransitionBlock;
538
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
539
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
546
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
559
if (
_transitionBlock
.IsX86)
568
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEcx;
570
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEdx;
576
return
_transitionBlock
.SizeOfTransitionBlock;
581
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
582
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
589
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
602
if (
_transitionBlock
.IsX86)
611
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEcx;
613
return
_transitionBlock
.OffsetOfArgumentRegisters + TransitionBlock.X86Constants.OffsetOfEdx;
623
return
_transitionBlock
.SizeOfTransitionBlock +
_transitionBlock
.PointerSize;
626
return
_transitionBlock
.SizeOfTransitionBlock;
631
int ret =
_transitionBlock
.OffsetOfArgumentRegisters;
632
int slotSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
639
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
672
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
680
if (!
_transitionBlock
.IsX86)
693
if (!
_transitionBlock
.IsX86 && IsVarArg)
698
switch (
_transitionBlock
.Architecture)
703
numRegistersUsed =
_transitionBlock
.NumArgumentRegisters; // Nothing else gets passed in registers for varargs
706
_x86OfsStack = (int)(
_transitionBlock
.OffsetOfArgs + SizeOfArgStack());
710
if (
_transitionBlock
.IsX64UnixABI)
718
_x64WindowsCurOfs =
_transitionBlock
.OffsetOfArgs + numRegistersUsed *
_transitionBlock
.PointerSize;
723
_wasmOfsStack = numRegistersUsed *
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
770
argSize = _argForceByRef ?
_transitionBlock
.PointerSize : argSize;
774
switch (
_transitionBlock
.Architecture)
777
if (
_transitionBlock
.IsArgumentInRegister(ref _x86NumRegistersUsed, argType, _argTypeHandle))
779
return
_transitionBlock
.OffsetOfArgumentRegisters + (
_transitionBlock
.NumArgumentRegisters - _x86NumRegistersUsed) *
_transitionBlock
.PointerSize;
782
_x86OfsStack -=
_transitionBlock
.StackElemSize(argSize);
785
Debug.Assert(argOfs >=
_transitionBlock
.OffsetOfArgs);
789
if (
_transitionBlock
.IsX64UnixABI)
791
int cbArg =
_transitionBlock
.StackElemSize(argSize);
838
if ((cFPRegs + _x64UnixIdxFPReg <= TransitionBlock.X64UnixTransitionBlock.NUM_FLOAT_ARGUMENT_REGISTERS) && (cGenRegs + _x64UnixIdxGenReg) <=
_transitionBlock
.NumArgumentRegisters)
870
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _x64UnixIdxFPReg * 8;
877
if (_x64UnixIdxGenReg + cGenRegs <=
_transitionBlock
.NumArgumentRegisters)
879
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _x64UnixIdxGenReg * 8;
887
argOfs =
_transitionBlock
.OffsetOfArgs + _x64UnixIdxStack * 8;
888
int cArgSlots = cbArg /
_transitionBlock
.PointerSize;
911
argOfs = _x64WindowsCurOfs -
_transitionBlock
.OffsetOfArgs;
912
_x64WindowsCurOfs +=
_transitionBlock
.PointerSize;
914
if ((cFPRegs == 0) || (argOfs >=
_transitionBlock
.SizeOfArgumentRegisters))
916
return argOfs +
_transitionBlock
.OffsetOfArgs;
920
int idxFpReg = argOfs /
_transitionBlock
.PointerSize;
921
return
_transitionBlock
.OffsetOfFloatArgumentRegisters + idxFpReg * TransitionBlock.SizeOfM128A;
940
argOfs =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1003
int cbArg =
_transitionBlock
.StackElemSize(argSize);
1004
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1008
if (fFloatingPoint &&
_transitionBlock
.IsArmhfABI && !IsVarArg)
1039
return
_transitionBlock
.OffsetOfFloatArgumentRegisters + (i * cShift * 4);
1050
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1053
int argOfsInner =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1074
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _armIdxGenReg * 4;
1077
if (cbArg <= cRemainingRegs *
_transitionBlock
.PointerSize)
1080
_armIdxGenReg += ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1093
_armOfsStack += cbArg - cRemainingRegs *
_transitionBlock
.PointerSize;
1102
_armOfsStack = ALIGN_UP(_armOfsStack,
_transitionBlock
.PointerSize * 2);
1105
argOfs =
_transitionBlock
.OffsetOfArgs + _armOfsStack;
1156
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1158
argSize =
_transitionBlock
.PointerSize;
1170
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, isFloatHFA);
1177
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _arm64IdxFPReg * 16;
1188
Debug.Assert(
_transitionBlock
.IsAppleArm64ABI || (cbArg %
_transitionBlock
.PointerSize) == 0);
1190
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1195
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1204
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _arm64IdxGenReg * 8;
1208
_arm64OfsStack += cbArg + (_arm64IdxGenReg - 8) *
_transitionBlock
.PointerSize;
1222
if (
_transitionBlock
.IsAppleArm64ABI)
1241
argOfs =
_transitionBlock
.OffsetOfArgs + _arm64OfsStack;
1267
if (argSize >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1269
argSize =
_transitionBlock
.PointerSize;
1288
int cbArg =
_transitionBlock
.StackElemSize(argSize, isValueType, false);
1299
if ((1 + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters) && (1 + _rvLa64IdxGenReg <=
_transitionBlock
.NumArgumentRegisters))
1313
?
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize
1314
:
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1321
else if (cFPRegs + _rvLa64IdxFPReg <=
_transitionBlock
.NumArgumentRegisters)
1323
int argOfsInner =
_transitionBlock
.OffsetOfFloatArgumentRegisters + _rvLa64IdxFPReg *
_transitionBlock
.FloatRegisterSize;
1340
Debug.Assert((cbArg %
_transitionBlock
.PointerSize) == 0);
1342
int regSlots = ALIGN_UP(cbArg,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize;
1343
if (_rvLa64IdxGenReg + regSlots <=
_transitionBlock
.NumArgumentRegisters)
1346
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + _rvLa64IdxGenReg *
_transitionBlock
.PointerSize;
1350
else if (_rvLa64IdxGenReg <
_transitionBlock
.NumArgumentRegisters)
1354
int lastReg =
_transitionBlock
.NumArgumentRegisters - 1;
1358
int argOfsInner =
_transitionBlock
.OffsetOfArgumentRegisters + lastReg *
_transitionBlock
.PointerSize;
1359
_rvLa64IdxGenReg =
_transitionBlock
.NumArgumentRegisters;
1360
_rvLa64OfsStack =
_transitionBlock
.PointerSize;
1366
argOfs =
_transitionBlock
.OffsetOfArgs + _rvLa64OfsStack;
1419
if (
_transitionBlock
.IsX86)
1428
if (HasRetBuffArg() &&
_transitionBlock
.IsRetBuffPassedAsFirstArg)
1435
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1436
numRegistersUsed =
_transitionBlock
.NumArgumentRegisters; // Nothing else gets passed in registers for varargs
1448
if (!
_transitionBlock
.IsArgumentInRegister(ref numRegistersUsed, type, thArgType))
1452
nSizeOfArgStack +=
_transitionBlock
.StackElemSize(structSize);
1464
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1472
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1479
if (numRegistersUsed <
_transitionBlock
.NumArgumentRegisters)
1487
nSizeOfArgStack +=
_transitionBlock
.PointerSize;
1494
int maxOffset =
_transitionBlock
.OffsetOfArgs;
1501
if (
_transitionBlock
.IsX64)
1503
if (
_transitionBlock
.IsX64UnixABI)
1510
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize());
1516
stackElemSize =
_transitionBlock
.PointerSize;
1521
stackElemSize =
_transitionBlock
.StackElemSize(GetArgSize(), IsValueType(), IsFloatHfa());
1524
stackElemSize =
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize);
1538
if (maxOffset ==
_transitionBlock
.OffsetOfArgs &&
_transitionBlock
.IsWasm32)
1541
maxOffset =
_transitionBlock
.OffsetOfArgs + _wasmOfsStack;
1547
nSizeOfArgStack = maxOffset -
_transitionBlock
.OffsetOfArgs;
1549
if (
_transitionBlock
.IsX64 && !
_transitionBlock
.IsX64UnixABI)
1551
nSizeOfArgStack = (nSizeOfArgStack > (int)
_transitionBlock
.SizeOfArgumentRegisters) ?
1552
(nSizeOfArgStack -
_transitionBlock
.SizeOfArgumentRegisters) : 0;
1557
nSizeOfArgStack = ALIGN_UP(nSizeOfArgStack,
_transitionBlock
.StackElemSize(
_transitionBlock
.PointerSize));
1569
switch (
_transitionBlock
.Architecture)
1577
byteArgSize =
_transitionBlock
.PointerSize;
1578
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1579
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1592
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1594
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1595
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1596
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1597
pLoc.m_cFloatReg = ALIGN_UP(byteArgSize,
_transitionBlock
.FloatRegisterSize) /
_transitionBlock
.FloatRegisterSize;
1601
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1603
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1605
if (byteArgSize <= (4 - pLoc.m_idxGenReg) *
_transitionBlock
.PointerSize)
1607
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1614
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize) - pLoc.m_cGenReg *
_transitionBlock
.PointerSize;
1619
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1620
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize);
1631
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1633
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1634
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1635
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1654
byteArgSize =
_transitionBlock
.PointerSize;
1657
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1659
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1660
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1664
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1665
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1682
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1684
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1685
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1686
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1695
if (GetArgType(out _) == CorElementType.ELEMENT_TYPE_VALUETYPE && GetArgSize() >
_transitionBlock
.EnregisteredParamTypeMaxSize)
1697
byteArgSize =
_transitionBlock
.PointerSize;
1700
if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1702
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1703
if ((pLoc.m_idxGenReg == 7) && (byteArgSize >
_transitionBlock
.PointerSize))
1710
pLoc.m_cGenReg = (short)(ALIGN_UP(byteArgSize,
_transitionBlock
.PointerSize) /
_transitionBlock
.PointerSize);
1714
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1715
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(byteArgSize, IsValueType(), IsFloatHfa());
1721
if (
_transitionBlock
.IsX64UnixABI)
1738
if (
_transitionBlock
.IsFloatArgumentRegisterOffset(argOffset))
1740
int floatRegOfsInBytes = argOffset -
_transitionBlock
.OffsetOfFloatArgumentRegisters;
1741
Debug.Assert((floatRegOfsInBytes %
_transitionBlock
.FloatRegisterSize) == 0);
1742
pLoc.m_idxFloatReg = floatRegOfsInBytes /
_transitionBlock
.FloatRegisterSize;
1745
else if (!
_transitionBlock
.IsStackArgumentOffset(argOffset))
1747
pLoc.m_idxGenReg =
_transitionBlock
.GetArgumentIndexFromOffset(argOffset);
1752
pLoc.m_byteStackIndex =
_transitionBlock
.GetStackArgumentByteIndexFromOffset(argOffset);
1755
argSizeInBytes =
_transitionBlock
.PointerSize;
1758
pLoc.m_byteStackSize =
_transitionBlock
.StackElemSize(argSizeInBytes);
1866
_transitionBlock
.ComputeReturnValueTreatment(type, thRetType, IsVarArg, out _RETURN_HAS_RET_BUFFER, out _fpReturnSize, out _returnedFpFieldOffset1st, out _returnedFpFieldOffset2nd);