* disable matching volatile references in the assembler optimisers, so they
can't be removed (more conservative than needed, but better than removing
too many)
o the CSE optimiser will ignore them by default, because they're an unknown
inline node for it
* also removed no longer used fpc_in_move_x and fpc_in_fillchar_x inline node
identifiers from rtl/inc/innr.inc, and placed fpc_in_unaligned_x at the
right place
git-svn-id: trunk@40465 -
Fix float loading.
Fix a number of small issues with wrong operand sizes.
Fixed concatcopy code generation.
Align jump table for case statements.
git-svn-id: branches/laksen/riscv_new@39481 -
for x86 instructions, entered via inline assembler, using intel syntax
(the low level optimizer isn't normally run on them, so it doesn't matter that
InstructionLoadsFromReg and similar functions don't work on them, but with
-dDEBUG_INSTRUCTIONREGISTERDEPENDENCIES it is much more convenient for
debugging purposes to have correct data for them, because you can enter
instructions manually and see how these functions behave)
git-svn-id: trunk@36065 -
adds instruction register usage info to the assembly output (only register
reads for now, but register writes will also be added later). Useful for
debugging InstructionLoadsFromReg and other similar functions.
git-svn-id: trunk@35967 -
* updated TAOptObj.RegUsedAfterInstruction with the arm implementation and removed the arm specific implementation
* RegLoadedWithNewValue and InstructionLoadsFromReg are now a methods of TAoptBase
* moved RegEndOfLife to TAOptObj
* during this refactoring, fixed also TCpuAsmOptimizer.RegLoadedWithNewValue for arm regarding post/preindexed
memory references: those modify the register but do not load it with a new value in the sense of RegLoadedWithNewValue
git-svn-id: trunk@33000 -
- Renamed IsJumpToLabel() to IsJumpToLabelUncond() to avoid confusions.
- Added IsJumpToLabel() to check for any jump to a label.
- Added comments.
git-svn-id: trunk@32114 -
Fixed multiplication code generation for AVR controllers without mul instructions.
Added handling of the old interrupt procedure directive such that procedures with that use RETI instead of RET.
git-svn-id: trunk@31030 -
o don't forward cb(n)z, as we don't check the maxiumum offsets
o don't forward conditional branches to global labels, as they also have a
limited range and at least the OS X toolchain doesn't support this
git-svn-id: trunk@29929 -
Up until now if a peephole optimizer matched we've only restarted from
the current instruction. This patch restarts optimizations on the whole
block if the previous run had at least one match.
As this can take considerable time this will only be enabled if -O3 or
higher is specified.
git-svn-id: trunk@26640 -
* Also skip possible ait_marker's between branch and its immediately following target (which was preventing certain optimizations of "exit" statements on all targets because procedure's exit label is always preceded by location marker).
git-svn-id: trunk@25855 -
The difference in branch instruction formats is isolated in function JumpTargetOp, it is a plain function rather than a virtual method, so it can be easily inlined and, after inlining, produces the same code for non-MIPS targets as it was before change.
git-svn-id: trunk@25033 -