summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2009-10-31 20:59:13 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2009-10-31 20:59:13 +0000
commit113d2ed8a6d71af32a5432b6d3892b57eaf4f0cc (patch)
tree191edcdda9f89b738ee8f29114f85b1eb5640f53 /sys/powerpc/aim
parent2612f797ab158c651290dec07758b4046e6faafc (diff)
downloadFreeBSD-src-113d2ed8a6d71af32a5432b6d3892b57eaf4f0cc.zip
FreeBSD-src-113d2ed8a6d71af32a5432b6d3892b57eaf4f0cc.tar.gz
Unbreak cpu_switch(). The register allocator in my brain is clearly
broken. Also, Altivec context switching worked before only by accident, but should work now by design.
Diffstat (limited to 'sys/powerpc/aim')
-rw-r--r--sys/powerpc/aim/swtch.S10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/powerpc/aim/swtch.S b/sys/powerpc/aim/swtch.S
index 2d6bf8a..0797057 100644
--- a/sys/powerpc/aim/swtch.S
+++ b/sys/powerpc/aim/swtch.S
@@ -99,17 +99,19 @@ ENTRY(cpu_switch)
mr %r14,%r3 /* Copy the old thread ptr... */
mr %r15,%r4 /* and the new thread ptr in scratch */
mr %r16,%r5 /* and the new lock */
+ mr %r17,%r6 /* and the PCB */
- lwz %r6,PCB_FLAGS(%r5)
+ lwz %r7,PCB_FLAGS(%r17)
/* Save FPU context if needed */
- andi. %r6, %r6, PCB_FPU
+ andi. %r7, %r7, PCB_FPU
beq .L1
bl save_fpu
.L1:
- lwz %r6,PCB_FLAGS(%r5)
+ mr %r3,%r14 /* restore old thread ptr */
+ lwz %r7,PCB_FLAGS(%r17)
/* Save Altivec context if needed */
- andi. %r6, %r6, PCB_VEC
+ andi. %r7, %r7, PCB_VEC
beq .L2
bl save_vec
OpenPOWER on IntegriCloud