Branch data Line data Source code
1 : :
2 : : /* autogenerated from svolume.orc */
3 : :
4 : : #ifdef HAVE_CONFIG_H
5 : : #include "config.h"
6 : : #endif
7 : :
8 : : #ifndef _ORC_INTEGER_TYPEDEFS_
9 : : #define _ORC_INTEGER_TYPEDEFS_
10 : : #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
11 : : #include <stdint.h>
12 : : typedef int8_t orc_int8;
13 : : typedef int16_t orc_int16;
14 : : typedef int32_t orc_int32;
15 : : typedef int64_t orc_int64;
16 : : typedef uint8_t orc_uint8;
17 : : typedef uint16_t orc_uint16;
18 : : typedef uint32_t orc_uint32;
19 : : typedef uint64_t orc_uint64;
20 : : #define ORC_UINT64_C(x) UINT64_C(x)
21 : : #elif defined(_MSC_VER)
22 : : typedef signed __int8 orc_int8;
23 : : typedef signed __int16 orc_int16;
24 : : typedef signed __int32 orc_int32;
25 : : typedef signed __int64 orc_int64;
26 : : typedef unsigned __int8 orc_uint8;
27 : : typedef unsigned __int16 orc_uint16;
28 : : typedef unsigned __int32 orc_uint32;
29 : : typedef unsigned __int64 orc_uint64;
30 : : #define ORC_UINT64_C(x) (x##Ui64)
31 : : #define inline __inline
32 : : #else
33 : : #include <limits.h>
34 : : typedef signed char orc_int8;
35 : : typedef short orc_int16;
36 : : typedef int orc_int32;
37 : : typedef unsigned char orc_uint8;
38 : : typedef unsigned short orc_uint16;
39 : : typedef unsigned int orc_uint32;
40 : : #if INT_MAX == LONG_MAX
41 : : typedef long long orc_int64;
42 : : typedef unsigned long long orc_uint64;
43 : : #define ORC_UINT64_C(x) (x##ULL)
44 : : #else
45 : : typedef long orc_int64;
46 : : typedef unsigned long orc_uint64;
47 : : #define ORC_UINT64_C(x) (x##UL)
48 : : #endif
49 : : #endif
50 : : typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
51 : : typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
52 : : typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
53 : : #endif
54 : : #ifndef ORC_RESTRICT
55 : : #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
56 : : #define ORC_RESTRICT restrict
57 : : #elif defined(__GNUC__) && __GNUC__ >= 4
58 : : #define ORC_RESTRICT __restrict__
59 : : #else
60 : : #define ORC_RESTRICT
61 : : #endif
62 : : #endif
63 : :
64 : : #ifndef DISABLE_ORC
65 : : #include <orc/orc.h>
66 : : #endif
67 : : void pa_volume_s16ne_orc_1ch (orc_int16 * ORC_RESTRICT d1, int p1, int n);
68 : : void pa_volume_s16ne_orc_2ch (orc_int16 * ORC_RESTRICT d1, orc_int64 p1, int n);
69 : :
70 : :
71 : : /* begin Orc C target preamble */
72 : : #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
73 : : #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
74 : : #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
75 : : #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
76 : : #define ORC_SB_MAX 127
77 : : #define ORC_SB_MIN (-1-ORC_SB_MAX)
78 : : #define ORC_UB_MAX 255
79 : : #define ORC_UB_MIN 0
80 : : #define ORC_SW_MAX 32767
81 : : #define ORC_SW_MIN (-1-ORC_SW_MAX)
82 : : #define ORC_UW_MAX 65535
83 : : #define ORC_UW_MIN 0
84 : : #define ORC_SL_MAX 2147483647
85 : : #define ORC_SL_MIN (-1-ORC_SL_MAX)
86 : : #define ORC_UL_MAX 4294967295U
87 : : #define ORC_UL_MIN 0
88 : : #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
89 : : #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
90 : : #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
91 : : #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
92 : : #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
93 : : #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
94 : : #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
95 : : #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
96 : : #define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
97 : : #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
98 : : #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
99 : : #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
100 : : #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
101 : : #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
102 : : #ifndef ORC_RESTRICT
103 : : #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
104 : : #define ORC_RESTRICT restrict
105 : : #elif defined(__GNUC__) && __GNUC__ >= 4
106 : : #define ORC_RESTRICT __restrict__
107 : : #else
108 : : #define ORC_RESTRICT
109 : : #endif
110 : : #endif
111 : : /* end Orc C target preamble */
112 : :
113 : :
114 : :
115 : : /* pa_volume_s16ne_orc_1ch */
116 : : #ifdef DISABLE_ORC
117 : : void
118 : : pa_volume_s16ne_orc_1ch (orc_int16 * ORC_RESTRICT d1, int p1, int n){
119 : : int i;
120 : : orc_union16 * ORC_RESTRICT ptr0;
121 : : orc_union16 var37;
122 : : orc_union32 var38;
123 : : orc_union32 var39;
124 : : orc_union32 var40;
125 : : orc_union32 var41;
126 : : orc_union16 var42;
127 : : orc_union16 var43;
128 : : orc_union32 var44;
129 : : orc_union32 var45;
130 : : orc_union32 var46;
131 : : orc_union32 var47;
132 : : orc_union32 var48;
133 : : orc_union16 var49;
134 : : orc_union32 var50;
135 : : orc_union32 var51;
136 : :
137 : : ptr0 = (orc_union16 *)d1;
138 : :
139 : : /* 2: loadpw */
140 : : var38.x2[0] = (int)0x00000000; /* 0 or 0f */
141 : : var38.x2[1] = (int)0x00000000; /* 0 or 0f */
142 : : /* 4: loadpw */
143 : : var39.x2[0] = p1;
144 : : var39.x2[1] = p1;
145 : : /* 6: loadpw */
146 : : var40.x2[0] = p1;
147 : : var40.x2[1] = p1;
148 : : /* 9: loadpl */
149 : : var41.i = p1;
150 : :
151 : : for (i = 0; i < n; i++) {
152 : : /* 0: loadw */
153 : : var37 = ptr0[i];
154 : : /* 1: convuwl */
155 : : var44.i = (orc_uint16)var37.i;
156 : : /* 3: cmpgtsw */
157 : : var45.x2[0] = (var38.x2[0] > var44.x2[0]) ? (~0) : 0;
158 : : var45.x2[1] = (var38.x2[1] > var44.x2[1]) ? (~0) : 0;
159 : : /* 5: andw */
160 : : var46.x2[0] = var45.x2[0] & var39.x2[0];
161 : : var46.x2[1] = var45.x2[1] & var39.x2[1];
162 : : /* 7: mulhuw */
163 : : var47.x2[0] = ((orc_uint32)((orc_uint16)var44.x2[0]) * (orc_uint32)((orc_uint16)var40.x2[0])) >> 16;
164 : : var47.x2[1] = ((orc_uint32)((orc_uint16)var44.x2[1]) * (orc_uint32)((orc_uint16)var40.x2[1])) >> 16;
165 : : /* 8: subl */
166 : : var48.i = var47.i - var46.i;
167 : : /* 10: convhlw */
168 : : var49.i = ((orc_uint32)var41.i)>>16;
169 : : /* 11: loadw */
170 : : var42 = ptr0[i];
171 : : /* 12: mulswl */
172 : : var50.i = var42.i * var49.i;
173 : : /* 13: addl */
174 : : var51.i = var48.i + var50.i;
175 : : /* 14: convssslw */
176 : : var43.i = ORC_CLAMP_SW(var51.i);
177 : : /* 15: storew */
178 : : ptr0[i] = var43;
179 : : }
180 : :
181 : : }
182 : :
183 : : #else
184 : : static void
185 : 0 : _backup_pa_volume_s16ne_orc_1ch (OrcExecutor * ORC_RESTRICT ex)
186 : : {
187 : : int i;
188 : 0 : int n = ex->n;
189 : : orc_union16 * ORC_RESTRICT ptr0;
190 : : orc_union16 var37;
191 : : orc_union32 var38;
192 : : orc_union32 var39;
193 : : orc_union32 var40;
194 : : orc_union32 var41;
195 : : orc_union16 var42;
196 : : orc_union16 var43;
197 : : orc_union32 var44;
198 : : orc_union32 var45;
199 : : orc_union32 var46;
200 : : orc_union32 var47;
201 : : orc_union32 var48;
202 : : orc_union16 var49;
203 : : orc_union32 var50;
204 : : orc_union32 var51;
205 : :
206 : 0 : ptr0 = (orc_union16 *)ex->arrays[0];
207 : :
208 : : /* 2: loadpw */
209 : 0 : var38.x2[0] = (int)0x00000000; /* 0 or 0f */
210 : 0 : var38.x2[1] = (int)0x00000000; /* 0 or 0f */
211 : : /* 4: loadpw */
212 : 0 : var39.x2[0] = ex->params[24];
213 : 0 : var39.x2[1] = ex->params[24];
214 : : /* 6: loadpw */
215 : 0 : var40.x2[0] = ex->params[24];
216 : 0 : var40.x2[1] = ex->params[24];
217 : : /* 9: loadpl */
218 : 0 : var41.i = ex->params[24];
219 : :
220 [ # # ]: 0 : for (i = 0; i < n; i++) {
221 : : /* 0: loadw */
222 : 0 : var37 = ptr0[i];
223 : : /* 1: convuwl */
224 : 0 : var44.i = (orc_uint16)var37.i;
225 : : /* 3: cmpgtsw */
226 [ # # ]: 0 : var45.x2[0] = (var38.x2[0] > var44.x2[0]) ? (~0) : 0;
227 [ # # ]: 0 : var45.x2[1] = (var38.x2[1] > var44.x2[1]) ? (~0) : 0;
228 : : /* 5: andw */
229 : 0 : var46.x2[0] = var45.x2[0] & var39.x2[0];
230 : 0 : var46.x2[1] = var45.x2[1] & var39.x2[1];
231 : : /* 7: mulhuw */
232 : 0 : var47.x2[0] = ((orc_uint32)((orc_uint16)var44.x2[0]) * (orc_uint32)((orc_uint16)var40.x2[0])) >> 16;
233 : 0 : var47.x2[1] = ((orc_uint32)((orc_uint16)var44.x2[1]) * (orc_uint32)((orc_uint16)var40.x2[1])) >> 16;
234 : : /* 8: subl */
235 : 0 : var48.i = var47.i - var46.i;
236 : : /* 10: convhlw */
237 : 0 : var49.i = ((orc_uint32)var41.i)>>16;
238 : : /* 11: loadw */
239 : 0 : var42 = ptr0[i];
240 : : /* 12: mulswl */
241 : 0 : var50.i = var42.i * var49.i;
242 : : /* 13: addl */
243 : 0 : var51.i = var48.i + var50.i;
244 : : /* 14: convssslw */
245 [ # # ]: 0 : var43.i = ORC_CLAMP_SW(var51.i);
246 : : /* 15: storew */
247 : 0 : ptr0[i] = var43;
248 : : }
249 : :
250 : 0 : }
251 : :
252 : : void
253 : 0 : pa_volume_s16ne_orc_1ch (orc_int16 * ORC_RESTRICT d1, int p1, int n)
254 : : {
255 : 0 : OrcExecutor _ex, *ex = &_ex;
256 : : static volatile int p_inited = 0;
257 : : static OrcCode *c = 0;
258 : : void (*func) (OrcExecutor *);
259 : :
260 [ # # ]: 0 : if (!p_inited) {
261 : 0 : orc_once_mutex_lock ();
262 [ # # ]: 0 : if (!p_inited) {
263 : : OrcProgram *p;
264 : :
265 : 0 : p = orc_program_new ();
266 : 0 : orc_program_set_name (p, "pa_volume_s16ne_orc_1ch");
267 : 0 : orc_program_set_backup_function (p, _backup_pa_volume_s16ne_orc_1ch);
268 : 0 : orc_program_add_destination (p, 2, "d1");
269 : 0 : orc_program_add_constant (p, 4, 0x00000000, "c1");
270 : 0 : orc_program_add_parameter (p, 4, "p1");
271 : 0 : orc_program_add_temporary (p, 2, "t1");
272 : 0 : orc_program_add_temporary (p, 4, "t2");
273 : 0 : orc_program_add_temporary (p, 4, "t3");
274 : 0 : orc_program_add_temporary (p, 4, "t4");
275 : 0 : orc_program_add_temporary (p, 4, "t5");
276 : :
277 : 0 : orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_D1);
278 : 0 : orc_program_append_2 (p, "cmpgtsw", 1, ORC_VAR_T5, ORC_VAR_C1, ORC_VAR_T2, ORC_VAR_D1);
279 : 0 : orc_program_append_2 (p, "andw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, ORC_VAR_D1);
280 : 0 : orc_program_append_2 (p, "mulhuw", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1);
281 : 0 : orc_program_append_2 (p, "subl", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_D1);
282 : 0 : orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, ORC_VAR_D1);
283 : 0 : orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T3, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1);
284 : 0 : orc_program_append_2 (p, "addl", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1);
285 : 0 : orc_program_append_2 (p, "convssslw", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_D1, ORC_VAR_D1);
286 : :
287 : 0 : orc_program_compile (p);
288 : 0 : c = orc_program_take_code (p);
289 : 0 : orc_program_free (p);
290 : : }
291 : 0 : p_inited = TRUE;
292 : 0 : orc_once_mutex_unlock ();
293 : : }
294 : 0 : ex->arrays[ORC_VAR_A2] = c;
295 : 0 : ex->program = 0;
296 : :
297 : 0 : ex->n = n;
298 : 0 : ex->arrays[ORC_VAR_D1] = d1;
299 : 0 : ex->params[ORC_VAR_P1] = p1;
300 : :
301 : 0 : func = c->exec;
302 : 0 : func (ex);
303 : 0 : }
304 : : #endif
305 : :
306 : :
307 : : /* pa_volume_s16ne_orc_2ch */
308 : : #ifdef DISABLE_ORC
309 : : void
310 : : pa_volume_s16ne_orc_2ch (orc_int16 * ORC_RESTRICT d1, orc_int64 p1, int n){
311 : : int i;
312 : : orc_union32 * ORC_RESTRICT ptr0;
313 : : orc_union32 var38;
314 : : orc_union64 var39;
315 : : orc_union32 var40;
316 : : orc_union32 var41;
317 : : orc_union64 var42;
318 : : orc_union64 var43;
319 : : orc_union64 var44;
320 : : orc_union64 var45;
321 : : orc_union64 var46;
322 : : orc_union64 var47;
323 : : orc_union32 var48;
324 : : orc_union64 var49;
325 : : orc_union64 var50;
326 : :
327 : : ptr0 = (orc_union32 *)d1;
328 : :
329 : : /* 0: loadpq */
330 : : var42.i = p1;
331 : : /* 3: loadpw */
332 : : var39.x4[0] = (int)0x00000000; /* 0 or 0f */
333 : : var39.x4[1] = (int)0x00000000; /* 0 or 0f */
334 : : var39.x4[2] = (int)0x00000000; /* 0 or 0f */
335 : : var39.x4[3] = (int)0x00000000; /* 0 or 0f */
336 : :
337 : : for (i = 0; i < n; i++) {
338 : : /* 1: loadl */
339 : : var38 = ptr0[i];
340 : : /* 2: convuwl */
341 : : var43.x2[0] = (orc_uint16)var38.x2[0];
342 : : var43.x2[1] = (orc_uint16)var38.x2[1];
343 : : /* 4: cmpgtsw */
344 : : var44.x4[0] = (var39.x4[0] > var43.x4[0]) ? (~0) : 0;
345 : : var44.x4[1] = (var39.x4[1] > var43.x4[1]) ? (~0) : 0;
346 : : var44.x4[2] = (var39.x4[2] > var43.x4[2]) ? (~0) : 0;
347 : : var44.x4[3] = (var39.x4[3] > var43.x4[3]) ? (~0) : 0;
348 : : /* 5: andw */
349 : : var45.x4[0] = var44.x4[0] & var42.x4[0];
350 : : var45.x4[1] = var44.x4[1] & var42.x4[1];
351 : : var45.x4[2] = var44.x4[2] & var42.x4[2];
352 : : var45.x4[3] = var44.x4[3] & var42.x4[3];
353 : : /* 6: mulhuw */
354 : : var46.x4[0] = ((orc_uint32)((orc_uint16)var43.x4[0]) * (orc_uint32)((orc_uint16)var42.x4[0])) >> 16;
355 : : var46.x4[1] = ((orc_uint32)((orc_uint16)var43.x4[1]) * (orc_uint32)((orc_uint16)var42.x4[1])) >> 16;
356 : : var46.x4[2] = ((orc_uint32)((orc_uint16)var43.x4[2]) * (orc_uint32)((orc_uint16)var42.x4[2])) >> 16;
357 : : var46.x4[3] = ((orc_uint32)((orc_uint16)var43.x4[3]) * (orc_uint32)((orc_uint16)var42.x4[3])) >> 16;
358 : : /* 7: subl */
359 : : var47.x2[0] = var46.x2[0] - var45.x2[0];
360 : : var47.x2[1] = var46.x2[1] - var45.x2[1];
361 : : /* 8: convhlw */
362 : : var48.x2[0] = ((orc_uint32)var42.x2[0])>>16;
363 : : var48.x2[1] = ((orc_uint32)var42.x2[1])>>16;
364 : : /* 9: loadl */
365 : : var40 = ptr0[i];
366 : : /* 10: mulswl */
367 : : var49.x2[0] = var40.x2[0] * var48.x2[0];
368 : : var49.x2[1] = var40.x2[1] * var48.x2[1];
369 : : /* 11: addl */
370 : : var50.x2[0] = var47.x2[0] + var49.x2[0];
371 : : var50.x2[1] = var47.x2[1] + var49.x2[1];
372 : : /* 12: convssslw */
373 : : var41.x2[0] = ORC_CLAMP_SW(var50.x2[0]);
374 : : var41.x2[1] = ORC_CLAMP_SW(var50.x2[1]);
375 : : /* 13: storel */
376 : : ptr0[i] = var41;
377 : : }
378 : :
379 : : }
380 : :
381 : : #else
382 : : static void
383 : 0 : _backup_pa_volume_s16ne_orc_2ch (OrcExecutor * ORC_RESTRICT ex)
384 : : {
385 : : int i;
386 : 0 : int n = ex->n;
387 : : orc_union32 * ORC_RESTRICT ptr0;
388 : : orc_union32 var38;
389 : : orc_union64 var39;
390 : : orc_union32 var40;
391 : : orc_union32 var41;
392 : : orc_union64 var42;
393 : : orc_union64 var43;
394 : : orc_union64 var44;
395 : : orc_union64 var45;
396 : : orc_union64 var46;
397 : : orc_union64 var47;
398 : : orc_union32 var48;
399 : : orc_union64 var49;
400 : : orc_union64 var50;
401 : :
402 : 0 : ptr0 = (orc_union32 *)ex->arrays[0];
403 : :
404 : : /* 0: loadpq */
405 : 0 : var42.i = (ex->params[24] & 0xffffffff) | ((orc_uint64)(ex->params[24 + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
406 : : /* 3: loadpw */
407 : 0 : var39.x4[0] = (int)0x00000000; /* 0 or 0f */
408 : 0 : var39.x4[1] = (int)0x00000000; /* 0 or 0f */
409 : 0 : var39.x4[2] = (int)0x00000000; /* 0 or 0f */
410 : 0 : var39.x4[3] = (int)0x00000000; /* 0 or 0f */
411 : :
412 [ # # ]: 0 : for (i = 0; i < n; i++) {
413 : : /* 1: loadl */
414 : 0 : var38 = ptr0[i];
415 : : /* 2: convuwl */
416 : 0 : var43.x2[0] = (orc_uint16)var38.x2[0];
417 : 0 : var43.x2[1] = (orc_uint16)var38.x2[1];
418 : : /* 4: cmpgtsw */
419 [ # # ]: 0 : var44.x4[0] = (var39.x4[0] > var43.x4[0]) ? (~0) : 0;
420 [ # # ]: 0 : var44.x4[1] = (var39.x4[1] > var43.x4[1]) ? (~0) : 0;
421 [ # # ]: 0 : var44.x4[2] = (var39.x4[2] > var43.x4[2]) ? (~0) : 0;
422 [ # # ]: 0 : var44.x4[3] = (var39.x4[3] > var43.x4[3]) ? (~0) : 0;
423 : : /* 5: andw */
424 : 0 : var45.x4[0] = var44.x4[0] & var42.x4[0];
425 : 0 : var45.x4[1] = var44.x4[1] & var42.x4[1];
426 : 0 : var45.x4[2] = var44.x4[2] & var42.x4[2];
427 : 0 : var45.x4[3] = var44.x4[3] & var42.x4[3];
428 : : /* 6: mulhuw */
429 : 0 : var46.x4[0] = ((orc_uint32)((orc_uint16)var43.x4[0]) * (orc_uint32)((orc_uint16)var42.x4[0])) >> 16;
430 : 0 : var46.x4[1] = ((orc_uint32)((orc_uint16)var43.x4[1]) * (orc_uint32)((orc_uint16)var42.x4[1])) >> 16;
431 : 0 : var46.x4[2] = ((orc_uint32)((orc_uint16)var43.x4[2]) * (orc_uint32)((orc_uint16)var42.x4[2])) >> 16;
432 : 0 : var46.x4[3] = ((orc_uint32)((orc_uint16)var43.x4[3]) * (orc_uint32)((orc_uint16)var42.x4[3])) >> 16;
433 : : /* 7: subl */
434 : 0 : var47.x2[0] = var46.x2[0] - var45.x2[0];
435 : 0 : var47.x2[1] = var46.x2[1] - var45.x2[1];
436 : : /* 8: convhlw */
437 : 0 : var48.x2[0] = ((orc_uint32)var42.x2[0])>>16;
438 : 0 : var48.x2[1] = ((orc_uint32)var42.x2[1])>>16;
439 : : /* 9: loadl */
440 : 0 : var40 = ptr0[i];
441 : : /* 10: mulswl */
442 : 0 : var49.x2[0] = var40.x2[0] * var48.x2[0];
443 : 0 : var49.x2[1] = var40.x2[1] * var48.x2[1];
444 : : /* 11: addl */
445 : 0 : var50.x2[0] = var47.x2[0] + var49.x2[0];
446 : 0 : var50.x2[1] = var47.x2[1] + var49.x2[1];
447 : : /* 12: convssslw */
448 [ # # ]: 0 : var41.x2[0] = ORC_CLAMP_SW(var50.x2[0]);
449 [ # # ]: 0 : var41.x2[1] = ORC_CLAMP_SW(var50.x2[1]);
450 : : /* 13: storel */
451 : 0 : ptr0[i] = var41;
452 : : }
453 : :
454 : 0 : }
455 : :
456 : : void
457 : 0 : pa_volume_s16ne_orc_2ch (orc_int16 * ORC_RESTRICT d1, orc_int64 p1, int n)
458 : : {
459 : 0 : OrcExecutor _ex, *ex = &_ex;
460 : : static volatile int p_inited = 0;
461 : : static OrcCode *c = 0;
462 : : void (*func) (OrcExecutor *);
463 : :
464 [ # # ]: 0 : if (!p_inited) {
465 : 0 : orc_once_mutex_lock ();
466 [ # # ]: 0 : if (!p_inited) {
467 : : OrcProgram *p;
468 : :
469 : 0 : p = orc_program_new ();
470 : 0 : orc_program_set_name (p, "pa_volume_s16ne_orc_2ch");
471 : 0 : orc_program_set_backup_function (p, _backup_pa_volume_s16ne_orc_2ch);
472 : 0 : orc_program_add_destination (p, 4, "d1");
473 : 0 : orc_program_add_constant (p, 4, 0x00000000, "c1");
474 : 0 : orc_program_add_parameter_int64 (p, 8, "p1");
475 : 0 : orc_program_add_temporary (p, 8, "t1");
476 : 0 : orc_program_add_temporary (p, 4, "t2");
477 : 0 : orc_program_add_temporary (p, 8, "t3");
478 : 0 : orc_program_add_temporary (p, 8, "t4");
479 : 0 : orc_program_add_temporary (p, 8, "t5");
480 : 0 : orc_program_add_temporary (p, 8, "t6");
481 : :
482 : 0 : orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, ORC_VAR_D1);
483 : 0 : orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T3, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_D1);
484 : 0 : orc_program_append_2 (p, "cmpgtsw", 2, ORC_VAR_T6, ORC_VAR_C1, ORC_VAR_T3, ORC_VAR_D1);
485 : 0 : orc_program_append_2 (p, "andw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_D1);
486 : 0 : orc_program_append_2 (p, "mulhuw", 2, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_D1);
487 : 0 : orc_program_append_2 (p, "subl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_D1);
488 : 0 : orc_program_append_2 (p, "convhlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1);
489 : 0 : orc_program_append_2 (p, "mulswl", 1, ORC_VAR_T4, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1);
490 : 0 : orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1);
491 : 0 : orc_program_append_2 (p, "convssslw", 1, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_D1, ORC_VAR_D1);
492 : :
493 : 0 : orc_program_compile (p);
494 : 0 : c = orc_program_take_code (p);
495 : 0 : orc_program_free (p);
496 : : }
497 : 0 : p_inited = TRUE;
498 : 0 : orc_once_mutex_unlock ();
499 : : }
500 : 0 : ex->arrays[ORC_VAR_A2] = c;
501 : 0 : ex->program = 0;
502 : :
503 : 0 : ex->n = n;
504 : 0 : ex->arrays[ORC_VAR_D1] = d1;
505 : : {
506 : : orc_union64 tmp;
507 : 0 : tmp.i = p1;
508 : 0 : ex->params[ORC_VAR_P1] = tmp.x2[0];
509 : 0 : ex->params[ORC_VAR_T1] = tmp.x2[1];
510 : : }
511 : :
512 : 0 : func = c->exec;
513 : 0 : func (ex);
514 : 0 : }
515 : : #endif
516 : :
517 : :
|