Subject: detecting FPU
To: None <macbsd-development@NetBSD.ORG>
From: Ken Nakata <kxn3796@hertz.njit.edu>
List: macbsd-development
Date: 11/22/1994 13:30:36
I wrote this small assembly routine to detect whether or not FPU is
installed...  It's been a long time since I've written 68k assembly
last time, and it was Motorola syntax, so I'm not so sure if it's
correct or not.  But you'll get the basic idea.  Another problem is
that I can't decide where in the kernel I should put a call to the
routine.

I'm assuming that stack is available and it's running in supervisor
mode.  It is intended to return 1 in d0 if there is an FPU installed,
0 otherwise.

Could someone verify or even better test this code?

Ken

---
#include "assym.s"
#include "vectors.s"

.text
	.globl _fpudetect
_fpudetect:
	moveml	a0-a2,sp@-
	lea	nofpu,a0		| temporary trap handler
	movl	vbr,a1
	lea	a1@(11*4),a1		| get vector address
	movl	a1@,a2			| save old f-line trap vector 
	movl	a0,a1@			| set new one
	fmovl	d0,fp0			| try an fp instruction
	movq	#1,d0			| fell through -- we have an fpu
	bra	exit

nofpu:					| oh uh, caught an f-line trap
	addq	#8,sp			| throw away stack frame
	movq	#0,d0			| we don't have an fpu
exit:
	movl	a2,a1@			| restore old f-line vector
	moveml	sp@+,a0-a2
	rts