start to implement operand types and checks

This commit is contained in:
Michael McLoughlin
2018-11-26 22:14:36 -08:00
parent bed7e7e2c2
commit 3050882621
4 changed files with 180 additions and 16 deletions

28
operand/types_test.go Normal file
View File

@@ -0,0 +1,28 @@
package operand
import (
"testing"
"github.com/mmcloughlin/avo/reg"
)
func TestMemAsm(t *testing.T) {
cases := []struct {
Mem Mem
Expect string
}{
{Mem{Base: reg.EAX}, "(AX)"},
{Mem{Disp: 16, Base: reg.RAX}, "16(AX)"},
{Mem{Base: reg.R11, Index: reg.RAX, Scale: 4}, "(R11)(AX*4)"},
{Mem{Base: reg.R11, Index: reg.RAX, Scale: 1}, "(R11)(AX*1)"},
{Mem{Base: reg.R11, Index: reg.RAX}, "(R11)"},
{Mem{Base: reg.R11, Scale: 8}, "(R11)"},
{Mem{Disp: 2048, Base: reg.R11, Index: reg.RAX, Scale: 8}, "2048(R11)(AX*8)"},
}
for _, c := range cases {
got := c.Mem.Asm()
if got != c.Expect {
t.Errorf("%#v.Asm() = %s expected %s", c.Mem, got, c.Expect)
}
}
}