diff options
| author | Brandon Bergren <bdragon@FreeBSD.org> | 2020-12-03 01:39:59 +0000 |
|---|---|---|
| committer | Brandon Bergren <bdragon@FreeBSD.org> | 2020-12-03 01:39:59 +0000 |
| commit | 3de50be851fefcfbca7a2cdecb1e86305cc2531d (patch) | |
| tree | 7cc353eeaaac50317b8286650c5f8a7dd40388c7 /sys | |
| parent | 3921dc1304ee6eea27463fbb0e2acc31ea881403 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/powerpc/include/pcb.h | 10 | ||||
| -rw-r--r-- | sys/powerpc/powerpc/fpu.c | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/sys/powerpc/include/pcb.h b/sys/powerpc/include/pcb.h index 386c7e2a26e3..bff58cfa7bb3 100644 --- a/sys/powerpc/include/pcb.h +++ b/sys/powerpc/include/pcb.h @@ -37,6 +37,8 @@ #ifndef _MACHINE_PCB_H_ #define _MACHINE_PCB_H_ +#include <sys/endian.h> + #include <machine/setjmp.h> #ifndef _STANDALONE @@ -62,8 +64,16 @@ struct pcb { #define PCB_CFSCR 0x40 /* Process had FSCR updated */ struct fpu { union { +#if _BYTE_ORDER == _BIG_ENDIAN double fpr; uint32_t vsr[4]; +#else + uint32_t vsr[4]; + struct { + double padding; + double fpr; + }; +#endif } fpr[32]; double fpscr; /* FPSCR stored as double for easier access */ } pcb_fpu; /* Floating point processor */ diff --git a/sys/powerpc/powerpc/fpu.c b/sys/powerpc/powerpc/fpu.c index 1bb9f3de07b5..59d3d218f84c 100644 --- a/sys/powerpc/powerpc/fpu.c +++ b/sys/powerpc/powerpc/fpu.c @@ -79,7 +79,7 @@ save_fpu_int(struct thread *td) #undef SFP } else { #define SFP(n) __asm ("stfd " #n ", 0(%0)" \ - :: "b"(&pcb->pcb_fpu.fpr[n])); + :: "b"(&pcb->pcb_fpu.fpr[n].fpr)); SFP(0); SFP(1); SFP(2); SFP(3); SFP(4); SFP(5); SFP(6); SFP(7); SFP(8); SFP(9); SFP(10); SFP(11); @@ -164,7 +164,7 @@ enable_fpu(struct thread *td) #undef LFP } else { #define LFP(n) __asm ("lfd " #n ", 0(%0)" \ - :: "b"(&pcb->pcb_fpu.fpr[n])); + :: "b"(&pcb->pcb_fpu.fpr[n].fpr)); LFP(0); LFP(1); LFP(2); LFP(3); LFP(4); LFP(5); LFP(6); LFP(7); LFP(8); LFP(9); LFP(10); LFP(11); |
