]> granicus.if.org Git - yasm/commit
Fix #69 by making the NASM preproc and parser use the yasm built-in
authorPeter Johnson <peter@tortall.net>
Fri, 24 Feb 2006 04:29:39 +0000 (04:29 -0000)
committerPeter Johnson <peter@tortall.net>
Fri, 24 Feb 2006 04:29:39 +0000 (04:29 -0000)
commitf908f39d0fd91ed6d93aa878781d4fa26d33b23e
tree99926d622c2df34a87e055fa2f1b28e69cac2700
parentb6f90d81917345a1d761d9ea2a7a44c634d4da05
Fix #69 by making the NASM preproc and parser use the yasm built-in
alignment bytecode rather than just times'ing a NOP.  This generates better
NOP code.

The new align only triggers when the NASM align directive is used unadorned
or with nop as the parameter (e.g. "align 16" or "align 16, nop").  Other
uses, including all uses of balign, maintain their old NASM behavior.  This
is somewhat useful if you still want a string of NOPs rather than more
optimized instruction patterns: just use "balign X, nop" rather than
"align X".  The new align also follows the GAS behavior of increasing the
section's alignment to be the specified alignment (if not already larger).

While I was in here, I found and fixed a bug in 16-bit alignment generation
(typo).  I also changed the x86 32-bit code alignment fill pattern per
suggestions in the AMD x86 code optimization manual.

* nasm-bison.y: Implement a new [align] directive that can take a single
parameter (the alignment) and generate a nop-generating align bytecode.
* standard.mac: Change align macro to generate [align] if the second
macro parameter is nonexistent or "nop".
* x86arch.c (x86_get_fill): Update 32-bit fill pattern and fix bug in 16-bit
fill pattern.

svn path=/trunk/yasm/; revision=1389
13 files changed:
modules/arch/x86/tests/gas32/align32.hex
modules/arch/x86/x86arch.c
modules/objfmts/coff/tests/x86id.hex
modules/objfmts/elf/tests/elf-x86id.hex
modules/parsers/nasm/nasm-bison.y
modules/parsers/nasm/tests/Makefile.inc
modules/parsers/nasm/tests/alignnop16.asm [new file with mode: 0644]
modules/parsers/nasm/tests/alignnop16.errwarn [new file with mode: 0644]
modules/parsers/nasm/tests/alignnop16.hex [new file with mode: 0644]
modules/parsers/nasm/tests/alignnop32.asm [new file with mode: 0644]
modules/parsers/nasm/tests/alignnop32.errwarn [new file with mode: 0644]
modules/parsers/nasm/tests/alignnop32.hex [new file with mode: 0644]
modules/preprocs/nasm/standard.mac