99 lines
1.8 KiB
C
99 lines
1.8 KiB
C
|
#include "u.h"
|
||
|
#include "../port/lib.h"
|
||
|
#include "mem.h"
|
||
|
#include "dat.h"
|
||
|
#include "fns.h"
|
||
|
|
||
|
int
|
||
|
fpudevprocio(Proc* proc, void* a, long n, uintptr offset, int write)
|
||
|
{
|
||
|
/*
|
||
|
* Called from procdevtab.read and procdevtab.write
|
||
|
* allow user process access to the FPU registers.
|
||
|
* This is the only FPU routine which is called directly
|
||
|
* from the port code; it would be nice to have dynamic
|
||
|
* creation of entries in the device file trees...
|
||
|
*/
|
||
|
USED(proc, a, n, offset, write);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpunotify(Ureg*)
|
||
|
{
|
||
|
/*
|
||
|
* Called when a note is about to be delivered to a
|
||
|
* user process, usually at the end of a system call.
|
||
|
* Note handlers are not allowed to use the FPU so
|
||
|
* the state is marked (after saving if necessary) and
|
||
|
* checked in the Device Not Available handler.
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpunoted(void)
|
||
|
{
|
||
|
/*
|
||
|
* Called from sysnoted() via the machine-dependent
|
||
|
* noted() routine.
|
||
|
* Clear the flag set above in fpunotify().
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpuprocsave(Proc*)
|
||
|
{
|
||
|
/*
|
||
|
* Called from sched() and sleep() via the machine-dependent
|
||
|
* procsave() routine.
|
||
|
* About to go in to the scheduler.
|
||
|
* If the process wasn't using the FPU
|
||
|
* there's nothing to do.
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpuprocrestore(Proc*)
|
||
|
{
|
||
|
/*
|
||
|
* The process has been rescheduled and is about to run.
|
||
|
* Nothing to do here right now. If the process tries to use
|
||
|
* the FPU again it will cause a Device Not Available
|
||
|
* exception and the state will then be restored.
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpusysprocsetup(Proc*)
|
||
|
{
|
||
|
/*
|
||
|
* Disable the FPU.
|
||
|
* Called from sysexec() via sysprocsetup() to
|
||
|
* set the FPU for the new process.
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
void
|
||
|
fpuinit(void)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int
|
||
|
fpuemu(Ureg* ureg)
|
||
|
{
|
||
|
int nfp;
|
||
|
|
||
|
if(waserror()){
|
||
|
splhi();
|
||
|
postnote(up, 1, up->errstr, NDebug);
|
||
|
return 1;
|
||
|
}
|
||
|
spllo();
|
||
|
nfp = fpiarm(ureg);
|
||
|
splhi();
|
||
|
poperror();
|
||
|
|
||
|
return nfp;
|
||
|
}
|