Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Writing an LLVM Backend that Compiles Code to ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for えすびて えすびて
May 29, 2026
2

Writing an LLVM Backend that Compiles Code to Magic: The Gathering

Avatar for えすびて

えすびて

May 29, 2026

Transcript

  1. Writing an LLVM Backend that Compiles Code to Magic: The

    Gathering えすびて (𝕏: @nbit0125)
  2. LLVMとは • OSSのコンパイラ基盤 • 様々な言語で書かれたコードを様々なターゲット向けのアセンブリ (やオブジェクトファイル)に変換できる • 変換は大きく3段階からなる ◦ プログラムコード→LLVM

    IR (Frontend) ◦ LLVM IR内での最適化 (Middleend) ◦ LLVM IR→各ターゲットのアセンブリ (Backend) 各種 アセンブリ プログラム コード LLVM IR 計算結果 アセンブル+リンク+ 各種ターゲットでの実行 LLVM Backend LLVM Frontend LLVM Middleend
  3. Magic: The Gathering(MTG)とは • 世界で初めて作られた TCG(諸説あり? ) • プレイヤーは魔法使いとなって、呪文(カード)を駆使して対戦相手と戦う •

    現時点で2万種類以上のカード が存在し、様々な 効果を持つ ◦ ゲーム中の行動を強制 /制限する ◦ ゲームのルールを変更する ◦ カードの効果テキスト自体を書き換える ◦ … • 2012年にはこのようなカードを組み合わせて、 ゲーム上で計算を行う(万能チューリングマシンを エミュレートする )ことが可能だと判明する ◦ チューリングマシンの状態およびテープの内容を MTGの 盤面情報として表現し、チューリングマシンの遷移に相当 する操作以外ができないようにプレイヤーの行動を制限 https://arxiv.org/abs/1904.09828 より
  4. MTGを用いた計算に関する近年の発展 • 2024年、MTGを用いたマイクロコントローラが実装される ◦ Howe Choong Yin and Alex Churchill.

    “A Programming Language Embedded in Magic: The Gathering”. In 12th International Conference on Fun with Algorithms (FUN 2024). • これによりMTGを用いたプログラミングがアセンブリレベルで行える ように https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.FUN.2024.31 より MTG アセンブリ 計算結果 MTG
  5. MTGを用いた計算に関する近年の発展 • 2024年、MTGを用いてマイクロコントローラが実装される ◦ Howe Choong Yin and Alex Churchill.

    “A Programming Language Embedded in Magic: The Gathering”. In 12th International Conference on Fun with Algorithms (FUN 2024). • これによりMTGを用いたプログラミングがアセンブリレベルで行える ように https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.FUN.2024.31 より
  6. プログラム コード LLVM IR LLVM Backend For MTG LLVM Frontend

    LLVM Middleend MTG アセンブリ 計算結果 MTG
  7. (補足)MTG でコンピュータに関する概念を扱う方法 • MTGにはレジスタやメモリといった概念が存在しない • 代わりに、ゲーム上の概念(特定のカード , 領域, コンポーネントなど)を用いてそれらを表現する 一般的な概念

    MTGマイクロコントローラでの表現 PCが指している命令 山札の上から 1,2,3枚目にある基本土地 命令をデコード 山札の上から順に基本土地を 3枚戦場に出す 命令の種類 戦場に出た基本土地たちの組み合わせ 汎用レジスタ GRx 特定の種族 yを持つ 汎用レジスタの値 の上に置かれている +1/+1 カウンターの数 … … PCが指すアドレスから命令をデコードし、 その命令がAdd GR1, GR2 であるならば、 GR1にGR2が保持している値を加算する 山札の上から基本土地カードを 3枚戦場に出し、 それらが順に であるならば、 種族 Brushwagg を持つ の上に 種族 Camarid を持つ の上にある個数と同じだけ +1/+1カウンターを置く
  8. • 利用できるレジスタは計 13本 ◦ 汎用レジスタ R0~R11, ◦ フラグレジスタ FLAG •

    命令セットは一般的なバックエンドに比べシンプル( 全部合わせて 40命令未満 ) ◦ 即値, レジスタ値の代入 ◦ 四則演算 ▪ 負の数に対する演算には対応していない ◦ 比較演算 ▪ Ra< Rb か判定 ▪ Ra= 0 か判定 ◦ プログラム制御命令 ▪ 無条件ジャンプ ▪ 条件付きジャンプ ▪ 関数呼び出し ▪ リターン ◦ 入出力命令 ◦ RND命令 • 命令とメモリは別領域に確保 MTG アセンブリの仕様(一部)
  9. 大まかな実装ログ(WIP) • MSP430ターゲットをコピーして、MSP430→MtGにリネームしただけの ターゲットを作成 • 当面不要になる命令や処理を削除 • retのみからなるLLVM IRをコンパイル可能に •

    即値の代入命令を実装 • 加算, 減算, レジスタ代入命令を実装 • ロード/ストアを実装 • 簡易的なエミュレータを実装 • レジスタスピルを実装 • 比較命令を実装 • ジャンプ命令を疑似命令として実装 • 関数呼び出しを実装
  10. • 課題 ◦ アドレス解決や疑似命令の展開 ◦ 生成したアセンブリを実行できるようにエミュレータを更新 ◦ 負の数を用いた演算への対応 ◦ …

    • 展望 ◦ MTG計算機の計算能力の向上 ▪ 実行できる命令をより扱いやすいものに変更 ◦ より複雑なコードのコンパイル ▪ HW emulator running on MTGをしたい 今後の課題&展望