123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #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
- fpusysrfork(Ureg*)
- {
- /*
- * Called early in the non-interruptible path of
- * sysrfork() via the machine-dependent syscall() routine.
- * Save the state so that it can be easily copied
- * to the child process later.
- */
- }
- void
- fpusysrforkchild(Proc*, Ureg *, Proc*)
- {
- /*
- * Called later in sysrfork() via the machine-dependent
- * sysrforkchild() routine.
- * Copy the parent FPU state to the child.
- */
- }
- 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;
- }
|