Stefan Reinauer stepan@suse.de writes:
Hi,
I'm running out of registers with the Quartet code, I think it's in spd_set_memclk(). That function has quite a lot of state variables, so it seems hard to optimize registers away. The code goes fine without the smbus_write_byte() but those are needed to select the correct spdrom. Is it viable to add a couple of hooks to the code to trigger selection of the hub channel? I guess doing this with every spd_read_byte is quite some overkill and we might save some registers that way.
That sounds like a reasonable idea.
To confirm where you are running out of registers I would suggest commenting out the code in question to see if it compiles without it. Knowing that should help craft a solution.
Depending on the nature of the problem and how we are running out of registers it might make sense to store a couple of values in a single variable.
If you want to keep it from running forever before it gives up I suggest -fmax-allocation-passes=8 -fdebug-live-range-conflicts.
The -fdebug-live-range-conflicts is not terribly interesting except it tells you how many passes romcc goes through before it gives up.
The -fmax-allocation-passes=8 sets the limit on the number of register allocation passes romcc will use. The most I have seen it make and succeed in my regression tests is 6. And the default is 100.
Eric