- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2017-2018 by TOPPERS Project 7 7 #-- 8 # ä¸è¨èä½æ¨©è 9 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 10 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 11 # å¤ã»åé 12 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 13 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 14 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 15 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 16 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 17 # ç¨ã§ããå½¢ã§åé 18 å¸ããå ´åã«ã¯ï¼åé 19 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 20 # è 21 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 22 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 23 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 24 # ç¨ã§ããªãå½¢ã§åé 25 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 26 # ã¨ï¼ 27 # (a) åé 28 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 30 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 # (b) åé 32 å¸ã®å½¢æ 33 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 34 # å ±åãããã¨ï¼ 35 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 36 # 害ãããï¼ä¸è¨èä½æ¨©è 37 ããã³TOPPERSããã¸ã§ã¯ããå 38 責ãããã¨ï¼ 39 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 40 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 41 ããã³TOPPERSããã¸ã§ã¯ãã 42 # å 43 責ãããã¨ï¼ 8 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 9 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 10 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 11 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 12 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 13 # スコード中に含まれていること. 14 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 15 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 16 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 17 # の無保証規定を掲載すること. 18 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 19 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 20 # と. 21 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 24 # 報告すること. 25 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 26 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 27 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 28 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 29 # 免責すること. 44 30 # 45 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 # ã®è²¬ä»»ãè² ããªãï¼ 31 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 # の責任を負わない. 51 36 # 52 37 # $Id$ 53 38 #++ 54 39 55 # TECS æ 56 å ±ã»ã«ã®çæ 40 # TECS 情報セルの生成 57 41 module TECSInfo 58 # region 㯠Link root ã®ãã¨42 # region は Link root のこと 59 43 def self.print_info f, region 60 44 # p "region: "+ region.get_name.to_s … … 67 51 Type.reset_print_info 68 52 69 # mikan å 70 ¨é¨çæããã®ã§ã¯ãªããregion ä¸ã®ã»ã«ã®ã»ã«ã¿ã¤ãã¨ãããããåç 71 §ãããã·ã°ããã£ãã»ã«ã¿ã¤ãã«éå®ãã¦åºåãã¹ã 72 # ããããæå³è§£æå¾ã«åºåãããããããã¯å®¹æã§ã¯ãªãï¼æé©åã¨ã³ã¼ãçæã¯ããªã³ã¯ã«ã¼ããã¨ã«è¡ãããï¼ 53 # mikan 全部生成するのではなく、region 下のセルのセルタイプと、そこから参照されるシグニチャ、セルタイプに限定して出力すべき 54 # しかし、意味解析後に出力するため、これは容易ではない.最適化とコード生成は、リンクルートごとに行われる. 73 55 Namespace.print_info f, indent 74 56 region.get_link_root.print_info f, indent … … 90 72 91 73 class Namespace 92 # RootRegion 㨠LinkRegion ã¯åã Region ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã§ãã 93 # åãã¼ã ã¹ãã¼ã¹ã¯ Namespace ã¯ã©ã¹ã®ãåãªã¼ã¸ã§ã³ã¯ Region ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã§ãã 94 # ããã¯ãæå³è§£æ段éã§å¼ã³åºãããããããªã³ã¯ã¦ããããã¨ã«åºãããããã¨ãã§ããªã 95 # åºããããã«ã¯ã2ãã¹ã«ããå¿ 96 è¦ããã 74 # RootRegion と LinkRegion は同じ Region クラスのオブジェクトである 75 # 子ネームスペースは Namespace クラスの、子リージョンは Region クラスのオブジェクトである 76 # これは、意味解析段階で呼び出されるため、リンクユニットごとに出しわけることができない 77 # 出しわけるには、2パスにする必要がある 97 78 def print_info_ns_sub f, indent 98 79 if @name == "::" then … … 151 132 } 152 133 @namespace_list.each { |ns| 153 if ns.instance_of? Namespace then # region ãå«ããªã134 if ns.instance_of? Namespace then # region を含めない 154 135 ns.print_info_ns f, indent 155 136 end … … 161 142 end 162 143 163 #=== Namespace# æ§é ä½ã¡ã³ãã¼ã®ãªãã»ããå®ç¾©144 #=== Namespace# 構造体メンバーのオフセット定義 164 145 def print_struct_define f 165 146 f.print "\n/***** Offset of members of structures *****/\n" … … 184 165 } 185 166 @namespace_list.each { |ns| 186 if ns.instance_of? Namespace then # region ãå«ããªã167 if ns.instance_of? Namespace then # region を含めない 187 168 ns.print_celltype_define_offset f 188 169 end … … 197 178 } 198 179 @namespace_list.each { |ns| 199 if ns.instance_of? Namespace then # region ãå«ããªã180 if ns.instance_of? Namespace then # region を含めない 200 181 ns.print_celltype_define f 201 182 end … … 210 191 } 211 192 @namespace_list.each { |ns| 212 if ns.instance_of? Namespace then # region ãå«ããªã193 if ns.instance_of? Namespace then # region を含めない 213 194 ns.print_call_define f 214 195 end … … 223 204 } 224 205 @namespace_list.each { |ns| 225 if ns.instance_of? Namespace then # region ãå«ããªã206 if ns.instance_of? Namespace then # region を含めない 226 207 ns.print_entry_define f 227 208 end … … 415 396 416 397 def print_define_offset f 417 # intptr_t ã«ä¸åãã£ã¹ãããã®ã¯ 64bit çãèéãã¦ã®ãã¨ï¼ããã 32bit ã¨ãã¦ããã®ã§ 4GB ãè¶ 418 ããæ§é ä½çã¯æ±ããªã 398 # intptr_t に一回キャストするのは 64bit 版を考量してのこと.しかし 32bit としているので 4GB を超える構造体等は扱えない 419 399 if @n_cell_gen > 0 then 420 400 f.print <<EOT … … 453 433 // #include "#{@global_name}_tecsgen.h" // no cell exist 454 434 EOT 455 # çæãããªãã»ã«ã¿ã¤ã435 # 生成されないセルタイプ 456 436 @attribute.each{ |decl| 457 437 f.printf "#define OFFSET_OF_%-30s (%s)\n", "#{@global_name}_#{decl.get_name}", "0xffffffff" … … 641 621 red = "(void *)0" 642 622 end 643 # mikan åãå£é 644 å 623 # mikan 受け口配列 645 624 f.print <<EOT 646 625 #{indent}cell nTECSInfo::tRawEntryDescriptorInfo #{@global_name}_#{port.get_name}RawEntryDescriptorInfo { … … 795 774 796 775 def print_info f, indent 797 # Type ã® info ã¯ãæå¾ã«ã¾ã¨ãã¦åºåããã®ã§ãããã§ã¯è¨é²ããã ã776 # Type の info は、最後にまとめて出力するので、ここでは記録するだけ 798 777 if @@typeinfo_printed[ get_ID_str ] then 799 778 return … … 821 800 822 801 def print_info_post f, indent 823 if self.class.superclass == Type then # 親ã¯ã©ã¹ã Type ã®å ´å types.rb ã®ã¯ã©ã¹802 if self.class.superclass == Type then # 親クラスが Type の場合 types.rb のクラス 824 803 type_name = self.class.name 825 804 else 826 type_name = self.class.superclass.name # ctypes.rb ã®ã¯ã©ã¹ (親ã¯ã©ã¹ã types.rb ã®ã¯ã©ã¹)805 type_name = self.class.superclass.name # ctypes.rb のクラス (親クラスが types.rb のクラス) 827 806 end 828 807 # p "type: #{type_name}, #{self.class.name}" … … 856 835 end 857 836 858 #=== Type# åæååã®èå¥åå859 # åæååã«å«ã¾ããèå¥åã¨ãã¦ç¨ãããã¨ã®ã§ããªãæåãç¨ãããã¨ã®ã§ããæååã«ç½®ãæãã860 # 空ç½=> __837 #=== Type# 型文字列の識別子化 838 #型文字列に含まれる識別子として用いることのできない文字を用いることのできる文字列に置き換える 839 # 空白 => __ 861 840 # * => _Ptr_ 862 841 # [] => _Array_ -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.