annotate include/ne10/NE10_math.h @ 513:485913c58a61 prerelease

removed old readFileTask from libpd
author Giulio Moro <giuliomoro@yahoo.it>
date Wed, 22 Jun 2016 04:58:17 +0100
parents 24c3a0663d54
children
rev   line source
andrewm@379 1 /*
andrewm@379 2 * Copyright 2011-15 ARM Limited and Contributors.
andrewm@379 3 * All rights reserved.
andrewm@379 4 *
andrewm@379 5 * Redistribution and use in source and binary forms, with or without
andrewm@379 6 * modification, are permitted provided that the following conditions are met:
andrewm@379 7 * * Redistributions of source code must retain the above copyright
andrewm@379 8 * notice, this list of conditions and the following disclaimer.
andrewm@379 9 * * Redistributions in binary form must reproduce the above copyright
andrewm@379 10 * notice, this list of conditions and the following disclaimer in the
andrewm@379 11 * documentation and/or other materials provided with the distribution.
andrewm@379 12 * * Neither the name of ARM Limited nor the
andrewm@379 13 * names of its contributors may be used to endorse or promote products
andrewm@379 14 * derived from this software without specific prior written permission.
andrewm@379 15 *
andrewm@379 16 * THIS SOFTWARE IS PROVIDED BY ARM LIMITED AND CONTRIBUTORS "AS IS" AND
andrewm@379 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
andrewm@379 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
andrewm@379 19 * DISCLAIMED. IN NO EVENT SHALL ARM LIMITED AND CONTRIBUTORS BE LIABLE FOR ANY
andrewm@379 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
andrewm@379 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
andrewm@379 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
andrewm@379 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
andrewm@379 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
andrewm@379 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
andrewm@379 26 */
andrewm@379 27
andrewm@379 28 /*
andrewm@379 29 * NE10 Library : inc/NE10_math.h
andrewm@379 30 */
andrewm@379 31
andrewm@379 32
andrewm@379 33 #include "NE10_types.h"
andrewm@379 34
andrewm@379 35 #ifndef NE10_MATH_H
andrewm@379 36 #define NE10_MATH_H
andrewm@379 37
andrewm@379 38 #ifdef __cplusplus
andrewm@379 39 extern "C" {
andrewm@379 40 #endif
andrewm@379 41
andrewm@379 42 ///////////////////////////
andrewm@379 43 // function prototypes:
andrewm@379 44 ///////////////////////////
andrewm@379 45
andrewm@379 46
andrewm@379 47 // ## Vector-Constant Arithmetic ##
andrewm@379 48
andrewm@379 49 /**
andrewm@379 50 * @ingroup groupMaths
andrewm@379 51 */
andrewm@379 52
andrewm@379 53 /**
andrewm@379 54 * @defgroup ADD_VEC Vector Add
andrewm@379 55 *
andrewm@379 56 * \par
andrewm@379 57 * These functions implement the vector add operation for float data type.
andrewm@379 58 */
andrewm@379 59
andrewm@379 60 /**
andrewm@379 61 * @addtogroup ADD_VEC
andrewm@379 62 * @{
andrewm@379 63 */
andrewm@379 64
andrewm@379 65 /**
andrewm@379 66 * Adds a constant scalar value to all the elements of an input array and stores the results in an output array.
andrewm@379 67 * This function point could be pointed to one of ne10_addc_float_c, ne10_addc_float_neon and ne10_addc_float_asm.
andrewm@379 68 * @param[out] dst Pointer to the destination array
andrewm@379 69 * @param[in] src Pointer to the source array
andrewm@379 70 * @param[in] cst The constant scalar added to the input values
andrewm@379 71 * @param[in] count The number of items in the input array
andrewm@379 72 */
andrewm@379 73 extern ne10_result_t (*ne10_addc_float) (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 74 extern ne10_result_t ne10_addc_float_c (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 75 extern ne10_result_t ne10_addc_float_neon (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count) asm ("ne10_addc_float_neon");
andrewm@379 76 extern ne10_result_t ne10_addc_float_asm (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 77 /**
andrewm@379 78 * Adds a constant 2D vector to all of the vectors in an input array and stores the results in an output array.
andrewm@379 79 * This function point could be pointed to one of ne10_addc_vec2f_c, ne10_addc_vec2f_neon and ne10_addc_vec2f_asm.
andrewm@379 80 * @param[out] dst Pointer to the destination array
andrewm@379 81 * @param[in] src Pointer to the source array
andrewm@379 82 * @param[in] cst Pointer to the 2D vector added to the input values
andrewm@379 83 * @param[in] count The number of items in the input array
andrewm@379 84 */
andrewm@379 85 extern ne10_result_t (*ne10_addc_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 86 extern ne10_result_t ne10_addc_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 87 extern ne10_result_t ne10_addc_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count) asm ("ne10_addc_vec2f_neon");
andrewm@379 88 extern ne10_result_t ne10_addc_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 89 /**
andrewm@379 90 * Adds a constant 3D vector to all of the vectors in an input array and stores the results in an output array.
andrewm@379 91 * This function point could be pointed to one of ne10_addc_vec3f_c, ne10_addc_vec3f_neon and ne10_addc_vec3f_asm.
andrewm@379 92 * @param[out] dst Pointer to the destination array
andrewm@379 93 * @param[in] src Pointer to the source array
andrewm@379 94 * @param[in] cst Pointer to the 3D vector added to the input values
andrewm@379 95 * @param[in] count The number of items in the input array
andrewm@379 96 */
andrewm@379 97 extern ne10_result_t (*ne10_addc_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 98 extern ne10_result_t ne10_addc_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 99 extern ne10_result_t ne10_addc_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count) asm ("ne10_addc_vec3f_neon");
andrewm@379 100 extern ne10_result_t ne10_addc_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 101 /**
andrewm@379 102 * Adds a constant 4D vector to all of the vectors in an input array and stores the results in an output array.
andrewm@379 103 * This function point could be pointed to one of ne10_addc_vec4f_c, ne10_addc_vec4f_neon and ne10_addc_vec4f_asm.
andrewm@379 104 * @param[out] dst Pointer to the destination array
andrewm@379 105 * @param[in] src Pointer to the source array
andrewm@379 106 * @param[in] cst Pointer to the 4D vector added to the input values
andrewm@379 107 * @param[in] count The number of items in the input array
andrewm@379 108 */
andrewm@379 109 extern ne10_result_t (*ne10_addc_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 110 extern ne10_result_t ne10_addc_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 111 extern ne10_result_t ne10_addc_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count) asm ("ne10_addc_vec4f_neon");
andrewm@379 112 extern ne10_result_t ne10_addc_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 113
andrewm@379 114
andrewm@379 115 /**
andrewm@379 116 * Adds the elements of src1 to the elements of src2 and stores the results in the dst.
andrewm@379 117 * This function point could be pointed to one of ne10_add_float_c, ne10_add_float_neon and ne10_add_float_asm.
andrewm@379 118 * @param[out] dst Pointer to the destination array
andrewm@379 119 * @param[in] src1 The first array to use as the input array
andrewm@379 120 * @param[in] src2 The second array to use as the input array
andrewm@379 121 * @param[in] count The number of items in the two input arrays
andrewm@379 122 */
andrewm@379 123 extern ne10_result_t (*ne10_add_float) (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 124 extern ne10_result_t ne10_add_float_c (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 125 extern ne10_result_t ne10_add_float_neon (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count) asm ("ne10_add_float_neon");
andrewm@379 126 extern ne10_result_t ne10_add_float_asm (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 127 /**
andrewm@379 128 * Vector addition of two 2D vectors.
andrewm@379 129 * This function point could be pointed to one of ne10_add_vec2f_c, ne10_add_vec2f_neon and ne10_add_vec2f_asm.
andrewm@379 130 * @param[out] dst Pointer to the destination array
andrewm@379 131 * @param[in] src1 Pointer to the first source array
andrewm@379 132 * @param[in] src2 Pointer to the second source array
andrewm@379 133 * @param[in] count The number of items in the input arrays
andrewm@379 134 */
andrewm@379 135 extern ne10_result_t (*ne10_add_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 136 extern ne10_result_t ne10_add_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 137 extern ne10_result_t ne10_add_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_add_vec2f_neon");
andrewm@379 138 extern ne10_result_t ne10_add_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 139 /**
andrewm@379 140 * Vector addition of two 3D vectors.
andrewm@379 141 * This function point could be pointed to one of ne10_add_vec3f_c, ne10_add_vec3f_neon and ne10_add_vec3f_asm.
andrewm@379 142 * @param[out] dst Pointer to the destination array
andrewm@379 143 * @param[in] src1 Pointer to the first source array
andrewm@379 144 * @param[in] src2 Pointer to the second source array
andrewm@379 145 * @param[in] count The number of items in the input arrays
andrewm@379 146 */
andrewm@379 147 extern ne10_result_t (*ne10_add_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 148 extern ne10_result_t ne10_add_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 149 extern ne10_result_t ne10_add_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_add_vec3f_neon");
andrewm@379 150 extern ne10_result_t ne10_add_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 151 /**
andrewm@379 152 * Vector addition of two 4D vectors.
andrewm@379 153 * This function point could be pointed to one of ne10_add_vec4f_c, ne10_add_vec4f_neon and ne10_add_vec4f_asm.
andrewm@379 154 * @param[out] dst Pointer to the destination array
andrewm@379 155 * @param[in] src1 Pointer to the first source array
andrewm@379 156 * @param[in] src2 Pointer to the second source array
andrewm@379 157 * @param[in] count The number of items in the input arrays
andrewm@379 158 */
andrewm@379 159 extern ne10_result_t (*ne10_add_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 160 extern ne10_result_t ne10_add_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 161 extern ne10_result_t ne10_add_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_add_vec4f_neon");
andrewm@379 162 extern ne10_result_t ne10_add_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 163 /** @} */ //end of Vector Add group
andrewm@379 164
andrewm@379 165 /**
andrewm@379 166 * @ingroup groupMaths
andrewm@379 167 */
andrewm@379 168
andrewm@379 169 /**
andrewm@379 170 * @defgroup ADD_MAT Matrix Add
andrewm@379 171 *
andrewm@379 172 * \par
andrewm@379 173 * These functions implement the matrix add operation for float data type.
andrewm@379 174 */
andrewm@379 175
andrewm@379 176 /**
andrewm@379 177 * @addtogroup ADD_MAT
andrewm@379 178 * @{
andrewm@379 179 */
andrewm@379 180
andrewm@379 181 /**
andrewm@379 182 * Vector addition of two 4x4 matrixs.
andrewm@379 183 * This function point could be pointed to one of ne10_addmat_4x4f_c, ne10_addmat_4x4f_neon and ne10_addmat_4x4f_asm.
andrewm@379 184 * @param[out] dst Pointer to the destination array
andrewm@379 185 * @param[in] src1 Pointer to the first source array
andrewm@379 186 * @param[in] src2 Pointer to the second source array
andrewm@379 187 * @param[in] count The number of items in the input arrays
andrewm@379 188 */
andrewm@379 189 extern ne10_result_t (*ne10_addmat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 190 extern ne10_result_t ne10_addmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 191 extern ne10_result_t ne10_addmat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 192 extern ne10_result_t ne10_addmat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 193 /**
andrewm@379 194 * Vector addition of two 3x3 matrixs.
andrewm@379 195 * This function point could be pointed to one of ne10_addmat_3x3f_c, ne10_addmat_3x3f_neon and ne10_addmat_3x3f_asm.
andrewm@379 196 * @param[out] dst Pointer to the destination array
andrewm@379 197 * @param[in] src1 Pointer to the first source array
andrewm@379 198 * @param[in] src2 Pointer to the second source array
andrewm@379 199 * @param[in] count The number of items in the input arrays
andrewm@379 200 */
andrewm@379 201 extern ne10_result_t (*ne10_addmat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 202 extern ne10_result_t ne10_addmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 203 extern ne10_result_t ne10_addmat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 204 extern ne10_result_t ne10_addmat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 205 /**
andrewm@379 206 * Vector addition of two 2x2 matrixs.
andrewm@379 207 * This function point could be pointed to one of ne10_addmat_2x2f_c, ne10_addmat_2x2f_neon and ne10_addmat_2x2f_asm.
andrewm@379 208 * @param[out] dst Pointer to the destination array
andrewm@379 209 * @param[in] src1 Pointer to the first source array
andrewm@379 210 * @param[in] src2 Pointer to the second source array
andrewm@379 211 * @param[in] count The number of items in the input arrays
andrewm@379 212 */
andrewm@379 213 extern ne10_result_t (*ne10_addmat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 214 extern ne10_result_t ne10_addmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 215 extern ne10_result_t ne10_addmat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 216 extern ne10_result_t ne10_addmat_2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 217 /** @} */ //end of Matrix Add group
andrewm@379 218
andrewm@379 219
andrewm@379 220 /**
andrewm@379 221 * @ingroup groupMaths
andrewm@379 222 */
andrewm@379 223
andrewm@379 224 /**
andrewm@379 225 * @defgroup SUB_VEC Vector Sub
andrewm@379 226 *
andrewm@379 227 * \par
andrewm@379 228 * These functions implement the vector sub operation for float data type.
andrewm@379 229 */
andrewm@379 230
andrewm@379 231 /**
andrewm@379 232 * @addtogroup SUB_VEC
andrewm@379 233 * @{
andrewm@379 234 */
andrewm@379 235
andrewm@379 236 /**
andrewm@379 237 * Subtracts a constant scalar from all the elements of an input array and stores the results in an output array.
andrewm@379 238 * This function point could be pointed to one of ne10_subc_float_c, ne10_subc_float_neon and ne10_subc_float_asm.
andrewm@379 239 * @param[out] dst Pointer to the destination array
andrewm@379 240 * @param[in] src Pointer to the source array
andrewm@379 241 * @param[in] cst The constant scalar subtracted from the input values
andrewm@379 242 * @param[in] count The number of items in the input array
andrewm@379 243 */
andrewm@379 244 extern ne10_result_t (*ne10_subc_float) (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 245 extern ne10_result_t ne10_subc_float_c (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 246 extern ne10_result_t ne10_subc_float_neon (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 247 extern ne10_result_t ne10_subc_float_asm (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 248 /**
andrewm@379 249 * Subtracts a constant 2D vector from all of the vectors in an input array and stores the results in an output array.
andrewm@379 250 * This function point could be pointed to one of ne10_subc_vec2f_c, ne10_subc_vec2f_neon and ne10_subc_vec2f_asm.
andrewm@379 251 * @param[out] dst Pointer to the destination array
andrewm@379 252 * @param[in] src Pointer to the source array
andrewm@379 253 * @param[in] cst Pointer to the 2D vector subtracted from the input values
andrewm@379 254 * @param[in] count The number of items in the input array
andrewm@379 255 */
andrewm@379 256 extern ne10_result_t (*ne10_subc_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 257 extern ne10_result_t ne10_subc_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 258 extern ne10_result_t ne10_subc_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 259 extern ne10_result_t ne10_subc_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 260 /**
andrewm@379 261 * Subtracts a constant 3D vector from all of the vectors in an input array and stores the results in an output array.
andrewm@379 262 * This function point could be pointed to one of ne10_subc_vec3f_c, ne10_subc_vec3f_neon and ne10_subc_vec3f_asm.
andrewm@379 263 * @param[out] dst Pointer to the destination array
andrewm@379 264 * @param[in] src Pointer to the source array
andrewm@379 265 * @param[in] cst Pointer to the 3D vector subtracted from the input values
andrewm@379 266 * @param[in] count The number of items in the input array
andrewm@379 267 */
andrewm@379 268 extern ne10_result_t (*ne10_subc_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 269 extern ne10_result_t ne10_subc_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 270 extern ne10_result_t ne10_subc_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 271 extern ne10_result_t ne10_subc_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 272 /**
andrewm@379 273 * Subtracts a constant 4D vector from all of the vectors in an input array and stores the results in an output array.
andrewm@379 274 * This function point could be pointed to one of ne10_subc_vec4f_c, ne10_subc_vec4f_neon and ne10_subc_vec4f_asm.
andrewm@379 275 * @param[out] dst Pointer to the destination array
andrewm@379 276 * @param[in] src Pointer to the source array
andrewm@379 277 * @param[in] cst Pointer to the 4D vector subtracted from the input values
andrewm@379 278 * @param[in] count The number of items in the input array
andrewm@379 279 */
andrewm@379 280 extern ne10_result_t (*ne10_subc_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 281 extern ne10_result_t ne10_subc_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 282 extern ne10_result_t ne10_subc_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 283 extern ne10_result_t ne10_subc_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract cst from the element(s)
andrewm@379 284
andrewm@379 285 /**
andrewm@379 286 * Subtracts the elements of src2 from the elements of src1 and stores the results in the dst.
andrewm@379 287 * This function point could be pointed to one of ne10_sub_float_c, ne10_sub_float_neon and ne10_sub_float_asm.
andrewm@379 288 * @param[out] dst Pointer to the destination array
andrewm@379 289 * @param[in] src1 The first array to use as the input array
andrewm@379 290 * @param[in] src2 The second array to use as the input array
andrewm@379 291 * @param[in] count The number of items in the two input arrays
andrewm@379 292 */
andrewm@379 293 extern ne10_result_t (*ne10_sub_float) (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 294 extern ne10_result_t ne10_sub_float_c (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 295 extern ne10_result_t ne10_sub_float_neon (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count) asm ("ne10_sub_float_neon");
andrewm@379 296 extern ne10_result_t ne10_sub_float_asm (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 297 /**
andrewm@379 298 * Vector subtraction of two 2D vectors.
andrewm@379 299 * This function point could be pointed to one of ne10_sub_vec2f_c, ne10_sub_vec2f_neon and ne10_sub_vec2f_asm.
andrewm@379 300 * @param[out] dst Pointer to the destination array
andrewm@379 301 * @param[in] src1 Pointer to the first source array
andrewm@379 302 * @param[in] src2 Pointer to the second source array
andrewm@379 303 * @param[in] count The number of items in the input arrays
andrewm@379 304 */
andrewm@379 305 extern ne10_result_t (*ne10_sub_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 306 extern ne10_result_t ne10_sub_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 307 extern ne10_result_t ne10_sub_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_sub_vec2f_neon");
andrewm@379 308 extern ne10_result_t ne10_sub_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 309 /**
andrewm@379 310 * Vector subtraction of two 3D vectors.
andrewm@379 311 * This function point could be pointed to one of ne10_sub_vec3f_c, ne10_sub_vec3f_neon and ne10_sub_vec3f_asm.
andrewm@379 312 * @param[out] dst Pointer to the destination array
andrewm@379 313 * @param[in] src1 Pointer to the first source array
andrewm@379 314 * @param[in] src2 Pointer to the second source array
andrewm@379 315 * @param[in] count The number of items in the input arrays
andrewm@379 316 */
andrewm@379 317 extern ne10_result_t (*ne10_sub_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 318 extern ne10_result_t ne10_sub_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 319 extern ne10_result_t ne10_sub_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_sub_vec3f_neon");
andrewm@379 320 extern ne10_result_t ne10_sub_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 321 /**
andrewm@379 322 * Vector subtraction of two 4D vectors.
andrewm@379 323 * This function point could be pointed to one of ne10_sub_vec4f_c, ne10_sub_vec4f_neon and ne10_sub_vec4f_asm.
andrewm@379 324 * @param[out] dst Pointer to the destination array
andrewm@379 325 * @param[in] src1 Pointer to the first source array
andrewm@379 326 * @param[in] src2 Pointer to the second source array
andrewm@379 327 * @param[in] count The number of items in the input arrays
andrewm@379 328 */
andrewm@379 329 extern ne10_result_t (*ne10_sub_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 330 extern ne10_result_t ne10_sub_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 331 extern ne10_result_t ne10_sub_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_sub_vec4f_neon");
andrewm@379 332 extern ne10_result_t ne10_sub_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 333 /** @} */ //end of Vector Sub group
andrewm@379 334
andrewm@379 335 /**
andrewm@379 336 * @ingroup groupMaths
andrewm@379 337 */
andrewm@379 338
andrewm@379 339 /**
andrewm@379 340 * @defgroup RSBC Vector Rsbc
andrewm@379 341 *
andrewm@379 342 * \par
andrewm@379 343 * These functions implement the vector rsbc operation for float data type.
andrewm@379 344 */
andrewm@379 345
andrewm@379 346 /**
andrewm@379 347 * @addtogroup RSBC
andrewm@379 348 * @{
andrewm@379 349 */
andrewm@379 350 /**
andrewm@379 351 * Subtracts the elements of an input array from a constant scalar and stores the results in an output array.
andrewm@379 352 * This function point could be pointed to one of ne10_rsbc_float_c, ne10_rsbc_float_neon and ne10_rsbc_float_asm.
andrewm@379 353 * @param[out] dst Pointer to the destination array
andrewm@379 354 * @param[in] src Pointer to the source array
andrewm@379 355 * @param[in] cst The constant scalar to subtract the input values from
andrewm@379 356 * @param[in] count The number of items in the input array
andrewm@379 357 */
andrewm@379 358 extern ne10_result_t (*ne10_rsbc_float) (ne10_float32_t * dst, ne10_float32_t *src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 359 extern ne10_result_t ne10_rsbc_float_c (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 360 extern ne10_result_t ne10_rsbc_float_neon (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 361 extern ne10_result_t ne10_rsbc_float_asm (ne10_float32_t * dst, ne10_float32_t *src, const ne10_float32_t cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 362 /**
andrewm@379 363 * Subtracts the vectors in an input array from a constant 2D vector and stores the results in an output array.
andrewm@379 364 * This function point could be pointed to one of ne10_rsbc_vec2f_c, ne10_rsbc_vec2f_neon and ne10_rsbc_vec2f_asm.
andrewm@379 365 * @param[out] dst Pointer to the destination array
andrewm@379 366 * @param[in] src Pointer to the source array
andrewm@379 367 * @param[in] cst Pointer to the 2D vector to subtract the input values from
andrewm@379 368 * @param[in] count The number of items in the input array
andrewm@379 369 */
andrewm@379 370 extern ne10_result_t (*ne10_rsbc_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 371 extern ne10_result_t ne10_rsbc_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 372 extern ne10_result_t ne10_rsbc_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 373 extern ne10_result_t ne10_rsbc_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t *src, const ne10_vec2f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 374 /**
andrewm@379 375 * Subtracts the vectors in an input array from a constant 3D vector and stores the results in an output array.
andrewm@379 376 * This function point could be pointed to one of ne10_rsbc_vec3f_c, ne10_rsbc_vec3f_neon and ne10_rsbc_vec3f_asm.
andrewm@379 377 * @param[out] dst Pointer to the destination array
andrewm@379 378 * @param[in] src Pointer to the source array
andrewm@379 379 * @param[in] cst Pointer to the 3D vector to subtract the input values from
andrewm@379 380 * @param[in] count The number of items in the input array
andrewm@379 381 */
andrewm@379 382 extern ne10_result_t (*ne10_rsbc_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 383 extern ne10_result_t ne10_rsbc_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 384 extern ne10_result_t ne10_rsbc_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 385 extern ne10_result_t ne10_rsbc_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t *src, const ne10_vec3f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 386 /**
andrewm@379 387 * Subtracts the vectors in an input array from a constant 4D vector and stores the results in an output array.
andrewm@379 388 * This function point could be pointed to one of ne10_rsbc_vec4f_c, ne10_rsbc_vec4f_neon and ne10_rsbc_vec4f_asm.
andrewm@379 389 * @param[out] dst Pointer to the destination array
andrewm@379 390 * @param[in] src Pointer to the source array
andrewm@379 391 * @param[in] cst Pointer to the 4D vector to subtract the input values from
andrewm@379 392 * @param[in] count The number of items in the input array
andrewm@379 393 */
andrewm@379 394 extern ne10_result_t (*ne10_rsbc_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 395 extern ne10_result_t ne10_rsbc_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 396 extern ne10_result_t ne10_rsbc_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 397 extern ne10_result_t ne10_rsbc_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t *src, const ne10_vec4f_t * cst, ne10_uint32_t count); // subtract element(s) from a cst
andrewm@379 398 /** @} */ //end of Vector RSBC group
andrewm@379 399
andrewm@379 400 /**
andrewm@379 401 * @ingroup groupMaths
andrewm@379 402 */
andrewm@379 403
andrewm@379 404 /**
andrewm@379 405 * @defgroup SUB_MAT Matrix Sub
andrewm@379 406 *
andrewm@379 407 * \par
andrewm@379 408 * These functions implement the matrix sub operation for float data type.
andrewm@379 409 */
andrewm@379 410
andrewm@379 411 /**
andrewm@379 412 * @addtogroup SUB_MAT
andrewm@379 413 * @{
andrewm@379 414 */
andrewm@379 415 /**
andrewm@379 416 * Matrix subtraction of two 4x4 matrixs.
andrewm@379 417 * This function point could be pointed to one of ne10_submat_4x4f_c, ne10_submat_4x4f_neon and ne10_submat_4x4f_asm.
andrewm@379 418 * @param[out] dst Pointer to the destination array
andrewm@379 419 * @param[in] src1 Pointer to the first source array
andrewm@379 420 * @param[in] src2 Pointer to the second source array
andrewm@379 421 * @param[in] count The number of items in the input arrays
andrewm@379 422 */
andrewm@379 423 extern ne10_result_t (*ne10_submat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 424 extern ne10_result_t ne10_submat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 425 extern ne10_result_t ne10_submat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 426 extern ne10_result_t ne10_submat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 427
andrewm@379 428 /**
andrewm@379 429 * Matrix subtraction of two 3x3 matrixs.
andrewm@379 430 * This function point could be pointed to one of ne10_submat_3x3f_c, ne10_submat_3x3f_neon and ne10_submat_3x3f_asm.
andrewm@379 431 * @param[out] dst Pointer to the destination array
andrewm@379 432 * @param[in] src1 Pointer to the first source array
andrewm@379 433 * @param[in] src2 Pointer to the second source array
andrewm@379 434 * @param[in] count The number of items in the input arrays
andrewm@379 435 */
andrewm@379 436 extern ne10_result_t (*ne10_submat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 437 extern ne10_result_t ne10_submat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 438 extern ne10_result_t ne10_submat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 439 extern ne10_result_t ne10_submat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 440
andrewm@379 441 /**
andrewm@379 442 * Matrix subtraction of two 2x2 matrixs.
andrewm@379 443 * This function point could be pointed to one of ne10_submat_2x2f_c, ne10_submat_2x2f_neon and ne10_submat_2x2f_asm.
andrewm@379 444 * @param[out] dst Pointer to the destination array
andrewm@379 445 * @param[in] src1 Pointer to the first source array
andrewm@379 446 * @param[in] src2 Pointer to the second source array
andrewm@379 447 * @param[in] count The number of items in the input arrays
andrewm@379 448 */
andrewm@379 449 extern ne10_result_t (*ne10_submat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 450 extern ne10_result_t ne10_submat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 451 extern ne10_result_t ne10_submat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 452 extern ne10_result_t ne10_submat_2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 453 /** @} */ //end of Matrix Sub group
andrewm@379 454
andrewm@379 455 /**
andrewm@379 456 * @ingroup groupMaths
andrewm@379 457 */
andrewm@379 458
andrewm@379 459 /**
andrewm@379 460 * @defgroup MUL_VEC Vector Multiply
andrewm@379 461 *
andrewm@379 462 * \par
andrewm@379 463 * These functions implement the vector multiply operation for float data type.
andrewm@379 464 */
andrewm@379 465
andrewm@379 466 /**
andrewm@379 467 * @addtogroup MUL_VEC
andrewm@379 468 * @{
andrewm@379 469 */
andrewm@379 470
andrewm@379 471 /**
andrewm@379 472 * Multiplies the elements of an input array by a constant scalar and stores the results in an output array.
andrewm@379 473 * This function point could be pointed to one of ne10_mulc_float_c, ne10_mulc_float_neon and ne10_mulc_float_asm.
andrewm@379 474 * @param[out] dst Pointer to the destination array
andrewm@379 475 * @param[in] src Pointer to the source array
andrewm@379 476 * @param[in] cst The constant scalar to multiply the input values with
andrewm@379 477 * @param[in] count The number of items in the input array
andrewm@379 478 */
andrewm@379 479 extern ne10_result_t (*ne10_mulc_float) (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 480 extern ne10_result_t ne10_mulc_float_c (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 481 extern ne10_result_t ne10_mulc_float_neon (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 482 extern ne10_result_t ne10_mulc_float_asm (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 483 /**
andrewm@379 484 * Multiplies the components of 2D vectors in an input array by the components of a constant 2D vector and stores the results in an output array.
andrewm@379 485 * This function point could be pointed to one of ne10_mulc_vec2f_c, ne10_mulc_vec2f_neon and ne10_mulc_vec2f_asm.
andrewm@379 486 * @param[out] dst Pointer to the destination array
andrewm@379 487 * @param[in] src Pointer to the source array
andrewm@379 488 * @param[in] cst Pointer to the 2D vector to multiply the input values with
andrewm@379 489 * @param[in] count The number of items in the input array
andrewm@379 490 */
andrewm@379 491 extern ne10_result_t (*ne10_mulc_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 492 extern ne10_result_t ne10_mulc_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 493 extern ne10_result_t ne10_mulc_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 494 extern ne10_result_t ne10_mulc_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 495 /**
andrewm@379 496 * Multiplies the components of 3D vectors in an input array by the components of a constant 3D vector and stores the results in an output array.
andrewm@379 497 * This function point could be pointed to one of ne10_mulc_vec3f_c, ne10_mulc_vec3f_neon and ne10_mulc_vec3f_asm.
andrewm@379 498 * @param[out] dst Pointer to the destination array
andrewm@379 499 * @param[in] src Pointer to the source array
andrewm@379 500 * @param[in] cst Pointer to the 3D vector to multiply the input values with
andrewm@379 501 * @param[in] count The number of items in the input array
andrewm@379 502 */
andrewm@379 503 extern ne10_result_t (*ne10_mulc_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 504 extern ne10_result_t ne10_mulc_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 505 extern ne10_result_t ne10_mulc_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 506 extern ne10_result_t ne10_mulc_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 507 /**
andrewm@379 508 * Multiplies the components of 4D vectors in an input array by the components of a constant 4D vector and stores the results in an output array.
andrewm@379 509 * This function point could be pointed to one of ne10_mulc_vec4f_c, ne10_mulc_vec4f_neon and ne10_mulc_vec4f_asm.
andrewm@379 510 * @param[out] dst Pointer to the destination array
andrewm@379 511 * @param[in] src Pointer to the source array
andrewm@379 512 * @param[in] cst Pointer to the 4D vector to multiply the input values with
andrewm@379 513 * @param[in] count The number of items in the input array
andrewm@379 514 */
andrewm@379 515 extern ne10_result_t (*ne10_mulc_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 516 extern ne10_result_t ne10_mulc_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 517 extern ne10_result_t ne10_mulc_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 518 extern ne10_result_t ne10_mulc_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 519
andrewm@379 520 /**
andrewm@379 521 * Multiplies the elements of src1 by the elements of src2 and stores the results in the dst.
andrewm@379 522 * This function point could be pointed to one of ne10_mul_float_c, ne10_mul_float_neon and ne10_mul_float_asm.
andrewm@379 523 * @param[out] dst Pointer to the destination array
andrewm@379 524 * @param[in] src1 The first array to use as the input array
andrewm@379 525 * @param[in] src2 The second array to use as the input array
andrewm@379 526 * @param[in] count The number of items in the two input arrays
andrewm@379 527 */
andrewm@379 528 extern ne10_result_t (*ne10_mul_float) (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 529 extern ne10_result_t ne10_mul_float_c (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 530 extern ne10_result_t ne10_mul_float_neon (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count) asm ("ne10_mul_float_neon");
andrewm@379 531 extern ne10_result_t ne10_mul_float_asm (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 532 /**
andrewm@379 533 * Multiplies the components of a 2D vector with the corresponding components of another.
andrewm@379 534 * This function point could be pointed to one of ne10_vmul_vec2f_c, ne10_vmul_vec2f_neon and ne10_vmul_vec2f_asm.
andrewm@379 535 * @param[out] dst Pointer to the destination array
andrewm@379 536 * @param[in] src1 Pointer to the first source array
andrewm@379 537 * @param[in] src2 Pointer to the second source array
andrewm@379 538 * @param[in] count The number of items in the input arrays
andrewm@379 539 */
andrewm@379 540 extern ne10_result_t (*ne10_vmul_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 541 extern ne10_result_t ne10_vmul_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 542 extern ne10_result_t ne10_vmul_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_vmul_vec2f_neon");
andrewm@379 543 extern ne10_result_t ne10_vmul_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 544 /**
andrewm@379 545 * Multiplies the components of a 3D vector with the corresponding components of another.
andrewm@379 546 * This function point could be pointed to one of ne10_vmul_vec3f_c, ne10_vmul_vec3f_neon and ne10_vmul_vec3f_asm.
andrewm@379 547 * @param[out] dst Pointer to the destination array
andrewm@379 548 * @param[in] src1 Pointer to the first source array
andrewm@379 549 * @param[in] src2 Pointer to the second source array
andrewm@379 550 * @param[in] count The number of items in the input arrays
andrewm@379 551 */
andrewm@379 552 extern ne10_result_t (*ne10_vmul_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 553 extern ne10_result_t ne10_vmul_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 554 extern ne10_result_t ne10_vmul_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_vmul_vec3f_neon");
andrewm@379 555 extern ne10_result_t ne10_vmul_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 556 /**
andrewm@379 557 * Multiplies the components of a 4D vector with the corresponding components of another.
andrewm@379 558 * This function point could be pointed to one of ne10_vmul_vec4f_c, ne10_vmul_vec4f_neon and ne10_vmul_vec4f_asm.
andrewm@379 559 * @param[out] dst Pointer to the destination array
andrewm@379 560 * @param[in] src1 Pointer to the first source array
andrewm@379 561 * @param[in] src2 Pointer to the second source array
andrewm@379 562 * @param[in] count The number of items in the input arrays
andrewm@379 563 */
andrewm@379 564 extern ne10_result_t (*ne10_vmul_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 565 extern ne10_result_t ne10_vmul_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 566 extern ne10_result_t ne10_vmul_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_vmul_vec4f_neon");
andrewm@379 567 extern ne10_result_t ne10_vmul_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 568 /** @} */ //end of Vector Multiply group
andrewm@379 569
andrewm@379 570 /**
andrewm@379 571 * @ingroup groupMaths
andrewm@379 572 */
andrewm@379 573
andrewm@379 574 /**
andrewm@379 575 * @defgroup MLA_VEC Vector Multiply-Accumulator
andrewm@379 576 *
andrewm@379 577 * \par
andrewm@379 578 * These functions implement the vector multiply-accumulator operation for float data type.
andrewm@379 579 */
andrewm@379 580
andrewm@379 581 /**
andrewm@379 582 * @addtogroup MLA_VEC
andrewm@379 583 * @{
andrewm@379 584 */
andrewm@379 585
andrewm@379 586 /**
andrewm@379 587 * Multiplies each entry in the source array (src) by cst, then adds the result to
andrewm@379 588 * the corresponding item of the accumulation array (acc), and stores the result in the destination array.
andrewm@379 589 * This function point could be pointed to one of ne10_mlac_float_c, ne10_mlac_float_neon and ne10_mlac_float_asm.
andrewm@379 590 * @param[out] dst Pointer to the destination array
andrewm@379 591 * @param[in] acc The corresponding elemetn is added to the result of the multiplication
andrewm@379 592 * @param[in] src Pointer to the source array
andrewm@379 593 * @param[in] cst The constant scalar to multiply the input elements with
andrewm@379 594 * @param[in] count The number of items in the input array
andrewm@379 595 */
andrewm@379 596 extern ne10_result_t (*ne10_mlac_float) (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 597 extern ne10_result_t ne10_mlac_float_c (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 598 extern ne10_result_t ne10_mlac_float_neon (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 599 extern ne10_result_t ne10_mlac_float_asm (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 600 /**
andrewm@379 601 * Multiplies each entry in the source array (src) by the 2D vector cst, then adds the result to
andrewm@379 602 * the corresponding item of the accumulation array (acc), and stores the result in the destination array.
andrewm@379 603 * This function point could be pointed to one of ne10_mlac_vec2f_c, ne10_mlac_vec2f_neon and ne10_mlac_vec2f_asm.
andrewm@379 604 * @param[out] dst Pointer to the destination array
andrewm@379 605 * @param[in] acc The corresponding elemetn is added to the result of the multiplication
andrewm@379 606 * @param[in] src Pointer to the source array
andrewm@379 607 * @param[in] cst Pointer to the 2D vector to multiply the input vectors with
andrewm@379 608 * @param[in] count The number of items in the input array
andrewm@379 609 */
andrewm@379 610 extern ne10_result_t (*ne10_mlac_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 611 extern ne10_result_t ne10_mlac_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 612 extern ne10_result_t ne10_mlac_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 613 extern ne10_result_t ne10_mlac_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 614 /**
andrewm@379 615 * Multiplies each entry in the source array (src) by the 3D vector cst, then adds the result to
andrewm@379 616 * the corresponding item of the accumulation array (acc), and stores the result in the destination array.
andrewm@379 617 * This function point could be pointed to one of ne10_mlac_vec3f_c, ne10_mlac_vec3f_neon and ne10_mlac_vec3f_asm.
andrewm@379 618 * @param[out] dst Pointer to the destination array
andrewm@379 619 * @param[in] acc The corresponding elemetn is added to the result of the multiplication
andrewm@379 620 * @param[in] src Pointer to the source array
andrewm@379 621 * @param[in] cst Pointer to the 3D vector to multiply the input vectors with
andrewm@379 622 * @param[in] count The number of items in the input array
andrewm@379 623 */
andrewm@379 624 extern ne10_result_t (*ne10_mlac_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 625 extern ne10_result_t ne10_mlac_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 626 extern ne10_result_t ne10_mlac_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 627 extern ne10_result_t ne10_mlac_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 628 /**
andrewm@379 629 * Multiplies each entry in the source array (src) by the 4D vector cst, then adds the result to
andrewm@379 630 * the corresponding item of the accumulation array (acc), and stores the result in the destination array.
andrewm@379 631 * This function point could be pointed to one of ne10_mlac_vec4f_c, ne10_mlac_vec4f_neon and ne10_mlac_vec4f_asm.
andrewm@379 632 * @param[out] dst Pointer to the destination array
andrewm@379 633 * @param[in] acc The corresponding elemetn is added to the result of the multiplication
andrewm@379 634 * @param[in] src Pointer to the source array
andrewm@379 635 * @param[in] cst Pointer to the 4D vector to multiply the input vectors with
andrewm@379 636 * @param[in] count The number of items in the input array
andrewm@379 637 */
andrewm@379 638 extern ne10_result_t (*ne10_mlac_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 639 extern ne10_result_t ne10_mlac_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 640 extern ne10_result_t ne10_mlac_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 641 extern ne10_result_t ne10_mlac_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 642
andrewm@379 643 /**
andrewm@379 644 * Performs a multiply and accumulate operation using the corresponding elements in acc, src1, and src2.
andrewm@379 645 * This function point could be pointed to one of ne10_mla_float_c, ne10_mla_float_neon and ne10_mla_float_asm.
andrewm@379 646 * @param[out] dst Pointer to the destination array
andrewm@379 647 * @param[in] acc These elemtns are added to the result of the multiplication operation
andrewm@379 648 * @param[in] src1 The first array to use as the input array
andrewm@379 649 * @param[in] src2 The second array to use as the input array
andrewm@379 650 * @param[in] count The number of items in the two input arrays
andrewm@379 651 */
andrewm@379 652 extern ne10_result_t (*ne10_mla_float) (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 653 extern ne10_result_t ne10_mla_float_c (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 654 extern ne10_result_t ne10_mla_float_neon (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count) asm ("ne10_mla_float_neon");
andrewm@379 655 extern ne10_result_t ne10_mla_float_asm (ne10_float32_t * dst, ne10_float32_t * acc, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 656 /**
andrewm@379 657 * Performs a multiply and accumulate operation on the components of a 2D vector with the corresponding components of another.
andrewm@379 658 * This function point could be pointed to one of ne10_vmla_vec2f_c, ne10_vmla_vec2f_neon and ne10_vmla_vec2f_asm.
andrewm@379 659 * @param[out] dst Pointer to the destination array
andrewm@379 660 * @param[in] src1 Pointer to the first source array
andrewm@379 661 * @param[in] src2 Pointer to the second source array
andrewm@379 662 * @param[in] count The number of items in the input arrays
andrewm@379 663 */
andrewm@379 664 extern ne10_result_t (*ne10_vmla_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 665 extern ne10_result_t ne10_vmla_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 666 extern ne10_result_t ne10_vmla_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_vmla_vec2f_neon");
andrewm@379 667 extern ne10_result_t ne10_vmla_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * acc, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 668 /**
andrewm@379 669 * Performs a multiply and accumulate operation on the components of a 3D vector with the corresponding components of another.
andrewm@379 670 * This function point could be pointed to one of ne10_vmla_vec3f_c, ne10_vmla_vec3f_neon and ne10_vmla_vec3f_asm.
andrewm@379 671 * @param[out] dst Pointer to the destination array
andrewm@379 672 * @param[in] src1 Pointer to the first source array
andrewm@379 673 * @param[in] src2 Pointer to the second source array
andrewm@379 674 * @param[in] count The number of items in the input arrays
andrewm@379 675 */
andrewm@379 676 extern ne10_result_t (*ne10_vmla_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 677 extern ne10_result_t ne10_vmla_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 678 extern ne10_result_t ne10_vmla_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_vmla_vec3f_neon");
andrewm@379 679 extern ne10_result_t ne10_vmla_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * acc, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 680 /**
andrewm@379 681 * Performs a multiply and accumulate operation on the components of a 4D vector with the corresponding components of another.
andrewm@379 682 * This function point could be pointed to one of ne10_vmla_vec4f_c, ne10_vmla_vec4f_neon and ne10_vmla_vec4f_asm.
andrewm@379 683 * @param[out] dst Pointer to the destination array
andrewm@379 684 * @param[in] src1 Pointer to the first source array
andrewm@379 685 * @param[in] src2 Pointer to the second source array
andrewm@379 686 * @param[in] count The number of items in the input arrays
andrewm@379 687 */
andrewm@379 688 extern ne10_result_t (*ne10_vmla_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 689 extern ne10_result_t ne10_vmla_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 690 extern ne10_result_t ne10_vmla_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_vmla_vec4f_neon");
andrewm@379 691 extern ne10_result_t ne10_vmla_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * acc, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 692 /** @} */ //end of Vector Multiply-Accumulator group
andrewm@379 693
andrewm@379 694 /**
andrewm@379 695 * @ingroup groupMaths
andrewm@379 696 */
andrewm@379 697
andrewm@379 698 /**
andrewm@379 699 * @defgroup MUL_MAT Matrix Multiply
andrewm@379 700 *
andrewm@379 701 * \par
andrewm@379 702 * These functions implement the matrix multiply operation for float data type.
andrewm@379 703 */
andrewm@379 704
andrewm@379 705 /**
andrewm@379 706 * @addtogroup MUL_MAT
andrewm@379 707 * @{
andrewm@379 708 */
andrewm@379 709
andrewm@379 710 /**
andrewm@379 711 * Matrix multiplication of two 4x4 matrixs.
andrewm@379 712 * This function point could be pointed to one of ne10_mulmat_4x4f_c, ne10_mulmat_4x4f_neon and ne10_mulmat_4x4f_asm.
andrewm@379 713 * @param[out] dst Pointer to the destination array
andrewm@379 714 * @param[in] src1 Pointer to the first source array
andrewm@379 715 * @param[in] src2 Pointer to the second source array
andrewm@379 716 * @param[in] count The number of items in the input arrays
andrewm@379 717 */
andrewm@379 718 extern ne10_result_t (*ne10_mulmat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 719 extern ne10_result_t ne10_mulmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 720 extern ne10_result_t ne10_mulmat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count) asm ("ne10_mulmat_4x4f_neon");
andrewm@379 721 extern ne10_result_t ne10_mulmat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 722
andrewm@379 723 /**
andrewm@379 724 * Matrix multiplication of two 3x3 matrixs.
andrewm@379 725 * This function point could be pointed to one of ne10_mulmat_3x3f_c, ne10_mulmat_3x3f_neon and ne10_mulmat_3x3f_asm.
andrewm@379 726 * @param[out] dst Pointer to the destination array
andrewm@379 727 * @param[in] src1 Pointer to the first source array
andrewm@379 728 * @param[in] src2 Pointer to the second source array
andrewm@379 729 * @param[in] count The number of items in the input arrays
andrewm@379 730 */
andrewm@379 731 extern ne10_result_t (*ne10_mulmat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 732 extern ne10_result_t ne10_mulmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 733 extern ne10_result_t ne10_mulmat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count) asm ("ne10_mulmat_3x3f_neon");
andrewm@379 734 extern ne10_result_t ne10_mulmat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 735
andrewm@379 736 /**
andrewm@379 737 * Matrix multiplication of two 2x2 matrixs.
andrewm@379 738 * This function point could be pointed to one of ne10_mulmat_2x2f_c, ne10_mulmat_2x2f_neon and ne10_mulmat_2x2f_asm.
andrewm@379 739 * @param[out] dst Pointer to the destination array
andrewm@379 740 * @param[in] src1 Pointer to the first source array
andrewm@379 741 * @param[in] src2 Pointer to the second source array
andrewm@379 742 * @param[in] count The number of items in the input arrays
andrewm@379 743 */
andrewm@379 744 extern ne10_result_t (*ne10_mulmat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 745 extern ne10_result_t ne10_mulmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 746 extern ne10_result_t ne10_mulmat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count) asm ("ne10_mulmat_2x2f_neon");
andrewm@379 747 extern ne10_result_t ne10_mulmat_2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 748 /** @} */ //end of Matrix Multiply group
andrewm@379 749
andrewm@379 750 /**
andrewm@379 751 * @ingroup groupMaths
andrewm@379 752 */
andrewm@379 753
andrewm@379 754 /**
andrewm@379 755 * @defgroup MUL_MAT_VEC Matrix Vector Multiply
andrewm@379 756 *
andrewm@379 757 * \par
andrewm@379 758 * These functions implement the matrix vector multiply operation for float data type.
andrewm@379 759 */
andrewm@379 760
andrewm@379 761 /**
andrewm@379 762 * @addtogroup MUL_MAT_VEC
andrewm@379 763 * @{
andrewm@379 764 */
andrewm@379 765 /**
andrewm@379 766 * Matrix multiplication of 4x4 matrix and 4D vector.
andrewm@379 767 * This function point could be pointed to one of ne10_mulcmatvec_cm4x4f_v4f_c, ne10_mulcmatvec_cm4x4f_v4f_neon and ne10_mulcmatvec_cm4x4f_v4f_asm.
andrewm@379 768 * @param[out] dst Pointer to the destination array
andrewm@379 769 * @param[in] cst Pointer to the matrix to multiply the input values with
andrewm@379 770 * @param[in] src Pointer to the source array
andrewm@379 771 * @param[in] count The number of items in the input arrays
andrewm@379 772 */
andrewm@379 773 extern ne10_result_t (*ne10_mulcmatvec_cm4x4f_v4f) (ne10_vec4f_t * dst, const ne10_mat4x4f_t * cst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 774 extern ne10_result_t ne10_mulcmatvec_cm4x4f_v4f_c (ne10_vec4f_t * dst, const ne10_mat4x4f_t * cst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 775 extern ne10_result_t ne10_mulcmatvec_cm4x4f_v4f_neon (ne10_vec4f_t * dst, const ne10_mat4x4f_t * cst, ne10_vec4f_t * src, ne10_uint32_t count) asm ("ne10_mulcmatvec_cm4x4f_v4f_neon");
andrewm@379 776 extern ne10_result_t ne10_mulcmatvec_cm4x4f_v4f_asm (ne10_vec4f_t * dst, const ne10_mat4x4f_t * cst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 777 /**
andrewm@379 778 * Matrix multiplication of 3x3 matrix and 3D vector.
andrewm@379 779 * This function point could be pointed to one of ne10_mulcmatvec_cm3x3f_v3f_c, ne10_mulcmatvec_cm3x3f_v3f_neon and ne10_mulcmatvec_cm3x3f_v3f_asm.
andrewm@379 780 * @param[out] dst Pointer to the destination array
andrewm@379 781 * @param[in] cst Pointer to the matrix to multiply the input values with
andrewm@379 782 * @param[in] src Pointer to the source array
andrewm@379 783 * @param[in] count The number of items in the input arrays
andrewm@379 784 */
andrewm@379 785 extern ne10_result_t (*ne10_mulcmatvec_cm3x3f_v3f) (ne10_vec3f_t * dst, const ne10_mat3x3f_t * cst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 786 extern ne10_result_t ne10_mulcmatvec_cm3x3f_v3f_c (ne10_vec3f_t * dst, const ne10_mat3x3f_t * cst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 787 extern ne10_result_t ne10_mulcmatvec_cm3x3f_v3f_neon (ne10_vec3f_t * dst, const ne10_mat3x3f_t * cst, ne10_vec3f_t * src, ne10_uint32_t count) asm ("ne10_mulcmatvec_cm3x3f_v3f_neon");
andrewm@379 788 extern ne10_result_t ne10_mulcmatvec_cm3x3f_v3f_asm (ne10_vec3f_t * dst, const ne10_mat3x3f_t * cst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 789 /**
andrewm@379 790 * Matrix multiplication of 2x2 matrix and 2D vector.
andrewm@379 791 * This function point could be pointed to one of ne10_mulcmatvec_cm2x2f_v2f_c, ne10_mulcmatvec_cm2x2f_v2f_neon and ne10_mulcmatvec_cm2x2f_v2f_asm.
andrewm@379 792 * @param[out] dst Pointer to the destination array
andrewm@379 793 * @param[in] cst Pointer to the matrix to multiply the input values with
andrewm@379 794 * @param[in] src Pointer to the source array
andrewm@379 795 * @param[in] count The number of items in the input arrays
andrewm@379 796 */
andrewm@379 797 extern ne10_result_t (*ne10_mulcmatvec_cm2x2f_v2f) (ne10_vec2f_t * dst, const ne10_mat2x2f_t * cst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 798 extern ne10_result_t ne10_mulcmatvec_cm2x2f_v2f_c (ne10_vec2f_t * dst, const ne10_mat2x2f_t * cst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 799 extern ne10_result_t ne10_mulcmatvec_cm2x2f_v2f_neon (ne10_vec2f_t * dst, const ne10_mat2x2f_t * cst, ne10_vec2f_t * src, ne10_uint32_t count) asm ("ne10_mulcmatvec_cm2x2f_v2f_neon");
andrewm@379 800 extern ne10_result_t ne10_mulcmatvec_cm2x2f_v2f_asm (ne10_vec2f_t * dst, const ne10_mat2x2f_t * cst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 801
andrewm@379 802 /** @} */ //end of Matrix Vector Multiply group
andrewm@379 803
andrewm@379 804 /**
andrewm@379 805 * @ingroup groupMaths
andrewm@379 806 */
andrewm@379 807
andrewm@379 808 /**
andrewm@379 809 * @defgroup DIV_VEC Vector Div
andrewm@379 810 *
andrewm@379 811 * \par
andrewm@379 812 * These functions implement the vector division operation for float data type.
andrewm@379 813 */
andrewm@379 814
andrewm@379 815 /**
andrewm@379 816 * @addtogroup DIV_VEC
andrewm@379 817 * @{
andrewm@379 818 */
andrewm@379 819
andrewm@379 820 /**
andrewm@379 821 * Divides the elements of an input array by a constant scalar and stores the results in an output array.
andrewm@379 822 * This function point could be pointed to one of ne10_divc_float_c, ne10_divc_float_neon and ne10_divc_float_asm.
andrewm@379 823 * @param[out] dst Pointer to the destination array
andrewm@379 824 * @param[in] src Pointer to the source array
andrewm@379 825 * @param[in] cst The constant scalar to divide the input values by
andrewm@379 826 * @param[in] count The number of items in the input array
andrewm@379 827 */
andrewm@379 828 extern ne10_result_t (*ne10_divc_float) (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 829 extern ne10_result_t ne10_divc_float_c (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 830 extern ne10_result_t ne10_divc_float_neon (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 831 extern ne10_result_t ne10_divc_float_asm (ne10_float32_t * dst, ne10_float32_t * src, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 832 /**
andrewm@379 833 * Divides the components of 2D vectors in an input array with the components of a constant 2D vector and stores the results in an output array.
andrewm@379 834 * This function point could be pointed to one of ne10_divc_vec2f_c, ne10_divc_vec2f_neon and ne10_divc_vec2f_asm.
andrewm@379 835 * @param[out] dst Pointer to the destination array
andrewm@379 836 * @param[in] src Pointer to the source array
andrewm@379 837 * @param[in] cst Pointer to the 2D vector to divide the input values by
andrewm@379 838 * @param[in] count The number of items in the input array
andrewm@379 839 */
andrewm@379 840 extern ne10_result_t (*ne10_divc_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 841 extern ne10_result_t ne10_divc_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 842 extern ne10_result_t ne10_divc_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 843 extern ne10_result_t ne10_divc_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 844 /**
andrewm@379 845 * Divides the components of 3D vectors in an input array with the components of a constant 3D vector and stores the results in an output array.
andrewm@379 846 * This function point could be pointed to one of ne10_divc_vec3f_c, ne10_divc_vec3f_neon and ne10_divc_vec3f_asm.
andrewm@379 847 * @param[out] dst Pointer to the destination array
andrewm@379 848 * @param[in] src Pointer to the source array
andrewm@379 849 * @param[in] cst Pointer to the 3D vector to divide the input values by
andrewm@379 850 * @param[in] count The number of items in the input array
andrewm@379 851 */
andrewm@379 852 extern ne10_result_t (*ne10_divc_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 853 extern ne10_result_t ne10_divc_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 854 extern ne10_result_t ne10_divc_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 855 extern ne10_result_t ne10_divc_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 856 /**
andrewm@379 857 * Divides the components of 4D vectors in an input array with the components of a constant 4D vector and stores the results in an output array.
andrewm@379 858 * This function point could be pointed to one of ne10_divc_vec4f_c, ne10_divc_vec4f_neon and ne10_divc_vec4f_asm.
andrewm@379 859 * @param[out] dst Pointer to the destination array
andrewm@379 860 * @param[in] src Pointer to the source array
andrewm@379 861 * @param[in] cst Pointer to the 4D vector to divide the input values by
andrewm@379 862 * @param[in] count The number of items in the input array
andrewm@379 863 */
andrewm@379 864 extern ne10_result_t (*ne10_divc_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 865 extern ne10_result_t ne10_divc_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 866 extern ne10_result_t ne10_divc_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 867 extern ne10_result_t ne10_divc_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 868 /**
andrewm@379 869 * Divides the elements of src1 by the elements of src2 and stores the results in the dst.
andrewm@379 870 * This function point could be pointed to one of ne10_div_float_c, ne10_div_float_neon and ne10_div_float_asm.
andrewm@379 871 * @param[out] dst Pointer to the destination array
andrewm@379 872 * @param[in] src1 The first array to use as the input array
andrewm@379 873 * @param[in] src2 The second array to use as the input array
andrewm@379 874 * @param[in] count The number of items in the two input arrays
andrewm@379 875 */
andrewm@379 876 extern ne10_result_t (*ne10_div_float) (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 877 extern ne10_result_t ne10_div_float_c (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 878 extern ne10_result_t ne10_div_float_neon (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count) asm ("ne10_div_float_neon");
andrewm@379 879 extern ne10_result_t ne10_div_float_asm (ne10_float32_t * dst, ne10_float32_t * src1, ne10_float32_t * src2, ne10_uint32_t count);
andrewm@379 880 /**
andrewm@379 881 * Divides the components of a 2D vector with the corresponding components of another.
andrewm@379 882 * This function point could be pointed to one of ne10_vdiv_vec2f_c, ne10_vdiv_vec2f_neon and ne10_vdiv_vec2f_asm.
andrewm@379 883 * @param[out] dst Pointer to the destination array
andrewm@379 884 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 885 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 886 * @param[in] count The number of items in the input arrays
andrewm@379 887 */
andrewm@379 888 extern ne10_result_t (*ne10_vdiv_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 889 extern ne10_result_t ne10_vdiv_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 890 extern ne10_result_t ne10_vdiv_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_vdiv_vec2f_neon");
andrewm@379 891 extern ne10_result_t ne10_vdiv_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 892 /**
andrewm@379 893 * Divides the components of a 3D vector with the corresponding components of another.
andrewm@379 894 * This function point could be pointed to one of ne10_vdiv_vec3f_c, ne10_vdiv_vec3f_neon and ne10_vdiv_vec3f_asm.
andrewm@379 895 * @param[out] dst Pointer to the destination array
andrewm@379 896 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 897 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 898 * @param[in] count The number of items in the input arrays
andrewm@379 899 */
andrewm@379 900 extern ne10_result_t (*ne10_vdiv_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 901 extern ne10_result_t ne10_vdiv_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 902 extern ne10_result_t ne10_vdiv_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_vdiv_vec3f_neon");
andrewm@379 903 extern ne10_result_t ne10_vdiv_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 904 /**
andrewm@379 905 * Divides the components of a 4D vector with the corresponding components of another.
andrewm@379 906 * This function point could be pointed to one of ne10_vdiv_vec4f_c, ne10_vdiv_vec4f_neon and ne10_vdiv_vec4f_asm.
andrewm@379 907 * @param[out] dst Pointer to the destination array
andrewm@379 908 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 909 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 910 * @param[in] count The number of items in the input arrays
andrewm@379 911 */
andrewm@379 912 extern ne10_result_t (*ne10_vdiv_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 913 extern ne10_result_t ne10_vdiv_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 914 extern ne10_result_t ne10_vdiv_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_vdiv_vec4f_neon");
andrewm@379 915 extern ne10_result_t ne10_vdiv_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 916 /** @} */ //end of Vector Div group
andrewm@379 917
andrewm@379 918 /**
andrewm@379 919 * @ingroup groupMaths
andrewm@379 920 */
andrewm@379 921
andrewm@379 922 /**
andrewm@379 923 * @defgroup DIV_MAT Matrix Div
andrewm@379 924 *
andrewm@379 925 * \par
andrewm@379 926 * These functions implement the matrix division operation for float data type.
andrewm@379 927 */
andrewm@379 928
andrewm@379 929 /**
andrewm@379 930 * @addtogroup DIV_MAT
andrewm@379 931 * @{
andrewm@379 932 */
andrewm@379 933
andrewm@379 934 /**
andrewm@379 935 * Divides the components of a 4x4 matrix with the corresponding components of another.
andrewm@379 936 * This function point could be pointed to one of ne10_divmat_4x4f_c, ne10_divmat_4x4f_neon and ne10_divmat_4x4f_asm.
andrewm@379 937 * @param[out] dst Pointer to the destination array
andrewm@379 938 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 939 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 940 * @param[in] count The number of items in the input arrays
andrewm@379 941 */
andrewm@379 942 extern ne10_result_t (*ne10_divmat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 943 extern ne10_result_t ne10_divmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 944 extern ne10_result_t ne10_divmat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count) asm ("ne10_divmat_4x4f_neon");
andrewm@379 945 extern ne10_result_t ne10_divmat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src1, ne10_mat4x4f_t * src2, ne10_uint32_t count);
andrewm@379 946 /**
andrewm@379 947 * Divides the components of a 3x3 matrix with the corresponding components of another.
andrewm@379 948 * This function point could be pointed to one of ne10_divmat_3x3f_c, ne10_divmat_3x3f_neon and ne10_divmat_3x3f_asm.
andrewm@379 949 * @param[out] dst Pointer to the destination array
andrewm@379 950 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 951 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 952 * @param[in] count The number of items in the input arrays
andrewm@379 953 */
andrewm@379 954 extern ne10_result_t (*ne10_divmat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 955 extern ne10_result_t ne10_divmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 956 extern ne10_result_t ne10_divmat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count) asm ("ne10_divmat_3x3f_neon");
andrewm@379 957 extern ne10_result_t ne10_divmat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src1, ne10_mat3x3f_t * src2, ne10_uint32_t count);
andrewm@379 958 /**
andrewm@379 959 * Divides the components of a 2x2 matrix with the corresponding components of another.
andrewm@379 960 * This function point could be pointed to one of ne10_divmat_2x2f_c, ne10_divmat_2x2f_neon and ne10_divmat_2x2f_asm.
andrewm@379 961 * @param[out] dst Pointer to the destination array
andrewm@379 962 * @param[in] src1 Pointer to the nominators' source array
andrewm@379 963 * @param[in] src2 Pointer to the denominators' source array
andrewm@379 964 * @param[in] count The number of items in the input arrays
andrewm@379 965 */
andrewm@379 966 extern ne10_result_t (*ne10_divmat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 967 extern ne10_result_t ne10_divmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 968 extern ne10_result_t ne10_divmat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count) asm ("ne10_divmat_2x2f_neon");
andrewm@379 969 extern ne10_result_t ne10_divmat_2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src1, ne10_mat2x2f_t * src2, ne10_uint32_t count);
andrewm@379 970 /** @} */ //end of Matrix Div group
andrewm@379 971
andrewm@379 972 /**
andrewm@379 973 * @ingroup groupMaths
andrewm@379 974 */
andrewm@379 975
andrewm@379 976 /**
andrewm@379 977 * @defgroup SETC_VEC Vector Setc
andrewm@379 978 *
andrewm@379 979 * \par
andrewm@379 980 * These functions implement vector setc operation for float data type.
andrewm@379 981 */
andrewm@379 982
andrewm@379 983 /**
andrewm@379 984 * @addtogroup SETC_VEC
andrewm@379 985 * @{
andrewm@379 986 */
andrewm@379 987
andrewm@379 988 /**
andrewm@379 989 * Sets the elements of an input array to a constant scalar and stores the results in an output array.
andrewm@379 990 * This function point could be pointed to one of ne10_setc_float_c, ne10_setc_float_neon and ne10_setc_float_asm.
andrewm@379 991 * @param[out] dst Pointer to the destination array
andrewm@379 992 * @param[in] cst The constant scalar to set the input values to
andrewm@379 993 * @param[in] count The number of items in the input array
andrewm@379 994 */
andrewm@379 995 extern ne10_result_t (*ne10_setc_float) (ne10_float32_t * dst, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 996 extern ne10_result_t ne10_setc_float_c (ne10_float32_t * dst, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 997 extern ne10_result_t ne10_setc_float_neon (ne10_float32_t * dst, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 998 extern ne10_result_t ne10_setc_float_asm (ne10_float32_t * dst, const ne10_float32_t cst, ne10_uint32_t count);
andrewm@379 999 /**
andrewm@379 1000 * Sets the components of 2D vectors in an input array to the components of a constant 2D vector and stores the results in an output array.
andrewm@379 1001 * This function point could be pointed to one of ne10_setc_vec2f_c, ne10_setc_vec2f_neon and ne10_setc_vec2f_asm.
andrewm@379 1002 * @param[out] dst Pointer to the destination array
andrewm@379 1003 * @param[in] cst Pointer to the 2D vector to set the input values to
andrewm@379 1004 * @param[in] count The number of items in the input array
andrewm@379 1005 */
andrewm@379 1006 extern ne10_result_t (*ne10_setc_vec2f) (ne10_vec2f_t * dst, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 1007 extern ne10_result_t ne10_setc_vec2f_c (ne10_vec2f_t * dst, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 1008 extern ne10_result_t ne10_setc_vec2f_neon (ne10_vec2f_t * dst, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 1009 extern ne10_result_t ne10_setc_vec2f_asm (ne10_vec2f_t * dst, const ne10_vec2f_t * cst, ne10_uint32_t count);
andrewm@379 1010 /**
andrewm@379 1011 * Sets the components of 3D vectors in an input array to the components of a constant 3D vector and stores the results in an output array.
andrewm@379 1012 * This function point could be pointed to one of ne10_setc_vec3f_c, ne10_setc_vec3f_neon and ne10_setc_vec3f_asm.
andrewm@379 1013 * @param[out] dst Pointer to the destination array
andrewm@379 1014 * @param[in] cst Pointer to the 3D vector to set the input values to
andrewm@379 1015 * @param[in] count The number of items in the input array
andrewm@379 1016 */
andrewm@379 1017 extern ne10_result_t (*ne10_setc_vec3f) (ne10_vec3f_t * dst, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 1018 extern ne10_result_t ne10_setc_vec3f_c (ne10_vec3f_t * dst, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 1019 extern ne10_result_t ne10_setc_vec3f_neon (ne10_vec3f_t * dst, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 1020 extern ne10_result_t ne10_setc_vec3f_asm (ne10_vec3f_t * dst, const ne10_vec3f_t * cst, ne10_uint32_t count);
andrewm@379 1021 /**
andrewm@379 1022 * Sets the components of 4D vectors in an input array to the components of a constant 3D vector and stores the results in an output array.
andrewm@379 1023 * This function point could be pointed to one of ne10_setc_vec4f_c, ne10_setc_vec4f_neon and ne10_setc_vec4f_asm.
andrewm@379 1024 * @param[out] dst Pointer to the destination array
andrewm@379 1025 * @param[in] cst Pointer to the 4D vector to set the input values to
andrewm@379 1026 * @param[in] count The number of items in the input array
andrewm@379 1027 */
andrewm@379 1028 extern ne10_result_t (*ne10_setc_vec4f) (ne10_vec4f_t * dst, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 1029 extern ne10_result_t ne10_setc_vec4f_c (ne10_vec4f_t * dst, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 1030 extern ne10_result_t ne10_setc_vec4f_neon (ne10_vec4f_t * dst, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 1031 extern ne10_result_t ne10_setc_vec4f_asm (ne10_vec4f_t * dst, const ne10_vec4f_t * cst, ne10_uint32_t count);
andrewm@379 1032 /** @} */ //end of Vector Setc group
andrewm@379 1033
andrewm@379 1034 /**
andrewm@379 1035 * @ingroup groupMaths
andrewm@379 1036 */
andrewm@379 1037
andrewm@379 1038 /**
andrewm@379 1039 * @defgroup LEN_VEC Vector Len
andrewm@379 1040 *
andrewm@379 1041 * \par
andrewm@379 1042 * These functions implement vector len operation for float data type.
andrewm@379 1043 */
andrewm@379 1044
andrewm@379 1045 /**
andrewm@379 1046 * @addtogroup LEN_VEC
andrewm@379 1047 * @{
andrewm@379 1048 */
andrewm@379 1049 /**
andrewm@379 1050 * Returns length of 2D vectors in corresponding elements of the output array.
andrewm@379 1051 * This function point could be pointed to one of ne10_len_vec2f_c, ne10_len_vec2f_neon and ne10_len_vec2f_asm.
andrewm@379 1052 * @param[out] dst Pointer to the destination array
andrewm@379 1053 * @param[in] src Pointer to the source array
andrewm@379 1054 * @param[in] count The number of items in the input array
andrewm@379 1055 */
andrewm@379 1056 extern ne10_result_t (*ne10_len_vec2f) (ne10_float32_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1057 extern ne10_result_t ne10_len_vec2f_c (ne10_float32_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1058 extern ne10_result_t ne10_len_vec2f_neon (ne10_float32_t * dst, ne10_vec2f_t * src, ne10_uint32_t count) asm ("ne10_len_vec2f_neon");
andrewm@379 1059 extern ne10_result_t ne10_len_vec2f_asm (ne10_float32_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1060 /**
andrewm@379 1061 * Returns length of 3D vectors in corresponding elements of the output array.
andrewm@379 1062 * This function point could be pointed to one of ne10_len_vec3f_c, ne10_len_vec3f_neon and ne10_len_vec3f_asm.
andrewm@379 1063 * @param[out] dst Pointer to the destination array
andrewm@379 1064 * @param[in] src Pointer to the source array
andrewm@379 1065 * @param[in] count The number of items in the input array
andrewm@379 1066 */
andrewm@379 1067 extern ne10_result_t (*ne10_len_vec3f) (ne10_float32_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1068 extern ne10_result_t ne10_len_vec3f_c (ne10_float32_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1069 extern ne10_result_t ne10_len_vec3f_neon (ne10_float32_t * dst, ne10_vec3f_t * src, ne10_uint32_t count) asm ("ne10_len_vec3f_neon");
andrewm@379 1070 extern ne10_result_t ne10_len_vec3f_asm (ne10_float32_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1071 /**
andrewm@379 1072 * Returns length of 4D vectors in corresponding elements of the output array.
andrewm@379 1073 * This function point could be pointed to one of ne10_len_vec4f_c, ne10_len_vec4f_neon and ne10_len_vec4f_asm.
andrewm@379 1074 * @param[out] dst Pointer to the destination array
andrewm@379 1075 * @param[in] src Pointer to the source array
andrewm@379 1076 * @param[in] count The number of items in the input array
andrewm@379 1077 */
andrewm@379 1078 extern ne10_result_t (*ne10_len_vec4f) (ne10_float32_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1079 extern ne10_result_t ne10_len_vec4f_c (ne10_float32_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1080 extern ne10_result_t ne10_len_vec4f_neon (ne10_float32_t * dst, ne10_vec4f_t * src, ne10_uint32_t count) asm ("ne10_len_vec4f_neon");
andrewm@379 1081 extern ne10_result_t ne10_len_vec4f_asm (ne10_float32_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1082 /** @} */ //end of Vector Len group
andrewm@379 1083
andrewm@379 1084
andrewm@379 1085 /**
andrewm@379 1086 * @ingroup groupMaths
andrewm@379 1087 */
andrewm@379 1088
andrewm@379 1089 /**
andrewm@379 1090 * @defgroup NORM_VEC Vector Normalize
andrewm@379 1091 *
andrewm@379 1092 * \par
andrewm@379 1093 * These functions implement vector normalize operation for float data type.
andrewm@379 1094 */
andrewm@379 1095
andrewm@379 1096 /**
andrewm@379 1097 * @addtogroup NORM_VEC
andrewm@379 1098 * @{
andrewm@379 1099 */
andrewm@379 1100 /**
andrewm@379 1101 * Normalizes 2D vectors of the input array and stores them in the corresponding elements of the output array.
andrewm@379 1102 * This function point could be pointed to one of ne10_normalize_vec2f_c, ne10_normalize_vec2f_neon and ne10_normalize_vec2f_asm.
andrewm@379 1103 * @param[out] dst Pointer to the destination array
andrewm@379 1104 * @param[in] src Pointer to the source array
andrewm@379 1105 * @param[in] count The number of items in the input array
andrewm@379 1106 */
andrewm@379 1107 extern ne10_result_t (*ne10_normalize_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1108 extern ne10_result_t ne10_normalize_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1109 extern ne10_result_t ne10_normalize_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count) asm ("ne10_normalize_vec2f_neon");
andrewm@379 1110 extern ne10_result_t ne10_normalize_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1111 /**
andrewm@379 1112 * Normalizes 3D vectors of the input array and stores them in the corresponding elements of the output array.
andrewm@379 1113 * This function point could be pointed to one of ne10_normalize_vec3f_c, ne10_normalize_vec3f_neon and ne10_normalize_vec3f_asm.
andrewm@379 1114 * @param[out] dst Pointer to the destination array
andrewm@379 1115 * @param[in] src Pointer to the source array
andrewm@379 1116 * @param[in] count The number of items in the input array
andrewm@379 1117 */
andrewm@379 1118 extern ne10_result_t (*ne10_normalize_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1119 extern ne10_result_t ne10_normalize_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1120 extern ne10_result_t ne10_normalize_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count) asm ("ne10_normalize_vec3f_neon");
andrewm@379 1121 extern ne10_result_t ne10_normalize_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1122 /**
andrewm@379 1123 * Normalizes 4D vectors of the input array and stores them in the corresponding elements of the output array.
andrewm@379 1124 * This function point could be pointed to one of ne10_normalize_vec4f_c, ne10_normalize_vec4f_neon and ne10_normalize_vec4f_asm.
andrewm@379 1125 * @param[out] dst Pointer to the destination array
andrewm@379 1126 * @param[in] src Pointer to the source array
andrewm@379 1127 * @param[in] count The number of items in the input array
andrewm@379 1128 */
andrewm@379 1129 extern ne10_result_t (*ne10_normalize_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1130 extern ne10_result_t ne10_normalize_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1131 extern ne10_result_t ne10_normalize_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count) asm ("ne10_normalize_vec4f_neon");
andrewm@379 1132 extern ne10_result_t ne10_normalize_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1133 /** @} */ //end of Vector Normalize group
andrewm@379 1134
andrewm@379 1135
andrewm@379 1136 /**
andrewm@379 1137 * @ingroup groupMaths
andrewm@379 1138 */
andrewm@379 1139
andrewm@379 1140 /**
andrewm@379 1141 * @defgroup ABS_VEC Vector Abs
andrewm@379 1142 *
andrewm@379 1143 * \par
andrewm@379 1144 * These functions implement vector abs operation for float data type.
andrewm@379 1145 */
andrewm@379 1146
andrewm@379 1147 /**
andrewm@379 1148 * @addtogroup ABS_VEC
andrewm@379 1149 * @{
andrewm@379 1150 */
andrewm@379 1151
andrewm@379 1152 /**
andrewm@379 1153 * Calculates the absolute value of each element in the source array and stores the result in the corresponding entry of the destination array.
andrewm@379 1154 * This function point could be pointed to one of ne10_abs_float_c, ne10_abs_float_neon and ne10_abs_float_asm.
andrewm@379 1155 * @param[out] dst Pointer to the destination array
andrewm@379 1156 * @param[in] src Pointer to the source array
andrewm@379 1157 * @param[in] count The number of items in the input array
andrewm@379 1158 */
andrewm@379 1159 extern ne10_result_t (*ne10_abs_float) (ne10_float32_t * dst, ne10_float32_t * src, ne10_uint32_t count);
andrewm@379 1160 extern ne10_result_t ne10_abs_float_c (ne10_float32_t * dst, ne10_float32_t * src, ne10_uint32_t count);
andrewm@379 1161 extern ne10_result_t ne10_abs_float_neon (ne10_float32_t * dst, ne10_float32_t * src, ne10_uint32_t count) asm ("ne10_abs_float_neon");
andrewm@379 1162 extern ne10_result_t ne10_abs_float_asm (ne10_float32_t * dst, ne10_float32_t * src, ne10_uint32_t count);
andrewm@379 1163 /**
andrewm@379 1164 * Generates a 2D vector from the absolute values of each of the components of an input vector.
andrewm@379 1165 * This function point could be pointed to one of ne10_abs_vec2f_c, ne10_abs_vec2f_neon and ne10_abs_vec2f_asm.
andrewm@379 1166 * @param[out] dst Pointer to the destination array
andrewm@379 1167 * @param[in] src Pointer to the source array
andrewm@379 1168 * @param[in] count The number of items in the input array
andrewm@379 1169 */
andrewm@379 1170 extern ne10_result_t (*ne10_abs_vec2f) (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1171 extern ne10_result_t ne10_abs_vec2f_c (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1172 extern ne10_result_t ne10_abs_vec2f_neon (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count) asm ("ne10_abs_vec2f_neon");
andrewm@379 1173 extern ne10_result_t ne10_abs_vec2f_asm (ne10_vec2f_t * dst, ne10_vec2f_t * src, ne10_uint32_t count);
andrewm@379 1174 /**
andrewm@379 1175 * Generates a 3D vector from the absolute values of each of the components of an input vector.
andrewm@379 1176 * This function point could be pointed to one of ne10_abs_vec3f_c, ne10_abs_vec3f_neon and ne10_abs_vec3f_asm.
andrewm@379 1177 * @param[out] dst Pointer to the destination array
andrewm@379 1178 * @param[in] src Pointer to the source array
andrewm@379 1179 * @param[in] count The number of items in the input array
andrewm@379 1180 */
andrewm@379 1181 extern ne10_result_t (*ne10_abs_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1182 extern ne10_result_t ne10_abs_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1183 extern ne10_result_t ne10_abs_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count) asm ("ne10_abs_vec3f_neon");
andrewm@379 1184 extern ne10_result_t ne10_abs_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src, ne10_uint32_t count);
andrewm@379 1185 /**
andrewm@379 1186 * Generates a 4D vector from the absolute values of each of the components of an input vector.
andrewm@379 1187 * This function point could be pointed to one of ne10_abs_vec4f_c, ne10_abs_vec4f_neon and ne10_abs_vec4f_asm.
andrewm@379 1188 * @param[out] dst Pointer to the destination array
andrewm@379 1189 * @param[in] src Pointer to the source array
andrewm@379 1190 * @param[in] count The number of items in the input array
andrewm@379 1191 */
andrewm@379 1192 extern ne10_result_t (*ne10_abs_vec4f) (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1193 extern ne10_result_t ne10_abs_vec4f_c (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1194 extern ne10_result_t ne10_abs_vec4f_neon (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count) asm ("ne10_abs_vec4f_neon");
andrewm@379 1195 extern ne10_result_t ne10_abs_vec4f_asm (ne10_vec4f_t * dst, ne10_vec4f_t * src, ne10_uint32_t count);
andrewm@379 1196 /** @} */ //end of Vector Abs group
andrewm@379 1197
andrewm@379 1198 /**
andrewm@379 1199 * @ingroup groupMaths
andrewm@379 1200 */
andrewm@379 1201
andrewm@379 1202 /**
andrewm@379 1203 * @defgroup DOT_VEC Vector Dot
andrewm@379 1204 *
andrewm@379 1205 * \par
andrewm@379 1206 * These functions implement vector dot operation for float data type.
andrewm@379 1207 */
andrewm@379 1208
andrewm@379 1209 /**
andrewm@379 1210 * @addtogroup DOT_VEC
andrewm@379 1211 * @{
andrewm@379 1212 */
andrewm@379 1213 /**
andrewm@379 1214 * Dot product of two 2D vectors.
andrewm@379 1215 * This function point could be pointed to one of ne10_dot_vec2f_c, ne10_dot_vec2f_neon and ne10_dot_vec2f_asm.
andrewm@379 1216 * @param[out] dst Pointer to the destination array
andrewm@379 1217 * @param[in] src1 Pointer to the first source array
andrewm@379 1218 * @param[in] src2 Pointer to the second source array
andrewm@379 1219 * @param[in] count The number of items in the input arrays
andrewm@379 1220 */
andrewm@379 1221 extern ne10_result_t (*ne10_dot_vec2f) (ne10_float32_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 1222 extern ne10_result_t ne10_dot_vec2f_c (ne10_float32_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 1223 extern ne10_result_t ne10_dot_vec2f_neon (ne10_float32_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count) asm ("ne10_dot_vec2f_neon");
andrewm@379 1224 extern ne10_result_t ne10_dot_vec2f_asm (ne10_float32_t * dst, ne10_vec2f_t * src1, ne10_vec2f_t * src2, ne10_uint32_t count);
andrewm@379 1225 /**
andrewm@379 1226 * Dot product of two 3D vectors.
andrewm@379 1227 * This function point could be pointed to one of ne10_dot_vec3f_c, ne10_dot_vec3f_neon and ne10_dot_vec3f_asm.
andrewm@379 1228 * @param[out] dst Pointer to the destination array
andrewm@379 1229 * @param[in] src1 Pointer to the first source array
andrewm@379 1230 * @param[in] src2 Pointer to the second source array
andrewm@379 1231 * @param[in] count The number of items in the input arrays
andrewm@379 1232 */
andrewm@379 1233 extern ne10_result_t (*ne10_dot_vec3f) (ne10_float32_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1234 extern ne10_result_t ne10_dot_vec3f_c (ne10_float32_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1235 extern ne10_result_t ne10_dot_vec3f_neon (ne10_float32_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_dot_vec3f_neon");
andrewm@379 1236 extern ne10_result_t ne10_dot_vec3f_asm (ne10_float32_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1237 /**
andrewm@379 1238 * Dot product of two 4D vectors.
andrewm@379 1239 * This function point could be pointed to one of ne10_dot_vec4f_c, ne10_dot_vec4f_neon and ne10_dot_vec4f_asm.
andrewm@379 1240 * @param[out] dst Pointer to the destination array
andrewm@379 1241 * @param[in] src1 Pointer to the first source array
andrewm@379 1242 * @param[in] src2 Pointer to the second source array
andrewm@379 1243 * @param[in] count The number of items in the input arrays
andrewm@379 1244 */
andrewm@379 1245 extern ne10_result_t (*ne10_dot_vec4f) (ne10_float32_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 1246 extern ne10_result_t ne10_dot_vec4f_c (ne10_float32_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 1247 extern ne10_result_t ne10_dot_vec4f_neon (ne10_float32_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count) asm ("ne10_dot_vec4f_neon");
andrewm@379 1248 extern ne10_result_t ne10_dot_vec4f_asm (ne10_float32_t * dst, ne10_vec4f_t * src1, ne10_vec4f_t * src2, ne10_uint32_t count);
andrewm@379 1249 /** @} */ //end of Vector Dot group
andrewm@379 1250
andrewm@379 1251
andrewm@379 1252 /**
andrewm@379 1253 * @ingroup groupMaths
andrewm@379 1254 */
andrewm@379 1255
andrewm@379 1256 /**
andrewm@379 1257 * @defgroup CROSS_VEC Vector Cross
andrewm@379 1258 *
andrewm@379 1259 * \par
andrewm@379 1260 * These functions implement vector cross operation for float data type.
andrewm@379 1261 */
andrewm@379 1262
andrewm@379 1263 /**
andrewm@379 1264 * @addtogroup CROSS_VEC
andrewm@379 1265 * @{
andrewm@379 1266 */
andrewm@379 1267
andrewm@379 1268 /**
andrewm@379 1269 * Performs a cross product operation on the two input vectors.
andrewm@379 1270 * This function point could be pointed to one of ne10_cross_vec3f_c, ne10_cross_vec3f_neon and ne10_cross_vec3f_asm.
andrewm@379 1271 * @param[out] dst Pointer to the destination array
andrewm@379 1272 * @param[in] src1 Pointer to the first source array
andrewm@379 1273 * @param[in] src2 Pointer to the second source array
andrewm@379 1274 * @param[in] count The number of items in the input arrays
andrewm@379 1275 */
andrewm@379 1276 extern ne10_result_t (*ne10_cross_vec3f) (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1277 extern ne10_result_t ne10_cross_vec3f_c (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1278 extern ne10_result_t ne10_cross_vec3f_neon (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count) asm ("ne10_cross_vec3f_neon");
andrewm@379 1279 extern ne10_result_t ne10_cross_vec3f_asm (ne10_vec3f_t * dst, ne10_vec3f_t * src1, ne10_vec3f_t * src2, ne10_uint32_t count);
andrewm@379 1280 /** @} */ //end of Vector Cross group
andrewm@379 1281
andrewm@379 1282 /**
andrewm@379 1283 * @ingroup groupMaths
andrewm@379 1284 */
andrewm@379 1285
andrewm@379 1286 /**
andrewm@379 1287 * @defgroup DET_MAT Matrix Determinant
andrewm@379 1288 *
andrewm@379 1289 * \par
andrewm@379 1290 * These functions implement matrix determinant operation for float data type.
andrewm@379 1291 */
andrewm@379 1292
andrewm@379 1293 /**
andrewm@379 1294 * @addtogroup DET_MAT
andrewm@379 1295 * @{
andrewm@379 1296 */
andrewm@379 1297
andrewm@379 1298 /**
andrewm@379 1299 * Calculate the determinant of a 4x4 matrix.
andrewm@379 1300 * This function point could be pointed to one of ne10_detmat_4x4f_c, ne10_detmat_4x4f_neon and ne10_detmat_4x4f_asm.
andrewm@379 1301 * @param[out] dst Pointer to the destination array
andrewm@379 1302 * @param[in] src Pointer to the source array
andrewm@379 1303 * @param[in] count The number of items in the input array
andrewm@379 1304 */
andrewm@379 1305 extern ne10_result_t (*ne10_detmat_4x4f) (ne10_float32_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1306 extern ne10_result_t ne10_detmat_4x4f_c (ne10_float32_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1307 extern ne10_result_t ne10_detmat_4x4f_neon (ne10_float32_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count) asm ("ne10_detmat_4x4f_neon");
andrewm@379 1308 extern ne10_result_t ne10_detmat_4x4f_asm (ne10_float32_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1309 /**
andrewm@379 1310 * Calculate the determinant of a 3x3 matrix.
andrewm@379 1311 * This function point could be pointed to one of ne10_detmat_3x3f_c, ne10_detmat_3x3f_neon and ne10_detmat_3x3f_asm.
andrewm@379 1312 * @param[out] dst Pointer to the destination array
andrewm@379 1313 * @param[in] src Pointer to the source array
andrewm@379 1314 * @param[in] count The number of items in the input array
andrewm@379 1315 */
andrewm@379 1316 extern ne10_result_t (*ne10_detmat_3x3f) (ne10_float32_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1317 extern ne10_result_t ne10_detmat_3x3f_c (ne10_float32_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1318 extern ne10_result_t ne10_detmat_3x3f_neon (ne10_float32_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count) asm ("ne10_detmat_3x3f_neon");
andrewm@379 1319 extern ne10_result_t ne10_detmat_3x3f_asm (ne10_float32_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1320 /**
andrewm@379 1321 * Calculate the determinant of a 2x2 matrix.
andrewm@379 1322 * This function point could be pointed to one of ne10_detmat_2x2f_c, ne10_detmat_2x2f_neon and ne10_detmat_2x2f_asm.
andrewm@379 1323 * @param[out] dst Pointer to the destination array
andrewm@379 1324 * @param[in] src Pointer to the source array
andrewm@379 1325 * @param[in] count The number of items in the input array
andrewm@379 1326 */
andrewm@379 1327 extern ne10_result_t (*ne10_detmat_2x2f) (ne10_float32_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1328 extern ne10_result_t ne10_detmat_2x2f_c (ne10_float32_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1329 extern ne10_result_t ne10_detmat_2x2f_neon (ne10_float32_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count) asm ("ne10_detmat_2x2f_neon");
andrewm@379 1330 extern ne10_result_t ne10_detmat_2x2f_asm (ne10_float32_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1331 /** @} */ //end of Matrix Determinant group
andrewm@379 1332
andrewm@379 1333 /**
andrewm@379 1334 * @ingroup groupMaths
andrewm@379 1335 */
andrewm@379 1336
andrewm@379 1337 /**
andrewm@379 1338 * @defgroup INV_MAT Matrix Invertible
andrewm@379 1339 *
andrewm@379 1340 * \par
andrewm@379 1341 * These functions implement matrix invertible operation for float data type.
andrewm@379 1342 */
andrewm@379 1343
andrewm@379 1344 /**
andrewm@379 1345 * @addtogroup INV_MAT
andrewm@379 1346 * @{
andrewm@379 1347 */
andrewm@379 1348 /**
andrewm@379 1349 * Calculate the invertible matrix of a 4x4 matrix.
andrewm@379 1350 * This function point could be pointed to one of ne10_invmat_4x4f_c, ne10_invmat_4x4f_neon and ne10_invmat_4x4f_asm.
andrewm@379 1351 * @param[out] dst Pointer to the destination array
andrewm@379 1352 * @param[in] src Pointer to the source array
andrewm@379 1353 * @param[in] count The number of items in the input array
andrewm@379 1354 */
andrewm@379 1355 extern ne10_result_t (*ne10_invmat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1356 extern ne10_result_t ne10_invmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1357 extern ne10_result_t ne10_invmat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count) asm ("ne10_invmat_4x4f_neon");
andrewm@379 1358 extern ne10_result_t ne10_invmat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1359 /**
andrewm@379 1360 * Calculate the invertible matrix of a 3x3 matrix.
andrewm@379 1361 * This function point could be pointed to one of ne10_invmat_3x3f_c, ne10_invmat_3x3f_neon and ne10_invmat_3x3f_asm.
andrewm@379 1362 * @param[out] dst Pointer to the destination array
andrewm@379 1363 * @param[in] src Pointer to the source array
andrewm@379 1364 * @param[in] count The number of items in the input array
andrewm@379 1365 */
andrewm@379 1366 extern ne10_result_t (*ne10_invmat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1367 extern ne10_result_t ne10_invmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1368 extern ne10_result_t ne10_invmat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count) asm ("ne10_invmat_3x3f_neon");
andrewm@379 1369 extern ne10_result_t ne10_invmat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1370 /**
andrewm@379 1371 * Calculate the invertible matrix of a 2x2 matrix.
andrewm@379 1372 * This function point could be pointed to one of ne10_invmat_2x2f_c, ne10_invmat_2x2f_neon and ne10_invmat_2x2f_asm.
andrewm@379 1373 * @param[out] dst Pointer to the destination array
andrewm@379 1374 * @param[in] src Pointer to the source array
andrewm@379 1375 * @param[in] count The number of items in the input array
andrewm@379 1376 */
andrewm@379 1377 extern ne10_result_t (*ne10_invmat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1378 extern ne10_result_t ne10_invmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1379 extern ne10_result_t ne10_invmat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count) asm ("ne10_invmat_2x2f_neon");
andrewm@379 1380 extern ne10_result_t ne10_invmat_2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1381 /** @} */ //end of Matrix Invertible group
andrewm@379 1382
andrewm@379 1383 /**
andrewm@379 1384 * @ingroup groupMaths
andrewm@379 1385 */
andrewm@379 1386
andrewm@379 1387 /**
andrewm@379 1388 * @defgroup TRANS_MAT Matrix Transpose
andrewm@379 1389 *
andrewm@379 1390 * \par
andrewm@379 1391 * These functions implement matrix transpose operation for float data type.
andrewm@379 1392 */
andrewm@379 1393
andrewm@379 1394 /**
andrewm@379 1395 * @addtogroup TRANS_MAT
andrewm@379 1396 * @{
andrewm@379 1397 */
andrewm@379 1398 /**
andrewm@379 1399 * Calculate the transpose matrix of a 4x4 matrix.
andrewm@379 1400 * This function point could be pointed to one of ne10_transmat_4x4f_c, ne10_transmat_4x4f_neon and ne10_transmat_4x4f_asm.
andrewm@379 1401 * @param[out] dst Pointer to the destination array
andrewm@379 1402 * @param[in] src Pointer to the source array
andrewm@379 1403 * @param[in] count The number of items in the input array
andrewm@379 1404 */
andrewm@379 1405 extern ne10_result_t (*ne10_transmat_4x4f) (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1406 extern ne10_result_t ne10_transmat_4x4f_c (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1407 extern ne10_result_t ne10_transmat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count) asm ("ne10_transmat_4x4f_neon");
andrewm@379 1408 extern ne10_result_t ne10_transmat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_mat4x4f_t * src, ne10_uint32_t count);
andrewm@379 1409 /**
andrewm@379 1410 * Calculate the transpose matrix of a 4x4 matrix.
andrewm@379 1411 * This function point could be pointed to one of ne10_transmat_4x4f_c, ne10_transmat_4x4f_neon and ne10_transmat_4x4f_asm.
andrewm@379 1412 * @param[out] dst Pointer to the destination array
andrewm@379 1413 * @param[in] src Pointer to the source array
andrewm@379 1414 * @param[in] count The number of items in the input array
andrewm@379 1415 */
andrewm@379 1416 extern ne10_result_t (*ne10_transmat_3x3f) (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1417 extern ne10_result_t ne10_transmat_3x3f_c (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1418 extern ne10_result_t ne10_transmat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count) asm ("ne10_transmat_3x3f_neon");
andrewm@379 1419 extern ne10_result_t ne10_transmat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_mat3x3f_t * src, ne10_uint32_t count);
andrewm@379 1420 /**
andrewm@379 1421 * Calculate the transpose matrix of a 3x3 matrix.
andrewm@379 1422 * This function point could be pointed to one of ne10_transmat_3x3f_c, ne10_transmat_3x3f_neon and ne10_transmat_3x3f_asm.
andrewm@379 1423 * @param[out] dst Pointer to the destination array
andrewm@379 1424 * @param[in] src Pointer to the source array
andrewm@379 1425 * @param[in] count The number of items in the input array
andrewm@379 1426 */
andrewm@379 1427 extern ne10_result_t (*ne10_transmat_2x2f) (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1428 extern ne10_result_t ne10_transmat_2x2f_c (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1429 extern ne10_result_t ne10_transmat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count) asm ("ne10_transmat_2x2f_neon");
andrewm@379 1430 extern ne10_result_t ne10_trans_mat2x2f_asm (ne10_mat2x2f_t * dst, ne10_mat2x2f_t * src, ne10_uint32_t count);
andrewm@379 1431 /** @} */ //end of Matrix Transpose group
andrewm@379 1432
andrewm@379 1433 /**
andrewm@379 1434 * @ingroup groupMaths
andrewm@379 1435 */
andrewm@379 1436
andrewm@379 1437 /**
andrewm@379 1438 * @defgroup IDENTITY_MAT Matrix Identity
andrewm@379 1439 *
andrewm@379 1440 * \par
andrewm@379 1441 * These functions implement matrix identity operation for float data type.
andrewm@379 1442 */
andrewm@379 1443
andrewm@379 1444 /**
andrewm@379 1445 * @addtogroup IDENTITY_MAT
andrewm@379 1446 * @{
andrewm@379 1447 */
andrewm@379 1448 /**
andrewm@379 1449 * Set the identity matrix of a 2x2 matrix.
andrewm@379 1450 * This function point could be pointed to one of ne10_identitymat_2x2f_c, ne10_identitymat_2x2f_neon and ne10_identitymat_2x2f_asm.
andrewm@379 1451 * @param[out] dst Pointer to the destination array
andrewm@379 1452 * @param[in] count The number of items in the input array
andrewm@379 1453 */
andrewm@379 1454 extern ne10_result_t (*ne10_identitymat_4x4f) (ne10_mat4x4f_t * dst, ne10_uint32_t count);
andrewm@379 1455 extern ne10_result_t ne10_identitymat_4x4f_c (ne10_mat4x4f_t * dst, ne10_uint32_t count);
andrewm@379 1456 extern ne10_result_t ne10_identitymat_4x4f_neon (ne10_mat4x4f_t * dst, ne10_uint32_t count) asm ("ne10_identitymat_4x4f_neon");
andrewm@379 1457 extern ne10_result_t ne10_identitymat_4x4f_asm (ne10_mat4x4f_t * dst, ne10_uint32_t count);
andrewm@379 1458 /**
andrewm@379 1459 * Set the identity matrix of a 3x3 matrix.
andrewm@379 1460 * This function point could be pointed to one of ne10_identitymat_3x3f_c, ne10_identitymat_3x3f_neon and ne10_identitymat_3x3f_asm.
andrewm@379 1461 * @param[out] dst Pointer to the destination array
andrewm@379 1462 * @param[in] count The number of items in the input array
andrewm@379 1463 */
andrewm@379 1464 extern ne10_result_t (*ne10_identitymat_3x3f) (ne10_mat3x3f_t * dst, ne10_uint32_t count);
andrewm@379 1465 extern ne10_result_t ne10_identitymat_3x3f_c (ne10_mat3x3f_t * dst, ne10_uint32_t count);
andrewm@379 1466 extern ne10_result_t ne10_identitymat_3x3f_neon (ne10_mat3x3f_t * dst, ne10_uint32_t count) asm ("ne10_identitymat_3x3f_neon");
andrewm@379 1467 extern ne10_result_t ne10_identitymat_3x3f_asm (ne10_mat3x3f_t * dst, ne10_uint32_t count);
andrewm@379 1468 /**
andrewm@379 1469 * Set the identity matrix of a 2x2 matrix.
andrewm@379 1470 * This function point could be pointed to one of ne10_identitymat_2x2f_c, ne10_identitymat_2x2f_neon and ne10_identitymat_2x2f_asm.
andrewm@379 1471 * @param[out] dst Pointer to the destination array
andrewm@379 1472 * @param[in] count The number of items in the input array
andrewm@379 1473 */
andrewm@379 1474 extern ne10_result_t (*ne10_identitymat_2x2f) (ne10_mat2x2f_t * dst, ne10_uint32_t count);
andrewm@379 1475 extern ne10_result_t ne10_identitymat_2x2f_c (ne10_mat2x2f_t * dst, ne10_uint32_t count);
andrewm@379 1476 extern ne10_result_t ne10_identitymat_2x2f_neon (ne10_mat2x2f_t * dst, ne10_uint32_t count) asm ("ne10_identitymat_2x2f_neon");
andrewm@379 1477 extern ne10_result_t ne10_identity_mat2x2f_asm (ne10_mat2x2f_t * dst, ne10_uint32_t count);
andrewm@379 1478 /** @} */ //end of Matrix Identity group
andrewm@379 1479
andrewm@379 1480 #ifdef __cplusplus
andrewm@379 1481 }
andrewm@379 1482 #endif
andrewm@379 1483
andrewm@379 1484 #endif