diff options
-rw-r--r-- | arch/mips/kernel/r4k_switch.S | 13 | ||||
-rw-r--r-- | include/asm-mips/asmmacro-32.h | 4 | ||||
-rw-r--r-- | include/asm-mips/asmmacro-64.h | 19 |
3 files changed, 19 insertions, 17 deletions
diff --git a/arch/mips/kernel/r4k_switch.S b/arch/mips/kernel/r4k_switch.S index 0b1b54acee9f..db94e556fc97 100644 --- a/arch/mips/kernel/r4k_switch.S +++ b/arch/mips/kernel/r4k_switch.S | |||
@@ -75,8 +75,8 @@ | |||
75 | and t0, t0, t1 | 75 | and t0, t0, t1 |
76 | LONG_S t0, ST_OFF(t3) | 76 | LONG_S t0, ST_OFF(t3) |
77 | 77 | ||
78 | fpu_save_double a0 t1 t0 t2 # c0_status passed in t1 | 78 | fpu_save_double a0 t0 t1 # c0_status passed in t0 |
79 | # clobbers t0 and t2 | 79 | # clobbers t1 |
80 | 1: | 80 | 1: |
81 | 81 | ||
82 | /* | 82 | /* |
@@ -129,9 +129,9 @@ | |||
129 | */ | 129 | */ |
130 | LEAF(_save_fp) | 130 | LEAF(_save_fp) |
131 | #ifdef CONFIG_64BIT | 131 | #ifdef CONFIG_64BIT |
132 | mfc0 t1, CP0_STATUS | 132 | mfc0 t0, CP0_STATUS |
133 | #endif | 133 | #endif |
134 | fpu_save_double a0 t1 t0 t2 # clobbers t1 | 134 | fpu_save_double a0 t0 t1 # clobbers t1 |
135 | jr ra | 135 | jr ra |
136 | END(_save_fp) | 136 | END(_save_fp) |
137 | 137 | ||
@@ -139,7 +139,10 @@ LEAF(_save_fp) | |||
139 | * Restore a thread's fp context. | 139 | * Restore a thread's fp context. |
140 | */ | 140 | */ |
141 | LEAF(_restore_fp) | 141 | LEAF(_restore_fp) |
142 | fpu_restore_double a0, t1 # clobbers t1 | 142 | #ifdef CONFIG_64BIT |
143 | mfc0 t0, CP0_STATUS | ||
144 | #endif | ||
145 | fpu_restore_double a0 t0 t1 # clobbers t1 | ||
143 | jr ra | 146 | jr ra |
144 | END(_restore_fp) | 147 | END(_restore_fp) |
145 | 148 | ||
diff --git a/include/asm-mips/asmmacro-32.h b/include/asm-mips/asmmacro-32.h index 11daf5ceb7b4..5de3963f511e 100644 --- a/include/asm-mips/asmmacro-32.h +++ b/include/asm-mips/asmmacro-32.h | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <asm/fpregdef.h> | 12 | #include <asm/fpregdef.h> |
13 | #include <asm/mipsregs.h> | 13 | #include <asm/mipsregs.h> |
14 | 14 | ||
15 | .macro fpu_save_double thread status tmp1=t0 tmp2 | 15 | .macro fpu_save_double thread status tmp1=t0 |
16 | cfc1 \tmp1, fcr31 | 16 | cfc1 \tmp1, fcr31 |
17 | sdc1 $f0, THREAD_FPR0(\thread) | 17 | sdc1 $f0, THREAD_FPR0(\thread) |
18 | sdc1 $f2, THREAD_FPR2(\thread) | 18 | sdc1 $f2, THREAD_FPR2(\thread) |
@@ -70,7 +70,7 @@ | |||
70 | sw \tmp, THREAD_FCR31(\thread) | 70 | sw \tmp, THREAD_FCR31(\thread) |
71 | .endm | 71 | .endm |
72 | 72 | ||
73 | .macro fpu_restore_double thread tmp=t0 | 73 | .macro fpu_restore_double thread status tmp=t0 |
74 | lw \tmp, THREAD_FCR31(\thread) | 74 | lw \tmp, THREAD_FCR31(\thread) |
75 | ldc1 $f0, THREAD_FPR0(\thread) | 75 | ldc1 $f0, THREAD_FPR0(\thread) |
76 | ldc1 $f2, THREAD_FPR2(\thread) | 76 | ldc1 $f2, THREAD_FPR2(\thread) |
diff --git a/include/asm-mips/asmmacro-64.h b/include/asm-mips/asmmacro-64.h index 559c355b9b86..225feefcb25d 100644 --- a/include/asm-mips/asmmacro-64.h +++ b/include/asm-mips/asmmacro-64.h | |||
@@ -53,12 +53,12 @@ | |||
53 | sdc1 $f31, THREAD_FPR31(\thread) | 53 | sdc1 $f31, THREAD_FPR31(\thread) |
54 | .endm | 54 | .endm |
55 | 55 | ||
56 | .macro fpu_save_double thread status tmp1 tmp2 | 56 | .macro fpu_save_double thread status tmp |
57 | sll \tmp2, \tmp1, 5 | 57 | sll \tmp, \status, 5 |
58 | bgez \tmp2, 2f | 58 | bgez \tmp, 2f |
59 | fpu_save_16odd \thread | 59 | fpu_save_16odd \thread |
60 | 2: | 60 | 2: |
61 | fpu_save_16even \thread \tmp1 # clobbers t1 | 61 | fpu_save_16even \thread \tmp |
62 | .endm | 62 | .endm |
63 | 63 | ||
64 | .macro fpu_restore_16even thread tmp=t0 | 64 | .macro fpu_restore_16even thread tmp=t0 |
@@ -101,13 +101,12 @@ | |||
101 | ldc1 $f31, THREAD_FPR31(\thread) | 101 | ldc1 $f31, THREAD_FPR31(\thread) |
102 | .endm | 102 | .endm |
103 | 103 | ||
104 | .macro fpu_restore_double thread tmp | 104 | .macro fpu_restore_double thread status tmp |
105 | mfc0 t0, CP0_STATUS | 105 | sll \tmp, \status, 5 |
106 | sll t1, t0, 5 | 106 | bgez \tmp, 1f # 16 register mode? |
107 | bgez t1, 1f # 16 register mode? | ||
108 | 107 | ||
109 | fpu_restore_16odd a0 | 108 | fpu_restore_16odd \thread |
110 | 1: fpu_restore_16even a0, t0 # clobbers t0 | 109 | 1: fpu_restore_16even \thread \tmp |
111 | .endm | 110 | .endm |
112 | 111 | ||
113 | .macro cpu_save_nonscratch thread | 112 | .macro cpu_save_nonscratch thread |