386 lines
13 KiB
C#
386 lines
13 KiB
C#
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
|
|
/*******************************************************************/
|
|
/* WARNING */
|
|
/* This file should be identical in the Bartok and Singularity */
|
|
/* depots. Master copy resides in Bartok Depot. Changes should be */
|
|
/* made to Bartok Depot and propagated to Singularity Depot. */
|
|
/*******************************************************************/
|
|
|
|
// This code is used in both mscorlibOverride and for building applications
|
|
// (in particular Bartok). This makes sure the constant used in Bartok
|
|
// compiler and mscorlibOverride are the same
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace Microsoft.Bartok.Runtime {
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
public enum StructuralType {
|
|
None = 0x00,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Reference = 0x01,
|
|
UntracedPointer = 0x02,
|
|
Struct = 0x03,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Bool = 0x04,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Char = 0x05,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Int8 = 0x06,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Int16 = 0x07,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Int32 = 0x08,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Int64 = 0x09,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
UInt8 = 0x0a,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
UInt16 = 0x0b,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
UInt32 = 0x0c,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
UInt64 = 0x0d,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Float32 = 0x0e,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
Float64 = 0x0f,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
IntPtr = 0x10,
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
UIntPtr = 0x11,
|
|
Void = 0x12,
|
|
};
|
|
|
|
public enum GCType{
|
|
AdaptiveCopyingCollector = 0x00,
|
|
MarkSweepCollector = 0x01,
|
|
SemispaceCollector = 0x02,
|
|
SlidingCollector = 0x03,
|
|
ReferenceCountingCollector = 0x04,
|
|
ConcurrentMSCollector = 0x05,
|
|
DeferredReferenceCountingCollector = 0x06,
|
|
NullCollector = 0x07,
|
|
AtomicRCCollector = 0x08,
|
|
TableMarkSweepCollector = 0x09,
|
|
CoCoMSCollector = 0x0a
|
|
};
|
|
|
|
public enum PTType{
|
|
CentralPT = 0,
|
|
CentralPTHimem,
|
|
FlatDistributedPT,
|
|
FlatDistributedPTTest
|
|
};
|
|
|
|
public enum WBType {
|
|
noWB = 0,
|
|
Generational = 1,
|
|
CMS = 2,
|
|
ARC = 3,
|
|
AllCards = 4,
|
|
ExpandingCoCo = 5,
|
|
ProbabilisticCoCo = 6,
|
|
AbortingCoCo = 7,
|
|
BrooksTest = 8,
|
|
BrooksCMSTest = 9,
|
|
};
|
|
|
|
public class BarrierMask {
|
|
public class PathSpec {
|
|
public const int AllowFast = 1;
|
|
public const int UseMask = 2;
|
|
}
|
|
public class Forward {
|
|
public const int Nullable = 4;
|
|
public const int Writable = 8;
|
|
}
|
|
}
|
|
|
|
public enum RemSetType {
|
|
noRemSet = 0,
|
|
SSB = 1,
|
|
Cards = 2,
|
|
};
|
|
|
|
public enum CopyScanType {
|
|
noCopyScan = 0,
|
|
CheneyScan = 1,
|
|
HierarchicalScan = 2,
|
|
NestedHierarchicalScan = 3,
|
|
};
|
|
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
public class Constants {
|
|
public const int TypeTestDisplaySize = 6;
|
|
public const int TypeTestDisplayPosCache = TypeTestDisplaySize + 1;
|
|
#if true
|
|
public const bool TypeTestDisplayIncludesObject = false;
|
|
public const int TypeTestDisplayObjectOffset = 0;
|
|
#else
|
|
public const bool TypeTestDisplayIncludesObject = true;
|
|
public const int TypeTestDisplayObjectOffset = 1;
|
|
#endif
|
|
public const int LargeObjectBits = 16;
|
|
|
|
// shared by compact record
|
|
public const int CompactEntryMaskStart = 6;
|
|
public const int CompactArgMaskStart = 2;
|
|
public const int CompactArgMask = 0xf;
|
|
|
|
// shared by full record
|
|
public const int FullEntryMaskStart = 1;
|
|
public const int FullRecordMask = 0x7;
|
|
|
|
// ISA_ is the prefix used by Singularity for the system architecture
|
|
#if X86 || ISA_IX86
|
|
// constants used by GC activation descriptor table entry
|
|
public const int InbetweenSlotsAboveNoFP = 1;
|
|
public const int InbetweenSlotsBelowNoFP = 0;
|
|
public const int InbetweenSlotsAboveFP = 2;
|
|
public const int InbetweenSlotsBelowFP = 0;
|
|
|
|
public const int LastBitPos = 31;
|
|
// Compact record Frame pointer omitted
|
|
public const int CompactStackBitMaskStartNoFP = 24;
|
|
public const int CompactEntryMaskNoFP = 0x1f;
|
|
public const int CompactCalleeSaveUseStartNoFP = 11;
|
|
public const int CompactCalleeSaveUseMaskNoFP = 0xff;
|
|
public const int CompactFrameSizeStartNoFP = 19;
|
|
public const int CompactFrameSizeMaskNoFP = 0x1f;
|
|
|
|
// Compact record Use frame pointer
|
|
public const int CompactStackBitMaskStartFP = 16;
|
|
public const int CompactEntryMaskFP = 0xf;
|
|
public const int CompactCalleeSaveUseStartFP = 10;
|
|
public const int CompactCalleeSaveUseMaskFP = 0x3f;
|
|
|
|
// Full record Frame pointer omitted.
|
|
public const int FullEntryMaskNoFP = 0x1f;
|
|
public const int FullPinnedPosNoFP = 17;
|
|
public const int FullPinnedStartNoFP = 18;
|
|
public const int FullCalleeSaveUseStartNoFP = 6;
|
|
public const int FullCalleeSaveUseMaskNoFP = 0xff;
|
|
public const int FullRecordSizePosNoFP = 14;
|
|
public const int FullFrameSizeStartNoFP = 22;
|
|
|
|
// Full record Use Frame pointer
|
|
public const int FullEntryMaskFP = 0xf;
|
|
public const int FullPinnedPosFP = 14;
|
|
public const int FullPinnedStartFP = 15;
|
|
public const int FullCalleeSaveUseStartFP = 5;
|
|
public const int FullCalleeSaveUseMaskFP = 0x3f;
|
|
public const int FullRecordSizePosFP = 11;
|
|
|
|
// ISA_ is the prefix used by Singularity for the system architecture
|
|
#elif AMD64 || ISA_IX64
|
|
// constants used by GC activation descriptor table entry
|
|
public const int InbetweenSlotsAboveNoFP = 1;
|
|
public const int InbetweenSlotsBelowNoFP = 0;
|
|
public const int InbetweenSlotsAboveFP = 2;
|
|
public const int InbetweenSlotsBelowFP = 0;
|
|
|
|
public const int LastBitPos = 63;
|
|
// Compact record Frame pointer omitted
|
|
public const int CompactStackBitMaskStartNoFP = 36;
|
|
public const int CompactEntryMaskNoFP = 0x1ff;
|
|
public const int CompactCalleeSaveUseStartNoFP = 15;
|
|
public const int CompactCalleeSaveUseMaskNoFP = 0xffff;
|
|
public const int CompactFrameSizeStartNoFP =31;
|
|
public const int CompactFrameSizeMaskNoFP = 0x1f;
|
|
|
|
// Compact record Use frame pointer
|
|
public const int CompactStackBitMaskStartFP = 28;
|
|
public const int CompactEntryMaskFP = 0xff;
|
|
public const int CompactCalleeSaveUseStartFP = 14;
|
|
public const int CompactCalleeSaveUseMaskFP = 0x3fff;
|
|
|
|
// Full record Frame pointer omitted
|
|
public const int FullEntryMaskNoFP = 0x1ff;
|
|
public const int FullPinnedPosNoFP = 29;
|
|
public const int FullPinnedStartNoFP = 30;
|
|
public const int FullCalleeSaveUseStartNoFP = 10;
|
|
public const int FullCalleeSaveUseMaskNoFP = 0xffff;
|
|
public const int FullRecordSizePosNoFP = 26;
|
|
public const int FullFrameSizeStartNoFP = 38;
|
|
|
|
// Full record Use Frame pointer
|
|
public const int FullEntryMaskFP = 0xff;
|
|
public const int FullPinnedPosFP = 26;
|
|
public const int FullPinnedStartFP = 27;
|
|
public const int FullCalleeSaveUseStartFP = 9;
|
|
public const int FullCalleeSaveUseMaskFP = 0x3fff;
|
|
public const int FullRecordSizePosFP = 23;
|
|
|
|
// ISA_ is the prefix used by Singularity for the system architecture
|
|
#elif ARM || ISA_ARM
|
|
// FIX
|
|
// constants used by GC activation descriptor table entry
|
|
public const int InbetweenSlotsAboveNoFP = 0;
|
|
public const int InbetweenSlotsBelowNoFP = 2;
|
|
public const int InbetweenSlotsAboveFP = 0;
|
|
public const int InbetweenSlotsBelowFP = 3;
|
|
|
|
public const int LastBitPos = 31;
|
|
|
|
// Shared by all records
|
|
public const int CompactMask = 0x1;
|
|
|
|
// Compact record common constants
|
|
public const int CompactOmitFPMask = 0x2;
|
|
public const int CompactTransitionRecordMask = (0x1 << 6);
|
|
|
|
// Compact record Frame pointer omitted
|
|
// BUGBUG: The bridge does not support FPO. These constants have not been fixed.
|
|
public const int CompactStackBitMaskStartNoFP = 36;
|
|
public const int CompactEntryMaskNoFP = 0x1f;
|
|
public const int CompactCalleeSaveUseStartNoFP = 15;
|
|
public const int CompactCalleeSaveUseMaskNoFP = 0xffff;
|
|
public const int CompactFrameSizeStartNoFP =31;
|
|
public const int CompactFrameSizeMaskNoFP = 0x1f;
|
|
|
|
// Compact record Use frame pointer
|
|
public const int CompactStackBitMaskStartFP = 16;
|
|
public const int CompactEntryMaskFP = 0xf;
|
|
public const int CompactCalleeSaveStartFP = 7;
|
|
public const int CompactCalleeSaveMaskFP = 0x7;
|
|
public const int CompactCalleeSaveUseStartFP = 10;
|
|
public const int CompactCalleeSaveUseMaskFP = 0x3f;
|
|
|
|
// Full record common constants
|
|
public const int FullOmitFPMask = 0x1;
|
|
public const int FullTransitionRecordMask = (0x1 << 1);
|
|
|
|
|
|
// Full record Frame pointer omitted
|
|
// BUGBUG: The bridge does not support FPO. These constants have not been fixed.
|
|
public const int FullEntryMaskNoFP = 0x3ff;
|
|
public const int FullPinnedPosNoFP = 29;
|
|
public const int FullPinnedStartNoFP = 30;
|
|
public const int FullCalleeSaveUseStartNoFP = 10;
|
|
public const int FullCalleeSaveUseMaskNoFP = 0xffff;
|
|
public const int FullRecordSizePosNoFP = 26;
|
|
public const int FullFrameSizeStartNoFP = 38;
|
|
|
|
// Full record Use Frame pointer
|
|
public const int FullEntryMaskFP = 0xff;
|
|
public const int FullPinnedPosFP = 26;
|
|
public const int FullPinnedStartFP = 27;
|
|
public const int FullCalleeSaveStartFP = 2;
|
|
public const int FullCalleeSaveMaskFP = 0x7f;
|
|
public const int FullCalleeSaveUseStartFP = 9;
|
|
public const int FullCalleeSaveUseMaskFP = 0x3fff;
|
|
public const int FullRecordSizePosFP = 23;
|
|
#else
|
|
#error Undefined architecture
|
|
#endif
|
|
|
|
// Workaround for lack of enum printing in Bartok
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
public static string[] StructuralTypeNames = {
|
|
"None",
|
|
"Reference",
|
|
"UntracedPointer",
|
|
"Struct",
|
|
"Bool",
|
|
"Char",
|
|
"Int8",
|
|
"Int16",
|
|
"Int32",
|
|
"Int64",
|
|
"UnsignedInt8",
|
|
"UnsignedInt16",
|
|
"UnsignedInt32",
|
|
"UnsignedInt64",
|
|
"Float32",
|
|
"Float64",
|
|
"IntPtr",
|
|
"UIntPtr",
|
|
"Void",
|
|
};
|
|
|
|
// BUGBUG: what about entry for structs?
|
|
#if SINGULARITY
|
|
[AccessedByRuntime("Referenced from C++")]
|
|
#endif
|
|
public int[] arrayOfStride = {
|
|
0,
|
|
4,
|
|
4,
|
|
0,
|
|
1,
|
|
2,
|
|
1,
|
|
2,
|
|
4,
|
|
8,
|
|
1,
|
|
2,
|
|
4,
|
|
8,
|
|
4,
|
|
8,
|
|
4,
|
|
4,
|
|
4,
|
|
};
|
|
};
|
|
|
|
#if !BARTOK_SYSTEM_EXTENSION
|
|
[RequiredByBartok]
|
|
#endif
|
|
public enum TypeInitState {
|
|
Ready = 0,
|
|
Running = 1,
|
|
Failed = 2,
|
|
Completed = 3
|
|
};
|
|
|
|
public enum StageControlOption {
|
|
TryAllSupport = 0,
|
|
InstrumentVirtualCalls = 1,
|
|
PInvoke = 2,
|
|
};
|
|
}
|
|
|