[EMAIL PROTECTED] writes:

> Here I've  used a macro to keep track of the farthest place reached in the 
> code. As you can see, I've even tried to set it up in such a way that it 
> will use a register to access the value. However, I don't get that result, 
> as I guess that is optimized out. Instead each comparison uses the full 
> address of the array, creating two more words for the read and for the 
> write. I'd prefer a sequence to read something like:
> 
> movel #main_line, %a0 /* only once, at the start of the function */
> moveq #(LINE-1), %d0
> cmpl %a0@, %d0
> blt skip
> moveb #LINE, %d0
> movel %d0,%a0@
> skip: ...
> 
> I haven't seen any options that encourage more use of indirect addressing. 
> Are there any that I have missed? If not, I assume I will need to work 
> with the machine description. I've downloaded the gcc internals book, but 
> it's a lot of material and it's hard to figure out where to start. Can 
> anybody point me in the right direction?

The first thing to try is to use TARGET_ADDRESS_COST to make the cost
of register indirect smaller than the cost of an absolute address
reference, at least when optimize_space is true.

m68k.c doesn't seem to have a definition of TARGET_ADDRESS_COST, so
you will have to add one.

You should also take a look at TARGET_RTX_COSTS.

Ian

Reply via email to