OSDN Git Service

modify Cortex-M0
authorryuz <ryuz@users.sourceforge.jp>
Wed, 30 Mar 2011 15:35:22 +0000 (00:35 +0900)
committerryuz <ryuz@users.sourceforge.jp>
Wed, 30 Mar 2011 15:35:22 +0000 (00:35 +0900)
kernel/source/arch/proc/arm/arm_v6m/gcc/kcre_ctx.S
kernel/source/arch/proc/arm/arm_v6m/gcc/kpnd_hdr.S
kernel/source/arch/proc/arm/arm_v6m/gcc/kref_ctl.S
kernel/source/arch/proc/arm/arm_v6m/gcc/kswi_ctx.S
kernel/source/arch/proc/arm/arm_v7m/gcc/kcre_ctx.S

index f47b9b7..f4ec1fd 100644 (file)
                                .thumb_func
                                .type   _kernel_cre_ctx, %function
 _kernel_cre_ctx:
-                               sub             r1, #36                                         /* スタックを確保 */
-                               str             r2, [r1, #0]                            /* r4 部分にentryを設定 */
-                               str             r3, [r1, #4]                            /* r5 部分にpar1を設定 */
+                               sub             r1, #40                                         /* スタックを確保 */
+                               str             r2, [r1, #20]                           /* r4 部分にentryを設定 */
+                               str             r3, [r1, #24]                           /* r5 部分にpar1を設定 */
                                ldr             r2, [sp, #0]                            /* par2を取り出し */
-                               str             r2, [r1, #8]                            /* r6 部分にpar2を設定 */
+                               str             r2, [r1, #28]                           /* r6 部分にpar2を設定 */
                                ldr             r2, =ctx_entry
-                               str             r2, [r1, #16]                           /* lr 部分にエントリーアドレスを設定 */
+                               str             r2, [r1, #36]                           /* lr 部分にエントリーアドレスを設定 */
                                str             r1, [r0]                                        /* ctxcb に新 sp を保存 */
                                bx              lr                                                      /* リターン */
 
index 2dc7724..53ced18 100644 (file)
@@ -40,14 +40,12 @@ _kernel_pendsv_handler:
                                .thumb_func
                                .type   _kernel_pendsv_proc, %function
 _kernel_pendsv_proc:
-                               push    {r0}
+                               push    {r0, r1}
+                               mrs             r0, apsr
                                push    {r0, r1, r2, r3}
                                mov             r0, r12
                                push    {r0, lr}
 
-                               mrs             r0, apsr
-                               push    {r0}
-
                                /* リターンアドレス格納 */
                                ldr             r0, =pendsv_ret_addr
                                ldr             r1, [r0]
@@ -57,16 +55,14 @@ _kernel_pendsv_proc:
                                /* 遅延ディスパッチ */
                                blx             _kernel_dsp_tsk
 
-                               pop             {r0}
-                               msr             apsr, r0
-
                                cpsie   i
-                               
+
                                pop             {r0, r1}
                                mov             r12, r0
                                mov             lr, r1
                                pop             {r0, r1, r2, r3}
-                               pop             {pc}
+                               msr             apsr, r0
+                               pop             {r0, pc}
 
                                .size   _kernel_pendsv_proc, .-_kernel_pendsv_proc
 
index 3bdad90..5cb9d61 100644 (file)
@@ -5,7 +5,6 @@
  * http://sourceforge.jp/projects/hos/
  */
 
-                               .syntax unified
 
                                .text
                                .align  2
@@ -16,7 +15,7 @@
   int _kernel_ref_cpu_control(void)
  ************************************************/
                                .global _kernel_ref_cpu_control
-                               .thumb
+                               .code   16
                                .thumb_func
                                .type   _kernel_ref_cpu_control, %function
 _kernel_ref_cpu_control:
index 5a2174b..1e57b7d 100644 (file)
@@ -6,8 +6,6 @@
  */
 
 
-                               .syntax unified
-
 
                                .text
                                .align  2
                                .thumb_func
                                .type   _kernel_swi_ctx, %function
 _kernel_swi_ctx:
-                               push    {r4-r7, lr}                     /* レジスタ保存 */
+                               push    {r0, r4-r7, lr}                 /* レジスタ保存(r0は8の倍数にするダミー) */
+                               mov             r4, r8
+                               mov             r5, r9
+                               mov             r6, r10
+                               mov             r7, r11
+                               push    {r4-r7}
+
                                mov             r4, sp
                                str             r4, [r1]
                /* --- そのまま _kernel_sta_ctx に続ける */
@@ -41,7 +45,13 @@ _kernel_swi_ctx:
 _kernel_sta_ctx:
                                ldr             r4, [r0]                        /* スタックポインタ復帰 */
                                mov             sp, r4
-                               pop             {r4-r7, pc}                     /* レジスタ復帰 */
+
+                               pop             {r4-r7}
+                               mov             r8, r4
+                               mov             r9, r5
+                               mov             r10, r6
+                               mov             r11, r7
+                               pop             {r0, r4-r7, pc}                 /* レジスタ復帰 */
 
                                .size   _kernel_swi_ctx, .-_kernel_swi_ctx
                                .size   _kernel_sta_ctx, .-_kernel_sta_ctx
index 46d967d..674fbca 100644 (file)
@@ -31,22 +31,27 @@ _kernel_cre_ctx:
                                str             r3, [r1, #8]                            /* r5 部分にpar1を設定 */
                                ldr             r2, [sp, #0]                            /* par2を取り出し */
                                str             r2, [r1, #12]                           /* r6 部分にpar2を設定 */
-                               movw    r2, #:lower16:(ctx_entry+1)
-                               movt    r2, #:upper16:(ctx_entry+1)
+                               movw    r2, #:lower16:ctx_entry
+                               movt    r2, #:upper16:ctx_entry
                                str             r2, [r1, #36]                           /* lr 部分にエントリーアドレスを設定 */
                                str             r1, [r0]                                        /* ctxcb に新 sp を保存 */
                                bx              lr                                                      /* リターン */
 
+                               .size   _kernel_cre_ctx, .-_kernel_cre_ctx
+
+
 /************************************************
   実行コンテキストエントリーアドレス
  ************************************************/
+                               .thumb
+                               .thumb_func
+                               .type   ctx_entry, %function
 ctx_entry:
                                mov             r0, r5                                          /* par1を設定 */
                                mov             r1, r6                                          /* par2を設定 */
                                bx              r4                                                      /* entry を実行 */
 
-
-                               .size   _kernel_cre_ctx, .-_kernel_cre_ctx
+                               .size   ctx_entry, .-ctx_entry
 
 
                                .end