[fpc-devel] register allocator seems to be using S20 for two things at the same time (related to armhf porting work)

Daniël Mantione daniel.mantione at freepascal.org
Mon Mar 19 07:48:19 CET 2012



Op Sun, 18 Mar 2012, schreef peter green:

> My suspiscion was that the compiler was trying to spill but not actually 
> generating any code to implement the spill.

> I added a debug writeln to setbitmap and it does seem to be being called with 
> both 50,70 and 70,50. Full output is at http://pastebin.com/3jd8zNkh

Okay, it is quite unlikely that the register allocator itself ignores such 
an interference, so you may be rigth it tries to spill but nothing 
happens.

You can check this by adding a breakpoint in Trgobj.spill_registers and 
and check the contents of spillednodes, or the value of t in the loop that 
iterates through it.

If the register is being spilled, Trgobj.spill_register will call 
Trgobj.instr_spill_register to modify an instruction using the 
register. This procedure will in turn call the CPU specific procedures 
Trgcpu.do_spill_read and Trgcpu.do_spill_written to modify the code.

Do_spill_read and do_spill_written are the routines to check if they 
contain the right support for mregisters (I don't see any specific code 
there at the moment).

Daniël


More information about the fpc-devel mailing list