User-space context switch and floating-point
Peter Grehan
grehan at freebsd.org
Wed Mar 3 00:14:29 PST 2004
Here's the comment I currently have in libpthread/.../powerpc/context.S:
* XXX XXX
* Floating-point is a big issue. Since there's no way to determine
* if the caller has used FP, all volatile register need to be saved.
* If FP hasn't been used, this results in a lazy FP exception in
* the kernel and from that point on FP is always switched in/out
* for the thread, which may be a big performance drag for the system.
* An alternative is to use the the getcontext system call, which
* will do the right thing for floating point but will save all
* registers rather than the caller-saved subset, and has the overhead
* of a syscall.
* Maybe another option would be to give a light-weight way for a
* thread to determine if FP is in used: perhaps a syscall that
* returns this info immediately in the asm traphandler, or an
* OSX-style read-only per-thread page with a flag to indicate FP state.
Any opinions ? I noticed the alpha/sparc64 routines don't save FP.
later,
Peter.
More information about the freebsd-threads
mailing list