aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core/PixelValue.h
diff options
context:
space:
mode:
authorPablo Tello <pablo.tello@arm.com>2017-06-26 17:17:42 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-09-17 14:16:42 +0100
commit0c34fe29c298057091d48cde332cb60bb14efee1 (patch)
treef77502715904a522b0e76f32eb1bcd6ce2f567dc /arm_compute/core/PixelValue.h
parent2b26b850c0cff6a25f1012e9e4e7fe6654364a88 (diff)
downloadComputeLibrary-0c34fe29c298057091d48cde332cb60bb14efee1.tar.gz
COMPMID-421: Added FP16 support in Pooling Layer
Change-Id: I6b6119c8770051c1656da40aa073c539c15b493e Reviewed-on: http://mpd-gerrit.cambridge.arm.com/78985 Reviewed-by: Moritz Pflanzer <moritz.pflanzer@arm.com> Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Diffstat (limited to 'arm_compute/core/PixelValue.h')
-rw-r--r--arm_compute/core/PixelValue.h48
1 files changed, 38 insertions, 10 deletions
diff --git a/arm_compute/core/PixelValue.h b/arm_compute/core/PixelValue.h
index b4912ce15a..1b1a5a3845 100644
--- a/arm_compute/core/PixelValue.h
+++ b/arm_compute/core/PixelValue.h
@@ -26,6 +26,10 @@
#include <cstdint>
+#if ARM_COMPUTE_ENABLE_FP16
+#include <arm_fp16.h> // needed for float16_t
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
+
namespace arm_compute
{
/** Class describing the value of a pixel for any image format. */
@@ -82,6 +86,17 @@ public:
{
value.s32 = v;
}
+#if ARM_COMPUTE_ENABLE_FP16
+ /** Initialize the union with a F16 pixel value
+ *
+ * @param[in] v F16 value.
+ */
+ PixelValue(float16_t v)
+ : PixelValue()
+ {
+ value.f16 = v;
+ }
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
/** Initialize the union with a F32 pixel value
*
* @param[in] v F32 value.
@@ -96,16 +111,19 @@ public:
*/
union
{
- uint8_t rgb[3]; /**< 3 channels: RGB888 */
- uint8_t yuv[3]; /**< 3 channels: Any YUV format */
- uint8_t rgbx[4]; /**< 4 channels: RGBX8888 */
- float f32; /**< Single channel float 32 */
- uint8_t u8; /**< Single channel U8 */
- int8_t s8; /**< Single channel S8 */
- uint16_t u16; /**< Single channel U16 */
- int16_t s16; /**< Single channel S16 */
- uint32_t u32; /**< Single channel U32 */
- int32_t s32; /**< Single channel S32 */
+ uint8_t rgb[3]; /**< 3 channels: RGB888 */
+ uint8_t yuv[3]; /**< 3 channels: Any YUV format */
+ uint8_t rgbx[4]; /**< 4 channels: RGBX8888 */
+ float f32; /**< Single channel float 32 */
+#if ARM_COMPUTE_ENABLE_FP16
+ float16_t f16; /**< Single channel F16 */
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
+ uint8_t u8; /**< Single channel U8 */
+ int8_t s8; /**< Single channel S8 */
+ uint16_t u16; /**< Single channel U16 */
+ int16_t s16; /**< Single channel S16 */
+ uint32_t u32; /**< Single channel U32 */
+ int32_t s32; /**< Single channel S32 */
} value;
/** Interpret the pixel value as a U8
*
@@ -155,6 +173,16 @@ public:
{
v = value.s32;
}
+#if ARM_COMPUTE_ENABLE_FP16
+ /** Interpret the pixel value as a F16
+ *
+ * @param[out] v Returned value
+ */
+ void get(float16_t &v) const
+ {
+ v = value.f16;
+ }
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
/** Interpret the pixel value as a F32
*
* @param[out] v Returned value