Skip to main content

gaia_assembler/instruction/
mod.rs

1use crate::types::GaiaType;
2use gaia_types::neural::NeuralNode;
3use serde::{Deserialize, Serialize};
4
5/// Gaia 指令系统 (分层架构)
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub enum GaiaInstruction {
8    /// 核心底层指令 (Tier 0)
9    Core(CoreInstruction),
10    /// 托管运行时指令 (Tier 1)
11    Managed(ManagedInstruction),
12    /// 领域特定指令 (Tier 2)
13    Domain(DomainInstruction),
14}
15
16/// Tier 0: 核心底层指令 (类 LLVM/汇编)
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18pub enum CoreInstruction {
19    // --- 内存操作 ---
20    /// 栈上分配空间 (类型, 数量)
21    Alloca(GaiaType, usize),
22    /// 从内存加载 (目标寄存器类型, 指针)
23    Load(GaiaType),
24    /// 存储到内存 (值类型)
25    Store(GaiaType),
26    /// 获取元素指针 (计算偏移量)
27    Gep {
28        base_type: GaiaType,
29        indices: Vec<usize>,
30    },
31
32    // --- 算术运算 (操作数从栈获取) ---
33    Add(GaiaType),
34    Sub(GaiaType),
35    Mul(GaiaType),
36    Div(GaiaType),
37    Rem(GaiaType),
38    And(GaiaType),
39    Or(GaiaType),
40    Xor(GaiaType),
41    Shl(GaiaType),
42    Shr(GaiaType),
43    Neg(GaiaType),
44    Not(GaiaType),
45
46    // --- 比较运算 ---
47    Cmp(CmpCondition, GaiaType),
48
49    // --- 类型转换 ---
50    Cast {
51        from: GaiaType,
52        to: GaiaType,
53        kind: CastKind,
54    },
55
56    // --- 栈管理 ---
57    PushConstant(crate::program::GaiaConstant),
58    Pop,
59    Dup,
60
61    // --- 局部变量与参数 (Tier 0 版本) ---
62    /// 加载局部变量
63    LoadLocal(u32, GaiaType),
64    /// 存储局部变量
65    StoreLocal(u32, GaiaType),
66    /// 加载参数
67    LoadArg(u32, GaiaType),
68    /// 存储参数
69    StoreArg(u32, GaiaType),
70
71    // --- 控制流 ---
72    /// 返回
73    Ret,
74    /// 无条件跳转
75    Br(String),
76    /// 真跳转
77    BrTrue(String),
78    /// 假跳转
79    BrFalse(String),
80    /// 标签
81    Label(String),
82    /// 调用函数 (函数名, 参数数量)
83    Call(String, usize),
84    /// 间接调用 (参数数量). 栈: [..., func_ptr, arg1, arg2, ...]
85    CallIndirect(usize),
86
87    // --- 对象与数组操作 ---
88    /// 创建新对象 (类型名)
89    New(String),
90    /// 创建新数组 (元素类型, 长度是否在栈上)
91    NewArray(GaiaType, bool),
92    /// 加载字段 (对象类型, 字段名)
93    LoadField(String, String),
94    /// 存储字段 (对象类型, 字段名)
95    StoreField(String, String),
96    /// 加载数组元素
97    LoadElement(GaiaType),
98    /// 存储数组元素
99    StoreElement(GaiaType),
100    /// 获取数组长度
101    ArrayLength,
102    /// 数组推入元素 (数组, 值)
103    ArrayPush,
104
105    // --- WASM GC 扩展指令 ---
106    /// 创建 GC 结构体 (类型名)
107    StructNew(String),
108    /// 获取 GC 结构体字段 (类型名, 字段索引)
109    StructGet {
110        struct_name: String,
111        field_index: u32,
112        is_signed: bool,
113    },
114    /// 设置 GC 结构体字段 (类型名, 字段索引)
115    StructSet {
116        struct_name: String,
117        field_index: u32,
118    },
119    /// 创建 GC 数组 (类型名)
120    ArrayNew(String),
121    /// 获取 GC 数组元素 (类型名)
122    ArrayGet {
123        array_name: String,
124        is_signed: bool,
125    },
126    /// 设置 GC 数组元素 (类型名)
127    ArraySet(String),
128}
129
130/// 比较条件
131#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
132pub enum CmpCondition {
133    Eq,
134    Ne,
135    Lt,
136    Le,
137    Gt,
138    Ge,
139}
140
141/// 转换类型
142#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
143pub enum CastKind {
144    Bitcast,
145    Trunc,
146    Zext,
147    Sext,
148    FpToUi,
149    FpToSi,
150    UiToFp,
151    SiToFp,
152}
153
154/// Tier 1: 托管运行时指令 (类 JVM/CLR/Lua)
155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
156pub enum ManagedInstruction {
157    /// 调用方法 (对象类型, 方法名, 签名, 是否虚调用, IC 调用点 ID)
158    CallMethod {
159        target: String,
160        method: String,
161        signature: crate::types::GaiaSignature,
162        is_virtual: bool,
163        call_site_id: Option<u32>,
164    },
165    /// 调用静态方法
166    CallStatic { target: String, method: String, signature: crate::types::GaiaSignature },
167    /// 装箱
168    Box(GaiaType),
169    /// 拆箱
170    Unbox(GaiaType),
171    /// 运行时类型检查
172    InstanceOf(GaiaType),
173    /// 类型转换
174    CheckCast(GaiaType),
175    /// 初始化对象 (参数数量)
176    Initiate(usize),
177    /// 终结对象
178    Finalize,
179}
180
181/// Tier 2: 领域特定指令 (神经网络/张量/并行计算)
182#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
183pub enum DomainInstruction {
184    /// 神经网络算子
185    Neural(NeuralNode),
186
187    // --- 张量基础运算 ---
188    /// 矩阵乘法 (A, B, C)
189    MatMul { a_shape: Vec<usize>, b_shape: Vec<usize>, transpose_a: bool, transpose_b: bool },
190    /// 卷积运算
191    Conv2D { stride: [usize; 2], padding: [usize; 2], dilation: [usize; 2], groups: usize },
192    /// 逐元素运算 (类型, 算子名)
193    ElementWise(GaiaType, String),
194
195    // --- 并行计算 ---
196    /// 获取线程 ID (维度)
197    GetThreadId(usize),
198    /// 获取工作组大小 (维度)
199    GetGroupSize(usize),
200    /// 屏障同步
201    Barrier,
202}