aboutsummaryrefslogtreecommitdiff
path: root/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp')
-rw-r--r--src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp
index d93d9e234a..0f911f14a3 100644
--- a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp
+++ b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_2x2_5x5_fp32_fp32_integers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 ARM Limited.
+ * Copyright (c) 2017-2019 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -36,7 +36,9 @@ void OutputTransform<5, 5, 6, 6, float, float, WinogradRoots::Integers>::transfo
const float* bptr,
float* const output,
const int output_row_stride,
- const int output_col_stride
+ const int output_col_stride,
+ const float output_min,
+ const float output_max
)
{
// Construct a map to the output cells
@@ -101,7 +103,10 @@ void OutputTransform<5, 5, 6, 6, float, float, WinogradRoots::Integers>::transfo
{
for (int j = 0; j < output_tile_cols; j++)
{
- vst1q_f32(outptrs[i][j], vaddq_f32(f[i][j], b));
+ const auto y =
+ vmaxq_f32(vminq_f32(vaddq_f32(f[i][j], b), vdupq_n_f32(output_max)),
+ vdupq_n_f32(output_min));
+ vst1q_f32(outptrs[i][j], y);
outptrs[i][j] += 4;
}
}
@@ -157,7 +162,10 @@ void OutputTransform<5, 5, 6, 6, float, float, WinogradRoots::Integers>::transfo
{
for (int j = 0; j < output_tile_cols; j++)
{
- vst1_f32(outptrs[i][j], vadd_f32(f[i][j], b));
+ const auto y =
+ vmax_f32(vmin_f32(vadd_f32(f[i][j], b), vdup_n_f32(output_max)),
+ vdup_n_f32(output_min));
+ vst1_f32(outptrs[i][j], y);
outptrs[i][j] += 2;
}
}
@@ -205,7 +213,8 @@ void OutputTransform<5, 5, 6, 6, float, float, WinogradRoots::Integers>::transfo
{
for (int j = 0; j < output_tile_cols; j++)
{
- *(outptrs[i][j]++) = f[i][j] + b;
+ const auto y = std::max(std::min(f[i][j] + b, output_max), output_min);
+ *(outptrs[i][j]++) = y;
}
}
}