diff options
Diffstat (limited to 'src/core/NEON/kernels/arm_conv/pooling')
3 files changed, 12 insertions, 9 deletions
diff --git a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_s8q_nhwc_avg_generic_depthfirst/generic.cpp b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_s8q_nhwc_avg_generic_depthfirst/generic.cpp index f288a4119c..530ee06080 100644 --- a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_s8q_nhwc_avg_generic_depthfirst/generic.cpp +++ b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_s8q_nhwc_avg_generic_depthfirst/generic.cpp @@ -86,12 +86,13 @@ void a64_s8q_nhwc_avg_generic_depthfirst_impl( f_rescale_value *= 2.0f; } - rescale_value = static_cast<int32_t>(round(f_rescale_value * static_cast<float>(1ll << 31))); - if (static_cast<int64_t>(rescale_value) == (1ll << 31)) + int64_t large_rescale_value = round(f_rescale_value * static_cast<float>(1ll << 31)); + if (large_rescale_value == (1ll << 31)) { shift_value++; - rescale_value >>= 1; + large_rescale_value >>= 1; } + rescale_value = static_cast<int32_t>(large_rescale_value); } // Combine together the rescale value for the requantization and the scaling diff --git a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8_nhwc_avg_generic_depthfirst/generic.cpp b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8_nhwc_avg_generic_depthfirst/generic.cpp index 2c8a29248d..baf23b4a4d 100644 --- a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8_nhwc_avg_generic_depthfirst/generic.cpp +++ b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8_nhwc_avg_generic_depthfirst/generic.cpp @@ -84,12 +84,13 @@ void a64_u8_nhwc_avg_generic_depthfirst_impl( f_rescale_value *= 2.0f; } - rescale_value = static_cast<int32_t>(round(f_rescale_value * static_cast<float>(1ll << 31))); - if (static_cast<int64_t>(rescale_value) == (1ll << 31)) + int64_t large_rescale_value = round(f_rescale_value * static_cast<float>(1ll << 31)); + if (large_rescale_value == (1ll << 31)) { shift_value++; - rescale_value >>= 1; + large_rescale_value >>= 1; } + rescale_value = static_cast<int32_t>(large_rescale_value); } __asm__ __volatile__( diff --git a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8q_nhwc_avg_generic_depthfirst/generic.cpp b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8q_nhwc_avg_generic_depthfirst/generic.cpp index a57fe6df68..11376e0fe2 100644 --- a/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8q_nhwc_avg_generic_depthfirst/generic.cpp +++ b/src/core/NEON/kernels/arm_conv/pooling/kernels/a64_u8q_nhwc_avg_generic_depthfirst/generic.cpp @@ -87,12 +87,13 @@ void a64_u8q_nhwc_avg_generic_depthfirst_impl( f_rescale_value *= 2.0f; } - rescale_value = static_cast<int32_t>(round(f_rescale_value * static_cast<float>(1ll << 31))); - if (static_cast<int64_t>(rescale_value) == (1ll << 31)) + int64_t large_rescale_value = round(f_rescale_value * static_cast<float>(1ll << 31)); + if (large_rescale_value == (1ll << 31)) { shift_value++; - rescale_value >>= 1; + large_rescale_value >>= 1; } + rescale_value = static_cast<int32_t>(large_rescale_value); } |