mirror of
https://github.com/golang/go.git
synced 2025-05-29 03:11:26 +00:00
cmd/compile: document regalloc fields
Document what the fields of regalloc mean. Hopefully will help people understand how the register allocator works. Change-Id: Ic322ed2019cc839b812740afe8cd2cf0b61da046 Reviewed-on: https://go-review.googlesource.com/137016 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
fdceb2a11b
commit
f493e55723
@ -63,9 +63,14 @@ type blockData struct {
|
||||
}
|
||||
|
||||
type regInfo struct {
|
||||
inputs []regMask
|
||||
// inputs[i] encodes the set of registers allowed for the i'th input.
|
||||
// Inputs that don't use registers (flags, memory, etc.) should be 0.
|
||||
inputs []regMask
|
||||
// clobbers encodes the set of registers that are overwritten by
|
||||
// the instruction (other than the output registers).
|
||||
clobbers regMask
|
||||
outputs []regMask
|
||||
// outpus[i] encodes the set of registers allowed for the i'th output.
|
||||
outputs []regMask
|
||||
}
|
||||
|
||||
type regMask uint64
|
||||
|
@ -50,9 +50,17 @@ type outputInfo struct {
|
||||
}
|
||||
|
||||
type regInfo struct {
|
||||
inputs []inputInfo // ordered in register allocation order
|
||||
// inputs encodes the register restrictions for an instruction's inputs.
|
||||
// Each entry specifies an allowed register set for a particular input.
|
||||
// They are listed in the order in which regalloc should pick a register
|
||||
// from the register set (most constrained first).
|
||||
// Inputs which do not need registers are not listed.
|
||||
inputs []inputInfo
|
||||
// clobbers encodes the set of registers that are overwritten by
|
||||
// the instruction (other than the output registers).
|
||||
clobbers regMask
|
||||
outputs []outputInfo // ordered in register allocation order
|
||||
// outputs is the same as inputs, but for the outputs of the instruction.
|
||||
outputs []outputInfo
|
||||
}
|
||||
|
||||
type auxType int8
|
||||
|
@ -150,6 +150,8 @@ type register uint8
|
||||
|
||||
const noRegister register = 255
|
||||
|
||||
// A regMask encodes a set of machine registers.
|
||||
// TODO: regMask -> regSet?
|
||||
type regMask uint64
|
||||
|
||||
func (m regMask) String() string {
|
||||
|
Loading…
x
Reference in New Issue
Block a user