singrdk/base/Imported/Bartok/runtime/shared/System/Shared.cs

386 lines
13 KiB
C#
Raw Permalink Normal View History

2008-11-17 18:29:00 -05:00
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
2008-03-05 09:52:00 -05:00
/*******************************************************************/
/* 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 {
2008-11-17 18:29:00 -05:00
#if SINGULARITY
[AccessedByRuntime("Referenced from C++")]
#endif
2008-03-05 09:52:00 -05:00
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,
2008-11-17 18:29:00 -05:00
CoCoMSCollector = 0x0a
2008-03-05 09:52:00 -05:00
};
public enum PTType{
CentralPT = 0,
CentralPTHimem,
FlatDistributedPT,
FlatDistributedPTTest
};
public enum WBType {
noWB = 0,
Generational = 1,
CMS = 2,
ARC = 3,
AllCards = 4,
2008-11-17 18:29:00 -05:00
ExpandingCoCo = 5,
ProbabilisticCoCo = 6,
AbortingCoCo = 7,
BrooksTest = 8,
BrooksCMSTest = 9,
2008-03-05 09:52:00 -05:00
};
2008-11-17 18:29:00 -05:00
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;
}
}
2008-03-05 09:52:00 -05:00
public enum RemSetType {
noRemSet = 0,
SSB = 1,
Cards = 2,
};
public enum CopyScanType {
noCopyScan = 0,
CheneyScan = 1,
HierarchicalScan = 2,
NestedHierarchicalScan = 3,
};
2008-11-17 18:29:00 -05:00
#if SINGULARITY
[AccessedByRuntime("Referenced from C++")]
#endif
2008-03-05 09:52:00 -05:00
public class Constants {
2008-11-17 18:29:00 -05:00
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;
2008-03-05 09:52:00 -05:00
// 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;
2008-11-17 18:29:00 -05:00
// 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;
2008-03-05 09:52:00 -05:00
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;
2008-11-17 18:29:00 -05:00
// 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;
2008-03-05 09:52:00 -05:00
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;
2008-11-17 18:29:00 -05:00
// 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
2008-03-05 09:52:00 -05:00
#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,
};
}