Subject: Re: com rumblings...
To: Charles M. Hannum <mycroft@MIT.EDU>
From: Garrett D'Amore <garrett_damore@tadpole.com>
List: tech-kern
Date: 06/19/2006 11:53:43
Charles M. Hannum wrote:
> On Mon, Jun 19, 2006 at 11:20:20AM -0700, Bill Studenmund wrote:
>   
>> On Thu, Jun 15, 2006 at 02:38:24PM -0700, Garrett D'Amore wrote:
>>     
>>> I'm not sure how good gcc's optimizer is at detecting that:
>>>
>>>     struct {
>>>        bus_space_handle_t h;
>>>        bus_space_tag_t   t;
>>>     } s;
>>>
>>>     bus_space_write_1(s->t, s->h, OFFSET1, VAL1);
>>>     /* possibly insert code that doesn't modify s */
>>>     bus_space_write_1(s->t, s->h, OFFSET2, VAL2);
>>>
>>> both values of s->t and s->h are really the same and could be cached in
>>> registers without having to dereference thru s for each
>>> bus_space_write_1 call.
>>>       
>> It probably can't assume that if there's a function call in there
>> somewhere. Assign them to local variables & be explicit that they can be
>> cached. :-)
>>     
>
> I thought I already mentioned this, but maybe not.
>
> If you use accessor functions, and mark them "pure", GCC should do CSE
> on the calls.  This is sort of gross, but it would give the effect
> you're looking for.
>   

You did say this.  My understanding is that then the individual ports
should mark the functions as appropriate in their bus.h files.

-- 
Garrett D'Amore, Principal Software Engineer
Tadpole Computer / Computing Technologies Division,
General Dynamics C4 Systems
http://www.tadpolecomputer.com/
Phone: 951 325-2134  Fax: 951 325-2191