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
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to