pass: test for liveness
This commit is contained in:
33
reg/collection.go
Normal file
33
reg/collection.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package reg
|
||||
|
||||
type Collection struct {
|
||||
vid map[Kind]VID
|
||||
}
|
||||
|
||||
func NewCollection() *Collection {
|
||||
return &Collection{
|
||||
vid: map[Kind]VID{},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Collection) VirtualRegister(k Kind, s Size) Virtual {
|
||||
vid := c.vid[k]
|
||||
c.vid[k]++
|
||||
return NewVirtual(vid, k, s)
|
||||
}
|
||||
|
||||
func (c *Collection) GP8v() Virtual { return c.GPv(B8) }
|
||||
|
||||
func (c *Collection) GP16v() Virtual { return c.GPv(B16) }
|
||||
|
||||
func (c *Collection) GP32v() Virtual { return c.GPv(B32) }
|
||||
|
||||
func (c *Collection) GP64v() Virtual { return c.GPv(B64) }
|
||||
|
||||
func (c *Collection) GPv(s Size) Virtual { return c.VirtualRegister(GP, s) }
|
||||
|
||||
func (c *Collection) Xv() Virtual { return c.VirtualRegister(SSEAVX, B128) }
|
||||
|
||||
func (c *Collection) Yv() Virtual { return c.VirtualRegister(SSEAVX, B256) }
|
||||
|
||||
func (c *Collection) Zv() Virtual { return c.VirtualRegister(SSEAVX, B512) }
|
||||
14
reg/types.go
14
reg/types.go
@@ -38,11 +38,7 @@ func (f *Family) define(s Spec, id PID, name string) Physical {
|
||||
}
|
||||
|
||||
func (f *Family) Virtual(id VID, s Size) Virtual {
|
||||
return virtual{
|
||||
id: id,
|
||||
kind: f.Kind,
|
||||
Size: s,
|
||||
}
|
||||
return NewVirtual(id, f.Kind, s)
|
||||
}
|
||||
|
||||
type private interface {
|
||||
@@ -74,6 +70,14 @@ type virtual struct {
|
||||
Size
|
||||
}
|
||||
|
||||
func NewVirtual(id VID, k Kind, s Size) Virtual {
|
||||
return virtual{
|
||||
id: id,
|
||||
kind: k,
|
||||
Size: s,
|
||||
}
|
||||
}
|
||||
|
||||
func (v virtual) VirtualID() VID { return v.id }
|
||||
func (v virtual) Kind() Kind { return v.kind }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user