summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2010-07-15 18:28:52 -0700
committerH. Peter Anvin <hpa@zytor.com>2010-07-15 18:30:18 -0700
commit31387b2d04e2421a884adac449c192bd97abaa0f (patch)
treea58fced5312c40539c9b1ec1c9bfec90c16448a9
parenta537d4964ecb3a96840cd6734647e144df41e603 (diff)
downloadnasm-preproc-paste-fix.tar.gz
Make -Ox the defaultpreproc-paste-fix
Make -Ox the default; it's the optimization level expected by most users, and it is clearly still causing confusion that it has to be specified manually. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--doc/changes.src3
-rw-r--r--doc/nasmdoc.src3
-rw-r--r--nasm.c19
3 files changed, 19 insertions, 6 deletions
diff --git a/doc/changes.src b/doc/changes.src
index e64aae74..9cd4b319 100644
--- a/doc/changes.src
+++ b/doc/changes.src
@@ -50,6 +50,9 @@ since 2007.
\b Tighten EA checks. We warn a user if there overflow in EA addressing.
+\b Make \c{-Ox} the default optimization level. For the legacy
+ behavior, specify \c{-O0} explicitly. See \k{opt-O}.
+
\S{cl-2.08} Version 2.08
diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src
index 722f0991..565b790b 100644
--- a/doc/nasmdoc.src
+++ b/doc/nasmdoc.src
@@ -866,7 +866,8 @@ levels of optimization. The syntax is:
releases, the letter \c{x} may also be any number greater than
one. This number has no effect on the actual number of passes.
-The \c{-Ox} mode is recommended for most uses.
+The \c{-Ox} mode is recommended for most uses, and is the default
+since NASM 2.09.
Note that this is a capital \c{O}, and is different from a small \c{o}, which
is used to specify the output file name. See \k{opt-o}.
diff --git a/nasm.c b/nasm.c
index 9a8c1e5d..7a63afb8 100644
--- a/nasm.c
+++ b/nasm.c
@@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------- *
*
- * Copyright 1996-2009 The NASM Authors - All Rights Reserved
+ * Copyright 1996-2010 The NASM Authors - All Rights Reserved
* See the file AUTHORS included with the NASM distribution for
* the specific copyright holders.
*
@@ -61,6 +61,13 @@
#include "output/outform.h"
#include "listing.h"
+/*
+ * This is the maximum number of optimization passes to do. If we ever
+ * find a case where the optimizer doesn't naturally converge, we might
+ * have to drop this value so the assembler doesn't appear to just hang.
+ */
+#define MAX_OPTIMIZE (INT_MAX >> 1)
+
struct forwrefinfo { /* info held on forward refs. */
int lineno;
int operand;
@@ -96,8 +103,8 @@ const struct dfmt *dfmt;
static FILE *error_file; /* Where to write error messages */
FILE *ofile = NULL;
-int optimizing = -1; /* number of optimization passes to take */
-static int sb, cmd_sb = 16; /* by default */
+int optimizing = MAX_OPTIMIZE; /* number of optimization passes to take */
+static int sb, cmd_sb = 16; /* by default */
static uint32_t cmd_cpu = IF_PLEVEL; /* highest level by default */
static uint32_t cpu = IF_PLEVEL; /* passed to insn_size & assemble.c */
int64_t global_offset_changed; /* referenced in labels.c */
@@ -659,7 +666,7 @@ static bool process_arg(char *p, char *q)
if (!*param) {
/* Naked -O == -Ox */
- optimizing = INT_MAX >> 1; /* Almost unlimited */
+ optimizing = MAX_OPTIMIZE;
} else {
while (*param) {
switch (*param) {
@@ -683,7 +690,7 @@ static bool process_arg(char *p, char *q)
case 'x':
param++;
- optimizing = INT_MAX >> 1; /* Almost unlimited */
+ optimizing = MAX_OPTIMIZE;
break;
default:
@@ -693,6 +700,8 @@ static bool process_arg(char *p, char *q)
break;
}
}
+ if (optimizing > MAX_OPTIMIZE)
+ optimizing = MAX_OPTIMIZE;
}
break;
}