mosh

Mosh JIT で R6RS test suite が SEGV する原因はアラインメントだった

タイトルの通り落ちると思ったらアラインメントが原因だった。はまらずにすぐに原因を発見できた自分をほめたい。 0x000000000045c0ec in scheme::Flonum::iDiv (theVM=0xa20c80, argc=2, argv=<value optimized out>) at src/Flonum.h:375 375 return f2 > 0.0 ? ::floor(f1 / f2</value>…

Mosh 0.2.4 リリース

Mosh 0.2.4をリリースしました。

続 R6RS Records

Mosh の R6RS Records に関するバグ指摘があって調べていた。仕様を正しく理解していなかったのが原因。 仕様は理解できたのだが実装できる気がしない。Mosh は Records の Procedural レイヤを C++ で書いているのだが、3 つのレコードが継承関係にあるとき…

今日の Mosh/Mona

Mosh: Issues を全てやっつけた。 Mona: select 実装中。

Fasl の循環構造に悩む

どこにバグを入れてしまったのか。

循環構造にはまる

SRFI-38 の #1=(#1#) を mosh 本体が read できるようにした。→ (mosh test) が失敗時に循環構造表示しようとして無限ループ。→ expander が循環構造を永遠に annotation-strip する。など。

Mosh の Issues をつぶしていく

リリースが近いので Mosh の Issues をつぶす。昨日、今日がんばった。 Issue 131 - A bug on SRFI-19 Issue 41 - feature request: multiple libraries and a top-level program into a single sourde file Issue 48 - Extended syntax must raise exceptio…

Lisp コードバトン発表資料

Shibuya.lisp Tech Talk #5 の発表資料です。 Lisp code batton - Shibuya.lisp Tech Talk #5

jcc rel32

JIT で jcc rel8 にしか対応していなくて大きめの関数だとコンパイルエラーにしていた。jcc rel32 に対応してうまくうごいたのだが、一部うまく動かないなあ。

Mosh バグ修正

気づきにくいバグはまだまだ残っているのだろうな。

Mosh のバグ2件修正

letrec* のバグ JIT ブランチのアリティバグ

Mosh 0.2.3 リリース

メンテナンスリリース。S式のシリアライズ(Fasl)が循環リストなどを正しく読み書きできるようになりました。 http://code.google.com/p/mosh-scheme/

Fasl フォーマット変更中

SRFI-38 的な意味での共有されるオブジェクトを正しく fasl-write/read できるように変更中。シリアライズされたライブラリだけではなく、内蔵されているコンパイラも Fasl なので変更作業は手間がかかり面倒。

let 対応 - JIT

let の実現のために LET_FRAME, ENTER, LEAVE を JIT で実装。また別件で rbp の値がおかしくなるバグを修正。徐々に安定してきた。

JIT CALL 動いた

TAIL_CALL 命令の追加が功を奏しうまくうごいた。後の自分のために呼び出し時の動きをコメントで残しておこう。メモリアロケーションが起きないように改善も。

VM.cpp をリファクタリング

VM クラスが巨大になってきたのでリファクタリング。一番いじる場所なのでどんどん汚くなっていったのだがようやく重複コードを取り除く事が出来た。これからも継続してきれいに保つように。

TAIL_CALL 命令追加

追加した。いくつかの細かい修正を master に。 jit / nmosh 両ブランチに merge 。

JIT call に悩む悩む

ここ2週間くらい JIT コンパイルされた subr からクロージャを call する方法について悩みまくっている。 VM の run ループがネストする際にスタックを調節したり、番兵の HALT を挿入したりと結構大変。おおよそ道筋が出来てきたが、CALL が tail-context …

O3

gdb + Emacs で VM ループをデバッグしていたら、全然違う行番号にジャンプしてびっくり。caes 内の共通コードがくくりだされたからか。O0 でデバッグしよう。

Mosh 0.2.2 をリリースしました

Mosh 0.2.2 をリリースしました。ソースコードダウンロード。 バグ修正がメインのメンテナンスリリースです。また id:mjt さんによって IrRegex が移植されました。 リリースの詳細。

JIT call のバグを追う

JIT CALL からの call の前後で this ポインタの値が不正になる事が分かった。レジスタの保存忘れだ。しかしまだ落ちる。何だろう。 JIT RETURN 時に不正な pc_ を引いてしまうな。

JIT call に悩む

JIT compiled な関数から retq すると、とんでもないところに戻るな。なんだこれは。

JIT の CALL インストラクションで手を抜きたい

VM ループの CALL 命令は case (CALL): { #include "長いコード" } のようになっている。include しているのは CALL の合成命令、例えば REFER_GLOBAL_CALL などで同じコードを使いたいから。 さて CALL 命令を JIT 化するには長いコードをアセンブリでごり…

boot 周りの整理がだいたい終わった

bootstrap に必要なファイルを boot/ 以下に整理し、異なるブートファイルをロードする nmosh と psyntax-mosh をうまくビルドできるように。

今日の Mosh

JIT は VECTOR_REF を実装。エラー時に呼び出す関数を定義して出来るだけエラー処理を簡単に。アセンブリからエラー処理書いてたらキリがない。 ロジックが絶対間違っていないのにおかしな挙動すると思ったら、自作アセンブラがバグってた。cmpq の opcode …

今日の Mosh

JIT の SYMBOL_P を実装。いくつかの処理をまとめた。

今日の Mosh

JIT を細々と継続実装中。 CAR, CAR_PUSH, CDR, CADR and NULL_P.

Re:moshで修論は書けるのか

moshに関するパート自体は非常に上手く行っている。TCPの実装といった実験はもとより、文書の整形や表記統一*1などもmoshで処理している。というわけでmoshはAWKやperlをあまり使わなくて良い域に来ているように思える。 http://d.hatena.ne.jp/mjt/20100122…

Mosh バグ修正2件

id:leque さんがバトンきっかけで発見・修正してくださった物。ありがたい。 http://code.google.com/p/mosh-scheme/issues/detail?id=125 http://code.google.com/p/mosh-scheme/issues/detail?id=127

JIT 実装 UNDEF, ASSIGN_GLOBAL, PAIR_P

1日3命令ペースなら1ヶ月で終わるんだがさすがに無理かな。