ruby-trunk-changes r62367 - r62387

今日も主に MJIT のビルド関連の修正がありました。

k0kubun: r62367 2018-02-11 21:04:48 +0900

Makefile.in でデバッグ用に make mjit_config.h の最後に生成したファイルの内容を出力するようにしています。 CI でビルドが失敗しているので内容を確認するためみたいです。

k0kubun: r62368 2018-02-11 21:21:13 +0900

tool/ruby_vm/views/_mjit_compile_send.erb で生成する C のソースコードで警告を抑制するために明示的なキャストを追加しています。

k0kubun: r62369 2018-02-11 21:28:10 +0900

mjit.c で -include-pch や -emit-pch などのコンパイラオプションは clang でしかサポートされていないので(?)、変数で定義しておいたのをやめて直に書くようにしています。

nobu: r62370 2018-02-11 21:40:28 +0900

mjit_config.h の生成時に改行を入れるために行継続のバックスラッシュを入れてましたが、シングルクオート内で2つのバックスラッシュを書いてたのでクオートの外に出すようにしています。shell によってはシングルクオート内のバックスラッシュがそのままエスケープされず2つのバックスラッシュとして出てたということじゃないかなぁ多分。

k0kubun: r62371 2018-02-11 21:50:23 +0900

mjit_config.h の生成の再修正で、そもそも echo -n を使って改行せずにマクロ定義を吐くようにしています。

k0kubun: r62372 2018-02-11 22:46:54 +0900

r62371 のさらに再修正で、echo -n というオプションが使えない環境もあるということで、printf コマンドを使うようにしています。むしろ printf はあるんだ。

nobu: r62373 2018-02-11 23:01:52 +0900

さらにさらに mjit_config.h の生成ルールの修正で、printf を使うなら %s を使って埋め込むことで shell の for 文を使わないようにしています。すっきりしましたね。

k0kubun: r62374 2018-02-11 23:18:38 +0900

r62371 で r62367 で追加した mjit_config.h の内容を出力するデバッグ用のコマンドは削除していましたが、r62373 が Travis CI でビルド失敗したそうなので再度デバッグ出力を仕込んでいます。

k0kubun: r62375 2018-02-11 23:38:54 +0900

r62373 でマクロの内容が空文字列の時にエラーになってたようなので、空の時は空文字列ではなくて何にも展開しないように定義するように修正しています。

k0kubun: r62376 2018-02-12 10:00:30 +0900

mingw 環境で mjit_compile.c で生成する C のソースコードVALUE を %p で出力していたとこでリテラルの suffix が足りなくてコンパイルエラーが出ていたのを修正しています。PRIxVALUE を使って埋め込むようにしています

svn: r62377 2018-02-12 10:00:30 +0900

version.h の日付更新。

nobu: r62378 2018-02-12 12:33:00 +0900

test/ruby/test_jit.rb の MJIT のテストのメソッドを VM 命令毎に分割しています。

nobu: r62379 2018-02-12 12:39:18 +0900

MJIT の --jit-cc オプションのサポートを削除しています。実際には本体のビルド時と同じコンパイラを利用しないといけないので指定する必要がない(別のコンパイラが指定できるとむしろまずい)とのこと。たぶん利用コンパイラの検出がうまくいかない時の補助用とかだったんだと思いますが、もうコンパイラ検出はうまくいくようになったので不要になったとかそんな感じかと。

k0kubun: r62380 2018-02-12 13:00:45 +0900

test/ruby/test_jit.rb で MJIT がサポートされてない環境ではテストクラス/テストメソッド定義前に toplevel return で抜けてましたが、setup メソッドで明示的に skip で飛ばすようにしています。

k0kubun: r62381 2018-02-12 13:35:16 +0900

test/ruby/test_jit.rb の独自 assertion assert_compile_once でスクリプト内容が複数行あった時にインデントしてメッセージが読みやすいようにしています。

k0kubun: r62382 2018-02-12 14:04:24 +0900

コマンドラインオプションで --jit-verbose=1 が指定されてた時に mjit_compile() に失敗した時に警告メッセージを出力するようにしています。また未対応の VM 命令の時の警告の出力レベルを 3 -> 1 に下げています。

k0kubun: r62383 2018-02-12 15:54:25 +0900

tool/ruby_vm/views/_mjit_compile_insn.erb から VM 命令のスースコードのマクロ展開する部分を tool/ruby_vm/views/_mjit_compile_insn_line.erb というテンプレートファイルに切り出しています。

k0kubun: r62384 2018-02-12 16:27:48 +0900

MJIT 用のテンプレート tool/ruby_vm/views/_mjit_compile_insn_line.erb を tool/ruby_vm/views/_mjit_compile_insn.erb に移動して tool/ruby_vm/views/_mjit_compile_insn.erb から行毎でなく insn 全体の処理をまかせるようにリファクタリングしています。

k0kubun: r62385 2018-02-12 17:09:25 +0900

r62367 で追加して r62371 で削除後 r62374 でまた追加してた mjit_config.h の生成時に内容を出力するデバッグ用コマンドを再度削除しています。

nobu: r62386 2018-02-12 18:02:30 +0900

tool/ruby_vm/views/_mjit_compile_insn_body.erb でインデント除去つきヒアドキュメント(<<~)を使っていたのを、通常の(終端マーカーのインデントは許す <<-)を使うようにしています。古い BASERUBY でも動くようにとのこと。

k0kubun: r62387 2018-02-12 18:05:12 +0900

r62087 で VM のメインループで VM スタックの sp 調整を insns.def の attribute をみて行なうようにしていたため dupn 命令での INC_SP() と DEC_SP() は不要になっていたということで削除しています。