aboutsummaryrefslogtreecommitdiff
path: root/test/real_mode
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2023-12-16 14:47:02 -0800
committeriximeow <me@iximeow.net>2023-12-16 14:47:02 -0800
commit2d303b6121e318e30572dd1134ddb0cf12bd0776 (patch)
tree568f60640a00fd707d690b875fdb9ca7bf5b125f /test/real_mode
parent4d2e196e616162726c6211abc46c043078425322 (diff)
fix incorrect register selection for `vpmovm2*` with `rex.b` set
Diffstat (limited to 'test/real_mode')
-rw-r--r--test/real_mode/mod.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/test/real_mode/mod.rs b/test/real_mode/mod.rs
index 1b1a378..a321e64 100644
--- a/test/real_mode/mod.rs
+++ b/test/real_mode/mod.rs
@@ -18400,6 +18400,12 @@ fn test_invalid_sequences() {
test_invalid(&[0xf3, 0x67, 0x0f, 0x3a, 0xf0, 0xfb, 0xb4]);
test_invalid(&[0xf3, 0xf2, 0x0f, 0xae, 0x8f, 0x54, 0x3c, 0x58, 0xb7]);
test_invalid(&[0xff, 0xd8]);
+
+ // vpmovm2b (and larger forms). for some reason the source operand is a mask register but uses
+ // modrm bits as a register selector. out-of-range `k` seem to just get masked down..
+ test_display(&[0x62, 0xd2, 0x7e, 0x08, 0x28, 0xc2], "vpmovm2b xmm0, k2");
+ test_display(&[0x62, 0xf2, 0x7e, 0x08, 0x28, 0xc1], "vpmovm2b xmm0, k1");
+
}
#[test]