From: H. Peter Anvin Date: Wed, 19 Sep 2007 00:49:09 +0000 (-0700) Subject: Fix handling of DO; support unary + for floating-point numbers X-Git-Tag: nasm-2.11.05~1956^2~4^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cfbe7c3cc2dbdfe1268e2d0a19fc59b52cbcfcc5;p=platform%2Fupstream%2Fnasm.git Fix handling of DO; support unary + for floating-point numbers Floating-point users generally expect to be able to use a unary plus. Fix support for the DO instruction in several places. --- diff --git a/assemble.c b/assemble.c index e538454..efb0220 100644 --- a/assemble.c +++ b/assemble.c @@ -250,6 +250,9 @@ int32_t assemble(int32_t segment, int32_t offset, int bits, uint32_t cp, case I_DT: wsize = 10; break; + case I_DO: + wsize = 16; + break; default: break; } @@ -564,10 +567,9 @@ int32_t insn_size(int32_t segment, int32_t offset, int bits, uint32_t cp, if (instruction->opcode == -1) return 0; - if (instruction->opcode == I_DB || - instruction->opcode == I_DW || - instruction->opcode == I_DD || - instruction->opcode == I_DQ || instruction->opcode == I_DT) { + if (instruction->opcode == I_DB || instruction->opcode == I_DW || + instruction->opcode == I_DD || instruction->opcode == I_DQ || + instruction->opcode == I_DT || instruction->opcode == I_DO) { extop *e; int32_t isize, osize, wsize = 0; /* placate gcc */ @@ -588,6 +590,9 @@ int32_t insn_size(int32_t segment, int32_t offset, int bits, uint32_t cp, case I_DT: wsize = 10; break; + case I_DO: + wsize = 16; + break; default: break; } diff --git a/parser.c b/parser.c index 69ae379..31c3612 100644 --- a/parser.c +++ b/parser.c @@ -214,16 +214,18 @@ insn *parse_line(int pass, char *buffer, insn * result, continue; } - if ((i == TOKEN_FLOAT && is_comma_next()) || i == '-') { - int32_t sign = +1L; + if ((i == TOKEN_FLOAT && is_comma_next()) + || i == '-' || i == '+') { + int32_t sign = +1; - if (i == '-') { + if (i == '+' || i == '-') { char *save = stdscan_bufptr; + int token = i; + sign = (i == '-') ? -1 : 1; i = stdscan(NULL, &tokval); - sign = -1L; if (i != TOKEN_FLOAT || !is_comma_next()) { stdscan_bufptr = save; - i = tokval.t_type = '-'; + i = tokval.t_type = token; } } @@ -243,10 +245,12 @@ insn *parse_line(int pass, char *buffer, insn * result, case I_DT: eop->stringlen = 10; break; + case I_DO: + eop->stringlen = 16; + break; default: error(ERR_NONFATAL, "floating-point constant" - " encountered in `d%c' instruction" - ? (result->opcode == I_DO) ? 'o' : 'b'); + " encountered in `db' instruction"); /* * fix suggested by Pedro Gimeno... original line * was: