[cranelift-interpreter] Add integer multiplication

This commit is contained in:
Andrew Brown
2020-05-27 20:34:52 -07:00
parent a4e0327128
commit 660c45fe34

View File

@@ -12,7 +12,7 @@ use cranelift_codegen::ir::{
}; };
use cranelift_reader::{DataValue, DataValueCastFailure}; use cranelift_reader::{DataValue, DataValueCastFailure};
use log::trace; use log::trace;
use std::ops::{Add, Sub}; use std::ops::{Add, Mul, Sub};
use thiserror::Error; use thiserror::Error;
/// The valid control flow states. /// The valid control flow states.
@@ -152,6 +152,7 @@ impl Interpreter {
let result = match opcode { let result = match opcode {
Iadd => binary_op!(Add::add[arg1, arg2]; [I8, I16, I32, I64]; inst), Iadd => binary_op!(Add::add[arg1, arg2]; [I8, I16, I32, I64]; inst),
Isub => binary_op!(Sub::sub[arg1, arg2]; [I8, I16, I32, I64]; inst), Isub => binary_op!(Sub::sub[arg1, arg2]; [I8, I16, I32, I64]; inst),
Imul => binary_op!(Mul::mul[arg1, arg2]; [I8, I16, I32, I64]; inst),
_ => unimplemented!("interpreter does not support opcode yet: {}", opcode), _ => unimplemented!("interpreter does not support opcode yet: {}", opcode),
}?; }?;
frame.set(first_result(frame.function, inst), result); frame.set(first_result(frame.function, inst), result);
@@ -164,6 +165,7 @@ impl Interpreter {
let result = match opcode { let result = match opcode {
IaddImm => binary_op!(Add::add[arg, imm]; [I8, I16, I32, I64]; inst), IaddImm => binary_op!(Add::add[arg, imm]; [I8, I16, I32, I64]; inst),
IrsubImm => binary_op!(Sub::sub[imm, arg]; [I8, I16, I32, I64]; inst), IrsubImm => binary_op!(Sub::sub[imm, arg]; [I8, I16, I32, I64]; inst),
ImulImm => binary_op!(Mul::mul[arg, imm]; [I8, I16, I32, I64]; inst),
_ => unimplemented!("interpreter does not support opcode yet: {}", opcode), _ => unimplemented!("interpreter does not support opcode yet: {}", opcode),
}?; }?;
frame.set(first_result(frame.function, inst), result); frame.set(first_result(frame.function, inst), result);