diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2026-04-27 16:39:21 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2026-05-22 16:30:56 -0400 |
| commit | 08e34ac325743085911f96b62c81d9a1f2127806 (patch) | |
| tree | 4eb72a14340041bdce2d81b0633e8398adc4ddb4 /rust/src/medium_level_il/lift.rs | |
| parent | aca1c6f63911057018341869b9aaf74f486a1474 (diff) | |
Extend MLIL call instruction outputs to be expressions
Diffstat (limited to 'rust/src/medium_level_il/lift.rs')
| -rw-r--r-- | rust/src/medium_level_il/lift.rs | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/rust/src/medium_level_il/lift.rs b/rust/src/medium_level_il/lift.rs index ff12c0e2..58ea8a13 100644 --- a/rust/src/medium_level_il/lift.rs +++ b/rust/src/medium_level_il/lift.rs @@ -175,6 +175,7 @@ pub enum MediumLevelILLiftedInstructionKind { LoadSsa(LiftedLoadSsa), Ret(LiftedRet), Var(Var), + VarOutput(VarOutput), AddressOf(Var), VarField(Field), AddressOfField(Field), @@ -182,6 +183,7 @@ pub enum MediumLevelILLiftedInstructionKind { VarAliased(VarSsa), VarSsaField(VarSsaField), VarAliasedField(VarSsaField), + VarOutputSsa(VarOutputSsa), Trap(Trap), // A placeholder for instructions that the Rust bindings do not yet support. // Distinct from `Unimpl` as that is a valid instruction. @@ -298,6 +300,7 @@ impl MediumLevelILLiftedInstruction { SyscallUntyped(_) => "SyscallUntyped", SeparateParamList(_) => "SeparateParamList", SharedParamSlot(_) => "SharedParamSlot", + VarOutput(_) => "VarOutput", Neg(_) => "Neg", Not(_) => "Not", Sx(_) => "Sx", @@ -328,6 +331,7 @@ impl MediumLevelILLiftedInstruction { VarAliased(_) => "VarAliased", VarSsaField(_) => "VarSsaField", VarAliasedField(_) => "VarAliasedField", + VarOutputSsa(_) => "VarOutputSsa", Trap(_) => "Trap", } } @@ -451,7 +455,7 @@ impl MediumLevelILLiftedInstruction { ("carry", Operand::Expr(*op.carry.clone())), ], Call(op) | Tailcall(op) => vec![ - ("output", Operand::VarList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("dest", Operand::Expr(*op.dest.clone())), ("params", Operand::ExprList(op.params.clone())), ], @@ -466,7 +470,7 @@ impl MediumLevelILLiftedInstruction { ("src_memory", Operand::Int(op.src_memory)), ], Syscall(op) => vec![ - ("output", Operand::VarList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("params", Operand::ExprList(op.params.clone())), ], Intrinsic(op) => vec![ @@ -490,35 +494,35 @@ impl MediumLevelILLiftedInstruction { ("output", Operand::VarSsaList(op.output.clone())), ], CallSsa(op) | TailcallSsa(op) => vec![ - ("output", Operand::VarSsaList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("dest", Operand::Expr(*op.dest.clone())), ("params", Operand::ExprList(op.params.clone())), ("src_memory", Operand::Int(op.src_memory)), ], CallUntypedSsa(op) | TailcallUntypedSsa(op) => vec![ - ("output", Operand::VarSsaList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("dest", Operand::Expr(*op.dest.clone())), ("params", Operand::ExprList(op.params.clone())), ("stack", Operand::Expr(*op.stack.clone())), ], SyscallSsa(op) => vec![ - ("output", Operand::VarSsaList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("params", Operand::ExprList(op.params.clone())), ("src_memory", Operand::Int(op.src_memory)), ], SyscallUntypedSsa(op) => vec![ - ("output", Operand::VarSsaList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("params", Operand::ExprList(op.params.clone())), ("stack", Operand::Expr(*op.stack.clone())), ], CallUntyped(op) | TailcallUntyped(op) => vec![ - ("output", Operand::VarList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("dest", Operand::Expr(*op.dest.clone())), ("params", Operand::ExprList(op.params.clone())), ("stack", Operand::Expr(*op.stack.clone())), ], SyscallUntyped(op) => vec![ - ("output", Operand::VarList(op.output.clone())), + ("output", Operand::ExprList(op.output.clone())), ("params", Operand::ExprList(op.params.clone())), ("stack", Operand::Expr(*op.stack.clone())), ], @@ -544,6 +548,7 @@ impl MediumLevelILLiftedInstruction { SeparateParamList(op) => vec![("params", Operand::ExprList(op.params.clone()))], SharedParamSlot(op) => vec![("params", Operand::ExprList(op.params.clone()))], Var(op) | AddressOf(op) => vec![("src", Operand::Var(op.src))], + VarOutput(op) => vec![("dest", Operand::Var(op.dest))], VarField(op) | AddressOfField(op) => vec![ ("src", Operand::Var(op.src)), ("offset", Operand::Int(op.offset)), @@ -553,6 +558,7 @@ impl MediumLevelILLiftedInstruction { ("src", Operand::VarSsa(op.src)), ("offset", Operand::Int(op.offset)), ], + VarOutputSsa(op) => vec![("dest", Operand::VarSsa(op.dest))], Trap(op) => vec![("vector", Operand::Int(op.vector))], } } |
