From d7d84b3be6c929ee9d1b425a82b7121936a7cd34 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sat, 16 Dec 2023 15:05:08 -0800 Subject: fix incorrect register selection for `vpmov*2m` with `rex.r` set --- test/protected_mode/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'test/protected_mode') diff --git a/test/protected_mode/mod.rs b/test/protected_mode/mod.rs index e843c7a..88d6c49 100644 --- a/test/protected_mode/mod.rs +++ b/test/protected_mode/mod.rs @@ -1337,6 +1337,11 @@ fn evex() { test_display(&[0x62, 0xd2, 0x7e, 0x08, 0x28, 0xc2], "vpmovm2b xmm0, k2"); test_display(&[0x62, 0xf2, 0x7e, 0x08, 0x28, 0xc1], "vpmovm2b xmm0, k1"); + // vpmovb2m (and larger forms). out-of-range `k` are invalid in 64-bit mode, are part of the + // `bound` instruction for 32- and 16-bit modes. + test_display(&[0x62, 0x72, 0x7e /* , 0x28, 0x29, 0xfd */], "bound esi, qword [edx + 0x7e]"); + test_display(&[0x62, 0xf2, 0x7e, 0x28, 0x29, 0xfd], "vpmovb2m k7, ymm5"); + test_display(&[0x62, 0xf2, 0x7d, 0x48, 0x2a, 0x44, 0x40, 0x01], "vmovntdqa zmm0, zmmword [eax + eax * 2 + 0x40]"); test_display(&[0x62, 0xf2, 0x7d, 0x08, 0x2a, 0x44, 0x40, 0x01], "vmovntdqa xmm0, xmmword [eax + eax * 2 + 0x10]"); } -- cgit v1.1