From 52460a8b21e3691cd56b22e62986fa24012b8e68 Mon Sep 17 00:00:00 2001 From: Eric Kunze Date: Fri, 11 Nov 2022 15:21:56 -0800 Subject: Zero point addition in RESCALE should be int32 Clipping to the output range is done post zero point addition. Signed-off-by: Eric Kunze Change-Id: I5271a08fb2f6f9804fb1af3c6945131f948f452a --- reference_model/src/ops/type_conversion.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reference_model/src/ops/type_conversion.cc b/reference_model/src/ops/type_conversion.cc index e30c7bd..cb57340 100644 --- a/reference_model/src/ops/type_conversion.cc +++ b/reference_model/src/ops/type_conversion.cc @@ -159,7 +159,8 @@ int OpRescale::eval() else scaled = TosaReference::QuantUtil::apply_scale_16(input_zp_shifted, channel_multiplier, channel_shift); - OutEigenType out_val = (OutEigenType)(scaled + output_zp); + scaled = scaled + output_zp; + OutEigenType out_val = static_cast(scaled); out_val = std::max(out_val, QMin); out_val = std::min(out_val, QMax); return out_val; @@ -192,7 +193,8 @@ int OpRescale::eval() else scaled = TosaReference::QuantUtil::apply_scale_16(input_zp_shifted, tensor_multiplier, tensor_shift); - OutEigenType out_val = (OutEigenType)(scaled + output_zp); + scaled = scaled + output_zp; + OutEigenType out_val = static_cast(scaled); out_val = std::max(out_val, QMin); out_val = std::min(out_val, QMax); return out_val; -- cgit v1.2.1