H. Peter Anvin [Thu, 22 May 2008 01:10:09 +0000 (18:10 -0700)]
AVX: instruction table through M
Implement the AVX instruction table through the letter M.
H. Peter Anvin [Thu, 22 May 2008 01:09:17 +0000 (18:09 -0700)]
insns.pl: error if we have a 'v' operand and no vex.nds/ndd
Although redundant, the presence of a 'v' operand should match the
existence of a nds or ndd flag on vex; this should help catch typos.
H. Peter Anvin [Wed, 21 May 2008 22:09:31 +0000 (15:09 -0700)]
insnsn.c: cleaner to *not* separate out conditional instructions
The disassembler code gets cleaner if we do *not* separate out the
conditional instructions; instead, rely on the fact that the
conditionals are always at the end and use FIRST_COND_OPCODE as a
barrier.
H. Peter Anvin [Wed, 21 May 2008 22:03:26 +0000 (15:03 -0700)]
Add legacy blendvpd to avx.asm, as a disassembler test.
H. Peter Anvin [Wed, 21 May 2008 22:02:30 +0000 (15:02 -0700)]
Implement aliases for specific SSE5 compare operations
Implement aliases for specific SSE5 compare operations, per BR 1930630.
H. Peter Anvin [Wed, 21 May 2008 21:45:46 +0000 (14:45 -0700)]
insns.dat: reimplement SSE5 compares using the bytecode compiler
Use the bytecode compiler for the SSE5 compare instructions. While we
are at it, give it correct flags.
H. Peter Anvin [Wed, 21 May 2008 21:44:42 +0000 (14:44 -0700)]
insns.pl: match AMD documentation for DREX syntax
Adjust the compiler to give a syntax for DREX instructions that
matches the AMD documentation.
H. Peter Anvin [Wed, 21 May 2008 21:28:42 +0000 (14:28 -0700)]
Add the PCLMUL instructions (BR 1933742)
Add the PCLMUL group instructions, from the AVX spec but not actually
AVX instructions.
H. Peter Anvin [Wed, 21 May 2008 21:17:33 +0000 (14:17 -0700)]
Add INVEPT and INVVPID (BR 1956955)
H. Peter Anvin [Wed, 21 May 2008 21:16:49 +0000 (14:16 -0700)]
Use "o64nw" instead of "o64i" for o64 without REX.W
Use the somewhat more mnemonic "o64nw" for 64-bit operand size sans
REX.W.
H. Peter Anvin [Wed, 21 May 2008 21:03:56 +0000 (14:03 -0700)]
Add the MOVBE instructions (BR 1956954)
Add the MOVBE instructions (load/store and swap)
H. Peter Anvin [Wed, 21 May 2008 18:18:12 +0000 (11:18 -0700)]
insns.pl: readabilty improvements for isnsnd.c
Make insnsd.c a bit more consistent in style.
H. Peter Anvin [Wed, 21 May 2008 18:05:39 +0000 (11:05 -0700)]
Disassembler: select table based on VEX prefixes
We can use the new VEX prefixes to select into a large table of new
opcode spaces. Since the table is (currently) sparse, add logic so we
don't end up producing tons of empty tables for no good reason.
This is also necessary since VEX is likely to reuse opcode bytes that
would appear as prefixes at some point, which would cause conflicts
with the regular tables.
H. Peter Anvin [Wed, 21 May 2008 17:34:33 +0000 (10:34 -0700)]
Fix skipping 0270 code when searching for disasm prefixes
The 0270 code was incorrectly entered as 270 (decimal), which meant
that instructions with vex but no .nds got misfiled in the improper
opcode tables.
H. Peter Anvin [Wed, 21 May 2008 17:33:19 +0000 (10:33 -0700)]
Fix display for fixed xmm0/ymm0, SSE redundant prefixes
All singleton registers need to be displayable from register flags
alone!
When using the new 0360..0363 codes, make sure we appropriate avoid
displaying the legacy use of the prefixes.
Philipp Thomas [Wed, 21 May 2008 15:53:21 +0000 (08:53 -0700)]
Fix buffer overflow in preproc.c (BR 1942146)
Fix buffer overflow in preproc.c due to an incorrect test. In the
code:
for (r = p, s = ourcopy; *r; r++) {
if (r >= p+MAX_KEYWORD)
return tokval->t_type = TOKEN_ID; /* Not a keyword */
*s++ = tolower(*r);
}
*s = '\0';
... the test really needs to be >= since for the pass where there are
equal:
a) a nonzero byte means we have > MAX_KEYWORD characters, and
b) s = ourcopy+MAX_KEYWORD; but if the test doesn't trigger,
we can write one more character *plus* the null byte, overflowing
ourcopy.
H. Peter Anvin [Wed, 21 May 2008 15:45:17 +0000 (08:45 -0700)]
insns typo fix: SSE5 FNM* instructions misspelled
The SSE5 FNM* instructions were misspelled as FMN*
(Bug 1930322)
H. Peter Anvin [Wed, 21 May 2008 15:42:55 +0000 (08:42 -0700)]
Merge branch 'master' of git+ssh://repo.or.cz/srv/git/nasm
H. Peter Anvin [Wed, 21 May 2008 15:41:58 +0000 (08:41 -0700)]
UDx instructions are 186+, not 286+
The UDx instructions are valid as far back as the #UD trap, which is
the 186, not the 286.
H. Peter Anvin [Wed, 21 May 2008 06:36:36 +0000 (23:36 -0700)]
VEX prefixes apply to VEX instructions only...
H. Peter Anvin [Wed, 21 May 2008 06:28:46 +0000 (23:28 -0700)]
AVX instructions up to VMINSS
H. Peter Anvin [Wed, 21 May 2008 06:16:27 +0000 (23:16 -0700)]
A few more AVX instructions (up to VLDMXCSR)
More AVX instructions, up to VLDMXCSR
H. Peter Anvin [Wed, 21 May 2008 02:29:04 +0000 (19:29 -0700)]
Handle is4 bytes without meaningful information in the bottom bits
Support is4 bytes without meaningful information in the bottom bits.
This is equivalent to /is4=0 for the assembler, but makes the bottom
bits don't care for the disassembler.
H. Peter Anvin [Wed, 21 May 2008 01:33:40 +0000 (18:33 -0700)]
inslist.pl: deal with the new encoding format
Make it possible for inslist.pl to understand the new encoding format;
fix a few minor buglets.
H. Peter Anvin [Wed, 21 May 2008 01:21:11 +0000 (18:21 -0700)]
Officially specify - as the symbol for an implicit operand
Use - to denote that an operand is implicit (not encoded). This
*better* be a fixed operand!
H. Peter Anvin [Wed, 21 May 2008 01:14:30 +0000 (18:14 -0700)]
AVX: implement all the convert instructions...
Make our way through the AVX instructions: conversions.
This is all I have time for now... hopefully this can service as a
generous source of examples.
H. Peter Anvin [Wed, 21 May 2008 00:14:17 +0000 (17:14 -0700)]
Accept the gas mnemonics "ud2a" and "ud2b"; fix ud0
Accept the gas mnemonics "ud2a" and "ud2b" for the instructions we
call ud2 and ud1 respectively, and Intel call ud2 and undocumented :)
Also, 0F FF is ud0 regardless of prefixes, at least as far as we know.
H. Peter Anvin [Wed, 21 May 2008 00:07:57 +0000 (17:07 -0700)]
ndisasm: simple compare for conditional opcodes, no loop
We had a completely unnecessary loop to test for conditional opcodes.
Since we always put the conditional opcodes at the end, we might as
well just remember where that list starts and compare against it.
H. Peter Anvin [Tue, 20 May 2008 23:59:17 +0000 (16:59 -0700)]
Finish the VCMP series...
H. Peter Anvin [Tue, 20 May 2008 23:48:34 +0000 (16:48 -0700)]
More AVX instructions
Add additional AVX instructions to the list.
H. Peter Anvin [Tue, 20 May 2008 23:47:42 +0000 (16:47 -0700)]
Make the syntax for immediates match the docs better
Use a more manual-like syntax for immediates (we still may have to use
extended syntax, but not always.)
H. Peter Anvin [Tue, 20 May 2008 23:47:12 +0000 (16:47 -0700)]
Add support for ymm0 in instructions
Make it possible to use ymm0 as a fixed operand in instructions
H. Peter Anvin [Tue, 20 May 2008 23:46:36 +0000 (16:46 -0700)]
phash: cut random vector set down a bit
Reduce the size of the random vector set somewhat
H. Peter Anvin [Tue, 20 May 2008 21:49:32 +0000 (14:49 -0700)]
No 32-byte floating point format: fix error for DY
Output a more legible error message for floating-point with "DY".
H. Peter Anvin [Tue, 20 May 2008 21:42:53 +0000 (14:42 -0700)]
openwcom.mak: wmake uses & for continuation, not \ (sigh)
wmake uses & for continuation, since \ is used for pathname
separators.
H. Peter Anvin [Tue, 20 May 2008 21:38:21 +0000 (14:38 -0700)]
Readability improvements for regdis.c
H. Peter Anvin [Tue, 20 May 2008 21:35:34 +0000 (14:35 -0700)]
netware.mak: correct dependencies
The Makefile uses VPATH and stripped directory names for files, so
generate the dependencies accordingly.
H. Peter Anvin [Tue, 20 May 2008 21:25:36 +0000 (14:25 -0700)]
rdx: Add cast avoid warning from gcc
Avoid a warning from gcc about casting an integer of different size to
a pointer.
H. Peter Anvin [Tue, 20 May 2008 21:21:29 +0000 (14:21 -0700)]
Avoid #including .c files; instead compile as separate units
Don't #include .c files, even if they are auto-generated; instead
compile them as separate compilation units and let the linker do its
job.
H. Peter Anvin [Tue, 20 May 2008 20:07:09 +0000 (13:07 -0700)]
PTEST is SSE4.1; although AMD says it's SSE5.
Fix this when we have proper support for feature sets, or forget about
the concept entirely.
H. Peter Anvin [Tue, 20 May 2008 20:03:39 +0000 (13:03 -0700)]
insns.pl: don't require whitespace before / or \
Use Perl's context-sensitive regular expressions to tell split that a
slash or backslash begins a new operator.
H. Peter Anvin [Tue, 20 May 2008 18:47:01 +0000 (11:47 -0700)]
nasm.h: remove obsolete IP_REG definitions
H. Peter Anvin [Tue, 20 May 2008 18:43:53 +0000 (11:43 -0700)]
Add DY, YWORD, and the SY instruction flag
Add the DY instruction, YWORD keyword, and an SY marker for
instruction sizes. Add a few more AVX sample instructions.
H. Peter Anvin [Tue, 20 May 2008 18:23:18 +0000 (11:23 -0700)]
insns.pl: support operands that serve double duty
Sometimes assembly syntax wants to permit a single operand to serve
multiple functions; allow this.
The disassembler could really use to be smarter about those.
H. Peter Anvin [Tue, 20 May 2008 18:05:59 +0000 (11:05 -0700)]
insns.dat: no subheader for "must be last"
H. Peter Anvin [Tue, 20 May 2008 18:04:26 +0000 (11:04 -0700)]
insns.dat: make even wider to make space for AVX
The AVX instructions take more space, so add a few tab stops across
the entire file.
H. Peter Anvin [Tue, 20 May 2008 18:01:28 +0000 (11:01 -0700)]
insns.dat: use compiler-generated bytecodes for AVX
Use compiler-generated bytecodes for the AVX instruction demos. This
should make it a lot easier for other people (HINT, HINT) to add the
instruction table.
H. Peter Anvin [Tue, 20 May 2008 17:48:22 +0000 (10:48 -0700)]
insns.pl: fix regex subgroup of /is4= codes
The argument is now $1, not $2...
H. Peter Anvin [Tue, 20 May 2008 17:39:15 +0000 (10:39 -0700)]
insns.pl: fix splitting of bracketted operations
H. Peter Anvin [Tue, 20 May 2008 17:29:11 +0000 (10:29 -0700)]
Opcode listing notation is /is4, consistently
H. Peter Anvin [Tue, 20 May 2008 17:21:57 +0000 (10:21 -0700)]
Use the \360..\363 annotations for SSE prefixes
H. Peter Anvin [Tue, 20 May 2008 16:46:24 +0000 (09:46 -0700)]
Same some space by introducing shorthand byte codes for SSE prefixes
Properly done, all SSE instructions which has the 66/F2/F3 opcode
multiplex need two prefixes: one to control the use of OSP and one to
control the use of REP. However, it's a four-way select: np/66/F2/F3;
so introduce shorthand bytecodes for that purpose.
H. Peter Anvin [Tue, 20 May 2008 16:36:41 +0000 (09:36 -0700)]
Allow explicit immediate syntax for imz2 as well as is4
imz2 is just an alias for is4 as far as we are concerned...
H. Peter Anvin [Tue, 20 May 2008 04:10:14 +0000 (21:10 -0700)]
insns.pl: escape literal special character in regex
In Perl code, it is good practice to escape special characters
intended to be literal.
H. Peter Anvin [Tue, 20 May 2008 04:07:08 +0000 (21:07 -0700)]
Bytecode compiler: add support for is4/imz2 operands
H. Peter Anvin [Tue, 20 May 2008 02:08:03 +0000 (19:08 -0700)]
More work on bytecode compiler (not finished yet...)
More work on the bytecode compiler. Not all useful bytecodes are
implemented yet, however.
H. Peter Anvin [Tue, 20 May 2008 01:19:42 +0000 (18:19 -0700)]
insns.pl: first steps toward a "smart" bytecode compiler
First steps toward a smart(er) bytecode compiler, using a syntax that
can be more directly taken from the manuals.
H. Peter Anvin [Tue, 13 May 2008 21:29:47 +0000 (14:29 -0700)]
Make insnsb.c an actual compilation unit
"make alldeps" doesn't really like it when included files end in *.c.
Instead of renaming insnsb.c to insnsb.h, make it an actual
compilation unit, since there really isn't any reason for it not to
be.
H. Peter Anvin [Mon, 12 May 2008 22:28:33 +0000 (15:28 -0700)]
insnsb.c: use 5 digits for index, not 4
We already have indexes up to 9500, so use 5 digits instead of 4.
H. Peter Anvin [Mon, 12 May 2008 18:36:24 +0000 (11:36 -0700)]
Make MAX_OPERANDS a parameter in insns.pl as well
MAX_OPERANDS is present in insns.pl as well (although proper C
compilers shouldn't need this kind of zero padding.) Make sure it's
clear to everyone.
H. Peter Anvin [Mon, 12 May 2008 18:13:41 +0000 (11:13 -0700)]
Remove special hacks to avoid zero bytecodes
We can now have zero bytecodes with impunity, so remove any special
hacks we had to avoid zeroes in the bytecode.
H. Peter Anvin [Mon, 12 May 2008 18:00:50 +0000 (11:00 -0700)]
Generate a byte array instead of using strings for the byte codes
Generate a byte array instead of using C compiler strings for the byte
codes. This has a few advantages:
- No need to special-case zero due to broken C compilers.
- Only insns.pl only ever reads the string, so we can invent our own
syntax.
- Compaction.
- We can give it the proper, unsigned type.
H. Peter Anvin [Mon, 12 May 2008 17:17:27 +0000 (10:17 -0700)]
Factor out string decoder in insns.pl
Factor out the string decoder into its own subroutine. This will be
useful shortly ;)
H. Peter Anvin [Wed, 7 May 2008 03:11:14 +0000 (20:11 -0700)]
Add support for register-number immediates with fixed 4-bit values
Add support for imm8 bytes which has a register value in the top four
bits and an arbitrary fixed value in the bottom four bits.
H. Peter Anvin [Wed, 7 May 2008 03:06:14 +0000 (20:06 -0700)]
Fix encoding of VPERMIL2PS instructions
H. Peter Anvin [Wed, 7 May 2008 02:58:52 +0000 (19:58 -0700)]
Actually spell "Sandy Bridge" correctly
H. Peter Anvin [Wed, 7 May 2008 02:54:28 +0000 (19:54 -0700)]
Sandy Bridge, not Sandy Banks; add Westmere
H. Peter Anvin [Tue, 6 May 2008 01:47:27 +0000 (18:47 -0700)]
Initial NDISASM support for AVX instructions/VEX prefixes
Initial NDISASM support for AVX instructions and VEX prefixes. It
doesn't mean it's correct, but it seems to match my current
understanding. It can disassemble *some*, but not *all*, of the AVX
test cases (which are known to be at least partially incorrect...)
H. Peter Anvin [Mon, 5 May 2008 06:15:13 +0000 (23:15 -0700)]
The AVX R,X,B, and V fields (but not W) are inverted.
The AVX test cases are still not generated correctly, though.
H. Peter Anvin [Mon, 5 May 2008 00:53:31 +0000 (17:53 -0700)]
First cut at AVX machinery.
First cut at AVX machinery support. The only instruction implemented
is VPERMIL2PS, and it's probably buggy. I'm checking this in with the
hope that other people can start helping out with (a) testing this,
and (b) adding instructions.
NDISASM support is not there yet.
H. Peter Anvin [Tue, 22 Apr 2008 02:44:55 +0000 (22:44 -0400)]
Initial support for YMM (AVX) registers
Add support for ymm0..15 registers, and the "ymmreg" qualifier.
No support yet for "yword" or "dy".
Charles Crayne [Sat, 12 Apr 2008 20:35:43 +0000 (13:35 -0700)]
Avoid long line warning when generating nasm docs
rdsrc.pl limits lines to 68 characters for some formats
Bo Borgerson [Sat, 12 Apr 2008 15:47:57 +0000 (11:47 -0400)]
Avoid some warnings in rdoff/rdf2bin.c
I received some warnings when running make on the head revision of
nasm from git:
----
rdf2bin.c: In function 'main':
rdf2bin.c:122: warning: comparison between signed and unsigned
rdf2bin.c:123: warning: comparison between signed and unsigned
rdf2bin.c:124: warning: comparison between signed and unsigned
----
I think these warnings are innocuous and should be safely avoidable
with simple casts (please see attached patch).
* rdoff/rdf2bin.c
(main): cast to size_t for comparison with fwrite return value
Signed-off-by: Bo Borgerson <gigabo@gmail.com>
H. Peter Anvin [Thu, 10 Apr 2008 21:56:09 +0000 (14:56 -0700)]
Temporaries in macros need a unique prefix; WSAA*() macros to header
When using temporaries in macros, given them a unique prefix to avoid
namespace collisions when using one macro inside another.
Move the WSAA*() macros from outelf32/outelf64 to a separate header
file.
H. Peter Anvin [Thu, 10 Apr 2008 21:54:02 +0000 (14:54 -0700)]
autogen.sh: remove config.status
Remove config.status when rebuilding the autoconf files.
Charles Crayne [Mon, 7 Apr 2008 21:26:29 +0000 (14:26 -0700)]
Document avaiabily of DWARF for ELF32 and ELF64
Charles Crayne [Mon, 7 Apr 2008 20:15:53 +0000 (13:15 -0700)]
Correctly identify dwarf support for elf32
Change architecture tag to i386.
H. Peter Anvin [Fri, 4 Apr 2008 20:34:53 +0000 (13:34 -0700)]
Correctly identify SBYTE in the optimizer
Correctly identify SBYTE in the optimizer, *HOWEVER*, this change will
cause nuisance warnings to be issued; that will have to be fixed.
Charles Crayne [Thu, 27 Mar 2008 00:20:21 +0000 (17:20 -0700)]
Restore critical expression checking when optimizer enabled
In the prior code, enabling optimization effectively diabled
critical expression checking, because the optimization passes
took place before checking was enabled.
Charles Crayne [Sun, 23 Mar 2008 03:08:20 +0000 (20:08 -0700)]
Merge branch 'master' of git+ssh://ccrayne@repo.or.cz/srv/git/nasm
Charles Crayne [Sun, 23 Mar 2008 03:07:08 +0000 (20:07 -0700)]
Remove KATMAI support for CLFLUSH
Minimal cpu level is WILLAMETTE,SSE2
H. Peter Anvin [Sun, 23 Mar 2008 02:33:31 +0000 (19:33 -0700)]
Remove redundant, bogus CLFLUSH entry
H. Peter Anvin [Wed, 19 Mar 2008 21:52:27 +0000 (14:52 -0700)]
Better handling of 32-bit imms in 64-bit moves
A much better way to handle the 32-bit immediates in 64-bit moves.
Add a test file.
H. Peter Anvin [Wed, 19 Mar 2008 21:42:20 +0000 (14:42 -0700)]
insns.dat: add "MOV reg64,imm32" as a special rule
Add "MOV reg64,imm32" as a special rule, to handle the case of
"mov rax,dword <foo>", where <foo> is sign-extended; this is a 7-byte
form, as opposed to "mov eax,<foo>" (5 bytes) and "mov rax,<foo>" (10
bytes).
At some point, the optimizer needs to be able to handle these.
Charles Crayne [Tue, 18 Mar 2008 22:21:14 +0000 (15:21 -0700)]
Correct opcode for CLFLUSH
Correct opcode is 0FAEh
Charles Crayne [Thu, 13 Mar 2008 05:39:03 +0000 (22:39 -0700)]
Display fully qualified local label in "not defined" message
Add new function "local_scope" to label subsystem to
return the previous non-local label for a given local label,
and invoke this funcion in eval.c to display the fully
qualified name in the "not defined" error message.
Charles Crayne [Tue, 4 Mar 2008 22:25:34 +0000 (14:25 -0800)]
Adjust symbol number for global symbols
Reloc entries were pointing to wrong target section
Charles Crayne [Mon, 3 Mar 2008 22:43:55 +0000 (14:43 -0800)]
Eliminate duplicate symbol definitions
Don't accept -1 as an odd numbered segment
Charles Crayne [Mon, 25 Feb 2008 05:05:46 +0000 (21:05 -0800)]
Report dwarf as V2 for ELF32
Older versions of gdb reject version 3
Charles Crayne [Mon, 25 Feb 2008 03:14:17 +0000 (19:14 -0800)]
Dwarf3 support for ELF32
1. Port dwarf3 support from ELF64 to ELF32
2. Move common SAA extentions to nasmlib
Charles Crayne [Sun, 24 Feb 2008 02:35:11 +0000 (18:35 -0800)]
Dwarf support tweeks and clean-up
1. Add relocation entries for dwarf sections.
2. Combine common dwarf and stabs routines.
H. Peter Anvin [Tue, 19 Feb 2008 19:01:08 +0000 (11:01 -0800)]
NASM 2.02
H. Peter Anvin [Mon, 18 Feb 2008 02:54:13 +0000 (18:54 -0800)]
outform: make OF_DOS include OF_COFF
DJGPP uses COFF as the file format. Since DJGPP is widely used in the
(remaining) DOS world, include OF_COFF in OF_DOS.
H. Peter Anvin [Sun, 17 Feb 2008 01:01:40 +0000 (17:01 -0800)]
Add %ifempty and variants
H. Peter Anvin [Sun, 17 Feb 2008 00:46:45 +0000 (16:46 -0800)]
CHANGES: Document %iftoken
H. Peter Anvin [Sun, 17 Feb 2008 00:44:46 +0000 (16:44 -0800)]
NASM 2.02rc2
H. Peter Anvin [Sun, 17 Feb 2008 00:41:25 +0000 (16:41 -0800)]
Implement %iftoken, test for a single token
Implement %iftoken, a test for a single token. This is useful in
cases using %+ to splice a macro-provided token.
H. Peter Anvin [Sat, 16 Feb 2008 23:44:24 +0000 (15:44 -0800)]
OpenWatcom: optimize for 686
Apparently -6 compiles are defined to run on anything 386 or newer,
and just use different instruction timings.
H. Peter Anvin [Sat, 16 Feb 2008 23:28:02 +0000 (15:28 -0800)]
Some compilers define __386__ instead of __i386__
OpenWatcom, and possibly other compilers from the DOS universe,
defines __386__ rather than __i386__.
H. Peter Anvin [Sat, 16 Feb 2008 23:25:02 +0000 (15:25 -0800)]
Clear up WRITE macros causing compile failures with Watcom
The OpenWatcom compiler warns about invalid shifts (correctly, it
appears) due to the non-X86_MEMORY versions of the various WRITE
macros. Fix.