<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://is.zng.info/wiki/experiment/index.php?action=history&amp;feed=atom&amp;title=%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF</id>
		<title>シミュレータ - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://is.zng.info/wiki/experiment/index.php?action=history&amp;feed=atom&amp;title=%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF"/>
		<link rel="alternate" type="text/html" href="https://is.zng.info/wiki/experiment/index.php?title=%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF&amp;action=history"/>
		<updated>2026-04-07T09:15:42Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.25.2</generator>

	<entry>
		<id>https://is.zng.info/wiki/experiment/index.php?title=%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF&amp;diff=4&amp;oldid=prev</id>
		<title>Maintenance script: ページの作成:「メモ:最新のコンパイラコードは、古いバージョンのシミュレータで実行できなくなっています。これは、put命令、get命令の処...」</title>
		<link rel="alternate" type="text/html" href="https://is.zng.info/wiki/experiment/index.php?title=%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF&amp;diff=4&amp;oldid=prev"/>
				<updated>2015-11-29T06:11:34Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「メモ:最新のコンパイラコードは、古いバージョンのシミュレータで実行できなくなっています。これは、put命令、get命令の処...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;メモ:最新のコンパイラコードは、古いバージョンのシミュレータで実行できなくなっています。これは、put命令、get命令の処理が変更されたためです([[命令セット(ドラフト)|命令セット[2x]]]参照)。[[コンパイラ]]のページにある新しいバージョンのシミュレータを使用します。&lt;br /&gt;
&lt;br /&gt;
メモ:[[プロセッサ 2x|コンパイラ]]のページにあるシミュレータはさらに更新されました。更新されたシミュレータは[[プロセッサ [2x]]]のページにあります。&lt;br /&gt;
&lt;br /&gt;
== 3/6 新sincos ==&lt;br /&gt;
昨年のfirexhlで使われていた方式で実装してみました（xhl.cとsincos.s）。指数部が152を超えるあたりから誤差が発生してしまいますが、これまでの2πの倍数を引く方式よりはだいぶ精度が良いようです。&lt;br /&gt;
&lt;br /&gt;
sincos.sをテストしていたら、0x4141D16E fsub 0x40C90FDB の結果が、シミュレータでは 0x40BA9302、Cのプログラムでは 0x40BA9301となっていました。どうしたものでしょう。&lt;br /&gt;
&lt;br /&gt;
シミュレータとアセンブラを少し修正しました。&lt;br /&gt;
&lt;br /&gt;
[[media:シミュレータ-&amp;quot;assembler.060306.zip&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== 1/22 関数呼び出しのカウント ==&lt;br /&gt;
JALからラベルに飛ぶ回数を数えてみました。以下はcontest.sldを計算させた結果です。&lt;br /&gt;
 ./a.out min-rt.bin sld/contest.bin ppm/contest.ppm&lt;br /&gt;
 Operations executed&lt;br /&gt;
 ----------------------------------------------------------------&lt;br /&gt;
 ADD      : 422544857&lt;br /&gt;
 SUB      : 2994757&lt;br /&gt;
 SLL      : 139670897&lt;br /&gt;
 SRR      : 27757726&lt;br /&gt;
 AND      : 4262640&lt;br /&gt;
 OR       : 0&lt;br /&gt;
 XOR      : 28065642&lt;br /&gt;
 NOT      : 0&lt;br /&gt;
 FADD     : 60037783&lt;br /&gt;
 FSUB     : 57195568&lt;br /&gt;
 FMUL     : 119303594&lt;br /&gt;
 FINV     : 1516934&lt;br /&gt;
 FSQRT    : 2197844&lt;br /&gt;
 RD       : 1300&lt;br /&gt;
 WR       : 154913&lt;br /&gt;
 SIN      : 0&lt;br /&gt;
 COS      : 0&lt;br /&gt;
 ATAN     : 0&lt;br /&gt;
 BR       : 0&lt;br /&gt;
 &lt;br /&gt;
 Label called from JAL&lt;br /&gt;
 ----------------------------------------------------------------&lt;br /&gt;
 rt.3079         : 1&lt;br /&gt;
 min_caml_div    : 56602&lt;br /&gt;
 min_caml_float_of_int   : 16623&lt;br /&gt;
 create_pixelline.3026   : 3&lt;br /&gt;
 create_pixel.3021       : 384&lt;br /&gt;
 min_caml_create_float_array     : 19001&lt;br /&gt;
 create_float5x3array.3019       : 1536&lt;br /&gt;
 min_caml_create_array   : 3297&lt;br /&gt;
 read_parameter.2744     : 1&lt;br /&gt;
 read_screen_settings.2725       : 1&lt;br /&gt;
 min_caml_read_float     : 212&lt;br /&gt;
 rad.2723        : 4&lt;br /&gt;
 min_caml_cos    : 1004&lt;br /&gt;
 min_caml_sin    : 5734&lt;br /&gt;
 min_caml_fneg   : 1927784&lt;br /&gt;
 read_light.2727         : 1&lt;br /&gt;
 min_caml_read_int       : 113&lt;br /&gt;
 read_all_object.2736    : 1&lt;br /&gt;
 read_nth_object.2732    : 18&lt;br /&gt;
 min_caml_fisneg         : 5006280&lt;br /&gt;
 min_caml_fiszero        : 11192350&lt;br /&gt;
 sgn.2598        : 122912&lt;br /&gt;
 min_caml_fispos         : 7854748&lt;br /&gt;
 min_caml_fsqr   : 17954371&lt;br /&gt;
 vecunit_sgn.2624        : 16386&lt;br /&gt;
 min_caml_sqrt   : 2197844&lt;br /&gt;
 read_and_network.2742   : 1&lt;br /&gt;
 read_net_item.2738      : 43&lt;br /&gt;
 read_or_network.2740    : 3&lt;br /&gt;
 write_ppm_header.2987   : 1&lt;br /&gt;
 min_caml_print_char     : 32773&lt;br /&gt;
 min_caml_print_int      : 3&lt;br /&gt;
 min_caml_print_int_pos  : 56600&lt;br /&gt;
 min_caml_mul    : 86380&lt;br /&gt;
 init_dirvecs.3062       : 1&lt;br /&gt;
 create_dirvecs.3055     : 1&lt;br /&gt;
 create_dirvec.3050      : 601&lt;br /&gt;
 create_dirvec_elements.3052     : 5&lt;br /&gt;
 calc_dirvec_rows.3046   : 1&lt;br /&gt;
 calc_dirvecs.3041       : 10&lt;br /&gt;
 calc_dirvec.3033        : 100&lt;br /&gt;
 adjust_position.3030    : 1000&lt;br /&gt;
 min_caml_atan   : 1000&lt;br /&gt;
 tan.3028        : 1000&lt;br /&gt;
 d_vec.2713      : 22730701&lt;br /&gt;
 vecset.2606     : 782214&lt;br /&gt;
 add_mod5.2603   : 16572&lt;br /&gt;
 init_dirvec_constants.3057      : 5&lt;br /&gt;
 setup_dirvec_constants.2842     : 602&lt;br /&gt;
 d_const.2715    : 15955271&lt;br /&gt;
 o_form.2654     : 23584119&lt;br /&gt;
 setup_surface_table.2833        : 1204&lt;br /&gt;
 o_param_a.2662  : 15144861&lt;br /&gt;
 o_param_b.2664  : 13092163&lt;br /&gt;
 o_param_c.2666  : 9692918&lt;br /&gt;
 setup_second_table.2836         : 5418&lt;br /&gt;
 quadratic.2767  : 3444202&lt;br /&gt;
 o_isrot.2660    : 3663074&lt;br /&gt;
 setup_rect_table.2830   : 3612&lt;br /&gt;
 o_isinvert.2658         : 13998105&lt;br /&gt;
 min_caml_xor    : 2081443&lt;br /&gt;
 fneg_cond.2600  : 206098&lt;br /&gt;
 veccpy.2616     : 167742&lt;br /&gt;
 setup_reflections.3077  : 1&lt;br /&gt;
 o_reflectiontype.2656   : 18497&lt;br /&gt;
 o_diffuse.2676  : 567663&lt;br /&gt;
 min_caml_fless  : 35627931&lt;br /&gt;
 o_param_abc.2668        : 832786&lt;br /&gt;
 veciprod.2627   : 1743576&lt;br /&gt;
 add_reflection.3064     : 1&lt;br /&gt;
 pretrace_line.3003      : 128&lt;br /&gt;
 vecbzero.2614   : 150396&lt;br /&gt;
 trace_ray.2933  : 16384&lt;br /&gt;
 p_surface_ids.2698      : 180662&lt;br /&gt;
 judge_intersection.2896         : 23755&lt;br /&gt;
 trace_or_matrix.2892    : 23755&lt;br /&gt;
 solver.2786     : 173579&lt;br /&gt;
 o_param_x.2670  : 8437945&lt;br /&gt;
 o_param_y.2672  : 8343343&lt;br /&gt;
 o_param_z.2674  : 8437945&lt;br /&gt;
 solver_rect_surface.2746        : 195262&lt;br /&gt;
 min_caml_fabs   : 25984199&lt;br /&gt;
 solve_one_or_network.2888       : 30531&lt;br /&gt;
 solve_each_element.2884         : 135676&lt;br /&gt;
 veciprod2.2630  : 629987&lt;br /&gt;
 check_all_inside.2869   : 1779616&lt;br /&gt;
 is_outside.2864         : 3133247&lt;br /&gt;
 bilinear.2772   : 74271&lt;br /&gt;
 get_nvector.2918        : 660732&lt;br /&gt;
 utexture.2921   : 660732&lt;br /&gt;
 o_texturetype.2652      : 660732&lt;br /&gt;
 o_color_red.2680        : 660732&lt;br /&gt;
 o_color_green.2682      : 660732&lt;br /&gt;
 o_color_blue.2684       : 660732&lt;br /&gt;
 p_intersection_points.2696      : 31490&lt;br /&gt;
 p_calc_diffuse.2700     : 55488&lt;br /&gt;
 vecaccum.2635   : 45411&lt;br /&gt;
 o_hilight.2678  : 18496&lt;br /&gt;
 shadow_check_one_or_matrix.2881         : 671071&lt;br /&gt;
 solver_fast.2809        : 4266685&lt;br /&gt;
 shadow_check_one_or_group.2878  : 870017&lt;br /&gt;
 shadow_check_and_group.2875     : 3270896&lt;br /&gt;
 add_light.2924  : 27884&lt;br /&gt;
 setup_startp.2847       : 37097&lt;br /&gt;
 o_param_ctbl.2692       : 12309001&lt;br /&gt;
 trace_reflections.2928  : 18496&lt;br /&gt;
 r_dvec.2719     : 18496&lt;br /&gt;
 judge_intersection_fast.2910    : 1134556&lt;br /&gt;
 trace_or_matrix_fast.2906       : 1134556&lt;br /&gt;
 solver_fast2.2827       : 11678352&lt;br /&gt;
 solve_one_or_network_fast.2902  : 1819379&lt;br /&gt;
 solve_each_element_fast.2898    : 8647162&lt;br /&gt;
 p_rgb.2694      : 32768&lt;br /&gt;
 p_set_group_id.2708     : 16384&lt;br /&gt;
 pretrace_diffuse_rays.2993      : 16384&lt;br /&gt;
 get_surface_id.2971     : 151905&lt;br /&gt;
 scan_pixel.3007         : 128&lt;br /&gt;
 neighbors_exist.2967    : 16384&lt;br /&gt;
 do_without_neighbors.2964       : 508&lt;br /&gt;
 write_rgb.2991  : 16384&lt;br /&gt;
 write_rgb_element.2989  : 49152&lt;br /&gt;
 min_caml_int_of_float   : 49152&lt;br /&gt;
 try_exploit_neighbors.2980      : 15876&lt;br /&gt;
 neighbors_are_available.2974    : 17844&lt;br /&gt;
 p_energy.2702   : 22250&lt;br /&gt;
 vecscale.2645   : 11125&lt;br /&gt;
 p_nvectors.2711         : 24119&lt;br /&gt;
 r_surface_id.2717       : 11283&lt;br /&gt;
 r_bright.2721   : 10339&lt;br /&gt;
 p_group_id.2706         : 12994&lt;br /&gt;
 trace_diffuse_rays.2947         : 17109&lt;br /&gt;
 trace_diffuse_ray.2939  : 1116060&lt;br /&gt;
 p_received_ray_20percent.2704   : 59274&lt;br /&gt;
 min_caml_floor  : 189204&lt;br /&gt;
 calc_diffuse_using_1point.2955  : 1869&lt;br /&gt;
 trace_diffuse_ray_80percent.2951        : 1869&lt;br /&gt;
 calc_diffuse_using_5points.2958         : 9256&lt;br /&gt;
 vecadd.2639     : 37024&lt;br /&gt;
環境はux101.ecc.u-tokyo.ac.jpでだいたい45分くらいかかってしまいました。&lt;br /&gt;
diffを取ったら一致しない点が多数あったので、三角関数などの精度がまだ足りないようです。&lt;br /&gt;
[[media:シミュレータ-simulator.0122.zip]]&lt;br /&gt;
&lt;br /&gt;
== 12/19 中間発表 ==&lt;br /&gt;
あまり内容がなくて申し訳ないのですが、とりあえずこんな感じでしょうか。&lt;br /&gt;
*アセンブラ&lt;br /&gt;
**Perlで記述&lt;br /&gt;
**アセンブリをhexに直してテキスト/バイナリにする&lt;br /&gt;
*シミュレータ&lt;br /&gt;
**C言語で記述&lt;br /&gt;
**hex形式の命令列を読んで実行&lt;br /&gt;
**ブレークポイントの設定、ステップ実行&lt;br /&gt;
**I/Oは今のところ標準入出力&lt;br /&gt;
**実機のFPUの動作をシミュレート（by平野氏）&lt;br /&gt;
*ライブラリ&lt;br /&gt;
**外部関数のアセンブリを書いてコンパイル後のアセンブリにコピペ&lt;br /&gt;
**floor、ftoi、itofは完成（by平野氏）&lt;br /&gt;
**三角関数はソフトウェアで実現（多項式近似、CORDIC？）&lt;br /&gt;
とりあえずCORDICというものをCで書いてみました。誤差評価がまだですが・・・&lt;br /&gt;
[[media:シミュレータ-cordic.c]]&lt;br /&gt;
&lt;br /&gt;
== 12/8 Thanks! &amp;gt; ひらの氏 ==&lt;br /&gt;
まったくその通りでした。全然気が付かなかった・・・&lt;br /&gt;
&lt;br /&gt;
あとnamasute氏に質問なんですが、create_pixellineやinit_line_elementsなどの関数の末尾呼び出しの際には、jalではなくjumpを使うべきではないでしょうか？&lt;br /&gt;
&lt;br /&gt;
===  namasute ===&lt;br /&gt;
うぐぅ、修正しますた。サンクスコ。&lt;br /&gt;
&lt;br /&gt;
== 12/7 ==&lt;br /&gt;
min-rt.mlを実行するために、いろいろと無理矢理やってみた。&lt;br /&gt;
*外部関数(miniMLRuntime.mlにあるもの)はアセンブリコードのライブラリとしてlib.sに書いた。&lt;br /&gt;
*グローバル変数については各変数が使う領域の初期のサイズを調べ、それが指すアドレスをリストにしたものをglobals.sに書いた。&lt;br /&gt;
*三角関数などの数学関数については全て命令としてシミュレータが計算するようにした。&lt;br /&gt;
*シミュレータ用に、sin, cos, atanの３つの数学関数命令、浮動小数専用の入力命令frd、デバッグ用命令br(&amp;#039;&amp;#039;br num&amp;#039;&amp;#039;でその位置で実行を一時停止し&amp;#039;&amp;#039;num&amp;#039;&amp;#039;と状態を表示)を追加した。&lt;br /&gt;
なおバイナリを生成する際はコンパイラが吐いたmin-rt.sの最後にglobals.sとlib.sをコピペするという原始的な方法をとっている。そのうちリンカみたいなかっこいいものを作りたいが。&lt;br /&gt;
&lt;br /&gt;
現在、min-rt.outを実行すると謎のセグフォで落ちてしまう。gdbで追っても原因がわからず苦戦している。誰かわかる方がいたら教えてください。&lt;br /&gt;
&lt;br /&gt;
=== review by ひらの ===&lt;br /&gt;
たぶんcalc関数の再帰のしすぎだと思った。&lt;br /&gt;
&lt;br /&gt;
for構文に修正すれば直るかと思う。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 11/5 ==&lt;br /&gt;
===  review by ひらの ===&lt;br /&gt;
とりあえず、乙です。zipファイルの中身を一見してシミュレータだけかと思ってmakeしてみるとアセンブラも出てきてちょっと驚いた。lexer使いこなしておる図。アセンブラはちょうど非常に欲しかったところだったので、ありがたい。&lt;br /&gt;
ラベル機能とか付加していくとそうもシンプルなままとはいかないだろうが。&lt;br /&gt;
&lt;br /&gt;
=== fibできた＆バグ発見 by 高山 ===&lt;br /&gt;
関数呼び出しの手続きを使ってfibを動かしました（やり方は駒場で習ったそのまんま）。途中でJUMPのバグを発見。&lt;br /&gt;
&lt;br /&gt;
== 11/4 ==&lt;br /&gt;
&lt;br /&gt;
一応アセンブラと本体らしきものができた。（遅&lt;br /&gt;
&lt;br /&gt;
まだ階乗プログラムしか試してないです。っつーかアセンブリコード考えるのがめんどい希ガス&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>	</entry>

	</feed>