Project Ne10
An open, optimized software library for the ARM architecture.
Main Page
Related Pages
Modules
Classes
Files
Examples
File List
File Members
modules
math
NE10_detmat.c.h
Go to the documentation of this file.
1
/*
2
* Copyright 2011-16 ARM Limited and Contributors.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
* * Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* * Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
* * Neither the name of ARM Limited nor the
13
* names of its contributors may be used to endorse or promote products
14
* derived from this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY ARM LIMITED AND CONTRIBUTORS "AS IS" AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
* DISCLAIMED. IN NO EVENT SHALL ARM LIMITED AND CONTRIBUTORS BE LIABLE FOR ANY
20
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
/*
29
* NE10 Library : math/NE10_detmat.c.h
30
*/
31
32
#ifndef __NE10_DETMAT_C_H__
33
#define __NE10_DETMAT_C_H__
34
35
#include "
NE10_types.h
"
36
#include "
macros.h
"
37
38
#include <assert.h>
39
40
static
inline
ne10_float32_t
DET2x2(
ne10_mat2x2f_t
* mat )
41
{
42
// 2x2 matrix layout
43
// c1r1 c2r1
44
// c1r2 c2r2
45
46
return
( (mat->
c1
.
r1
* mat->
c2
.
r2
)
47
-(mat->
c2
.
r1
* mat->
c1
.
r2
) );
48
}
49
50
static
inline
ne10_float32_t
DET3x3(
ne10_mat3x3f_t
* mat )
51
{
52
// 3x3 matrix layout
53
// c1r1 c2r1 c3r1
54
// c1r2 c2r2 c3r2
55
// c1r3 c2r3 c3r3
56
57
ne10_mat2x2f_t
subm11 = { {mat->
c2
.
r2
, mat->
c2
.
r3
}, {mat->
c3
.
r2
, mat->
c3
.
r3
} };
58
ne10_mat2x2f_t
subm21 = { {mat->
c1
.
r2
, mat->
c1
.
r3
}, {mat->
c3
.
r2
, mat->
c3
.
r3
} };
59
ne10_mat2x2f_t
subm31 = { {mat->
c1
.
r2
, mat->
c1
.
r3
}, {mat->
c2
.
r2
, mat->
c2
.
r3
} };
60
return
(mat->
c1
.
r1
*DET2x2( &subm11 ))
61
- (mat->
c2
.
r1
*DET2x2( &subm21 ))
62
+ (mat->
c3
.
r1
*DET2x2( &subm31 ));
63
}
64
65
static
inline
ne10_float32_t
DET4x4(
ne10_mat4x4f_t
* mat )
66
{
67
// 4x4 matrix layout
68
// c1r1 c2r1 c3r1 c4r1
69
// c1r2 c2r2 c3r2 c4r2
70
// c1r3 c2r3 c3r3 c4r3
71
// c1r4 c2r4 c3r4 c4r4
72
73
ne10_mat3x3f_t
subm11 = { {mat->
c2
.
r2
, mat->
c2
.
r3
, mat->
c2
.
r4
},
74
{mat->
c3
.
r2
, mat->
c3
.
r3
, mat->
c3
.
r4
},
75
{mat->
c4
.
r2
, mat->
c4
.
r3
, mat->
c4
.
r4
} };
76
77
ne10_mat3x3f_t
subm21 = { {mat->
c1
.
r2
, mat->
c1
.
r3
, mat->
c1
.
r4
},
78
{mat->
c3
.
r2
, mat->
c3
.
r3
, mat->
c3
.
r4
},
79
{mat->
c4
.
r2
, mat->
c4
.
r3
, mat->
c4
.
r4
} };
80
81
ne10_mat3x3f_t
subm31 = { {mat->
c1
.
r2
, mat->
c1
.
r3
, mat->
c1
.
r4
},
82
{mat->
c2
.
r2
, mat->
c2
.
r3
, mat->
c2
.
r4
},
83
{mat->
c4
.
r2
, mat->
c4
.
r3
, mat->
c4
.
r4
} };
84
85
ne10_mat3x3f_t
subm41 = { {mat->
c1
.
r2
, mat->
c1
.
r3
, mat->
c1
.
r4
},
86
{mat->
c2
.
r2
, mat->
c2
.
r3
, mat->
c2
.
r4
},
87
{mat->
c3
.
r2
, mat->
c3
.
r3
, mat->
c3
.
r4
} };
88
89
return
(mat->
c1
.
r1
*DET3x3( &subm11 ))
90
- (mat->
c2
.
r1
*DET3x3( &subm21 ))
91
+ (mat->
c3
.
r1
*DET3x3( &subm31 ))
92
- (mat->
c4
.
r1
*DET3x3( &subm41 ));
93
}
94
95
96
97
98
#endif
ne10_mat_row3f::r2
ne10_float32_t r2
Definition:
NE10_types.h:145
ne10_mat4x4f_t::c1
ne10_mat_row4f c1
Definition:
NE10_types.h:187
ne10_float32_t
float ne10_float32_t
Definition:
NE10_types.h:80
ne10_mat3x3f_t::c3
ne10_mat_row3f c3
Definition:
NE10_types.h:153
ne10_mat2x2f_t
Definition:
NE10_types.h:124
ne10_mat_row3f::r1
ne10_float32_t r1
Definition:
NE10_types.h:144
ne10_mat4x4f_t::c4
ne10_mat_row4f c4
Definition:
NE10_types.h:190
macros.h
ne10_mat_row4f::r3
ne10_float32_t r3
Definition:
NE10_types.h:181
ne10_mat3x3f_t
Definition:
NE10_types.h:149
ne10_mat2x2f_t::c2
ne10_mat_row2f c2
Definition:
NE10_types.h:127
ne10_mat4x4f_t::c2
ne10_mat_row4f c2
Definition:
NE10_types.h:188
ne10_mat_row3f::r3
ne10_float32_t r3
Definition:
NE10_types.h:146
ne10_mat_row4f::r2
ne10_float32_t r2
Definition:
NE10_types.h:180
ne10_mat4x4f_t::c3
ne10_mat_row4f c3
Definition:
NE10_types.h:189
ne10_mat_row2f::r2
ne10_float32_t r2
Definition:
NE10_types.h:121
ne10_mat4x4f_t
Definition:
NE10_types.h:185
NE10_types.h
ne10_mat_row2f::r1
ne10_float32_t r1
Definition:
NE10_types.h:120
ne10_mat3x3f_t::c1
ne10_mat_row3f c1
Definition:
NE10_types.h:151
ne10_mat2x2f_t::c1
ne10_mat_row2f c1
Definition:
NE10_types.h:126
ne10_mat_row4f::r4
ne10_float32_t r4
Definition:
NE10_types.h:182
ne10_mat_row4f::r1
ne10_float32_t r1
Definition:
NE10_types.h:179
ne10_mat3x3f_t::c2
ne10_mat_row3f c2
Definition:
NE10_types.h:152
Generated on Fri Jun 30 2017 10:50:54 for Project Ne10 by
1.8.11