From 0d17fcc8745cde6fa69deebfc22ed43267cbbab7 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Tue, 8 Jul 2025 15:20:49 -0700 Subject: [PATCH] internal/gclayout: make gclayout values constants The previous versions calculated at init() prevented `interp` from running in many cases, increasing compile times due to the increased need to revert the partially interpreted results and also increasing binary runtime because fewer optimizations had happened during interp. --- src/internal/gclayout/gclayout.go | 35 ++++++++++++------------------- src/internal/reflectlite/type.go | 8 +++---- src/runtime/gc_boehm.go | 2 +- src/runtime/slice.go | 2 +- src/runtime/string.go | 8 +++---- 5 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/internal/gclayout/gclayout.go b/src/internal/gclayout/gclayout.go index aa841d8048..76a03adc6a 100644 --- a/src/internal/gclayout/gclayout.go +++ b/src/internal/gclayout/gclayout.go @@ -5,29 +5,20 @@ import "unsafe" // Internal constants for gc layout // See runtime/gc_precise.go -var ( - NoPtrs unsafe.Pointer - Pointer unsafe.Pointer - String unsafe.Pointer - Slice unsafe.Pointer -) +type Layout uintptr -func init() { - var sizeBits uintptr +const ( + // 16-bit int => bits = 4 + // 32-bit int => bits = 5 + // 64-bit int => bits = 6 + sizeBits = 4 + unsafe.Sizeof(uintptr(0))/4 - switch unsafe.Sizeof(uintptr(0)) { - case 8: - sizeBits = 6 - case 4: - sizeBits = 5 - case 2: - sizeBits = 4 - } + sizeShift = sizeBits + 1 - var sizeShift = sizeBits + 1 + NoPtrs = Layout(uintptr(0b0<