From 300aa61de0ec9b9321ebdfc1cd3793977802cfff Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Fri, 18 Dec 2020 21:14:34 -0500 Subject: [PATCH] [spv] improves division and modulo operators --- src/back/spv/writer.rs | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/back/spv/writer.rs b/src/back/spv/writer.rs index fed2232c06..c91435d67b 100644 --- a/src/back/spv/writer.rs +++ b/src/back/spv/writer.rs @@ -1203,23 +1203,16 @@ impl Writer { other => unreachable!("Mul {:?}", other), } } - crate::BinaryOperator::Divide => match *left_ty_inner { - crate::TypeInner::Scalar { kind, .. } - | crate::TypeInner::Vector { kind, .. } => match kind { - crate::ScalarKind::Sint => spirv::Op::SDiv, - crate::ScalarKind::Uint => spirv::Op::UDiv, - _ => unreachable!(), - }, + crate::BinaryOperator::Divide => match left_ty_inner.scalar_kind() { + Some(crate::ScalarKind::Sint) => spirv::Op::SDiv, + Some(crate::ScalarKind::Uint) => spirv::Op::UDiv, + Some(crate::ScalarKind::Float) => spirv::Op::FDiv, _ => unreachable!(), }, - crate::BinaryOperator::Modulo => match *left_ty_inner { - crate::TypeInner::Scalar { kind, .. } - | crate::TypeInner::Vector { kind, .. } => match kind { - crate::ScalarKind::Sint => spirv::Op::SMod, - crate::ScalarKind::Uint => spirv::Op::UMod, - crate::ScalarKind::Float => spirv::Op::FMod, - _ => unreachable!(), - }, + crate::BinaryOperator::Modulo => match left_ty_inner.scalar_kind() { + Some(crate::ScalarKind::Sint) => spirv::Op::SMod, + Some(crate::ScalarKind::Uint) => spirv::Op::UMod, + Some(crate::ScalarKind::Float) => spirv::Op::FMod, _ => unreachable!(), }, crate::BinaryOperator::And => spirv::Op::BitwiseAnd,