diff options
| author | Henry Gressmann <mail@henrygressmann.de> | 2024-02-27 01:04:34 +0100 |
|---|---|---|
| committer | Henry Gressmann <mail@henrygressmann.de> | 2024-02-27 01:04:34 +0100 |
| commit | e883003b7436708e91d0971b1a8e5f74c8166261 (patch) | |
| tree | e643797089d1e173e7cbe8b4a84acd6df314f7d5 /crates/parser/src | |
| parent | 5e573f0765570e0aaf6c9415b652b25d5bddebd9 (diff) | |
some new instructuons
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src')
| -rw-r--r-- | crates/parser/src/visit.rs | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/crates/parser/src/visit.rs b/crates/parser/src/visit.rs index 9038567..f994e7e 100644 --- a/crates/parser/src/visit.rs +++ b/crates/parser/src/visit.rs @@ -325,10 +325,10 @@ impl<'a> wasmparser::VisitOperator<'a> for FunctionBuilder { fn visit_local_get(&mut self, idx: u32) -> Self::Output { if let Some(instruction) = self.instructions.last_mut() { match instruction { - // Instruction::LocalGet(a) => *instruction = Instruction::LocalGet2(*a, idx), - // Instruction::LocalGet2(a, b) => *instruction = Instruction::LocalGet3(*a, *b, idx), - // Instruction::LocalGet3(a, b, c) => *instruction = Instruction::LocalGet4(*a, *b, *c, idx), - // Instruction::LocalTee(a) => *instruction = Instruction::LocalTeeGet(*a, idx), + Instruction::LocalGet(a) => *instruction = Instruction::LocalGet2(*a, idx), + Instruction::LocalGet2(a, b) => *instruction = Instruction::LocalGet3(*a, *b, idx), + Instruction::LocalGet3(a, b, c) => *instruction = Instruction::LocalGet4(*a, *b, *c, idx), + Instruction::LocalTee(a) => *instruction = Instruction::LocalTeeGet(*a, idx), _ => return self.visit(Instruction::LocalGet(idx)), }; Ok(()) @@ -338,16 +338,15 @@ impl<'a> wasmparser::VisitOperator<'a> for FunctionBuilder { } fn visit_local_set(&mut self, idx: u32) -> Self::Output { - // LocalGetSet - if let Some(instruction) = self.instructions.last_mut() { - match instruction { - // Instruction::LocalGet(a) => *instruction = Instruction::LocalGetSet(*a, idx), - _ => return self.visit(Instruction::LocalSet(idx)), - }; - Ok(()) - } else { - self.visit(Instruction::LocalSet(idx)) + if self.instructions.len() < 1 { + return self.visit(Instruction::I64Rotl); } + + // LocalGetSet + match self.instructions[self.instructions.len() - 1..] { + // Instruction::LocalGet(a) => *instruction = Instruction::LocalGetSet(*a, idx), + _ => return self.visit(Instruction::LocalSet(idx)), + }; } fn visit_local_tee(&mut self, idx: u32) -> Self::Output { @@ -360,11 +359,11 @@ impl<'a> wasmparser::VisitOperator<'a> for FunctionBuilder { } match self.instructions[self.instructions.len() - 2..] { - // [Instruction::I64Xor, Instruction::I64Const(a)] => { - // self.instructions.pop(); - // self.instructions.pop(); - // self.visit(Instruction::I64XorConstRotl(a)) - // } + [Instruction::I64Xor, Instruction::I64Const(a)] => { + self.instructions.pop(); + self.instructions.pop(); + self.visit(Instruction::I64XorConstRotl(a)) + } _ => self.visit(Instruction::I64Rotl), } } |
