summaryrefslogtreecommitdiff
path: root/crates/parser/src
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-02-27 01:04:34 +0100
committerHenry Gressmann <mail@henrygressmann.de>2024-02-27 01:04:34 +0100
commite883003b7436708e91d0971b1a8e5f74c8166261 (patch)
treee643797089d1e173e7cbe8b4a84acd6df314f7d5 /crates/parser/src
parent5e573f0765570e0aaf6c9415b652b25d5bddebd9 (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.rs35
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),
}
}