Xtensa ESP32: Fixes some double faults and user errors, but I do not fully understand why.

This commit is contained in:
Gregory Nutt 2016-12-19 11:14:08 -06:00
parent 886ce88b4f
commit a9a39800a4

View File

@ -241,16 +241,18 @@ xtensa_coproc_savestate:
RET(16) RET(16)
#else #else
ENTRY(32)
/* Need to preserve a8-15. _xtensa_coproc_savestate modifies a2-a7, /* Need to preserve a8-15. _xtensa_coproc_savestate modifies a2-a7,
* a13-a15. So only a13-a15 need be preserved. * a13-a15. So a13-a15 may need to be preserved.
*/ */
ENTRY(24)
s32i a0, sp, LOCAL_OFFSET(1) /* Save return address */ s32i a0, sp, LOCAL_OFFSET(1) /* Save return address */
s32i a13, sp, LOCAL_OFFSET(2) #if 0
s32i a13, sp, LOCAL_OFFSET(2) /* Save clobbered registers */
s32i a14, sp, LOCAL_OFFSET(3) s32i a14, sp, LOCAL_OFFSET(3)
s32i a15, sp, LOCAL_OFFSET(4) s32i a15, sp, LOCAL_OFFSET(4)
#endif
/* Call _xtensa_coproc_savestate() with A2=address of co-processor /* Call _xtensa_coproc_savestate() with A2=address of co-processor
* save area. * save area.
@ -261,11 +263,13 @@ xtensa_coproc_savestate:
/* Restore a13-15 and return */ /* Restore a13-15 and return */
l32i a0, sp, LOCAL_OFFSET(1) /* Recover return address */ l32i a0, sp, LOCAL_OFFSET(1) /* Recover return address */
l32i a13, sp, LOCAL_OFFSET(2) #if 0
l32i a13, sp, LOCAL_OFFSET(2) /* Restore clobbered registers */
l32i a14, sp, LOCAL_OFFSET(3) l32i a14, sp, LOCAL_OFFSET(3)
l32i a15, sp, LOCAL_OFFSET(4) l32i a15, sp, LOCAL_OFFSET(4)
#endif
RET(24) RET(32)
#endif #endif
@ -441,16 +445,18 @@ xtensa_coproc_restorestate:
RET(16) RET(16)
#else #else
ENTRY(32)
/* Need to preserve a8-15. _xtensa_coproc_savestate modifies a2-a7, /* Need to preserve a8-15. _xtensa_coproc_savestate modifies a2-a7,
* a13-a15. So only a13-a15 need be preserved. * a13-a15. So a13-a15 may need to be preserved.
*/ */
ENTRY(24)
s32i a0, sp, LOCAL_OFFSET(1) /* Save return address */ s32i a0, sp, LOCAL_OFFSET(1) /* Save return address */
s32i a13, sp, LOCAL_OFFSET(2) #if 0
s32i a13, sp, LOCAL_OFFSET(2) /* Save clobbered values */
s32i a14, sp, LOCAL_OFFSET(3) s32i a14, sp, LOCAL_OFFSET(3)
s32i a15, sp, LOCAL_OFFSET(4) s32i a15, sp, LOCAL_OFFSET(4)
#endif
/* Call _xtensa_coproc_restorestate() with A2=address of co-processor /* Call _xtensa_coproc_restorestate() with A2=address of co-processor
* save area. Registers a0, a2-a7, a13-a15 have been trashed. * save area. Registers a0, a2-a7, a13-a15 have been trashed.
@ -461,11 +467,13 @@ xtensa_coproc_restorestate:
/* Restore a13-15 and return */ /* Restore a13-15 and return */
l32i a0, sp, LOCAL_OFFSET(1) /* Recover return address */ l32i a0, sp, LOCAL_OFFSET(1) /* Recover return address */
l32i a13, sp, LOCAL_OFFSET(2) #if 0
l32i a13, sp, LOCAL_OFFSET(2) /* Restore clobbered registers */
l32i a14, sp, LOCAL_OFFSET(3) l32i a14, sp, LOCAL_OFFSET(3)
l32i a15, sp, LOCAL_OFFSET(4) l32i a15, sp, LOCAL_OFFSET(4)
#endif
RET(24) RET(32)
#endif #endif