Document -O2/-O3 change
[nasm.git] / TODO
blob790544376c333209944e839cd2dfe2fb38d70fc3
1 NASM TODO list
2 ==============
4 This, like the AUTHORS file, is intended for easy readability by both human 
5 and machine, thus the format.
7   F: feature
8   V: version you should expect it by
9   R: responsible person or - if unassigned
10   C: % complete
11   D: description
12   D: maybe on multiple lines
13   
14 Anything that doesn't start with /^[FVRCD]:/ should be ignored.
16   F:-line triggers new entry.
17   Empty V,R,C assume: V: ?, R: -, C: 0%
19 =============
21 F: i18n via gettext
23 F: Convert shallow code model to deep code model
24 D: Tired of messing between lots of unrelated files (especially .c/.h stuff)
26 F: Automated dependency generation for Makefile
27 D: Current looks awful and will break if anything changes.
29 F: Move output modules out*.c to output/ subdir
30 R: madfire
31 C: 10%
33 == THESE ARE FROM old NASM's Wishlist
34 == THEY NEED SEVERE REVISING (seems they weren't updated for a couple of years or so)
36 F: Check misc/ide.cfg into RCS as Watcom IDE enhancement thingy
37 V: 0.98
38 D: (nop@dlc.fi)
40 F: Package the Linux Assembler HOWTO
41 V: 0.98
43 F: 3DNow!, SSE and other extensions need documenting
44 V: 0.98
45 D: hpa: Does it really make sense to have a whole instruction set
46 D: reference packaged with the assembler?
48 F: prototypes of lrotate don't match in test/*. Fix.
49 V: 0.98
51 F: Build djgpp binaries for 0.98 onwards. Look into PMODE/W as a stub
52 V: 0.98
53 D: it might be a lot better than CWSDPMI. It's in PMW133.ZIP.
55 F: %undef operator that goes along with %define
56 V: ?
57 C: 100%
59 F: Fix `%error' giving error messages twice.
60 V: 0.99
61 D: Not especially important, as changes planned for 1.1x below will make
62 D: the preprocessor be only called once.
64 F: Sort out problems with OBJ
65 V: 0.99
66 D: * TLINK32 doesn't seem to like SEGDEF32 et al. So for that, we
67 D:   should avoid xxx32 records wherever we can.
68 D: * However, didn't we change _to_ using xxx32 at some stage? Try
69 D:   to remember why and when.
70 D: * Apparently Delphi's linker has trouble with two or more
71 D:   globals being defined inside a PUBDEF32. Don't even know if it
72 D:   _can_ cope with a PUBDEF16.
73 D: * Might need extra flags. *sigh*
75 F: Symbol table output may possibly be useful.
76 V: 0.99
77 D: Ken Martwick (kenm@efn.org) wants the following format:
78 D:      labelname       type    offset(hex)     repetition count
79 D: Possibly include xref addresses after repetition count?
81 F: ELF fixes
82 V: 0.99
83 D: There are various other bugs in outelf.c that make certain kinds
84 D: of relocation not work. See zbrown.asm. Looks like we may have to do
85 D: a major rewrite of parts of it. Compare some NASM code output with
86 D: equivalent GAS code output. Look at the ELF spec. Generally fix things.
88 F: ELF fixes
89 V: 0.99
90 D: NASM is currently using a kludge in ELF that involves defining
91 D: a symbol at a zero absolute offset. This isn't needed, as the
92 D: documented solution to the problem that this solves is to use
93 D: SHN_UNDEF.
95 F: Debug information, in all formats it can be usefully done in.
96 V: 0.99
97 D: * including line-number record support.
98 D: * "George C. Lindauer" <gclind01@starbase.spd.louisville.edu>
99 D:   wants to have some say in how this goes through.
100 D: * Andrew Crabtree <andrewc@rosemail.rose.hp.com> wants to help out.
102 F: Think about a line-continuation character.
103 V: 0.99
105 F: Consider allowing declaration of two labels on the same line,
106 V: 0.99
107 D: syntax 'label1[:] label2[:] ... instruction'.
108 D: Need to investigate feasibility.
110 F: Quoting of quotes by doubling them, in string and char constants.
111 V: 0.99
113 F: Two-operand syntax for SEGMENT/SECTION macro to avoid warnings
114 D: of ignored section parameters on reissue of __SECT__.
115 D: Or maybe skip the warning if the given parameters are identical to
116 D: what was actually stored. Investigate.                               
117 V: 0.99
119 F: Apparently we are not missing a PSRAQ instruction, because it
120 D: doesn't exist.  Check that it doesn't exist as an undocumented
121 D: instruction, or something stupid like that.
122 V: 0.99
124 F: Any assembled form starting 0x80 can also start 0x82.
125 V: 1.00
126 D: ndisasm should know this. New special code in instruction encodings, probably.
128 F: Pointing an EQU at an external symbol now generates an error.
129 V: 1.05
130 D: There may be a better way of handling this; we should look into it.
131 D: Ideally, the label mechanism should be changed to cope with one
132 D: label being declared relative to another - that may work, but could be
133 D: a pain to implement (or is it? it may be easy enough that you just
134 D: need to declare a new offset in the same segment...) This should be done
135 D: before v1.0 is released. There is a comment regarding this in labels.c,
136 D: towards the end of the file, which discusses ways of fixing this.
138 F: nested %rep used to cause a panic.
139 V: 1.10
140 D: Now a more informative error message is produced. This problem whould
141 D: be fixed before v1.0.
142 D: See comment in switch() statement block for PP_REP in do_directive()
143 D: in preproc.c (line 1585, or thereabouts)
145 F: Contribution
146 D: zgraeme.tar contains improved hash table routines
147 D: contributed by Graeme Defty <graeme@HK.Super.NET> for use in the
148 D: label manager.
150 F: Contribution
151 D: zsyntax.zip contains a syntax-highlighting mode for
152 D: NASM, for use with the Aurora text editor (??).
154 F: Contribution
155 D: zvim.zip contains a syntax-highlighting mode for NASM, for use with vim.
157 F: Contribution
158 D: zkendal1.zip and zkendal2.zip contain Kendall
159 D: Bennett's (<KendallB@scitechsoft.com>) alternative syntax stuff,
160 D: providing an alternative syntax mode for NASM which allows a macro
161 D: set to be written that allows the same source files to be
162 D: assembled with NASM and TASM.
163 R: Kendall Bennett
164 C: 100%
166 F: Add the UD2 instruction.
167 C: 100%
169 F: Add the four instructions documented in 24368901.pdf (Intel's own document).
170 C: 100%
172 F: Some means of avoiding MOV memoffs,EAX which apparently the
173 D: Pentium pairing detector thinks modifies EAX. Similar means of
174 D: choosing instruction encodings where necessary.
175 V: 1.10?
177 F: The example of ..@ makes it clear that a ..@ label isn't just
178 D: local, but doesn't make it clear that it isn't just global either.
180 F: hpa wants an evaluator operator for ceil(log2(x)).
182 F: Extra reloc types in ELF
183 D: R_386_16 type 20, PC16 is 21, 8 is 22, PC8 is 23.
184 D: Add support for the 16s at least.
186 F: Lazy section creation or selective section output
187 D: in COFF/win32 at least and probably other formats: don't bother to emit a section
188 D: if it contains no data. Particularly the default auto-created
189 D: section. We believe zero-length sections crash at least WLINK (in win32).
191 F: Make the flags field in `struct itemplate' in insns.h a long instead of an int.
192 C: 100%?
194 F: Implement %ifref to check whether a single-line macro has ever been expanded since (last re) definition. Or maybe not. We'll see.
196 F: add pointer to \k{insLEAVE} and \k{insENTER} in chapters about       mixed-language programming.
198 F: Some equivalent to TASM's GLOBAL directive
199 D: ie something which defines a symbol as external if it doesn't end up being defined
200 D: but defines it as public if it does end up being defined.
202 F: Documentation doesn't explain about C++ name mangling.
204 F: see if BITS can be made to do anything sensible in obj (eg set the default new-segment property to Use32).
206 F: OBJ: coalesce consecutive offset and segment fixups for the same location into full-32bit-pointer fixups.
207 D: This is apparently necessary because some twazzock in the PowerBASIC development
208 D: team didn't design to support the OMF spec the way the rest of the
209 D: world sees it.
211 F: Allow % to be separated from the rest of a preproc directive, for    alternative directive indentation styles.
213 F: __DATE__, __TIME__, and text variants of __NASM_MAJOR__ and __NASM_MINOR__.
215 F: Warn on TIMES combined with multi-line macros.
216 V: 1.00
217 D: TIMES gets applied to first line only - should bring to users' attention.
219 F: Re-work the evaluator, again, with a per-object-format fixup
220 D: routine, so as to be able to cope with section offsets "really"
221 D: being pure numbers; should be able to allow at _least_ the two
222 D: common idioms
223 D:   TIMES 510-$ DB 0            ; bootsector
224 D:   MOV AX,(PROG_END-100H)/16   ; .COM TSR
225 D: Would need to call the fixup throughout the evaluator, and the
226 D: fixup would have to be allowed to return UNKNOWN on pass one if it
227 D: had to. (_Always_ returning UNKNOWN on pass one, though a lovely
228 D: clean design, breaks the first of the above examples.)
229 V: 1.10
231 F: Preprocessor identifier concatenation?
232 V: 1.10
234 F: Arbitrary section names in `bin'.
235 V: 0.98.09
236 D: Is this necessary? Is it even desirable?
237 D: hpa: Desirable, yes.  Necessary?  Probably not, but there are definitely cases where it becomes quite useful.
238 R: madfire
239 C: 100%
241 F: Ability to read from a pipe.
242 V: 1.10
243 D: Obviously not useful under dos, so memory problems with storing
244 D: entire input file aren't a problem either.
246 F: File caching under DOS/32 bit...
247 V: 1.10?
248 D: maybe even implement discardable buffers that get thrown away
249 D: when we get a NULL returned from malloc(). Only really useful under
250 D: DOS. Think about it.
252 F: possibly spool out the pre-processed stuff to a file, to avoid having to re-process it.
253 V: 1.10?
254 D: Possible problems with preprocessor values not known on pass 1? Have a look...
256 F: Or maybe we can spool out a pre-parsed version...?
257 V: 1.10
258 D: Need to investigate feasibility. Does the results from the parser
259 D: change from pass 1 to pass 2? Would it be feasible to alter it so that
260 D: the parser returns an invariant result, and this is then processed
261 D: afterwards to resolve label references, etc?
263 F: Subsection support?
265 F: A good ALIGN mechanism, similar to GAS's.
266 V: 0.98p1
267 D: GAS pads out space by means of the following (32-bit) instructions:
268 D:         8DB42600000000    lea esi,[esi+0x0]
269 D:         8DB600000000      lea esi,[esi+0x0]
270 D:         8D742600          lea esi,[esi+0x0]
271 D:         8D7600            lea esi,[esi+0x0]
272 D:         8D36              lea esi,[esi]
273 D:         90                nop
274 D: It uses up to two of these instructions to do up to 14-byte pads;
275 D: when more than 14 bytes are needed, it issues a (short) jump to
276 D: the end of the padded section and then NOPs the rest. Come up with
277 D: a similar scheme for 16 bit mode, and also come up with a way to
278 D: use it - internal to the assembler, so that programs using ALIGN
279 D: don't knock over preprocess-only mode.
280 D:   Also re-work the macro form so that when given one argument in a
281 D: code section it calls this feature.
282 R: Panos Minos
283 C: 100%?
285 F: Possibly a means whereby FP constants can be specified as immediate operands to non-FP instructions.
286 D: * Possible syntax: MOV EAX,FLOAT 1.2 to get a single-precision FP
287 D:   constant. Then maybe MOV EAX,HI_FLOAT 1.2 and MOV EAX,LO_FLOAT
288 D:   1.2 to get the two halves of a double-precision one. Best to
289 D:   ignore extended-precision in case it bites.
290 D: * Alternatively, maybe MOV EAX,FLOAT(4,0-4,1.2) to get bytes 0-4
291 D:   (ie 0-3) of a 4-byte constant. Then HI_FLOAT is FLOAT(8,4-8,x)
292 D:   and LO_FLOAT is FLOAT(8,0-4,x). But this version allows two-byte
293 D:   chunks, one-byte chunks, even stranger chunks, and pieces of
294 D:   ten-byte reals to be bandied around as well.
296 F: A UNION macro might be quite cool
297 D: now that ABSOLUTE is sane enough to be able to handle it.
299 F: An equivalent to gcc's ## stringify operator, plus string concatenation
300 D: somehow implemented without undue ugliness, so as
301 D: to be able to do `%include "/my/path/%1"' in a macro, or something
302 D: similar...
304 F: Actually _do_ something with the processor, privileged and
305 D: undocumented flags in the instruction table. When this happens,
306 D: consider allowing PMULHRW to map to either of the Cyrix or AMD
307 D: versions?
308 D: hpa: The -p option to ndisasm now uses this to some extent.
309 V: 1.10
311 F: Maybe NEC V20/V30 instructions?                                      ?
312 D: hpa: What are they?  Should be trivial to implement.
314 F: Yet more object formats.
315 D: * Possibly direct support for .EXE files?
316 V: 1.10
318 F: Symbol map in binary format. Format-specific options...
319 V: 1.10?
321 F: REDESIGN: Think about EQU dependency, and about start-point specification in OBJ. Possibly re-think directive support.
322 V: 1.20?
324 F: Think about a wrapper program like gcc?
325 V: 2.00?
326 D: Possibly invent a _patch_ for gcc so that it can take .asm files on the command line?
327 D: If a wrapper happens, think about adding an option to cause the
328 D: resulting executable file to be executed immediately, thus
329 D: allowing NASM source files to have #!... (probably silly)
331 F: Multi-platform support?
332 D: If so: definitely Alpha; possibly Java byte code;
333 D: probably ARM/StrongARM; maybe Sparc; maybe Mips; maybe
334 D: Vax. Perhaps Z80 and 6502, just for a laugh?
336 F: Consider a 'verbose' option that prints information about the resulting object file onto stdout.
338 F: Line numbers in the .lst file don't match the line numbers in the input.
339 D: They probably should, rather than the current matching of the post-preprocessor line numbers.