Skip to main content

vihaco_stdlib/program/
dialect.rs

1// SPDX-FileCopyrightText: 2026 The vihaco Authors
2// SPDX-License-Identifier: MIT
3
4//! Program-owned storage and control instructions.
5
6#[vihaco_runtime::dialect]
7pub mod program {
8    use super::super::{
9        literal::{F32Literal, F64Literal, I32Literal, I64Literal},
10        operand::{StringOperand, Target},
11    };
12    use vihaco_abi::word::Word;
13    #[instruction]
14    #[pattern = "'br $0:Target"]
15    pub struct Branch(pub u32);
16
17    #[instruction]
18    #[pattern = "'cond_br $0:Target `,` $1:Target"]
19    pub struct ConditionalBranch(pub u32, pub u32);
20
21    #[instruction]
22    #[pattern = "'ret $0"]
23    pub struct Return(pub u32);
24
25    #[instruction]
26    #[pattern = "'call_indirect"]
27    pub struct IndirectCall;
28
29    #[instruction]
30    #[pattern = "'call $0 `,` $1:Target"]
31    pub struct Call(pub u32, pub u32);
32
33    #[instruction]
34    #[pattern = "'halt"]
35    pub struct Halt;
36
37    #[instruction]
38    #[pattern = "'load_i32 $0"]
39    pub struct LoadI32(pub u32);
40
41    #[instruction]
42    #[pattern = "'load_i64 $0"]
43    pub struct LoadI64(pub u32);
44
45    #[instruction]
46    #[pattern = "'load_u32 $0"]
47    pub struct LoadU32(pub u32);
48
49    #[instruction]
50    #[pattern = "'load_u64 $0"]
51    pub struct LoadU64(pub u32);
52
53    #[instruction]
54    #[pattern = "'load_f32 $0"]
55    pub struct LoadF32(pub u32);
56
57    #[instruction]
58    #[pattern = "'load_f64 $0"]
59    pub struct LoadF64(pub u32);
60
61    #[instruction]
62    #[pattern = "'load_bool $0"]
63    pub struct LoadBool(pub u32);
64
65    #[instruction]
66    #[pattern = "'store_i32 $0"]
67    pub struct StoreI32(pub u32);
68
69    #[instruction]
70    #[pattern = "'store_i64 $0"]
71    pub struct StoreI64(pub u32);
72
73    #[instruction]
74    #[pattern = "'store_u32 $0"]
75    pub struct StoreU32(pub u32);
76
77    #[instruction]
78    #[pattern = "'store_u64 $0"]
79    pub struct StoreU64(pub u32);
80
81    #[instruction]
82    #[pattern = "'store_f32 $0"]
83    pub struct StoreF32(pub u32);
84
85    #[instruction]
86    #[pattern = "'store_f64 $0"]
87    pub struct StoreF64(pub u32);
88
89    #[instruction]
90    #[pattern = "'store_bool $0"]
91    pub struct StoreBool(pub u32);
92
93    #[instruction]
94    #[pattern = "'dup"]
95    pub struct Dup;
96
97    #[instruction]
98    #[pattern = "'const_i32 $0:I32Literal"]
99    pub struct ConstI32(pub Word);
100
101    #[instruction]
102    #[pattern = "'const_i64 $0:I64Literal"]
103    pub struct ConstI64(pub Word);
104
105    #[instruction]
106    #[pattern = "'const_u32 $0:u32"]
107    pub struct ConstU32(pub Word);
108
109    #[instruction]
110    #[pattern = "'const_u64 $0"]
111    pub struct ConstU64(pub Word);
112
113    #[instruction]
114    #[pattern = "'const_f32 $0:F32Literal"]
115    pub struct ConstF32(pub Word);
116
117    #[instruction]
118    #[pattern = "'const_f64 $0:F64Literal"]
119    pub struct ConstF64(pub Word);
120
121    #[instruction]
122    #[pattern = "'const_bool $0:bool"]
123    pub struct ConstBool(pub Word);
124
125    #[instruction]
126    #[pattern = "'const_string $0:StringOperand"]
127    pub struct ConstString(pub Word);
128
129    #[instruction]
130    #[pattern = "'const_fn_ref $0:Target"]
131    pub struct ConstFunctionRef(pub Word);
132
133    #[instruction]
134    #[pattern = "'const_heap_ref $0:u32"]
135    pub struct ConstHeapRef(pub Word);
136}