Commit Graph

16907 Commits

Author SHA1 Message Date
sergei
3ede5ec99b * MIPS peephole: refactored/simplified and added (another) couple of optimizations.
git-svn-id: trunk@28591 -
2014-09-03 20:00:42 +00:00
sergei
ac64c4600f + MIPS: make use of instructions MUL,SEB and SEH that are available in modern cores.
git-svn-id: trunk@28590 -
2014-09-03 19:59:00 +00:00
sergei
4e2fb9d28b * MIPS: fixed O_MOVE_SOURCE and O_MOVE_DEST constants (they were swapped, amazing that it ever worked with such a mistake).
+ Spilling for SEB and SEH
* Another attempt to get spilling of 3-operand form DIV/DIVU be done correctly.

git-svn-id: trunk@28588 -
2014-09-03 19:57:46 +00:00
sergei
406a678223 * MIPS: MOVE instruction cannot be changed into conditional move (MOVZ/MOVN) if it overwrites register used as condition.
git-svn-id: trunk@28587 -
2014-09-03 11:59:16 +00:00
florian
3f71b059e5 * improve ldr*/str* handling for arm thumb
git-svn-id: trunk@28583 -
2014-09-02 19:37:45 +00:00
Károly Balogh
9991ee4165 m68k: support loading of refs to data registers, also when explicit paraloc is set and it's a register, use that directly, this fixes several syscall-related corner cases on Amiga
git-svn-id: trunk@28582 -
2014-09-02 17:38:34 +00:00
sergei
02f39c667a * MIPS: added a couple of important capabilities and made them available for big-endian targets as well.
git-svn-id: trunk@28581 -
2014-09-02 12:51:48 +00:00
sergei
768e090006 - MIPS: don't create reg.allocator for MM registers.
git-svn-id: trunk@28579 -
2014-09-01 21:55:03 +00:00
joost
030885727e * Do not use sym.realname but sym.name in the mangledname for the Dwarf-3 debuginfo. This makes it possible to mix Dwarf-2 and Dwarf-3 debug info into one executable.
git-svn-id: trunk@28576 -
2014-09-01 16:55:10 +00:00
svenbarth
244ac12794 Fix for Mantis #26615.
htypechk.pas, tcallcandidates:
  * collect_overloads_in_struct: we need to check the deftyp of the extended def for record- or objectdef, not the deftyp of the helper which will always be objectdef anyway.

+ added test

git-svn-id: trunk@28572 -
2014-09-01 07:18:02 +00:00
florian
2fa7171a45 * generate AND for small set comparisons also when only set vars are involved using the cg class, so it works for arm thumb as well
git-svn-id: trunk@28569 -
2014-08-31 20:43:13 +00:00
florian
8a7c16327c * fixes reference handling for arm thumb and ldrh, not perfect yet
git-svn-id: trunk@28568 -
2014-08-31 18:00:10 +00:00
florian
81c717fc06 + implemented tthumbcgarm.g_external_wrapper in a way which does not destroy lr
git-svn-id: trunk@28560 -
2014-08-31 16:35:01 +00:00
florian
3f18d85434 * create a thumb_func directive before .globl directives in assembler to prevent accidental changes of asm mode
git-svn-id: trunk@28556 -
2014-08-31 15:01:55 +00:00
florian
dffdde7d53 * fixes reference handling for arm thumb and ldrb, not perfect yet and other ldr/str types might need similiar fixes
git-svn-id: trunk@28549 -
2014-08-31 11:37:17 +00:00
florian
db01c50a4f * fixes jump table generate for arm thumb
git-svn-id: trunk@28546 -
2014-08-30 22:13:09 +00:00
sergei
a5958d6e5f * m68k: do not emit moves between same register, they end up in wrong code in some cases when register needs to be spilled (and entirely useless otherwise).
git-svn-id: trunk@28545 -
2014-08-30 22:00:54 +00:00
florian
836a6e46ca * several issues with interface wrappers for thumb fixed
git-svn-id: trunk@28542 -
2014-08-30 20:38:26 +00:00
florian
97fc823e33 * generate AND for small set comparions using the cg class, so it works for arm thumb as well
git-svn-id: trunk@28540 -
2014-08-30 18:02:59 +00:00
florian
64dafdb1de * stabn writing code simplified
* write 0 instead of "label-label" in stabn, arm thumb assemblers do not like "label-label", for other targets writing 0 should make no difference

git-svn-id: trunk@28539 -
2014-08-30 16:56:01 +00:00
florian
09728a9ae2 * improved r28534: LDR/STR on thumb do not support registers >r7 as destination/source
git-svn-id: trunk@28538 -
2014-08-30 12:13:00 +00:00
sergei
1e11e34f42 + MIPS: implemented more peephole optimizations.
git-svn-id: trunk@28536 -
2014-08-29 18:20:49 +00:00
sergei
d9a7d28838 + MIPS: support floating point conditions in its emulated flags, on MIPS4+ convert such flags to registers using conditional move instructions (i.e. without branching). For older cores generated code remains the same.
git-svn-id: trunk@28535 -
2014-08-29 18:18:17 +00:00
Károly Balogh
5a7b1f00cf ARM: Thumb is an ugly mess, but this at least makes fcl-image package to build with -Ooregvar. someone with more clue is welcomed to review and come up with a better patch.
git-svn-id: trunk@28534 -
2014-08-29 17:04:48 +00:00
sergei
3b06465322 + MIPS: support replacement spilling for mov.s, mov.d and (partially) mtc1 instructions.
git-svn-id: trunk@28530 -
2014-08-27 21:26:38 +00:00
sergei
5655baa23a * MIPS: optimized conversion of unsigned 32-bit integers to float, now uses one integer register instead of two and does not generate redundant move.
git-svn-id: trunk@28529 -
2014-08-27 21:23:47 +00:00
sergei
5f2821ee5f * Moved handling of emulated floating point negation into new virtual method tcgunaryminusnode.second_float_emulated. Also changed it into simple flipping of the sign bit, which is how it is defined by IEEE 754, and already done for ARM targets. Relevant ARM-specific parts can now be removed, and m68k code gets significantly better without further efforts.
git-svn-id: trunk@28528 -
2014-08-27 21:16:30 +00:00
florian
8635894de4 * merged new changes to avx2 branch (AVX2 vectory-memory support) by Torsten Grundke
git-svn-id: trunk@28527 -
2014-08-27 21:06:23 +00:00
nickysn
0f9e8f84bb * tcgcallnode.pass_generate_code: pass the correct vmt pointer type parameter to
location_force_reg when generating code for a call to a virtual class method,
  called through a class reference var. This bug went unnoticed so far, because
  on all platforms, except i8086 medium and compact memory models, the size of
  a vmt pointer is the same as the size of a procvar. Even in the i8086 medium
  and compact memory models, the previous code would generate correct code,
  because thlcg2ll.a_load_loc_reg uses loc.size (which was correct) in the case
  when fromsize=tosize (both of which were wrong, but equal), due to the check
  in hlcg2ll.pas:555. Thanks to Jonas for finding this bug!

git-svn-id: trunk@28512 -
2014-08-22 23:17:46 +00:00
sergei
f0496001fb - MIPS: removed allocation of stack/frame pointer registers in prologue, hacks like this are no longer needed since r27104.
git-svn-id: trunk@28505 -
2014-08-21 19:36:00 +00:00
Károly Balogh
dd67fa8c5c * fixed DFA warnings for i8086
git-svn-id: trunk@28504 -
2014-08-20 15:49:27 +00:00
Károly Balogh
b13ef4e3bb * fixed DFA warnings for JVM target
git-svn-id: trunk@28503 -
2014-08-20 15:48:42 +00:00
Károly Balogh
d22dc68fda * fixed DFA warnings for MIPS and AVR
git-svn-id: trunk@28502 -
2014-08-20 15:05:43 +00:00
Károly Balogh
6122db7d40 * fix warnings when compiling the compiler with DFA optimizer enabled on PowerPC
git-svn-id: trunk@28501 -
2014-08-20 14:31:36 +00:00
Károly Balogh
0cf7357ee2 * fix GetResFlags DFA optimizer warning on Sparc and AVR too
git-svn-id: trunk@28500 -
2014-08-20 13:52:28 +00:00
Károly Balogh
392da9e43f * fix warnings when compiling the compiler with DFA optimizer enabled on m68k
git-svn-id: trunk@28499 -
2014-08-20 13:49:47 +00:00
Károly Balogh
09608a1c28 * fix warnings when compiling the compiler with DFA optimizer enabled on ARM
git-svn-id: trunk@28498 -
2014-08-20 13:16:58 +00:00
Károly Balogh
07ad2a04ac * fix warnings when compiling the compiler with DFA optimizer enabled on i386
git-svn-id: trunk@28497 -
2014-08-20 12:28:44 +00:00
Károly Balogh
249a60b28b x86: fix a variable op not initialized warning. This hopefully fixes our x86 testsuite run.
git-svn-id: trunk@28496 -
2014-08-20 10:21:06 +00:00
Jonas Maebe
a4a54fa344 * removed unnecessary "as" expressions
git-svn-id: trunk@28471 -
2014-08-19 20:11:52 +00:00
Károly Balogh
03a0f7b409 AROS: improved version of the previous commit, pass the stripping option to the linker instead, seems to work.
git-svn-id: trunk@28466 -
2014-08-19 11:30:02 +00:00
Károly Balogh
883e71f18e AROS: stripping of executables on i386 works now
git-svn-id: trunk@28465 -
2014-08-19 11:03:31 +00:00
Károly Balogh
4ee15b84da AROS: syscall (library call) support for based on the Amiga/68k and MorphOS/PPC versions
git-svn-id: trunk@28463 -
2014-08-19 00:39:18 +00:00
Jonas Maebe
83c7dbb7a6 * fixed copy/paste error that caused all warnings to be disabled after
compiling the symdef unit while building a compiler for a non-64 bit
    code generator

git-svn-id: trunk@28462 -
2014-08-18 23:03:54 +00:00
Jonas Maebe
ee76e8dbf5 * fixed warning about always-true comparison when compiling a 16 bit target
git-svn-id: trunk@28461 -
2014-08-18 23:02:12 +00:00
Jonas Maebe
7e3abd4b38 * fixed warning about signed integer to pointer conversion
git-svn-id: trunk@28460 -
2014-08-18 23:00:53 +00:00
Jonas Maebe
4005290b54 * aint -> asizeint (immediate operand vs offset size)
git-svn-id: trunk@28459 -
2014-08-18 23:00:17 +00:00
Jonas Maebe
f55516ed32 * changed forcesize parameter of tgobj.gethltemp() from aint into asizeint,
as that one represents memory sizes while aint represents code generator
    immediate operands

git-svn-id: trunk@28458 -
2014-08-18 22:36:43 +00:00
Jonas Maebe
e7ac66a6c4 * removed nested comments
git-svn-id: trunk@28457 -
2014-08-18 22:34:35 +00:00
Jonas Maebe
e21d31dc99 * fixed compilation with range checking enabled
git-svn-id: trunk@28447 -
2014-08-18 20:06:27 +00:00