refactor to use reg.Set

This commit is contained in:
Michael McLoughlin
2018-12-03 22:39:43 -08:00
parent faafa00e40
commit 9376a230cf
6 changed files with 118 additions and 30 deletions

View File

@@ -2,7 +2,6 @@ package reg
import (
"fmt"
"math"
)
type Size uint
@@ -41,6 +40,24 @@ func (f *Family) Virtual(id VID, s Size) Virtual {
return NewVirtual(id, f.Kind, s)
}
// Registers returns the registers in this family.
func (f *Family) Registers() []Physical {
rs := make([]Physical, 0, len(f.registers))
for _, r := range f.registers {
rs = append(rs, r)
}
return rs
}
// Set returns the set of registers in the family.
func (f *Family) Set() Set {
s := NewEmptySet()
for _, r := range f.registers {
s.Add(r)
}
return s
}
type private interface {
private()
}
@@ -82,7 +99,7 @@ func (v virtual) VirtualID() VID { return v.id }
func (v virtual) Kind() Kind { return v.kind }
func (v virtual) ID() ID {
return (ID(math.MaxUint16) << 16) | ID(v.VirtualID())
return (ID(1) << 31) | ID(v.VirtualID())
}
func (v virtual) Asm() string {
@@ -106,7 +123,7 @@ type register struct {
}
func (r register) PhysicalID() PID { return r.id }
func (r register) ID() ID { return ID(r.id) }
func (r register) ID() ID { return (ID(r.Mask()) << 16) | ID(r.id) }
func (r register) Kind() Kind { return r.kind }
func (r register) Asm() string { return r.name }
func (r register) private() {}