Subversion Repositories dashGPS

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#include "ref.h"
2
 
3
arm_status ref_mat_mult_f32(
4
  const arm_matrix_instance_f32 * pSrcA,
5
  const arm_matrix_instance_f32 * pSrcB,
6
  arm_matrix_instance_f32 * pDst)
7
{
8
        uint32_t r,c,i,outR,outC,innerSize;
9
        float32_t sum;
10
 
11
        outR = pSrcA->numRows;
12
        outC = pSrcB->numCols;
13
        innerSize = pSrcA->numCols;
14
 
15
        for(r=0;r<outR;r++)
16
        {
17
                for(c=0;c<outC;c++)
18
                {
19
                        sum = 0;
20
 
21
                        for(i=0;i<innerSize;i++)
22
                        {
23
                                sum += pSrcA->pData[r*innerSize + i] * pSrcB->pData[i*outC + c];
24
                        }
25
 
26
                        pDst->pData[r*outC + c] = sum;
27
                }
28
        }
29
 
30
        return ARM_MATH_SUCCESS;
31
}
32
 
33
arm_status ref_mat_mult_q31(
34
  const arm_matrix_instance_q31 * pSrcA,
35
  const arm_matrix_instance_q31 * pSrcB,
36
  arm_matrix_instance_q31 * pDst)
37
{
38
        uint32_t r,c,i,outR,outC,innerSize;
39
        q63_t sum;
40
 
41
        outR = pSrcA->numRows;
42
        outC = pSrcB->numCols;
43
        innerSize = pSrcA->numCols;
44
 
45
        for(r=0;r<outR;r++)
46
        {
47
                for(c=0;c<outC;c++)
48
                {
49
                        sum = 0;
50
 
51
                        for(i=0;i<innerSize;i++)
52
                        {
53
                                sum += (q63_t)(pSrcA->pData[r*innerSize + i]) * pSrcB->pData[i*outC + c];
54
                        }
55
 
56
                        pDst->pData[r*outC + c] = ref_sat_q31(sum >> 31);
57
                }
58
        }
59
 
60
        return ARM_MATH_SUCCESS;
61
}
62
 
63
arm_status ref_mat_mult_q15(
64
  const arm_matrix_instance_q15 * pSrcA,
65
  const arm_matrix_instance_q15 * pSrcB,
66
  arm_matrix_instance_q15 * pDst)
67
{
68
        uint32_t r,c,i,outR,outC,innerSize;
69
        q63_t sum;
70
 
71
        outR = pSrcA->numRows;
72
        outC = pSrcB->numCols;
73
        innerSize = pSrcA->numCols;
74
 
75
        for(r=0;r<outR;r++)
76
        {
77
                for(c=0;c<outC;c++)
78
                {
79
                        sum = 0;
80
 
81
                        for(i=0;i<innerSize;i++)
82
                        {
83
                                sum += (q31_t)(pSrcA->pData[r*innerSize + i]) * pSrcB->pData[i*outC + c];
84
                        }
85
 
86
                        pDst->pData[r*outC + c] = ref_sat_q15(sum >> 15);
87
                }
88
        }
89
 
90
        return ARM_MATH_SUCCESS;
91
}