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