diff --git a/tests/meson.build b/tests/meson.build index 8912fbf..dce27e7 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -15,6 +15,7 @@ endif testcases = [ ['prefixes', 'prefixes.txt'], + ['modrm', 'modrm.txt'], ['enter', 'decode-enter.sh'], ['imul', 'decode-imul.sh'], diff --git a/tests/modrm.txt b/tests/modrm.txt new file mode 100644 index 0000000..abafe95 --- /dev/null +++ b/tests/modrm.txt @@ -0,0 +1,34 @@ +# reg +decode 01c0 [ADD reg4:r0 reg4:r0] +decode 01c1 [ADD reg4:r1 reg4:r0] +decode 01d0 [ADD reg4:r0 reg4:r2] +decode 01ff [ADD reg4:r7 reg4:r7] +decode64 4101d0 [ADD reg4:r8 reg4:r2] +decode64 4501d0 [ADD reg4:r8 reg4:r10] +decode64 4501ff [ADD reg4:r15 reg4:r15] +# [reg] +decode 0100 [ADD mem4:r0 reg4:r0] +decode 0108 [ADD mem4:r0 reg4:r1] +decode 0101 [ADD mem4:r1 reg4:r0] +decode 0107 [ADD mem4:r7 reg4:r0] +decode 0138 [ADD mem4:r0 reg4:r7] +decode 010424 [ADD mem4:r4 reg4:r0] +decode64 410100 [ADD mem4:r8 reg4:r0] +decode64 440108 [ADD mem4:r0 reg4:r9] +decode64 450100 [ADD mem4:r8 reg4:r8] +decode64 410107 [ADD mem4:r15 reg4:r0] +decode64 41010424 [ADD mem4:r12 reg4:r0] +# [disp32] +decode32 010501000000 [ADD mem4:0x1 reg4:r0] +decode32 0105ffffffff [ADD mem4:-0x1 reg4:r0] +decode 01042501000000 [ADD mem4:0x1 reg4:r0] +decode64 4101042501000000 [ADD mem4:0x1 reg4:r0] +# [rip+disp32] +decode64 010501000000 [ADD mem4:r16+0x1 reg4:r0] +decode64 41010501000000 [ADD mem4:r16+0x1 reg4:r0] +# [reg+disp32] +decode 018001000000 [ADD mem4:r0+0x1 reg4:r0] +# [reg+eiz+disp32] +decode 01842501000000 [ADD mem4:r5+0x1 reg4:r0] +# [reg+s*reg+disp32] +decode64 4201842501000000 [ADD mem4:r5+1*r12+0x1 reg4:r0] diff --git a/tests/test.py b/tests/test.py index 771268e..f2226ce 100644 --- a/tests/test.py +++ b/tests/test.py @@ -41,7 +41,8 @@ if __name__ == "__main__": test_modes = frozenset(args.test_modes if args.test_modes else [32, 64]) for file in args.cases: - cases = [tuple(ln.strip().split(maxsplit=2)) for ln in file.readlines()] + cases = [tuple(ln.strip().split(maxsplit=2)) for ln in file.readlines() + if ln and ln[0] != "#"] for op, code, expected in cases: case_modes = {"decode":{32,64},"decode32":{32},"decode64":{64}}[op] if not case_modes & test_modes: continue