1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-29 21:01:07 +00:00
Files
mist-devel.mist-board/tools/vasm/history
2014-01-31 12:21:39 +00:00

750 lines
41 KiB
Plaintext

vasm history
=============
- 1.6b (01.05.13)
o Display a warning when instructions are automatically aligned. This might
help to find missing align directives and avoid bugs.
o Display an error when a macro name conflicts with a mnemonic or directive.
o Expression symbols (equates) which are based on label are exported as
an offseted label from the same section as the base.
o m68k: Fixed gas-compatible mnemonics: JB<cc> -> J<cc>.
o m68k: Fixed ColdFire ISA-B optimization "AND.L #$ff/#$ffff,Dn ->
MVZ.B/W Dn,Dn", which always used a D0 source register.
o m68k: Scale factor 8 is allowed for ColdFire chips with an FPU.
o PPC: Fixed relocations, which had been broken since 1.6a.
o x86: Fixed data relocations, which had been broken since 1.6a.
o mot-syntax: A comma in the comment field of an operand-less instruction
had been misinterpreted as an operand separator.
o mot-syntax: Allow labels on the same line as an ENDC/ENDIF directive.
o mot-syntax: Print the source and line number of the corresponding IF
directive, when the ENDC/ENDIF directive is missing.
o std-syntax: Allow labels on the same line as an .endif directive.
o std-syntax: When # is used as the first non-blank character on a line,
then it can still start a comment, even for architectures which define
a different comment character (e.g. ARM, M68k).
o output-tos: Fixed uninitialized relocation pointer, which could lead to
illegal memory accesses.
- 1.6a (02.04.13)
o The vasm core supports structure definitions. A structure name can
either be used as a directive to initialize data, or in expressions
as the structure's size. Its fields are available as local labels to
the global structure name, defining the field offsets.
(Originally contributed by Romain Giot, modified by Frank Wille.)
o The vasm core supports the creation of offsets sections. The contents
of such a section is not included in the output file and their labels
can be referenced as absolute offset symbols.
o Fixed -x option, which didn't display undefined symbols when there had
been other errors in the source.
o m68k: Division optimization (-opt-div, directive opt od) must not try
to optimize signed divisions, except with 1/-1. DIVS rounds towards
zero, while ASR rounds downwards.
o m68k: Fixed immediate extended precision operands, which load "0.0" or
"-0.0".
o m68k: -opt-fconst is enabled by default, except in Devpac and PhxAss mode.
Fixed a bug which prevented optimization of extended precision 0.0 to
single precision.
o PPC: Register symbols are no longer exported into most object formats.
o z80: Forbid operations between different index registers, like ix/iy
pairs and ld ixl,(ix+0) (fixed by Romain Giot).
o z80: Improved detection of indirect operands in parentheses (fixed by
Romain Giot).
o oldstyle-syntax: STRUCT and ENDSTRUCT directives for supporting
structures.
o mot-syntax: Devpac-compatible CARGS directive.
o mot-syntax: New directive OFFSET. Devpac-compatible, but additionally to
Devpac it allows any directive or instruction within such a section.
o output-vobj: Output was broken since 1.6, when relocations based on
the current-pc symbol had been used.
- 1.6 (29.12.12)
o New instruction/operand parser. Can handle instruction availability,
depending on selected cpu-type, and optional operands in common code.
o Now using the faster djb2 hash table algorithm. Tuned hash table sizes
for PPC, M68k and x86. Bigger symbol and macro hash tables.
o Symbol distances from two different sections are supported, when the
second symbol comes from the current section, by using a pc-relative
relocation with an appropriate addend.
o The vasm core supports named arguments of the form "\identifier". It
can be enabled by syntax modules on demand.
o "\@?" can be used in a macro to push the current id below the top item
on the stack.
o "\()" can be used to separate a macro name from the subsequent context.
o Macro and repeat directives in comments could have caused some confusion.
o Support for relocated origin blocks (RORG-blocks) in absolute output,
which assign all labels in this block to a different base address,
although the code is still physically placed at the original address.
o Only produce a listing file when -L option is given. A nolist directive at
the end of the source will not prevent writing of a listing file anymore.
o Do not include internal assembler symbols in the object file.
o m68k: B<cc> *+$80 is now optimized to B<cc>.B as well, because the
instruction will be 2 bytes smaller after that. Fall back to *+$7e
optimization, when we need too many passes due to oscillating instruction
sizes. Usually caused by an alignment directive before the destination label.
o m68k: Optimize CMP.W #0,An to TST.L An (TST.W An was wrong!).
o m68k: New optimization: DIVU/DIVS.L #x,Dn can be optimized into LSR/ASR
when x is a power of 2 and between 2 and 256. Negative values are handled
by appending a NEG.L. DIVU/DIVS.W #1 is supported for ColdFire ISA_B/C by
MVZ.W. DIVS.W #-1 by using NEG.W first. The new option is called -opt-div.
o m68k: New optimization: ANDI.? #-1,<ea> is optimized to TST.? <ea>.
ANDI.L #$ff/$ffff,Dn is optimized to MVZ.B/W Dn,Dn for ColdFire ISA_B/C.
o m68k: New optimizations: ORI #0,<ea> and EORI #0,<ea> are optimized to
TST <ea>. AND #0,<ea> is optimized to CLR <ea>, when allowed.
o m68k: New optimization: LEA 0,An is optimized to SUBA.L An,An.
o PPC: Reworked cpu selection.
o PPC: Reworked operand parser and evaluater. mfdec is now recognized.
o z80: Fixed crashes and internal errors when an expression creates an
illegal relocation.
o z80: Operands in parentheses were not allowed for defining data.
o z80: A '#' prefix selects hexadecimal radix, as used in some assemblers.
o z80: Fixed a bug with using invalid register-pairs in some addressing modes.
o z80: Added the hidden instruction OUT (C),0 (contributed by Romain Giot).
o 6502: Improved detection of indirect addressing modes. (expr)+(expr) and
(expr)+expr are no longer indirect.
o mot-syntax: PhxAss-compatibility mode allows blanks in operands.
o mot-syntax: Ignore AsmOne AUTO directive.
o mot-syntax: Although ignored, load, jumpptr and jumperr should accept
non-constant expressions.
o mot-syntax: Internal symbol REPTN can be used as iteration counter in
the inner repeat loop.
o mot-syntax: New directives: IFB and IFNB to check whether a macro argument
is blank or non-blank.
o oldstyle-syntax: Enabled support for named macro arguments.
o oldstyle-syntax: Fixed detection of endmac, endmacro, endrep and endrepeat.
o oldstyle-syntax: Conditional directives also allow non-constant expressions,
like label-differences. But the expression has to evaluate in the first
assembler pass.
o oldstyle-syntax: assert directive, displays an error message when the
expression is false.
o oldstyle-syntax: Allow access to any local symbol in the source by using
the syntax "global_name.local_name". The '.' is otherwise forbidden in
the middle of a label now.
o oldstyle-syntax: New directives rorg, rend, phase, dephase for a relocated
label origin.
o oldstyle-syntax: print a warning when alignment is too big.
o oldstyle-syntax: LIST and NOLIST directives to control listing file output.
o oldstyle-syntax: INCBIN got two optional arguments to skip bytes at the
beginning of a file and to restrict the size of the included data
(contributed by Romain Giot).
o oldstyle-syntax: New directive abyte, which adds a constant offset to
each byte written (contributed by Romain Giot).
o oldstyle-syntax: New directive ifused (contributed by Romain Giot).
o std-syntax: Implemented .abort, .err and .fail directives.
o std-syntax: Allow non-constant expressions for conditional directives,
with the same restrictions as in the other syntax modules.
o std-syntax: print a warning when alignment is too big.
o std-syntax: .list and .nolist directives to control listing file output.
o std-syntax: Enabled support for named macro arguments.
o std-syntax: New directives: .ifb and .ifnb to check whether a macro
argument is blank or non-blank.
- 1.5c (10.12.11)
o Define a __VASM symbol to identify the assembler.
o Reworked sources to use typedefs from stdint.h where appropriate.
o Fixed vobjdump to regard all information from an object as unsigned,
except symbol values and reloc addends and masks.
o m68k: Assign the current cpu/fpu/mmu type to the __VASM symbol.
o m68k: Define the __G2 symbol in Devpac compatibility mode.
o ARM: Fixed U-bit handling and sign in load/store addressing modes
dealing with labels (which are translated into PC-relative).
o ARM: The I-bit in halfword transfers must be flipped.
o z80: Fixed error message when 8-bit data is out of range (-128 .. 255).
o z80: Allow the offset to be an external symbol in ld (ix+offset).
o z80: Accept JP HL besides JP (HL), as most (?) assemblers do for
convenience.
o std-syntax: Section ".text","acrwx" is default when no .section or
.org directive is present.
o oldstyle-syntax: Section ".text","acrwx" is default when no SECTION or
ORG directive is present.
o oldstyle-syntax: A section directive without attribute defaults to
"acrwx".
o oldstyle-syntax: New option -autoexp to automatically export all
non-local symbols.
- 1.5b (05.08.11)
o m68k: Fixed -no-opt option.
o m68k: Fixed the (hopefully) last possibility for oscillating branch
optimizations. Example: bra lab; bra lab; lab:
o x86: Enabled experimental 64-bit support. The new option -m64 allows the
usage of 64-bit instructions. New directive .code64.
o 6502: Fixed ASL, ROR and ROL with addressing mode ABS,X (by Mauricio
M. Lucero).
o 6502,z80: Support /256 %256 and &255 operations with labels and generate
the appropriate relocations (Dominic Morris).
o z80: Bad relocations are now flagged by the correct error message.
o elf-output: Support for ELF64 and x86_64 relocations.
- 1.5a (01.04.11)
o Fixed -nocase option to make it no longer modify external symbol names,
which then broke linking.
o Made IfDef and IfNotDef directives work with local symbols.
o Additionally to the standard \@ to insert a unique ID within a macro the
symbols \@! and \@@ are supported to put the current ID onto the stack or
pull the last ID from the stack.
o PPC: Fixed detection of missing and extra operands.
o m68k: FPU register names may be used for symbols, as long as no FPU code
generation was enabled.
o m68k: Fixed a branch optimization bug, which occurs when the effect of
all translations is nullified, so that no label changes its address in
one pass.
o oldstyle-syntax: Fixed pc-symbol ('*') assignments. "* = <addr>" didn't
work in the first column.
o mot-syntax: Do not crash on PRINTT without operand, but just print
a newline.
o mot-syntax: Dots ('.') are allowed everywhere in the label, not only
at the beginning, when either the -devpac option or the new -ldots
option was specified.
o mot-syntax: Any local symbol in the source can be referenced using the
global_name\local_name syntax, as in PhxAss.
o mot-syntax: When OUTPUT is used with ".name" then it is not only appended
to the output name, but it also replaces a possible extension in it
(Devpac compatibility).
o mot-syntax: Option -localu makes local symbols start with an underscore
instead of a dot (from Devpac).
o output-vobj: A file without sections no longer causes an internal error.
- 1.5 (01.12.10)
o A "\\" inside a macro has to be replaced by "\" when the assembler is
in a mode without escape-code handling (e.g. Devpac-compatibility).
o When the syntax module supports CARG, then \., \+ and \- are accepted
to select a macro parameter with the index of the CARG-symbol. \+ will
post-increment CARG and \- post-decrement it (PhxAss compatibility).
o Space objects are allowed to use a relocation as fill pattern. Enhanced
all output modules to support space-relocations.
o Immediately close input files, after reading them in. So they are
available for modification before the first assembler pass starts.
o In case of an error or warning the respective source text line is now
printed below the message.
o Print a short report about sections and their size, when successfully
finishing assembly in verbose mode.
o m68k: Fixed a crash when using the ColdFire SATS instruction with
optimization enabled.
o m68k: Define symbols __CPU, __FPU and __MMU in PhxAss-compatibility mode,
according to the current cpu setting.
o m68k: Support Devpac optimizations OPT o3 - o12. Generic vasm
optimizations are no longer active in Devpac-compatibility mode. They
can be controlled with the new "OPT og" directive.
o m68k: Support optimizations which result in multiple instructions in a
clean way. Fixed the "LEA (d32,An),Am" and "Bcc out of range" hacks to
make use of it.
o m68k: New optimization: <op>.L #x,An is optimized to <op>.W #x,An when
x fits into a word. This mainly affects CMP instructions, as MOVE, ADD
and SUB were already handled in previous versions.
o m68k: New optimization: LEA (d,An),An is optimized to ADDQ/SUBQ #d,An.
o m68k: New optimization: ASL #1 is optimized to ADD and ASL #2
(byte/word only) into two ADDs. LSL will also be optimized, when the
new option -opt-lsl is given.
o m68k: New optimization: MULU/MULS.L #x,Dn can be optimized into LSL/ASL
when x is a power of 2 and between 0 and 256. Negative values are handled
by appending a NEG.L. MULU.W is supported for ColdFire ISA_B/C by MVZ.W.
MULS.W by using EXT.L first. The new option is called -opt-mul.
o m68k: New optimization: MOVEM with two registers is translated
into two separate MOVE instructions. Requires -opt-movem option, as long
as not only address registers are loaded.
o m68k: New optimization under -opt-fconst: FDIV #m,FPn is optimized to
FMUL #1/m,FPn when m is a power of 2 (i.e. the mantissa is zero).
o m68k: New optimization: LINK An,#0 is optimized to PEA (An) and
MOVE.L A7,An.
o m68k: New ColdFire optimization: MVZ/MVS #x,Dn to MOVEQ #x,Dn.
o m68k: The new optimization flag -opt-speed makes vasm optimize for
speed, even if this would increase the code size (Example: asl.l #2,Dn ->
add Dn,Dn + add Dn,Dn for 68000-68040).
o m68k: Bugfix: MOVEM #list,<ea> and MOVEM <ea>,#list were never optimized.
o m68k: MOVE SR/CCR instructions were not recognized for ColdFire.
o m68k: ColdFire ISA_B allows #<xxx>,(d16,An) for MOVE.B and MOVE.W.
o m68k: MOVEC should not warn about a correct .L operation size.
o m68k: MOV3Q is only available for ColdFire ISA_B and ISA_C. Also don't
optimize to MOV3Q for ISA_A.
o m68k: The OPT directive supports vasm-specific extensions for optimizations
not known to Devpac (-opt-movem/clr/pea/st/lsl/mul/fconst/brajmp/speed).
o m68k: OPT p=<type> has to support multiple types, separated by a '/'.
o m68k: New directive INITNEAR (from PhxAss). For simplicity it will
always generate a reference to _LinkerDB.
o m68k: Fixed the CPU directives to recognize ColdFire v2, v3, v4, v4e and
made it case-insensitive.
o m68k: Made -opt-fconst work with FMOVE.D #0,FPn.
o m68k: PC-relative optimization didn't work for "TST label" and cpu>=68020.
o m68k: New option -showcrit. Similar to -showopt, but only shows
optimizations which may have side effects (refer to the documentation).
o m68k: Bad extension warning (2006) has become an error.
o z80: Implemented a lo/hi-byte operator similar to 6502.
o z80: Relative jumps over a distance of more than 128 bytes must cause an
error message.
o mot-syntax: Supports CARG.
o mot-syntax: IF directives support the current-pc symbol (*).
o mot-syntax: Support REM and EREM from AsmOne, to skip everything between
those two directives.
o mot-syntax: Up to 36 macro arguments in PhxAss-compatibility mode.
o mot-syntax: Support CODE_C, DATA_C, BSS_C (and the *_F-variants).
o oldstyle-syntax: EQU and SET should be case-insensitive, like the rest
of the directives.
o oldstyle-syntax: Fixed ORG for the case when '$' is used as a hex-prefix
and the current-pc-symbol at the same time (Z80).
o oldstyle-syntax: Also support local symbols starting with a '.'.
o hunk-output: Fixed -databss option, which didn't recognize DCB/BLK
directives with a non-zero fill pattern.
- 1.4f (02.08.10)
o The parser accepts "\n", "\r\n", "\n\r" and a single "\r" as line-endings.
o Avoid infinite loop when a source line is too long.
o Constant block directives (e.g. DCB in mot-syntax) allow any kind of
expression for the fill-value now.
o Fixed constant block directives with a size > 8 bytes (e.g. DCB.X).
o Quit with an error when a section needs too many passes to resolve.
This happens when the user does something stupid like
start: .space end-start
end:
o Ignore rest of the line after an end-macro or end-repetition directive.
o Support for the Seka/AsmOne ~ binary-operator, which is a synonym for
^ (exclusive-or).
o m68k: Also accept ([An,bd]...) instead of ([bd,An]...) for Devpac/AsmOne
compatibility.
o m68k: Recognize linea, line_a, linef and line_f mnemonics.
o m68k: Make BASEREG directive only take effect when a program label
was referenced together with a register (i.e. not with (4,A5)).
o mot-syntax: Allow up to 35 macro parameters in Devpac compatibility mode.
o mot-syntax: Accept macro-names starting with a dot. But even then they
are still of global scope.
o mot-syntax: RORG directive.
o mot-syntax: Support for PRINTT and PRINTV from AsmOne and ECHO from PhxAss.
o mot-syntax: DR directive from AsmOne to build PC-relative data tables.
o mot-syntax: New directives: ODD, PAGE, NOPAGE, IMAGE (same as INCBIN).
o mot-syntax: Directives ENTRY, EXTRN and GLOBAL are recognized and are
identical to XDEF.
o mot-syntax: Some directives without any function just for compatbility:
JUMPERR, MASK2, LLEN, SPC.
- 1.4e (09.06.10)
o m68k: Fixed some problems with fmovem when using register list symbols.
o m68k: fsmove and fdmove were missing the coprocessor ID 1 in their opcodes.
o m68k: fsmove/fsmove FPn,FPm addressing mode was missing.
o m68k: Fixed moves <ea>,Rn.
o std-syntax: n$ is recognized as local symbol.
- 1.4d (13.12.09)
o A macro parameter containing blanks or commas may be enclosed between
< and > to be treated as a single parameter (Devpac).
o Support for \?n (length of parameter n) and \# (number of parameters)
in macros (Devpac).
o No longer forget macro parameters in a repetition-block within a macro.
o Empty strings in a data definition directive (e.g. .byte "") are
ignored instead of generating a 0-byte.
o m68k: Also accept swapped displacement and base-register in indexed
addressing modes, e.g.: (An,d,Rn). Devpac/AsmOne compatibility.
o m68k: Fixed "pmove mmusr" (68030).
o m68k: BRA.B *+2 is translated into a NOP when no optimization is allowed.
o mot-syntax: The blank-separated comment field after DC.B "string" was not
recognized (needed an explicit comment-character).
o mot-syntax: Offset directives RS, SO and FO are no longer limited to
constant expressions.
o mot-syntax: Conditional directives also allow non-constant expressions,
like label-differences. But the expression has to evaluate in the first
assembler pass.
o mot-syntax: Predefines offsets symbols __RS, __SO and __FO with value 0
in -devpac mode.
o output-tos: Section alignment must be 16 bits, not 32. With another two
zero-bytes for 32-bit alignment the OS couldn't see any relocations.
- 1.4c (05.11.09)
o Changed operator priorities from C-like to assembler-like. This means
that shifts and bitwise operators have a higher priority now (refer to
the documentation for details).
o Comparison operators and logical and/or operators now return -1 for True,
instead of 1. This is more common for assemblers.
o Recognize '=' and '<>' operators for equality and inequality (additional
to '==' and '!=').
o Deletes the output file when there were any errors.
o -nocase option could run into an internal error when there were escape
characters ('\') in a string (since 1.4b).
o m68k: Accept addressing mode syntax (Rn,d) and treat as (d,Rn) for
compatibility with other assemblers.
o m68k: Fixed several "displacement out of range" errors.
- (bd,ZAn,Rn) when bd didn't fit into 16 bits and has no size extension.
- ([bd.l],Rn,od) when od has no size extension and doesn't fit into 16 bits.
- (d,PC,Rn) when d is absolute, has no size, and doesn't fit into 8 bits.
o mot-syntax: With -phxass option, macro names are case-insensitive.
o hunk-output: Report undefined symbols in hunkexe-mode as such, instead of
just printing "unsupported reloc".
o output-vobj: vasm-internal symbols must not be ignored in the output as
relocations refering to the current-pc-symbol depend on them.
- 1.4b (14.10.09)
o Fixed IfNotDef directive in all syntax modules, which shouldn't regard an
undefined but referenced symbol as defined.
o """" was not correctly recognized in macro arguments.
o Fixed -nocase, which also converted string constants to lower case.
o Includes Amiga version string ($VER).
o m68k: The addressing modes (d16,An) and (d8,An,Rn) will no longer be
translated into a 32-bit displacement for 68020+, when it contains an
undefined symbol.
o m68k: Prevent operands from being optimized or translated when the
displacement (also outer-displacement) has a size-extension attached.
o m68k: -opt-fconst optimization was not recognized when vasmm68k is run
on a little-endian host.
o 6502: Added all illegal opcodes and additional C64-DTV instructions. They
can be enabled with the new -illegal and -dtv options.
o mot-syntax: Blanks in the operand field are allowed, when the new
-spaces option is specified.
o std-syntax: .lcomm directive didn't align the data object!
o hunk-output: Option -Fhunkexe generates an executable output file.
- 1.4a (29.06.09)
o New CPU backend for Z80, 8080, GBZ80, 64180, RCM2/3/4k, named "z80",
contributed by Dominic Morris.
o Parser allows a constant like '''' to be recognized as ' and """" as ".
o Recognize strings in data definitions with a length equal to the data
width as a constant, which can be used in more complex operations
(e.g. .byte "A"+1).
o Syntax modules may define a default section name, which is used when
the programmer failed to open a section before the first code.
Currently only the "mot" module uses it.
o Support for macro argument \0 added, which is set to the macro's first
qualifier (mnemonic extension), when given.
o m68k: Do not optimize move.w #0,An to suba.w An,An, but to suba.l An,An.
The old method would only clear the LSW of An!
o m68k: Fixed MOVEC and MOVE USP which ceased working since V1.4.
o m68k: pmove.q (68030/68851) was not recognized.
o m68k: bftst PC-addressing modes were not allowed.
o m68k: MACHINE mc68xxx supported for Devpac compatibility.
o m68k: Devpac3 options: OPT p=<type> to select the cpu, autopc, case,
chkpc, debug, symtab, type, warn, xdebug.
o m68k: Some options like Devpac type checking (OPT t) were lost between
sections.
o m68k: Supports "ASL/ASR/LSL/LSR/ROL/ROR/ROXL/ROXR Dn" for Devpac
compatibility.
o m68k: TST.B An shouldn't be allowed.
o m68k: ColdFire TPF (same as TRAPF).
o m68k: cmp.w/l <ea>,An for ColdFire ISA-B was missing.
o oldstyle-syntax: New directives (mostly from std) for Z80 and z80asm
compatibility: section, binary, defs, defp, defl, defc, xdef, xref,
lib, xlib, global, extern, local, weak, ascii, asciiz, string.
o oldstyle-syntax: INCBIN has to search the same include paths as INCLUDE
does.
o mot-syntax: Blanks in the operand field are no longer allowed (major
modification!). This has the advantage to regard everything separated
by the operand field with a blank as comment.
o mot-syntax: -devpac option automatically aligns all word- and long-sized
data.
o mot-syntax: INCDIR allows multiple include paths, separated by comma.
o mot-syntax: INCBIN has to search the same include paths as INCLUDE does.
o mot-syntax: New directive: OUTPUT (Devpac), LIST, NOLIST, PLEN.
o std-syntax: .incbin directive.
o hunk-output: 8- and 16-bit absolute relocations are supported.
- 1.4 (31.05.09)
o Improved expression evaluation. More complex differences between labels
are allowed, e.g. (lab1+x)-(lab2-y) instead of just lab1-lab2.
o Modified CPU options (cpu type, optimization setttings, etc.) were lost
when the source switches between different sections. Make sure to
remember previous option settings when continuing with another section.
o Error output module avoids printing the same error several times for the
same source line (which happens due to multiple assembler passes).
o m68k: Improved ColdFire support. All known ColdFire models are recognized
with their individual instruction set. Scale factor 8 is not allowed,
neither is .W for index registers.
o m68k: Implemented ColdFire ISA_A+/ISA_B/ISA_C and FPU instructions.
MOVEC understands all ColdFire registers.
o m68k: Implemented ColdFire MAC and EMAC instructions (with their strange
syntax). vasm uses a separate operand for the scale factor << or >>,
like GNU-as does, which seems to be prefered also by Freescale in their
MAC example sources.
o m68k: MOVE.L #x,<ea> is optimized into MOV3Q #x,<ea> for ColdFire
ISA_B and ISA_C, when x is -1 or between 1 and 7.
o m68k: AND/EOR/OR #x,SR are accepted (additionally to ANDI/EORI/ORI).
o m68k: New option -opt-allbra. When specified the assembler will try to
optimize all branch instructions, no matter if they have a size-extension
or not. This option is automatically enabled in -phxass mode.
o m68k: All 68k-specific directives are case-insensitive now (near, far,
opt, reg, fpu, machine, equr, etc.).
o m68k: New directives: basereg and endb (from AsmOne/AsmPro).
o m68k: Fixed equr and fequr directives.
o m68k: Do not optimize JMP/JSR (label,PC) in -phxass mode for compatibility.
o mot-syntax: New directive COMMENT. Usually ignores the operand, except
when it matches "HEAD=", in which case the following expression is passed
as TOS-flags into the TOS output module.
o mot-syntax: New directive MEXIT to leave a macro in the middle.
o mot-syntax: New directive FAIL to break assembly with a fatal error.
- 1.3d (17.01.09)
o Space objects (DCB, .space, etc.) may be used with label-differences, as
long as both labels are known.
o The assembler ensures that a label, which is defined on the same line
as an instruction, data or space atom, receives the same alignment
restrictions.
o The line number of the parent source text was sometimes wrong, when the
error occured in an included file or a macro.
o New output module for TOS executables, available via option -Ftos.
o New option -w hides all warnings.
o New option -nowarn=<n> disables a single warning.
o New option -pic (position independant code) generates an error on
every relocation being required.
o New option -noesc makes vasm treat the escape character '\' as any
other character.
o m68k: Largely improved parsing speed! Expensive 96-bit calculations will
only be done for floating point expressions now. Assembly performance of
vasmm68k is speed up by a factor between 3 and 30!
o m68k: Operands will never be optimized or translated when the base-symbol
is still undefined.
o m68k: Fixed extended precision float in data operands.
o m68k: Improved syntax checking in operands (e.g. DC.L 1.23 is no longer
recognized as DC.L 1).
o m68k: Fixed parsing of 020+ memory indirect addressing mode ([label],Rn).
o m68k: Translate (An) into 0(An) for MOVEP, but warn about it.
o m68k: Branches with a size extension will no longer be optimized or
translated but keep their size, even when that leads to an error.
o m68k: No longer print an error, when the symbol of a PC-relative
addressing mode or branch-destination is not in the same section.
Create a relocation instead and pass the problem to the linker, who
knows better about the requirements of the target file format.
o m68k: New option -opt-brajmp enables translation of branch instructions
into absolute jumps, whenever the branch-destination is in a different
section. Removed the warning when this happens.
o m68k: MOVEQ permits immediate values from 128 to 255 again, but will
print a warning.
o m68k: label.w is only translated into label.l when it is a known
program label. The output module will do further checks.
o m68k: Devpac-compatible OPT directive. Together with the -phxass option
OPT will be parsed as a PhxAss-compatible OPT directive.
o m68k: Option -opt-fconst was broken since V1.2!
o m68k: New option -showopt prints all optimizations vasm is doing.
o m68k: New option -devpac sets initial options to be Devpac compatible.
o mot-syntax: DC.B directive allows to use ' in the same way as " for
string delimiters (previously ' needed the -phxass option).
o mot-syntax: INCBIN accepts empty files without error.
o mot-syntax: Option -phxass defines the symbol _PHXASS_ (as the real
PhxAss does).
o mot-syntax: MACRO directive always ignores the operand field, when the
macro-name is given in the label field (Devpac-compatibility).
o oldstyle-syntax: INCBIN and MDAT accept empty files without error.
o vobj-output: Removed -nosym functionality from 1.3c again. VOBJ doesn't
allow stripping of symbols by design (relocations depend on them).
- 1.3c (08.12.08)
o New output module a.out, available via option -Faout.
o Output module cleanup.
o Included tool "vobjdump", to view the contents (sections, symbols and
relocations) of a VOBJ file.
o Support for weak symbols in ELF and a.out output modules.
o New option -unnamed-sections has the effect to ignore section names, so
that sections can only be distinguished by their attributes.
o New option -ignore-mult-inc ignores a file completely, when it is
included for the second time.
o New option -maxerrors=<n> defines the maximum number of errors to
display before assembly is aborted.
o m68k: Addend in pc-relative relocations was always zero for branches.
o m68k: Fixed calculations with current-PC-symbol (*) in PhxAss-compatibility
mode once again and hopefully for the last time.
o m68k: New optimization: LEA (d,Am),An is translated into a MOVEA/ADDA.L
combination for 68000, when d doesn't fit into 16 bits.
o m68k: Fixed 8-bit relative references (EXT_RELREF8).
o mot-syntax: New directive "text" (same as code).
o mot-syntax: "section <name>" will use <name> for the section type as well,
for compatibility reasons (e.g. Atari assemblers). In -phxass mode it will
still start a code section named <name>. Valid section types are now:
code, text, data and bss.
o std-syntax: New directives: weak, local.
o std-syntax: Support for local symbols of the form ".nnn", where nnn stands
for an arbitrary number of digits.
o vobj-output: New option -nosym, to discard local symbols.
o vobj-output: Fixed bug with bss section. All sections after a bss appeared
as corrupted.
- 1.3b (23.10.08)
o New relocations, from vlink 0.12+, to keep the VOBJ format compatible.
o PPC: Support for @local, @plt, @sectoff, @globdat attributes and their
appropriate relocation types.
- 1.3a (05.10.08)
o Fixed a memory hole when parsing constant expressions.
o Fixed SET directives, which could contain the wrong value when
reassigning a different label to the same symbol with SET.
o std-syntax: .ident directive is accepted but may not yet work as expected.
o m68k: Improved support for gcc-generated output. Added opcodes for
jbeq, ..., jbvs, jbra, jbsr and movm. Fixed -elfreg to recognize %sp
and %fp.
- 1.3 (24.09.08)
o Assembler-core supports repeat-directives. May be nested.
So vasm is a full-featured assembler now!
o mot-syntax: Added REPT and ENDR directives.
o mot-syntax: Added LOAD and JUMPPTR as no-ops. Directives are accepted,
but will show a warning and have no effect.
o mot-syntax: No longer automatically creates a CODE section.
o mot-syntax: Fixed debug directive to use the correct line number.
o std-syntax: Added .rept and .endr directives.
o parse_constexpr() displayed the wrong error message when the expression
was not constant (e.g. caused by "DCB nonconstsym").
o m68k: Option -rangewarnings changes some out of range errors into warnings.
o m68k: Moved a part of the -phxass option functionality from mot-syntax
into the CPU module: Increase the value of the current-PC-symbol by
2 bytes for instructions which are larger than 2 bytes (yes, it's sick,
but PhxAss did it this way).
o m68k: Out of range error (1026) also works for signed immediate values
now (e.g. MOVEQ).
o 6502: Generate correct relocations for hi/lo-byte modifiers ('<', '>').
o 6502: '<' and '>' are real unary operators now and can be used in
complex expressions.
o oldstyle-syntax: macro, endm, rept, endr, include, incdir and incbin
(mdat) directives.
o oldstyle-syntax: conditional assembly. Directives: if, ifdef, ifndef,
ifeq, ifne, ifgt, ifge, iflt, ifle, else, elseif, endif, endc, el, ei.
o oldstyle-syntax: Added rept and endr directives.
o oldstyle-syntax: "n#" is allowed as a constant prefix, where n defines
an arbitrary base between 2 and 9.
o oldstyle-syntax: Local label of the form "n$" are supported.
o bin-output: support for multiple org-sections. Gaps are filled with zeros.
Overlapping sections are detected and refused.
o bin-output: option -cbm-prg writes a Commodore PRG header (two bytes for
load-address) in front of the output file.
o bin-output: undefined symbols are not allowed.
o listing file support (oil).
o oil: Lots of changes and enhancements.
- 1.2c (24.08.07)
o Defining initialized data in an uninitialized bss-type section
causes a warning for each line.
o It is no longer allowed to terminate your data definition with a ','.
This means that another data item must follow!
o m68k: -no-opt should not disable operand-transformations which are
required to make a displacement fit into an operand. This bug made
($1234,a0,d0) fail for "-m68020 -no-opt", because the operand was
not transformed into a 020 extended adressing mode anymore.
o Included support for Win32/MSVC++ compiler by Mikael Kalms.
o Fixed conversion for absolute paths and multiple "./" in a path.
- 1.2b (07.06.07)
o Option -x causes an error message, when an undefined symbol is referenced.
This is especially helpful when generating binary-output, where there is
no linker-support for missing symbols.
o For compatibility '//' is also recognized as a modulo operator besides '%'.
o m68k: btst instruction didn't work with immediate or PC-relative
addressing modes.
o m68k: New option -m68020up, to make vasm accept all instructions of
68020, 68030, 68040 and 68060 (note that PFLUSHA is dangerous!).
o ARM: Create mapping symbols ($a, $t, $d) as required by ARM ELF ABI.
o ARM: New option -thumb puts the backend into Thumb-mode at the beginning
of the source (no .thumb directive required).
o ARM: Fixed ARM instructions MCR, MRC and Thumb instruction MOV.
o ARM: Switching between Thumb and ARM mode with .arm and .thumb directives
didn't really work. Fixed.
o ARM: [Rn,#-<expr>] and #-<expr> was not recognized.
o 6502: Allow -128 to -1 too for 8-bit values.
o elf-output: use .rel sections instead of .rela for ARM-relocations, to
make linking with GNU-tools easier.
o C16x: Several bug fixes.
o mot-syntax: Colon (:) is always allowed behind labels, even with EQU.
o mot-syntax: org directive.
o std-syntax: org directive.
- 1.2a (25.09.06)
o Fixed a bug when reading CR/LF-sources on a MsDos/Windows/Atari system.
o There is no cpu-dependant default section alignment anymore. All sections
start with an alignment of 1, which is increased when required. This
fixes problems with DWARF sections!
o mot-syntax: =, set, equ, rs, so, fo now work with local labels too.
o PPC: Supports 64-bit data (e.g. .quad directive).
o x86: Prevent forever oscillating optimizations for jmp-instructions
in conjunction with an alignment directive.
o m68k: New option -conv-brackets converts brackets ('[' and ']') in an
operand into parentheses ('(' and ')') as long as the CPU is 68000
or 68010. This is a compatibility option for some old assemblers.
o m68k: cmp and tst must not be optimized to PC-relative for 68000/010.
o m68k: cmp #n,d(PC) (020+) miscalculated the offset two bytes too far.
o m68k: fpu directive may be used without argument (default id is 1).
o m68k: Added missing FPU instructions frestore and fsave.
o ARM: Fixed a bug with immediate operands, which could not be represented
as a simple rotated value.
o ARM: Coprocessor-Id symbols p0-p15 and register symbols c0-c15.
- 1.2 (05.06.06)
o First test version of a new backend: 80x86/IA32 (named "x86").
o Internal improvements of the instruction parser.
o Empty input files are no longer rejected.
o Redefined labels no longer cause an infinite loop of the assembler.
o Assembler core supports local symbols (identifying them is syntax-module
dependant). Currently the only syntax module supporting local symbols
is "mot" ("name$" and ".name" style).
o Assembler core supports include files.
o Assembler core supports macros.
o Option -D allows to define symbols from the command line.
o Option -I defines include paths, which are searched in the order of
occurence on the command line.
o Instructions are case-insensitive.
o Memory optimizations. Free more data that is used only temporary.
o Detailed error messages also show the file names and the names and lines
where the failed source is called from.
o PPC: References to small-data offsets > 32767 no longer produce an
'out of range' error.
o m68k: References to small-data offsets > 32767 no longer produce an
'out of range' error.
o m68k: Instructions without size-suffix get a default suffix assigned.
Current the 64-bit instructions (Sledgehammer) are disabled.
o m68k: Fixed bug with optimizing of "suba.w #32768,An".
o m68k: Float constants were only recognized when including a decimal
point. Now it depends on FPU addressing mode and opcode extension.
Extensions 's','d','x' and 'p' will allways expect a floating point
constant, when the radix is 10 (i.e. no base-prefix given).
o m68k: Fixed operand parser, which had problems with expressions in
parentheses, like: "-(expression)" and "(expression1)+expression2(An...)".
o mot-syntax: macro, endm, include and incdir directives.
o mot-syntax: conditional assembly. Directives: if, ifc, ifnc, ifd, ifnd,
ifeq, ifne, ifgt, ifge, iflt, ifle, else, elseif, endif, endc.
o mot-syntax: directives are case-insensitive.
o mot-syntax: -phxass option extended to ignore operands on some directives,
to allow using ' around strings, etc.
o mot-syntax: xdef,xref,public allow multiple symbols.
o mot-syntax: incbin directive, to insert binary files.
o mot-syntax: structure- and frame-offset directives: rsreset, rsset, rs,
clrso, setso, so, clrfo, setfo, fo.
o mot-syntax: blk.w/blk.l were not correctly working, because vasm core
only supported a single byte fill value. Extended it to up to 8 bytes!
o mot-syntax: section directive accepts "_c", "_f" and "_p" as an extension
to the section-type, identifying sections to be loaded to Chip- or Fast-
RAM. The third memory-type argument is illegal in this case.
o std-syntax: .p2align
o std-syntax: behaviour of .align is cpu-depandant. Aligns to n bytes for
x86 and to a power of 2 for most other CPUs.
o std-syntax: .macro and .endm, .include and .incdir directives.
o std-syntax: conditional assembly. Directives: .if, .ifdef, .ifndef,
.ifeq, .ifne, .ifgt, .ifge, .iflt, .ifle, .else, .endif.
o elf-output: .note sections are supported. Any section which starts
with ".note" gets the section type SHT_NOTE.
o elf-output: Option -nosym strips all local symbols from the output file.
o hunk-output: Section attributes 'C' and 'F' are recognized and converted
into the approriate CHIP and FAST memory flag in the hunk-type.
- 1.1e (26.06.05)
o Parser could not handle a comment-character in the operand field for
mnemonics without any operand.
o PPC: Included MorphOS-DREL (@drel) and OS4-BREL (@brel) relocation types.
o m68k: Operands like ([d,An]) erroneously got the PostIndex-flag set
in the format-word, which made the instruction illegal for a 68020+ CPU.
- 1.1d (05.03.05)
o Hunk/EHF output module accessed already deallocated memory for
external references. Fixed.
o std-syntax: .balign directives, aligns to an address dididable by
the specified value.
o std-syntax: .stabs, .stabn and .stabd directives for stab debugging
support. Currently only the ELF output module can be used with stabs.
o std-syntax: Fixed .space directive which ignored the fill-value.
o std-syntax: PPC symbols are allowed to contain the '$' character.
o PPC: Fixed a crash when a register-indirect addressing mode was not
correctly recognized, e.g. in "symbol@l+0(r3)".
o m68k: Modified floating point conversion algorithm to improve precision.
o m68k: No longer optimize (label,An) to (label.l,An) (basedispl. mode)
when An is the small data base register.
o c16x: Fixed memory bug in .sfr parsing.
- 1.1c (18.12.04)
o m68k: New option -opt-fconst allows converting of floating point
constants to a smaller size, as long as no precision is lost.
o m68k: Implemented missing conversion of floating point constants
to extended precision.
o -Fhunk option allows multiple sections with the same name now, as
long as their attributes differ.
o Supports PPCEABI_SDA2 relocs in EHF output format, which is
generated when assembling WarpOS-ABI sources.
o Improved error message output for AmigaOS, which doesn't really
differentiate between stdout and stderr.