fix operand check tests
This commit is contained in:
@@ -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))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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},
|
||||||
|
|||||||
Reference in New Issue
Block a user