Date: Thu, 10 Jan 2002 08:55:38 -0800 From: Alfred Perlstein <bright@mu.org> To: Bruce Evans <bde@zeta.org.au> Cc: Peter Wemm <peter@wemm.org>, Nate Williams <nate@yogotech.com>, Dan Eischen <eischen@vigrid.com>, Archie Cobbs <archie@dellroad.org>, arch@FreeBSD.ORG Subject: Re: Request for review: getcontext, setcontext, etc Message-ID: <20020110085538.A7984@elvis.mu.org> In-Reply-To: <20020111000813.N12236-100000@gamplex.bde.org>; from bde@zeta.org.au on Fri, Jan 11, 2002 at 12:14:58AM %2B1100 References: <20020110090055.B28BC38CC@overcee.netplex.com.au> <20020111000813.N12236-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
* Bruce Evans <bde@zeta.org.au> [020110 05:14] wrote:
> On Thu, 10 Jan 2002, Peter Wemm wrote:
>
> > Nate Williams wrote:
> > > Hmm, IIRC, Java's green threads saves the FP context everytime it does a
> > > thread switch, since it has no way of knowing if the thread was doing FP
> > > context. Is there a way to force get/setcontext to always/conditionally
> > > save the FP context, for applications that either know they need to have
> > > it saved?
> >
> > Exactly the problem. Userland cannot tell if it has touched FP or not
> > except by touching it. This is where a system call is more efficient since
> > to save FP context you are doing trap recovery on top of doing the work.
>
> Actually, userland can look at the state bit in %msw (on i386's) to
> tell if it can look at the state without trapping. However, this is
> not very useful. The state will often be in the kernel, and then
> userland will have to trap to the kernel too look at it. The trap
> may as well be a syscall that fetches all the state.
The userland code might request that a special word be written to
in user memory when the FP trap is taken.
int fpnotify(int *flag);
/* scheduling... */
syscall_fpnotify(&fpused);
/* run thread */
/* back to scheduler */
if (fpused) { /* kernel has suword'd that the fp was dirtied */
syscall_fpclear_and_notify(&fpused); /* reset state */
} else { /* fp wasn't touched */
}
The idea being to only require the syscall to reset it if it's
used and you are switching between fp and non-fp using threads.
-Alfred
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020110085538.A7984>
