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
97

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をしたい 今後の課題&展望