diff options
author | H. Peter Anvin <hpa@zytor.com> | 2018-12-18 18:06:26 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2018-12-18 18:06:26 -0800 |
commit | 5358b98405d24e9300a48a74c685eb6fd4da5cd2 (patch) | |
tree | 82860b591071b837a06e95dd8ac545a7c0ef6473 | |
parent | 5df6ca712df59a7f83b27ebd382bfb6ee851fff8 (diff) | |
download | nasm-5358b98405d24e9300a48a74c685eb6fd4da5cd2.tar.gz |
Don't convert the various RESx instructions to RESB
All it does is complicate things; instead leave the opcode where it
is.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r-- | asm/assemble.c | 4 | ||||
-rw-r--r-- | asm/parser.c | 10 | ||||
-rw-r--r-- | x86/insns.dat | 14 |
3 files changed, 9 insertions, 19 deletions
diff --git a/asm/assemble.c b/asm/assemble.c index d5706820..42509ec6 100644 --- a/asm/assemble.c +++ b/asm/assemble.c @@ -1208,7 +1208,7 @@ static int64_t calcsize(int32_t segment, int64_t offset, int bits, nasm_warn(WARN_OTHER, "forward reference in RESx " "can have unpredictable results"); else - length += ins->oprs[0].offset; + length += ins->oprs[0].offset * resb_bytes(ins->opcode); break; case 0341: @@ -1875,7 +1875,7 @@ static void gencode(struct out_data *data, insn *ins) if (ins->oprs[0].segment != NO_SEG) nasm_panic("non-constant BSS size in pass two"); - out_reserve(data, ins->oprs[0].offset); + out_reserve(data, ins->oprs[0].offset * resb_bytes(ins->opcode)); break; case 0341: diff --git a/asm/parser.c b/asm/parser.c index abc1ea40..c76696c2 100644 --- a/asm/parser.c +++ b/asm/parser.c @@ -1141,16 +1141,6 @@ is_expression: while (opnum < MAX_OPERANDS) result->oprs[opnum++].type = 0; - /* - * Transform RESW, RESD, RESQ, REST, RESO, RESY, RESZ into RESB. - */ - if (opcode_is_resb(result->opcode)) { - result->oprs[0].offset *= resb_bytes(result->opcode); - result->oprs[0].offset *= result->times; - result->times = 1; - result->opcode = I_RESB; - } - return result; fail: diff --git a/x86/insns.dat b/x86/insns.dat index e9e45567..36b45b3c 100644 --- a/x86/insns.dat +++ b/x86/insns.dat @@ -59,13 +59,13 @@ DO ignore ignore ignore DY ignore ignore ignore DZ ignore ignore ignore RESB imm [ resb] 8086 -RESW ignore ignore ignore -RESD ignore ignore ignore -RESQ ignore ignore ignore -REST ignore ignore ignore -RESO ignore ignore ignore -RESY ignore ignore ignore -RESZ ignore ignore ignore +RESW imm [ resb] 8086 +RESD imm [ resb] 8086 +RESQ imm [ resb] 8086 +REST imm [ resb] 8086 +RESO imm [ resb] 8086 +RESY imm [ resb] 8086 +RESZ imm [ resb] 8086 INCBIN ignore ignore ignore ;# Conventional instructions |