Threadをサポートした

@llvm.atomic.swap.* 使いたい! っていう変な理由でThreadをサポートしました。
遊ぶのが主目的で信頼性はどうでもいいので注意が必要です。といっても、yarv2llvm全体もそういうスタンスなので問題ないと思います。rb_thread_createという目的にぴったりと思われる(かなり自信は無いのですが・・・)、APIがあったのでこれを使いました。インタフェースはRubyに合せてあります。こんな感じで動いているのですが、GCとか大丈夫かは判りません。これで、@llvm.atomic.swap.*で遊べそうです。

プログラム

    YARV2LLVM::compile(<<-EOS)
def tthread
  Thread.new {
    10.times do |i|
      p i
    end
  }
  print "END"
  10.times do |i|
    puts sprintf("foo%d", i)
  end
  nil
end
EOS

出力結果例(スレッドなので場合によって異なる)

0
1
2
3
4
5
END6
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo77
8
9
foo8
foo9