Fix issue #19 about x86/x64 bad Test encoding

This commit is contained in:
clement rouault
2021-04-27 21:32:49 +02:00
parent 39d683ffeb
commit 542eb33aa6
4 changed files with 11 additions and 2 deletions
+4
View File
@@ -210,6 +210,10 @@ def test_assembler():
CheckInstr(x64.Test)('RCX', 'RCX')
CheckInstr(x64.Test)(mem('[RDI + 0x100]'), 'RCX')
CheckInstr(x64.Test)('EAX', 0x11223344)
CheckInstr(x64.Test, immediat_accepted=-1)('RAX', 0xffffffff)
CheckInstr(x64.Test)('ECX', 0x42)
CheckInstr(x64.Test)('RCX', 0x42)
assert x64.Test(mem('[RDI + 0x100]'), 'RCX').get_code() == x64.Test('RCX', mem('[RDI + 0x100]')).get_code()
+5
View File
@@ -183,6 +183,8 @@ def test_assembler():
CheckInstr(Cmp, immediat_accepted=0xffffffff)('EAX', -1)
CheckInstr(Cmp)('EAX', 0xffffffff)
CheckInstr(And)('ECX', 'EBX')
CheckInstr(And)('EAX', 0x11223344)
CheckInstr(And)('EAX', mem('[EAX + 1]'))
@@ -218,6 +220,9 @@ def test_assembler():
CheckInstr(x86.Test)('EAX', 'EAX')
CheckInstr(x86.Test, expected_result="test edi, ecx")('ECX', 'EDI')
CheckInstr(x86.Test)(mem('[ECX + 0x100]'), 'ECX')
CheckInstr(x86.Test)('EAX', 0x11223344)
CheckInstr(x86.Test, immediat_accepted=-1)('EAX', 0xffffffff)
CheckInstr(x86.Test)('ECX', 0x42)
assert x86.Test(mem('[ECX + 0x100]'), 'ECX').get_code() == x86.Test('ECX', mem('[ECX + 0x100]')).get_code()
+1 -1
View File
@@ -1021,7 +1021,7 @@ class Cmp(Instruction):
class Test(Instruction):
default_32_bits = True
refuse_reverse = True
encoding = [(RawBits.from_int(8, 0xf7), Slash(7), AnyImm32()),
encoding = [(RawBits.from_int(8, 0xf7), Slash(0), AnyImm32()),
(RawBits.from_int(8, 0x85), ModRM([ModRM_REG__REG, ModRM_REG64__MEM], has_direction_bit=False))]
+1 -1
View File
@@ -799,7 +799,7 @@ class Cmp(Instruction):
class Test(Instruction):
encoding = [(RawBits.from_int(8, 0xf7), Slash(7), Imm32()),
encoding = [(RawBits.from_int(8, 0xf7), Slash(0), Imm32()),
(RawBits.from_int(8, 0x85), ModRM([ModRM_REG__REG, ModRM_REG__MEM], has_direction_bit=False))]