Initial experiment.

This commit is contained in:
Dan Gohman
2018-10-29 12:00:12 -07:00
commit 154b35ecc1
15 changed files with 781 additions and 0 deletions

34
src/function_body.rs Normal file
View File

@@ -0,0 +1,34 @@
use backend::*;
use disassemble::disassemble;
use error::Error;
use wasmparser::{FunctionBody, Operator};
pub fn translate(body: &FunctionBody) -> Result<(), Error> {
let locals = body.get_locals_reader()?;
for local in locals {
local?; // TODO
}
let mut ops = dynasmrt::x64::Assembler::new().unwrap();
let operators = body.get_operators_reader()?;
let mut regs = Registers::new();
for op in operators {
match op? {
Operator::I32Add => {
add_i32(&mut ops, &mut regs);
}
_ => {
unsupported_opcode(&mut ops);
}
}
}
let output = ops
.finalize()
.map_err(|_asm| Error::Assembler("assembler error".to_owned()))?;
// TODO: Do something with the output.
disassemble(&output)?;
Ok(())
}