diff options
-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 |