source: atk2-sc3_fl850f1l/arch/v850_gcc/start.S@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 8.1 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2012-2013 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2013 by FUJISOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by FUJITSU VLSI LIMITED, JAPAN
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2013 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2013 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2013 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2013 by Witz Corporation, JAPAN
16 * Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
17 * Graduate School of Information Science, Nagoya Univ., JAPAN
18 *
19 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
20 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
21 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
22 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 * スコード中に含まれていること.
25 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
27 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
31 * と.
32 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
35 * 報告すること.
36 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
38 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
40 * 免責すること.
41 *
42 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
43 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
44 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
45 * 用する者に対して,AUTOSARパートナーになることを求めている.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51 * の責任を負わない.
52 *
53 * $Id: start.S 187 2015-06-25 03:39:04Z t_ishikawa $
54 */
55
56/*
57 * カーネル対応のスタートアップモジュール(V850用)
58 */
59
60#define OMIT_INCLUDE_OS_CFG /* Os_Cfg.hインクルード抑止 */
61
62#include <v850asm.inc>
63
64 .section .text_kernel
65 .align 4
66 .global __start
67 .extern _bsssecinib_table
68 .extern _tnum_bsssec
69 .extern _datasecinib_table
70 .extern _tnum_datasec
71 .extern _syscall_table
72FLABEL(__start)
73 di /* 割り込み禁止 */
74
75 /*
76 * 各種ポインタの初期化(SP/TP/EP/GP/CTBP)
77 */
78 Lea __ostkpt, r3
79 ld.w 0[r3],r3
80 /* =begin modified for SC3 */
81 /*
82 * ep, ctbpはとりあえず使用しない
83 * tp, gpはsdataアクセスでコンパイラが使用する
84 */
85 Lea __tp, tp
86 /* Lea __ep , ep */
87 Lea __gp , gp
88 /* Lea __ctbp , r6 */
89 /* ldsr r6 , 20 */
90 /*
91 * syscallの動作設定
92 */
93#ifdef __v850e2v3__
94 mov SYSCALL_SIZE, r6
95 ldsr r6, sccfg
96 Lea _syscall_table, r6
97 ldsr r6, scbp
98#elif defined(__v850e3v5__)
99 mov SYSCALL_SIZE, r6
100 ldsr r6, 11, 1
101 Lea _syscall_table, r6
102 ldsr r6, 12, 1
103 syncp
104#endif /* __v850e2v3__ */
105
106 /* =end modified for SC3 */
107
108#ifdef TOPPERS_USE_HFLOAT
109 /*
110 * FPUを有効に
111 */
112 stsr psw, r12 /* load psw */
113 mov 0x00010000,r13 /* PSW.CU0(PSW[16]) = 1 */
114 or r13, r12
115 ldsr r12, psw /* store psw */
116#endif /* TOPPERS_USE_HFLOAT */
117
118 /*
119 * hardware_init_hook の呼出し(0 でない場合)
120 *
121 * ターゲットハードウェアに依存して必要な初期化処理がある場合
122 * は,hardware_init_hook という関数を用意する.
123 */
124 Lea _hardware_init_hook, r1
125 cmp r0, r1
126 be hardware_init_hook_end
127 jarl _hardware_init_hook, lp
128FLABEL(hardware_init_hook_end)
129
130 /*
131 * BSSセクション初期化
132 * r0: ゼロレジスタ
133 */
134 mov r0, r6 /* r6: テーブルのインデックス i */
135 Lea _tnum_bsssec, r7
136 ld.w 0[r7], r7 /* r7: テーブルの要素数 num */
137 Lea _bsssecinib_table, r8 /* r8: テーブルのアドレス */
138FLABEL(bss_clear_start)
139 cmp r7, r6 /* ループ終了条件: i >= num */
140 bnl bss_clear_end
141 ld.w 0[r8], ep /* ep: bssの先頭番地 */
142 ld.w 4[r8], r9 /* r9: bssの終了番地 */
143 cmp r9, ep /* bssが空か? */
144 bnl bss_clear_start_hook /* 空ならば次のbssへ */
145 nop
146FLABEL(bss_clear_body)
147 /*
148 * bssの領域は,4byte境界にアラインされている
149 * よって,4byteずつデータをコピーしている
150 */
151 sst.w r0, 0[ep] /* bssの領域を0で初期化 */
152 add 4, ep /* 次の番地へ */
153 cmp r9, ep /* bssの終了番地まで来たか? */
154 bl bss_clear_body /* 終了番地でなければループ */
155#ifdef BSSSEC_ALIGN_MASK
156 /*
157 * 境界になるまで初期化を続ける
158 */
159 mov BSSSEC_ALIGN_MASK, r10
160FLABEL(bss_clear_body2)
161 tst r10, ep /* ep & 0xf == 0 ? */
162 bz bss_clear_start_hook
163 sst.w r0, 0[ep] /* 0初期化 */
164 add 4, ep
165 jr bss_clear_body2
166#endif /* BSSSEC_ALIGN_MASK */
167 nop
168FLABEL(bss_clear_start_hook)
169 add 8, r8 /* テーブルのアドレスをインクリメント 4byte * 2 -> 8 */
170 add 1, r6 /* テーブルのインデックスをインクリメント: i++ */
171 br bss_clear_start
172 nop
173FLABEL(bss_clear_end)
174
175#ifndef OMIT_DATA_INIT
176 /*
177 * dataセクションの初期化(ROM化対応)
178 *
179 */
180 mov r0, r6 /* r6: テーブルのインデックス i */
181 Lea _tnum_datasec, r7
182 ld.w 0[r7], r7 /* r7: テーブルの要素数 num */
183 Lea _datasecinib_table, r8 /* r8: テーブルのアドレス */
184FLABEL(data_init_start)
185 cmp r7, r6 /* ループ終了条件: i >= num */
186 bnl data_init_end
187 ld.w 0[r8], ep /* ep : dataの先頭番地 */
188 ld.w 4[r8], r9 /* r9 : dataの終了番地 */
189 ld.w 8[r8], r2 /* r2: idataの終了番地 */
190 cmp r9, ep /* dataが空か? */
191 bnl data_init_start_hook /* 空ならば次のdataへ */
192 nop
193FLABEL(data_init_body)
194 ld.b 0[r2], r10 /* idataの値をロード */
195 sst.b r10, 0[ep] /* idataの値をdataのアドレスへストア */
196 add 1, ep /* dataの次の番地へ */
197 add 1, r2 /* idataの次の番地へ */
198 cmp r9, ep /* dataの終了番地まで来たか? */
199 bl data_init_body /* 終了番地でなければループ */
200#ifdef DATASEC_ALIGN_MASK
201 /*
202 * 境界になるまで初期化を続ける
203 */
204 mov DATASEC_ALIGN_MASK, r10
205FLABEL(data_init_body2)
206 tst r10, ep /* ep & 0xf == 0 ? */
207 bz data_init_start_hook
208 sst.b r0, 0[ep] /* 0初期化 */
209 add 1, ep
210 jr data_init_body2
211#endif /* DATASEC_ALIGN_MASK */
212 nop
213FLABEL(data_init_start_hook)
214 add 12, r8 /* テーブルのアドレスをインクリメント 4byte * 3 -> 12 */
215 add 1, r6 /* テーブルのインデックスをインクリメント: i++ */
216 br data_init_start
217 nop
218FLABEL(data_init_end)
219#endif /* OMIT_DATA_INIT */
220
221 /*
222 * software_init_hook を呼出し(0 でない場合)
223 *
224 * ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
225 * 理がある場合は,software_init_hook という関数を用意すれば
226 * よい.
227 */
228
229 Lea _software_init_hook, r1
230 cmp r0, r1
231 be software_init_hook_end
232 jarl _software_init_hook, r31
233FLABEL(software_init_hook_end)
234
235 /*
236 * カーネルを起動する.
237 */
238 jarl _target_hardware_initialize, r31
239 jarl _main, r31
240 halt
241
242 .end
Note: See TracBrowser for help on using the repository browser.