Commit Graph

38111 Commits

Author SHA1 Message Date
joost
e17d1c9b37 * Support Interbase 7 and Firebird 3 boolean fields
* Minor optimization using local VSQLVar variable 
   Patch by Lacak2, mantis 22698

git-svn-id: trunk@22232 -
2012-08-24 15:56:37 +00:00
masta
d8af83d252 Introduce a version of MatchInstruction for multiple instructions
It is the same as the normal MatchInstruction function but supports to
be called with a set of TAsmOps instead of a single op.

git-svn-id: trunk@22231 -
2012-08-24 15:54:36 +00:00
florian
6b73bc45c5 * check constant for being a valid offset
git-svn-id: trunk@22230 -
2012-08-24 09:16:47 +00:00
florian
58a85e79ce * set index register correctly * index register might not be changed
git-svn-id: trunk@22229 -
2012-08-24 09:16:38 +00:00
florian
245d8286d5 + LookForPostindexedPattern
git-svn-id: trunk@22228 -
2012-08-24 09:16:26 +00:00
pierre
acfcb3d853 * Define slowcpu conditional for mips cpu, cuts execution time from 4 mins down to 20 secs
git-svn-id: trunk@22227 -
2012-08-24 07:47:00 +00:00
masta
012da673a8 Use MatchInstruction in OpCmp2OpS
MatchInstruction keeps the code a bit more readable and compact.

git-svn-id: trunk@22226 -
2012-08-23 23:08:26 +00:00
pierre
9ad6285fe2 * Fix 64-bit OP_ADD and OP_SUB operations (no overflow support yet)
git-svn-id: trunk@22225 -
2012-08-23 22:05:41 +00:00
florian
a016bc5ced * white space change
git-svn-id: trunk@22224 -
2012-08-23 21:04:31 +00:00
florian
f2ccd6e400 * when doing the AddSubLdr2Ldr optimization check also if the source register of the add is modified before the load
git-svn-id: trunk@22223 -
2012-08-23 21:04:21 +00:00
florian
4e2de05667 * don't apply the AddSubLdr2Ldr optimization if the base register in the reference is used/modified during the ldr/str
git-svn-id: trunk@22222 -
2012-08-23 21:04:11 +00:00
florian
d89b742109 * apply Add/SubLdr2Ldr only if no condition flags are involved
git-svn-id: trunk@22221 -
2012-08-23 21:04:02 +00:00
florian
73d540e7b5 * unsigned byte ldr/str allow also an offset of max. +/-4095
git-svn-id: trunk@22220 -
2012-08-23 21:03:52 +00:00
florian
9d20a73986 * optimize also str/ldrb/h/d
git-svn-id: trunk@22219 -
2012-08-23 21:03:44 +00:00
florian
1b3e03d72d + DEBUG_AOPTCPU to turn off peephole optimizer messages
git-svn-id: trunk@22218 -
2012-08-23 21:03:34 +00:00
florian
8a20ccc5f9 + Add/SubLdr2Ldr optimization
git-svn-id: trunk@22217 -
2012-08-23 21:03:24 +00:00
florian
ca5078f9cf + RegModifiedBetween
git-svn-id: trunk@22216 -
2012-08-23 21:03:14 +00:00
Jonas Maebe
85765364ee * properly compare parameter lists involving pointers to or classrefdefs of
forward defined types by maing sure that we always compare typesyms in
    that case instead of the forwarddefs (mantis #22705)

git-svn-id: trunk@22215 -
2012-08-23 20:58:22 +00:00
michael
88776524fd * Interdependency reduction, verbosity introduced
git-svn-id: trunk@22214 -
2012-08-23 15:27:00 +00:00
masta
b9fa9da629 Small fixes to OpCmp2OpS
1.) For UMULL and UMLAL support we would have to make sure the following
code checks RdHi and RdLo, which is currently not supported.
The former code would transform the following

  umull r0, r1, r2, r3
  cmp   r0, #0
  bne   .LSomething

into

  umulls r0,r1,r2,r3
  bne    .LSomething

which is wrong. UMULL has a 64bit result in r1+r0 and checks the full 64bit for 0
before setting the Z flag.

2.) Support MLA.

3.) Support MI/PL/NE/EQ for all instructions. As all of them are setting
the N and Z flags in the same way only based on the result of the
operation not on its input values.

N:=Result[31];
Z:=Result = 0;

Wurst

git-svn-id: trunk@22213 -
2012-08-23 14:22:29 +00:00
pierre
7587145320 Add possibility to test sparc elf generator with -dTEST_AGSPARC_ELF
git-svn-id: trunk@22212 -
2012-08-23 12:59:45 +00:00
michael
efaf017b17 * Improvements so package name can be specified, fpmake is excluded
git-svn-id: trunk@22211 -
2012-08-23 12:56:53 +00:00
michael
2252b71ae9 * Some small fixes so sdo is parsed
git-svn-id: trunk@22210 -
2012-08-23 12:56:19 +00:00
pierre
926d39e604 * Fix compilation of sparc/cpuelf unit
git-svn-id: trunk@22209 -
2012-08-23 12:32:02 +00:00
sergei
c529356693 * Split most CPU-specific code from ogelf.pas into newly created cpuelf.pas units in CPU subdirectories.
git-svn-id: trunk@22208 -
2012-08-23 11:49:49 +00:00
Jonas Maebe
5f46866595 * regenerated using a current version of fpcmake
git-svn-id: trunk@22207 -
2012-08-23 09:51:14 +00:00
pierre
91bfa84952 Correct code after change in set_common_funcretloc_info which made the call to ret_in_param always return false
git-svn-id: trunk@22206 -
2012-08-23 09:50:47 +00:00
Jonas Maebe
97021d47c3 * like other applications that custapp, these also depend on univint on
the Darwin/iphonesim platforms
  * regenerated using a current version of fpcmake

git-svn-id: trunk@22205 -
2012-08-23 09:49:29 +00:00
florian
3ad32b6e4e * opcode spelling fixed
git-svn-id: trunk@22204 -
2012-08-23 08:55:07 +00:00
florian
935985d0c0 * checked and updated valid opcode for OpCmp2OpS optimization
git-svn-id: trunk@22203 -
2012-08-23 08:55:03 +00:00
florian
70009e8ed1 * move flag allocation item
git-svn-id: trunk@22202 -
2012-08-23 08:54:58 +00:00
florian
45383fd32d + a lot missing flag allocs/deallocs added
git-svn-id: trunk@22201 -
2012-08-23 08:54:52 +00:00
florian
2d2c66467c + optimize op ... / cmp .... when possible
git-svn-id: trunk@22200 -
2012-08-23 08:54:47 +00:00
michael
2d653999b4 * Dependency on fcl-base added
git-svn-id: trunk@22199 -
2012-08-23 08:21:34 +00:00
michael
2cc020c20e * Dependency on fcl-base added
git-svn-id: trunk@22198 -
2012-08-23 08:21:07 +00:00
michael
20c0a14e1e * Fixed makefile
git-svn-id: trunk@22197 -
2012-08-23 08:04:36 +00:00
pierre
05a326a83e Make sure f2X+1 is also considered used if f2X is used
git-svn-id: trunk@22196 -
2012-08-22 22:49:53 +00:00
florian
3e9baa3f47 * check also register type in FindRegalloc
git-svn-id: trunk@22195 -
2012-08-22 19:52:43 +00:00
florian
a92ca7c456 * adjust the reg. allocations of the target register in RemoveSuperfluousMove
git-svn-id: trunk@22194 -
2012-08-22 19:52:37 +00:00
florian
3d7b603d11 * get rid or move the allocation of the replaced register if possible
git-svn-id: trunk@22193 -
2012-08-22 19:52:30 +00:00
florian
77e579f59f * RemoveSuperfluousMove uses FindRegDeAlloc to find out if the register used in the move can be removed
* RemoveSuperfluousMove fixes partially the register allocation changes caused by the mov

git-svn-id: trunk@22192 -
2012-08-22 19:52:23 +00:00
florian
6e62fbc3d2 * more consistent updates of used registers
+ FindRegDeAlloc searching for a register deallocation
* FindRegAlloc now returns the allocation object which was found

git-svn-id: trunk@22191 -
2012-08-22 19:52:15 +00:00
florian
e1a2b1859a * comments and explanations on tai_regalloc.keep field
* write/read tai_regalloc. field to/from ppu

git-svn-id: trunk@22190 -
2012-08-22 19:52:08 +00:00
florian
5fd457e586 * when determining of a register is used after an instruction, new allocs should not be taken into account
git-svn-id: trunk@22189 -
2012-08-22 19:52:03 +00:00
florian
07e26cfb12 + TUsedRegs.Update parameter IgnoreNewAllocs so new allocs of registers can be ignored during update
git-svn-id: trunk@22188 -
2012-08-22 19:51:54 +00:00
florian
b6608e716b + tai_regalloc.keep to force register deallocations to be keep
git-svn-id: trunk@22187 -
2012-08-22 19:51:47 +00:00
florian
c0425c48fd * make use of GetNextInstructionUsingReg
git-svn-id: trunk@22186 -
2012-08-22 19:51:40 +00:00
florian
f3f5be2af1 * RemoveSuperfluousMove should not mess with moves targetting lr or pc
git-svn-id: trunk@22185 -
2012-08-22 19:51:31 +00:00
florian
93eb20d407 + GetNextInstructionUsingReg
git-svn-id: trunk@22184 -
2012-08-22 19:51:19 +00:00
florian
55e6da6d28 * make cpubase for arm use inlining
git-svn-id: trunk@22183 -
2012-08-22 19:51:08 +00:00