Re: NetBSD on SH-4A

"David S. Alessio" <[email protected]> Tue, 16 Jun 2009 11:49:18 -0700
Newsgroups gmane.os.netbsd.ports.sh3
Message-ID <[email protected]>
Valeriy E. Ushakov wrote:
> On Mon, Jun 15, 2009 at 15:18:01 -0700, David S. Alessio wrote:
>
>   
>> I'd like to see the SH-4A fully supported.  Any suggestions on the best 
>> path to get there?
>>
>> The approach that first comes to my mind is:
>> 1)   Add kernel support for the FPU to the SH-4 arch
>>    Has anyone examined this?  If so, any thoughts/suggestions on the 
>> "right way" to do it?
>>    I'd like to see a lazy FPU context switch.
>>     
>
> Look at how other arches do it and do the same for SH-4 FPU.  FPU
> autodetection would be nice, but compile-time kernel option could do
> for now.  Shouldn't be hard, but I never got around to it as real life
> keep interfering.  If you could work on it and contribute the code
> back, that would be very helpful 
>   
How would autodetection be helpful for SH-4 and SH-4A?  I don't think 
we'll see many [any] SH-4A-DSP chips; and all SH-4/4A have an FPU.


> (we don't have much NetBSD/sh3
> developers).
>
>   
Well, you've got one more now ;)
>> 2)  Recompile the SH-4 world with FPU support
>>    (gcc default integer division should not use the FPU)
>>     
>
> Not sure it's possible without hacking gcc as with -m4 it generates
> calls to __sdivsi3_i4 and expects its result in FPUL.
>   
gcc has an SH-specific option  "-mdiv=STRATEGY" where STRATEGY is a menu 
of division options.  I believe gcc-4.3.3 by default uses "-mdiv=call" 
which implements the inv.minlat strategy (integer division instructions).

Which begs the questions:  When will NetBSD/ports support gcc-4.3.3?  Is 
there anything standing in the way of updating to 4.3.3 as the default 
gcc version?

> Why is this particular requirement?
>   
A few reasons:
    o    any integer division in kernel code should use DIV0, DIV1 
instructions (not the FPU).
    o   Using the FPU for integer division results in a slight win at a 
micro-benchmark level, but results in a net loss at the macro-benchmark 
level.  If we assume several applications running, every thread 
performing at least one integer division per time slot, then every 
thread will dirty the FPU and trigger an FPU context save.  This is 
expensive.  Doubly expensive if we use lazy FPU context save -- we'd get 
hit with an FPU exception on just about every context switch
    o   most apps/threads don't use float/double vars and would not need 
the FPU

-david
David.vcf (text/x-vcard, 341 B)
begin:vcard
fn:David S. Alessio
n:Alessio;David S.
org:Systemic Realtime Design, LLC.
adr:;;201 San Antonio Circle, Suite 145;Mountain View;CA;94040;USA
email;internet:[email protected]
title:CTO
tel;work:+1-650-559-8222
tel;fax:+1-650-204-6968
tel;cell:+1-650-248-8867
x-mozilla-html:TRUE
url:www.SysRealTime.com
version:2.1
end:vcard