don't make the user reset Interpreter between invocations
This commit is contained in:
parent
f981e525c8
commit
84331a9325
|
@ -37,10 +37,7 @@ fn bench_tiny_keccak(b: &mut Bencher) {
|
||||||
let func = func.as_func().unwrap();
|
let func = func.as_func().unwrap();
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap());
|
||||||
interpreter.reset();
|
|
||||||
interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
@ -83,10 +80,7 @@ fn bench_rev_comp(b: &mut Bencher) {
|
||||||
let func = func.as_func().unwrap();
|
let func = func.as_func().unwrap();
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap());
|
||||||
interpreter.reset();
|
|
||||||
interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap()
|
|
||||||
});
|
|
||||||
|
|
||||||
// Verify the result.
|
// Verify the result.
|
||||||
let output_data_mem_offset = assert_matches!(
|
let output_data_mem_offset = assert_matches!(
|
||||||
|
@ -140,10 +134,7 @@ fn bench_regex_redux(b: &mut Bencher) {
|
||||||
let func = func.as_func().unwrap();
|
let func = func.as_func().unwrap();
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap());
|
||||||
interpreter.reset();
|
|
||||||
interpreter.invoke(&func, &[test_data_ptr], &mut NopExternals).unwrap()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
@ -173,7 +164,6 @@ fn fac_recursive(b: &mut Bencher) {
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
interpreter.reset();
|
|
||||||
let value = interpreter
|
let value = interpreter
|
||||||
.invoke(&func, &[RuntimeValue::I64(25)], &mut NopExternals)
|
.invoke(&func, &[RuntimeValue::I64(25)], &mut NopExternals)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -213,7 +203,6 @@ fn fac_opt(b: &mut Bencher) {
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
interpreter.reset();
|
|
||||||
let value = interpreter
|
let value = interpreter
|
||||||
.invoke(&func, &[RuntimeValue::I64(25)], &mut NopExternals)
|
.invoke(&func, &[RuntimeValue::I64(25)], &mut NopExternals)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -254,7 +243,6 @@ fn recursive_ok(b: &mut Bencher) {
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
interpreter.reset();
|
|
||||||
let value = interpreter
|
let value = interpreter
|
||||||
.invoke(&func, &[RuntimeValue::I32(8000)], &mut NopExternals)
|
.invoke(&func, &[RuntimeValue::I32(8000)], &mut NopExternals)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -294,7 +282,6 @@ fn recursive_trap(b: &mut Bencher) {
|
||||||
let mut interpreter = Interpreter::new();
|
let mut interpreter = Interpreter::new();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
interpreter.reset();
|
|
||||||
interpreter
|
interpreter
|
||||||
.invoke(&func, &[RuntimeValue::I32(1000)], &mut NopExternals)
|
.invoke(&func, &[RuntimeValue::I32(1000)], &mut NopExternals)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
|
|
|
@ -209,10 +209,8 @@ impl Interpreter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo, use types to prevent user from calling start_execution on an interpreter not in Initialized
|
/// Wipe all data in this interpreter so it can be safely reused.
|
||||||
// state.
|
fn reset(&mut self) {
|
||||||
/// Wipe all data in this interpreter, so it can be safely reused.
|
|
||||||
pub fn reset(&mut self) {
|
|
||||||
self.value_stack.truncate(0);
|
self.value_stack.truncate(0);
|
||||||
self.call_stack.truncate(0);
|
self.call_stack.truncate(0);
|
||||||
self.state = InterpreterState::Initialized;
|
self.state = InterpreterState::Initialized;
|
||||||
|
@ -252,8 +250,7 @@ impl Interpreter {
|
||||||
args: &[RuntimeValue],
|
args: &[RuntimeValue],
|
||||||
externals: &mut E,
|
externals: &mut E,
|
||||||
) -> Result<Option<RuntimeValue>, Trap> {
|
) -> Result<Option<RuntimeValue>, Trap> {
|
||||||
// Ensure that the VM has not been executed. This is checked in `FuncInvocation::start_execution`.
|
self.reset();
|
||||||
assert!(self.state == InterpreterState::Initialized);
|
|
||||||
|
|
||||||
// Add initial args to value stack
|
// Add initial args to value stack
|
||||||
for arg in args {
|
for arg in args {
|
||||||
|
|
Loading…
Reference in New Issue