[cranelift-interpreter] Add basic floating point arithmetic

This commit is contained in:
Andrew Brown
2020-05-27 20:41:22 -07:00
parent 660c45fe34
commit 8fce8ddefc

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, Mul, Sub}; use std::ops::{Add, Div, Mul, Sub};
use thiserror::Error; use thiserror::Error;
/// The valid control flow states. /// The valid control flow states.
@@ -153,6 +153,10 @@ impl Interpreter {
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), Imul => binary_op!(Mul::mul[arg1, arg2]; [I8, I16, I32, I64]; inst),
Fadd => binary_op!(Add::add[arg1, arg2]; [F32, F64]; inst),
Fsub => binary_op!(Sub::sub[arg1, arg2]; [F32, F64]; inst),
Fmul => binary_op!(Mul::mul[arg1, arg2]; [F32, F64]; inst),
Fdiv => binary_op!(Div::div[arg1, arg2]; [F32, F64]; 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);