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