2 SuperCollider real time audio synthesis system
3 Copyright (c) 2002 James McCartney. All rights reserved.
4 http://www.audiosynth.com
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "SC_PlugIn.h"
26 // hypotf is c99, but not c++
27 #define hypotf _hypotf
31 #include "simd_binary_arithmetic.hpp"
32 #include "simd_math.hpp"
33 #include "simd_memory.hpp"
35 #if defined (__GNUC__) && !(defined(__clang__))
36 #define inline_functions __attribute__ ((flatten))
38 #define inline_functions
42 #define NOVA_BINARY_WRAPPER(SCNAME, NOVANAME) \
43 inline_functions void SCNAME##_aa_nova(BinaryOpUGen *unit, int inNumSamples) \
45 nova::NOVANAME##_vec_simd(OUT(0), IN(0), IN(1), inNumSamples); \
48 inline_functions void SCNAME##_aa_nova_64(BinaryOpUGen *unit, int inNumSamples) \
50 nova::NOVANAME##_vec_simd<64>(OUT(0), IN(0), IN(1)); \
53 inline_functions void SCNAME##_ia_nova(BinaryOpUGen *unit, int inNumSamples) \
57 nova::NOVANAME##_vec_simd(OUT(0), xa, IN(1), inNumSamples); \
61 inline_functions void SCNAME##_ia_nova_64(BinaryOpUGen *unit, int inNumSamples) \
65 nova::NOVANAME##_vec_simd<64>(OUT(0), xa, IN(1)); \
69 inline_functions void SCNAME##_ai_nova(BinaryOpUGen *unit, int inNumSamples) \
73 nova::NOVANAME##_vec_simd(OUT(0), IN(0), xb, inNumSamples); \
77 inline_functions void SCNAME##_ai_nova_64(BinaryOpUGen *unit, int inNumSamples) \
81 nova::NOVANAME##_vec_simd<64>(OUT(0), IN(0), xb); \
85 #define NOVA_BINARY_WRAPPER_K(SCNAME, NOVANAME) \
86 inline_functions void SCNAME##_aa_nova(BinaryOpUGen *unit, int inNumSamples) \
88 nova::NOVANAME##_vec_simd(OUT(0), IN(0), IN(1), inNumSamples); \
91 inline_functions void SCNAME##_aa_nova_64(BinaryOpUGen *unit, int inNumSamples) \
93 nova::NOVANAME##_vec_simd<64>(OUT(0), IN(0), IN(1)); \
96 inline_functions void SCNAME##_ia_nova(BinaryOpUGen *unit, int inNumSamples) \
100 nova::NOVANAME##_vec_simd(OUT(0), xa, IN(1), inNumSamples); \
104 inline_functions void SCNAME##_ia_nova_64(BinaryOpUGen *unit, int inNumSamples) \
106 float xa = ZIN0(0); \
108 nova::NOVANAME##_vec_simd<64>(OUT(0), xa, IN(1)); \
112 inline_functions void SCNAME##_ai_nova(BinaryOpUGen *unit, int inNumSamples) \
114 float xb = ZIN0(1); \
116 nova::NOVANAME##_vec_simd(OUT(0), IN(0), xb, inNumSamples); \
120 inline_functions void SCNAME##_ai_nova_64(BinaryOpUGen *unit, int inNumSamples) \
122 float xb = ZIN0(1); \
124 nova::NOVANAME##_vec_simd<64>(OUT(0), IN(0), xb); \
128 inline_functions void SCNAME##_ak_nova(BinaryOpUGen *unit, int inNumSamples) \
130 float xb = unit->mPrevB; \
131 float next_b = ZIN0(1); \
133 if (xb == next_b) { \
134 nova::NOVANAME##_vec_simd(OUT(0), IN(0), xb, inNumSamples); \
136 float slope = CALCSLOPE(next_b, xb); \
137 nova::NOVANAME##_vec_simd(OUT(0), IN(0), xb, slope, inNumSamples); \
138 unit->mPrevB = next_b; \
142 inline_functions void SCNAME##_ak_nova_64(BinaryOpUGen *unit, int inNumSamples) \
144 float xb = unit->mPrevB; \
145 float next_b = ZIN0(1); \
147 if (xb == next_b) { \
148 nova::NOVANAME##_vec_simd<64>(OUT(0), IN(0), xb); \
150 float slope = CALCSLOPE(next_b, xb); \
151 nova::NOVANAME##_vec_simd(OUT(0), IN(0), xb, slope, inNumSamples); \
152 unit->mPrevB = next_b; \
156 inline_functions void SCNAME##_ka_nova(BinaryOpUGen *unit, int inNumSamples) \
158 float xa = unit->mPrevA; \
159 float next_a = ZIN0(0); \
161 if (xa == next_a) { \
162 nova::NOVANAME##_vec_simd(OUT(0), xa, IN(1), inNumSamples); \
164 float slope = CALCSLOPE(next_a, xa); \
165 nova::NOVANAME##_vec_simd(OUT(0), xa, slope, IN(1), inNumSamples); \
166 unit->mPrevA = next_a; \
169 inline_functions void SCNAME##_ka_nova_64(BinaryOpUGen *unit, int inNumSamples) \
171 float xa = unit->mPrevA; \
172 float next_a = ZIN0(0); \
174 if (xa == next_a) { \
175 nova::NOVANAME##_vec_simd<64>(OUT(0), xa, IN(1)); \
177 float slope = CALCSLOPE(next_a, xa); \
178 nova::NOVANAME##_vec_simd(OUT(0), xa, slope, IN(1), inNumSamples); \
179 unit->mPrevA = next_a; \
186 using namespace std
; // for math functions
188 static InterfaceTable
*ft
;
190 //////////////////////////////////////////////////////////////////////////////////////////////////
193 /* special binary math operators */
228 opRing1
, // a * (b + 1) == a * b + a
229 opRing2
, // a * b + a + b
231 opRing4
, // a*a*b - a*b*b
232 opDifSqr
, // a*a - b*b
233 opSumSqr
, // a*a + b*b
234 opSqrSum
, // (a + b)^2
235 opSqrDif
, // (a - b)^2
252 inline float sc_andt(float a
, float b
)
254 return a
> 0.f
&& b
> 0.f
? 1.f
: 0.f
;
257 inline float sc_ort(float a
, float b
)
259 return a
> 0.f
|| b
> 0.f
? 1.f
: 0.f
;
262 inline float sc_xort(float a
, float b
)
264 return a
> 0.f
? (b
> 0.f
? 0.f
: 1.f
) : (b
> 0.f
? 1.f
: 0.f
);
267 struct BinaryOpUGen
: public Unit
269 float mPrevA
, mPrevB
;
272 typedef void (*BinaryOpFunc
)(BinaryOpUGen
*unit
, int inNumSamples
);
277 void BinaryOpUGen_Ctor(BinaryOpUGen
*unit
);
279 //void zero_d(BinaryOpUGen *unit, int inNumSamples);
280 void zero_1(BinaryOpUGen
*unit
, int inNumSamples
);
281 void zero_aa(BinaryOpUGen
*unit
, int inNumSamples
);
282 void firstarg_d(BinaryOpUGen
*unit
, int inNumSamples
);
283 void firstarg_1(BinaryOpUGen
*unit
, int inNumSamples
);
284 void firstarg_aa(BinaryOpUGen
*unit
, int inNumSamples
);
285 void secondarg_d(BinaryOpUGen
*unit
, int inNumSamples
);
286 void secondarg_1(BinaryOpUGen
*unit
, int inNumSamples
);
287 void secondarg_aa(BinaryOpUGen
*unit
, int inNumSamples
);
288 void add_d(BinaryOpUGen
*unit
, int inNumSamples
);
289 void add_1(BinaryOpUGen
*unit
, int inNumSamples
);
290 void add_aa(BinaryOpUGen
*unit
, int inNumSamples
);
291 void add_ak(BinaryOpUGen
*unit
, int inNumSamples
);
292 void add_ka(BinaryOpUGen
*unit
, int inNumSamples
);
293 void add_ai(BinaryOpUGen
*unit
, int inNumSamples
);
294 void add_ia(BinaryOpUGen
*unit
, int inNumSamples
);
295 void sub_d(BinaryOpUGen
*unit
, int inNumSamples
);
296 void sub_1(BinaryOpUGen
*unit
, int inNumSamples
);
297 void sub_aa(BinaryOpUGen
*unit
, int inNumSamples
);
298 void sub_ak(BinaryOpUGen
*unit
, int inNumSamples
);
299 void sub_ka(BinaryOpUGen
*unit
, int inNumSamples
);
300 void sub_ai(BinaryOpUGen
*unit
, int inNumSamples
);
301 void sub_ia(BinaryOpUGen
*unit
, int inNumSamples
);
302 void mul_d(BinaryOpUGen
*unit
, int inNumSamples
);
303 void mul_1(BinaryOpUGen
*unit
, int inNumSamples
);
304 void mul_aa(BinaryOpUGen
*unit
, int inNumSamples
);
305 void mul_ak(BinaryOpUGen
*unit
, int inNumSamples
);
306 void mul_ka(BinaryOpUGen
*unit
, int inNumSamples
);
307 void mul_ai(BinaryOpUGen
*unit
, int inNumSamples
);
308 void mul_ia(BinaryOpUGen
*unit
, int inNumSamples
);
309 void div_d(BinaryOpUGen
*unit
, int inNumSamples
);
310 void div_1(BinaryOpUGen
*unit
, int inNumSamples
);
311 void div_aa(BinaryOpUGen
*unit
, int inNumSamples
);
312 void div_ak(BinaryOpUGen
*unit
, int inNumSamples
);
313 void div_ka(BinaryOpUGen
*unit
, int inNumSamples
);
314 void div_ai(BinaryOpUGen
*unit
, int inNumSamples
);
315 void div_ia(BinaryOpUGen
*unit
, int inNumSamples
);
316 void mod_d(BinaryOpUGen
*unit
, int inNumSamples
);
317 void mod_1(BinaryOpUGen
*unit
, int inNumSamples
);
318 void mod_aa(BinaryOpUGen
*unit
, int inNumSamples
);
319 void mod_ak(BinaryOpUGen
*unit
, int inNumSamples
);
320 void mod_ka(BinaryOpUGen
*unit
, int inNumSamples
);
321 void mod_ai(BinaryOpUGen
*unit
, int inNumSamples
);
322 void mod_ia(BinaryOpUGen
*unit
, int inNumSamples
);
323 void max_d(BinaryOpUGen
*unit
, int inNumSamples
);
324 void max_1(BinaryOpUGen
*unit
, int inNumSamples
);
325 void max_aa(BinaryOpUGen
*unit
, int inNumSamples
);
326 void max_ak(BinaryOpUGen
*unit
, int inNumSamples
);
327 void max_ka(BinaryOpUGen
*unit
, int inNumSamples
);
328 void max_ai(BinaryOpUGen
*unit
, int inNumSamples
);
329 void max_ia(BinaryOpUGen
*unit
, int inNumSamples
);
330 void min_d(BinaryOpUGen
*unit
, int inNumSamples
);
331 void min_1(BinaryOpUGen
*unit
, int inNumSamples
);
332 void min_aa(BinaryOpUGen
*unit
, int inNumSamples
);
333 void min_ak(BinaryOpUGen
*unit
, int inNumSamples
);
334 void min_ka(BinaryOpUGen
*unit
, int inNumSamples
);
335 void min_ai(BinaryOpUGen
*unit
, int inNumSamples
);
336 void min_ia(BinaryOpUGen
*unit
, int inNumSamples
);
338 void and_d(BinaryOpUGen
*unit
, int inNumSamples
);
339 void and_1(BinaryOpUGen
*unit
, int inNumSamples
);
340 void and_aa(BinaryOpUGen
*unit
, int inNumSamples
);
341 void and_ak(BinaryOpUGen
*unit
, int inNumSamples
);
342 void and_ka(BinaryOpUGen
*unit
, int inNumSamples
);
343 void and_ai(BinaryOpUGen
*unit
, int inNumSamples
);
344 void and_ia(BinaryOpUGen
*unit
, int inNumSamples
);
346 void or_d(BinaryOpUGen
*unit
, int inNumSamples
);
347 void or_1(BinaryOpUGen
*unit
, int inNumSamples
);
348 void or_aa(BinaryOpUGen
*unit
, int inNumSamples
);
349 void or_ak(BinaryOpUGen
*unit
, int inNumSamples
);
350 void or_ka(BinaryOpUGen
*unit
, int inNumSamples
);
351 void or_ai(BinaryOpUGen
*unit
, int inNumSamples
);
352 void or_ia(BinaryOpUGen
*unit
, int inNumSamples
);
354 void xor_d(BinaryOpUGen
*unit
, int inNumSamples
);
355 void xor_1(BinaryOpUGen
*unit
, int inNumSamples
);
356 void xor_aa(BinaryOpUGen
*unit
, int inNumSamples
);
357 void xor_ak(BinaryOpUGen
*unit
, int inNumSamples
);
358 void xor_ka(BinaryOpUGen
*unit
, int inNumSamples
);
359 void xor_ai(BinaryOpUGen
*unit
, int inNumSamples
);
360 void xor_ia(BinaryOpUGen
*unit
, int inNumSamples
);
362 void amclip_d(BinaryOpUGen
*unit
, int inNumSamples
);
363 void amclip_1(BinaryOpUGen
*unit
, int inNumSamples
);
364 void amclip_aa(BinaryOpUGen
*unit
, int inNumSamples
);
365 void amclip_ak(BinaryOpUGen
*unit
, int inNumSamples
);
366 void amclip_ka(BinaryOpUGen
*unit
, int inNumSamples
);
367 void amclip_ai(BinaryOpUGen
*unit
, int inNumSamples
);
368 void amclip_ia(BinaryOpUGen
*unit
, int inNumSamples
);
369 void scaleneg_d(BinaryOpUGen
*unit
, int inNumSamples
);
370 void scaleneg_1(BinaryOpUGen
*unit
, int inNumSamples
);
371 void scaleneg_aa(BinaryOpUGen
*unit
, int inNumSamples
);
372 void scaleneg_ak(BinaryOpUGen
*unit
, int inNumSamples
);
373 void scaleneg_ka(BinaryOpUGen
*unit
, int inNumSamples
);
374 void scaleneg_ai(BinaryOpUGen
*unit
, int inNumSamples
);
375 void scaleneg_ia(BinaryOpUGen
*unit
, int inNumSamples
);
376 void pow_d(BinaryOpUGen
*unit
, int inNumSamples
);
377 void pow_1(BinaryOpUGen
*unit
, int inNumSamples
);
378 void pow_aa(BinaryOpUGen
*unit
, int inNumSamples
);
379 void pow_ak(BinaryOpUGen
*unit
, int inNumSamples
);
380 void pow_ka(BinaryOpUGen
*unit
, int inNumSamples
);
381 void pow_ai(BinaryOpUGen
*unit
, int inNumSamples
);
382 void pow_ia(BinaryOpUGen
*unit
, int inNumSamples
);
383 void ring1_d(BinaryOpUGen
*unit
, int inNumSamples
);
384 void ring1_1(BinaryOpUGen
*unit
, int inNumSamples
);
385 void ring1_aa(BinaryOpUGen
*unit
, int inNumSamples
);
386 void ring1_ak(BinaryOpUGen
*unit
, int inNumSamples
);
387 void ring1_ka(BinaryOpUGen
*unit
, int inNumSamples
);
388 void ring1_ai(BinaryOpUGen
*unit
, int inNumSamples
);
389 void ring1_ia(BinaryOpUGen
*unit
, int inNumSamples
);
390 void ring2_d(BinaryOpUGen
*unit
, int inNumSamples
);
391 void ring2_1(BinaryOpUGen
*unit
, int inNumSamples
);
392 void ring2_aa(BinaryOpUGen
*unit
, int inNumSamples
);
393 void ring2_ak(BinaryOpUGen
*unit
, int inNumSamples
);
394 void ring2_ka(BinaryOpUGen
*unit
, int inNumSamples
);
395 void ring2_ai(BinaryOpUGen
*unit
, int inNumSamples
);
396 void ring2_ia(BinaryOpUGen
*unit
, int inNumSamples
);
397 void ring3_d(BinaryOpUGen
*unit
, int inNumSamples
);
398 void ring3_1(BinaryOpUGen
*unit
, int inNumSamples
);
399 void ring3_aa(BinaryOpUGen
*unit
, int inNumSamples
);
400 void ring3_ak(BinaryOpUGen
*unit
, int inNumSamples
);
401 void ring3_ka(BinaryOpUGen
*unit
, int inNumSamples
);
402 void ring3_ai(BinaryOpUGen
*unit
, int inNumSamples
);
403 void ring3_ia(BinaryOpUGen
*unit
, int inNumSamples
);
404 void ring4_d(BinaryOpUGen
*unit
, int inNumSamples
);
405 void ring4_1(BinaryOpUGen
*unit
, int inNumSamples
);
406 void ring4_aa(BinaryOpUGen
*unit
, int inNumSamples
);
407 void ring4_ak(BinaryOpUGen
*unit
, int inNumSamples
);
408 void ring4_ka(BinaryOpUGen
*unit
, int inNumSamples
);
409 void ring4_ai(BinaryOpUGen
*unit
, int inNumSamples
);
410 void ring4_ia(BinaryOpUGen
*unit
, int inNumSamples
);
411 void thresh_d(BinaryOpUGen
*unit
, int inNumSamples
);
412 void thresh_1(BinaryOpUGen
*unit
, int inNumSamples
);
413 void thresh_aa(BinaryOpUGen
*unit
, int inNumSamples
);
414 void thresh_ak(BinaryOpUGen
*unit
, int inNumSamples
);
415 void thresh_ka(BinaryOpUGen
*unit
, int inNumSamples
);
416 void thresh_ai(BinaryOpUGen
*unit
, int inNumSamples
);
417 void thresh_ia(BinaryOpUGen
*unit
, int inNumSamples
);
418 void clip2_d(BinaryOpUGen
*unit
, int inNumSamples
);
419 void clip2_1(BinaryOpUGen
*unit
, int inNumSamples
);
420 void clip2_aa(BinaryOpUGen
*unit
, int inNumSamples
);
421 void clip2_ak(BinaryOpUGen
*unit
, int inNumSamples
);
422 void clip2_ka(BinaryOpUGen
*unit
, int inNumSamples
);
423 void clip2_ai(BinaryOpUGen
*unit
, int inNumSamples
);
424 void clip2_ia(BinaryOpUGen
*unit
, int inNumSamples
);
425 void fold2_d(BinaryOpUGen
*unit
, int inNumSamples
);
426 void fold2_1(BinaryOpUGen
*unit
, int inNumSamples
);
427 void fold2_aa(BinaryOpUGen
*unit
, int inNumSamples
);
428 void fold2_ak(BinaryOpUGen
*unit
, int inNumSamples
);
429 void fold2_ka(BinaryOpUGen
*unit
, int inNumSamples
);
430 void fold2_ai(BinaryOpUGen
*unit
, int inNumSamples
);
431 void fold2_ia(BinaryOpUGen
*unit
, int inNumSamples
);
432 void wrap2_d(BinaryOpUGen
*unit
, int inNumSamples
);
433 void wrap2_1(BinaryOpUGen
*unit
, int inNumSamples
);
434 void wrap2_aa(BinaryOpUGen
*unit
, int inNumSamples
);
435 void wrap2_ak(BinaryOpUGen
*unit
, int inNumSamples
);
436 void wrap2_ka(BinaryOpUGen
*unit
, int inNumSamples
);
437 void wrap2_ai(BinaryOpUGen
*unit
, int inNumSamples
);
438 void wrap2_ia(BinaryOpUGen
*unit
, int inNumSamples
);
439 void excess_d(BinaryOpUGen
*unit
, int inNumSamples
);
440 void excess_1(BinaryOpUGen
*unit
, int inNumSamples
);
441 void excess_aa(BinaryOpUGen
*unit
, int inNumSamples
);
442 void excess_ak(BinaryOpUGen
*unit
, int inNumSamples
);
443 void excess_ka(BinaryOpUGen
*unit
, int inNumSamples
);
444 void excess_ai(BinaryOpUGen
*unit
, int inNumSamples
);
445 void excess_ia(BinaryOpUGen
*unit
, int inNumSamples
);
446 void lt_d(BinaryOpUGen
*unit
, int inNumSamples
);
447 void lt_1(BinaryOpUGen
*unit
, int inNumSamples
);
448 void lt_aa(BinaryOpUGen
*unit
, int inNumSamples
);
449 void lt_ak(BinaryOpUGen
*unit
, int inNumSamples
);
450 void lt_ka(BinaryOpUGen
*unit
, int inNumSamples
);
451 void lt_ai(BinaryOpUGen
*unit
, int inNumSamples
);
452 void lt_ia(BinaryOpUGen
*unit
, int inNumSamples
);
453 void le_d(BinaryOpUGen
*unit
, int inNumSamples
);
454 void le_1(BinaryOpUGen
*unit
, int inNumSamples
);
455 void le_aa(BinaryOpUGen
*unit
, int inNumSamples
);
456 void le_ak(BinaryOpUGen
*unit
, int inNumSamples
);
457 void le_ka(BinaryOpUGen
*unit
, int inNumSamples
);
458 void le_ai(BinaryOpUGen
*unit
, int inNumSamples
);
459 void le_ia(BinaryOpUGen
*unit
, int inNumSamples
);
460 void gt_d(BinaryOpUGen
*unit
, int inNumSamples
);
461 void gt_1(BinaryOpUGen
*unit
, int inNumSamples
);
462 void gt_aa(BinaryOpUGen
*unit
, int inNumSamples
);
463 void gt_ak(BinaryOpUGen
*unit
, int inNumSamples
);
464 void gt_ka(BinaryOpUGen
*unit
, int inNumSamples
);
465 void gt_ai(BinaryOpUGen
*unit
, int inNumSamples
);
466 void gt_ia(BinaryOpUGen
*unit
, int inNumSamples
);
467 void ge_d(BinaryOpUGen
*unit
, int inNumSamples
);
468 void ge_1(BinaryOpUGen
*unit
, int inNumSamples
);
469 void ge_aa(BinaryOpUGen
*unit
, int inNumSamples
);
470 void ge_ak(BinaryOpUGen
*unit
, int inNumSamples
);
471 void ge_ka(BinaryOpUGen
*unit
, int inNumSamples
);
472 void ge_ai(BinaryOpUGen
*unit
, int inNumSamples
);
473 void ge_ia(BinaryOpUGen
*unit
, int inNumSamples
);
474 void eq_d(BinaryOpUGen
*unit
, int inNumSamples
);
475 void eq_1(BinaryOpUGen
*unit
, int inNumSamples
);
476 void eq_aa(BinaryOpUGen
*unit
, int inNumSamples
);
477 void eq_ak(BinaryOpUGen
*unit
, int inNumSamples
);
478 void eq_ka(BinaryOpUGen
*unit
, int inNumSamples
);
479 void eq_ai(BinaryOpUGen
*unit
, int inNumSamples
);
480 void eq_ia(BinaryOpUGen
*unit
, int inNumSamples
);
481 void neq_d(BinaryOpUGen
*unit
, int inNumSamples
);
482 void neq_1(BinaryOpUGen
*unit
, int inNumSamples
);
483 void neq_aa(BinaryOpUGen
*unit
, int inNumSamples
);
484 void neq_ak(BinaryOpUGen
*unit
, int inNumSamples
);
485 void neq_ka(BinaryOpUGen
*unit
, int inNumSamples
);
486 void neq_ai(BinaryOpUGen
*unit
, int inNumSamples
);
487 void neq_ia(BinaryOpUGen
*unit
, int inNumSamples
);
488 void sumsqr_d(BinaryOpUGen
*unit
, int inNumSamples
);
489 void sumsqr_1(BinaryOpUGen
*unit
, int inNumSamples
);
490 void sumsqr_aa(BinaryOpUGen
*unit
, int inNumSamples
);
491 void sumsqr_ak(BinaryOpUGen
*unit
, int inNumSamples
);
492 void sumsqr_ka(BinaryOpUGen
*unit
, int inNumSamples
);
493 void sumsqr_ai(BinaryOpUGen
*unit
, int inNumSamples
);
494 void sumsqr_ia(BinaryOpUGen
*unit
, int inNumSamples
);
495 void difsqr_d(BinaryOpUGen
*unit
, int inNumSamples
);
496 void difsqr_1(BinaryOpUGen
*unit
, int inNumSamples
);
497 void difsqr_aa(BinaryOpUGen
*unit
, int inNumSamples
);
498 void difsqr_ak(BinaryOpUGen
*unit
, int inNumSamples
);
499 void difsqr_ka(BinaryOpUGen
*unit
, int inNumSamples
);
500 void difsqr_ai(BinaryOpUGen
*unit
, int inNumSamples
);
501 void difsqr_ia(BinaryOpUGen
*unit
, int inNumSamples
);
502 void sqrsum_d(BinaryOpUGen
*unit
, int inNumSamples
);
503 void sqrsum_1(BinaryOpUGen
*unit
, int inNumSamples
);
504 void sqrsum_aa(BinaryOpUGen
*unit
, int inNumSamples
);
505 void sqrsum_ak(BinaryOpUGen
*unit
, int inNumSamples
);
506 void sqrsum_ka(BinaryOpUGen
*unit
, int inNumSamples
);
507 void sqrsum_ai(BinaryOpUGen
*unit
, int inNumSamples
);
508 void sqrsum_ia(BinaryOpUGen
*unit
, int inNumSamples
);
509 void sqrdif_d(BinaryOpUGen
*unit
, int inNumSamples
);
510 void sqrdif_1(BinaryOpUGen
*unit
, int inNumSamples
);
511 void sqrdif_aa(BinaryOpUGen
*unit
, int inNumSamples
);
512 void sqrdif_ak(BinaryOpUGen
*unit
, int inNumSamples
);
513 void sqrdif_ka(BinaryOpUGen
*unit
, int inNumSamples
);
514 void sqrdif_ai(BinaryOpUGen
*unit
, int inNumSamples
);
515 void sqrdif_ia(BinaryOpUGen
*unit
, int inNumSamples
);
516 void absdif_d(BinaryOpUGen
*unit
, int inNumSamples
);
517 void absdif_1(BinaryOpUGen
*unit
, int inNumSamples
);
518 void absdif_aa(BinaryOpUGen
*unit
, int inNumSamples
);
519 void absdif_ak(BinaryOpUGen
*unit
, int inNumSamples
);
520 void absdif_ka(BinaryOpUGen
*unit
, int inNumSamples
);
521 void absdif_ai(BinaryOpUGen
*unit
, int inNumSamples
);
522 void absdif_ia(BinaryOpUGen
*unit
, int inNumSamples
);
523 void round_d(BinaryOpUGen
*unit
, int inNumSamples
);
524 void round_1(BinaryOpUGen
*unit
, int inNumSamples
);
525 void round_aa(BinaryOpUGen
*unit
, int inNumSamples
);
526 void round_ak(BinaryOpUGen
*unit
, int inNumSamples
);
527 void round_ka(BinaryOpUGen
*unit
, int inNumSamples
);
528 void round_ai(BinaryOpUGen
*unit
, int inNumSamples
);
529 void round_ia(BinaryOpUGen
*unit
, int inNumSamples
);
530 void roundUp_d(BinaryOpUGen
*unit
, int inNumSamples
);
531 void roundUp_1(BinaryOpUGen
*unit
, int inNumSamples
);
532 void roundUp_aa(BinaryOpUGen
*unit
, int inNumSamples
);
533 void roundUp_ak(BinaryOpUGen
*unit
, int inNumSamples
);
534 void roundUp_ka(BinaryOpUGen
*unit
, int inNumSamples
);
535 void roundUp_ai(BinaryOpUGen
*unit
, int inNumSamples
);
536 void roundUp_ia(BinaryOpUGen
*unit
, int inNumSamples
);
537 void trunc_d(BinaryOpUGen
*unit
, int inNumSamples
);
538 void trunc_1(BinaryOpUGen
*unit
, int inNumSamples
);
539 void trunc_aa(BinaryOpUGen
*unit
, int inNumSamples
);
540 void trunc_ak(BinaryOpUGen
*unit
, int inNumSamples
);
541 void trunc_ka(BinaryOpUGen
*unit
, int inNumSamples
);
542 void trunc_ai(BinaryOpUGen
*unit
, int inNumSamples
);
543 void trunc_ia(BinaryOpUGen
*unit
, int inNumSamples
);
544 void atan2_d(BinaryOpUGen
*unit
, int inNumSamples
);
545 void atan2_1(BinaryOpUGen
*unit
, int inNumSamples
);
546 void atan2_aa(BinaryOpUGen
*unit
, int inNumSamples
);
547 void atan2_ak(BinaryOpUGen
*unit
, int inNumSamples
);
548 void atan2_ka(BinaryOpUGen
*unit
, int inNumSamples
);
549 void atan2_ai(BinaryOpUGen
*unit
, int inNumSamples
);
550 void atan2_ia(BinaryOpUGen
*unit
, int inNumSamples
);
551 void hypot_d(BinaryOpUGen
*unit
, int inNumSamples
);
552 void hypot_1(BinaryOpUGen
*unit
, int inNumSamples
);
553 void hypot_aa(BinaryOpUGen
*unit
, int inNumSamples
);
554 void hypot_ak(BinaryOpUGen
*unit
, int inNumSamples
);
555 void hypot_ka(BinaryOpUGen
*unit
, int inNumSamples
);
556 void hypot_ai(BinaryOpUGen
*unit
, int inNumSamples
);
557 void hypot_ia(BinaryOpUGen
*unit
, int inNumSamples
);
558 void hypotx_d(BinaryOpUGen
*unit
, int inNumSamples
);
559 void hypotx_1(BinaryOpUGen
*unit
, int inNumSamples
);
560 void hypotx_aa(BinaryOpUGen
*unit
, int inNumSamples
);
561 void hypotx_ak(BinaryOpUGen
*unit
, int inNumSamples
);
562 void hypotx_ka(BinaryOpUGen
*unit
, int inNumSamples
);
563 void hypotx_ai(BinaryOpUGen
*unit
, int inNumSamples
);
564 void hypotx_ia(BinaryOpUGen
*unit
, int inNumSamples
);
567 ////////////////////////////////////////////////////////////////////////////////////////////////////////
569 static bool ChooseOperatorFunc(BinaryOpUGen
*unit
);
571 void BinaryOpUGen_Ctor(BinaryOpUGen
*unit
)
573 unit
->mPrevA
= ZIN0(0);
574 unit
->mPrevB
= ZIN0(1);
575 bool initialized
= ChooseOperatorFunc(unit
);
576 if (unit
->mCalcRate
== calc_DemandRate
) {
580 (unit
->mCalcFunc
)(unit
, 1);
585 void zero_d(BinaryOpUGen *unit, int inNumSamples)
588 float a = DEMANDINPUT_A(0, inNumSamples);
589 float b = DEMANDINPUT_A(1, inNumSamples);
590 OUT0(0) = sc_isnan(a) || sc_isnan(b) ? NAN : 0.f;
598 void firstarg_d(BinaryOpUGen
*unit
, int inNumSamples
)
601 float a
= DEMANDINPUT_A(0, inNumSamples
);
602 float b
= DEMANDINPUT_A(1, inNumSamples
);
603 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
;
610 void secondarg_d(BinaryOpUGen
*unit
, int inNumSamples
)
613 float a
= DEMANDINPUT_A(0, inNumSamples
);
614 float b
= DEMANDINPUT_A(1, inNumSamples
);
615 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: b
;
622 void add_d(BinaryOpUGen
*unit
, int inNumSamples
)
625 float a
= DEMANDINPUT_A(0, inNumSamples
);
626 float b
= DEMANDINPUT_A(1, inNumSamples
);
627 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
+ b
;
634 void sub_d(BinaryOpUGen
*unit
, int inNumSamples
)
637 float a
= DEMANDINPUT_A(0, inNumSamples
);
638 float b
= DEMANDINPUT_A(1, inNumSamples
);
639 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
- b
;
646 void mul_d(BinaryOpUGen
*unit
, int inNumSamples
)
649 float a
= DEMANDINPUT_A(0, inNumSamples
);
650 float b
= DEMANDINPUT_A(1, inNumSamples
);
651 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* b
;
658 void div_d(BinaryOpUGen
*unit
, int inNumSamples
)
661 float a
= DEMANDINPUT_A(0, inNumSamples
);
662 float b
= DEMANDINPUT_A(1, inNumSamples
);
663 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
/ b
;
670 void mod_d(BinaryOpUGen
*unit
, int inNumSamples
)
673 float a
= DEMANDINPUT_A(0, inNumSamples
);
674 float b
= DEMANDINPUT_A(1, inNumSamples
);
675 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_mod(a
, b
);
682 void max_d(BinaryOpUGen
*unit
, int inNumSamples
)
685 float a
= DEMANDINPUT_A(0, inNumSamples
);
686 float b
= DEMANDINPUT_A(1, inNumSamples
);
687 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_max(a
, b
);
694 void min_d(BinaryOpUGen
*unit
, int inNumSamples
)
697 float a
= DEMANDINPUT_A(0, inNumSamples
);
698 float b
= DEMANDINPUT_A(1, inNumSamples
);
699 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_min(a
, b
);
706 void and_d(BinaryOpUGen
*unit
, int inNumSamples
)
709 float a
= DEMANDINPUT_A(0, inNumSamples
);
710 float b
= DEMANDINPUT_A(1, inNumSamples
);
711 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_andt(a
, b
);
718 void or_d(BinaryOpUGen
*unit
, int inNumSamples
)
721 float a
= DEMANDINPUT_A(0, inNumSamples
);
722 float b
= DEMANDINPUT_A(1, inNumSamples
);
723 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_ort(a
, b
);
730 void xor_d(BinaryOpUGen
*unit
, int inNumSamples
)
733 float a
= DEMANDINPUT_A(0, inNumSamples
);
734 float b
= DEMANDINPUT_A(1, inNumSamples
);
735 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_xort(a
, b
);
742 void amclip_d(BinaryOpUGen
*unit
, int inNumSamples
)
745 float a
= DEMANDINPUT_A(0, inNumSamples
);
746 float b
= DEMANDINPUT_A(1, inNumSamples
);
747 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_amclip(a
, b
);
754 void scaleneg_d(BinaryOpUGen
*unit
, int inNumSamples
)
757 float a
= DEMANDINPUT_A(0, inNumSamples
);
758 float b
= DEMANDINPUT_A(1, inNumSamples
);
759 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_scaleneg(a
, b
);
766 void pow_d(BinaryOpUGen
*unit
, int inNumSamples
)
769 float a
= DEMANDINPUT_A(0, inNumSamples
);
770 float b
= DEMANDINPUT_A(1, inNumSamples
);
771 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
< 0.f
? -pow(-a
, b
) : pow(a
, b
));
778 void ring1_d(BinaryOpUGen
*unit
, int inNumSamples
)
781 float a
= DEMANDINPUT_A(0, inNumSamples
);
782 float b
= DEMANDINPUT_A(1, inNumSamples
);
783 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* b
+ a
;
790 void ring2_d(BinaryOpUGen
*unit
, int inNumSamples
)
793 float a
= DEMANDINPUT_A(0, inNumSamples
);
794 float b
= DEMANDINPUT_A(1, inNumSamples
);
795 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* b
+ a
+ b
;
802 void ring3_d(BinaryOpUGen
*unit
, int inNumSamples
)
805 float a
= DEMANDINPUT_A(0, inNumSamples
);
806 float b
= DEMANDINPUT_A(1, inNumSamples
);
807 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* a
* b
;
814 void ring4_d(BinaryOpUGen
*unit
, int inNumSamples
)
817 float a
= DEMANDINPUT_A(0, inNumSamples
);
818 float b
= DEMANDINPUT_A(1, inNumSamples
);
819 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* a
* b
- a
* b
* b
;
826 void thresh_d(BinaryOpUGen
*unit
, int inNumSamples
)
829 float a
= DEMANDINPUT_A(0, inNumSamples
);
830 float b
= DEMANDINPUT_A(1, inNumSamples
);
831 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_thresh(a
, b
);
838 void clip2_d(BinaryOpUGen
*unit
, int inNumSamples
)
841 float a
= DEMANDINPUT_A(0, inNumSamples
);
842 float b
= DEMANDINPUT_A(1, inNumSamples
);
843 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_clip2(a
, b
);
850 void excess_d(BinaryOpUGen
*unit
, int inNumSamples
)
853 float a
= DEMANDINPUT_A(0, inNumSamples
);
854 float b
= DEMANDINPUT_A(1, inNumSamples
);
855 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_excess(a
, b
);
862 void lt_d(BinaryOpUGen
*unit
, int inNumSamples
)
865 float a
= DEMANDINPUT_A(0, inNumSamples
);
866 float b
= DEMANDINPUT_A(1, inNumSamples
);
867 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
< b
? 1.f
: 0.f
);
874 void gt_d(BinaryOpUGen
*unit
, int inNumSamples
)
877 float a
= DEMANDINPUT_A(0, inNumSamples
);
878 float b
= DEMANDINPUT_A(1, inNumSamples
);
879 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
> b
? 1.f
: 0.f
);
886 void le_d(BinaryOpUGen
*unit
, int inNumSamples
)
889 float a
= DEMANDINPUT_A(0, inNumSamples
);
890 float b
= DEMANDINPUT_A(1, inNumSamples
);
891 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
<= b
? 1.f
: 0.f
);
898 void ge_d(BinaryOpUGen
*unit
, int inNumSamples
)
901 float a
= DEMANDINPUT_A(0, inNumSamples
);
902 float b
= DEMANDINPUT_A(1, inNumSamples
);
903 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
>= b
? 1.f
: 0.f
);
910 void eq_d(BinaryOpUGen
*unit
, int inNumSamples
)
913 float a
= DEMANDINPUT_A(0, inNumSamples
);
914 float b
= DEMANDINPUT_A(1, inNumSamples
);
915 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
== b
? 1.f
: 0.f
);
922 void neq_d(BinaryOpUGen
*unit
, int inNumSamples
)
925 float a
= DEMANDINPUT_A(0, inNumSamples
);
926 float b
= DEMANDINPUT_A(1, inNumSamples
);
927 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (a
!= b
? 1.f
: 0.f
);
934 void sumsqr_d(BinaryOpUGen
*unit
, int inNumSamples
)
937 float a
= DEMANDINPUT_A(0, inNumSamples
);
938 float b
= DEMANDINPUT_A(1, inNumSamples
);
939 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* a
+ b
* b
;
946 void difsqr_d(BinaryOpUGen
*unit
, int inNumSamples
)
949 float a
= DEMANDINPUT_A(0, inNumSamples
);
950 float b
= DEMANDINPUT_A(1, inNumSamples
);
951 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: a
* a
- b
* b
;
958 void sqrsum_d(BinaryOpUGen
*unit
, int inNumSamples
)
961 float a
= DEMANDINPUT_A(0, inNumSamples
);
962 float b
= DEMANDINPUT_A(1, inNumSamples
);
964 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (z
= a
+ b
, z
* z
);
971 void sqrdif_d(BinaryOpUGen
*unit
, int inNumSamples
)
974 float a
= DEMANDINPUT_A(0, inNumSamples
);
975 float b
= DEMANDINPUT_A(1, inNumSamples
);
977 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: (z
= a
- b
, z
* z
);
984 void absdif_d(BinaryOpUGen
*unit
, int inNumSamples
)
987 float a
= DEMANDINPUT_A(0, inNumSamples
);
988 float b
= DEMANDINPUT_A(1, inNumSamples
);
989 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: fabs(a
- b
);
996 void round_d(BinaryOpUGen
*unit
, int inNumSamples
)
999 float a
= DEMANDINPUT_A(0, inNumSamples
);
1000 float b
= DEMANDINPUT_A(1, inNumSamples
);
1001 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_round(a
, b
);
1008 void roundUp_d(BinaryOpUGen
*unit
, int inNumSamples
)
1011 float a
= DEMANDINPUT_A(0, inNumSamples
);
1012 float b
= DEMANDINPUT_A(1, inNumSamples
);
1013 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_roundUp(a
, b
);
1020 void trunc_d(BinaryOpUGen
*unit
, int inNumSamples
)
1023 float a
= DEMANDINPUT_A(0, inNumSamples
);
1024 float b
= DEMANDINPUT_A(1, inNumSamples
);
1025 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_trunc(a
, b
);
1032 void fold2_d(BinaryOpUGen
*unit
, int inNumSamples
)
1035 float a
= DEMANDINPUT_A(0, inNumSamples
);
1036 float b
= DEMANDINPUT_A(1, inNumSamples
);
1037 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_fold2(a
, b
);
1044 void wrap2_d(BinaryOpUGen
*unit
, int inNumSamples
)
1047 float a
= DEMANDINPUT_A(0, inNumSamples
);
1048 float b
= DEMANDINPUT_A(1, inNumSamples
);
1049 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_wrap2(a
, b
);
1056 void atan2_d(BinaryOpUGen
*unit
, int inNumSamples
)
1059 float a
= DEMANDINPUT_A(0, inNumSamples
);
1060 float b
= DEMANDINPUT_A(1, inNumSamples
);
1061 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: atan2(a
, b
);
1068 void hypot_d(BinaryOpUGen
*unit
, int inNumSamples
)
1071 float a
= DEMANDINPUT_A(0, inNumSamples
);
1072 float b
= DEMANDINPUT_A(1, inNumSamples
);
1073 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: hypot(a
, b
);
1080 void hypotx_d(BinaryOpUGen
*unit
, int inNumSamples
)
1083 float a
= DEMANDINPUT_A(0, inNumSamples
);
1084 float b
= DEMANDINPUT_A(1, inNumSamples
);
1085 OUT0(0) = sc_isnan(a
) || sc_isnan(b
) ? NAN
: sc_hypotx(a
, b
);
1094 void zero_1(BinaryOpUGen
*unit
, int inNumSamples
)
1099 void firstarg_1(BinaryOpUGen
*unit
, int inNumSamples
)
1104 void secondarg_1(BinaryOpUGen
*unit
, int inNumSamples
)
1109 void add_1(BinaryOpUGen
*unit
, int inNumSamples
)
1111 ZOUT0(0) = ZIN0(0) + ZIN0(1);
1114 void sub_1(BinaryOpUGen
*unit
, int inNumSamples
)
1116 ZOUT0(0) = ZIN0(0) - ZIN0(1);
1119 void mul_1(BinaryOpUGen
*unit
, int inNumSamples
)
1121 ZOUT0(0) = ZIN0(0) * ZIN0(1);
1124 void div_1(BinaryOpUGen
*unit
, int inNumSamples
)
1126 ZOUT0(0) = ZIN0(0) / ZIN0(1);
1129 void mod_1(BinaryOpUGen
*unit
, int inNumSamples
)
1133 ZOUT0(0) = sc_mod(xa
, xb
);
1136 void max_1(BinaryOpUGen
*unit
, int inNumSamples
)
1140 ZOUT0(0) = sc_max(xa
, xb
);
1143 void min_1(BinaryOpUGen
*unit
, int inNumSamples
)
1147 ZOUT0(0) = sc_min(xa
, xb
);
1150 void and_1(BinaryOpUGen
*unit
, int inNumSamples
)
1154 ZOUT0(0) = sc_andt(xa
, xb
);
1157 void or_1(BinaryOpUGen
*unit
, int inNumSamples
)
1161 ZOUT0(0) = sc_ort(xa
, xb
);
1164 void xor_1(BinaryOpUGen
*unit
, int inNumSamples
)
1168 ZOUT0(0) = sc_xort(xa
, xb
);
1171 void amclip_1(BinaryOpUGen
*unit
, int inNumSamples
)
1175 ZOUT0(0) = sc_amclip(xa
, xb
);
1178 void scaleneg_1(BinaryOpUGen
*unit
, int inNumSamples
)
1182 ZOUT0(0) = xa
>= 0.f
? xa
: xa
* xb
;
1185 void pow_1(BinaryOpUGen
*unit
, int inNumSamples
)
1189 ZOUT0(0) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
1193 void ring1_1(BinaryOpUGen
*unit
, int inNumSamples
)
1197 ZOUT0(0) = xa
* xb
+ xa
;
1200 void ring2_1(BinaryOpUGen
*unit
, int inNumSamples
)
1204 ZOUT0(0) = xa
* xb
+ xa
+ xb
;
1207 void ring3_1(BinaryOpUGen
*unit
, int inNumSamples
)
1211 ZOUT0(0) = xa
* xa
* xb
;
1214 void ring4_1(BinaryOpUGen
*unit
, int inNumSamples
)
1218 ZOUT0(0) = xa
* xa
* xb
- xa
* xb
* xb
;
1221 void thresh_1(BinaryOpUGen
*unit
, int inNumSamples
)
1225 ZOUT0(0) = xa
< xb
? 0.f
: xa
;
1228 void clip2_1(BinaryOpUGen
*unit
, int inNumSamples
)
1232 ZOUT0(0) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
1235 void excess_1(BinaryOpUGen
*unit
, int inNumSamples
)
1239 ZOUT0(0) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
1242 void lt_1(BinaryOpUGen
*unit
, int inNumSamples
)
1246 ZOUT0(0) = xa
< xb
? 1.f
: 0.f
;
1249 void le_1(BinaryOpUGen
*unit
, int inNumSamples
)
1253 ZOUT0(0) = xa
<= xb
? 1.f
: 0.f
;
1256 void gt_1(BinaryOpUGen
*unit
, int inNumSamples
)
1260 ZOUT0(0) = xa
> xb
? 1.f
: 0.f
;
1263 void ge_1(BinaryOpUGen
*unit
, int inNumSamples
)
1267 ZOUT0(0) = xa
>= xb
? 1.f
: 0.f
;
1270 void eq_1(BinaryOpUGen
*unit
, int inNumSamples
)
1274 ZOUT0(0) = xa
== xb
? 1.f
: 0.f
;
1277 void neq_1(BinaryOpUGen
*unit
, int inNumSamples
)
1281 ZOUT0(0) = xa
!= xb
? 1.f
: 0.f
;
1285 void sumsqr_1(BinaryOpUGen
*unit
, int inNumSamples
)
1289 ZOUT0(0) = xa
* xa
+ xb
* xb
;
1292 void difsqr_1(BinaryOpUGen
*unit
, int inNumSamples
)
1296 ZOUT0(0) = xa
* xa
- xb
* xb
;
1299 void sqrsum_1(BinaryOpUGen
*unit
, int inNumSamples
)
1303 float sum
= xa
+ xb
;
1304 ZOUT0(0) = sum
* sum
;
1307 void sqrdif_1(BinaryOpUGen
*unit
, int inNumSamples
)
1311 float dif
= xa
- xb
;
1312 ZOUT0(0) = dif
* dif
;
1315 void absdif_1(BinaryOpUGen
*unit
, int inNumSamples
)
1319 ZOUT0(0) = fabs(xa
- xb
);
1322 void round_1(BinaryOpUGen
*unit
, int inNumSamples
)
1326 ZOUT0(0) = sc_round(xa
, xb
);
1329 void roundUp_1(BinaryOpUGen
*unit
, int inNumSamples
)
1333 ZOUT0(0) = sc_roundUp(xa
, xb
);
1336 void trunc_1(BinaryOpUGen
*unit
, int inNumSamples
)
1340 ZOUT0(0) = sc_trunc(xa
, xb
);
1343 void fold2_1(BinaryOpUGen
*unit
, int inNumSamples
)
1347 ZOUT0(0) = sc_fold(xa
, -xb
, xb
);
1350 void wrap2_1(BinaryOpUGen
*unit
, int inNumSamples
)
1354 ZOUT0(0) = sc_wrap(xa
, -xb
, xb
);
1357 void atan2_1(BinaryOpUGen
*unit
, int inNumSamples
)
1361 ZOUT0(0) = atan2(xa
, xb
);
1364 void hypot_1(BinaryOpUGen
*unit
, int inNumSamples
)
1368 ZOUT0(0) = hypot(xa
, xb
);
1371 void hypotx_1(BinaryOpUGen
*unit
, int inNumSamples
)
1375 ZOUT0(0) = sc_hypotx(xa
, xb
);
1380 void zero_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1382 float *out
= OUT(0);
1384 ZClear(inNumSamples
, out
);
1387 void firstarg_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1389 float *out
= OUT(0);
1392 ZCopy(inNumSamples
, out
, a
);
1396 inline_functions
void firstarg_aa_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1398 nova::copyvec_simd(OUT(0), IN(0), inNumSamples
);
1402 void secondarg_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1404 float *out
= OUT(0);
1407 ZCopy(inNumSamples
, out
, b
);
1411 inline_functions
void secondarg_aa_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1413 nova::copyvec_simd(OUT(0), IN(1), inNumSamples
);
1417 void add_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1419 float *out
= ZOUT(0);
1424 ZXP(out
) = ZXP(a
) + ZXP(b
);
1428 void add_ak(BinaryOpUGen
*unit
, int inNumSamples
)
1430 float *out
= ZOUT(0);
1432 float xb
= unit
->mPrevB
;
1433 float next_b
= ZIN0(1);
1437 ZCopy(inNumSamples
, out
, a
);
1439 float *out
= ZOUT(0);
1442 ZXP(out
) = ZXP(a
) + xb
;
1446 float slope
= CALCSLOPE(next_b
, xb
);
1448 ZXP(out
) = ZXP(a
) + xb
;
1456 void add_ka(BinaryOpUGen
*unit
, int inNumSamples
)
1458 float *out
= ZOUT(0);
1459 float xa
= unit
->mPrevA
;
1461 float next_a
= ZIN0(0);
1465 ZCopy(inNumSamples
, out
, b
);
1468 ZXP(out
) = xa
+ ZXP(b
);
1472 float slope
= CALCSLOPE(next_a
, xa
);
1474 ZXP(out
) = xa
+ ZXP(b
);
1481 void add_ia(BinaryOpUGen
*unit
, int inNumSamples
)
1483 float *out
= ZOUT(0);
1488 ZXP(out
) = xa
+ ZXP(b
);
1493 void add_ai(BinaryOpUGen
*unit
, int inNumSamples
)
1495 float *out
= ZOUT(0);
1500 ZXP(out
) = ZXP(a
) + xb
;
1506 NOVA_BINARY_WRAPPER(add
, plus
)
1508 inline_functions
void add_ak_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1510 float xb
= unit
->mPrevB
;
1511 float next_b
= ZIN0(1);
1515 nova::copyvec_simd(OUT(0), IN(0), inNumSamples
);
1517 nova::plus_vec_simd(OUT(0), IN(0), xb
, inNumSamples
);
1519 float slope
= CALCSLOPE(next_b
, xb
);
1520 nova::plus_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1521 unit
->mPrevB
= next_b
;
1525 inline_functions
void add_ak_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1527 float xb
= unit
->mPrevB
;
1528 float next_b
= ZIN0(1);
1532 nova::copyvec_simd
<64>(OUT(0), IN(0));
1534 nova::plus_vec_simd
<64>(OUT(0), IN(0), xb
);
1536 float slope
= CALCSLOPE(next_b
, xb
);
1537 nova::plus_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1538 unit
->mPrevB
= next_b
;
1543 inline_functions
void add_ka_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1545 float xa
= unit
->mPrevA
;
1546 float next_a
= ZIN0(0);
1550 nova::copyvec_simd(OUT(0), IN(1), inNumSamples
);
1552 nova::plus_vec_simd(OUT(0), IN(1), xa
, inNumSamples
);
1554 float slope
= CALCSLOPE(next_a
, xa
);
1555 nova::plus_vec_simd(OUT(0), IN(1), xa
, slope
, inNumSamples
);
1556 unit
->mPrevA
= next_a
;
1560 inline_functions
void add_ka_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1562 float xa
= unit
->mPrevA
;
1563 float next_a
= ZIN0(0);
1567 nova::copyvec_simd
<64>(OUT(0), IN(1));
1569 nova::plus_vec_simd
<64>(OUT(0), IN(1), xa
);
1571 float slope
= CALCSLOPE(next_a
, xa
);
1572 nova::plus_vec_simd(OUT(0), IN(1), xa
, slope
, inNumSamples
);
1573 unit
->mPrevA
= next_a
;
1581 /////////////////////////
1585 void sub_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1587 float *out
= ZOUT(0);
1592 ZXP(out
) = ZXP(a
) - ZXP(b
);
1596 void sub_ak(BinaryOpUGen
*unit
, int inNumSamples
)
1598 float *out
= ZOUT(0);
1600 float xb
= unit
->mPrevB
;
1601 float next_b
= ZIN0(1);
1605 ZCopy(inNumSamples
, out
, a
);
1608 ZXP(out
) = ZXP(a
) - xb
;
1612 float slope
= CALCSLOPE(next_b
, xb
);
1614 ZXP(out
) = ZXP(a
) - xb
;
1621 void sub_ka(BinaryOpUGen
*unit
, int inNumSamples
)
1623 float *out
= ZOUT(0);
1624 float xa
= unit
->mPrevA
;
1626 float next_a
= ZIN0(0);
1630 ZCopy(inNumSamples
, out
, b
);
1633 ZXP(out
) = xa
- ZXP(b
);
1637 float slope
= CALCSLOPE(next_a
, xa
);
1639 ZXP(out
) = xa
- ZXP(b
);
1647 void sub_ia(BinaryOpUGen
*unit
, int inNumSamples
)
1649 float *out
= ZOUT(0);
1654 ZXP(out
) = xa
- ZXP(b
);
1659 void sub_ai(BinaryOpUGen
*unit
, int inNumSamples
)
1661 float *out
= ZOUT(0);
1666 ZXP(out
) = ZXP(a
) - xb
;
1672 NOVA_BINARY_WRAPPER(sub
, minus
)
1674 inline_functions
void sub_ak_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1676 float xb
= unit
->mPrevB
;
1677 float next_b
= ZIN0(1);
1681 nova::copyvec_simd(OUT(0), IN(0), inNumSamples
);
1683 nova::minus_vec_simd(OUT(0), IN(0), xb
, inNumSamples
);
1685 float slope
= CALCSLOPE(next_b
, xb
);
1686 nova::minus_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1687 unit
->mPrevB
= next_b
;
1691 inline_functions
void sub_ak_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1693 float xb
= unit
->mPrevB
;
1694 float next_b
= ZIN0(1);
1698 nova::copyvec_aa_simd
<64>(OUT(0), IN(0));
1700 nova::minus_vec_simd
<64>(OUT(0), IN(0), xb
);
1702 float slope
= CALCSLOPE(next_b
, xb
);
1703 nova::minus_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1704 unit
->mPrevB
= next_b
;
1708 inline_functions
void sub_ka_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1710 float xa
= unit
->mPrevA
;
1711 float next_a
= ZIN0(0);
1715 nova::copyvec_simd(OUT(0), IN(1), inNumSamples
);
1717 nova::minus_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
1719 float slope
= CALCSLOPE(next_a
, xa
);
1720 nova::minus_vec_simd(OUT(0), xa
, slope
, IN(1), inNumSamples
);
1721 unit
->mPrevA
= next_a
;
1725 inline_functions
void sub_ka_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1727 float xa
= unit
->mPrevA
;
1728 float next_a
= ZIN0(0);
1732 nova::copyvec_simd
<64>(OUT(0), IN(1));
1734 nova::minus_vec_simd
<64>(OUT(0), xa
, IN(1));
1736 float slope
= CALCSLOPE(next_a
, xa
);
1737 nova::minus_vec_simd(OUT(0), xa
, slope
, IN(1), inNumSamples
);
1738 unit
->mPrevA
= next_a
;
1746 void mul_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1748 float *out
= ZOUT(0);
1753 ZXP(out
) = ZXP(a
) * ZXP(b
);
1757 void mul_ak(BinaryOpUGen
*unit
, int inNumSamples
)
1759 float *out
= ZOUT(0);
1761 float xb
= unit
->mPrevB
;
1762 float next_b
= ZIN0(1);
1766 ZClear(inNumSamples
, out
);
1767 } else if (xb
== 1.f
) {
1768 ZCopy(inNumSamples
, out
, a
);
1771 ZXP(out
) = ZXP(a
) * xb
;
1775 float slope
= CALCSLOPE(next_b
, xb
);
1777 ZXP(out
) = ZXP(a
) * xb
;
1784 void mul_ka(BinaryOpUGen
*unit
, int inNumSamples
)
1786 float *out
= ZOUT(0);
1787 float xa
= unit
->mPrevA
;
1789 float next_a
= ZIN0(0);
1793 ZClear(inNumSamples
, out
);
1794 } else if (xa
== 1.f
) {
1795 ZCopy(inNumSamples
, out
, b
);
1798 ZXP(out
) = xa
* ZXP(b
);
1802 float slope
= CALCSLOPE(next_a
, xa
);
1804 ZXP(out
) = xa
* ZXP(b
);
1812 void mul_ai(BinaryOpUGen
*unit
, int inNumSamples
)
1814 float *out
= ZOUT(0);
1819 ZXP(out
) = ZXP(a
) * xb
;
1824 void mul_ia(BinaryOpUGen
*unit
, int inNumSamples
)
1826 float *out
= ZOUT(0);
1831 ZXP(out
) = xa
* ZXP(b
);
1837 NOVA_BINARY_WRAPPER(mul
, times
)
1839 inline_functions
void mul_ka_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1841 float xa
= unit
->mPrevA
;
1842 float next_a
= ZIN0(0);
1846 nova::zerovec_simd(OUT(0), inNumSamples
);
1848 nova::copyvec_simd(OUT(0), IN(1), inNumSamples
);
1850 nova::times_vec_simd(OUT(0), IN(1), xa
, inNumSamples
);
1852 float slope
= CALCSLOPE(next_a
, xa
);
1853 unit
->mPrevA
= next_a
;
1855 nova::times_vec_simd(OUT(0), IN(1), xa
, slope
, inNumSamples
);
1859 inline_functions
void mul_ka_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1861 float xa
= unit
->mPrevA
;
1862 float next_a
= ZIN0(0);
1866 nova::zerovec_simd
<64>(OUT(0));
1868 nova::copyvec_simd
<64>(OUT(0), IN(1));
1870 nova::times_vec_simd
<64>(OUT(0), IN(1), xa
);
1872 float slope
= CALCSLOPE(next_a
, xa
);
1873 unit
->mPrevA
= next_a
;
1875 nova::times_vec_simd(OUT(0), IN(1), xa
, slope
, inNumSamples
);
1879 inline_functions
void mul_ak_nova(BinaryOpUGen
*unit
, int inNumSamples
)
1881 float xb
= unit
->mPrevB
;
1882 float next_b
= ZIN0(1);
1886 nova::zerovec_simd(OUT(0), inNumSamples
);
1888 nova::copyvec_simd(OUT(0), IN(0), inNumSamples
);
1890 nova::times_vec_simd(OUT(0), IN(0), xb
, inNumSamples
);
1892 float slope
= CALCSLOPE(next_b
, xb
);
1893 unit
->mPrevB
= next_b
;
1895 nova::times_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1899 inline_functions
void mul_ak_nova_64(BinaryOpUGen
*unit
, int inNumSamples
)
1901 float xb
= unit
->mPrevB
;
1902 float next_b
= ZIN0(1);
1906 nova::zerovec_simd
<64>(OUT(0));
1908 nova::copyvec_simd
<64>(OUT(0), IN(0));
1910 nova::times_vec_simd
<64>(OUT(0), IN(0), xb
);
1912 float slope
= CALCSLOPE(next_b
, xb
);
1913 unit
->mPrevB
= next_b
;
1915 nova::times_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
1922 void div_aa(BinaryOpUGen
*unit
, int inNumSamples
)
1924 float *out
= ZOUT(0);
1929 ZXP(out
) = ZXP(a
) / ZXP(b
);
1933 void div_ak(BinaryOpUGen
*unit
, int inNumSamples
)
1935 float *out
= ZOUT(0);
1937 float xb
= unit
->mPrevB
;
1938 float next_b
= ZIN0(1);
1942 ZClear(inNumSamples
, out
);
1943 } else if (xb
== 1.f
) {
1944 ZCopy(inNumSamples
, out
, a
);
1946 float recip
= 1.f
/ xb
;
1948 ZXP(out
) = ZXP(a
) * recip
;
1952 float slope
= CALCSLOPE(next_b
, xb
);
1954 ZXP(out
) = ZXP(a
) / xb
;
1961 void div_ka(BinaryOpUGen
*unit
, int inNumSamples
)
1963 float *out
= ZOUT(0);
1964 float xa
= unit
->mPrevA
;
1966 float next_a
= ZIN0(0);
1970 ZClear(inNumSamples
, out
);
1973 ZXP(out
) = xa
/ ZXP(b
);
1977 float slope
= CALCSLOPE(next_a
, xa
);
1979 ZXP(out
) = xa
/ ZXP(b
);
1986 void div_ia(BinaryOpUGen
*unit
, int inNumSamples
)
1988 float *out
= ZOUT(0);
1993 ZXP(out
) = xa
/ ZXP(b
);
1999 void div_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2001 float *out
= ZOUT(0);
2005 float rxb
= 1.f
/ xb
;
2007 ZXP(out
) = ZXP(a
) * rxb
;
2013 inline_functions
void div_aa_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2015 nova::over_vec_simd(OUT(0), IN(0), IN(1), inNumSamples
);
2018 inline_functions
void div_ia_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2022 nova::over_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2026 inline_functions
void div_ai_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2030 nova::times_vec_simd(OUT(0), IN(0), 1.f
/xb
, inNumSamples
);
2034 inline_functions
void div_ak_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2036 float xb
= unit
->mPrevB
;
2037 float next_b
= ZIN0(1);
2041 nova::zerovec_simd(OUT(0), inNumSamples
);
2043 nova::copyvec_simd(OUT(0), IN(0), inNumSamples
);
2045 float recip
= 1.f
/ xb
;
2046 nova::times_vec_simd(OUT(0), IN(0), recip
, inNumSamples
);
2049 float slope
= CALCSLOPE(next_b
, xb
);
2050 nova::over_vec_simd(OUT(0), IN(0), xb
, slope
, inNumSamples
);
2051 unit
->mPrevB
= next_b
;
2055 inline_functions
void div_ka_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2057 float xa
= unit
->mPrevA
;
2058 float next_a
= ZIN0(0);
2062 nova::zerovec_simd(OUT(0), inNumSamples
);
2064 nova::over_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2066 float slope
= CALCSLOPE(next_a
, xa
);
2067 nova::over_vec_simd(OUT(0), xa
, slope
, IN(1), inNumSamples
);
2078 void mod_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2080 float *out
= ZOUT(0);
2087 ZXP(out
) = sc_mod(xa
, xb
);
2091 void mod_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2093 float *out
= ZOUT(0);
2095 float xb
= unit
->mPrevB
;
2096 float next_b
= ZIN0(1);
2100 ZCopy(inNumSamples
, out
, a
);
2103 ZXP(out
) = sc_mod(ZXP(a
), xb
);
2107 float slope
= CALCSLOPE(next_b
, xb
);
2109 ZXP(out
) = sc_mod(ZXP(a
), xb
);
2116 void mod_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2118 float *out
= ZOUT(0);
2119 float xa
= unit
->mPrevA
;
2121 float next_a
= ZIN0(0);
2125 ZClear(inNumSamples
, out
);
2128 ZXP(out
) = sc_mod(xa
, ZXP(b
));
2132 float slope
= CALCSLOPE(next_a
, xa
);
2134 ZXP(out
) = sc_mod(xa
, ZXP(b
));
2142 void mod_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2144 float *out
= ZOUT(0);
2149 ZXP(out
) = sc_mod(xa
, ZXP(b
));
2155 void mod_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2157 float *out
= ZOUT(0);
2162 ZXP(out
) = sc_mod(ZXP(a
), xb
);
2169 void max_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2171 float *out
= ZOUT(0);
2178 ZXP(out
) = sc_max(xa
, xb
);
2182 void max_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2184 float *out
= ZOUT(0);
2186 float xb
= unit
->mPrevB
;
2187 float next_b
= ZIN0(1);
2192 ZXP(out
) = sc_max(xa
, xb
);
2195 float slope
= CALCSLOPE(next_b
, xb
);
2198 ZXP(out
) = sc_max(xa
, xb
);
2205 void max_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2207 float *out
= ZOUT(0);
2208 float xa
= unit
->mPrevA
;
2210 float next_a
= ZIN0(0);
2215 ZXP(out
) = sc_max(xa
, xb
);
2218 float slope
= CALCSLOPE(next_a
, xa
);
2221 ZXP(out
) = sc_max(xa
, xb
);
2228 void max_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2230 float *out
= ZOUT(0);
2236 ZXP(out
) = sc_max(xa
, xb
);
2242 void max_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2244 float *out
= ZOUT(0);
2250 ZXP(out
) = sc_max(xa
, xb
);
2256 NOVA_BINARY_WRAPPER_K(max
, max
)
2262 void min_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2264 float *out
= ZOUT(0);
2271 ZXP(out
) = sc_min(xa
, xb
);
2275 void min_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2277 float *out
= ZOUT(0);
2279 float xb
= unit
->mPrevB
;
2280 float next_b
= ZIN0(1);
2285 ZXP(out
) = sc_min(xa
, xb
);
2288 float slope
= CALCSLOPE(next_b
, xb
);
2291 ZXP(out
) = sc_min(xa
, xb
);
2298 void min_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2300 float *out
= ZOUT(0);
2301 float xa
= unit
->mPrevA
;
2303 float next_a
= ZIN0(0);
2308 ZXP(out
) = sc_min(xa
, xb
);
2311 float slope
= CALCSLOPE(next_a
, xa
);
2314 ZXP(out
) = sc_min(xa
, xb
);
2321 void min_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2323 float *out
= ZOUT(0);
2329 ZXP(out
) = sc_min(xa
, xb
);
2335 void min_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2337 float *out
= ZOUT(0);
2343 ZXP(out
) = sc_min(xa
, xb
);
2350 NOVA_BINARY_WRAPPER_K(min
, min
)
2354 void and_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2356 float *out
= ZOUT(0);
2363 ZXP(out
) = sc_andt(xa
, xb
) ;
2367 void and_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2369 float *out
= ZOUT(0);
2371 float xb
= unit
->mPrevB
;
2372 float next_b
= ZIN0(1);
2377 ZXP(out
) = sc_andt(xa
, xb
);
2380 float slope
= CALCSLOPE(next_b
, xb
);
2383 ZXP(out
) = sc_andt(xa
, xb
);
2390 void and_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2392 float *out
= ZOUT(0);
2393 float xa
= unit
->mPrevA
;
2395 float next_a
= ZIN0(0);
2400 ZXP(out
) = sc_andt(xa
, xb
);
2403 float slope
= CALCSLOPE(next_a
, xa
);
2406 ZXP(out
) = sc_andt(xa
, xb
);
2413 void and_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2415 float *out
= ZOUT(0);
2421 ZXP(out
) = sc_andt(xa
, xb
);
2427 void and_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2429 float *out
= ZOUT(0);
2435 ZXP(out
) = sc_andt(xa
, xb
);
2446 void or_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2448 float *out
= ZOUT(0);
2455 ZXP(out
) = sc_ort(xa
, xb
) ;
2459 void or_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2461 float *out
= ZOUT(0);
2463 float xb
= unit
->mPrevB
;
2464 float next_b
= ZIN0(1);
2469 ZXP(out
) = sc_ort(xa
, xb
);
2472 float slope
= CALCSLOPE(next_b
, xb
);
2475 ZXP(out
) = sc_ort(xa
, xb
);
2482 void or_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2484 float *out
= ZOUT(0);
2485 float xa
= unit
->mPrevA
;
2487 float next_a
= ZIN0(0);
2492 ZXP(out
) = sc_ort(xa
, xb
);
2495 float slope
= CALCSLOPE(next_a
, xa
);
2498 ZXP(out
) = sc_ort(xa
, xb
);
2505 void or_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2507 float *out
= ZOUT(0);
2513 ZXP(out
) = sc_ort(xa
, xb
);
2519 void or_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2521 float *out
= ZOUT(0);
2527 ZXP(out
) = sc_ort(xa
, xb
);
2538 void xor_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2540 float *out
= ZOUT(0);
2547 ZXP(out
) = sc_xort(xa
, xb
) ;
2551 void xor_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2553 float *out
= ZOUT(0);
2555 float xb
= unit
->mPrevB
;
2556 float next_b
= ZIN0(1);
2561 ZXP(out
) = sc_xort(xa
, xb
);
2564 float slope
= CALCSLOPE(next_b
, xb
);
2567 ZXP(out
) = sc_xort(xa
, xb
);
2574 void xor_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2576 float *out
= ZOUT(0);
2577 float xa
= unit
->mPrevA
;
2579 float next_a
= ZIN0(0);
2584 ZXP(out
) = sc_ort(xa
, xb
);
2587 float slope
= CALCSLOPE(next_a
, xa
);
2590 ZXP(out
) = sc_xort(xa
, xb
);
2597 void xor_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2599 float *out
= ZOUT(0);
2605 ZXP(out
) = sc_xort(xa
, xb
);
2611 void xor_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2613 float *out
= ZOUT(0);
2619 ZXP(out
) = sc_xort(xa
, xb
);
2626 void amclip_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2628 float *out
= ZOUT(0);
2635 ZXP(out
) = sc_amclip(xa
, xb
);
2639 void amclip_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2641 float *out
= ZOUT(0);
2643 float xb
= unit
->mPrevB
;
2644 float next_b
= ZIN0(1);
2649 ZXP(out
) = ZXP(a
) * xb
;
2652 ZClear(inNumSamples
, out
);
2655 float slope
= CALCSLOPE(next_b
, xb
);
2658 ZXP(out
) = sc_amclip(xa
, xb
);
2665 void amclip_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2667 float *out
= ZOUT(0);
2668 float xa
= unit
->mPrevA
;
2670 float next_a
= ZIN0(0);
2675 ZXP(out
) = sc_amclip(xa
, xb
);
2678 float slope
= CALCSLOPE(next_a
, xa
);
2681 ZXP(out
) = sc_amclip(xa
, xb
);
2688 void amclip_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2690 float *out
= ZOUT(0);
2696 ZXP(out
) = sc_amclip(xa
, xb
);
2702 void amclip_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2704 float *out
= ZOUT(0);
2710 ZXP(out
) = sc_amclip(xa
, xb
);
2717 void scaleneg_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2719 float *out
= ZOUT(0);
2726 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2730 void scaleneg_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2732 float *out
= ZOUT(0);
2734 float xb
= unit
->mPrevB
;
2735 float next_b
= ZIN0(1);
2740 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2743 float slope
= CALCSLOPE(next_b
, xb
);
2746 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2753 void scaleneg_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2755 float *out
= ZOUT(0);
2756 float xa
= unit
->mPrevA
;
2758 float next_a
= ZIN0(0);
2767 ZXP(out
) = xa
* ZXP(b
);
2771 float slope
= CALCSLOPE(next_a
, xa
);
2774 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2781 void scaleneg_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2783 float *out
= ZOUT(0);
2789 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2795 void scaleneg_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2797 float *out
= ZOUT(0);
2803 ZXP(out
) = xa
>= 0.f
? xa
: xa
* xb
;
2811 void pow_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2813 float *out
= ZOUT(0);
2820 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2825 void pow_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2827 float *out
= ZOUT(0);
2829 float xb
= unit
->mPrevB
;
2830 float next_b
= ZIN0(1);
2835 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2838 float slope
= CALCSLOPE(next_b
, xb
);
2841 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2848 void pow_ka(BinaryOpUGen
*unit
, int inNumSamples
)
2850 float *out
= ZOUT(0);
2851 float xa
= unit
->mPrevA
;
2853 float next_a
= ZIN0(0);
2859 ZXP(out
) = pow(xa
, xb
);
2864 ZXP(out
) = -pow(-xa
, xb
);
2868 float slope
= CALCSLOPE(next_a
, xa
);
2871 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2878 void pow_ia(BinaryOpUGen
*unit
, int inNumSamples
)
2880 float *out
= ZOUT(0);
2886 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2892 void pow_ai(BinaryOpUGen
*unit
, int inNumSamples
)
2894 float *out
= ZOUT(0);
2900 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2906 inline_functions
void pow_aa_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2908 nova::spow_vec_simd(OUT(0), IN(0), IN(1), inNumSamples
);
2911 inline_functions
void pow_ak_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2913 float *out
= ZOUT(0);
2915 float xb
= unit
->mPrevB
;
2916 float next_b
= ZIN0(1);
2919 nova::spow_vec_simd(OUT(0), IN(0), xb
, inNumSamples
);
2921 float slope
= CALCSLOPE(next_b
, xb
);
2924 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2931 inline_functions
void pow_ka_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2933 float *out
= ZOUT(0);
2934 float xa
= unit
->mPrevA
;
2936 float next_a
= ZIN0(0);
2940 nova::pow_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2942 nova::spow_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2945 float slope
= CALCSLOPE(next_a
, xa
);
2948 ZXP(out
) = xa
>= 0.f
? pow(xa
, xb
) : -pow(-xa
, xb
);
2956 inline_functions
void pow_ia_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2960 nova::pow_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2962 nova::spow_vec_simd(OUT(0), xa
, IN(1), inNumSamples
);
2967 inline_functions
void pow_ai_nova(BinaryOpUGen
*unit
, int inNumSamples
)
2970 nova::spow_vec_simd(OUT(0), IN(0), xb
, inNumSamples
);
2976 void ring1_aa(BinaryOpUGen
*unit
, int inNumSamples
)
2978 float *out
= ZOUT(0);
2985 ZXP(out
) = xa
* xb
+ xa
;
2989 void ring1_ak(BinaryOpUGen
*unit
, int inNumSamples
)
2991 float *out
= ZOUT(0);
2993 float xb
= unit
->mPrevB
;
2994 float next_b
= ZIN0(1);
2998 ZCopy(inNumSamples
, out
, a
);
2999 } else if (xb
== 1.f
) {
3007 ZXP(out
) = xa
* xb
+ xa
;
3011 float slope
= CALCSLOPE(next_b
, xb
);
3014 ZXP(out
) = xa
* xb
+ xa
;
3021 void ring1_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3023 float *out
= ZOUT(0);
3024 float xa
= unit
->mPrevA
;
3026 float next_a
= ZIN0(0);
3036 ZXP(out
) = xa
* xb
+ xa
;
3040 float slope
= CALCSLOPE(next_a
, xa
);
3043 ZXP(out
) = xa
* xb
+ xa
;
3050 void ring1_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3052 float *out
= ZOUT(0);
3058 ZXP(out
) = xa
* xb
+ xa
;
3064 void ring1_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3066 float *out
= ZOUT(0);
3072 ZXP(out
) = xa
* xb
+ xa
;
3080 void ring2_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3082 float *out
= ZOUT(0);
3089 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3093 void ring2_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3095 float *out
= ZOUT(0);
3097 float xb
= unit
->mPrevB
;
3098 float next_b
= ZIN0(1);
3102 ZCopy(inNumSamples
, out
, a
);
3106 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3110 float slope
= CALCSLOPE(next_b
, xb
);
3113 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3120 void ring2_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3122 float *out
= ZOUT(0);
3123 float xa
= unit
->mPrevA
;
3125 float next_a
= ZIN0(0);
3129 ZCopy(inNumSamples
, out
, b
);
3133 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3137 float slope
= CALCSLOPE(next_a
, xa
);
3140 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3147 void ring2_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3149 float *out
= ZOUT(0);
3155 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3161 void ring2_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3163 float *out
= ZOUT(0);
3169 ZXP(out
) = xa
* xb
+ xa
+ xb
;
3177 void ring3_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3179 float *out
= ZOUT(0);
3186 ZXP(out
) = xa
* xa
* xb
;
3190 void ring3_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3192 float *out
= ZOUT(0);
3194 float xb
= unit
->mPrevB
;
3195 float next_b
= ZIN0(1);
3199 ZClear(inNumSamples
, out
);
3200 } else if (xb
== 1.f
) {
3208 ZXP(out
) = xa
* xa
* xb
;
3212 float slope
= CALCSLOPE(next_b
, xb
);
3215 ZXP(out
) = xa
* xa
* xb
;
3222 void ring3_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3224 float *out
= ZOUT(0);
3225 float xa
= unit
->mPrevA
;
3227 float next_a
= ZIN0(0);
3231 ZClear(inNumSamples
, out
);
3232 } else if (xa
== 1.f
) {
3233 ZCopy(inNumSamples
, out
, b
);
3237 ZXP(out
) = xa
* xa
* xb
;
3241 float slope
= CALCSLOPE(next_a
, xa
);
3244 ZXP(out
) = xa
* xa
* xb
;
3251 void ring3_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3253 float *out
= ZOUT(0);
3259 ZXP(out
) = xa
* xa
* xb
;
3265 void ring3_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3267 float *out
= ZOUT(0);
3273 ZXP(out
) = xa
* xa
* xb
;
3280 void ring4_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3282 float *out
= ZOUT(0);
3289 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3293 void ring4_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3295 float *out
= ZOUT(0);
3297 float xb
= unit
->mPrevB
;
3298 float next_b
= ZIN0(1);
3302 ZClear(inNumSamples
, out
);
3303 } else if (xb
== 1.f
) {
3306 ZXP(out
) = xa
* xa
- xa
;
3311 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3315 float slope
= CALCSLOPE(next_b
, xb
);
3318 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3325 void ring4_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3327 float *out
= ZOUT(0);
3328 float xa
= unit
->mPrevA
;
3330 float next_a
= ZIN0(0);
3334 ZClear(inNumSamples
, out
);
3335 } else if (xa
== 1.f
) {
3338 ZXP(out
) = xb
- xb
* xb
;
3343 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3347 float slope
= CALCSLOPE(next_a
, xa
);
3350 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3357 void ring4_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3359 float *out
= ZOUT(0);
3365 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3371 void ring4_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3373 float *out
= ZOUT(0);
3379 ZXP(out
) = xa
* xa
* xb
- xa
* xb
* xb
;
3386 void thresh_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3388 float *out
= ZOUT(0);
3395 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3399 void thresh_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3401 float *out
= ZOUT(0);
3403 float xb
= unit
->mPrevB
;
3404 float next_b
= ZIN0(1);
3409 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3412 float slope
= CALCSLOPE(next_b
, xb
);
3415 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3422 void thresh_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3424 float *out
= ZOUT(0);
3425 float xa
= unit
->mPrevA
;
3427 float next_a
= ZIN0(0);
3432 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3435 float slope
= CALCSLOPE(next_a
, xa
);
3438 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3445 void thresh_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3447 float *out
= ZOUT(0);
3453 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3459 void thresh_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3461 float *out
= ZOUT(0);
3467 ZXP(out
) = xa
< xb
? 0.f
: xa
;
3474 void clip2_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3476 float *out
= ZOUT(0);
3483 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3487 void clip2_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3489 float *out
= ZOUT(0);
3491 float xb
= unit
->mPrevB
;
3492 float next_b
= ZIN0(1);
3497 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3500 float slope
= CALCSLOPE(next_b
, xb
);
3503 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3510 void clip2_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3512 float *out
= ZOUT(0);
3513 float xa
= unit
->mPrevA
;
3515 float next_a
= ZIN0(0);
3520 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3523 float slope
= CALCSLOPE(next_a
, xa
);
3526 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3533 void clip2_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3535 float *out
= ZOUT(0);
3541 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3547 void clip2_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3549 float *out
= ZOUT(0);
3555 ZXP(out
) = xa
> xb
? xb
: (xa
< -xb
? -xb
: xa
);
3562 NOVA_BINARY_WRAPPER_K(clip2
, clip2
)
3566 void excess_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3568 float *out
= ZOUT(0);
3575 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3579 void excess_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3581 float *out
= ZOUT(0);
3583 float xb
= unit
->mPrevB
;
3584 float next_b
= ZIN0(1);
3589 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3592 float slope
= CALCSLOPE(next_b
, xb
);
3595 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3602 void excess_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3604 float *out
= ZOUT(0);
3605 float xa
= unit
->mPrevA
;
3607 float next_a
= ZIN0(0);
3612 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3615 float slope
= CALCSLOPE(next_a
, xa
);
3618 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3625 void excess_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3627 float *out
= ZOUT(0);
3633 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3639 void excess_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3641 float *out
= ZOUT(0);
3647 ZXP(out
) = xa
> xb
? xa
-xb
: (xa
< -xb
? xa
+xb
: 0.f
);
3654 void lt_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3656 float *out
= ZOUT(0);
3663 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3668 NOVA_BINARY_WRAPPER_K(lt
, less
)
3672 void lt_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3674 float *out
= ZOUT(0);
3676 float xb
= unit
->mPrevB
;
3677 float next_b
= ZIN0(1);
3682 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3685 float slope
= CALCSLOPE(next_b
, xb
);
3688 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3695 void lt_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3697 float *out
= ZOUT(0);
3698 float xa
= unit
->mPrevA
;
3700 float next_a
= ZIN0(0);
3705 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3708 float slope
= CALCSLOPE(next_a
, xa
);
3711 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3718 void lt_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3720 float *out
= ZOUT(0);
3726 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3732 void lt_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3734 float *out
= ZOUT(0);
3740 ZXP(out
) = xa
< xb
? 1.f
: 0.f
;
3747 void le_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3749 float *out
= ZOUT(0);
3756 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3761 NOVA_BINARY_WRAPPER_K(le
, less_equal
)
3764 void le_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3766 float *out
= ZOUT(0);
3768 float xb
= unit
->mPrevB
;
3769 float next_b
= ZIN0(1);
3774 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3777 float slope
= CALCSLOPE(next_b
, xb
);
3780 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3787 void le_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3789 float *out
= ZOUT(0);
3790 float xa
= unit
->mPrevA
;
3792 float next_a
= ZIN0(0);
3797 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3800 float slope
= CALCSLOPE(next_a
, xa
);
3803 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3810 void le_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3812 float *out
= ZOUT(0);
3818 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3824 void le_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3826 float *out
= ZOUT(0);
3832 ZXP(out
) = xa
<= xb
? 1.f
: 0.f
;
3839 void gt_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3841 float *out
= ZOUT(0);
3848 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3853 NOVA_BINARY_WRAPPER_K(gt
, greater
)
3857 void gt_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3859 float *out
= ZOUT(0);
3861 float xb
= unit
->mPrevB
;
3862 float next_b
= ZIN0(1);
3867 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3870 float slope
= CALCSLOPE(next_b
, xb
);
3873 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3880 void gt_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3882 float *out
= ZOUT(0);
3883 float xa
= unit
->mPrevA
;
3885 float next_a
= ZIN0(0);
3890 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3893 float slope
= CALCSLOPE(next_a
, xa
);
3896 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3903 void gt_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3905 float *out
= ZOUT(0);
3911 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3917 void gt_ai(BinaryOpUGen
*unit
, int inNumSamples
)
3919 float *out
= ZOUT(0);
3925 ZXP(out
) = xa
> xb
? 1.f
: 0.f
;
3932 void ge_aa(BinaryOpUGen
*unit
, int inNumSamples
)
3934 float *out
= ZOUT(0);
3941 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
3946 NOVA_BINARY_WRAPPER_K(ge
, greater_equal
)
3950 void ge_ak(BinaryOpUGen
*unit
, int inNumSamples
)
3952 float *out
= ZOUT(0);
3954 float xb
= unit
->mPrevB
;
3955 float next_b
= ZIN0(1);
3960 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
3963 float slope
= CALCSLOPE(next_b
, xb
);
3966 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
3973 void ge_ka(BinaryOpUGen
*unit
, int inNumSamples
)
3975 float *out
= ZOUT(0);
3976 float xa
= unit
->mPrevA
;
3978 float next_a
= ZIN0(0);
3983 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
3986 float slope
= CALCSLOPE(next_a
, xa
);
3989 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
3996 void ge_ia(BinaryOpUGen
*unit
, int inNumSamples
)
3998 float *out
= ZOUT(0);
4004 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
4010 void ge_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4012 float *out
= ZOUT(0);
4018 ZXP(out
) = xa
>= xb
? 1.f
: 0.f
;
4025 void eq_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4027 float *out
= ZOUT(0);
4034 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4039 NOVA_BINARY_WRAPPER_K(eq
, equal
)
4042 void eq_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4044 float *out
= ZOUT(0);
4046 float xb
= unit
->mPrevB
;
4047 float next_b
= ZIN0(1);
4052 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4055 float slope
= CALCSLOPE(next_b
, xb
);
4058 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4065 void eq_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4067 float *out
= ZOUT(0);
4068 float xa
= unit
->mPrevA
;
4070 float next_a
= ZIN0(0);
4075 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4078 float slope
= CALCSLOPE(next_a
, xa
);
4081 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4088 void eq_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4090 float *out
= ZOUT(0);
4096 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4102 void eq_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4104 float *out
= ZOUT(0);
4110 ZXP(out
) = xa
== xb
? 1.f
: 0.f
;
4117 void neq_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4119 float *out
= ZOUT(0);
4126 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4131 NOVA_BINARY_WRAPPER_K(neq
, notequal
)
4135 void neq_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4137 float *out
= ZOUT(0);
4139 float xb
= unit
->mPrevB
;
4140 float next_b
= ZIN0(1);
4145 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4148 float slope
= CALCSLOPE(next_b
, xb
);
4151 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4158 void neq_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4160 float *out
= ZOUT(0);
4161 float xa
= unit
->mPrevA
;
4163 float next_a
= ZIN0(0);
4168 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4171 float slope
= CALCSLOPE(next_a
, xa
);
4174 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4181 void neq_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4183 float *out
= ZOUT(0);
4189 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4195 void neq_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4197 float *out
= ZOUT(0);
4203 ZXP(out
) = xa
!= xb
? 1.f
: 0.f
;
4209 void sumsqr_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4211 float *out
= ZOUT(0);
4218 ZXP(out
) = xa
* xa
+ xb
* xb
;
4222 void sumsqr_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4224 float *out
= ZOUT(0);
4226 float xb
= unit
->mPrevB
;
4227 float next_b
= ZIN0(1);
4232 ZXP(out
) = xa
* xa
+ xb
* xb
;
4235 float slope
= CALCSLOPE(next_b
, xb
);
4238 ZXP(out
) = xa
* xa
+ xb
* xb
;
4245 void sumsqr_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4247 float *out
= ZOUT(0);
4248 float xa
= unit
->mPrevA
;
4250 float next_a
= ZIN0(0);
4255 ZXP(out
) = xa
* xa
+ xb
* xb
;
4258 float slope
= CALCSLOPE(next_a
, xa
);
4261 ZXP(out
) = xa
* xa
+ xb
* xb
;
4269 void sumsqr_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4271 float *out
= ZOUT(0);
4277 ZXP(out
) = xa
* xa
+ xb
* xb
;
4283 void sumsqr_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4285 float *out
= ZOUT(0);
4291 ZXP(out
) = xa
* xa
+ xb
* xb
;
4298 void difsqr_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4300 float *out
= ZOUT(0);
4307 ZXP(out
) = xa
* xa
- xb
* xb
;
4311 void difsqr_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4313 float *out
= ZOUT(0);
4315 float xb
= unit
->mPrevB
;
4316 float next_b
= ZIN0(1);
4321 ZXP(out
) = xa
* xa
- xb
* xb
;
4324 float slope
= CALCSLOPE(next_b
, xb
);
4327 ZXP(out
) = xa
* xa
- xb
* xb
;
4334 void difsqr_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4336 float *out
= ZOUT(0);
4337 float xa
= unit
->mPrevA
;
4339 float next_a
= ZIN0(0);
4344 ZXP(out
) = xa
* xa
- xb
* xb
;
4347 float slope
= CALCSLOPE(next_a
, xa
);
4350 ZXP(out
) = xa
* xa
- xb
* xb
;
4357 void difsqr_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4359 float *out
= ZOUT(0);
4365 ZXP(out
) = xa
* xa
- xb
* xb
;
4371 void difsqr_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4373 float *out
= ZOUT(0);
4379 ZXP(out
) = xa
* xa
- xb
* xb
;
4385 void sqrsum_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4387 float *out
= ZOUT(0);
4392 float sum
= ZXP(a
) + ZXP(b
);
4393 ZXP(out
) = sum
* sum
;
4397 void sqrsum_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4399 float *out
= ZOUT(0);
4401 float xb
= unit
->mPrevB
;
4402 float next_b
= ZIN0(1);
4407 float sum
= xa
+ xb
;
4408 ZXP(out
) = sum
* sum
;
4411 float slope
= CALCSLOPE(next_b
, xb
);
4414 float sum
= xa
+ xb
;
4415 ZXP(out
) = sum
* sum
;
4422 void sqrsum_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4424 float *out
= ZOUT(0);
4425 float xa
= unit
->mPrevA
;
4427 float next_a
= ZIN0(0);
4432 float sum
= xa
+ xb
;
4433 ZXP(out
) = sum
* sum
;
4436 float slope
= CALCSLOPE(next_a
, xa
);
4439 float sum
= xa
+ xb
;
4440 ZXP(out
) = sum
* sum
;
4447 void sqrsum_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4449 float *out
= ZOUT(0);
4455 float sum
= xa
+ xb
;
4456 ZXP(out
) = sum
* sum
;
4462 void sqrsum_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4464 float *out
= ZOUT(0);
4470 float sum
= xa
+ xb
;
4471 ZXP(out
) = sum
* sum
;
4477 void sqrdif_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4479 float *out
= ZOUT(0);
4484 float dif
= ZXP(a
) - ZXP(b
);
4485 ZXP(out
) = dif
* dif
;
4489 void sqrdif_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4491 float *out
= ZOUT(0);
4493 float xb
= unit
->mPrevB
;
4494 float next_b
= ZIN0(1);
4499 float dif
= xa
- xb
;
4500 ZXP(out
) = dif
* dif
;
4503 float slope
= CALCSLOPE(next_b
, xb
);
4506 float dif
= xa
- xb
;
4507 ZXP(out
) = dif
* dif
;
4514 void sqrdif_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4516 float *out
= ZOUT(0);
4517 float xa
= unit
->mPrevA
;
4519 float next_a
= ZIN0(0);
4524 float dif
= xa
- xb
;
4525 ZXP(out
) = dif
* dif
;
4528 float slope
= CALCSLOPE(next_a
, xa
);
4531 float dif
= xa
- xb
;
4532 ZXP(out
) = dif
* dif
;
4540 void sqrdif_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4542 float *out
= ZOUT(0);
4548 float dif
= xa
- xb
;
4549 ZXP(out
) = dif
* dif
;
4555 void sqrdif_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4557 float *out
= ZOUT(0);
4563 float dif
= xa
- xb
;
4564 ZXP(out
) = dif
* dif
;
4570 void absdif_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4572 float *out
= ZOUT(0);
4577 float dif
= ZXP(a
) - ZXP(b
);
4578 ZXP(out
) = fabs(dif
);
4582 void absdif_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4584 float *out
= ZOUT(0);
4586 float xb
= unit
->mPrevB
;
4587 float next_b
= ZIN0(1);
4592 float dif
= xa
- xb
;
4593 ZXP(out
) = fabs(dif
);
4596 float slope
= CALCSLOPE(next_b
, xb
);
4599 float dif
= xa
- xb
;
4600 ZXP(out
) = fabs(dif
);
4607 void absdif_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4609 float *out
= ZOUT(0);
4610 float xa
= unit
->mPrevA
;
4612 float next_a
= ZIN0(0);
4617 float dif
= xa
- xb
;
4618 ZXP(out
) = fabs(dif
);
4621 float slope
= CALCSLOPE(next_a
, xa
);
4624 float dif
= xa
- xb
;
4625 ZXP(out
) = fabs(dif
);
4632 void absdif_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4634 float *out
= ZOUT(0);
4640 float dif
= xa
- xb
;
4641 ZXP(out
) = fabs(dif
);
4647 void absdif_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4649 float *out
= ZOUT(0);
4655 float dif
= xa
- xb
;
4656 ZXP(out
) = fabs(dif
);
4662 void round_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4664 float *out
= ZOUT(0);
4671 ZXP(out
) = sc_round(xa
, xb
);
4675 void round_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4677 float *out
= ZOUT(0);
4679 float xb
= unit
->mPrevB
;
4680 float next_b
= ZIN0(1);
4685 ZXP(out
) = sc_round(xa
, xb
);
4688 float slope
= CALCSLOPE(next_b
, xb
);
4691 ZXP(out
) = sc_round(xa
, xb
);
4698 void round_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4700 float *out
= ZOUT(0);
4701 float xa
= unit
->mPrevA
;
4703 float next_a
= ZIN0(0);
4708 ZXP(out
) = sc_round(xa
, xb
);
4711 float slope
= CALCSLOPE(next_a
, xa
);
4714 ZXP(out
) = sc_round(xa
, xb
);
4722 void round_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4724 float *out
= ZOUT(0);
4730 ZXP(out
) = sc_round(xa
, xb
);
4736 void round_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4738 float *out
= ZOUT(0);
4744 ZXP(out
) = sc_round(xa
, xb
);
4752 void roundUp_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4754 float *out
= ZOUT(0);
4761 ZXP(out
) = sc_roundUp(xa
, xb
);
4765 void roundUp_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4767 float *out
= ZOUT(0);
4769 float xb
= unit
->mPrevB
;
4770 float next_b
= ZIN0(1);
4775 ZXP(out
) = sc_roundUp(xa
, xb
);
4778 float slope
= CALCSLOPE(next_b
, xb
);
4781 ZXP(out
) = sc_roundUp(xa
, xb
);
4788 void roundUp_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4790 float *out
= ZOUT(0);
4791 float xa
= unit
->mPrevA
;
4793 float next_a
= ZIN0(0);
4798 ZXP(out
) = sc_roundUp(xa
, xb
);
4801 float slope
= CALCSLOPE(next_a
, xa
);
4804 ZXP(out
) = sc_roundUp(xa
, xb
);
4812 void roundUp_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4814 float *out
= ZOUT(0);
4820 ZXP(out
) = sc_roundUp(xa
, xb
);
4826 void roundUp_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4828 float *out
= ZOUT(0);
4834 ZXP(out
) = sc_roundUp(xa
, xb
);
4841 void trunc_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4843 float *out
= ZOUT(0);
4850 ZXP(out
) = sc_trunc(xa
, xb
);
4854 void trunc_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4856 float *out
= ZOUT(0);
4858 float xb
= unit
->mPrevB
;
4859 float next_b
= ZIN0(1);
4864 ZXP(out
) = sc_trunc(xa
, xb
);
4867 float slope
= CALCSLOPE(next_b
, xb
);
4870 ZXP(out
) = sc_trunc(xa
, xb
);
4877 void trunc_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4879 float *out
= ZOUT(0);
4880 float xa
= unit
->mPrevA
;
4882 float next_a
= ZIN0(0);
4887 ZXP(out
) = sc_trunc(xa
, xb
);
4890 float slope
= CALCSLOPE(next_a
, xa
);
4893 ZXP(out
) = sc_trunc(xa
, xb
);
4900 void trunc_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4902 float *out
= ZOUT(0);
4908 ZXP(out
) = sc_trunc(xa
, xb
);
4914 void trunc_ai(BinaryOpUGen
*unit
, int inNumSamples
)
4916 float *out
= ZOUT(0);
4922 ZXP(out
) = sc_trunc(xa
, xb
);
4929 void fold2_aa(BinaryOpUGen
*unit
, int inNumSamples
)
4931 float *out
= ZOUT(0);
4938 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
4942 void fold2_ak(BinaryOpUGen
*unit
, int inNumSamples
)
4944 float *out
= ZOUT(0);
4946 float xb
= unit
->mPrevB
;
4947 float next_b
= ZIN0(1);
4952 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
4955 float slope
= CALCSLOPE(next_b
, xb
);
4958 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
4965 void fold2_ka(BinaryOpUGen
*unit
, int inNumSamples
)
4967 float *out
= ZOUT(0);
4968 float xa
= unit
->mPrevA
;
4970 float next_a
= ZIN0(0);
4975 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
4978 float slope
= CALCSLOPE(next_a
, xa
);
4981 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
4988 void fold2_ia(BinaryOpUGen
*unit
, int inNumSamples
)
4990 float *out
= ZOUT(0);
4996 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
5002 void fold2_ai(BinaryOpUGen
*unit
, int inNumSamples
)
5004 float *out
= ZOUT(0);
5010 ZXP(out
) = sc_fold(xa
, -xb
, xb
);
5018 void wrap2_aa(BinaryOpUGen
*unit
, int inNumSamples
)
5020 float *out
= ZOUT(0);
5027 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5031 void wrap2_ak(BinaryOpUGen
*unit
, int inNumSamples
)
5033 float *out
= ZOUT(0);
5035 float xb
= unit
->mPrevB
;
5036 float next_b
= ZIN0(1);
5041 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5044 float slope
= CALCSLOPE(next_b
, xb
);
5047 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5054 void wrap2_ka(BinaryOpUGen
*unit
, int inNumSamples
)
5056 float *out
= ZOUT(0);
5057 float xa
= unit
->mPrevA
;
5059 float next_a
= ZIN0(0);
5064 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5067 float slope
= CALCSLOPE(next_a
, xa
);
5070 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5077 void wrap2_ia(BinaryOpUGen
*unit
, int inNumSamples
)
5079 float *out
= ZOUT(0);
5085 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5091 void wrap2_ai(BinaryOpUGen
*unit
, int inNumSamples
)
5093 float *out
= ZOUT(0);
5099 ZXP(out
) = sc_wrap(xa
, -xb
, xb
);
5106 void atan2_aa(BinaryOpUGen
*unit
, int inNumSamples
)
5108 float *out
= ZOUT(0);
5115 ZXP(out
) = atan2(xa
, xb
);
5119 void atan2_ak(BinaryOpUGen
*unit
, int inNumSamples
)
5121 float *out
= ZOUT(0);
5123 float xb
= unit
->mPrevB
;
5124 float next_b
= ZIN0(1);
5129 ZXP(out
) = atan2(xa
, xb
);
5132 float slope
= CALCSLOPE(next_b
, xb
);
5135 ZXP(out
) = atan2(xa
, xb
);
5142 void atan2_ka(BinaryOpUGen
*unit
, int inNumSamples
)
5144 float *out
= ZOUT(0);
5145 float xa
= unit
->mPrevA
;
5147 float next_a
= ZIN0(0);
5152 ZXP(out
) = atan2(xa
, xb
);
5155 float slope
= CALCSLOPE(next_a
, xa
);
5158 ZXP(out
) = atan2(xa
, xb
);
5165 void atan2_ia(BinaryOpUGen
*unit
, int inNumSamples
)
5167 float *out
= ZOUT(0);
5173 ZXP(out
) = atan2(xa
, xb
);
5179 void atan2_ai(BinaryOpUGen
*unit
, int inNumSamples
)
5181 float *out
= ZOUT(0);
5187 ZXP(out
) = atan2(xa
, xb
);
5193 void hypot_aa(BinaryOpUGen
*unit
, int inNumSamples
)
5195 float *out
= ZOUT(0);
5202 ZXP(out
) = hypotf(xa
, xb
);
5206 void hypot_ak(BinaryOpUGen
*unit
, int inNumSamples
)
5208 float *out
= ZOUT(0);
5210 float xb
= unit
->mPrevB
;
5211 float next_b
= ZIN0(1);
5216 ZXP(out
) = hypotf(xa
, xb
);
5219 float slope
= CALCSLOPE(next_b
, xb
);
5222 ZXP(out
) = hypotf(xa
, xb
);
5229 void hypot_ka(BinaryOpUGen
*unit
, int inNumSamples
)
5231 float *out
= ZOUT(0);
5232 float xa
= unit
->mPrevA
;
5234 float next_a
= ZIN0(0);
5239 ZXP(out
) = hypotf(xa
, xb
);
5242 float slope
= CALCSLOPE(next_a
, xa
);
5245 ZXP(out
) = hypotf(xa
, xb
);
5252 void hypot_ia(BinaryOpUGen
*unit
, int inNumSamples
)
5254 float *out
= ZOUT(0);
5260 ZXP(out
) = hypotf(xa
, xb
);
5266 void hypot_ai(BinaryOpUGen
*unit
, int inNumSamples
)
5268 float *out
= ZOUT(0);
5274 ZXP(out
) = hypotf(xa
, xb
);
5281 void hypotx_aa(BinaryOpUGen
*unit
, int inNumSamples
)
5283 float *out
= ZOUT(0);
5290 ZXP(out
) = sc_hypotx(xa
, xb
);
5294 void hypotx_ak(BinaryOpUGen
*unit
, int inNumSamples
)
5296 float *out
= ZOUT(0);
5298 float xb
= unit
->mPrevB
;
5299 float next_b
= ZIN0(1);
5304 ZXP(out
) = sc_hypotx(xa
, xb
);
5307 float slope
= CALCSLOPE(next_b
, xb
);
5310 ZXP(out
) = sc_hypotx(xa
, xb
);
5317 void hypotx_ka(BinaryOpUGen
*unit
, int inNumSamples
)
5319 float *out
= ZOUT(0);
5320 float xa
= unit
->mPrevA
;
5322 float next_a
= ZIN0(0);
5327 ZXP(out
) = sc_hypotx(xa
, xb
);
5330 float slope
= CALCSLOPE(next_a
, xa
);
5333 ZXP(out
) = sc_hypotx(xa
, xb
);
5340 void hypotx_ia(BinaryOpUGen
*unit
, int inNumSamples
)
5342 float *out
= ZOUT(0);
5348 ZXP(out
) = sc_hypotx(xa
, xb
);
5354 void hypotx_ai(BinaryOpUGen
*unit
, int inNumSamples
)
5356 float *out
= ZOUT(0);
5362 ZXP(out
) = sc_hypotx(xa
, xb
);
5367 static BinaryOpFunc
ChooseOneSampleFunc(BinaryOpUGen
*unit
)
5369 BinaryOpFunc func
= &zero_1
;
5371 switch (unit
->mSpecialIndex
) {
5372 //case opSilence2 : func = &zero_1; break;
5373 case opAdd
: func
= &add_1
; break;
5374 case opSub
: func
= &sub_1
; break;
5375 case opMul
: func
= &mul_1
; break;
5376 case opFDiv
: func
= &div_1
; break;
5377 case opMod
: func
= &mod_1
; break;
5378 case opEQ
: func
= &eq_1
; break;
5379 case opNE
: func
= &neq_1
; break;
5380 case opLT
: func
= <_1
; break;
5381 case opGT
: func
= >_1
; break;
5382 case opLE
: func
= &le_1
; break;
5383 case opGE
: func
= &ge_1
; break;
5384 case opMin
: func
= &min_1
; break;
5385 case opMax
: func
= &max_1
; break;
5386 case opBitAnd
: func
= &and_1
; break;
5387 case opBitOr
: func
= &or_1
; break;
5388 case opBitXor
: func
= &xor_1
; break;
5389 case opRound
: func
= &round_1
; break;
5390 case opRoundUp
: func
= &roundUp_1
; break;
5391 case opTrunc
: func
= &trunc_1
; break;
5392 case opAtan2
: func
= &atan2_1
; break;
5393 case opHypot
: func
= &hypot_1
; break;
5394 case opHypotx
: func
= &hypotx_1
; break;
5395 case opPow
: func
= &pow_1
; break;
5396 case opRing1
: func
= &ring1_1
; break;
5397 case opRing2
: func
= &ring2_1
; break;
5398 case opRing3
: func
= &ring3_1
; break;
5399 case opRing4
: func
= &ring4_1
; break;
5400 case opDifSqr
: func
= &difsqr_1
; break;
5401 case opSumSqr
: func
= &sumsqr_1
; break;
5402 case opSqrSum
: func
= &sqrsum_1
; break;
5403 case opSqrDif
: func
= &sqrdif_1
; break;
5404 case opAbsDif
: func
= &absdif_1
; break;
5405 case opThresh
: func
= &thresh_1
; break;
5406 case opAMClip
: func
= &amclip_1
; break;
5407 case opScaleNeg
: func
= &scaleneg_1
; break;
5408 case opClip2
: func
= &clip2_1
; break;
5409 case opFold2
: func
= &fold2_1
; break;
5410 case opWrap2
: func
= &wrap2_1
; break;
5411 case opExcess
: func
= &excess_1
; break;
5412 case opFirstArg
: func
= &firstarg_1
; break;
5413 //case opSecondArg : func = &secondarg_1; break;
5414 default : func
= &add_1
; break;
5420 static BinaryOpFunc
ChooseDemandFunc(BinaryOpUGen
*unit
)
5422 BinaryOpFunc func
= &zero_1
;
5424 switch (unit
->mSpecialIndex
) {
5425 //case opSilence2 : func = &zero_d; break;
5426 case opAdd
: func
= &add_d
; break;
5427 case opSub
: func
= &sub_d
; break;
5428 case opMul
: func
= &mul_d
; break;
5429 case opFDiv
: func
= &div_d
; break;
5430 case opMod
: func
= &mod_d
; break;
5431 case opEQ
: func
= &eq_d
; break;
5432 case opNE
: func
= &neq_d
; break;
5433 case opLT
: func
= <_d
; break;
5434 case opGT
: func
= >_d
; break;
5435 case opLE
: func
= &le_d
; break;
5436 case opGE
: func
= &ge_d
; break;
5437 case opMin
: func
= &min_d
; break;
5438 case opMax
: func
= &max_d
; break;
5439 case opBitAnd
: func
= &and_d
; break;
5440 case opBitOr
: func
= &or_d
; break;
5441 case opBitXor
: func
= &xor_d
; break;
5442 case opRound
: func
= &round_d
; break;
5443 case opRoundUp
: func
= &roundUp_d
; break;
5444 case opTrunc
: func
= &trunc_d
; break;
5445 case opAtan2
: func
= &atan2_d
; break;
5446 case opHypot
: func
= &hypot_d
; break;
5447 case opHypotx
: func
= &hypotx_d
; break;
5448 case opPow
: func
= &pow_d
; break;
5449 case opRing1
: func
= &ring1_d
; break;
5450 case opRing2
: func
= &ring2_d
; break;
5451 case opRing3
: func
= &ring3_d
; break;
5452 case opRing4
: func
= &ring4_d
; break;
5453 case opDifSqr
: func
= &difsqr_d
; break;
5454 case opSumSqr
: func
= &sumsqr_d
; break;
5455 case opSqrSum
: func
= &sqrsum_d
; break;
5456 case opSqrDif
: func
= &sqrdif_d
; break;
5457 case opAbsDif
: func
= &absdif_d
; break;
5458 case opThresh
: func
= &thresh_d
; break;
5459 case opAMClip
: func
= &amclip_d
; break;
5460 case opScaleNeg
: func
= &scaleneg_d
; break;
5461 case opClip2
: func
= &clip2_d
; break;
5462 case opFold2
: func
= &fold2_d
; break;
5463 case opWrap2
: func
= &wrap2_d
; break;
5464 case opExcess
: func
= &excess_d
; break;
5465 case opFirstArg
: func
= &firstarg_d
; break;
5466 //case opSecondArg : func = &secondarg_d; break;
5467 default : func
= &add_d
; break;
5473 static BinaryOpFunc
ChooseNormalFunc(BinaryOpUGen
*unit
)
5475 BinaryOpFunc func
= &zero_1
;
5477 int rateA
= INRATE(0);
5478 int rateB
= INRATE(1);
5484 switch (unit
->mSpecialIndex
) {
5485 //case opSilence2 : func = &zero_aa; break;
5486 case opAdd
: func
= &add_aa
; break;
5487 case opSub
: func
= &sub_aa
; break;
5488 case opMul
: func
= &mul_aa
; break;
5489 case opFDiv
: func
= &div_aa
; break;
5490 case opMod
: func
= &mod_aa
; break;
5491 case opEQ
: func
= &eq_aa
; break;
5492 case opNE
: func
= &neq_aa
; break;
5493 case opLT
: func
= <_aa
; break;
5494 case opGT
: func
= >_aa
; break;
5495 case opLE
: func
= &le_aa
; break;
5496 case opGE
: func
= &ge_aa
; break;
5497 case opMin
: func
= &min_aa
; break;
5498 case opMax
: func
= &max_aa
; break;
5499 case opBitAnd
: func
= &and_aa
; break;
5500 case opBitOr
: func
= &or_aa
; break;
5501 case opBitXor
: func
= &xor_aa
; break;
5502 case opRound
: func
= &round_aa
; break;
5503 case opRoundUp
: func
= &roundUp_aa
; break;
5504 case opTrunc
: func
= &trunc_aa
; break;
5505 case opAtan2
: func
= &atan2_aa
; break;
5506 case opHypot
: func
= &hypot_aa
; break;
5507 case opHypotx
: func
= &hypotx_aa
; break;
5508 case opPow
: func
= &pow_aa
; break;
5509 case opRing1
: func
= &ring1_aa
; break;
5510 case opRing2
: func
= &ring2_aa
; break;
5511 case opRing3
: func
= &ring3_aa
; break;
5512 case opRing4
: func
= &ring4_aa
; break;
5513 case opDifSqr
: func
= &difsqr_aa
; break;
5514 case opSumSqr
: func
= &sumsqr_aa
; break;
5515 case opSqrSum
: func
= &sqrsum_aa
; break;
5516 case opSqrDif
: func
= &sqrdif_aa
; break;
5517 case opAbsDif
: func
= &absdif_aa
; break;
5518 case opThresh
: func
= &thresh_aa
; break;
5519 case opAMClip
: func
= &amclip_aa
; break;
5520 case opScaleNeg
: func
= &scaleneg_aa
; break;
5521 case opClip2
: func
= &clip2_aa
; break;
5522 case opFold2
: func
= &fold2_aa
; break;
5523 case opWrap2
: func
= &wrap2_aa
; break;
5524 case opExcess
: func
= &excess_aa
; break;
5525 case opFirstArg
: func
= &firstarg_aa
; break;
5526 //case opSecondArg : func = &secondarg_aa; break;
5527 default : func
= &add_aa
; break;
5531 switch (unit
->mSpecialIndex
) {
5532 //case opSilence2 : func = &zero_aa; break;
5533 case opAdd
: func
= &add_ak
; break;
5534 case opSub
: func
= &sub_ak
; break;
5535 case opMul
: func
= &mul_ak
; break;
5536 case opFDiv
: func
= &div_ak
; break;
5537 case opMod
: func
= &mod_ak
; break;
5538 case opEQ
: func
= &eq_ak
; break;
5539 case opNE
: func
= &neq_ak
; break;
5540 case opLT
: func
= <_ak
; break;
5541 case opGT
: func
= >_ak
; break;
5542 case opLE
: func
= &le_ak
; break;
5543 case opGE
: func
= &ge_ak
; break;
5544 case opMin
: func
= &min_ak
; break;
5545 case opMax
: func
= &max_ak
; break;
5546 case opBitAnd
: func
= &and_ak
; break;
5547 case opBitOr
: func
= &or_ak
; break;
5548 case opBitXor
: func
= &xor_ak
; break;
5549 case opRound
: func
= &round_ak
; break;
5550 case opRoundUp
: func
= &roundUp_ak
; break;
5551 case opTrunc
: func
= &trunc_ak
; break;
5552 case opAtan2
: func
= &atan2_ak
; break;
5553 case opHypot
: func
= &hypot_ak
; break;
5554 case opHypotx
: func
= &hypotx_ak
; break;
5555 case opPow
: func
= &pow_ak
; break;
5556 case opRing1
: func
= &ring1_ak
; break;
5557 case opRing2
: func
= &ring2_ak
; break;
5558 case opRing3
: func
= &ring3_ak
; break;
5559 case opRing4
: func
= &ring4_ak
; break;
5560 case opDifSqr
: func
= &difsqr_ak
; break;
5561 case opSumSqr
: func
= &sumsqr_ak
; break;
5562 case opSqrSum
: func
= &sqrsum_ak
; break;
5563 case opSqrDif
: func
= &sqrdif_ak
; break;
5564 case opAbsDif
: func
= &absdif_ak
; break;
5565 case opThresh
: func
= &thresh_ak
; break;
5566 case opAMClip
: func
= &amclip_ak
; break;
5567 case opScaleNeg
: func
= &scaleneg_ak
; break;
5568 case opClip2
: func
= &clip2_ak
; break;
5569 case opFold2
: func
= &fold2_ak
; break;
5570 case opWrap2
: func
= &wrap2_ak
; break;
5571 case opExcess
: func
= &excess_ak
; break;
5572 case opFirstArg
: func
= &firstarg_aa
; break;
5573 //case opSecondArg : func = &secondarg_aa; break;
5574 default : func
= &add_ak
; break;
5577 case calc_ScalarRate
:
5578 switch (unit
->mSpecialIndex
) {
5579 //case opSilence2 : func = &zero_aa; break;
5580 case opAdd
: func
= &add_ai
; break;
5581 case opSub
: func
= &sub_ai
; break;
5582 case opMul
: func
= &mul_ai
; break;
5583 case opFDiv
: func
= &div_ai
; break;
5584 case opMod
: func
= &mod_ai
; break;
5585 case opEQ
: func
= &eq_ai
; break;
5586 case opNE
: func
= &neq_ai
; break;
5587 case opLT
: func
= <_ai
; break;
5588 case opGT
: func
= >_ai
; break;
5589 case opLE
: func
= &le_ai
; break;
5590 case opGE
: func
= &ge_ai
; break;
5591 case opMin
: func
= &min_ai
; break;
5592 case opMax
: func
= &max_ai
; break;
5593 case opBitAnd
: func
= &and_ai
; break;
5594 case opBitOr
: func
= &or_ai
; break;
5595 case opBitXor
: func
= &xor_ai
; break;
5596 case opRound
: func
= &round_ai
; break;
5597 case opRoundUp
: func
= &roundUp_ai
; break;
5598 case opTrunc
: func
= &trunc_ai
; break;
5599 case opAtan2
: func
= &atan2_ai
; break;
5600 case opHypot
: func
= &hypot_ai
; break;
5601 case opHypotx
: func
= &hypotx_ai
; break;
5602 case opPow
: func
= &pow_ai
; break;
5603 case opRing1
: func
= &ring1_ai
; break;
5604 case opRing2
: func
= &ring2_ai
; break;
5605 case opRing3
: func
= &ring3_ai
; break;
5606 case opRing4
: func
= &ring4_ai
; break;
5607 case opDifSqr
: func
= &difsqr_ai
; break;
5608 case opSumSqr
: func
= &sumsqr_ai
; break;
5609 case opSqrSum
: func
= &sqrsum_ai
; break;
5610 case opSqrDif
: func
= &sqrdif_ai
; break;
5611 case opAbsDif
: func
= &absdif_ai
; break;
5612 case opThresh
: func
= &thresh_ai
; break;
5613 case opAMClip
: func
= &amclip_ai
; break;
5614 case opScaleNeg
: func
= &scaleneg_ai
; break;
5615 case opClip2
: func
= &clip2_ai
; break;
5616 case opFold2
: func
= &fold2_ai
; break;
5617 case opWrap2
: func
= &wrap2_ai
; break;
5618 case opExcess
: func
= &excess_ai
; break;
5619 case opFirstArg
: func
= &firstarg_aa
; break;
5620 //case opSecondArg : func = &secondarg_aa; break;
5621 default : func
= &add_ai
; break;
5626 if (rateB
== calc_FullRate
) {
5627 switch (unit
->mSpecialIndex
) {
5628 //case opSilence2 : func = &zero_aa; break;
5629 case opAdd
: func
= &add_ka
; break;
5630 case opSub
: func
= &sub_ka
; break;
5631 case opMul
: func
= &mul_ka
; break;
5632 case opFDiv
: func
= &div_ka
; break;
5633 case opMod
: func
= &mod_ka
; break;
5634 case opEQ
: func
= &eq_ka
; break;
5635 case opNE
: func
= &neq_ka
; break;
5636 case opLT
: func
= <_ka
; break;
5637 case opGT
: func
= >_ka
; break;
5638 case opLE
: func
= &le_ka
; break;
5639 case opGE
: func
= &ge_ka
; break;
5640 case opMin
: func
= &min_ka
; break;
5641 case opMax
: func
= &max_ka
; break;
5642 case opBitAnd
: func
= &and_ka
; break;
5643 case opBitOr
: func
= &or_ka
; break;
5644 case opBitXor
: func
= &xor_ka
; break;
5645 case opRound
: func
= &round_ka
; break;
5646 case opRoundUp
: func
= &roundUp_ka
; break;
5647 case opTrunc
: func
= &trunc_ka
; break;
5648 case opAtan2
: func
= &atan2_ka
; break;
5649 case opHypot
: func
= &hypot_ka
; break;
5650 case opHypotx
: func
= &hypotx_ka
; break;
5651 case opPow
: func
= &pow_ka
; break;
5652 case opRing1
: func
= &ring1_ka
; break;
5653 case opRing2
: func
= &ring2_ka
; break;
5654 case opRing3
: func
= &ring3_ka
; break;
5655 case opRing4
: func
= &ring4_ka
; break;
5656 case opDifSqr
: func
= &difsqr_ka
; break;
5657 case opSumSqr
: func
= &sumsqr_ka
; break;
5658 case opSqrSum
: func
= &sqrsum_ka
; break;
5659 case opSqrDif
: func
= &sqrdif_ka
; break;
5660 case opAbsDif
: func
= &absdif_ka
; break;
5661 case opThresh
: func
= &thresh_ka
; break;
5662 case opAMClip
: func
= &amclip_ka
; break;
5663 case opScaleNeg
: func
= &scaleneg_ka
; break;
5664 case opClip2
: func
= &clip2_ka
; break;
5665 case opFold2
: func
= &fold2_ka
; break;
5666 case opWrap2
: func
= &wrap2_ka
; break;
5667 case opExcess
: func
= &excess_ka
; break;
5668 //case opFirstArg : func = &firstarg_aa; break;
5669 //case opSecondArg : func = &secondarg_aa; break;
5670 default : func
= &add_ka
; break;
5673 // this should have been caught by mBufLength == 1
5677 case calc_ScalarRate
:
5678 if (rateB
== calc_FullRate
) {
5679 switch (unit
->mSpecialIndex
) {
5680 //case opSilence2 : func = &zero_aa; break;
5681 case opAdd
: func
= &add_ia
; break;
5682 case opSub
: func
= &sub_ia
; break;
5683 case opMul
: func
= &mul_ia
; break;
5684 case opFDiv
: func
= &div_ia
; break;
5685 case opMod
: func
= &mod_ia
; break;
5686 case opEQ
: func
= &eq_ia
; break;
5687 case opNE
: func
= &neq_ia
; break;
5688 case opLT
: func
= <_ia
; break;
5689 case opGT
: func
= >_ia
; break;
5690 case opLE
: func
= &le_ia
; break;
5691 case opGE
: func
= &ge_ia
; break;
5692 case opMin
: func
= &min_ia
; break;
5693 case opMax
: func
= &max_ia
; break;
5694 case opBitAnd
: func
= &and_ia
; break;
5695 case opBitOr
: func
= &or_ia
; break;
5696 case opBitXor
: func
= &xor_ia
; break;
5697 case opRound
: func
= &round_ia
; break;
5698 case opRoundUp
: func
= &roundUp_ia
; break;
5699 case opTrunc
: func
= &trunc_ia
; break;
5700 case opAtan2
: func
= &atan2_ia
; break;
5701 case opHypot
: func
= &hypot_ia
; break;
5702 case opHypotx
: func
= &hypotx_ia
; break;
5703 case opPow
: func
= &pow_ia
; break;
5704 case opRing1
: func
= &ring1_ia
; break;
5705 case opRing2
: func
= &ring2_ia
; break;
5706 case opRing3
: func
= &ring3_ia
; break;
5707 case opRing4
: func
= &ring4_ia
; break;
5708 case opDifSqr
: func
= &difsqr_ia
; break;
5709 case opSumSqr
: func
= &sumsqr_ia
; break;
5710 case opSqrSum
: func
= &sqrsum_ia
; break;
5711 case opSqrDif
: func
= &sqrdif_ia
; break;
5712 case opAbsDif
: func
= &absdif_ia
; break;
5713 case opThresh
: func
= &thresh_ia
; break;
5714 case opAMClip
: func
= &amclip_ia
; break;
5715 case opScaleNeg
: func
= &scaleneg_ia
; break;
5716 case opClip2
: func
= &clip2_ia
; break;
5717 case opFold2
: func
= &fold2_ia
; break;
5718 case opWrap2
: func
= &wrap2_ia
; break;
5719 case opExcess
: func
= &excess_ia
; break;
5720 //case opFirstArg : func = &firstarg_aa; break;
5721 //case opSecondArg : func = &secondarg_aa; break;
5722 default : func
= &add_ia
; break;
5725 // this should have been caught by mBufLength == 1
5735 static BinaryOpFunc
ChooseNovaSimdFunc_64(BinaryOpUGen
*unit
)
5737 BinaryOpFunc func
= &zero_1
;
5739 int rateA
= INRATE(0);
5740 int rateB
= INRATE(1);
5746 switch (unit
->mSpecialIndex
) {
5747 //case opSilence2 : func = &zero_aa; break;
5748 case opAdd
: func
= &add_aa_nova_64
; break;
5749 case opSub
: func
= &sub_aa_nova_64
; break;
5750 case opMul
: func
= &mul_aa_nova_64
; break;
5751 case opFDiv
: func
= &div_aa_nova
; break;
5752 case opMod
: func
= &mod_aa
; break;
5753 case opEQ
: func
= &eq_aa_nova_64
; break;
5754 case opNE
: func
= &neq_aa_nova_64
; break;
5755 case opLT
: func
= <_aa_nova_64
; break;
5756 case opGT
: func
= >_aa_nova_64
; break;
5757 case opLE
: func
= &le_aa_nova_64
; break;
5758 case opGE
: func
= &ge_aa_nova_64
; break;
5759 case opMin
: func
= &min_aa_nova_64
; break;
5760 case opMax
: func
= &max_aa_nova_64
; break;
5761 case opBitAnd
: func
= &and_aa
; break;
5762 case opBitOr
: func
= &or_aa
; break;
5763 case opBitXor
: func
= &xor_aa
; break;
5764 case opRound
: func
= &round_aa
; break;
5765 case opRoundUp
: func
= &roundUp_aa
; break;
5766 case opTrunc
: func
= &trunc_aa
; break;
5767 case opAtan2
: func
= &atan2_aa
; break;
5768 case opHypot
: func
= &hypot_aa
; break;
5769 case opHypotx
: func
= &hypotx_aa
; break;
5770 case opPow
: func
= &pow_aa_nova
; break;
5771 case opRing1
: func
= &ring1_aa
; break;
5772 case opRing2
: func
= &ring2_aa
; break;
5773 case opRing3
: func
= &ring3_aa
; break;
5774 case opRing4
: func
= &ring4_aa
; break;
5775 case opDifSqr
: func
= &difsqr_aa
; break;
5776 case opSumSqr
: func
= &sumsqr_aa
; break;
5777 case opSqrSum
: func
= &sqrsum_aa
; break;
5778 case opSqrDif
: func
= &sqrdif_aa
; break;
5779 case opAbsDif
: func
= &absdif_aa
; break;
5780 case opThresh
: func
= &thresh_aa
; break;
5781 case opAMClip
: func
= &amclip_aa
; break;
5782 case opScaleNeg
: func
= &scaleneg_aa
; break;
5783 case opClip2
: func
= &clip2_aa_nova_64
; break;
5784 case opFold2
: func
= &fold2_aa
; break;
5785 case opWrap2
: func
= &wrap2_aa
; break;
5786 case opExcess
: func
= &excess_aa
; break;
5787 case opFirstArg
: func
= &firstarg_aa_nova
; break;
5788 //case opSecondArg : func = &secondarg_aa_nova; break;
5789 default : func
= &add_aa
; break;
5793 switch (unit
->mSpecialIndex
) {
5794 //case opSilence2 : func = &zero_aa; break;
5795 case opAdd
: func
= &add_ak_nova_64
; break;
5796 case opSub
: func
= &sub_ak_nova_64
; break;
5797 case opMul
: func
= &mul_ak_nova_64
; break;
5798 case opFDiv
: func
= &div_ak_nova
; break;
5799 case opMod
: func
= &mod_ak
; break;
5800 case opEQ
: func
= &eq_ak_nova_64
; break;
5801 case opNE
: func
= &neq_ak_nova_64
; break;
5802 case opLT
: func
= <_ak_nova_64
; break;
5803 case opGT
: func
= >_ak_nova_64
; break;
5804 case opLE
: func
= &le_ak_nova_64
; break;
5805 case opGE
: func
= &ge_ak_nova_64
; break;
5806 case opMin
: func
= &min_ak_nova_64
; break;
5807 case opMax
: func
= &max_ak_nova_64
; break;
5808 case opBitAnd
: func
= &and_ak
; break;
5809 case opBitOr
: func
= &or_ak
; break;
5810 case opBitXor
: func
= &xor_ak
; break;
5811 case opRound
: func
= &round_ak
; break;
5812 case opRoundUp
: func
= &roundUp_ak
; break;
5813 case opTrunc
: func
= &trunc_ak
; break;
5814 case opAtan2
: func
= &atan2_ak
; break;
5815 case opHypot
: func
= &hypot_ak
; break;
5816 case opHypotx
: func
= &hypotx_ak
; break;
5817 case opPow
: func
= &pow_ak_nova
; break;
5818 case opRing1
: func
= &ring1_ak
; break;
5819 case opRing2
: func
= &ring2_ak
; break;
5820 case opRing3
: func
= &ring3_ak
; break;
5821 case opRing4
: func
= &ring4_ak
; break;
5822 case opDifSqr
: func
= &difsqr_ak
; break;
5823 case opSumSqr
: func
= &sumsqr_ak
; break;
5824 case opSqrSum
: func
= &sqrsum_ak
; break;
5825 case opSqrDif
: func
= &sqrdif_ak
; break;
5826 case opAbsDif
: func
= &absdif_ak
; break;
5827 case opThresh
: func
= &thresh_ak
; break;
5828 case opAMClip
: func
= &amclip_ak
; break;
5829 case opScaleNeg
: func
= &scaleneg_ak
; break;
5830 case opClip2
: func
= &clip2_ak_nova_64
; break;
5831 case opFold2
: func
= &fold2_ak
; break;
5832 case opWrap2
: func
= &wrap2_ak
; break;
5833 case opExcess
: func
= &excess_ak
; break;
5834 case opFirstArg
: func
= &firstarg_aa
; break;
5835 //case opSecondArg : func = &secondarg_aa; break;
5836 default : func
= &add_ak
; break;
5839 case calc_ScalarRate
:
5840 switch (unit
->mSpecialIndex
) {
5841 //case opSilence2 : func = &zero_aa; break;
5842 case opAdd
: func
= &add_ai_nova_64
; break;
5843 case opSub
: func
= &sub_ai_nova_64
; break;
5844 case opMul
: func
= &mul_ai_nova_64
; break;
5845 case opFDiv
: func
= &div_ai_nova
; break;
5846 case opMod
: func
= &mod_ai
; break;
5847 case opEQ
: func
= &eq_ai_nova_64
; break;
5848 case opNE
: func
= &neq_ai_nova_64
; break;
5849 case opLT
: func
= <_ai_nova_64
; break;
5850 case opGT
: func
= >_ai_nova_64
; break;
5851 case opLE
: func
= &le_ai_nova_64
; break;
5852 case opGE
: func
= &ge_ai_nova_64
; break;
5853 case opMin
: func
= &min_ai_nova_64
; break;
5854 case opMax
: func
= &max_ai_nova_64
; break;
5855 case opBitAnd
: func
= &and_ai
; break;
5856 case opBitOr
: func
= &or_ai
; break;
5857 case opBitXor
: func
= &xor_ai
; break;
5858 case opRound
: func
= &round_ai
; break;
5859 case opRoundUp
: func
= &roundUp_ai
; break;
5860 case opTrunc
: func
= &trunc_ai
; break;
5861 case opAtan2
: func
= &atan2_ai
; break;
5862 case opHypot
: func
= &hypot_ai
; break;
5863 case opHypotx
: func
= &hypotx_ai
; break;
5864 case opPow
: func
= &pow_ai_nova
; break;
5865 case opRing1
: func
= &ring1_ai
; break;
5866 case opRing2
: func
= &ring2_ai
; break;
5867 case opRing3
: func
= &ring3_ai
; break;
5868 case opRing4
: func
= &ring4_ai
; break;
5869 case opDifSqr
: func
= &difsqr_ai
; break;
5870 case opSumSqr
: func
= &sumsqr_ai
; break;
5871 case opSqrSum
: func
= &sqrsum_ai
; break;
5872 case opSqrDif
: func
= &sqrdif_ai
; break;
5873 case opAbsDif
: func
= &absdif_ai
; break;
5874 case opThresh
: func
= &thresh_ai
; break;
5875 case opAMClip
: func
= &amclip_ai
; break;
5876 case opScaleNeg
: func
= &scaleneg_ai
; break;
5877 case opClip2
: func
= &clip2_ai_nova_64
; break;
5878 case opFold2
: func
= &fold2_ai
; break;
5879 case opWrap2
: func
= &wrap2_ai
; break;
5880 case opExcess
: func
= &excess_ai
; break;
5881 case opFirstArg
: func
= &firstarg_aa
; break;
5882 //case opSecondArg : func = &secondarg_aa; break;
5883 default : func
= &add_ai
; break;
5888 if (rateB
== calc_FullRate
) {
5889 switch (unit
->mSpecialIndex
) {
5890 //case opSilence2 : func = &zero_aa; break;
5891 case opAdd
: func
= &add_ka_nova_64
; break;
5892 case opSub
: func
= &sub_ka_nova_64
; break;
5893 case opMul
: func
= &mul_ka_nova_64
; break;
5894 case opFDiv
: func
= &div_ka_nova
; break;
5895 case opMod
: func
= &mod_ka
; break;
5896 case opEQ
: func
= &eq_ka_nova_64
; break;
5897 case opNE
: func
= &neq_ka_nova_64
; break;
5898 case opLT
: func
= <_ka_nova_64
; break;
5899 case opGT
: func
= >_ka_nova_64
; break;
5900 case opLE
: func
= &le_ka_nova_64
; break;
5901 case opGE
: func
= &ge_ka_nova_64
; break;
5902 case opMin
: func
= &min_ka_nova_64
; break;
5903 case opMax
: func
= &max_ka_nova_64
; break;
5904 case opBitAnd
: func
= &and_ka
; break;
5905 case opBitOr
: func
= &or_ka
; break;
5906 case opBitXor
: func
= &xor_ka
; break;
5907 case opRound
: func
= &round_ka
; break;
5908 case opRoundUp
: func
= &roundUp_ka
; break;
5909 case opTrunc
: func
= &trunc_ka
; break;
5910 case opAtan2
: func
= &atan2_ka
; break;
5911 case opHypot
: func
= &hypot_ka
; break;
5912 case opHypotx
: func
= &hypotx_ka
; break;
5913 case opPow
: func
= &pow_ka_nova
; break;
5914 case opRing1
: func
= &ring1_ka
; break;
5915 case opRing2
: func
= &ring2_ka
; break;
5916 case opRing3
: func
= &ring3_ka
; break;
5917 case opRing4
: func
= &ring4_ka
; break;
5918 case opDifSqr
: func
= &difsqr_ka
; break;
5919 case opSumSqr
: func
= &sumsqr_ka
; break;
5920 case opSqrSum
: func
= &sqrsum_ka
; break;
5921 case opSqrDif
: func
= &sqrdif_ka
; break;
5922 case opAbsDif
: func
= &absdif_ka
; break;
5923 case opThresh
: func
= &thresh_ka
; break;
5924 case opAMClip
: func
= &amclip_ka
; break;
5925 case opScaleNeg
: func
= &scaleneg_ka
; break;
5926 case opClip2
: func
= &clip2_ka_nova_64
; break;
5927 case opFold2
: func
= &fold2_ka
; break;
5928 case opWrap2
: func
= &wrap2_ka
; break;
5929 case opExcess
: func
= &excess_ka
; break;
5930 //case opFirstArg : func = &firstarg_aa; break;
5931 //case opSecondArg : func = &secondarg_aa; break;
5932 default : func
= &add_ka
; break;
5935 // this should have been caught by mBufLength == 1
5939 case calc_ScalarRate
:
5940 if (rateB
== calc_FullRate
) {
5941 switch (unit
->mSpecialIndex
) {
5942 //case opSilence2 : func = &zero_aa; break;
5943 case opAdd
: func
= &add_ia_nova_64
; break;
5944 case opSub
: func
= &sub_ia_nova_64
; break;
5945 case opMul
: func
= &mul_ia_nova_64
; break;
5946 case opFDiv
: func
= &div_ia_nova
; break;
5947 case opMod
: func
= &mod_ia
; break;
5948 case opEQ
: func
= &eq_ia_nova_64
; break;
5949 case opNE
: func
= &neq_ia_nova_64
; break;
5950 case opLT
: func
= <_ia_nova_64
; break;
5951 case opGT
: func
= >_ia_nova_64
; break;
5952 case opLE
: func
= &le_ia_nova_64
; break;
5953 case opGE
: func
= &ge_ia_nova_64
; break;
5954 case opMin
: func
= &min_ia_nova_64
; break;
5955 case opMax
: func
= &max_ia_nova_64
; break;
5956 case opBitAnd
: func
= &and_ia
; break;
5957 case opBitOr
: func
= &or_ia
; break;
5958 case opBitXor
: func
= &xor_ia
; break;
5959 case opRound
: func
= &round_ia
; break;
5960 case opRoundUp
: func
= &roundUp_ia
; break;
5961 case opTrunc
: func
= &trunc_ia
; break;
5962 case opAtan2
: func
= &atan2_ia
; break;
5963 case opHypot
: func
= &hypot_ia
; break;
5964 case opHypotx
: func
= &hypotx_ia
; break;
5965 case opPow
: func
= &pow_ia_nova
; break;
5966 case opRing1
: func
= &ring1_ia
; break;
5967 case opRing2
: func
= &ring2_ia
; break;
5968 case opRing3
: func
= &ring3_ia
; break;
5969 case opRing4
: func
= &ring4_ia
; break;
5970 case opDifSqr
: func
= &difsqr_ia
; break;
5971 case opSumSqr
: func
= &sumsqr_ia
; break;
5972 case opSqrSum
: func
= &sqrsum_ia
; break;
5973 case opSqrDif
: func
= &sqrdif_ia
; break;
5974 case opAbsDif
: func
= &absdif_ia
; break;
5975 case opThresh
: func
= &thresh_ia
; break;
5976 case opAMClip
: func
= &amclip_ia
; break;
5977 case opScaleNeg
: func
= &scaleneg_ia
; break;
5978 case opClip2
: func
= &clip2_ia_nova_64
; break;
5979 case opFold2
: func
= &fold2_ia
; break;
5980 case opWrap2
: func
= &wrap2_ia
; break;
5981 case opExcess
: func
= &excess_ia
; break;
5982 //case opFirstArg : func = &firstarg_aa; break;
5983 //case opSecondArg : func = &secondarg_aa; break;
5984 default : func
= &add_ia
; break;
5987 // this should have been caught by mBufLength == 1
5997 static BinaryOpFunc
ChooseNovaSimdFunc(BinaryOpUGen
*unit
)
5999 if (BUFLENGTH
== 64)
6000 return ChooseNovaSimdFunc_64(unit
);
6002 BinaryOpFunc func
= &zero_1
;
6004 int rateA
= INRATE(0);
6005 int rateB
= INRATE(1);
6011 switch (unit
->mSpecialIndex
) {
6012 //case opSilence2 : func = &zero_aa; break;
6013 case opAdd
: func
= &add_aa_nova
; break;
6014 case opSub
: func
= &sub_aa_nova
; break;
6015 case opMul
: func
= &mul_aa_nova
; break;
6016 case opFDiv
: func
= &div_aa_nova
; break;
6017 case opMod
: func
= &mod_aa
; break;
6018 case opEQ
: func
= &eq_aa_nova
; break;
6019 case opNE
: func
= &neq_aa_nova
; break;
6020 case opLT
: func
= <_aa_nova
; break;
6021 case opGT
: func
= >_aa_nova
; break;
6022 case opLE
: func
= &le_aa_nova
; break;
6023 case opGE
: func
= &ge_aa_nova
; break;
6024 case opMin
: func
= &min_aa_nova
; break;
6025 case opMax
: func
= &max_aa_nova
; break;
6026 case opBitAnd
: func
= &and_aa
; break;
6027 case opBitOr
: func
= &or_aa
; break;
6028 case opBitXor
: func
= &xor_aa
; break;
6029 case opRound
: func
= &round_aa
; break;
6030 case opRoundUp
: func
= &roundUp_aa
; break;
6031 case opTrunc
: func
= &trunc_aa
; break;
6032 case opAtan2
: func
= &atan2_aa
; break;
6033 case opHypot
: func
= &hypot_aa
; break;
6034 case opHypotx
: func
= &hypotx_aa
; break;
6035 case opPow
: func
= &pow_aa_nova
; break;
6036 case opRing1
: func
= &ring1_aa
; break;
6037 case opRing2
: func
= &ring2_aa
; break;
6038 case opRing3
: func
= &ring3_aa
; break;
6039 case opRing4
: func
= &ring4_aa
; break;
6040 case opDifSqr
: func
= &difsqr_aa
; break;
6041 case opSumSqr
: func
= &sumsqr_aa
; break;
6042 case opSqrSum
: func
= &sqrsum_aa
; break;
6043 case opSqrDif
: func
= &sqrdif_aa
; break;
6044 case opAbsDif
: func
= &absdif_aa
; break;
6045 case opThresh
: func
= &thresh_aa
; break;
6046 case opAMClip
: func
= &amclip_aa
; break;
6047 case opScaleNeg
: func
= &scaleneg_aa
; break;
6048 case opClip2
: func
= &clip2_aa_nova
; break;
6049 case opFold2
: func
= &fold2_aa
; break;
6050 case opWrap2
: func
= &wrap2_aa
; break;
6051 case opExcess
: func
= &excess_aa
; break;
6052 case opFirstArg
: func
= &firstarg_aa_nova
; break;
6053 //case opSecondArg : func = &secondarg_aa_nova; break;
6054 default : func
= &add_aa
; break;
6058 switch (unit
->mSpecialIndex
) {
6059 //case opSilence2 : func = &zero_aa; break;
6060 case opAdd
: func
= &add_ak_nova
; break;
6061 case opSub
: func
= &sub_ak_nova
; break;
6062 case opMul
: func
= &mul_ak_nova
; break;
6063 case opFDiv
: func
= &div_ak_nova
; break;
6064 case opMod
: func
= &mod_ak
; break;
6065 case opEQ
: func
= &eq_ak_nova
; break;
6066 case opNE
: func
= &neq_ak_nova
; break;
6067 case opLT
: func
= <_ak_nova
; break;
6068 case opGT
: func
= >_ak_nova
; break;
6069 case opLE
: func
= &le_ak_nova
; break;
6070 case opGE
: func
= &ge_ak_nova
; break;
6071 case opMin
: func
= &min_ak_nova
; break;
6072 case opMax
: func
= &max_ak_nova
; break;
6073 case opBitAnd
: func
= &and_ak
; break;
6074 case opBitOr
: func
= &or_ak
; break;
6075 case opBitXor
: func
= &xor_ak
; break;
6076 case opRound
: func
= &round_ak
; break;
6077 case opRoundUp
: func
= &roundUp_ak
; break;
6078 case opTrunc
: func
= &trunc_ak
; break;
6079 case opAtan2
: func
= &atan2_ak
; break;
6080 case opHypot
: func
= &hypot_ak
; break;
6081 case opHypotx
: func
= &hypotx_ak
; break;
6082 case opPow
: func
= &pow_ak_nova
; break;
6083 case opRing1
: func
= &ring1_ak
; break;
6084 case opRing2
: func
= &ring2_ak
; break;
6085 case opRing3
: func
= &ring3_ak
; break;
6086 case opRing4
: func
= &ring4_ak
; break;
6087 case opDifSqr
: func
= &difsqr_ak
; break;
6088 case opSumSqr
: func
= &sumsqr_ak
; break;
6089 case opSqrSum
: func
= &sqrsum_ak
; break;
6090 case opSqrDif
: func
= &sqrdif_ak
; break;
6091 case opAbsDif
: func
= &absdif_ak
; break;
6092 case opThresh
: func
= &thresh_ak
; break;
6093 case opAMClip
: func
= &amclip_ak
; break;
6094 case opScaleNeg
: func
= &scaleneg_ak
; break;
6095 case opClip2
: func
= &clip2_ak_nova
; break;
6096 case opFold2
: func
= &fold2_ak
; break;
6097 case opWrap2
: func
= &wrap2_ak
; break;
6098 case opExcess
: func
= &excess_ak
; break;
6099 case opFirstArg
: func
= &firstarg_aa
; break;
6100 //case opSecondArg : func = &secondarg_aa; break;
6101 default : func
= &add_ak
; break;
6104 case calc_ScalarRate
:
6105 switch (unit
->mSpecialIndex
) {
6106 //case opSilence2 : func = &zero_aa; break;
6107 case opAdd
: func
= &add_ai_nova
; break;
6108 case opSub
: func
= &sub_ai_nova
; break;
6109 case opMul
: func
= &mul_ai_nova
; break;
6110 case opFDiv
: func
= &div_ai_nova
; break;
6111 case opMod
: func
= &mod_ai
; break;
6112 case opEQ
: func
= &eq_ai_nova
; break;
6113 case opNE
: func
= &neq_ai_nova
; break;
6114 case opLT
: func
= <_ai_nova
; break;
6115 case opGT
: func
= >_ai_nova
; break;
6116 case opLE
: func
= &le_ai_nova
; break;
6117 case opGE
: func
= &ge_ai_nova
; break;
6118 case opMin
: func
= &min_ai_nova
; break;
6119 case opMax
: func
= &max_ai_nova
; break;
6120 case opBitAnd
: func
= &and_ai
; break;
6121 case opBitOr
: func
= &or_ai
; break;
6122 case opBitXor
: func
= &xor_ai
; break;
6123 case opRound
: func
= &round_ai
; break;
6124 case opRoundUp
: func
= &roundUp_ai
; break;
6125 case opTrunc
: func
= &trunc_ai
; break;
6126 case opAtan2
: func
= &atan2_ai
; break;
6127 case opHypot
: func
= &hypot_ai
; break;
6128 case opHypotx
: func
= &hypotx_ai
; break;
6129 case opPow
: func
= &pow_ai_nova
; break;
6130 case opRing1
: func
= &ring1_ai
; break;
6131 case opRing2
: func
= &ring2_ai
; break;
6132 case opRing3
: func
= &ring3_ai
; break;
6133 case opRing4
: func
= &ring4_ai
; break;
6134 case opDifSqr
: func
= &difsqr_ai
; break;
6135 case opSumSqr
: func
= &sumsqr_ai
; break;
6136 case opSqrSum
: func
= &sqrsum_ai
; break;
6137 case opSqrDif
: func
= &sqrdif_ai
; break;
6138 case opAbsDif
: func
= &absdif_ai
; break;
6139 case opThresh
: func
= &thresh_ai
; break;
6140 case opAMClip
: func
= &amclip_ai
; break;
6141 case opScaleNeg
: func
= &scaleneg_ai
; break;
6142 case opClip2
: func
= &clip2_ai_nova
; break;
6143 case opFold2
: func
= &fold2_ai
; break;
6144 case opWrap2
: func
= &wrap2_ai
; break;
6145 case opExcess
: func
= &excess_ai
; break;
6146 case opFirstArg
: func
= &firstarg_aa
; break;
6147 //case opSecondArg : func = &secondarg_aa; break;
6148 default : func
= &add_ai
; break;
6153 if (rateB
== calc_FullRate
) {
6154 switch (unit
->mSpecialIndex
) {
6155 //case opSilence2 : func = &zero_aa; break;
6156 case opAdd
: func
= &add_ka_nova
; break;
6157 case opSub
: func
= &sub_ka_nova
; break;
6158 case opMul
: func
= &mul_ka_nova
; break;
6159 case opFDiv
: func
= &div_ka_nova
; break;
6160 case opMod
: func
= &mod_ka
; break;
6161 case opEQ
: func
= &eq_ka_nova
; break;
6162 case opNE
: func
= &neq_ka_nova
; break;
6163 case opLT
: func
= <_ka_nova
; break;
6164 case opGT
: func
= >_ka_nova
; break;
6165 case opLE
: func
= &le_ka_nova
; break;
6166 case opGE
: func
= &ge_ka_nova
; break;
6167 case opMin
: func
= &min_ka_nova
; break;
6168 case opMax
: func
= &max_ka_nova
; break;
6169 case opBitAnd
: func
= &and_ka
; break;
6170 case opBitOr
: func
= &or_ka
; break;
6171 case opBitXor
: func
= &xor_ka
; break;
6172 case opRound
: func
= &round_ka
; break;
6173 case opRoundUp
: func
= &roundUp_ka
; break;
6174 case opTrunc
: func
= &trunc_ka
; break;
6175 case opAtan2
: func
= &atan2_ka
; break;
6176 case opHypot
: func
= &hypot_ka
; break;
6177 case opHypotx
: func
= &hypotx_ka
; break;
6178 case opPow
: func
= &pow_ka_nova
; break;
6179 case opRing1
: func
= &ring1_ka
; break;
6180 case opRing2
: func
= &ring2_ka
; break;
6181 case opRing3
: func
= &ring3_ka
; break;
6182 case opRing4
: func
= &ring4_ka
; break;
6183 case opDifSqr
: func
= &difsqr_ka
; break;
6184 case opSumSqr
: func
= &sumsqr_ka
; break;
6185 case opSqrSum
: func
= &sqrsum_ka
; break;
6186 case opSqrDif
: func
= &sqrdif_ka
; break;
6187 case opAbsDif
: func
= &absdif_ka
; break;
6188 case opThresh
: func
= &thresh_ka
; break;
6189 case opAMClip
: func
= &amclip_ka
; break;
6190 case opScaleNeg
: func
= &scaleneg_ka
; break;
6191 case opClip2
: func
= &clip2_ka_nova
; break;
6192 case opFold2
: func
= &fold2_ka
; break;
6193 case opWrap2
: func
= &wrap2_ka
; break;
6194 case opExcess
: func
= &excess_ka
; break;
6195 //case opFirstArg : func = &firstarg_aa; break;
6196 //case opSecondArg : func = &secondarg_aa; break;
6197 default : func
= &add_ka
; break;
6200 // this should have been caught by mBufLength == 1
6204 case calc_ScalarRate
:
6205 if (rateB
== calc_FullRate
) {
6206 switch (unit
->mSpecialIndex
) {
6207 //case opSilence2 : func = &zero_aa; break;
6208 case opAdd
: func
= &add_ia_nova
; break;
6209 case opSub
: func
= &sub_ia_nova
; break;
6210 case opMul
: func
= &mul_ia_nova
; break;
6211 case opFDiv
: func
= &div_ia_nova
; break;
6212 case opMod
: func
= &mod_ia
; break;
6213 case opEQ
: func
= &eq_ia_nova
; break;
6214 case opNE
: func
= &neq_ia_nova
; break;
6215 case opLT
: func
= <_ia_nova
; break;
6216 case opGT
: func
= >_ia_nova
; break;
6217 case opLE
: func
= &le_ia_nova
; break;
6218 case opGE
: func
= &ge_ia_nova
; break;
6219 case opMin
: func
= &min_ia_nova
; break;
6220 case opMax
: func
= &max_ia_nova
; break;
6221 case opBitAnd
: func
= &and_ia
; break;
6222 case opBitOr
: func
= &or_ia
; break;
6223 case opBitXor
: func
= &xor_ia
; break;
6224 case opRound
: func
= &round_ia
; break;
6225 case opRoundUp
: func
= &roundUp_ia
; break;
6226 case opTrunc
: func
= &trunc_ia
; break;
6227 case opAtan2
: func
= &atan2_ia
; break;
6228 case opHypot
: func
= &hypot_ia
; break;
6229 case opHypotx
: func
= &hypotx_ia
; break;
6230 case opPow
: func
= &pow_ia_nova
; break;
6231 case opRing1
: func
= &ring1_ia
; break;
6232 case opRing2
: func
= &ring2_ia
; break;
6233 case opRing3
: func
= &ring3_ia
; break;
6234 case opRing4
: func
= &ring4_ia
; break;
6235 case opDifSqr
: func
= &difsqr_ia
; break;
6236 case opSumSqr
: func
= &sumsqr_ia
; break;
6237 case opSqrSum
: func
= &sqrsum_ia
; break;
6238 case opSqrDif
: func
= &sqrdif_ia
; break;
6239 case opAbsDif
: func
= &absdif_ia
; break;
6240 case opThresh
: func
= &thresh_ia
; break;
6241 case opAMClip
: func
= &amclip_ia
; break;
6242 case opScaleNeg
: func
= &scaleneg_ia
; break;
6243 case opClip2
: func
= &clip2_ia_nova
; break;
6244 case opFold2
: func
= &fold2_ia
; break;
6245 case opWrap2
: func
= &wrap2_ia
; break;
6246 case opExcess
: func
= &excess_ia
; break;
6247 //case opFirstArg : func = &firstarg_aa; break;
6248 //case opSecondArg : func = &secondarg_aa; break;
6249 default : func
= &add_ia
; break;
6252 // this should have been caught by mBufLength == 1
6263 bool ChooseOperatorFunc(BinaryOpUGen
*unit
)
6265 //Print("->ChooseOperatorFunc %d\n", unit->mSpecialIndex);
6266 BinaryOpFunc func
= &zero_aa
;
6269 if (BUFLENGTH
== 1) {
6270 if (unit
->mCalcRate
== calc_DemandRate
) {
6271 func
= ChooseDemandFunc(unit
);
6273 func
= ChooseOneSampleFunc(unit
);
6275 #if defined(NOVA_SIMD)
6276 } else if (!(BUFLENGTH
& 15)) {
6277 /* select normal function for initialization */
6278 func
= ChooseNormalFunc(unit
);
6281 /* select simd function */
6282 func
= ChooseNovaSimdFunc(unit
);
6286 func
= ChooseNormalFunc(unit
);
6288 unit
->mCalcFunc
= (UnitCalcFunc
)func
;
6289 //Print("<-ChooseOperatorFunc %p\n", func);
6290 //Print("calc %d\n", unit->mCalcRate);
6297 ////////////////////////////////////////////////////////////////////////////////////////////////////////
6300 PluginLoad(BinaryOp
)
6304 DefineSimpleUnit(BinaryOpUGen
);