diff options
author | H. Peter Anvin <hpa@zytor.com> | 2019-08-10 02:45:41 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2019-08-10 02:45:41 -0700 |
commit | a2c1c7d0d4581e3ae58effff449d6fedec06aaae (patch) | |
tree | 139137a91fbe53c2d57c3769f4e85a27b3042c90 /asm/nasm.c | |
parent | 14b16442ce951942f13756cdb5d44c1fe4f3e98f (diff) | |
download | nasm-a2c1c7d0d4581e3ae58effff449d6fedec06aaae.tar.gz |
listing: coalesce TIMES in non-final passes, print <len>, clarify hex
Merge TIMES in the nonfinal passes, there is no point in getting <len
...> an arbitrary number of times.
Actually print <len> (OUT_RAWDATA without a data pointer), not <res>
(OUT_RESERVE).
Dropping the zero-fill for the hex format made the listing more
manageable, but it also doesn't immediately look like hex, plus there
is now the -Ld option. Put an h after hex (shorter than leading 0x) to
make it obvious.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'asm/nasm.c')
-rw-r--r-- | asm/nasm.c | 21 |
1 files changed, 9 insertions, 12 deletions
@@ -1517,25 +1517,22 @@ static void process_insn(insn *instruction) * (usually to 1) when called. */ if (!pass_final()) { + int64_t start = location.offset; for (n = 1; n <= instruction->times; n++) { l = insn_size(location.segment, location.offset, globalbits, instruction); - - if (list_option('p')) { - if (l > 0) { - struct out_data dummy; - memset(&dummy, 0, sizeof dummy); - dummy.type = OUT_RESERVE; - dummy.offset = location.offset; - dummy.size = l; - lfmt->output(&dummy); - } - } - /* l == -1 -> invalid instruction */ if (l != -1) increment_offset(l); } + if (list_option('p')) { + struct out_data dummy; + memset(&dummy, 0, sizeof dummy); + dummy.type = OUT_RAWDATA; /* Handled specially with .data NULL */ + dummy.offset = start; + dummy.size = location.offset - start; + lfmt->output(&dummy); + } } else { l = assemble(location.segment, location.offset, globalbits, instruction); |