4 # Toyohashi Open Platform for Embedded Real-Time Systems
6 # Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 # Toyohashi Univ. of Technology, JAPAN
8 # Copyright (C) 2004-2010 by Embedded and Real-Time Systems Laboratory
9 # Graduate School of Information Science, Nagoya Univ., JAPAN
11 # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 # 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 # @(#) $Id: genoffset 1840 2010-07-10 17:29:42Z ertl-hiro $
87 my($label, $val) = @_;
89 printf "#define %s\t%d\n",$label,$val;
99 while ($line = <INFILE>) {
101 next if ($line =~ /^[ \t]*[#;].*$/);
103 if ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^ \t]*)[ \t]*/
104 && defined($dir = $directives{$1})) {
108 $directives{$directive} = $size;
114 print STDERR "genoffset: cannot parse: $line\n";
127 return(-1) if ($val == 0);
130 while (($val & 1) == 0) {
141 my($endian, $size, $label) = @_;
142 my($offset, $dir, $val, $val_bit);
144 if ($sil_endian && $endian ne $sil_endian) {
146 print STDERR "genoffset: endian mismatch: $line\n";
151 while ($line = <INFILE>) {
153 next if ($line =~ /^[ \t]*[#;].*$/);
155 if ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^ \t]*)[ \t]*/
156 && defined($dir = $directives{$1})) {
160 if ($val =~ /^0x(.+)$/) {
163 elsif ($val =~ /^0(.+)$/) {
169 print STDERR "genoffset: unknown directive: $line\n";
184 # 値が0でないフィールドが見つかればループを終了
190 print STDERR "genoffset: cannot parse: $line\n";
196 $val_bit = do search_bit($val);
199 if ($endian eq "B") {
201 $offset -= $val_bit >> 3;
204 $offset += $val_bit >> 3;
210 if ($endian eq "B") {
212 $val_bit -= ($offset & 0x03) << 3;
215 $val_bit += ($offset & 0x03) << 3;
219 elsif ($size eq "H") {
220 if ($endian eq "B") {
222 $val_bit -= ($offset & 0x01) << 3;
225 $val_bit += ($offset & 0x01) << 3;
232 printf "#define %s\t%d\n",$label,$offset;
233 printf "#define %s_bit\t%d\n",$label,$val_bit;
234 printf "#define %s_mask\t0x%x\n",$label,(1 << $val_bit);
240 print "/* This file is generated by genoffset. */\n";
244 open(INFILE, $infile) || die "Cannot open $infile";
245 while ($line = <INFILE>) {
248 if ($line =~ /^[ \t]*OFFSET_DEF ([^ \t]+) = [#\$]?([^ \t]+)/) {
249 do parse_offset($1, $2);
251 elsif ($line =~ /^[ \t]*_?BIT_REF_([0-9]+):/) {
254 elsif ($line =~ /^[ \t]*_?BIT_([BL])([BHW])_([^ \t]+):/) {
255 do parse_bit($1, $2, $3);
257 elsif ($line =~ /^[ \t]*SIL_ENDIAN = ([BL])/) {