.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 /* リターン */
.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]
/* 遅延ディスパッチ */
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
* http://sourceforge.jp/projects/hos/
*/
- .syntax unified
.text
.align 2
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:
*/
- .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 に続ける */
_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
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