Commit Graph

19187 Commits

Author SHA1 Message Date
Károly Balogh
25c34aedc2 m68k: implemented tcpucasenode.genlinearlist. 68k doesn't need cmp after sub, as sub sets the flags as expected. results in simpler, faster and more compact code
git-svn-id: trunk@33709 -
2016-05-19 21:33:45 +00:00
Károly Balogh
b6242d14ed * use currpara.paraloc[calleeside].def instead of currpara.vardef when copying parameters to local registers in ncgutil. this mimics hlcgobj behavior and fixes parameters passed by reference to be allocated into intregs on m68k. among others, this has a big impact on OOP code, because of self, for example
git-svn-id: trunk@33707 -
2016-05-19 02:39:45 +00:00
florian
35b18fbf85 * change address related variables from aint to PInt to avoid range check errors
git-svn-id: trunk@33701 -
2016-05-16 19:24:09 +00:00
florian
b2f15e2736 * first check for ait_instruction before checking opcode
git-svn-id: trunk@33693 -
2016-05-16 13:10:20 +00:00
florian
f950dca8a5 * use PUInt for passing around sizes in ogbase as the width of the data type should dependent on the address size and not the ALU size
git-svn-id: trunk@33692 -
2016-05-16 07:55:09 +00:00
svenbarth
b5d984da7a pkgutil.pas, createimportlibfromexternals:
* only process a unit's imports if the unit is not already from a package

git-svn-id: trunk@33686 -
2016-05-13 15:20:08 +00:00
svenbarth
a67fe62caa fmodule.pas, tmodule:
* reset: also free and reinstantiate unitimportsyms

git-svn-id: trunk@33685 -
2016-05-13 14:51:02 +00:00
pierre
94d8d9927d Only add indirect symbol for constants if tf_supports_packages flag is set in target_info.flags
git-svn-id: trunk@33684 -
2016-05-12 07:05:58 +00:00
Károly Balogh
424f329173 m68k: use inlined realconsts also during normal float calculations on '881/040/060. also optimize them where possible
git-svn-id: trunk@33671 -
2016-05-10 18:19:41 +00:00
Károly Balogh
2dbfca4e8e m68k: optimize a few cases of comparisons against inlined realconsts
git-svn-id: trunk@33669 -
2016-05-10 15:39:08 +00:00
Károly Balogh
7710300c22 m68k: utilize FTST for comparing against float zero. also utilize FCMP realconst,fpreg on '881 for other realconst values
git-svn-id: trunk@33668 -
2016-05-10 15:38:13 +00:00
Károly Balogh
e7838dad39 m68k: initial asm-level infrastructure to let the codegenerator output float consts as operands, which is supported on 88x/040/060
git-svn-id: trunk@33667 -
2016-05-10 13:47:46 +00:00
Károly Balogh
3e2319ff3a m68k: do not allocate/free the regset dynamically having it as a normal field is perfectly fine
git-svn-id: trunk@33665 -
2016-05-10 13:03:17 +00:00
florian
e4baf67722 * do not write any size suffix for cvt*ss2si, doing so makes no sense as the size of the single and the integer might be different on x86-64, resolves issue #30101
git-svn-id: trunk@33661 -
2016-05-08 18:50:53 +00:00
Károly Balogh
3b4822d320 m68k: utilize MVS and MVZ instructions to load values from references with zero/sign extend when they're available
git-svn-id: trunk@33656 -
2016-05-05 23:55:50 +00:00
Károly Balogh
bd17976cf1 m68k: added Coldfire CPU capability MVS/MVZ instructions. also fixed CFv4e capabilities
git-svn-id: trunk@33655 -
2016-05-05 23:54:37 +00:00
florian
cfd49ec708 + TAOptBase.SuperRegistersEqual
+ properly implemented TAOptObj.PrePeepHoleOpts
+ properly implemented TAOptObj.PeepHoleOptPass2

git-svn-id: trunk@33654 -
2016-05-05 12:38:19 +00:00
Károly Balogh
2e9ed396b4 m68k: convert non-int paraloc sizes to int in a_load_ref_cgpara, fixes build breaks with softfpu since r33651
git-svn-id: trunk@33653 -
2016-05-05 02:33:54 +00:00
Károly Balogh
1e6e5a1874 m68k: implemented a_load64_reg_ref and a_load64_ref_reg. avoids duplicated reference simplifications in the generated code during 64bit load/store
git-svn-id: trunk@33652 -
2016-05-05 00:58:21 +00:00
Károly Balogh
2b250a1b0a m68k: use a_load_ref_ref in a_load_ref_cgpara instead of a custom loading code which does the same. causes no changes in generated code
git-svn-id: trunk@33651 -
2016-05-05 00:55:52 +00:00
Károly Balogh
778a0b737e * removed ancient (since r5554) special handling code for m68k from tcgvecnode, which is no longer necessary
git-svn-id: trunk@33650 -
2016-05-04 21:39:37 +00:00
florian
0232a0d979 * several inlined math function do not need a non-constant register for the argument
git-svn-id: trunk@33649 -
2016-05-04 18:15:33 +00:00
Károly Balogh
88e14dc456 m68k: only extend the dest reg to tosize during reg-reg moves. this removes a large amount of unnecessary sign and zero extensions from the generated code. this was attempted before, but thanks to other fixes it no longer causes testsuite regressions
git-svn-id: trunk@33648 -
2016-05-04 09:52:27 +00:00
Károly Balogh
524659b341 m68k: if we have a symbol in the location reference, that will be base, so try to insert an index register instead, reduces the amount of data->address register shuffling in the generated code
git-svn-id: trunk@33647 -
2016-05-03 23:55:27 +00:00
nickysn
ce66597df8 * handle classrefdefs properly, according to the memory model in i8086's
thlcgobj.getaddressregister. This should fix several regressions in the
  compact, large and huge memory models after r33591

git-svn-id: trunk@33637 -
2016-05-03 15:11:32 +00:00
nickysn
18538494b9 * use the high level code generator's getaddressregister method in thlcgobj.maybe_change_load_node_reg
git-svn-id: trunk@33636 -
2016-05-03 14:24:10 +00:00
Jonas Maebe
51209eac9c * fixed bootstrap for Darwin/ppc with FPC 3.0 (workaround for
mantis #29906)

git-svn-id: trunk@33631 -
2016-05-03 09:01:55 +00:00
Jonas Maebe
14bab6c85d * fixed ppc jump table generation in case a jump table has cases for the
lowest and highest element of the type of the case expression, and the
    lowest element <> 0 (mantis #29906)

git-svn-id: trunk@33630 -
2016-05-03 09:00:52 +00:00
marcus
a77d26530d AmigaOS4: set winlike resources
git-svn-id: trunk@33622 -
2016-05-02 17:33:52 +00:00
Károly Balogh
50a40062e2 m68k: fixed the build after r33614
git-svn-id: trunk@33617 -
2016-05-02 15:01:47 +00:00
Károly Balogh
92b2cf917d m68k: when saving/restoring FPU registers, use the right FPU register size on ColdFire to calculate the stored size
git-svn-id: trunk@33614 -
2016-05-02 14:18:30 +00:00
pierre
e1814305bd Fix default CPU for assembler blocks (init_settings.asmcputype) to be the same as init_settings.cputype
git-svn-id: trunk@33612 -
2016-05-02 11:57:22 +00:00
Jonas Maebe
2f81c14ee9 * also print funcretnode for callnodes
git-svn-id: trunk@33610 -
2016-05-02 08:23:08 +00:00
pierre
b93928a9aa Fix compilation of mips compiler after rev 33591
git-svn-id: trunk@33609 -
2016-05-02 08:22:43 +00:00
Jonas Maebe
2bbab60c92 * when simplifying a constant string concatenation that gets assigned to a
rawbytestring, ensure the resulting constant string does not get CP_NONE
    as codepage, but the default system code page (mantis #30082)

git-svn-id: trunk@33597 -
2016-05-01 13:16:02 +00:00
Károly Balogh
6d3b580f2f * enabled internal ELF resources for AmigaOS4
git-svn-id: trunk@33596 -
2016-05-01 12:59:54 +00:00
Jonas Maebe
130d9fee91 * don't take the address of element 0 of a dynamic array in
tcallparanode.copy_value_by_ref_para() if the array is empty
    (mantis #30007)

git-svn-id: trunk@33595 -
2016-05-01 12:35:09 +00:00
Jonas Maebe
1feb062f7d * similar change as in r33393 but now for a_load_reg_ref_unaligned(), although
it's unlikely it would ever cause a problem there

git-svn-id: trunk@33594 -
2016-05-01 12:35:06 +00:00
florian
0c13f3ce3e * fix modification information for vand*
git-svn-id: trunk@33593 -
2016-05-01 12:00:25 +00:00
Károly Balogh
56fea8d047 * have regvars in address registers for defs which are address types. improves code with reference bases in regvars on m68k. and also reduces data register pressure.
git-svn-id: trunk@33591 -
2016-05-01 11:33:37 +00:00
Károly Balogh
aa8b45904e m68k: use the existing g_call infrastructur to handle the register allocation in the helpers
git-svn-id: trunk@33589 -
2016-05-01 10:42:52 +00:00
Károly Balogh
0b7464e4cd m68k: fix large const loading to address registers
git-svn-id: trunk@33588 -
2016-05-01 10:41:40 +00:00
florian
bd54a11f1c + TX86AsmOptimizer.OptPass1VMOVAP for i386 and x86-64
+ new unit aoptutils which helpers for the assembler optimizer

git-svn-id: trunk@33587 -
2016-05-01 09:37:21 +00:00
Károly Balogh
a806114af6 * since AMIGA is now defined by both AmigaOS4 and 68k Amiga, have an unique AMIGA68K define for classic Amiga
git-svn-id: trunk@33583 -
2016-04-30 19:51:30 +00:00
Károly Balogh
5a50fc4be3 * don't provide __amigaos4__ symbol in our VLink linker script by default. it's in prt0.as for now.
git-svn-id: trunk@33582 -
2016-04-30 19:48:54 +00:00
Károly Balogh
f48747adf5 m68k: reworked cg.g_concatcopy. generates shorter and faster code in most cases now.
git-svn-id: trunk@33575 -
2016-04-30 00:15:34 +00:00
svenbarth
adbef4fc84 New export option that enforces the use of the provided export name instead of using the name of the provided symbol. This is necessary to correctly handle overloaded functions, especially if one of them is an internproc one.
export.pas:
  + texportoption: new option eo_no_sym_name
pkgutil.pas:
  * exportprocsym: set eo_no_sym_name when exporting procdefs from a package
systems/t_win.pas, TExportLibWin:
  * generatelib: respect eo_no_sym_name

git-svn-id: trunk@33574 -
2016-04-29 15:03:18 +00:00
Jonas Maebe
44682f9f4d * ensure that if we create a temp for the funcretnode in a call node,
the funcretnode field keeps a reference to this temp even after we
    assign it to the call-by-reference return parameter if it is deleted
    by changing it into a normal temp (after which it will be freed when
    the result of the call node is used), because in that case getcopy
    for the callnode must copy this reference after copying the
    tempdeletenode in order to reset tempinfo^.hookoncopy (mantis #29891)

git-svn-id: trunk@33569 -
2016-04-28 20:33:12 +00:00
Károly Balogh
2f23b5f0fd m68k: output some GAS specific pseudo instructions in the GNU as writer, so the assembler can do branch size optimization for us
git-svn-id: trunk@33559 -
2016-04-26 01:34:26 +00:00
Károly Balogh
4287f81b92 m68k: support and use float TResFlags in the rest of the CG. ColdFire FPU now works, and FSxx is no longer generated which is software supported on '060, and doesn't exist on CF. if we still want to support it later, we can add it to cg.g_flags2reg
git-svn-id: trunk@33558 -
2016-04-25 23:40:44 +00:00