mirror of
https://github.com/golang/go.git
synced 2025-10-19 11:03:18 +00:00
cmd/compile: remove residual register GC map code
We used to generate register GC maps as an experimental approach for asynchronous preemption, which later we chose not to take. Most of the register GC map code are already removed. One exception is that the ssa.Register type still contains a field for the register map index. Remove it. Change-Id: Ib177ebce9548aa5ffbcaedd4b507240ea7df8afe Reviewed-on: https://go-review.googlesource.com/c/go/+/651076 Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
266b0cff18
commit
3b25b3c195
4 changed files with 551 additions and 586 deletions
|
@ -426,7 +426,6 @@ func genOp() {
|
|||
continue
|
||||
}
|
||||
fmt.Fprintf(w, "var registers%s = [...]Register {\n", a.name)
|
||||
var gcRegN int
|
||||
num := map[string]int8{}
|
||||
for i, r := range a.regnames {
|
||||
num[r] = int8(i)
|
||||
|
@ -443,14 +442,7 @@ func genOp() {
|
|||
default:
|
||||
objname = pkg + ".REG_" + r
|
||||
}
|
||||
// Assign a GC register map index to registers
|
||||
// that may contain pointers.
|
||||
gcRegIdx := -1
|
||||
if a.gpregmask&(1<<uint(i)) != 0 {
|
||||
gcRegIdx = gcRegN
|
||||
gcRegN++
|
||||
}
|
||||
fmt.Fprintf(w, " {%d, %s, %d, \"%s\"},\n", i, objname, gcRegIdx, r)
|
||||
fmt.Fprintf(w, " {%d, %s, \"%s\"},\n", i, objname, r)
|
||||
}
|
||||
parameterRegisterList := func(paramNamesString string) []int8 {
|
||||
paramNamesString = strings.TrimSpace(paramNamesString)
|
||||
|
@ -477,10 +469,6 @@ func genOp() {
|
|||
paramIntRegs := parameterRegisterList(a.ParamIntRegNames)
|
||||
paramFloatRegs := parameterRegisterList(a.ParamFloatRegNames)
|
||||
|
||||
if gcRegN > 32 {
|
||||
// Won't fit in a uint32 mask.
|
||||
log.Fatalf("too many GC registers (%d > 32) on %s", gcRegN, a.name)
|
||||
}
|
||||
fmt.Fprintln(w, "}")
|
||||
fmt.Fprintf(w, "var paramIntReg%s = %#v\n", a.name, paramIntRegs)
|
||||
fmt.Fprintf(w, "var paramFloatReg%s = %#v\n", a.name, paramFloatRegs)
|
||||
|
|
|
@ -37,24 +37,23 @@ type Config struct {
|
|||
floatParamRegs []int8 // register numbers of floating param (in/out) registers
|
||||
ABI1 *abi.ABIConfig // "ABIInternal" under development // TODO change comment when this becomes current
|
||||
ABI0 *abi.ABIConfig
|
||||
GCRegMap []*Register // garbage collector register map, by GC register index
|
||||
FPReg int8 // register number of frame pointer, -1 if not used
|
||||
LinkReg int8 // register number of link register if it is a general purpose register, -1 if not used
|
||||
hasGReg bool // has hardware g register
|
||||
ctxt *obj.Link // Generic arch information
|
||||
optimize bool // Do optimization
|
||||
noDuffDevice bool // Don't use Duff's device
|
||||
useSSE bool // Use SSE for non-float operations
|
||||
useAvg bool // Use optimizations that need Avg* operations
|
||||
useHmul bool // Use optimizations that need Hmul* operations
|
||||
SoftFloat bool //
|
||||
Race bool // race detector enabled
|
||||
BigEndian bool //
|
||||
UseFMA bool // Use hardware FMA operation
|
||||
unalignedOK bool // Unaligned loads/stores are ok
|
||||
haveBswap64 bool // architecture implements Bswap64
|
||||
haveBswap32 bool // architecture implements Bswap32
|
||||
haveBswap16 bool // architecture implements Bswap16
|
||||
FPReg int8 // register number of frame pointer, -1 if not used
|
||||
LinkReg int8 // register number of link register if it is a general purpose register, -1 if not used
|
||||
hasGReg bool // has hardware g register
|
||||
ctxt *obj.Link // Generic arch information
|
||||
optimize bool // Do optimization
|
||||
noDuffDevice bool // Don't use Duff's device
|
||||
useSSE bool // Use SSE for non-float operations
|
||||
useAvg bool // Use optimizations that need Avg* operations
|
||||
useHmul bool // Use optimizations that need Hmul* operations
|
||||
SoftFloat bool //
|
||||
Race bool // race detector enabled
|
||||
BigEndian bool //
|
||||
UseFMA bool // Use hardware FMA operation
|
||||
unalignedOK bool // Unaligned loads/stores are ok
|
||||
haveBswap64 bool // architecture implements Bswap64
|
||||
haveBswap32 bool // architecture implements Bswap32
|
||||
haveBswap16 bool // architecture implements Bswap16
|
||||
}
|
||||
|
||||
type (
|
||||
|
@ -385,21 +384,6 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
|
|||
opcodeTable[Op386LoweredWB].reg.clobbers |= 1 << 3 // BX
|
||||
}
|
||||
|
||||
// Create the GC register map index.
|
||||
// TODO: This is only used for debug printing. Maybe export config.registers?
|
||||
gcRegMapSize := int16(0)
|
||||
for _, r := range c.registers {
|
||||
if r.gcNum+1 > gcRegMapSize {
|
||||
gcRegMapSize = r.gcNum + 1
|
||||
}
|
||||
}
|
||||
c.GCRegMap = make([]*Register, gcRegMapSize)
|
||||
for i, r := range c.registers {
|
||||
if r.gcNum != -1 {
|
||||
c.GCRegMap[r.gcNum] = &c.registers[i]
|
||||
}
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ type Location interface {
|
|||
type Register struct {
|
||||
num int32 // dense numbering
|
||||
objNum int16 // register number from cmd/internal/obj/$ARCH
|
||||
gcNum int16 // GC register map number (dense numbering of registers that can contain pointers)
|
||||
name string
|
||||
}
|
||||
|
||||
|
@ -34,12 +33,6 @@ func (r *Register) ObjNum() int16 {
|
|||
return r.objNum
|
||||
}
|
||||
|
||||
// GCNum returns the runtime GC register index of r, or -1 if this
|
||||
// register can't contain pointers.
|
||||
func (r *Register) GCNum() int16 {
|
||||
return r.gcNum
|
||||
}
|
||||
|
||||
// A LocalSlot is a location in the stack frame, which identifies and stores
|
||||
// part or all of a PPARAM, PPARAMOUT, or PAUTO ONAME node.
|
||||
// It can represent a whole variable, part of a larger stack slot, or part of a
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue