vihaco_stdlib/program/
dialect.rs1#[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}