summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2022-04-06 15:32:20 -0400
committerGlenn Smith <glenn@vector35.com>2022-04-06 15:43:45 -0400
commit5f32696a955fc2c80a799de4c3f74fc72e75d817 (patch)
tree96446eaf3524f87fa3f8f340c845e189df0d03de
parent73a14dc8b316c697eab1f8862126bad3302936ae (diff)
Test for fix for Vector35/arch-x86#29
-rw-r--r--suite/testcommon.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py
index dec973cc..dda6f82b 100644
--- a/suite/testcommon.py
+++ b/suite/testcommon.py
@@ -1291,6 +1291,28 @@ class TestBuilder(Builder):
self.delete_package("array_test.bndb")
return fixOutput(sorted(retinfo))
+ def test_x87_uniqueness(self):
+ """
+ Verify fix for fmul: that different assembly strings do not disassemble the same
+ Vector35/arch-x86#29
+ """
+ pairs = [
+ ("x86", "fadd st0, st1", "fadd st1, st0"),
+ ("x86", "fsub st0, st1", "fsub st1, st0"),
+ ("x86", "fsubr st0, st1", "fsubr st1, st0"),
+ ("x86", "fmul st0, st1", "fmul st1, st0"),
+ ("x86", "fdiv st0, st1", "fdiv st1, st0"),
+ ("x86", "fdivr st0, st1", "fdivr st1, st0"),
+ ]
+ for (arch, asm1, asm2) in pairs:
+ a = binja.Architecture[arch]
+ code1 = a.assemble(asm1)
+ code2 = a.assemble(asm2)
+ text1 = ''.join(str(t) for t in a.get_instruction_text(code1, 0)[0])
+ text2 = ''.join(str(t) for t in a.get_instruction_text(code2, 0)[0])
+ assert code1 != code2
+ assert text1 != text2, f"{asm1} and {asm2} are different but both disassemble to {text1}"
+
class VerifyBuilder(Builder):
""" The VerifyBuilder is for tests that verify