diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2009-10-31 20:59:13 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2009-10-31 20:59:13 +0000 |
commit | 113d2ed8a6d71af32a5432b6d3892b57eaf4f0cc (patch) | |
tree | 191edcdda9f89b738ee8f29114f85b1eb5640f53 /sys/powerpc | |
parent | 2612f797ab158c651290dec07758b4046e6faafc (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/powerpc/aim/swtch.S | 10 |
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 |