NASM 0.96
[nasm/avx512.git] / Wishlist
blob17ef699807cf8aa7457191d1f55ef3c81e023a1c
1 NASM Wishlist
2 =============
4 - PUSH WORD EAX silently becomes PUSH EAX. Should warn.
6 - ndisasm hangs at eof.
8 - missing heading in documentation - some subsect in chapter 4.
10 - Add support for lcc 4.0.
11   * If-when this happens, remember to bump the `supported lcc
12     version' number in Readme.
14 - Re-work the evaluator, again, with a per-object-format fixup
15   routine, so as to be able to cope with section offsets "really"
16   being pure numbers; should be able to allow at _least_ the two
17   common idioms
18      TIMES 510-$ DB 0            ; bootsector
19      MOV AX,(PROG_END-100H)/16   ; .COM TSR
20   Would need to call the fixup throughout the evaluator, and the
21   fixup would have to be allowed to return UNKNOWN on pass one if it
22   had to. (_Always_ returning UNKNOWN on pass one, though a lovely
23   clean design, breaks the first of the above examples.)
25 - Preprocessor identifier concatenation?
27 - Arbitrary section names in `bin'.
29 - Ability to read from a pipe. Obviously not useful under dos, so
30   memory problems with storing entire input file aren't a problem
31   either.
33 - Subsection support?
35 - A good ALIGN mechanism, similar to GAS's. GAS pads out space by
36   means of the following (32-bit) instructions:
37           8DB42600000000    lea esi,[esi+0x0]
38           8DB600000000      lea esi,[esi+0x0]
39           8D742600          lea esi,[esi+0x0]
40           8D7600            lea esi,[esi+0x0]
41           8D36              lea esi,[esi]
42           90                nop
43   It uses up to two of these instructions to do up to 14-byte pads;
44   when more than 14 bytes are needed, it issues a (short) jump to
45   the end of the padded section and then NOPs the rest. Come up with
46   a similar scheme for 16 bit mode, and also come up with a way to
47   use it - internal to the assembler, so that programs using ALIGN
48   don't knock over preprocess-only mode.
49     Also re-work the macro form so that when given one argument in a
50   code section it calls this feature.
52 - Possibly a means whereby FP constants can be specified as
53   immediate operands to non-FP instructions.
54   * Possible syntax: MOV EAX,FLOAT 1.2 to get a single-precision FP
55     constant. Then maybe MOV EAX,HI_FLOAT 1.2 and MOV EAX,LO_FLOAT
56     1.2 to get the two halves of a double-precision one. Best to
57     ignore extended-precision in case it bites.
58   * Alternatively, maybe MOV EAX,FLOAT(4,0-4,1.2) to get bytes 0-4
59     (ie 0-3) of a 4-byte constant. Then HI_FLOAT is FLOAT(8,4-8,x)
60     and LO_FLOAT is FLOAT(8,0-4,x). But this version allows two-byte
61     chunks, one-byte chunks, even stranger chunks, and pieces of
62     ten-byte reals to be bandied around as well.
64 - A UNION macro might be quite cool, now that ABSOLUTE is sane
65   enough to be able to handle it.
67 - An equivalent to gcc's ## stringify operator, plus string
68   concatenation, somehow implemented without undue ugliness, so as
69   to be able to do `%include "/my/path/%1"' in a macro, or something
70   similar...
72 - Actually _do_ something with the processor, privileged and
73   undocumented flags in the instruction table.
75 - Maybe NEC V20/V30 instructions?
77 - Yet more object formats.
78   * Possibly direct support for .EXE files?
80 - Debug information, in all formats it can be usefully done in.
81   * including line-number record support.
83 - Symbol map in binary format. Format-specific options...
85 - REDESIGN: Think about EQU dependency, and about start-point
86   specification in OBJ. Possibly re-think directive support.
88 - Think about a wrapper program like gcc? Possibly invent a _patch_
89   for gcc so that it can take .asm files on the command line?
91 - If a wrapper happens, think about adding an option to cause the
92   resulting executable file to be executed immediately, thus
93   allowing NASM source files to have #!... (probably silly)
95 - Multi-platform support? If so: definitely Alpha; possibly Java
96   byte code; probably ARM/StrongARM; maybe Sparc; maybe Mips; maybe
97   Vax. Perhaps Z80 and 6502, just for a laugh?