Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Mar 2004 10:28:19 -0500 (EST)
From:      Daniel Eischen <eischen@vigrid.com>
To:        Peter Grehan <grehan@freebsd.org>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: User-space context switch and floating-point
Message-ID:  <Pine.GSO.4.10.10403041024580.27690-100000@pcnet5.pcnet.com>
In-Reply-To: <4046DB3B.9000604@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 4 Mar 2004, Peter Grehan wrote:

> > So if the caller saves the registers before pthread_mutex_lock(), why
> >  do they also need to be saved by _thr_getcontext (which may be a 
> > result of pthread_mutex_lock() in this example)?
> 
>   I was a bit vague. Here's relevant text from the SVR4 PPC ABI:
> 
> "Registers r1, r14 through r31, and f14 through f31 are nonvolatile;
> that is, they "belong" to the calling function. A called function shall
> save these registers  values before it changes them, restoring their
> values before it returns. Registers r0, r3 through r12, f0 through f13,
> and the special purpose registers CTR and XER are volatile; that is,
> they are not preserved across function calls."
> 
>   and:
> 
> "r3 through r10 and f1 through f8:
> These sets of volatile registers may be modified across function
> invocations and shall therefore be presumed by the calling function to
> be destroyed. They are used for passing parameters to the called
> function; see Parameter Passing in this chapter. In addition, registers
> r3, r4, and f1 are used to return values from the called function, as
> described in Return Values."
> 
>   So as a context-save function, you have to assume that f14-31 are being
> used by the caller and save them. Problem is, these regs are 64-bits
> on PPC, touching them will cause an FP trap and from then on force
> full kernel FP save/restore for that proc's td, which is big performance
> hit for the majority of non-FP threads userland threads.

Yes, for the first time.  Thread switches that follow won't cause
the trap, until the process (kernel thread really) gets swapped
out/interrupted.

I think the x86 is similar when saving/restoring the FP control
world.

>   The Altivec register file is a bit better since it has a register to
> inform context switch code which of the 32 128-bit registers are in
> use.

-- 
Dan Eischen



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10403041024580.27690-100000>