From bbdf78c061b6e685d1992dcdeac692fc2f8f0d34 Mon Sep 17 00:00:00 2001 From: iximeow Date: Mon, 1 Apr 2024 23:38:57 -0700 Subject: display opt: mem size labels and minor segment reporting changes for mem size labels: add one new "BUG" entry at the start of the array so `mem_size` does not need to be adjusted before being used to look up a string from the `MEM_SIZE_STRINGS` array. it's hard to measure the direct benefit of this, but it shrinks codegen size by a bit and simplfies a bit of assembly.... for segment reporting changes: stos/scas/lods do not actually need special segment override logic. instead, set their use of `es` when decoded, if appropriate. this is potentially ambiguous; in non-64bit modes the sequence `26aa` would decode as `stos` with explicit `es` prefix. this is now identical to simply decoding `aa`, which now also reports that there is an explicit `es` prefix even though there is no prefix on tne instruction. on the other hand, the prefix-reported segment now more accurately describes the memory selector through which memory accesses will happen. seems ok? --- test/long_mode/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test') diff --git a/test/long_mode/mod.rs b/test/long_mode/mod.rs index 8cb032c..b725287 100644 --- a/test/long_mode/mod.rs +++ b/test/long_mode/mod.rs @@ -2751,7 +2751,7 @@ fn only_64bit() { test_display(&[0xae], "scas byte es:[rdi], al"); test_display(&[0xaf], "scas dword es:[rdi], eax"); test_display(&[0x67, 0xaf], "scas dword es:[edi], eax"); - test_display(&[0x67, 0xac], "lods al, byte ds:[esi]"); + test_display(&[0x67, 0xac], "lods al, byte [esi]"); test_display(&[0x67, 0xaa], "stos byte es:[edi], al"); // note that rax.b does *not* change the register test_display(&[0x4f, 0xa0, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34], "mov al, byte [0x3412341234123412]"); -- cgit v1.1