aboutsummaryrefslogtreecommitdiff
path: root/patio-to-cranelift/src/patio/instructions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'patio-to-cranelift/src/patio/instructions.rs')
-rw-r--r--patio-to-cranelift/src/patio/instructions.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/patio-to-cranelift/src/patio/instructions.rs b/patio-to-cranelift/src/patio/instructions.rs
index 908a0779..fa8d098b 100644
--- a/patio-to-cranelift/src/patio/instructions.rs
+++ b/patio-to-cranelift/src/patio/instructions.rs
@@ -22,6 +22,7 @@ pub(crate) enum PatioInstruction {
Resume(PatioResume),
Return(PatioReturn),
ReturnVoid(PatioReturnVoid),
+ Switch(PatioSwitch),
VarLoad(PatioVarLoad),
VarStore(PatioVarStore),
}
@@ -123,6 +124,18 @@ pub(crate) struct PatioReturn {
pub(crate) struct PatioReturnVoid;
+pub(crate) struct PatioSwitch {
+ pub(crate) destinations: Vec<PatioLocalRef>,
+ pub(crate) value: PatioOperand,
+ pub(crate) cases: Vec<PatioSwitchCase>,
+ pub(crate) default_body: PatioBlock,
+}
+
+pub(crate) struct PatioSwitchCase {
+ pub(crate) value: u32,
+ pub(crate) body: PatioBlock,
+}
+
pub(crate) struct PatioVarLoad {
pub(crate) destination: PatioLocalRef,
pub(crate) var: PatioLocalRef,