diff options
author | Michael Neuling <mikey@neuling.org> | 2008-06-25 00:07:18 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-06-30 21:28:50 -0400 |
commit | ce48b2100785e5ca629fb3aa8e3b50aca808f692 (patch) | |
tree | 63532ff7cc68b18ca4902bd10e03fcbaaf01cade /include/asm-powerpc/system.h | |
parent | 72ffff5b1792b0fa4d40a8e2f3276fff999820ec (diff) |
powerpc: Add VSX context save/restore, ptrace and signal support
This patch extends the floating point save and restore code to use the
VSX load/stores when VSX is available. This will make FP context
save/restore marginally slower on FP only code, when VSX is available,
as it has to load/store 128bits rather than just 64bits.
Mixing FP, VMX and VSX code will get constant architected state.
The signals interface is extended to enable access to VSR 0-31
doubleword 1 after discussions with tool chain maintainers. Backward
compatibility is maintained.
The ptrace interface is also extended to allow access to VSR 0-31 full
registers.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc/system.h')
-rw-r--r-- | include/asm-powerpc/system.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index 2642a92b724f..0c12c66733f6 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
@@ -139,6 +139,7 @@ extern void enable_kernel_altivec(void); | |||
139 | extern void giveup_altivec(struct task_struct *); | 139 | extern void giveup_altivec(struct task_struct *); |
140 | extern void load_up_altivec(struct task_struct *); | 140 | extern void load_up_altivec(struct task_struct *); |
141 | extern int emulate_altivec(struct pt_regs *); | 141 | extern int emulate_altivec(struct pt_regs *); |
142 | extern void giveup_vsx(struct task_struct *); | ||
142 | extern void enable_kernel_spe(void); | 143 | extern void enable_kernel_spe(void); |
143 | extern void giveup_spe(struct task_struct *); | 144 | extern void giveup_spe(struct task_struct *); |
144 | extern void load_up_spe(struct task_struct *); | 145 | extern void load_up_spe(struct task_struct *); |
@@ -162,6 +163,14 @@ static inline void flush_altivec_to_thread(struct task_struct *t) | |||
162 | } | 163 | } |
163 | #endif | 164 | #endif |
164 | 165 | ||
166 | #ifdef CONFIG_VSX | ||
167 | extern void flush_vsx_to_thread(struct task_struct *); | ||
168 | #else | ||
169 | static inline void flush_vsx_to_thread(struct task_struct *t) | ||
170 | { | ||
171 | } | ||
172 | #endif | ||
173 | |||
165 | #ifdef CONFIG_SPE | 174 | #ifdef CONFIG_SPE |
166 | extern void flush_spe_to_thread(struct task_struct *); | 175 | extern void flush_spe_to_thread(struct task_struct *); |
167 | #else | 176 | #else |