From 4ad756c07a2117ac842fc60b3440888262f591e1 Mon Sep 17 00:00:00 2001 From: ryuz Date: Fri, 18 Aug 2006 16:37:51 +0000 Subject: [PATCH] (none) --- kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S | 107 ++++++++++++++++------------ 1 file changed, 62 insertions(+), 45 deletions(-) diff --git a/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S b/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S index f2d6801..cfe4917 100755 --- a/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S +++ b/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S @@ -1,8 +1,7 @@ /* ------------------------------------------------------------------------ */ -/* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */ -/* プロセッサ抽象化コンポーネント (日立 SH2用) */ +/* Hyper Operating System V4 Advance */ /* */ -/* Copyright (C) 1998-2002 by Project HOS */ +/* Copyright (C) 1998-2006 by Project HOS */ /* http://sourceforge.jp/projects/hos/ */ /* ------------------------------------------------------------------------ */ @@ -10,9 +9,11 @@ .global __kernel_dis_int /* 割り込み禁止 */ .global __kernel_ena_int /* 割り込み許可 */ - .global __hospac_cre_ctx /* 実行コンテキストの作成 */ - .global __hospac_swi_ctx /* 実行コンテキストの切替 */ + .global __kernel_wai_int /* 割り込み待ち */ + .global __kernel_cre_ctx /* 実行コンテキストの作成 */ + .global __kernel_swi_ctx /* 実行コンテキストの切替 */ .global __kernel_sta_ctx /* 実行コンテキストの開始 */ + .global __kernel_rst_ctx /* 実行コンテキストのリスタート */ .global __kernel_sh_imsk /* 割り込みマスクの値 */ @@ -26,7 +27,7 @@ .align 2 __kernel_dis_int: stc sr, r0 - or #0xf0, r0 /* 全割り込みマスク */ + or #0xf0, r0 /* 全割り込みマスク */ rts ldc r0, sr @@ -36,22 +37,20 @@ __kernel_dis_int: 割り込み許可 void _kernel_ena_int(void) ************************************************/ - .text .align 2 _kernel_ena_int: - mov #0xf0, r1 /* 0x00f0 を反転させて 0xff0f を作成 */ - not r1, r1 + mov.l addr_sh_imsk, r2 stc sr, r0 - and r1, r0 /* 割り込みマスク値以外を取得 */ - mov.l imsk_addr, r1 - mov.l @r1, r1 - or r1, r0 /* 割り込みマスクの値を設定 */ + mov.l @r2, r1 + or #0xf0, r0 + xor #0xf0, r0 + or r1, r0 /* 割り込みマスクの値を設定 */ rts ldc r0, sr .align 2 -imsk_addr: - .long __kernel_sh_imsk /* 割り込みマスク */ +addr_sh_imsk: + .long __kernel_sh_imsk /* 割り込みマスク */ @@ -66,24 +65,24 @@ imsk_addr: ************************************************/ .align 2 __kernel_cre_ctx: - mov.l @(4, r15), r0 /* 実行時パラメータ2を取り出し */ - add #-16, r5 /* r8-r11用領域分空ける */ - mov.l r6, @-r5 /* 実行アドレスを r12 の領域に設定 */ - mov.l r7, @-r5 /* 実行時パラメータ1を r13 の領域に設定 */ - mov.l r0, @-r5 /* 実行時パラメータ2を r14 の領域に設定 */ - mov.l ctx_entry, r0 - mov.l r0, @-r5 /* 実行エントリポイントをリターンアドレスに設定 */ + add #-40, r5 /* スタックに領域を確保 */ + mov.l r6, @(36, r5) /* 実行アドレスを r8 の領域に設定 */ + mov.l r7, @(32, r5) /* 実行時パラメータ1を r9 の領域に設定 */ + mov.l @(0, r15), r0 + mov.l r0, @(28, r5) /* 実行時パラメータ2を r10 の領域に設定 */ + mov #ctx_entry, r0 + mov.l r0, @(0, r5) /* 実行エントリポイントを pr の領域に設定 */ rts - mov.l r5, @(0, r4) /* スタックポインタを保存(遅延スロット) */ + mov.l r5, @(0, r4) /* スタックポインタを保存(遅延スロット) */ /************************************************ 実行コンテキストエントリーアドレス ************************************************/ ctx_entry: - mov r13, r4 /* 実行時パラメータ1を設定 */ - jmp @r12 /* 実行開始アドレスに分岐 */ - mov r14, r5 /* 実行時パラメータ2を設定(遅延スロット) */ + mov r9, r4 /* 実行時パラメータ1を設定 */ + jmp @r8 /* 実行開始アドレスに分岐 */ + mov r10, r5 /* 実行時パラメータ2を設定(遅延スロット) */ @@ -95,15 +94,17 @@ ctx_entry: ************************************************/ .align 2 __kernel_swi_ctx: - mov.l r8, @-r15 /* 8-r14,prを退避 */ - mov.l r9, @-r15 - mov.l r10, @-r15 - mov.l r11, @-r15 - mov.l r12, @-r15 - mov.l r13, @-r15 - mov.l r14, @-r15 - sts.l pr, @-r15 - mov.l r15, @(0, r5) /* スタックポインタ保存 */ + mov.l r8, @-r15 /* 8-r14,prを退避 */ + mov.l r9, @-r15 + mov.l r10, @-r15 + mov.l r11, @-r15 + mov.l r12, @-r15 + mov.l r13, @-r15 + mov.l r14, @-r15 + sts.l macl, @-r15 + sts.l mach, @-r15 + sts.l pr, @-r15 + mov.l r15, @(0, r5) /* スタックポインタ保存 */ /* ---- このまま _kernel_sta_ctx に続ける ---- */ /************************************************ @@ -112,19 +113,35 @@ __kernel_swi_ctx: _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [r4] ************************************************/ __kernel_sta_ctx: - mov.l @(0, r4), r15 /* スタックポインタ復帰 */ - lds.l @r15+, pr /* r8-r14,prを復帰 */ - mov.l @r15+, r14 - mov.l @r15+, r13 - mov.l @r15+, r12 - mov.l @r15+, r11 - mov.l @r15+, r10 - mov.l @r15+, r9 + mov.l @(0, r4), r15 /* スタックポインタ復帰 */ + lds.l @r15+, pr /* r8-r14,prを復帰 */ + lds.l @r15+, mach + lds.l @r15+, macl + mov.l @r15+, r14 + mov.l @r15+, r13 + mov.l @r15+, r12 + mov.l @r15+, r11 + mov.l @r15+, r10 + mov.l @r15+, r9 rts - mov.l @r15+, r8 + mov.l @r15+, r8 + + +/************************************************ + 実行コンテキストのリスタート + void _kernel_rst_ctx( + VP_INT par1, 実行時パラメータ1 [r4] + VP_INT par2, 実行時パラメータ2 [r5] + VP isp, 初期スタックポインタ [r6] + FP entry) 実行アドレス [r7] +************************************************/ + .align 2 +__kernel_rst_ctx: + jmp @r7 /* 実行アドレスに分岐 */ + mov r6, r15 /* スタックポインタリセット(遅延スロット) */ - .end + .comm __kernel_sh_imsk,4,4 /* end of file */ -- 2.11.0