| File: Contracts\GCInfo\PlatformTraits\RISCV64GCInfoTraits.cs | Web Access |
| Project: src\runtime\src\native\managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj (Microsoft.Diagnostics.DataContractReader.Contracts) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; namespace Microsoft.Diagnostics.DataContractReader.Contracts.GCInfoHelpers; internal class RISCV64GCInfoTraits : IGCInfoTraits { public static uint DenormalizeStackBaseRegister(uint reg) => reg == 0 ? 8u : 2u; public static uint DenormalizeCodeLength(uint len) => len << 1; public static uint NormalizeCodeLength(uint len) => len >> 1; public static uint DenormalizeCodeOffset(uint offset) => offset << 1; public static uint NormalizeCodeOffset(uint offset) => offset >> 1; public static int DenormalizeStackSlot(int x) => x << 3; public static uint DenormalizeSizeOfStackArea(uint size) => size << 3; public static int GENERICS_INST_CONTEXT_STACK_SLOT_ENCBASE => 6; public static int GS_COOKIE_STACK_SLOT_ENCBASE => 6; public static int CODE_LENGTH_ENCBASE => 8; public static int STACK_BASE_REGISTER_ENCBASE => 2; public static int SIZE_OF_STACK_AREA_ENCBASE => 3; public static int SIZE_OF_EDIT_AND_CONTINUE_PRESERVED_AREA_ENCBASE => 4; public static int SIZE_OF_EDIT_AND_CONTINUE_FIXED_STACK_FRAME_ENCBASE => 4; public static int REVERSE_PINVOKE_FRAME_ENCBASE => 6; public static int NUM_REGISTERS_ENCBASE => 3; public static int NUM_STACK_SLOTS_ENCBASE => 2; public static int NUM_UNTRACKED_SLOTS_ENCBASE => 1; public static int NORM_PROLOG_SIZE_ENCBASE => 5; public static int NORM_EPILOG_SIZE_ENCBASE => 3; public static int INTERRUPTIBLE_RANGE_DELTA1_ENCBASE => 6; public static int INTERRUPTIBLE_RANGE_DELTA2_ENCBASE => 6; public static int REGISTER_ENCBASE => 3; public static int REGISTER_DELTA_ENCBASE => 2; public static int STACK_SLOT_ENCBASE => 6; public static int STACK_SLOT_DELTA_ENCBASE => 4; public static int NUM_SAFE_POINTS_ENCBASE => 3; public static int NUM_INTERRUPTIBLE_RANGES_ENCBASE => 1; public static bool HAS_FIXED_STACK_PARAMETER_SCRATCH_AREA => true; // RISCV64 scratch registers: RA (1), T0-T2 (5-7), A0-A7 (10-17), T3-T6 (28-31) // See gcinfodecoder.cpp IsScratchRegister for TARGET_RISCV64 public static bool IsScratchRegister(uint regNum) => regNum == 1 || (regNum >= 5 && regNum <= 7) || (regNum >= 10 && regNum <= 17) || regNum >= 28; }