From e874ef9b845424dceeac4211ca9dfec24949f03c Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Mon, 9 Sep 2019 17:40:33 +0100 Subject: COMPMID-2646: Wrap thread-related structure to ease bare-metal support Wraps "lock_guard" and "unique_lock" to ease bare-metal support. Adds basic armclang compilation flow. Change-Id: I44ccd042652acd6a9b442c57c879db3891abb0e2 Signed-off-by: Georgios Pinitas Reviewed-on: https://review.mlplatform.org/c/1923 Tested-by: Arm Jenkins Reviewed-by: Pablo Marquez Comments-Addressed: Arm Jenkins --- arm_compute/core/NEON/NEMath.inl | 5 ++- arm_compute/core/Utils.h | 38 ++++++++++++++--------- arm_compute/core/utils/logging/IPrinter.h | 2 +- arm_compute/core/utils/logging/LogMsgDecorators.h | 4 ++- 4 files changed, 32 insertions(+), 17 deletions(-) (limited to 'arm_compute/core') diff --git a/arm_compute/core/NEON/NEMath.inl b/arm_compute/core/NEON/NEMath.inl index eebcdf864f..61315e8dbc 100644 --- a/arm_compute/core/NEON/NEMath.inl +++ b/arm_compute/core/NEON/NEMath.inl @@ -21,9 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - #include +#ifndef M_PI +#define M_PI (3.14159265358979323846) +#endif // M_PI + namespace arm_compute { /** Exponent polynomial coefficients */ diff --git a/arm_compute/core/Utils.h b/arm_compute/core/Utils.h index 0ce2ee0161..3f04ed9963 100644 --- a/arm_compute/core/Utils.h +++ b/arm_compute/core/Utils.h @@ -1128,7 +1128,10 @@ bool check_value_range(T val, DataType dt, QuantizationInfo qinfo = Quantization switch(dt) { case DataType::U8: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_u8 = static_cast(val); + return ((val_u8 == val) && val_u8 >= std::numeric_limits::lowest() && val_u8 <= std::numeric_limits::max()); + } case DataType::QASYMM8: { double min = static_cast(dequantize_qasymm8(0, qinfo)); @@ -1136,27 +1139,34 @@ bool check_value_range(T val, DataType dt, QuantizationInfo qinfo = Quantization return ((double)val >= min && (double)val <= max); } case DataType::S8: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_s8 = static_cast(val); + return ((val_s8 == val) && val_s8 >= std::numeric_limits::lowest() && val_s8 <= std::numeric_limits::max()); + } case DataType::U16: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_u16 = static_cast(val); + return ((val_u16 == val) && val_u16 >= std::numeric_limits::lowest() && val_u16 <= std::numeric_limits::max()); + } case DataType::S16: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_s16 = static_cast(val); + return ((val_s16 == val) && val_s16 >= std::numeric_limits::lowest() && val_s16 <= std::numeric_limits::max()); + } case DataType::U32: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_u32 = static_cast(val); + return ((val_u32 == val) && val_u32 >= std::numeric_limits::lowest() && val_u32 <= std::numeric_limits::max()); + } case DataType::S32: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); - case DataType::U64: - return (val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); - case DataType::S64: - return (val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); + { + const auto val_s32 = static_cast(val); + return ((val_s32 == val) && val_s32 >= std::numeric_limits::lowest() && val_s32 <= std::numeric_limits::max()); + } case DataType::F16: return (val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); case DataType::F32: return (val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); - case DataType::F64: - return (val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); - case DataType::SIZET: - return ((static_cast(val) == val) && val >= std::numeric_limits::lowest() && val <= std::numeric_limits::max()); default: ARM_COMPUTE_ERROR("Data type not supported"); return false; diff --git a/arm_compute/core/utils/logging/IPrinter.h b/arm_compute/core/utils/logging/IPrinter.h index 2f399102e2..45ea8368eb 100644 --- a/arm_compute/core/utils/logging/IPrinter.h +++ b/arm_compute/core/utils/logging/IPrinter.h @@ -55,7 +55,7 @@ public: */ inline void print(const std::string &msg) { - std::lock_guard lock(_mtx); + arm_compute::lock_guard lock(_mtx); print_internal(msg); } diff --git a/arm_compute/core/utils/logging/LogMsgDecorators.h b/arm_compute/core/utils/logging/LogMsgDecorators.h index 32cb977bf2..03a2d41f12 100644 --- a/arm_compute/core/utils/logging/LogMsgDecorators.h +++ b/arm_compute/core/utils/logging/LogMsgDecorators.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 ARM Limited. + * Copyright (c) 2016-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -30,7 +30,9 @@ #include #include #include +#ifndef NO_MULTI_THREADING #include +#endif /* NO_MULTI_THREADING */ namespace arm_compute { -- cgit v1.2.1