PowerPC FP handling weakness.

Joel Sherrill joel.sherrill at OARcorp.com
Sun Oct 1 23:51:29 UTC 2000


Could you submit this as a patch relative to the current source?
This is the ideal way to handle this.  I recall this is also
possible on the i386.

Duncan Smith wrote:
> 
> At 8:04 PM +0400 9/29/00, Sergei Organov wrote:
> >Joel Sherrill <joel.sherrill at OARcorp.com> writes:
> >
> >> Eric Valette wrote:
> >> >
> >> > Sergei Organov wrote:
> >> > >
> >> > > Eric Valette <valette at crf.canon.fr> writes:
> >> > >
> >> > > [...]
> > > > > > Why don't you send a patch that does deffered FPU registers saving... In
> >...
> 
> > > I think that in a system where all tasks are FP deferred switching is
> >> equivalent to on every switch.  Think about it.  All deferred switching
> >> says is that we won't save the context until another FP task is switched
> >> in.  This is every time.  Not as clear as it should be but technically
> > > OK.
> 
> At Flavors we have been using RTEMS for 4 or 5 years on 604/604e MPC105/106, VME boards.  Although the version we use is an old one, the BSP requirement is probably similar.
> 
> In our own BSP we do lazy FPU context switching based on actual use of FP through the FP fault.
> 
> All processes are FP capable.
> 
> Interrupt contexts may also use FP and the interrupt Frames each have an FP save area.  Again the register saving/loading is done on demand.  Here is my comment from my level 0 handler.
> 
> d
> 
> # ###############################################################################
> #
> #       FP Unavailable Handler (0x800) Level 0
> #
> #       N.B. ASR's MAY NOT safely use FP, due to limitations imposed by the
> #       EE Handler, and related elements of asynchronous calls to the ASR.
> #       One solution to this is to link FP_Contexts in EE frames.
> #
> #       If ( <In_an_ISR> )
> #               if ( <ISR_doesn't_own_FP> )
> #                       {
> #                       if ( <Some_Other_ISR_Owns_FP> )
> #                               Save_ISR_Context( <Other_ISR_Context> );
> #                       else If (_Thread_Allocated_fp != NULL)
> #                               {
> #                               Save_Context( _Thread_Allocated_fp );
> #                               _Thread_Allocated_fp = NULL;
> #                               }
> #                       Restore_ISR_Context( <This_ISR_Context> );
> #                       <ISR_owns_FP>
> #                       }
> #       else If (_Thread_Allocated_fp != _Thread_Executing)
> #               {
> #               If (_Thread_Allocated_fp != NULL)
> #                       Save_Context( _Thread_Allocated_fp );
> #               _Thread_Allocated_fp = _Thread_Executing;
> #               Restore_Context( _Thread_Allocated_fp );
> #               }

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel at OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985



More information about the users mailing list