From 3d06af2bd998cd06c99b7e63a8166a11f7ac798f Mon Sep 17 00:00:00 2001 From: Jin Kyu Song Date: Wed, 18 Dec 2013 21:28:41 -0800 Subject: nosplit: Limit the effect of NOSPLIT [nosplit eax+eax] was encoded [eax*2] previously but this seems against the user's intention. So in this case, nosplit is ignored now and [eax+eax] will be generated. Document is also updated accordingly. Signed-off-by: Jin Kyu Song --- assemble.c | 2 +- doc/nasmdoc.src | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/assemble.c b/assemble.c index 9184800..fbd7caf 100644 --- a/assemble.c +++ b/assemble.c @@ -2629,7 +2629,7 @@ static enum ea_type process_ea(operand *input, ea *output, int bits, } } else { if (((s == 2 && it != REG_NUM_ESP && - !(eaflags & EAF_TIMESTWO)) || + (!(eaflags & EAF_TIMESTWO) || (ht == EAH_SUMMED))) || s == 3 || s == 5 || s == 9) && bt == -1) { /* convert 3*EAX to EAX+2*EAX */ bt = it, bx = ix, s--; diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index 327e3cf..8554a34 100644 --- a/doc/nasmdoc.src +++ b/doc/nasmdoc.src @@ -1460,6 +1460,8 @@ fact, it will also split \c{[eax*2+offset]} into \c{[eax+eax+offset]}. You can combat this behaviour by the use of the \c{NOSPLIT} keyword: \c{[nosplit eax*2]} will force \c{[eax*2+0]} to be generated literally. +However, \c{NOSPLIT} in \c{[nosplit eax+eax]} will be ignored because user's +intention here is considered as \c{[eax+eax]}. In 64-bit mode, NASM will by default generate absolute addresses. The \i\c{REL} keyword makes it produce \c{RIP}-relative addresses. Since @@ -4465,8 +4467,8 @@ be used. \c call foo ; BND will be prefixed \c nobnd call foo ; BND will NOT be prefixed -DEFAULT NOBND can disable DEFAULT BND and then \c{BND} prefix will be added -only when explicitly specified in code. +\c{DEFAULT NOBND} can disable \c{DEFAULT BND} and then \c{BND} prefix will be +added only when explicitly specified in code. \H{section} \i\c{SECTION} or \i\c{SEGMENT}: Changing and \i{Defining Sections} -- cgit v1.2.3