From 8de797bd19d16c17c53b18ebdbdf7235d09d1494 Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 7 Jan 2009 03:07:55 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=86=E3=82=AD=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=88=9D=E6=9C=9F=E5=8C=96=E6=99=82=E3=81=ABVFP?= =?UTF-8?q?=E3=83=AC=E3=82=B8=E3=82=B9=E3=82=BF=E3=83=90=E3=83=83=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=92=E5=85=A8=E3=82=AF=E3=83=AA=E3=82=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@159 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/os/common/os_context.c | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/trunk/bootrom/build/libraries/os/common/os_context.c b/trunk/bootrom/build/libraries/os/common/os_context.c index 8df225e..578acf3 100644 --- a/trunk/bootrom/build/libraries/os/common/os_context.c +++ b/trunk/bootrom/build/libraries/os/common/os_context.c @@ -30,17 +30,16 @@ Returns: none *---------------------------------------------------------------------------*/ #include -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