diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/9/omap/softfpu.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/9/omap/softfpu.c')
-rwxr-xr-x | sys/src/9/omap/softfpu.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/sys/src/9/omap/softfpu.c b/sys/src/9/omap/softfpu.c new file mode 100755 index 000000000..7f01446c0 --- /dev/null +++ b/sys/src/9/omap/softfpu.c @@ -0,0 +1,119 @@ +#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; +} |