add fnv1a example
This commit is contained in:
21
reg/types.go
21
reg/types.go
@@ -26,17 +26,26 @@ type Family struct {
|
||||
registers []Physical
|
||||
}
|
||||
|
||||
func (f *Family) define(s Spec, id PID, name string) Physical {
|
||||
func (f *Family) add(s Spec, id PID, name string, info Info) Physical {
|
||||
r := register{
|
||||
id: id,
|
||||
kind: f.Kind,
|
||||
name: name,
|
||||
info: info,
|
||||
Spec: s,
|
||||
}
|
||||
f.registers = append(f.registers, r)
|
||||
return r
|
||||
}
|
||||
|
||||
func (f *Family) define(s Spec, id PID, name string) Physical {
|
||||
return f.add(s, id, name, None)
|
||||
}
|
||||
|
||||
func (f *Family) restricted(s Spec, id PID, name string) Physical {
|
||||
return f.add(s, id, name, Restricted)
|
||||
}
|
||||
|
||||
func (f *Family) Virtual(id VID, s Size) Virtual {
|
||||
return NewVirtual(id, f.Kind, s)
|
||||
}
|
||||
@@ -110,9 +119,17 @@ func (v virtual) Asm() string {
|
||||
|
||||
func (v virtual) register() {}
|
||||
|
||||
type Info uint8
|
||||
|
||||
const (
|
||||
None Info = 0
|
||||
Restricted Info = 1 << iota
|
||||
)
|
||||
|
||||
type Physical interface {
|
||||
PhysicalID() PID
|
||||
Mask() uint16
|
||||
Info() Info
|
||||
Register
|
||||
}
|
||||
|
||||
@@ -128,6 +145,7 @@ type register struct {
|
||||
id PID
|
||||
kind Kind
|
||||
name string
|
||||
info Info
|
||||
Spec
|
||||
}
|
||||
|
||||
@@ -135,6 +153,7 @@ func (r register) PhysicalID() PID { return 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) Info() Info { return r.info }
|
||||
func (r register) register() {}
|
||||
|
||||
type Spec uint16
|
||||
|
||||
@@ -54,7 +54,7 @@ var (
|
||||
BH = GeneralPurpose.define(S8H, 3, "BH")
|
||||
|
||||
// 8-bit
|
||||
SPB = GeneralPurpose.define(S8, 4, "SP")
|
||||
SPB = GeneralPurpose.restricted(S8, 4, "SP")
|
||||
BPB = GeneralPurpose.define(S8, 5, "BP")
|
||||
SIB = GeneralPurpose.define(S8, 6, "SI")
|
||||
DIB = GeneralPurpose.define(S8, 7, "DI")
|
||||
@@ -72,7 +72,7 @@ var (
|
||||
CX = GeneralPurpose.define(S16, 1, "CX")
|
||||
DX = GeneralPurpose.define(S16, 2, "DX")
|
||||
BX = GeneralPurpose.define(S16, 3, "BX")
|
||||
SP = GeneralPurpose.define(S16, 4, "SP")
|
||||
SP = GeneralPurpose.restricted(S16, 4, "SP")
|
||||
BP = GeneralPurpose.define(S16, 5, "BP")
|
||||
SI = GeneralPurpose.define(S16, 6, "SI")
|
||||
DI = GeneralPurpose.define(S16, 7, "DI")
|
||||
@@ -90,7 +90,7 @@ var (
|
||||
ECX = GeneralPurpose.define(S32, 1, "CX")
|
||||
EDX = GeneralPurpose.define(S32, 2, "DX")
|
||||
EBX = GeneralPurpose.define(S32, 3, "BX")
|
||||
ESP = GeneralPurpose.define(S32, 4, "SP")
|
||||
ESP = GeneralPurpose.restricted(S32, 4, "SP")
|
||||
EBP = GeneralPurpose.define(S32, 5, "BP")
|
||||
ESI = GeneralPurpose.define(S32, 6, "SI")
|
||||
EDI = GeneralPurpose.define(S32, 7, "DI")
|
||||
@@ -108,7 +108,7 @@ var (
|
||||
RCX = GeneralPurpose.define(S64, 1, "CX")
|
||||
RDX = GeneralPurpose.define(S64, 2, "DX")
|
||||
RBX = GeneralPurpose.define(S64, 3, "BX")
|
||||
RSP = GeneralPurpose.define(S64, 4, "SP")
|
||||
RSP = GeneralPurpose.restricted(S64, 4, "SP")
|
||||
RBP = GeneralPurpose.define(S64, 5, "BP")
|
||||
RSI = GeneralPurpose.define(S64, 6, "SI")
|
||||
RDI = GeneralPurpose.define(S64, 7, "DI")
|
||||
|
||||
Reference in New Issue
Block a user