Standard macro sets are looked up based on parser and preprocessor keyword
from individual modules.
The "standard" NASM parser macros now reside in the NASM parser, so when
the GAS parser is used with the NASM preprocessor, the NASM-specific macros
are no longer defined.
Object-format specific macros are now individually defined by each object
formatm module. This allows for the object formats to be independent of the
NASM preprocessor module and yields a small optimization benefit as unused
object format macros don't need to be skipped over.
Also add GAS macro equivalents for the Win64 SEH more complex directives [1].
[1] Requested by Brian Gladman <brg@gladman.plus.com>
svn path=/trunk/yasm/; revision=2082
Note: this combination is obviously not supported by any other assembler.
Requested by: Brian Gladman <brg@gladman.plus.com>
svn path=/trunk/yasm/; revision=2076
The FMA instructions swap VEX.vvvv and imm8[7:4] as compared to other AVX
instructions.
Reported by: nasm64developer@users.sf.net
svn path=/trunk/yasm/; revision=2071
A full testcase for NASM mode based on the AVX programming reference is
included. GAS mode should work, but is untested at present.
V-prefix aliases are present for all supported instructions to allow easy
use of the VEX prefix version without significant code modifications.
All comparison and other pseudo-ops are included.
svn path=/trunk/yasm/; revision=2051
and into a new misc_flags field. This doesn't take any more space,
simplifies the code, and allows adding additional conditions like this in
the future.
Found and fixed a bug in CPU field generation (not copying a set variable
in gen_x86_insn.py).
svn path=/trunk/yasm/; revision=2050
Fix up condition code naming and add aliases to match SSE5 added to GNU
binutils as follows:
COMcc:
- swapped uneq, unlt, and unle with neq, nlt, and nle
- added unge, ungt, ne, uge, ugt, nge, ngt, une, ge, and gt aliases
PCOMcc:
- added ne alias (for neq)
svn path=/trunk/yasm/; revision=2049
There are 16 condition codes for COM and 8 condition codes for PCOM/PCOMU.
Noticed by: nasm64developer@users.sf.net
svn path=/trunk/yasm/; revision=2048
Add testcase for this.
Also fix $-prefixed labels to match non-$-prefixed label behavior
(this has been broken for a very long time).
svn path=/trunk/yasm/; revision=2045
- symbol is defined in a TLS section
- symbol is used in a TLS relocation
This is required by the GNU linker, and matches GNU as behavior.
The implementation is not as clean as it perhaps should be, but it does
the job.
Reported by: Nils Weller <nils@gnulinux.nl>
svn path=/trunk/yasm/; revision=2040
To do this, restructure how special symbols are handled between the parser
and object format. Instead of creating special symbols with the right
names, instead have the parser call the object format to see if a match
is found into the special symbols, which are no longer stored in the
symbol table.
svn path=/trunk/yasm/; revision=2035
avoid warnings. This is primarily useful in bin object format output.
db label ; if label is >255, warns.
db label & 0xff ; okay, no warning.
Masks other than full-sized 1s are still not supported:
db label & 0x7f ; too complex error
svn path=/trunk/yasm/; revision=2034
references, REX + 90h opcode is not NOP, but a valid XCHG:
"The x86 architecture commonly uses the XCHG EAX, EAX instruction (opcode
90h) as a one-byte NOP. In 64-bit mode, the processor treats opcode 90h as
a true NOP only if it would exchange rAX with itself. Without this special
handling, the instruction would zero-extend the upper 32 bits of RAX, and
thus it would not be a true nooperation. Opcode 90h can still be used to
exchange rAX and r8 if the appropriate REX prefix is used."
Noticed by: nasm64developer@users.sf.net
svn path=/trunk/yasm/; revision=2031
Without this fix, "xchg eax, r8d" results in 41 90, which is an invalid
opcode.
Reported by: Stefan <SMarF@gmx.de>
svn path=/trunk/yasm/; revision=2029
Formerly:
foo equ 1:2
jmp foo
would result in a far jump. Now, an explicit "far" is required:
jmp far foo
to generate a far jump.
In addition, the direct use of seg:off in immediates and effective
addresses will result in an error; the use of EQU'ed seg:off values
is still legal (and will still result in just the offset). This
behavior is more sane and also matches NASM behavior.
Thus:
foo equ 1:2
mov ax, foo ; okay, just 2
mov ax, [foo] ; okay, just 2
mov ax, 1:2 ; illegal
mov ax, [1:2] ; illegal
svn path=/trunk/yasm/; revision=2028