[cranelift-interpreter] Add basic floating point arithmetic
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user