Commit Graph

5397 Commits

Author SHA1 Message Date
olle
c2fe8dbd99 * merged macos entry/exit code generation into the general one. 2003-08-08 15:49:24 +00:00
daniel
a4495e3867 * Made code generator reverse or/add/and/xor/imul instructions when
possible to reduce the slowdown of spills.
2003-08-03 20:38:00 +00:00
daniel
4984afb8f0 - Removed cmpop from Ti386addnode.second_addstring 2003-08-03 20:19:43 +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
florian
612a8cbbb1 * basic stuff fixed 2003-07-26 00:55:57 +00:00
Jonas Maebe
a783aea0b9 * fixed bogus abstract method warnings 2003-07-25 09:54:57 +00:00
Jonas Maebe
3c5d94dc64 * fixed nil pointer access 2003-07-24 10:45:40 +00:00
Jonas Maebe
177d57f22c * split en_exit_code into a part that may allocate a register and a part
that doesn't, so the former can be done before the register colouring
    has been performed
2003-07-23 11:04:15 +00:00
Jonas Maebe
af784cfb1e * final (?) fix to in-code 2003-07-23 11:02:53 +00:00
Jonas Maebe
a3cb0d2002 * don't use rg.getregisterint() anymore in g_stackframe_entry_*, because
the register colouring has already occurred then, use a hard-coded
    register instead
2003-07-23 11:02:23 +00:00
Jonas Maebe
355f84758e * several rg.allocexplicitregistersint/rg.deallocexplicitregistersint
pairs round calls to helpers
2003-07-23 11:01:14 +00:00
Jonas Maebe
356ee447ba * "lastsaveintreg" is RS_R31 instead of RS_R27 with -dnewra, because
there are no scratch regs anymore
2003-07-23 11:00:09 +00:00
Jonas Maebe
5ab3ea0af5 - disabled some debugging code 2003-07-23 10:58:06 +00:00
florian
5aba45edbf * very basic stuff for the arm 2003-07-21 16:35:30 +00:00
Jonas Maebe
d191387d5a * fixed 64bit int results with -dnewra (you can't free both registers and
then allocate two new ones, because then the registers could be reversed
    afterwards -> you get something like "movl %eax, %edx; movl %edx,%eax")
2003-07-21 13:51: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
florian
d2035fd6b4 * very basic stuff for the arm 2003-07-21 11:52:57 +00:00
Jonas Maebe
d73acd12f6 * fixed newra bug due to the fact that we sometimes need a temp reg
when loading/storing to memory (base+index+offset is not possible)
    and because a reference is often freed before it is last used, this
    temp register was soemtimes the same as one of the reference regs
2003-07-20 20:39:20 +00:00
Jonas Maebe
db3bd69a18 * fixed bug in tcginnode.pass_2 2003-07-20 18:03:27 +00:00
Jonas Maebe
66fcf33869 * fix for threadvars with -dnewra 2003-07-20 16:26:43 +00:00
Jonas Maebe
af61f830d0 * fixed bug in g_concatcopy with -dnewra 2003-07-20 16:15:58 +00:00
peter
1b633246b9 * sparc fixes 2003-07-08 21:23:24 +00:00
peter
09ed47cba6 * don't allow add/assignments for formaldef
* formaldef size changed to 0
2003-07-08 15:20:56 +00:00
peter
3d85d9c2bd * Fix halt() call 2003-07-07 19:59:41 +00:00
peter
6cd9e5efc7 * big endian first allocates high 2003-07-06 22:10:56 +00:00
peter
d03fd8f7e0 * operand order of cmp fixed 2003-07-06 22:10:13 +00:00
peter
d0e4a452e4 * signed compare fixed 2003-07-06 22:09:50 +00:00
peter
3f97c26b4b * shr and div fixed 2003-07-06 22:09:32 +00:00
Jonas Maebe
f909d6a620 * fixed ppc compilation problems and changed VOLATILE_REGISTERS for x86
so that it doesn't include ebp and esp anymore
2003-07-06 21:50:33 +00:00
Jonas Maebe
d514f33ce4 * committed wrong file previously :( 2003-07-06 21:26:06 +00:00
Jonas Maebe
1846337739 * fixed ppc compiler 2003-07-06 20:25:03 +00:00
peter
32d076480b * framepointer fixes for sparc
* parent framepointer code more generic
2003-07-06 17:58:22 +00:00
peter
ae8e74b45b * cleanup and first sparc implementation 2003-07-06 17:44:12 +00:00
daniel
268bfcf784 * Fixed register allocator. *Lots* of fixes. 2003-07-06 15:31:20 +00:00
Jonas Maebe
117d6934a1 + first spill_registers implementation, most likely still very buggy 2003-07-06 15:29:06 +00:00
Jonas Maebe
2763f461ce * VOLATILE_REGISTERS was wrong (it was more or less the inverted set
of what it had to be :/ )
2003-07-06 15:28:24 +00:00
Jonas Maebe
cc6a8fbe91 * make sure all registers except r0 are handled by the register
allocator for -dnewra
2003-07-06 15:27:44 +00:00
Jonas Maebe
acb3078279 * newra fix for threadvars 2003-07-06 15:25:54 +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
Jonas Maebe
a82c9531b7 * fixed register leak
* changed a couple of case-statements to location_force_reg()
2003-07-06 14:28:04 +00:00
Jonas Maebe
b69219bae4 * also generate the caller paraloc info of a procedure if it doesn't exist
yet at the start of pass_2
2003-07-06 10:18:47 +00:00
peter
af3946938a * check if owner.defowner is valid when checking private/protected 2003-07-05 22:41:59 +00:00
Jonas Maebe
14bd8b899a * create_paraloc_info() is now called separately for the caller and
callee info
   * fixed ppc cycle
2003-07-05 20:21:26 +00:00
Jonas Maebe
cc7f340ac8 * set pi_do_call if range/overflow checking is on 2003-07-05 20:15:24 +00:00
Jonas Maebe
0c65bc5a8c * create_paraloc_info() is now called separately for the caller and
callee info
   * fixed ppc cycle
2003-07-05 20:13:03 +00:00
Jonas Maebe
70a5d1e4c2 * create_paraloc_info() is now called separately for the caller and
callee info
  * fixed ppc cycle
2003-07-05 20:11:41 +00:00
Jonas Maebe
37d266b63d * fixed range check errors 2003-07-05 20:07:24 +00:00
Jonas Maebe
024590b0fa * fixed some range check errors that occurred on big endian systems
* slightly optimized the swap*() functions
2003-07-05 20:06:28 +00:00
pierre
ecaa77a503 * single threadvar debugging support 2003-07-04 22:41:41 +00:00