summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2018-12-18 18:06:26 -0800
committerH. Peter Anvin <hpa@zytor.com>2018-12-18 18:06:26 -0800
commit5358b98405d24e9300a48a74c685eb6fd4da5cd2 (patch)
tree82860b591071b837a06e95dd8ac545a7c0ef6473
parent5df6ca712df59a7f83b27ebd382bfb6ee851fff8 (diff)
downloadnasm-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.c4
-rw-r--r--asm/parser.c10
-rw-r--r--x86/insns.dat14
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