From 17bf8052c293ec85fc87f695a7fb329e09c7df62 Mon Sep 17 00:00:00 2001 From: Gian Marco Iodice Date: Fri, 10 Jan 2025 15:49:20 +0000 Subject: [PATCH] Fix kai_run_lhs_quant_pack_qai8dxp_f32 - Add clamp to int8_min and int8_max to avoid saturation of the result Signed-off-by: Gian Marco Iodice --- .../matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c b/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c index be3aadb2..4f7c756c 100644 --- a/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c +++ b/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c @@ -1,5 +1,5 @@ // -// SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +// SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates // // SPDX-License-Identifier: Apache-2.0 // @@ -163,6 +163,8 @@ void kai_run_lhs_quant_pack_qai8dxp_f32( int16_t nzp_s16 = (int16_t)nudged_zero_point0; int16x8_t vnzp_s16 = vdupq_n_s16(nzp_s16); v_s16 = vaddq_s16(v_s16, vnzp_s16); + v_s16 = vmaxq_s16(v_s16, vdupq_n_s16(INT8_MIN)); + v_s16 = vminq_s16(v_s16, vdupq_n_s16(INT8_MAX)); int8x8_t v0_s8 = vqmovn_s16(v_s16); vst1_s8((int8_t*)(dst_ptr), v0_s8); @@ -182,6 +184,9 @@ void kai_run_lhs_quant_pack_qai8dxp_f32( int32_t v0_s32 = (int32_t)(roundf(src0_0 * scale0)); v0_s32 = v0_s32 + nudged_zero_point0; + v0_s32 = KAI_MAX(v0_s32, INT8_MIN); + v0_s32 = KAI_MIN(v0_s32, INT8_MAX); + *((int8_t*)(dst_ptr)) = (int8_t)v0_s32; dst_ptr += sizeof(int8_t); } @@ -201,6 +206,9 @@ void kai_run_lhs_quant_pack_qai8dxp_f32( int32_t v0_s32 = (int32_t)(roundf(src0_0 * scale0)); v0_s32 = v0_s32 + nudged_zero_point0; + v0_s32 = KAI_MAX(v0_s32, INT8_MIN); + v0_s32 = KAI_MIN(v0_s32, INT8_MAX); + *((int8_t*)(dst_ptr)) = (int8_t)v0_s32; dst_ptr += sizeof(int8_t); } -- GitLab