From owner-freebsd-arch Mon Jan 7 13:30:59 2002 Delivered-To: freebsd-arch@freebsd.org Received: from ns.yogotech.com (ns.yogotech.com [206.127.123.66]) by hub.freebsd.org (Postfix) with ESMTP id 4641C37B41A for ; Mon, 7 Jan 2002 13:30:41 -0800 (PST) Received: from caddis.yogotech.com (caddis.yogotech.com [206.127.123.130]) by ns.yogotech.com (8.9.3/8.9.3) with ESMTP id OAA17668; Mon, 7 Jan 2002 14:29:45 -0700 (MST) (envelope-from nate@yogotech.com) Received: (from nate@localhost) by caddis.yogotech.com (8.11.6/8.11.6) id g07LTiP00152; Mon, 7 Jan 2002 14:29:44 -0700 (MST) (envelope-from nate) From: Nate Williams MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15418.4935.657413.312252@caddis.yogotech.com> Date: Mon, 7 Jan 2002 14:29:43 -0700 To: Daniel Eischen Cc: Nate Williams , Dan Eischen , Peter Wemm , Archie Cobbs , Alfred Perlstein , arch@FreeBSD.ORG Subject: Re: Request for review: getcontext, setcontext, etc In-Reply-To: References: <15418.3903.102913.925450@caddis.yogotech.com> X-Mailer: VM 6.96 under 21.1 (patch 14) "Cuyahoga Valley" XEmacs Lucid Reply-To: nate@yogotech.com (Nate Williams) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG > > > > > What guarantees do you have that the FP state is restored > > > > > to where it was prior to calling foo_fp_munch_lots_more()? > > > > > > > > Because the code (and code similar to it) is called by the thread > > > > scheduler when a thread switches context. > > > > > > > > Above, if the thread switches context (involuntarily or voluntarily), > > > > the code I posted (and others routines similar to it it) also saves the > > > > context, and just before the context is switched back to the above > > > > thread, the FPU context is restored (along with all of the other > > > > information necessary to restore the thread context). > > > > > > > > Not all thread switches are done using yield. > > > > > > I am only concerned with voluntary switches; forget about signals > > > and preemptions. The threads library knows the difference between > > > voluntary and involuntary switches. Involuntary switches always > > > come from the kernel (in libc_r via signals) > > > > The JDK is the same. > > > > > and have the full FPU state saved (and restored when resumed). > > > > Is this done with fsave and frstor, which saves the entire context? > > Where is this done in the libc_r code? (I looked on my 4.5-PRE box, but > > nothing jumped out at me in grep search.) > > Search for FP_SAVE_UC and FP_RESTORE_UC. You should find it in > pthread_private.h (where it is defined) and referenced in > uthread_kern.c and uthread_sig.c (src/lib/libc_r/uthread/). Found it. However, I could find the definition for mc_fpregs. Also, forgive my ignorance, but why are we using fnsave instead of fsave? From my reading of the x86 manuals, it would seem that there is the possibility of getting bogus FPU results with fnsave (vs. fsave) since by using fsave, we give the FPU a chance to finish up the current FPU operations before we save the state? I could see where they might be a race where we might end up storing intermediate results of the FPU in some instances. Or, is there something else I'm missing? (The reason I ask is that the JDK uses fsave to be 'safe', but maybe it's not buying us anything other than warm fuzzies. :) Nate To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message