Commit Graph

70 Commits

Author SHA1 Message Date
peter
610cbec252 * fixes for FPU register allocation 2003-09-03 21:06:45 +00:00
peter
6a8d5eb25d * NEWRA branch merged 2003-09-03 15:55:00 +00:00
florian
220e05dd5e * fixed arm concatcopy
+ arm support in the common compiler sources added
  * moved some generic cg code around
  + tfputype added
  * ...
2003-09-03 11:18:36 +00:00
daniel
889bd81bdb * Register allocator bugfix for h2pas 2003-08-23 10:46:21 +00:00
Jonas Maebe
4f8c390198 * fixed regvars so they work with newra (at least for ppc)
* fixed some volatile register bugs
  + -dnotranslation option for -dnewra, which causes the registers not to
    be translated from virtual to normal registers. Requires support in
    the assembler writer as well, which is only implemented in aggas/
    agppcgas currently
2003-08-17 16:59:20 +00:00
daniel
7d3bfaaed4 * Precoloured nodes now have an infinite degree approached with 255,
like they should.
2003-08-17 14:32:48 +00:00
daniel
45f9851e87 * Another register allocator bug fixed.
* cpu_registers set to 6 for i386
2003-08-17 08:48:02 +00:00
daniel
42c320cb29 * cs_regalloc renamed to cs_regvars to avoid confusion with register
allocator
  * Some preventive changes to i386 spillinh code
2003-08-09 18:56:54 +00:00
daniel
557ac8b02e * Fixed a register allocator bug
* Figured out why -dnewra generates superfluous "mov reg1,reg2"
    statements: changes in location_force. These moves are now no longer
    constrained so they are optimized away.
2003-08-03 14:09:50 +00:00
Jonas Maebe
7bc1557f5c * add_edges_used() is now also called for registers allocated with
getexplicitregisterint()
  * writing the intereference graph is now only done with -dradebug2 and
    the created files are now called "igraph.<module_name>"
2003-07-21 13:32:39 +00:00
daniel
268bfcf784 * Fixed register allocator. *Lots* of fixes. 2003-07-06 15:31:20 +00:00
Jonas Maebe
80d6905b7b * fixed my previous completely broken commit. It's not perfect though,
registers > last_supreg and < max_intreg may still be "translated"
2003-07-06 15:00:47 +00:00
Jonas Maebe
b1917a614b * support integer registers that are not managed by newra (ie. don't
translate register numbers that fall outside the range
    first_supreg..last_supreg)
2003-07-06 14:45:05 +00:00
peter
b7d99ec934 * paraloc splitted in callerparaloc,calleeparaloc
* sparc calling convention updates
2003-07-02 22:18:04 +00:00
Jonas Maebe
404d344d92 * lots of newra fixes (need getfuncretparaloc implementation for i386)!
* renamed all_intregisters to volatile_intregisters and made it
    processor dependent
2003-06-17 16:34:44 +00:00
Jonas Maebe
d29c96896f * fixed newra cycle for x86
* added constants for indicating source and destination operands of the
    "move reg,reg" instruction to aasmcpu (and use those in rgobj)
2003-06-14 14:53:50 +00:00
peter
0dceec9a64 * current_procdef removed, use current_procinfo.procdef instead 2003-06-13 21:19:30 +00:00
peter
d179aea20d * ungetregisterfpu gets size parameter 2003-06-12 21:11:10 +00:00
peter
a0b9306652 * newra compiles for sparc 2003-06-12 16:43:07 +00:00
Jonas Maebe
55509b199b * (de)allocation of registers for parameters is now performed properly
(and checked on the ppc)
  - removed obsolete allocation of all parameter registers at the start
    of a procedure (and deallocation at the end)
2003-06-09 14:54:26 +00:00
peter
d91c880148 * cg.a_load_* get a from and to size specifier
* makeregsize only accepts newregister
  * i386 uses generic tcgnotnode,tcgunaryminus
2003-06-03 21:11:09 +00:00
daniel
41e0bc4cec * Register allocator finished 2003-06-03 13:01:59 +00:00
peter
230a14ff68 * getregisterfpu size parameter added
* op_const_reg size parameter added
  * sparc updates
2003-06-01 21:38:06 +00:00
Jonas Maebe
f67e370ce1 * set inital costs of assigning a variable to a register to 120 for
non-i386, because the used register must be store to memory at the
    start and loaded again at the end
2003-05-31 20:31:11 +00:00
Jonas Maebe
0357f71e14 * fixed several regvar related bugs for non-i386. make cycle with -Or now
works for ppc
2003-05-30 18:55:21 +00:00
Jonas Maebe
f433c21ead * use as little different registers on the ppc until newra is released,
since every used register must be saved
2003-05-30 12:36:13 +00:00
Jonas Maebe
cb279b2029 * changed tt_persistant to tt_persistent :)
* tempcreatenode now doesn't accept a boolean anymore for persistent
    temps, but a ttemptype, so you can also create ansistring temps etc
2003-05-17 13:30:08 +00:00
peter
abca40f041 * regvar fixes 2003-05-16 14:33:31 +00:00
daniel
b899ea5469 * Bug fix in simplify 2003-04-26 20:03:49 +00:00
peter
f4b818fc1d * removed funcretn,funcretsym, function result is now in varsym
and aliases for result and function name are added using absolutesym
  * vs_hidden parameter for funcret passed in parameter
  * vs_hidden fixes
  * writenode changed to printnode and released from extdebug
  * -vp option added to generate a tree.log with the nodetree
  * nicer printnode for statements, callnode
2003-04-25 20:59:33 +00:00
daniel
6aa01a99a9 * Ifdefs around a lot of calls to cleartempgen
* Fixed registers that are allocated but not freed in several nodes
  * Tweak to register allocator to cause less spills
  * 8-bit registers now interfere with esi,edi and ebp
    Compiler can now compile rtl successfully when using new register
    allocator
2003-04-25 08:25:26 +00:00
peter
c351d2a524 * compile fix for no-newra 2003-04-23 20:23:06 +00:00
daniel
9e2084b8d5 * Further register allocator work. Compiler now smaller with new
allocator than without.
  * Somebody forgot to adjust ppu version number
2003-04-23 14:42:07 +00:00
peter
47489f2376 * firstpass uses expectloc
* checks if there are differences between the expectloc and
    location.loc from secondpass in EXTDEBUG
2003-04-22 23:50:22 +00:00
daniel
25059e21b6 + Implemented the actual register allocator
+ Scratch registers unavailable when new register allocator used
  + maybe_save/maybe_restore unavailable when new register allocator used
2003-04-22 10:09:34 +00:00
peter
e21dab9739 * count address regs separate 2003-04-21 19:16:49 +00:00
daniel
0c93e261e7 * Added some code to keep track of move instructions in register
allocator
2003-04-17 16:48:21 +00:00
daniel
a32926e2fc * Some work on interference graph construction 2003-04-17 07:50:24 +00:00
peter
c4ddcc78a8 * generic constructor working for i386
* remove fixed self register
  * esi added as address register for i386
2003-03-28 19:16:56 +00:00
Jonas Maebe
d168ae15df * lots of new regallocator fixes, both in generic and ppc-specific code
(ppc compiler still can't compile the linux system unit though)
2003-03-11 21:46:24 +00:00
olle
03f1fef7aa + added cutils to the uses clause 2003-03-09 21:18:59 +00:00
daniel
eedc447400 + Added newra version of Ti386shlshrnode
+ Added interference graph construction code
2003-03-08 20:36:41 +00:00
daniel
fb55235acc * Work to handle new register notation in ag386nsm
+ Added newra version of Ti386moddivnode
2003-03-08 13:59:16 +00:00
daniel
2801609d3f * Created newra version of secondmul in n386add.pas 2003-03-08 10:53:48 +00:00
daniel
e8f649f5c2 + $define newra will enable new register allocator
+ getregisterint will return imaginary registers with $newra
  + -sr switch added, will skip register allocation so you can see
    the direct output of the code generator before register allocation
2003-03-08 08:59:07 +00:00
daniel
5912bc972c * Fixed ungetreference 2003-02-26 20:50:45 +00:00
daniel
4c450c3bb0 * Fixed a few issues 2003-02-19 22:39:56 +00:00
daniel
86bcea6ef5 * Code generator converted to new register notation
- Horribily outdated todo.txt removed
2003-02-19 22:00:14 +00:00
carl
59d3edeec7 * Several bugfixes for m68k target (register alloc., opcode emission)
+ VIS target
  + Generic add more complete (still not verified)
2003-02-02 19:25:54 +00:00
daniel
55a161bbbf * Tregister changed into a record 2003-01-08 18:43:56 +00:00