fpc/compiler/x86_64
florian 7f5c2fa3aa * (modified) patch by Gareth Moreton: Speed improvement in case blocks, resolves #0034762
This patch improves the compiler where "case" statements are concerned, using jump tables more often and creating more efficient machine code in some situations:
  * If a case block only contains one branch (not including the else block), the initial range check is removed, since this becomes wasted effort.
  * If the else block is empty, the else label is set to the end label - though this doesn't decrease the code size, it takes a bit of strain off the peephole optimizer.
  * On -O2 and above, some node analysis is now done on the branch labels. Most of the time this just redirects it to the end
    label for empty blocks, but if the block contains a goto statement, it will redirect it to its destination instead,
    thus increasing performance by not having multiple jumps (this won't get picked up by the peephole optimiser if the label addresses are in a jump table).
  * Some checks now use what I call the 'true count' rather than the 'label count'. The true count includes each
    individual value in a range - for example, 0..2 counts as 3. This increases the chance that a jump table will be
    utilised in situations where it is more efficient than a linear list.
  * For jump tables, if the case block almost covers the entire range (32 entries or fewer from full coverage),
    the initial range check is removed and the gaps included in the jump table (pointing to the else label).

git-svn-id: trunk@40676 -
2018-12-27 18:31:55 +00:00
..
aoptcpu.pas + factored out TX86AsmOptimizer.PrePeepholeOptIMUL, used now by x86-64 and i386 2018-11-01 20:49:20 +00:00
aoptcpub.pas - get rid of MaxOps, it is redundant with max_operands 2018-11-02 21:32:29 +00:00
aoptcpud.pas
cgcpu.pas
cpubase.inc
cpuelf.pas + added support for x86_64-android target. 2018-10-17 16:56:27 +00:00
cpuinfo.pas
cpunode.pas
cpupara.pas * Commented out unused "size" local var. 2018-11-02 18:47:34 +00:00
cpupi.pas
cputarg.pas + added support for x86_64-android target. 2018-10-17 16:56:27 +00:00
hlcgcpu.pas
nx64add.pas
nx64cal.pas
nx64cnv.pas
nx64flw.pas * moved finalization of code generator temps to a node, so it can be getcopy'd 2018-11-17 22:38:36 +00:00
nx64inl.pas
nx64mat.pas
nx64set.pas * (modified) patch by Gareth Moreton: Speed improvement in case blocks, resolves #0034762 2018-12-27 18:31:55 +00:00
r8664ari.inc
r8664att.inc
r8664con.inc
r8664dwrf.inc
r8664int.inc
r8664iri.inc
r8664nasm.inc
r8664nor.inc
r8664num.inc
r8664ot.inc
r8664rni.inc
r8664sri.inc
r8664stab.inc
r8664std.inc
rax64att.pas * fix .seh_savereg: the offset is checked with a bitmask, not a divisor, so use "and", not "mod" 2018-10-07 12:25:09 +00:00
rax64int.pas
rgcpu.pas
symcpu.pas * when creating wrappers, add a prefix to parameter names to prevent them 2018-12-24 22:10:06 +00:00
win64unw.pas
x8664ats.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664att.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664int.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664nop.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664op.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664pro.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x8664tab.inc + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00