OLD | NEW |
1 /*********************************************************************** | 1 /*********************************************************************** |
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. |
3 Redistribution and use in source and binary forms, with or without | 3 Redistribution and use in source and binary forms, with or without |
4 modification, are permitted provided that the following conditions | 4 modification, are permitted provided that the following conditions |
5 are met: | 5 are met: |
6 - Redistributions of source code must retain the above copyright notice, | 6 - Redistributions of source code must retain the above copyright notice, |
7 this list of conditions and the following disclaimer. | 7 this list of conditions and the following disclaimer. |
8 - Redistributions in binary form must reproduce the above copyright | 8 - Redistributions in binary form must reproduce the above copyright |
9 notice, this list of conditions and the following disclaimer in the | 9 notice, this list of conditions and the following disclaimer in the |
10 documentation and/or other materials provided with the distribution. | 10 documentation and/or other materials provided with the distribution. |
11 - Neither the name of Internet Society, IETF or IETF Trust, nor the | 11 - Neither the name of Internet Society, IETF or IETF Trust, nor the |
12 names of specific contributors, may be used to endorse or promote | 12 names of specific contributors, may be used to endorse or promote |
13 products derived from this software without specific prior written | 13 products derived from this software without specific prior written |
14 permission. | 14 permission. |
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” | 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 POSSIBILITY OF SUCH DAMAGE. | 25 POSSIBILITY OF SUCH DAMAGE. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 69 |
70 /* add/subtract with output saturated */ | 70 /* add/subtract with output saturated */ |
71 #define silk_ADD_SAT32(a, b) ((((opus_uint32)(a) + (opus_uint32)(b))
& 0x80000000) == 0 ? \ | 71 #define silk_ADD_SAT32(a, b) ((((opus_uint32)(a) + (opus_uint32)(b))
& 0x80000000) == 0 ? \ |
72 ((((a) & (b)) & 0x80000000) != 0 ? silk_
int32_MIN : (a)+(b)) : \ | 72 ((((a) & (b)) & 0x80000000) != 0 ? silk_
int32_MIN : (a)+(b)) : \ |
73 ((((a) | (b)) & 0x80000000) == 0 ? silk_
int32_MAX : (a)+(b)) ) | 73 ((((a) | (b)) & 0x80000000) == 0 ? silk_
int32_MAX : (a)+(b)) ) |
74 | 74 |
75 #define silk_SUB_SAT32(a, b) ((((opus_uint32)(a)-(opus_uint32)(b)) &
0x80000000) == 0 ? \ | 75 #define silk_SUB_SAT32(a, b) ((((opus_uint32)(a)-(opus_uint32)(b)) &
0x80000000) == 0 ? \ |
76 (( (a) & ((b)^0x80000000) & 0x80000000)
? silk_int32_MIN : (a)-(b)) : \ | 76 (( (a) & ((b)^0x80000000) & 0x80000000)
? silk_int32_MIN : (a)-(b)) : \ |
77 ((((a)^0x80000000) & (b) & 0x80000000)
? silk_int32_MAX : (a)-(b)) ) | 77 ((((a)^0x80000000) & (b) & 0x80000000)
? silk_int32_MAX : (a)-(b)) ) |
78 | 78 |
| 79 #include "ecintrin.h" |
| 80 |
79 static inline opus_int32 silk_CLZ16(opus_int16 in16) | 81 static inline opus_int32 silk_CLZ16(opus_int16 in16) |
80 { | 82 { |
81 opus_int32 out32 = 0; | 83 return 32 - EC_ILOG(in16<<16|0x8000); |
82 if( in16 == 0 ) { | |
83 return 16; | |
84 } | |
85 /* test nibbles */ | |
86 if( in16 & 0xFF00 ) { | |
87 if( in16 & 0xF000 ) { | |
88 in16 >>= 12; | |
89 } else { | |
90 out32 += 4; | |
91 in16 >>= 8; | |
92 } | |
93 } else { | |
94 if( in16 & 0xFFF0 ) { | |
95 out32 += 8; | |
96 in16 >>= 4; | |
97 } else { | |
98 out32 += 12; | |
99 } | |
100 } | |
101 /* test bits and return */ | |
102 if( in16 & 0xC ) { | |
103 if( in16 & 0x8 ) | |
104 return out32 + 0; | |
105 else | |
106 return out32 + 1; | |
107 } else { | |
108 if( in16 & 0xE ) | |
109 return out32 + 2; | |
110 else | |
111 return out32 + 3; | |
112 } | |
113 } | 84 } |
114 | 85 |
115 static inline opus_int32 silk_CLZ32(opus_int32 in32) | 86 static inline opus_int32 silk_CLZ32(opus_int32 in32) |
116 { | 87 { |
117 /* test highest 16 bits and convert to opus_int16 */ | 88 return in32 ? 32 - EC_ILOG(in32) : 32; |
118 if( in32 & 0xFFFF0000 ) { | |
119 return silk_CLZ16((opus_int16)(in32 >> 16)); | |
120 } else { | |
121 return silk_CLZ16((opus_int16)in32) + 16; | |
122 } | |
123 } | 89 } |
124 | 90 |
125 /* Row based */ | 91 /* Row based */ |
126 #define matrix_ptr(Matrix_base_adr, row, column, N) *(Matrix_base_adr +
((row)*(N)+(column))) | 92 #define matrix_ptr(Matrix_base_adr, row, column, N) \ |
127 #define matrix_adr(Matrix_base_adr, row, column, N) (Matrix_base_adr +
((row)*(N)+(column))) | 93 (*((Matrix_base_adr) + ((row)*(N)+(column)))) |
| 94 #define matrix_adr(Matrix_base_adr, row, column, N) \ |
| 95 ((Matrix_base_adr) + ((row)*(N)+(column))) |
128 | 96 |
129 /* Column based */ | 97 /* Column based */ |
130 #ifndef matrix_c_ptr | 98 #ifndef matrix_c_ptr |
131 # define matrix_c_ptr(Matrix_base_adr, row, column, M) *(Matrix_base_adr +
((row)+(M)*(column))) | 99 # define matrix_c_ptr(Matrix_base_adr, row, column, M) \ |
| 100 (*((Matrix_base_adr) + ((row)+(M)*(column)))) |
| 101 #endif |
| 102 |
| 103 #ifdef ARMv4_ASM |
| 104 #include "arm/macros_armv4.h" |
| 105 #endif |
| 106 |
| 107 #ifdef ARMv5E_ASM |
| 108 #include "arm/macros_armv5e.h" |
132 #endif | 109 #endif |
133 | 110 |
134 #endif /* SILK_MACROS_H */ | 111 #endif /* SILK_MACROS_H */ |
135 | 112 |
OLD | NEW |