NASM 0.98.22
[platform/upstream/nasm.git] / README09b.txt
1
2                     README
3           NASM, the Netwide Assembler
4
5
6  Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
7  ========================================================
8
9 1. More closely compatible with 0.98 when -O0 is implied 
10 or specified.  Not strictly identical, since backward 
11 branches in range of short offsets are recognized, and signed
12 byte values with no explicit size specification will be
13 assembled as a single byte.
14
15 2. More forgiving with the PUSH instruction.  0.98 requires
16 a size to be specified always.  0.98.09b will imply the size
17 from the current BITS setting (16 or 32).
18
19 3. Changed definition of the optimization flag:
20
21         -O0     strict two-pass assembly, JMP and Jcc are
22                 handled more like 0.98, except that back-
23                 ward JMPs are short, if possible.
24
25         -O1     strict two-pass assembly, but forward
26                 branches are assembled with code guaranteed
27                 to reach; may produce larger code than
28                 -O0, but will produce successful assembly
29                 more often if branch offset sizes are not
30                 specified.
31
32         -O2     multi-pass optimization, minimize branch
33                 offsets; also will minimize signed immed-
34                 iate bytes, overriding size specification.
35
36         -O3     like -O2, but more passes taken, if needed
37
38
39  Changes from 0.98 release to 98.03 as of 27-Jul-2000
40  ====================================================
41
42 1. Added signed byte optimizations for the 0x81/0x83 class
43 of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
44 when used as 'ADD reg16,imm' or 'ADD reg32,imm.'  Also
45 optimization of signed byte form of 'PUSH imm' and 'IMUL
46 reg,imm'/'IMUL reg,reg,imm.'  No size specification is needed.
47
48 2. Added multi-pass JMP and Jcc offset optimization.  Offsets
49 on forward references will preferentially use the short form,
50 without the need to code a specific size (short or near) for
51 the branch.  Added instructions for 'Jcc label' to use the
52 form 'Jnotcc $+3/JMP label', in cases where a short offset
53 is out of bounds.  If compiling for a 386 or higher CPU, then
54 the 386 form of Jcc will be used instead.
55
56 This feature is controlled by a new command-line switch: "O",
57 (upper case letter O).  "-O0" reverts the assembler to no
58 extra optimization passes, "-O1" allows up to 5 extra passes,
59 and "-O2"(default), allows up to 10 extra optimization passes.
60
61 3. Added a new directive:  'cpu XXX', where XXX is any of: 
62 8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
63 Katmai.  All are case insensitive.  All instructions will
64 be selected only if they apply to the selected cpu or lower.
65 Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
66
67 4. Added to 'standard.mac', the "use16" and "use32" forms of
68 the "bits 16/32" directive. This is nothing new, just conforms
69 to a lot of other assemblers. (minor)
70
71 5. Changed label allocation from 320/32 (10000 labels @ 200K+) 
72 to 32/37 (1000 labels); makes running under DOS much easier.
73 Since additional label space is allocated dynamically, this
74 should have no effect on large programs with lots of labels.
75 The 37 is a prime, believed to be better for hashing. (minor)
76
77 6. Integrated patchfile 0.98-0.98.01.  I call this version
78 0.98.03, for historical reasons:  0.98.02 was trashed.
79
80 --John Coffman <johninsd@san.rr.com>               27-Jul-2000
81
82 (end)