mirror of
https://github.com/mist-devel/mist-board.git
synced 2026-01-30 13:06:45 +00:00
750 lines
41 KiB
Plaintext
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.
|