Module Name: src
Committed By: matt
Date: Fri Dec 20 07:01:06 UTC 2013
Modified Files:
src/sys/arch/arm/include/arm32: frame.h
Log Message:
When restoring SPRSR, use spsr_fsxc not spsr_all so bits[23-8] are restored.
This should fix use of simd instructions that rely on the GE bits.
To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/include/arm32/frame.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/include/arm32/frame.h
diff -u src/sys/arch/arm/include/arm32/frame.h:1.37 src/sys/arch/arm/include/arm32/frame.h:1.38
--- src/sys/arch/arm/include/arm32/frame.h:1.37 Mon Dec 2 18:36:10 2013
+++ src/sys/arch/arm/include/arm32/frame.h Fri Dec 20 07:01:06 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: frame.h,v 1.37 2013/12/02 18:36:10 joerg Exp $ */
+/* $NetBSD: frame.h,v 1.38 2013/12/20 07:01:06 matt Exp $ */
/*
* Copyright (c) 1994-1997 Mark Brinicombe.
@@ -411,7 +411,7 @@ LOCK_CAS_DEBUG_LOCALS
#define PULLFRAME \
ldr r0, [sp], #TF_R0; /* Pop the SPSR from stack */ \
- msr spsr_all, r0; \
+ msr spsr_fsxc, r0; \
ldmia sp, {r0-r14}^; /* Restore registers (usr mode) */ \
mov r0, r0; /* NOP for previous instruction */ \
add sp, sp, #(TF_PC-TF_R0); /* Adjust the stack pointer */ \
@@ -464,7 +464,7 @@ LOCK_CAS_DEBUG_LOCALS
str r0, [r2, #-4]!; /* Push return address */ \
stmdb r2!, {sp, lr}; /* Push SVC sp, lr */ \
mov sp, r2; /* Keep stack aligned */ \
- msr spsr_all, r3; /* Restore correct spsr */ \
+ msr spsr_fsxc, r3; /* Restore correct spsr */ \
ldmdb r1, {r0-r3}; /* Restore 4 regs from xxx mode */ \
sub sp, sp, #(TF_SVC_SP-TF_R0); /* Adjust the stack pointer */ \
PUSHUSERREGS; /* Push the user mode registers */ \
@@ -481,7 +481,7 @@ LOCK_CAS_DEBUG_LOCALS
#define PULLFRAMEFROMSVCANDEXIT \
ldr r0, [sp], #0x0008; /* Pop the SPSR from stack */ \
- msr spsr_all, r0; /* restore SPSR */ \
+ msr spsr_fsxc, r0; /* restore SPSR */ \
ldmia sp, {r0-r14}^; /* Restore registers (usr mode) */ \
mov r0, r0; /* NOP for previous instruction */ \
add sp, sp, #(TF_SVC_SP-TF_R0); /* Adjust the stack pointer */ \