diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-21 15:04:48 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-21 15:04:48 +0100 |
commit | 5a059477f8066f25ece1ba2b8c49ab8ea24d19de (patch) | |
tree | 98307032821f8c3fcc6858eafbd4852ba207b64a /sys/src/9/xen | |
parent | 932995bb27fa517192cb4130d3e79593a8904763 (diff) |
pc, xen: move fpu setup/fork/save/restore handlers to pc/fpu.c
Diffstat (limited to 'sys/src/9/xen')
-rw-r--r-- | sys/src/9/xen/fns.h | 4 | ||||
-rw-r--r-- | sys/src/9/xen/main.c | 41 |
2 files changed, 9 insertions, 36 deletions
diff --git a/sys/src/9/xen/fns.h b/sys/src/9/xen/fns.h index bc87a60ef..32a101935 100644 --- a/sys/src/9/xen/fns.h +++ b/sys/src/9/xen/fns.h @@ -11,6 +11,10 @@ int cmpswap486(long*, long, long); void (*coherence)(void); void cpuid(int, int, ulong regs[]); void fpuinit(void); +void fpuprocsetup(Proc*); +void fpuprocfork(Proc*); +void fpuprocsave(Proc*); +void fpuprocrestore(Proc*); int cpuidentify(void); void cpuidprint(void); void (*cycles)(uvlong*); diff --git a/sys/src/9/xen/main.c b/sys/src/9/xen/main.c index 22fe77dd4..61bf5bf4c 100644 --- a/sys/src/9/xen/main.c +++ b/sys/src/9/xen/main.c @@ -322,39 +322,22 @@ confinit(void) } } -/* - * set up floating point for a new process - */ void -procsetup(Proc*p) +procsetup(Proc *p) { - p->fpstate = FPinit; - fpoff(); + fpuprocsetup(p); } void procfork(Proc *p) { - int s; - - /* save floating point state */ - s = splhi(); - switch(up->fpstate & ~FPillegal){ - case FPactive: - fpsave(up->fpsave); - up->fpstate = FPinactive; - case FPinactive: - while(p->fpsave == nil) - p->fpsave = mallocalign(sizeof(FPsave), FPalign, 0, 0); - memmove(p->fpsave, up->fpsave, sizeof(FPsave)); - p->fpstate = FPinactive; - } - splx(s); + fpuprocfork(p); } void procrestore(Proc *p) { + fpuprocrestore(p); } /* @@ -363,21 +346,7 @@ procrestore(Proc *p) void procsave(Proc *p) { - if(p->fpstate == FPactive){ - if(p->state == Moribund) - fpclear(); - else{ - /* - * Fpsave() stores without handling pending - * unmasked exeptions. Postnote() can't be called - * so the handling of pending exceptions is delayed - * until the process runs again and generates an - * emulation fault to activate the FPU. - */ - fpsave(p->fpsave); - } - p->fpstate = FPinactive; - } + fpuprocsave(p); /* * While this processor is in the scheduler, the process could run |