H. Peter Anvin [Thu, 13 Sep 2007 03:37:32 +0000 (20:37 -0700)]
Macros for SSSE3/SSE4 instruction sets
Add instruction set flags for the SSSE3, SSE4.1 and SSE4.2 instruction
subsets.
H. Peter Anvin [Thu, 13 Sep 2007 03:32:39 +0000 (20:32 -0700)]
Support r/m operands for non-integer types
Support r/m operands for non-integer operands types, i.e. mmx or xmm
operands. This allows mmx and xmm operands to be written more
compactly, speeding up the assembler.
H. Peter Anvin [Thu, 13 Sep 2007 03:27:41 +0000 (20:27 -0700)]
Use enumerations where practical to ease debugging
We have a lot of enumerations; by declaring fields as such, we make it
easier when debugging, since the debugger can display the enumerations
in cleartext. However, make sure exceptional values (like -1) are
included in the enumeration, since the compiler otherwise may not
include it in the valid range of the enumeration.
H. Peter Anvin [Wed, 12 Sep 2007 17:02:55 +0000 (17:02 +0000)]
pptok.c: quick-and-dirty downcasing during prehashing
Speed up pptok.c by just doing |= 0x20 instead of calling tolower() for
every character during prehashing. This is good enough for our needs,
since we don't have any tokens containing the characters @ [ \ ] _ nor
any high-bit characters (in which case we'd have to worry about multibyte
anyway.)
H. Peter Anvin [Wed, 12 Sep 2007 16:55:57 +0000 (16:55 +0000)]
phash: Tell the user when the graph is OK
Tell the user when the graph is OK, so that we don't get quite so much of
"a list of errors followed by a long pause."
H. Peter Anvin [Wed, 12 Sep 2007 05:18:20 +0000 (05:18 +0000)]
pptok.c: handle holes in the pp_directives array
We need to fail if we land in a hole in the pp_directives array, since
we have a noncontiguous enum preproc_token now.
H. Peter Anvin [Wed, 12 Sep 2007 04:20:08 +0000 (04:20 +0000)]
preproc.c: adjust whitespace
Be consistent about whitespace.
H. Peter Anvin [Wed, 12 Sep 2007 04:18:37 +0000 (04:18 +0000)]
More automation in the preprocessor conditionals handling
Further automate the production of preprocessor conditionals. Now the
code automatically folds if/elif and the negatives.
H. Peter Anvin [Wed, 12 Sep 2007 02:13:39 +0000 (02:13 +0000)]
pptok.c: fix spacing
H. Peter Anvin [Wed, 12 Sep 2007 02:12:07 +0000 (02:12 +0000)]
Generate automatically correct tests for %if and %elif
Automatically generate macros to test for %if and %elif variants, which
are guaranteed to be correct across future changes.
H. Peter Anvin [Wed, 12 Sep 2007 01:34:19 +0000 (01:34 +0000)]
Run "make alldeps"; add dependencies missing from the previous checkin
It helps to run "make alldeps" when the changes are actually complete...
H. Peter Anvin [Wed, 12 Sep 2007 01:29:43 +0000 (01:29 +0000)]
Use a perfect hash to look up preprocessor directives
Use a perfect hash to look up preprocessor directives, and generate
the preprocessor directive list automatically.
H. Peter Anvin [Wed, 12 Sep 2007 01:27:53 +0000 (01:27 +0000)]
phash: Be a bit more aggressive about trying to make a small hash
Change the threshold to 0.7 instead of 0.8.
H. Peter Anvin [Wed, 12 Sep 2007 00:22:29 +0000 (00:22 +0000)]
Add RCXZ as a known preprocessor condition
H. Peter Anvin [Tue, 11 Sep 2007 23:57:23 +0000 (23:57 +0000)]
doc: add some cross-references
H. Peter Anvin [Tue, 11 Sep 2007 23:52:01 +0000 (23:52 +0000)]
Feeble attempt at updating the documentation; remove Appendix B
Feeble attempt to document 64-bit support. Also, remove Appendix B since
we have been utterly useless at keeping it up to date, and it's redundant
with the processor manufacturer's documentation anyway.
H. Peter Anvin [Tue, 11 Sep 2007 22:44:03 +0000 (22:44 +0000)]
Handle instructions which can have both REX.W and OSP
H. Peter Anvin [Tue, 11 Sep 2007 22:14:18 +0000 (22:14 +0000)]
Use enums to make debugging easier
When we're dealing with a field which is guaranteed to have an enum type,
then declare it as such so it shows up in debuggers.
H. Peter Anvin [Tue, 11 Sep 2007 22:13:17 +0000 (22:13 +0000)]
ndisasm: handle \366 codes, prefer unprefixed instructions
- Implement \366 codes in ndisasm
- Prefer instruction patterns without loose prefixes if possible
- Fix improper initialization of operands in ndisasm
H. Peter Anvin [Tue, 11 Sep 2007 22:00:34 +0000 (22:00 +0000)]
Simplify tokens.dat slightly
H. Peter Anvin [Tue, 11 Sep 2007 04:26:44 +0000 (04:26 +0000)]
Quiet gcc warning about uninitialized variables
H. Peter Anvin [Tue, 11 Sep 2007 04:16:57 +0000 (04:16 +0000)]
Make the big instruction arrays "const"
Make the big instruction arrays "const", so they end up in readonly
storage. While we're at it, move their prototypes into insns.h.
H. Peter Anvin [Mon, 10 Sep 2007 23:32:05 +0000 (23:32 +0000)]
Use an actual enum for the opcode
Use an actual named enum for the opcode, that way it shows up in
cleartext while debugging.
H. Peter Anvin [Mon, 10 Sep 2007 23:30:21 +0000 (23:30 +0000)]
Fix order of token arguments
Order of token arguments was reversed, but tokens.dat wasn't updated
accordingly. Fix.
H. Peter Anvin [Mon, 10 Sep 2007 18:59:26 +0000 (18:59 +0000)]
assemble.c: correct special handing of ESP/RSP
Correct the special handling of ESP/RSP (must be in the base register
slot, but requires SIB.)
H. Peter Anvin [Mon, 10 Sep 2007 18:59:01 +0000 (18:59 +0000)]
tokhash: correct duplicate-token test
H. Peter Anvin [Mon, 10 Sep 2007 18:58:40 +0000 (18:58 +0000)]
tokhash: adjust table types to reduce size
Adjust the sizes of data types to reduce the total size of the tokhash
data structure.
H. Peter Anvin [Mon, 10 Sep 2007 18:55:52 +0000 (18:55 +0000)]
Fix the MMXREG and XMMREG flags definitions.
H. Peter Anvin [Wed, 5 Sep 2007 06:48:38 +0000 (06:48 +0000)]
nasm.spec.in: Copyright -> License
H. Peter Anvin [Wed, 5 Sep 2007 06:40:51 +0000 (06:40 +0000)]
Fix "make tar"; useful for RPM testing
H. Peter Anvin [Wed, 5 Sep 2007 06:24:43 +0000 (06:24 +0000)]
Remove obsolete Serial: construct; we shouldn't need it anyway.
Chuck Crayne [Tue, 4 Sep 2007 01:29:43 +0000 (01:29 +0000)]
Provide 64-bit support for ORG directive
H. Peter Anvin [Sun, 2 Sep 2007 16:37:03 +0000 (16:37 +0000)]
Fix some MMX/SSE irregularities which interact with the 64-bit support
H. Peter Anvin [Sun, 2 Sep 2007 14:46:00 +0000 (14:46 +0000)]
phash.ph: yet another attempt at getting Perl to behave, arithmetically
H. Peter Anvin [Sun, 2 Sep 2007 06:23:29 +0000 (06:23 +0000)]
Simple 64-bit org test
H. Peter Anvin [Sun, 2 Sep 2007 06:20:15 +0000 (06:20 +0000)]
phash.ph: remove some stale code
Remove old randomization code which is no longer used.
Chuck Crayne [Sun, 2 Sep 2007 01:00:34 +0000 (01:00 +0000)]
Force use of integer values for generating hash keys.
H. Peter Anvin [Fri, 31 Aug 2007 18:10:23 +0000 (18:10 +0000)]
phash: don't rely on the build platform Perl version of rand()
rand() in Perl can vary between platforms, so don't use it. Instead,
remove a completely pointless level of indirection (it introduced a
permutation which cancelled itself out) and provide a canned set of
random numbers for the rest. This guarantees we will always use the
same numbers.
H. Peter Anvin [Fri, 31 Aug 2007 07:31:51 +0000 (07:31 +0000)]
tokhash.pl: formatting changes for readability
No functional change
H. Peter Anvin [Fri, 31 Aug 2007 07:23:31 +0000 (07:23 +0000)]
tokhash: Speed up the rejection of unhashed values
Speed up the rejection of unhashed values (typically identifiers) by
filling unused hash slots with a large value (but not so large that
it is likely to overflow.) This means those values will be rejected
already by the range check, not needing strcmp().
H. Peter Anvin [Fri, 31 Aug 2007 06:06:17 +0000 (06:06 +0000)]
tokhash.pl: "ix" should have the same width as the "hash" arrays
For correctness in case of a very "linear" graph, "ix" needs to have
the same width as the "hash" arrays.
H. Peter Anvin [Fri, 31 Aug 2007 00:28:35 +0000 (00:28 +0000)]
Add "do not edit" comment to tokhash.c
H. Peter Anvin [Fri, 31 Aug 2007 00:23:40 +0000 (00:23 +0000)]
Make the token hash a bit smaller by using 16-bit hash tables
H. Peter Anvin [Fri, 31 Aug 2007 00:16:10 +0000 (00:16 +0000)]
Minor cleanup; remove duplication of names.c
H. Peter Anvin [Thu, 30 Aug 2007 23:42:39 +0000 (23:42 +0000)]
phash.ph: use a bipartite graph to reduce the storage requirements
Since we fold the f- and g-functions together, if we guarantee that g is
bipartite, we can make g twice the size of f without cost. This greatly
improves the odds of generating a smaller hash.
H. Peter Anvin [Thu, 30 Aug 2007 22:35:34 +0000 (22:35 +0000)]
Finishing touches on perfect hash tokenizer; actually turn the thing on
Finish the perfect hash tokenizer, and actually enable it.
Move stdscan() et al to a separate file, since it's not needed in any
of the clients of nasmlib other than nasm itself.
Run make alldeps.
H. Peter Anvin [Thu, 30 Aug 2007 21:50:20 +0000 (21:50 +0000)]
Makefile rule for tokhash.c
H. Peter Anvin [Thu, 30 Aug 2007 21:47:46 +0000 (21:47 +0000)]
tokens.dat: Data file containing alphanumeric tokens not in other .dats
H. Peter Anvin [Thu, 30 Aug 2007 21:45:56 +0000 (21:45 +0000)]
Generate a perfect hash for the token parser
H. Peter Anvin [Thu, 30 Aug 2007 21:40:08 +0000 (21:40 +0000)]
Fix bugs in repeated suffix handling, which led to missing r8d/r8w/r8d
H. Peter Anvin [Thu, 30 Aug 2007 21:39:37 +0000 (21:39 +0000)]
phash.ph: more powerful prehashing
H. Peter Anvin [Thu, 30 Aug 2007 20:15:25 +0000 (20:15 +0000)]
Make the perfect hash generator an includable module
H. Peter Anvin [Wed, 29 Aug 2007 20:30:31 +0000 (20:30 +0000)]
Correct the logic for recording fs: and gs: overrides.
H. Peter Anvin [Wed, 29 Aug 2007 18:20:19 +0000 (18:20 +0000)]
Generate R_X86_64_64 relocations in elf64 output
When appropriate, generate R_X86_64_64 relocations in elf64 output.
H. Peter Anvin [Wed, 29 Aug 2007 17:24:03 +0000 (17:24 +0000)]
Add README file
H. Peter Anvin [Wed, 29 Aug 2007 17:20:09 +0000 (17:20 +0000)]
Create a Perl library directory, and add the Graph module to it
Graph-0.84 from CPAN
H. Peter Anvin [Wed, 29 Aug 2007 17:05:17 +0000 (17:05 +0000)]
Perfect hash generator, as a perl script
Requires the CPAN Graph module.
H. Peter Anvin [Wed, 29 Aug 2007 16:41:43 +0000 (16:41 +0000)]
Use standard macro for the default directive
H. Peter Anvin [Wed, 29 Aug 2007 16:40:26 +0000 (16:40 +0000)]
Add standard macro for [default] directive
H. Peter Anvin [Wed, 29 Aug 2007 16:38:47 +0000 (16:38 +0000)]
More test cases for rel and abs addressing
H. Peter Anvin [Wed, 29 Aug 2007 16:38:05 +0000 (16:38 +0000)]
Add [default] directive
Add the [default {abs|rel}] directive, and clean up directive parsing.
H. Peter Anvin [Wed, 29 Aug 2007 16:25:46 +0000 (16:25 +0000)]
nasmlib: add bsii() case-insensitive version of bsi()
H. Peter Anvin [Wed, 29 Aug 2007 15:49:53 +0000 (15:49 +0000)]
Add test cases for IP-relative addressing
H. Peter Anvin [Wed, 29 Aug 2007 15:19:19 +0000 (15:19 +0000)]
Suppress IP-relative only for fs: and gs: overrides
AMD has (undocumented) segment limits even in 64-bit mode, so people
may want to use cs/ds/es/ss overrides. Since there are no bases, however,
IP-relative still applies.
See:
http://www.amd.com.hk/us-en/assets/content_type/DownloadableAssets/dwamd_kernel_summit_08_RB.pdf
H. Peter Anvin [Tue, 28 Aug 2007 23:06:00 +0000 (23:06 +0000)]
Implement REL/ABS modifiers
Implement "REL" and "ABS" modifiers for offsets in 64-bit mode. This
replaces "rip+XXX" type addressing. The infrastructure to set the default
mode is there, but there is nothing to throw the switch just yet.
Frank Kotler [Sun, 26 Aug 2007 05:51:39 +0000 (05:51 +0000)]
attempt to make static makefiles aware of outelf32/outelf64
Frank Kotler [Sun, 26 Aug 2007 05:48:54 +0000 (05:48 +0000)]
add nasm_strsep to nasmlib, for output/outmacho.c - strtok doesn't work
Frank Kotler [Sun, 26 Aug 2007 05:41:33 +0000 (05:41 +0000)]
remove "#include <unistd.h> from rdoff directory - two places - it annoyed Windows users and seems unneeded
Frank Kotler [Sun, 26 Aug 2007 05:10:24 +0000 (05:10 +0000)]
finally commit Mike Frysinger's "elf-visibility" patch
H. Peter Anvin [Mon, 20 Aug 2007 21:03:14 +0000 (21:03 +0000)]
regs.pl: handle dashed sequences with suffixes
Handle dashed sequences with suffixes. Use that for r8-r15[bwd].
H. Peter Anvin [Mon, 20 Aug 2007 20:10:04 +0000 (20:10 +0000)]
sync.c: change ULONG_MAX to UINT32_MAX
The value returned is uint32_t, not unsigned long. This creates a
warning when compiling on 64-bit machines.
H. Peter Anvin [Mon, 20 Aug 2007 20:09:11 +0000 (20:09 +0000)]
Add _MIN and _MAX macros for the fixed-size types.
H. Peter Anvin [Mon, 20 Aug 2007 20:02:17 +0000 (20:02 +0000)]
ldrdf: cast output of sizeof() before passing to printf(), to avoid warning.
The C99 way of doing this would be to use %zu, but that requires intrinsic
C library support.
Keith Kanios [Sun, 19 Aug 2007 18:49:26 +0000 (18:49 +0000)]
Fixed RIP address processing ambiguity found by Charles Crayne.
Keith Kanios [Fri, 17 Aug 2007 07:37:52 +0000 (07:37 +0000)]
Fixed issues with REX prefix effective address generation. Fixed XMM instruction output.
Keith Kanios [Fri, 17 Aug 2007 02:03:10 +0000 (02:03 +0000)]
Changed MMXREG and XMMREG flags to help resolve invalid REX prefix generation for MMX instructions.
H. Peter Anvin [Sat, 7 Jul 2007 02:01:08 +0000 (02:01 +0000)]
More int/int32_t confusion
H. Peter Anvin [Sat, 7 Jul 2007 01:59:52 +0000 (01:59 +0000)]
regflag() should return int32_t.
H. Peter Anvin [Thu, 21 Jun 2007 19:00:12 +0000 (19:00 +0000)]
Detect missing <inttypes.h> and include ersatz version if missing
H. Peter Anvin [Thu, 21 Jun 2007 06:24:23 +0000 (06:24 +0000)]
inttypes.h: for older preprocessors, specify L and LL as appropriate
H. Peter Anvin [Thu, 21 Jun 2007 06:20:43 +0000 (06:20 +0000)]
inttypes.h: Fix spelling of SHRT_MAX
H. Peter Anvin [Thu, 21 Jun 2007 06:15:42 +0000 (06:15 +0000)]
inttypes.h: do a single ersatz <inttypes.h> based on <limits.h>
Chuck Crayne [Sun, 3 Jun 2007 02:42:41 +0000 (02:42 +0000)]
Support 32-bit direct addressing in 64-bit mode without base or index regs
H. Peter Anvin [Sat, 2 Jun 2007 02:26:21 +0000 (02:26 +0000)]
Fix the [U]INT*_C() creation macros
The [U]INT*_C() macros were broken, because ## takes precedence over
macro resolution.
H. Peter Anvin [Sat, 2 Jun 2007 00:05:35 +0000 (00:05 +0000)]
For platforms that don't have them, provide <inttypes.h> for common models.
Apparently, some platforms (*cough* MSVC *cough*) haven't figured out what
year it is and are behind the curve. Provide <inttypes.h> for common
memory models. We can add more if there are odd platforms which don't
have "long long" for 64 bits, too.
H. Peter Anvin [Wed, 30 May 2007 22:21:11 +0000 (22:21 +0000)]
Fix the handling of the \313 code.
\313 indicates a fixed 64-bit address size. It was incorrectly
documented and incorrectly implemented in the assembler, and was
unimplemented in the disassembler.
H. Peter Anvin [Wed, 30 May 2007 22:20:01 +0000 (22:20 +0000)]
Machine-generated \321->\324 corrections
Use a script to find \321's that should be \324's. This is not in any
way guaranteed to be an exhaustive list, however, I have manually verified
that all the items that *were* changed *should* be changed.
Frank Kotler [Wed, 30 May 2007 21:22:33 +0000 (21:22 +0000)]
update "version" to 0.99.02
H. Peter Anvin [Wed, 30 May 2007 20:30:15 +0000 (20:30 +0000)]
Correct the generation of 67 prefixes.
The recent switch from register numbers (with -1 meaning "none") to
register flags (with 0 meaning "none") broke the generation of 67
prefixes, especially in 64-bit mode.
H. Peter Anvin [Wed, 30 May 2007 18:30:18 +0000 (18:30 +0000)]
Update dependencies.
Frank Kotler [Wed, 30 May 2007 16:34:29 +0000 (16:34 +0000)]
update cvs server name in misc/release script
H. Peter Anvin [Wed, 30 May 2007 04:28:50 +0000 (04:28 +0000)]
Avoid magic values; we have more than 124 registers now
There was a magic hard-coded constant that register numbers were between
1 and 124. Well, we have about 150 registers now, and that broke.
H. Peter Anvin [Wed, 30 May 2007 04:27:58 +0000 (04:27 +0000)]
Remove bogus redundant tests
Remove tests that are bogus (they trigger for legitimate instructions.)
The failure cases are okay anyway since they will be trapped by the
REX generation logic.
H. Peter Anvin [Wed, 30 May 2007 03:44:50 +0000 (03:44 +0000)]
More \321 -> \324
More \321 that should be \324...
H. Peter Anvin [Wed, 30 May 2007 03:44:02 +0000 (03:44 +0000)]
Remove bogus check for 64-bitness
Remove a bogus check for 64-bit operands. If appropriate, we will
detect this during REX generation and will bail then. However, there
are other instructions (floating point, MMX, ...) which are legitimately
64 bits in non-64-bit mode.
H. Peter Anvin [Wed, 30 May 2007 03:25:21 +0000 (03:25 +0000)]
Get rid of magic open-coded "register numbers"
Get rid of magic open-coded register numbers. We now keep track of
a total of three different kinds of register numbers: the register
enumeration (regs.h), the x86 register value, and the register flags.
That has all the information we need.
Additionally, do massive revamping of the EA generation code and the
REX generation logic.
H. Peter Anvin [Wed, 30 May 2007 02:48:51 +0000 (02:48 +0000)]
MOV reg64,reg64 takes \324 (64 bit with REX) not \321 (32 bit)
H. Peter Anvin [Wed, 30 May 2007 00:18:26 +0000 (00:18 +0000)]
Rename REGNORM to REG_EA
Rename REGNORM to REG_EA to make the distinction between REG_GPR and
REG_EA clearer.
H. Peter Anvin [Wed, 30 May 2007 00:15:25 +0000 (00:15 +0000)]
More instruction flag surgery
H. Peter Anvin [Wed, 30 May 2007 00:05:00 +0000 (00:05 +0000)]
More cleanup of operand flags/register classes