From b8c13d5b27c3f816c19bf1b2380f4fffa7a2a27e Mon Sep 17 00:00:00 2001 From: Minseong Jang Date: Fri, 25 Mar 2022 00:58:06 +0900 Subject: [PATCH] Fix ir interp --- src/ir/interp.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/ir/interp.rs b/src/ir/interp.rs index 078166d..ae9c4a6 100644 --- a/src/ir/interp.rs +++ b/src/ir/interp.rs @@ -545,13 +545,22 @@ mod calculator { rhs: OrderedFloat, width: usize, ) -> Result { + let (lhs, rhs) = if width == Dtype::SIZE_OF_FLOAT * Dtype::BITS_OF_BYTE { + ( + lhs.into_inner() as f32 as f64, + rhs.into_inner() as f32 as f64, + ) + } else { + (lhs.into_inner(), rhs.into_inner()) + }; + let result = match op { - ast::BinaryOperator::Plus => lhs.into_inner() + rhs.into_inner(), - ast::BinaryOperator::Minus => lhs.into_inner() - rhs.into_inner(), - ast::BinaryOperator::Multiply => lhs.into_inner() * rhs.into_inner(), + ast::BinaryOperator::Plus => lhs + rhs, + ast::BinaryOperator::Minus => lhs - rhs, + ast::BinaryOperator::Multiply => lhs * rhs, ast::BinaryOperator::Divide => { - assert!(rhs.into_inner() != 0.0); - lhs.into_inner() / rhs.into_inner() + assert!(rhs != 0.0); + lhs / rhs } ast::BinaryOperator::Equals => { let order = lhs