mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
コンテキスト初期化時にVFPレジスタバッファを全クリア。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@159 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
0485b1ff1e
commit
8de797bd19
@ -30,17 +30,16 @@
|
||||
Returns: none
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <brom/code32.h>
|
||||
asm void osInitContext(
|
||||
register OSContext* context,
|
||||
register u32 newpc,
|
||||
register u32 newsp
|
||||
)
|
||||
asm void osInitContext( OSContext* context, u32 newpc, u32 newsp )
|
||||
{
|
||||
#define context r0
|
||||
#define context r12
|
||||
#define newpc r1
|
||||
#define newsp r2
|
||||
|
||||
// ---- 実行位置保存 (r0 = context)
|
||||
stmfd sp!, { r4-r7, lr }
|
||||
mov context, r0
|
||||
|
||||
// ---- 実行位置保存 (r12 = context)
|
||||
add newpc, newpc, #4
|
||||
str newpc, [ context, #OS_CONTEXT_PC_PLUS4 ]
|
||||
|
||||
@ -60,27 +59,29 @@ asm void osInitContext(
|
||||
str r1, [ context, #OS_CONTEXT_CPSR ]
|
||||
|
||||
// ---- 他のレジスタをクリア
|
||||
mov r0, #0
|
||||
mov r1, #0
|
||||
str r1, [ context, #OS_CONTEXT_R0 ]
|
||||
str r1, [ context, #OS_CONTEXT_R1 ]
|
||||
str r1, [ context, #OS_CONTEXT_R2 ]
|
||||
str r1, [ context, #OS_CONTEXT_R3 ]
|
||||
str r1, [ context, #OS_CONTEXT_R4 ]
|
||||
str r1, [ context, #OS_CONTEXT_R5 ]
|
||||
str r1, [ context, #OS_CONTEXT_R6 ]
|
||||
str r1, [ context, #OS_CONTEXT_R7 ]
|
||||
str r1, [ context, #OS_CONTEXT_R8 ]
|
||||
str r1, [ context, #OS_CONTEXT_R9 ]
|
||||
str r1, [ context, #OS_CONTEXT_R10 ]
|
||||
str r1, [ context, #OS_CONTEXT_R11 ]
|
||||
str r1, [ context, #OS_CONTEXT_R12 ]
|
||||
str r1, [ context, #OS_CONTEXT_LR ]
|
||||
mov r2, #0
|
||||
mov r3, #0
|
||||
stmfd sp!, { r0-r3 }
|
||||
ldmia sp, { r4-r7 }
|
||||
|
||||
// ---- VFPレジスタを初期化
|
||||
add lr, context, #__cpp(offsetof(OSContext,r[0]))
|
||||
stmia lr!, { r0-r7 } // r0-r7
|
||||
stmia lr!, { r0-r4 } // r8-r12
|
||||
str r1, [ context, #__cpp(offsetof(OSContext,lr)) ] // lr
|
||||
|
||||
// ---- VFPレジスタをクリア(VFP例外で初期化)
|
||||
#ifdef SDK_CONTEXT_HAS_VFP
|
||||
str r1, [ context, #__cpp(offsetof(OSContext,fpexc)) ]
|
||||
add lr, context, #__cpp(offsetof(OSContext,fpexc))
|
||||
stmia lr!, { r0-r1 } // fpexc, fpscr
|
||||
stmia lr!, { r0-r7 } // f0-f7
|
||||
stmia lr!, { r0-r7 } // f8-f15
|
||||
stmia lr!, { r0-r7 } // f16-f23
|
||||
stmia lr!, { r0-r7 } // f24-f31
|
||||
#endif
|
||||
|
||||
ldmfd sp!, { r0-r7, lr }
|
||||
bx lr // start here and swicth arm/thumb mode
|
||||
|
||||
#undef context
|
||||
|
||||
Loading…
Reference in New Issue
Block a user