fpc/compiler/x86
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
..
aasmcpu.pas + support for tlsm_general on i386-linux 2018-11-11 17:32:20 +00:00
agx86att.pas + support for tlsm_general on i386-linux 2018-11-11 17:32:20 +00:00
agx86int.pas * Removed unused local vars. 2018-11-02 18:44:29 +00:00
agx86nsm.pas + when using the i8086 with section based smartlinking, create OMF section 2018-06-22 15:02:39 +00:00
aoptx86.pas + volatile() expression that marks an expression as volatile 2018-12-04 19:53:20 +00:00
cga.pas
cgx86.pas * three operand shl for shifting by 2, 4 or 8 can be simulated by lea 2018-11-17 15:08:22 +00:00
cpubase.pas Fix for bug report #34380 2018-10-18 20:21:54 +00:00
cx86innr.inc + added x86 (i8086, i386 and x86_64) intrinsics fpc_x86_get_cs/ss/ds/es/fs/gs 2018-07-11 14:19:40 +00:00
hlcgx86.pas
itcpugas.pas
itx86int.pas
ni86mem.pas
nx86add.pas Add global range check disable for i8086 cgcpu and x86 nx86add units 2018-10-31 23:20:29 +00:00
nx86cal.pas - removed pocall_far16 from the supported calling conventions of the i8086 2018-05-06 15:14:40 +00:00
nx86cnv.pas
nx86con.pas
nx86inl.pas * Removed unused local vars. 2018-11-02 18:44:29 +00:00
nx86ld.pas + support for tlsm_general on i386-linux 2018-11-11 17:32:20 +00:00
nx86mat.pas * Removed unused local vars. 2018-11-02 18:44:29 +00:00
nx86mem.pas
nx86set.pas * (modified) patch by Gareth Moreton: Speed improvement in case blocks, resolves #0034762 2018-12-27 18:31:55 +00:00
rax86.pas
rax86att.pas
rax86int.pas Disable range checking in rax86int unit 2018-11-06 07:41:15 +00:00
rgx86.pas
symi86.pas
symx86.pas
x86ins.dat + patch by J. Gareth Moreton to support BMI2 instructions 2018-10-07 10:10:19 +00:00
x86reg.dat * set all 16/32-bit specific stabs/dwarf register numbers of x86_64-only 2018-05-23 15:29:33 +00:00