60 lines
1.9 KiB
Markdown
60 lines
1.9 KiB
Markdown
|
|
# MIR13 (Core-13) Final Instruction Set
|
|||
|
|
|
|||
|
|
## The 13 Instructions
|
|||
|
|
|
|||
|
|
### 1. 値・計算 (3命令)
|
|||
|
|
- **Const**: 定数値のロード
|
|||
|
|
- **BinOp**: 二項演算(算術、論理、ビット演算すべて)
|
|||
|
|
- **Compare**: 比較演算(==, !=, <, >, <=, >=)
|
|||
|
|
|
|||
|
|
### 2. 制御フロー (4命令)
|
|||
|
|
- **Jump**: 無条件ジャンプ
|
|||
|
|
- **Branch**: 条件分岐
|
|||
|
|
- **Return**: 関数からの戻り
|
|||
|
|
- **Phi**: SSA形式での値の合流
|
|||
|
|
|
|||
|
|
### 3. 呼び出し (3命令)
|
|||
|
|
- **Call**: 通常の関数呼び出し
|
|||
|
|
- **BoxCall**: Boxメソッド呼び出し(配列、オブジェクト、すべてのデータ操作)
|
|||
|
|
- **ExternCall**: 外部関数呼び出し(システムコール、プラグイン等)
|
|||
|
|
|
|||
|
|
### 4. メタ操作 (3命令)
|
|||
|
|
- **TypeOp**: 型関連操作(型チェック、キャスト)
|
|||
|
|
- **Safepoint**: GCセーフポイント
|
|||
|
|
- **Barrier**: メモリバリア
|
|||
|
|
|
|||
|
|
## 削除された命令とその統合先
|
|||
|
|
|
|||
|
|
| 削除された命令 | 統合方法 |
|
|||
|
|
|--------------|---------|
|
|||
|
|
| Load/Store | BoxCallまたはCall(変数もBoxとして扱う) |
|
|||
|
|
| UnaryOp | BinOp(例:-x → 0-x, !x → x XOR true) |
|
|||
|
|
| ArrayGet/ArraySet | BoxCall |
|
|||
|
|
| NewBox | BoxCall(コンストラクタ呼び出し) |
|
|||
|
|
| FunctionNew | Const(関数も値) |
|
|||
|
|
| RefNew/RefGet/RefSet | BoxCall |
|
|||
|
|
| TypeCheck/Cast | TypeOp |
|
|||
|
|
| Debug/Print | ExternCall |
|
|||
|
|
| Copy/Nop | 不要(最適化で除去) |
|
|||
|
|
|
|||
|
|
## 設計の革新性
|
|||
|
|
|
|||
|
|
### 1. 変数アクセスの統一
|
|||
|
|
すべての変数アクセスが関数呼び出しとして表現される:
|
|||
|
|
```mir
|
|||
|
|
// 従来: %1 = Load %x
|
|||
|
|
%1 = Call @get_local "x"
|
|||
|
|
|
|||
|
|
// 従来: Store %y, %1
|
|||
|
|
Call @set_local "y" %1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Everything is Box の究極形
|
|||
|
|
- 変数もBox
|
|||
|
|
- 関数もBox(Constで表現)
|
|||
|
|
- すべての操作がBoxCall
|
|||
|
|
|
|||
|
|
### 3. 実用性とのバランス
|
|||
|
|
- Safepointでガベージコレクションをサポート
|
|||
|
|
- Barrierで並行性を考慮
|
|||
|
|
- ExternCallで拡張性を確保
|