* Introduce MatchInstruction and MatchOperand
MatchInstruction allows to match an instruction by condition and
oppostfix. MatchOperand checks if an operand is a register and matches
another operand. In the future this could be overloaded with other
versions not only accepting TRegister.
* Optimize cmp,moveq,movne sequence on ARM
This patch implements an peephole optimizer for the following sequence:
cmp reg,const1
movne reg,const2
moveq reg,const1
* Small improvements to the ARM peephole optimizer
Most instructions in the ARM ISA have taicpu(p).oper[0]^.typ = top_reg
as the only option, so there is no need to check for it if we're
looking at those instructions.
* Remove redundant mov instructions on ARM
This is an addition to the ARM PeepHole Optimizer.
It folds code like this:
mov reg1, reg2
add reg1, reg1, (const|reg)
git-svn-id: trunk@21024 -
* Added missing call to paramanager.freecgpara.
* Handle safecall stuff after deallocating registers of the main call in order to keep allocations balanced.
git-svn-id: trunk@21021 -
* Test for already fixed bugs #0016842 "show tables from <dbname>" and #0014519 "check table <tablename>"
* Test for common table expressions used with select statement
* plus reformating of test values (which I forgot did in rev.20585)
git-svn-id: trunk@21009 -
left-aligned. Other targets only require this if the total size of the
parameter was > 8 bytes (this last part used to be ensured by
the ppc64-specific version of a_load_ref_cgpara() that was removed in
r20962)
git-svn-id: trunk@21008 -
AIX/ppc32
+ AIX/ppc64 support in powerpc64/mathu.inc (file is the same as
powerpc/mathu.inc, should be unified)
* fixed macos assembler code in powerpc64/strings.inc and enabled
for AIX/ppc64
git-svn-id: trunk@20980 -
Changed assembler SELF reference from ESI to EAX. (probably now hidden param instead of fixed register ESI)
Alternative solution for Mantis #21242
git-svn-id: trunk@20968 -
record has only a single field (and if so, which one) when checking
whether we have to treat the record as if it was actually its first
field that's passed as a parameter (fixes problems with records
with methods, e.g. crash while compiling tests/test/trhlp35)
git-svn-id: trunk@20967 -
on AIX due to the extra inserted local symbols (although in case e.g
multiple procedures contain a typed constant with the same name, only
one can be accessible)
* removed '.' suffix of local symbols inserted for debug info of typed
constants for AIX (gdb couldn't find those symbols; it seems the
address calculated by gdb for typed constants is still not correct
though)
git-svn-id: trunk@20966 -
be generated for a single object file on AIX, automatically switch to
an indirection scheme that uses much less TOC entries, but is slower to
access global variables
* manually merged infrastructure for target-specific code generation
switches from JVM branch (-CTxxx switches)
* -CTsmalltoc switch for AIX that forces the indirection scheme for TOC
entries from the start in case the automatic one does not conserve
a sufficient amount (or in case you bump up against the global TOC
entries limit during linking)
git-svn-id: trunk@20963 -
if the value has to be shifted first (it could be a regvar)
* also take the cgpara's shiftval into account when loading a constant
git-svn-id: trunk@20961 -
itself (e.g. a 3-byte record as field insde a 4 byte record), make
the parent record non-regable either. The reason is that the parent
record will be forced to memory in that case when subscripting, and
the assignment will happen to this temporary memory location.
Fixes tests/test/tw15357.pp on ppc64 when compiled with -O2 and
without -Cg (not sure why enabling PIC disables global regvars)
git-svn-id: trunk@20959 -
assume that all virtual methods that can be called via interfaces that
appear in the program are in fact called (fixes WPO when applied to
MSEIDE)
git-svn-id: trunk@20952 -
a) we don't care about them
b) for 32 bit binaries on 64 bit platforms, they are indented differently
than defined symbols
(fixes -OWsymbolliveness for 32 bit binaries on 64 bit Linux platforms)
git-svn-id: trunk@20950 -
* Factored WriteStartElement, WriteEndElement and WriteXmlDecl into separate procedures
* Handle element names independent from DOM.
git-svn-id: trunk@20949 -