[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:519

From: shudo computer.org
Date: Wed, 29 Jun 2005 10:51:29 +0900 (JST)
Subject: [yarv-dev:519] Re: Optimal code generation on Stack Caching

首藤です。

> >  ささだです。
>
> >  命令ハンドラ中に分岐がある場合、gcc だとブロックを明後日の場所において
>     ^^^^^^^^^^^^ 「VM命令のインスタンス」ですよね?
> > しまうことがあるので、追うのが大変なんですよね。

> なんとかバラまかれないようにできればいいのですが、
> 別の関数に閉じ込める (→空間コストが unacceptable)、くらいしか
> 方法が思い付きません。

各 VM 命令インスタンスをそれぞれ別の関数に閉じ込めておいて、
それをコンパイルして得たアセンブリコードを切り張りすることで
C 関数の prologue, epilogue を切り捨てる、とか :)
力ワザすぎる。

> VM 命令インスタンスを C 言語で記述することで割と高い移植性が得られる
> わけだけど、上記の点とか、
> 変数のレジスタへの割り当てが自由にならないなどの残念な点もあるわけで。

shuJIT では VM 命令インスタンスは基本的に
インラインアセンブリとして記述したのですが、
デバッグ目的でたまに C のコード (*) を書き込むと、
C コードにレジスタの内容を壊されてしまい、よく困ってました。
レジスタの使い方が gcc のバージョンによって変わったりして、
これがまたしんどく。

(*) デバッグ目的のコードは往々にして条件分岐 (e.g. if (debug)) を
含んでいて、これをアセンブリコードで書くためには
衝突しないようにラベルを付ける必要があり、これが面倒で、
C で書いてました。

Kazuyuki Shudo/首藤一幸   私をたばねないで あらせいとうの花のように
  shudo computer.org   http://www.shudo.net/

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       512 2005-06-28 16:03 [ko1 atdot.net       ] Optimal code generation on Stack Caching
       513 2005-06-28 17:08 ┗[maeda-yarv atusi.org]                                       
       516 2005-06-28 20:16  ┗[ko1 atdot.net       ]                                     
       518 2005-06-29 10:45   ┗[shudo computer.org  ]                                   
->     519 2005-06-29 10:51    ┣[shudo computer.org  ]                                 
       522 2005-06-29 14:17    ┃┗[ko1 atdot.net       ]                               
       521 2005-06-29 14:16    ┗[ko1 atdot.net       ]                                 
       523 2005-06-29 14:45     ┗[ko1 atdot.net       ]