fix operand check tests

This commit is contained in:
Michael McLoughlin
2018-12-14 22:12:28 -08:00
parent c70c642ddb
commit 8282c9b17e
2 changed files with 10 additions and 9 deletions

View File

@@ -181,6 +181,7 @@ func IsM64(op Op) bool {
// registers of the given size in bytes. // registers of the given size in bytes.
func IsMSize(op Op, n uint) bool { func IsMSize(op Op, n uint) bool {
// TODO(mbm): should memory operands have a size attribute as well? // TODO(mbm): should memory operands have a size attribute as well?
// TODO(mbm): m8,m16,m32,m64 checks do not actually check size
m, ok := op.(Mem) m, ok := op.(Mem)
return ok && IsMReg(m.Base) && (m.Index == nil || IsMReg(m.Index)) return ok && IsMReg(m.Base) && (m.Index == nil || IsMReg(m.Index))
} }

View File

@@ -97,29 +97,29 @@ func TestChecks(t *testing.T) {
{IsM, Mem{Base: reg.CX}, true}, {IsM, Mem{Base: reg.CX}, true},
{IsM, Mem{Base: reg.ECX}, true}, {IsM, Mem{Base: reg.ECX}, true},
{IsM, Mem{Base: reg.RCX}, true}, {IsM, Mem{Base: reg.RCX}, true},
{IsM, Mem{Base: reg.CL}, false}, {IsM, Mem{Base: reg.X0}, false},
{IsM8, Mem{Disp: 8, Base: reg.CL}, true}, {IsM8, Mem{Disp: 8, Base: reg.CL}, true},
{IsM8, Mem{Disp: 8, Base: reg.CL, Index: reg.AH, Scale: 2}, true}, {IsM8, Mem{Disp: 8, Base: reg.CL, Index: reg.AH, Scale: 2}, true},
{IsM8, Mem{Disp: 8, Base: reg.AX, Index: reg.AH, Scale: 2}, false}, {IsM8, Mem{Disp: 8, Base: reg.X0, Index: reg.AH, Scale: 2}, false},
{IsM8, Mem{Disp: 8, Base: reg.CL, Index: reg.R10, Scale: 2}, false}, {IsM8, Mem{Disp: 8, Base: reg.CL, Index: reg.X0, Scale: 2}, false},
{IsM16, Mem{Disp: 4, Base: reg.DX}, true}, {IsM16, Mem{Disp: 4, Base: reg.DX}, true},
{IsM16, Mem{Disp: 4, Base: reg.R13W, Index: reg.R8W, Scale: 2}, true}, {IsM16, Mem{Disp: 4, Base: reg.R13W, Index: reg.R8W, Scale: 2}, true},
{IsM16, Mem{Disp: 4, Base: reg.ESI, Index: reg.R8W, Scale: 2}, false}, {IsM16, Mem{Disp: 4, Base: reg.X0, Index: reg.R8W, Scale: 2}, false},
{IsM16, Mem{Disp: 4, Base: reg.R13W, Index: reg.R9, Scale: 2}, false}, {IsM16, Mem{Disp: 4, Base: reg.R13W, Index: reg.X0, Scale: 2}, false},
{IsM32, Mem{Base: reg.R13L, Index: reg.EBX, Scale: 2}, true}, {IsM32, Mem{Base: reg.R13L, Index: reg.EBX, Scale: 2}, true},
{IsM32, Mem{Base: reg.R13W}, false}, {IsM32, Mem{Base: reg.X0}, false},
{IsM64, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true}, {IsM64, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true},
{IsM64, Mem{Base: reg.R13L}, false}, {IsM64, Mem{Base: reg.X0}, false},
{IsM128, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true}, {IsM128, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true},
{IsM128, Mem{Base: reg.R13L}, false}, {IsM128, Mem{Base: reg.X0}, false},
{IsM256, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true}, {IsM256, Mem{Base: reg.RBX, Index: reg.R12, Scale: 2}, true},
{IsM256, Mem{Base: reg.R13L}, false}, {IsM256, Mem{Base: reg.X0}, false},
// Argument references (special cases of memory operands) // Argument references (special cases of memory operands)
{IsM, NewParamAddr("foo", 4), true}, {IsM, NewParamAddr("foo", 4), true},