The following changes have been made to Llama in recent versions.
Llama 2.69 improvements:
The code generation now emits "sub #N,r0" instead of "add #-N,r0" when
N is a small integer constant and when the results of the carry bit are
not used later. (And similarly "add #N,r0" can be used instead of "sub #-N,r0".)
This means that a long (48 bit) instruction can be replaced with a 16 or
32 bit instruction.
The optimizer now understands that "mvr" and some forms of "st_io" are
equivalent, and will switch between them when this results in better code.
The mvr instruction no longer accepts xybase, xyrange, and xyctl as destination
registers.
Llama 2.70 improvements:
Optimizer code would write the wrong instruction of a pair into the
instruction stream. For example, it would try to turn "mvr" into "st_io",
but accidentally write "mvr" instead and then next time through it would
try to repeat the same thing, resulting in an infinite loop.
Llama 2.71 improvements:
Added "-chip N" option to specify alpha, oz, or aries, and made default
aries (it used to be oz).
When assembling for aries, generate "dec_only" instruction instead of
synthetic "addr #0,rx" as a placeholder RCU instruction.
Llama 2.72 improvements:
Added code to "pull back" instructions to fill nops that are left after
optimization.
Added a second pass to replace longer instructions with shorter, equivalent
alternate forms.
Used the "pull back" code to replace dec_only instructions where possible
(by pulling back a register unit instruction to hold the dec).
Llama 2.73
Extended .lcomm and .comm directives with an optional alignment parameter.
Extended the built in linking process so that .comm works with the built
in linker.
Llama 2.74
Fixed definition of st_s for rx,ry,ru,rv so it is properly noted as
a local store.
Extended the optimizer's "instruction pullback to fill nops" stage to
also look for alternate forms of instructions to pull back.
Llama 2.75
Added new warnings
"alignment > 32768 not officially supported"
"instruction has no effect"
Fixed the "section symbols" in COFF files, which frequently had trailing
garbage after them.
Fixed a bug in the optimizer where it would sometimes select alternate forms
of instructions which are shorter but which have side effects which are dangerous
in that location.
Llama 2.76
Symbolic labels are now allowed in the expression which limits an overlay
or section size.
If a jmp or jsr that was assumed to be in local memory doesn't fit in a
32 bit instruction, the longer jmp/jsr forms are tried.
Llama 2.77
Added directives for unaligned short and word-sized data.
Llama 2.78
Fixed instruction analysis of bra ,nop instructions occuring in delay slots.
Llama 2.79
Catch out of range addresses in st_s #nnnn,labelD instructions.
Llama 2.80
No longer emits spurious warnings about instructions with no effect.