aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/fpu.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/fpu.S')
-rw-r--r--arch/powerpc/kernel/fpu.S16
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
index 15247fe171a8..a088c064ae40 100644
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -57,6 +57,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX); \
57_GLOBAL(load_up_fpu) 57_GLOBAL(load_up_fpu)
58 mfmsr r5 58 mfmsr r5
59 ori r5,r5,MSR_FP 59 ori r5,r5,MSR_FP
60#ifdef CONFIG_VSX
61BEGIN_FTR_SECTION
62 oris r5,r5,MSR_VSX@h
63END_FTR_SECTION_IFSET(CPU_FTR_VSX)
64#endif
60 SYNC 65 SYNC
61 MTMSRD(r5) /* enable use of fpu now */ 66 MTMSRD(r5) /* enable use of fpu now */
62 isync 67 isync
@@ -73,7 +78,7 @@ _GLOBAL(load_up_fpu)
73 beq 1f 78 beq 1f
74 toreal(r4) 79 toreal(r4)
75 addi r4,r4,THREAD /* want last_task_used_math->thread */ 80 addi r4,r4,THREAD /* want last_task_used_math->thread */
76 SAVE_32FPRS(0, r4) 81 SAVE_32FPVSRS(0, r5, r4)
77 mffs fr0 82 mffs fr0
78 stfd fr0,THREAD_FPSCR(r4) 83 stfd fr0,THREAD_FPSCR(r4)
79 PPC_LL r5,PT_REGS(r4) 84 PPC_LL r5,PT_REGS(r4)
@@ -100,7 +105,7 @@ _GLOBAL(load_up_fpu)
100#endif 105#endif
101 lfd fr0,THREAD_FPSCR(r5) 106 lfd fr0,THREAD_FPSCR(r5)
102 MTFSF_L(fr0) 107 MTFSF_L(fr0)
103 REST_32FPRS(0, r5) 108 REST_32FPVSRS(0, r4, r5)
104#ifndef CONFIG_SMP 109#ifndef CONFIG_SMP
105 subi r4,r5,THREAD 110 subi r4,r5,THREAD
106 fromreal(r4) 111 fromreal(r4)
@@ -119,6 +124,11 @@ _GLOBAL(load_up_fpu)
119_GLOBAL(giveup_fpu) 124_GLOBAL(giveup_fpu)
120 mfmsr r5 125 mfmsr r5
121 ori r5,r5,MSR_FP 126 ori r5,r5,MSR_FP
127#ifdef CONFIG_VSX
128BEGIN_FTR_SECTION
129 oris r5,r5,MSR_VSX@h
130END_FTR_SECTION_IFSET(CPU_FTR_VSX)
131#endif
122 SYNC_601 132 SYNC_601
123 ISYNC_601 133 ISYNC_601
124 MTMSRD(r5) /* enable use of fpu now */ 134 MTMSRD(r5) /* enable use of fpu now */
@@ -129,7 +139,7 @@ _GLOBAL(giveup_fpu)
129 addi r3,r3,THREAD /* want THREAD of task */ 139 addi r3,r3,THREAD /* want THREAD of task */
130 PPC_LL r5,PT_REGS(r3) 140 PPC_LL r5,PT_REGS(r3)
131 PPC_LCMPI 0,r5,0 141 PPC_LCMPI 0,r5,0
132 SAVE_32FPRS(0, r3) 142 SAVE_32FPVSRS(0, r4 ,r3)
133 mffs fr0 143 mffs fr0
134 stfd fr0,THREAD_FPSCR(r3) 144 stfd fr0,THREAD_FPSCR(r3)
135 beq 1f 145 beq 1f