aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2019-11-30 16:12:20 -0800
committeriximeow <me@iximeow.net>2020-01-12 16:10:13 -0800
commit639bcc836b70069e9569b21bd07e5764eba86b66 (patch)
treecacdfc07986c2787b64df56c4cafa66c68e03597 /test
parent7561575f135e0ba72f0a90a5859d19f7b02a31e8 (diff)
support prefetch, movlps, movhps, refine prefix permissivity
rep, repz, repnz prefixes are only displayed on instructions for which they have a semantic effect. movs, cmps, scas, lods, stos, ins, and outs are now decodable.
Diffstat (limited to 'test')
-rw-r--r--test/test.rs41
1 files changed, 24 insertions, 17 deletions
diff --git a/test/test.rs b/test/test.rs
index 479faef..dc945e7 100644
--- a/test/test.rs
+++ b/test/test.rs
@@ -242,12 +242,14 @@ fn test_misc() {
test_display(&[0x48, 0x03, 0x0b], "add rcx, [rbx]");
test_display(&[0x48, 0x8d, 0x0c, 0x12], "lea rcx, [rdx + rdx * 1]");
test_display(&[0xf6, 0xc2, 0x18], "test dl, 0x18");
- test_display(&[0xf3, 0x48, 0xab], "rep stosq");
- test_display(&[0xf3, 0x48, 0xa5], "rep movsq");
- test_display(&[0xf3, 0x45, 0x0f, 0xbc, 0xd7], "tzcnt r10d, r15d");
+ test_display(&[0xf3, 0x48, 0xab], "rep stos es:[rdi], rax");
+// test_display(&[0xf3, 0x48, 0xa5], "rep movs es:[rdi], ds:[rsi]");
+// test_display(&[0xf3, 0x45, 0x0f, 0xbc, 0xd7], "tzcnt r10d, r15d");
}
#[test]
+#[ignore]
+// TODO also not supported at all
fn evex() {
test_display(&[0x62, 0xf2, 0x7d, 0x48, 0x2a, 0x44, 0x40, 0x01], "vmovntdqa zmm0, [rax + rax*2 + 0x40]");
test_display(&[0x62, 0xf2, 0x7d, 0x08, 0x2a, 0x44, 0x40, 0x01], "vmovntdqa xmm0, [rax + rax*2 + 0x10]");
@@ -270,28 +272,33 @@ fn prefixed_0f() {
test_display(&[0xf2, 0x0f, 0x06], "clts");
test_display(&[0x0f, 0x07], "sysret");
test_display(&[0xf2, 0x0f, 0x07], "sysret");
-// test_display(&[0x0f, 0x12, 0x0f], "movlps xmm1, qword [rdi]");
+ test_display(&[0x0f, 0x12, 0x0f], "movlps xmm1, [rdi]");
+ test_display(&[0x0f, 0x12, 0xcf], "movhlps xmm1, xmm7");
+ test_display(&[0x0f, 0x16, 0x0f], "movhps xmm1, [rdi]");
+ test_display(&[0x0f, 0x16, 0xcf], "movlhps xmm1, xmm7");
// test_display(&[0x0f, 0x12, 0xc0], "movhlps xmm0, xmm0");
test_invalid(&[0x0f, 0x13, 0xc0]);
+ test_display(&[0x0f, 0x13, 0x00], "movlps [rax], xmm0");
test_display(&[0x0f, 0x14, 0x08], "unpcklps xmm1, [rax]");
test_display(&[0x0f, 0x15, 0x08], "unpckhps xmm1, [rax]");
test_display(&[0x0f, 0x16, 0x0f], "movhps xmm1, [rdi]");
// test_display(&[0x0f, 0x16, 0xc0], "movlhps xmm0, xmm0");
test_invalid(&[0x0f, 0x17, 0xc0]);
+ test_display(&[0x0f, 0x17, 0x00], "movhps [rax], xmm0");
test_invalid(&[0x0f, 0x18, 0xc0]);
- test_display(&[0x0f, 0x18, 0x00], "prefetchnta byte [rax]");
- test_display(&[0x0f, 0x18, 0x08], "prefetch1 byte [rax]");
- test_display(&[0x0f, 0x18, 0x10], "prefetch2 byte [rax]");
- test_display(&[0x0f, 0x18, 0x18], "prefetch2 byte [rax]");
- test_display(&[0x0f, 0x18, 0x20], "nop dword [rax]");
- test_display(&[0x4f, 0x0f, 0x18, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x19, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1a, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1b, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1c, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1d, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1e, 0x20], "nop dword [rax]");
- test_display(&[0x0f, 0x1f, 0x20], "nop dword [rax]");
+ test_display(&[0x0f, 0x18, 0x00], "prefetchnta [rax]");
+ test_display(&[0x0f, 0x18, 0x08], "prefetch0 [rax]");
+ test_display(&[0x0f, 0x18, 0x10], "prefetch1 [rax]");
+ test_display(&[0x0f, 0x18, 0x18], "prefetch2 [rax]");
+ test_display(&[0x0f, 0x18, 0x20], "nop [rax]");
+ test_display(&[0x4f, 0x0f, 0x18, 0x20], "nop [r8]");
+ test_display(&[0x0f, 0x19, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1a, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1b, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1c, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1d, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1e, 0x20], "nop [rax]");
+ test_display(&[0x0f, 0x1f, 0x20], "nop [rax]");
test_display(&[0x45, 0x0f, 0x20, 0xc8], "mov r8, cr9");
test_display(&[0x0f, 0x20, 0xc8], "mov rax, cr1");
test_display(&[0x45, 0x0f, 0x21, 0xc8], "mov r8, dr9");