Description
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:
- Separating the normalization for safepoints (which uses a -1 adjustment) and fully-interruptible code (where no adjustment is used).
- 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