Skip to content

GCInfo: Save bits in Code Offset encoding #5677

@swaroop-sridhar

Description

@swaroop-sridhar

Core Offsets on Thumb/Arm/Arm64 are 2/4/8 byte aligned.
So, GCInfo encoding can save bits by eliminating the last few bits in the offset in NORMALIZE_CODE_OFFSET()

However, one problem with this is in the code-offsets for safepoints, which are encoded with a -1 adjustment:
https://github.com/dotnet/coreclr/blob/master/src/gcinfo/gcinfoencoder.cpp#L1210-L1218
https://github.com/dotnet/coreclr/blob/master/src/vm/gcinfodecoder.cpp#L397-L401
So, currently code offsets are encoded as-is.

So, this work item is to take reduce the number of bits used in the encoding by:

  1. Separating the normalization for safepoints (which uses a -1 adjustment) and fully-interruptible code (where no adjustment is used).
  2. Have an architecture specific adjustment value (ex: -1 on X86, -2 on ARM, -4 on ARM64) so that we can take advantage of the alignment, and still keep the offset within the safepoint instruction.

category:throughput
theme:gc-info
skill-level:intermediate
cost:medium

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIenhancementProduct code improvement that does NOT require public API changes/additionsin-prThere is an active PR which will close this issue when it is merged

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions