1 /* Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. 2 * SPDX-License-Identifier: Apache-2.0 3 */ 4 5 /** 6 * @file zephyr/dsp/basicmath_f16.h 7 * 8 * @brief Public APIs for DSP basicmath for 16 bit floating point 9 */ 10 11 #ifndef INCLUDE_ZEPHYR_DSP_BASICMATH_F16_H_ 12 #define INCLUDE_ZEPHYR_DSP_BASICMATH_F16_H_ 13 14 #ifndef CONFIG_FP16 15 #error "Cannot use float16 DSP functionality without CONFIG_FP16 enabled" 16 #endif /* CONFIG_FP16 */ 17 18 #include <zephyr/dsp/dsp.h> 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /** 25 * @ingroup math_dsp_basic_mult 26 * @brief Floating-point vector multiplication. 27 * @param[in] src_a points to the first input vector 28 * @param[in] src_b points to the second input vector 29 * @param[out] dst points to the output vector 30 * @param[in] block_size number of samples in each vector 31 */ 32 DSP_FUNC_SCOPE void zdsp_mult_f16(const float16_t *src_a, const float16_t *src_b, float16_t *dst, 33 uint32_t block_size); 34 35 /** 36 * @ingroup math_dsp_basic_add 37 * @brief Floating-point vector addition. 38 * @param[in] src_a points to the first input vector 39 * @param[in] src_b points to the second input vector 40 * @param[out] dst points to the output vector 41 * @param[in] block_size number of samples in each vector 42 */ 43 DSP_FUNC_SCOPE void zdsp_add_f16(const float16_t *src_a, const float16_t *src_b, float16_t *dst, 44 uint32_t block_size); 45 46 /** 47 * @ingroup math_dsp_basic_sub 48 * @brief Floating-point vector subtraction. 49 * @param[in] src_a points to the first input vector 50 * @param[in] src_b points to the second input vector 51 * @param[out] dst points to the output vector 52 * @param[in] block_size number of samples in each vector 53 */ 54 DSP_FUNC_SCOPE void zdsp_sub_f16(const float16_t *src_a, const float16_t *src_b, float16_t *dst, 55 uint32_t block_size); 56 57 /** 58 * @ingroup math_dsp_basic_scale 59 * @brief Multiplies a floating-point vector by a scalar. 60 * @param[in] src points to the input vector 61 * @param[in] scale scale factor to be applied 62 * @param[out] dst points to the output vector 63 * @param[in] block_size number of samples in the vector 64 */ 65 DSP_FUNC_SCOPE void zdsp_scale_f16(const float16_t *src, float16_t scale, float16_t *dst, 66 uint32_t block_size); 67 68 /** 69 * @ingroup math_dsp_basic_abs 70 * @brief Floating-point vector absolute value. 71 * @param[in] src points to the input buffer 72 * @param[out] dst points to the output buffer 73 * @param[in] block_size number of samples in each vector 74 */ 75 DSP_FUNC_SCOPE void zdsp_abs_f16(const float16_t *src, float16_t *dst, uint32_t block_size); 76 77 /** 78 * @ingroup math_dsp_basic_dot 79 * @brief Dot product of floating-point vectors. 80 * @param[in] src_a points to the first input vector 81 * @param[in] src_b points to the second input vector 82 * @param[in] block_size number of samples in each vector 83 * @param[out] result output result returned here 84 */ 85 DSP_FUNC_SCOPE void zdsp_dot_prod_f16(const float16_t *src_a, const float16_t *src_b, 86 uint32_t block_size, float16_t *result); 87 88 /** 89 * @ingroup math_dsp_basic_offset 90 * @brief Adds a constant offset to a floating-point vector. 91 * @param[in] src points to the input vector 92 * @param[in] offset is the offset to be added 93 * @param[out] dst points to the output vector 94 * @param[in] block_size number of samples in the vector 95 */ 96 DSP_FUNC_SCOPE void zdsp_offset_f16(const float16_t *src, float16_t offset, float16_t *dst, 97 uint32_t block_size); 98 99 /** 100 * @ingroup math_dsp_basic_negate 101 * @brief Negates the elements of a floating-point vector. 102 * @param[in] src points to the input vector 103 * @param[out] dst points to the output vector 104 * @param[in] block_size number of samples in the vector 105 */ 106 DSP_FUNC_SCOPE void zdsp_negate_f16(const float16_t *src, float16_t *dst, uint32_t block_size); 107 108 /** 109 * @ingroup math_dsp_basic_clip 110 * @brief Elementwise floating-point clipping 111 * @param[in] src points to input values 112 * @param[out] dst points to output clipped values 113 * @param[in] low lower bound 114 * @param[in] high higher bound 115 * @param[in] num_samples number of samples to clip 116 */ 117 DSP_FUNC_SCOPE void zdsp_clip_f16(const float16_t *src, float16_t *dst, float16_t low, 118 float16_t high, uint32_t num_samples); 119 120 #ifdef __cplusplus 121 } 122 #endif 123 124 #endif /* INCLUDE_ZEPHYR_DSP_BASICMATH_F16_H_ */ 125