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
85    // --- 对象与数组操作 ---
86    /// 创建新对象 (类型名)
87    New(String),
88    /// 创建新数组 (元素类型, 长度是否在栈上)
89    NewArray(GaiaType, bool),
90    /// 加载字段 (对象类型, 字段名)
91    LoadField(String, String),
92    /// 存储字段 (对象类型, 字段名)
93    StoreField(String, String),
94    /// 加载数组元素
95    LoadElement(GaiaType),
96    /// 存储数组元素
97    StoreElement(GaiaType),
98    /// 获取数组长度
99    ArrayLength,
100
101    // --- WASM GC 扩展指令 ---
102    /// 创建 GC 结构体 (类型名)
103    StructNew(String),
104    /// 获取 GC 结构体字段 (类型名, 字段索引)
105    StructGet {
106        struct_name: String,
107        field_index: u32,
108        is_signed: bool,
109    },
110    /// 设置 GC 结构体字段 (类型名, 字段索引)
111    StructSet {
112        struct_name: String,
113        field_index: u32,
114    },
115    /// 创建 GC 数组 (类型名)
116    ArrayNew(String),
117    /// 获取 GC 数组元素 (类型名)
118    ArrayGet {
119        array_name: String,
120        is_signed: bool,
121    },
122    /// 设置 GC 数组元素 (类型名)
123    ArraySet(String),
124}
125
126/// 比较条件
127#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
128pub enum CmpCondition {
129    Eq,
130    Ne,
131    Lt,
132    Le,
133    Gt,
134    Ge,
135}
136
137/// 转换类型
138#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
139pub enum CastKind {
140    Bitcast,
141    Trunc,
142    Zext,
143    Sext,
144    FpToUi,
145    FpToSi,
146    UiToFp,
147    SiToFp,
148}
149
150/// Tier 1: 托管运行时指令 (类 JVM/CLR/Lua)
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
152pub enum ManagedInstruction {
153    /// 调用方法 (对象类型, 方法名, 签名)
154    CallMethod { target: String, method: String, signature: crate::types::GaiaSignature, is_virtual: bool },
155    /// 调用静态方法
156    CallStatic { target: String, method: String, signature: crate::types::GaiaSignature },
157    /// 装箱
158    Box(GaiaType),
159    /// 拆箱
160    Unbox(GaiaType),
161    /// 运行时类型检查
162    InstanceOf(GaiaType),
163    /// 类型转换
164    CheckCast(GaiaType),
165    /// 初始化对象 (参数数量)
166    Initiate(usize),
167    /// 终结对象
168    Finalize,
169}
170
171/// Tier 2: 领域特定指令 (神经网络/张量/并行计算)
172#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
173pub enum DomainInstruction {
174    /// 神经网络算子
175    Neural(NeuralNode),
176
177    // --- 张量基础运算 ---
178    /// 矩阵乘法 (A, B, C)
179    MatMul { a_shape: Vec<usize>, b_shape: Vec<usize>, transpose_a: bool, transpose_b: bool },
180    /// 卷积运算
181    Conv2D { stride: [usize; 2], padding: [usize; 2], dilation: [usize; 2], groups: usize },
182    /// 逐元素运算 (类型, 算子名)
183    ElementWise(GaiaType, String),
184
185    // --- 并行计算 ---
186    /// 获取线程 ID (维度)
187    GetThreadId(usize),
188    /// 获取工作组大小 (维度)
189    GetGroupSize(usize),
190    /// 屏障同步
191    Barrier,
192}