source: anotherchoice/tags/jsp-1.4.4-full-UTF8/utils/h8-renesas/genoffset@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 6.0 KB
Line 
1#! /usr/bin/perl
2#
3# TOPPERS/JSP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Just Standard Profile Kernel
6#
7# Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
8# Toyohashi Univ. of Technology, JAPAN
9# Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
10# Graduate School of Information Science, Nagoya Univ., JAPAN
11# Copyright (C) 2005-2007 by Industrial Technology Institute,
12# Miyagi Prefectural Government, JAPAN
13#
14# 上記著作権者
15は,以下の (1)〜(4) の条件か,Free Software Foundation
16# によってå…
17¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
18# 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
19# を改変したものを含む.以下同じ)を使用・複製・改変・再é…
20å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
21# 利用と呼ぶ)することを無償で許諾する.
22# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24# スコード中に含まれていること.
25# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26# 用できる形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
29# 者
30マニュアルなど)に,上記の著作権表示,この利用条件および下記
31# の無保証規定を掲載すること.
32# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33# 用できない形で再é…
34å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
35# と.
36# (a) 再é…
37å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
38マニュアルなど)に,上記の著
39# 作権表示,この利用条件および下記の無保証規定を掲載すること.
40# (b) 再é…
41å¸ƒã®å½¢æ…
42‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
43# 報告すること.
44# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
45# 害からも,上記著作権者
46およびTOPPERSプロジェクトをå…
47è²¬ã™ã‚‹ã“と.
48#
49# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
50お
51# よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
52# 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
53# 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
54#
55# @(#) $Id: genoffset,v 1.8 2007/03/23 07:25:47 honda Exp $
56#
57
58#
59# makeoffset.cのアセンブル結果から構造体内
60のオフセットを求める
61#  ルネサス製コンパイラ H8C専用
62#
63#  使い方
64#   perl genoffset makeoffset.src
65#
66
67
68#
69# 初期化
70#
71$infile = $ARGV[0];
72
73#
74# ビットサーチ
75#
76sub search_bit {
77 my($val) = @_;
78 my($val_bit);
79
80 return(-1) if ($val == 0);
81
82 $val_bit = 0;
83 while (($val & 1) == 0) {
84 $val >>= 1;
85 $val_bit++;
86 }
87 return($val_bit);
88}
89
90#
91# オフセット値の出力
92#
93#  対象パターンの例:
94#    MOV.L #22,ER0
95#    MOV.L #H'00000010,ER0
96#    MOV.W #4,R0
97#    MOV.W #H'0010,R0
98#    MOV.B #8,R0L
99#    MOV.B #8:8,R0L
100#    MOV.B #H'1A:8,R0L
101#
102sub parse_offset {
103 my($label) = @_;
104 my($offset);
105
106 while ($line = <INFILE>) {
107 chomp $line;
108 # 10進数4バイトの場合
109 if ($line =~ /MOV\.L +#([\d]+)(:32)* *, *ER0/) {
110 $offset = $1;
111
112 # 定義の出力
113 printf "%s:\t.DEFINE\t\"%s\"\n", $label, $offset;
114 last;
115 }
116 # 10進数2バイトの場合
117 elsif ($line =~ /MOV\.W +#([\d]+)(:16)* *, *R0/) {
118 $offset = $1;
119
120 # 定義の出力
121 printf "%s:\t.DEFINE\t\"%s\"\n", $label, $offset;
122 last;
123 }
124 # 10進数1バイトの場合
125 elsif ($line =~ /MOV\.B +#([\d]+)(:8)* *, *R0L/) {
126 $offset = $1;
127
128 # 定義の出力
129 printf "%s:\t.DEFINE\t\"%s\"\n", $label, $offset;
130 last;
131 }
132 # 16進数4バイトの場合
133 elsif ($line =~ /MOV\.L +#H\'([0-9a-fA-F]+)(:32)* *, *ER0/) {
134 $offset = $1;
135
136 # 定義の出力
137 printf "%s:\t.DEFINE\t\"H\'%s\"\n", $label, $offset;
138 last;
139 }
140 # 16進数2バイトの場合
141 elsif ($line =~ /MOV\.W +#H\'([0-9a-fA-F]+)(:16)* *, *R0/) {
142 $offset = $1;
143
144 # 定義の出力
145 printf "%s:\t.DEFINE\t\"H\'%s\"\n", $label, $offset;
146 last;
147 }
148 # 16進数1バイトの場合
149 elsif ($line =~ /MOV\.B +#H\'([0-9a-fA-F]+)(:8)* *, *R0L/) {
150 $offset = $1;
151
152 # 定義の出力
153 printf "%s:\t.DEFINE\t\"H\'%s\"\n", $label, $offset;
154 last;
155 }
156
157 elsif ($line =~ /^ *RTS$/) { # rts命令の場合
158 print "#error Parse error: $label by genoffset script\n";
159 close(INFILE);
160 print STDERR "Error: parse error $label by genoffset script\n";
161 exit(1);
162 }
163 }
164}
165
166#
167# ビットフィールドの解析
168#
169sub parse_bit {
170 my($label) = @_;
171 my($data, $zero, $ptn, $len, $offset, $bit);
172 $data = "";
173
174 while ($line = <INFILE>) {
175 chomp $line;
176 if ($line =~ s/\.DATA\.[LW]//) {
177 $line =~ s/[^0-9a-fA-F]//g;
178 $data .= $line;
179 } else {
180 last;
181 }
182 }
183
184 $data =~ /(0+)([^0])/;
185 $zero = $1;
186 $ptn = $2;
187
188 $len = length($zero);
189 $offset = int($len / 2);
190 $bit = search_bit($ptn);
191 if (($len % 2) eq 0) {
192 $bit += 4;
193 }
194
195 # 定義の出力
196 printf "%s:\t.DEFINE\t\"%s\"\n", $label, $offset;
197 printf "%s_bit:\t.DEFINE\t\"%s\"\n", $label, $bit;
198 printf "%s_mask:\t.DEFINE\t\"H\'%x\"\n", $label, (1 << $bit);
199}
200
201
202#
203# メインルーチン
204#
205print "; This file is generated by genoffset.\n";
206print "\n";
207
208$error = 0;
209open(INFILE, $infile) || die "Cannot open $infile";
210
211while ($line = <INFILE>) {
212 chomp $line;
213
214 if ($line =~ /^_OFFSET_DEF_([^ \t]+):/) {
215 do parse_offset($1);
216 }
217 elsif ($line =~ /^_BIT_FIELD_OFFSET_([^ \t]+):/) {
218 do parse_bit($1);
219 }
220}
221
222close(INFILE);
223exit($error);
Note: See TracBrowser for help on using the repository browser.