Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "arm_math.h"
00026
00057 arm_status arm_mat_add_f32(
00058 const arm_matrix_instance_f32 * pSrcA,
00059 const arm_matrix_instance_f32 * pSrcB,
00060 arm_matrix_instance_f32 * pDst)
00061 {
00062 float32_t *pIn1 = pSrcA->pData;
00063 float32_t *pIn2 = pSrcB->pData;
00064 float32_t *pOut = pDst->pData;
00065 float32_t inA1, inA2, inB1, inB2, out1, out2;
00066 uint32_t numSamples;
00067 uint32_t blkCnt;
00068 arm_status status;
00069
00070 #ifdef ARM_MATH_MATRIX_CHECK
00071
00072 if((pSrcA->numRows != pSrcB->numRows) ||
00073 (pSrcA->numCols != pSrcB->numCols) ||
00074 (pSrcA->numRows != pDst->numRows) || (pSrcA->numCols != pDst->numCols))
00075 {
00076
00077 status = ARM_MATH_SIZE_MISMATCH;
00078 }
00079 else
00080 #endif
00081 {
00082
00083
00084 numSamples = (uint32_t) pSrcA->numRows * pSrcA->numCols;
00085
00086
00087 blkCnt = numSamples >> 3u;
00088
00089
00090
00091 while(blkCnt > 0u)
00092 {
00093
00094
00095
00096 inA1 = pIn1[0];
00097
00098
00099 inB1 = pIn2[0];
00100
00101
00102 inA2 = pIn1[1];
00103
00104
00105 out1 = inA1 + inB1;
00106
00107
00108 inB2 = pIn2[1];
00109
00110
00111 inA1 = pIn1[2];
00112
00113
00114 out2 = inA2 + inB2;
00115
00116
00117 inB1 = pIn2[2];
00118
00119
00120 pOut[0] = out1;
00121 pOut[1] = out2;
00122
00123
00124 inA2 = pIn1[3];
00125
00126
00127 inB2 = pIn2[3];
00128
00129
00130 out1 = inA1 + inB1;
00131
00132
00133 inA1 = pIn1[4];
00134
00135
00136 out2 = inA2 + inB2;
00137
00138
00139 inB1 = pIn2[4];
00140
00141
00142 pOut[2] = out1;
00143
00144
00145 inA2 = pIn1[5];
00146
00147
00148 out1 = inA1 + inB1;
00149
00150
00151 inB2 = pIn2[5];
00152
00153
00154 pOut[3] = out2;
00155
00156
00157 inA1 = pIn1[6];
00158
00159
00160 out2 = inA2 + inB2;
00161
00162
00163 inA2 = pIn1[7];
00164
00165
00166 inB1 = pIn2[6];
00167 inB2 = pIn2[7];
00168
00169
00170 pOut[4] = out1;
00171
00172
00173 out1 = inA1 + inB1;
00174
00175
00176 pOut[5] = out2;
00177
00178
00179 out2 = inA2 + inB2;
00180
00181
00182 pOut[6] = out1;
00183
00184
00185 pIn1 += 8u;
00186
00187 pOut[7] = out2;
00188
00189
00190 pIn2 += 8u;
00191
00192
00193 pOut += 8u;
00194
00195
00196 blkCnt--;
00197 }
00198
00199
00200
00201 blkCnt = numSamples % 0x8u;
00202
00203 while(blkCnt > 0u)
00204 {
00205
00206
00207 *pOut++ = (*pIn1++) + (*pIn2++);
00208
00209
00210 blkCnt--;
00211 }
00212
00213
00214 status = ARM_MATH_SUCCESS;
00215
00216 }
00217
00218
00219 return (status);
00220 }
00221