Skip to main content

singe_npp/image/
arithmetic_binary_dispatch.rs

1use super::*;
2
3impl_binary_scaled!(add_u8_c1, u8, C1, nppiAdd_8u_C1RSfs_Ctx);
4impl_binary_scaled_in_place!(add_u8_c1_in_place, u8, C1, nppiAdd_8u_C1IRSfs_Ctx);
5impl_binary_scaled!(add_u8_c3, u8, C3, nppiAdd_8u_C3RSfs_Ctx);
6impl_binary_scaled_in_place!(add_u8_c3_in_place, u8, C3, nppiAdd_8u_C3IRSfs_Ctx);
7impl_binary_scaled!(add_u8_ac4, u8, AC4, nppiAdd_8u_AC4RSfs_Ctx);
8impl_binary_scaled_in_place!(add_u8_ac4_in_place, u8, AC4, nppiAdd_8u_AC4IRSfs_Ctx);
9impl_binary_scaled!(add_u8_c4, u8, C4, nppiAdd_8u_C4RSfs_Ctx);
10impl_binary_scaled_in_place!(add_u8_c4_in_place, u8, C4, nppiAdd_8u_C4IRSfs_Ctx);
11impl_binary_scaled!(add_u16_c1, u16, C1, nppiAdd_16u_C1RSfs_Ctx);
12impl_binary_scaled_in_place!(add_u16_c1_in_place, u16, C1, nppiAdd_16u_C1IRSfs_Ctx);
13impl_binary_scaled!(add_u16_c3, u16, C3, nppiAdd_16u_C3RSfs_Ctx);
14impl_binary_scaled_in_place!(add_u16_c3_in_place, u16, C3, nppiAdd_16u_C3IRSfs_Ctx);
15impl_binary_scaled!(add_u16_ac4, u16, AC4, nppiAdd_16u_AC4RSfs_Ctx);
16impl_binary_scaled_in_place!(add_u16_ac4_in_place, u16, AC4, nppiAdd_16u_AC4IRSfs_Ctx);
17impl_binary_scaled!(add_u16_c4, u16, C4, nppiAdd_16u_C4RSfs_Ctx);
18impl_binary_scaled_in_place!(add_u16_c4_in_place, u16, C4, nppiAdd_16u_C4IRSfs_Ctx);
19impl_binary_scaled!(add_i16_c1, i16, C1, nppiAdd_16s_C1RSfs_Ctx);
20impl_binary_scaled_in_place!(add_i16_c1_in_place, i16, C1, nppiAdd_16s_C1IRSfs_Ctx);
21impl_binary_scaled!(add_i16_c3, i16, C3, nppiAdd_16s_C3RSfs_Ctx);
22impl_binary_scaled_in_place!(add_i16_c3_in_place, i16, C3, nppiAdd_16s_C3IRSfs_Ctx);
23impl_binary_scaled!(add_i16_ac4, i16, AC4, nppiAdd_16s_AC4RSfs_Ctx);
24impl_binary_scaled_in_place!(add_i16_ac4_in_place, i16, AC4, nppiAdd_16s_AC4IRSfs_Ctx);
25impl_binary_scaled!(add_i16_c4, i16, C4, nppiAdd_16s_C4RSfs_Ctx);
26impl_binary_scaled_in_place!(add_i16_c4_in_place, i16, C4, nppiAdd_16s_C4IRSfs_Ctx);
27impl_binary_scaled!(add_i16_complex_c1, ComplexI16, C1, nppiAdd_16sc_C1RSfs_Ctx);
28impl_binary_scaled_in_place!(
29    add_i16_complex_c1_in_place,
30    ComplexI16,
31    C1,
32    nppiAdd_16sc_C1IRSfs_Ctx
33);
34impl_binary_scaled!(add_i16_complex_c3, ComplexI16, C3, nppiAdd_16sc_C3RSfs_Ctx);
35impl_binary_scaled_in_place!(
36    add_i16_complex_c3_in_place,
37    ComplexI16,
38    C3,
39    nppiAdd_16sc_C3IRSfs_Ctx
40);
41impl_binary_scaled!(
42    add_i16_complex_ac4,
43    ComplexI16,
44    AC4,
45    nppiAdd_16sc_AC4RSfs_Ctx
46);
47impl_binary_scaled_in_place!(
48    add_i16_complex_ac4_in_place,
49    ComplexI16,
50    AC4,
51    nppiAdd_16sc_AC4IRSfs_Ctx
52);
53impl_binary_scaled!(add_i32_c1, i32, C1, nppiAdd_32s_C1RSfs_Ctx);
54impl_binary!(add_i32_c1_unscaled, i32, C1, nppiAdd_32s_C1R_Ctx);
55impl_binary_scaled_in_place!(add_i32_c1_in_place, i32, C1, nppiAdd_32s_C1IRSfs_Ctx);
56impl_binary_scaled!(add_i32_c3, i32, C3, nppiAdd_32s_C3RSfs_Ctx);
57impl_binary_scaled_in_place!(add_i32_c3_in_place, i32, C3, nppiAdd_32s_C3IRSfs_Ctx);
58impl_binary_scaled!(add_i32_complex_c1, ComplexI32, C1, nppiAdd_32sc_C1RSfs_Ctx);
59impl_binary_scaled_in_place!(
60    add_i32_complex_c1_in_place,
61    ComplexI32,
62    C1,
63    nppiAdd_32sc_C1IRSfs_Ctx
64);
65impl_binary_scaled!(add_i32_complex_c3, ComplexI32, C3, nppiAdd_32sc_C3RSfs_Ctx);
66impl_binary_scaled_in_place!(
67    add_i32_complex_c3_in_place,
68    ComplexI32,
69    C3,
70    nppiAdd_32sc_C3IRSfs_Ctx
71);
72impl_binary_scaled!(
73    add_i32_complex_ac4,
74    ComplexI32,
75    AC4,
76    nppiAdd_32sc_AC4RSfs_Ctx
77);
78impl_binary_scaled_in_place!(
79    add_i32_complex_ac4_in_place,
80    ComplexI32,
81    AC4,
82    nppiAdd_32sc_AC4IRSfs_Ctx
83);
84impl_binary!(add_f16_c1, f16, C1, nppiAdd_16f_C1R_Ctx);
85impl_binary_in_place!(add_f16_c1_in_place, f16, C1, nppiAdd_16f_C1IR_Ctx);
86impl_binary!(add_f16_c3, f16, C3, nppiAdd_16f_C3R_Ctx);
87impl_binary_in_place!(add_f16_c3_in_place, f16, C3, nppiAdd_16f_C3IR_Ctx);
88impl_binary!(add_f16_c4, f16, C4, nppiAdd_16f_C4R_Ctx);
89impl_binary_in_place!(add_f16_c4_in_place, f16, C4, nppiAdd_16f_C4IR_Ctx);
90impl_binary!(add_f32_c1, f32, C1, nppiAdd_32f_C1R_Ctx);
91impl_binary_in_place!(add_f32_c1_in_place, f32, C1, nppiAdd_32f_C1IR_Ctx);
92impl_binary!(add_f32_c3, f32, C3, nppiAdd_32f_C3R_Ctx);
93impl_binary_in_place!(add_f32_c3_in_place, f32, C3, nppiAdd_32f_C3IR_Ctx);
94impl_binary!(add_f32_ac4, f32, AC4, nppiAdd_32f_AC4R_Ctx);
95impl_binary_in_place!(add_f32_ac4_in_place, f32, AC4, nppiAdd_32f_AC4IR_Ctx);
96impl_binary!(add_f32_c4, f32, C4, nppiAdd_32f_C4R_Ctx);
97impl_binary_in_place!(add_f32_c4_in_place, f32, C4, nppiAdd_32f_C4IR_Ctx);
98impl_binary!(add_f32_complex_c1, Complex32, C1, nppiAdd_32fc_C1R_Ctx);
99impl_binary_in_place!(
100    add_f32_complex_c1_in_place,
101    Complex32,
102    C1,
103    nppiAdd_32fc_C1IR_Ctx
104);
105impl_binary!(add_f32_complex_c3, Complex32, C3, nppiAdd_32fc_C3R_Ctx);
106impl_binary_in_place!(
107    add_f32_complex_c3_in_place,
108    Complex32,
109    C3,
110    nppiAdd_32fc_C3IR_Ctx
111);
112impl_binary!(add_f32_complex_ac4, Complex32, AC4, nppiAdd_32fc_AC4R_Ctx);
113impl_binary_in_place!(
114    add_f32_complex_ac4_in_place,
115    Complex32,
116    AC4,
117    nppiAdd_32fc_AC4IR_Ctx
118);
119impl_binary!(add_f32_complex_c4, Complex32, C4, nppiAdd_32fc_C4R_Ctx);
120impl_binary_in_place!(
121    add_f32_complex_c4_in_place,
122    Complex32,
123    C4,
124    nppiAdd_32fc_C4IR_Ctx
125);
126
127impl_generic_binary_operation!(
128    AddC1,
129    add,
130    add_c1,
131    C1,
132    [
133        i32 => add_i32_c1_unscaled,
134        f16 => add_f16_c1,
135        f32 => add_f32_c1,
136        Complex32 => add_f32_complex_c1,
137    ]
138);
139impl_generic_binary_operation_in_place!(
140    AddC1InPlace,
141    add_in_place,
142    add_c1_in_place,
143    C1,
144    [
145        f16 => add_f16_c1_in_place,
146        f32 => add_f32_c1_in_place,
147        Complex32 => add_f32_complex_c1_in_place,
148    ]
149);
150impl_generic_scaled_binary_operation!(
151    ScaledAddC1,
152    add_scaled,
153    add_scaled_c1,
154    C1,
155    [
156        u8 => add_u8_c1,
157        u16 => add_u16_c1,
158        i16 => add_i16_c1,
159        ComplexI16 => add_i16_complex_c1,
160        i32 => add_i32_c1,
161        ComplexI32 => add_i32_complex_c1,
162    ]
163);
164impl_generic_scaled_binary_operation_in_place!(
165    ScaledAddC1InPlace,
166    add_scaled_in_place,
167    add_scaled_c1_in_place,
168    C1,
169    [
170        u8 => add_u8_c1_in_place,
171        u16 => add_u16_c1_in_place,
172        i16 => add_i16_c1_in_place,
173        ComplexI16 => add_i16_complex_c1_in_place,
174        i32 => add_i32_c1_in_place,
175        ComplexI32 => add_i32_complex_c1_in_place,
176    ]
177);
178
179impl_generic_binary_operation!(
180    MultiplyC1,
181    multiply,
182    multiply_c1,
183    C1,
184    [
185        i32 => multiply_i32_c1_unscaled,
186        f16 => multiply_f16_c1,
187        f32 => multiply_f32_c1,
188        Complex32 => multiply_f32_complex_c1,
189    ]
190);
191impl_generic_binary_operation_in_place!(
192    MultiplyC1InPlace,
193    multiply_in_place,
194    multiply_c1_in_place,
195    C1,
196    [
197        f16 => multiply_f16_c1_in_place,
198        f32 => multiply_f32_c1_in_place,
199        Complex32 => multiply_f32_complex_c1_in_place,
200    ]
201);
202impl_generic_scaled_binary_operation!(
203    ScaledMultiplyC1,
204    multiply_scaled,
205    multiply_scaled_c1,
206    C1,
207    [
208        u8 => multiply_u8_c1,
209        u16 => multiply_u16_c1,
210        i16 => multiply_i16_c1,
211        ComplexI16 => multiply_i16_complex_c1,
212        i32 => multiply_i32_c1,
213        ComplexI32 => multiply_i32_complex_c1,
214    ]
215);
216impl_generic_scaled_binary_operation_in_place!(
217    ScaledMultiplyC1InPlace,
218    multiply_scaled_in_place,
219    multiply_scaled_c1_in_place,
220    C1,
221    [
222        u8 => multiply_u8_c1_in_place,
223        u16 => multiply_u16_c1_in_place,
224        i16 => multiply_i16_c1_in_place,
225        ComplexI16 => multiply_i16_complex_c1_in_place,
226        i32 => multiply_i32_c1_in_place,
227        ComplexI32 => multiply_i32_complex_c1_in_place,
228    ]
229);
230
231impl_generic_binary_operation!(
232    SubtractC1,
233    subtract,
234    subtract_c1,
235    C1,
236    [
237        i32 => subtract_i32_c1_unscaled,
238        f16 => subtract_f16_c1,
239        f32 => subtract_f32_c1,
240        Complex32 => subtract_f32_complex_c1,
241    ]
242);
243impl_generic_binary_operation_in_place!(
244    SubtractC1InPlace,
245    subtract_in_place,
246    subtract_c1_in_place,
247    C1,
248    [
249        f16 => subtract_f16_c1_in_place,
250        f32 => subtract_f32_c1_in_place,
251        Complex32 => subtract_f32_complex_c1_in_place,
252    ]
253);
254impl_generic_scaled_binary_operation!(
255    ScaledSubtractC1,
256    subtract_scaled,
257    subtract_scaled_c1,
258    C1,
259    [
260        u8 => subtract_u8_c1,
261        u16 => subtract_u16_c1,
262        i16 => subtract_i16_c1,
263        ComplexI16 => subtract_i16_complex_c1,
264        i32 => subtract_i32_c1,
265        ComplexI32 => subtract_i32_complex_c1,
266    ]
267);
268impl_generic_scaled_binary_operation_in_place!(
269    ScaledSubtractC1InPlace,
270    subtract_scaled_in_place,
271    subtract_scaled_c1_in_place,
272    C1,
273    [
274        u8 => subtract_u8_c1_in_place,
275        u16 => subtract_u16_c1_in_place,
276        i16 => subtract_i16_c1_in_place,
277        ComplexI16 => subtract_i16_complex_c1_in_place,
278        i32 => subtract_i32_c1_in_place,
279        ComplexI32 => subtract_i32_complex_c1_in_place,
280    ]
281);
282
283impl_generic_binary_operation!(
284    DivideC1,
285    divide,
286    divide_c1,
287    C1,
288    [
289        i32 => divide_i32_c1_unscaled,
290        f16 => divide_f16_c1,
291        f32 => divide_f32_c1,
292        Complex32 => divide_f32_complex_c1,
293    ]
294);
295impl_generic_binary_operation_in_place!(
296    DivideC1InPlace,
297    divide_in_place,
298    divide_c1_in_place,
299    C1,
300    [
301        f16 => divide_f16_c1_in_place,
302        f32 => divide_f32_c1_in_place,
303        Complex32 => divide_f32_complex_c1_in_place,
304    ]
305);
306impl_generic_scaled_binary_operation!(
307    ScaledDivideC1,
308    divide_scaled,
309    divide_scaled_c1,
310    C1,
311    [
312        u8 => divide_u8_c1,
313        u16 => divide_u16_c1,
314        i16 => divide_i16_c1,
315        ComplexI16 => divide_i16_complex_c1,
316        i32 => divide_i32_c1,
317        ComplexI32 => divide_i32_complex_c1,
318    ]
319);
320impl_generic_scaled_binary_operation_in_place!(
321    ScaledDivideC1InPlace,
322    divide_scaled_in_place,
323    divide_scaled_c1_in_place,
324    C1,
325    [
326        u8 => divide_u8_c1_in_place,
327        u16 => divide_u16_c1_in_place,
328        i16 => divide_i16_c1_in_place,
329        ComplexI16 => divide_i16_complex_c1_in_place,
330        i32 => divide_i32_c1_in_place,
331        ComplexI32 => divide_i32_complex_c1_in_place,
332    ]
333);
334
335impl_generic_binary_operation!(
336    AddC3,
337    add,
338    add_c3,
339    C3,
340    [
341        f16 => add_f16_c3,
342        f32 => add_f32_c3,
343        Complex32 => add_f32_complex_c3,
344    ]
345);
346impl_generic_binary_operation_in_place!(
347    AddC3InPlace,
348    add_in_place,
349    add_c3_in_place,
350    C3,
351    [
352        f16 => add_f16_c3_in_place,
353        f32 => add_f32_c3_in_place,
354        Complex32 => add_f32_complex_c3_in_place,
355    ]
356);
357impl_generic_scaled_binary_operation!(
358    ScaledAddC3,
359    add_scaled,
360    add_scaled_c3,
361    C3,
362    [
363        u8 => add_u8_c3,
364        u16 => add_u16_c3,
365        i16 => add_i16_c3,
366        ComplexI16 => add_i16_complex_c3,
367        i32 => add_i32_c3,
368        ComplexI32 => add_i32_complex_c3,
369    ]
370);
371impl_generic_scaled_binary_operation_in_place!(
372    ScaledAddC3InPlace,
373    add_scaled_in_place,
374    add_scaled_c3_in_place,
375    C3,
376    [
377        u8 => add_u8_c3_in_place,
378        u16 => add_u16_c3_in_place,
379        i16 => add_i16_c3_in_place,
380        ComplexI16 => add_i16_complex_c3_in_place,
381        i32 => add_i32_c3_in_place,
382        ComplexI32 => add_i32_complex_c3_in_place,
383    ]
384);
385impl_generic_binary_operation!(
386    AddC4,
387    add,
388    add_c4,
389    C4,
390    [
391        f16 => add_f16_c4,
392        f32 => add_f32_c4,
393        Complex32 => add_f32_complex_c4,
394    ]
395);
396impl_generic_binary_operation_in_place!(
397    AddC4InPlace,
398    add_in_place,
399    add_c4_in_place,
400    C4,
401    [
402        f16 => add_f16_c4_in_place,
403        f32 => add_f32_c4_in_place,
404        Complex32 => add_f32_complex_c4_in_place,
405    ]
406);
407impl_generic_scaled_binary_operation!(
408    ScaledAddC4,
409    add_scaled,
410    add_scaled_c4,
411    C4,
412    [
413        u8 => add_u8_c4,
414        u16 => add_u16_c4,
415        i16 => add_i16_c4,
416    ]
417);
418impl_generic_scaled_binary_operation_in_place!(
419    ScaledAddC4InPlace,
420    add_scaled_in_place,
421    add_scaled_c4_in_place,
422    C4,
423    [
424        u8 => add_u8_c4_in_place,
425        u16 => add_u16_c4_in_place,
426        i16 => add_i16_c4_in_place,
427    ]
428);
429impl_generic_binary_operation!(
430    AddAc4,
431    add,
432    add_ac4,
433    AC4,
434    [
435        f32 => add_f32_ac4,
436        Complex32 => add_f32_complex_ac4,
437    ]
438);
439impl_generic_binary_operation_in_place!(
440    AddAc4InPlace,
441    add_in_place,
442    add_ac4_in_place,
443    AC4,
444    [
445        f32 => add_f32_ac4_in_place,
446        Complex32 => add_f32_complex_ac4_in_place,
447    ]
448);
449impl_generic_scaled_binary_operation!(
450    ScaledAddAc4,
451    add_scaled,
452    add_scaled_ac4,
453    AC4,
454    [
455        u8 => add_u8_ac4,
456        u16 => add_u16_ac4,
457        i16 => add_i16_ac4,
458        ComplexI16 => add_i16_complex_ac4,
459        ComplexI32 => add_i32_complex_ac4,
460    ]
461);
462impl_generic_scaled_binary_operation_in_place!(
463    ScaledAddAc4InPlace,
464    add_scaled_in_place,
465    add_scaled_ac4_in_place,
466    AC4,
467    [
468        u8 => add_u8_ac4_in_place,
469        u16 => add_u16_ac4_in_place,
470        i16 => add_i16_ac4_in_place,
471        ComplexI16 => add_i16_complex_ac4_in_place,
472        ComplexI32 => add_i32_complex_ac4_in_place,
473    ]
474);
475
476impl_generic_binary_operation!(
477    MultiplyC3,
478    multiply,
479    multiply_c3,
480    C3,
481    [
482        f16 => multiply_f16_c3,
483        f32 => multiply_f32_c3,
484        Complex32 => multiply_f32_complex_c3,
485    ]
486);
487impl_generic_binary_operation_in_place!(
488    MultiplyC3InPlace,
489    multiply_in_place,
490    multiply_c3_in_place,
491    C3,
492    [
493        f16 => multiply_f16_c3_in_place,
494        f32 => multiply_f32_c3_in_place,
495        Complex32 => multiply_f32_complex_c3_in_place,
496    ]
497);
498impl_generic_scaled_binary_operation!(
499    ScaledMultiplyC3,
500    multiply_scaled,
501    multiply_scaled_c3,
502    C3,
503    [
504        u8 => multiply_u8_c3,
505        u16 => multiply_u16_c3,
506        i16 => multiply_i16_c3,
507        ComplexI16 => multiply_i16_complex_c3,
508        i32 => multiply_i32_c3,
509        ComplexI32 => multiply_i32_complex_c3,
510    ]
511);
512impl_generic_scaled_binary_operation_in_place!(
513    ScaledMultiplyC3InPlace,
514    multiply_scaled_in_place,
515    multiply_scaled_c3_in_place,
516    C3,
517    [
518        u8 => multiply_u8_c3_in_place,
519        u16 => multiply_u16_c3_in_place,
520        i16 => multiply_i16_c3_in_place,
521        ComplexI16 => multiply_i16_complex_c3_in_place,
522        i32 => multiply_i32_c3_in_place,
523        ComplexI32 => multiply_i32_complex_c3_in_place,
524    ]
525);
526impl_generic_binary_operation!(
527    MultiplyC4,
528    multiply,
529    multiply_c4,
530    C4,
531    [
532        f16 => multiply_f16_c4,
533        f32 => multiply_f32_c4,
534        Complex32 => multiply_f32_complex_c4,
535    ]
536);
537impl_generic_binary_operation_in_place!(
538    MultiplyC4InPlace,
539    multiply_in_place,
540    multiply_c4_in_place,
541    C4,
542    [
543        f16 => multiply_f16_c4_in_place,
544        f32 => multiply_f32_c4_in_place,
545        Complex32 => multiply_f32_complex_c4_in_place,
546    ]
547);
548impl_generic_scaled_binary_operation!(
549    ScaledMultiplyC4,
550    multiply_scaled,
551    multiply_scaled_c4,
552    C4,
553    [
554        u8 => multiply_u8_c4,
555        u16 => multiply_u16_c4,
556        i16 => multiply_i16_c4,
557    ]
558);
559impl_generic_scaled_binary_operation_in_place!(
560    ScaledMultiplyC4InPlace,
561    multiply_scaled_in_place,
562    multiply_scaled_c4_in_place,
563    C4,
564    [
565        u8 => multiply_u8_c4_in_place,
566        u16 => multiply_u16_c4_in_place,
567        i16 => multiply_i16_c4_in_place,
568    ]
569);
570impl_generic_binary_operation!(
571    MultiplyAc4,
572    multiply,
573    multiply_ac4,
574    AC4,
575    [
576        f32 => multiply_f32_ac4,
577        Complex32 => multiply_f32_complex_ac4,
578    ]
579);
580impl_generic_binary_operation_in_place!(
581    MultiplyAc4InPlace,
582    multiply_in_place,
583    multiply_ac4_in_place,
584    AC4,
585    [
586        f32 => multiply_f32_ac4_in_place,
587        Complex32 => multiply_f32_complex_ac4_in_place,
588    ]
589);
590impl_generic_scaled_binary_operation!(
591    ScaledMultiplyAc4,
592    multiply_scaled,
593    multiply_scaled_ac4,
594    AC4,
595    [
596        u8 => multiply_u8_ac4,
597        u16 => multiply_u16_ac4,
598        i16 => multiply_i16_ac4,
599        ComplexI16 => multiply_i16_complex_ac4,
600        ComplexI32 => multiply_i32_complex_ac4,
601    ]
602);
603impl_generic_scaled_binary_operation_in_place!(
604    ScaledMultiplyAc4InPlace,
605    multiply_scaled_in_place,
606    multiply_scaled_ac4_in_place,
607    AC4,
608    [
609        u8 => multiply_u8_ac4_in_place,
610        u16 => multiply_u16_ac4_in_place,
611        i16 => multiply_i16_ac4_in_place,
612        ComplexI16 => multiply_i16_complex_ac4_in_place,
613        ComplexI32 => multiply_i32_complex_ac4_in_place,
614    ]
615);
616
617impl_generic_binary_operation!(
618    SubtractC3,
619    subtract,
620    subtract_c3,
621    C3,
622    [
623        f16 => subtract_f16_c3,
624        f32 => subtract_f32_c3,
625        Complex32 => subtract_f32_complex_c3,
626    ]
627);
628impl_generic_binary_operation_in_place!(
629    SubtractC3InPlace,
630    subtract_in_place,
631    subtract_c3_in_place,
632    C3,
633    [
634        f16 => subtract_f16_c3_in_place,
635        f32 => subtract_f32_c3_in_place,
636        Complex32 => subtract_f32_complex_c3_in_place,
637    ]
638);
639impl_generic_scaled_binary_operation!(
640    ScaledSubtractC3,
641    subtract_scaled,
642    subtract_scaled_c3,
643    C3,
644    [
645        u8 => subtract_u8_c3,
646        u16 => subtract_u16_c3,
647        i16 => subtract_i16_c3,
648        ComplexI16 => subtract_i16_complex_c3,
649        i32 => subtract_i32_c3,
650        ComplexI32 => subtract_i32_complex_c3,
651    ]
652);
653impl_generic_scaled_binary_operation_in_place!(
654    ScaledSubtractC3InPlace,
655    subtract_scaled_in_place,
656    subtract_scaled_c3_in_place,
657    C3,
658    [
659        u8 => subtract_u8_c3_in_place,
660        u16 => subtract_u16_c3_in_place,
661        i16 => subtract_i16_c3_in_place,
662        ComplexI16 => subtract_i16_complex_c3_in_place,
663        i32 => subtract_i32_c3_in_place,
664        ComplexI32 => subtract_i32_complex_c3_in_place,
665    ]
666);
667impl_generic_binary_operation!(
668    SubtractC4,
669    subtract,
670    subtract_c4,
671    C4,
672    [
673        f16 => subtract_f16_c4,
674        f32 => subtract_f32_c4,
675        Complex32 => subtract_f32_complex_c4,
676    ]
677);
678impl_generic_binary_operation_in_place!(
679    SubtractC4InPlace,
680    subtract_in_place,
681    subtract_c4_in_place,
682    C4,
683    [
684        f16 => subtract_f16_c4_in_place,
685        f32 => subtract_f32_c4_in_place,
686        Complex32 => subtract_f32_complex_c4_in_place,
687    ]
688);
689impl_generic_scaled_binary_operation!(
690    ScaledSubtractC4,
691    subtract_scaled,
692    subtract_scaled_c4,
693    C4,
694    [
695        u8 => subtract_u8_c4,
696        u16 => subtract_u16_c4,
697        i16 => subtract_i16_c4,
698        i32 => subtract_i32_c4,
699    ]
700);
701impl_generic_scaled_binary_operation_in_place!(
702    ScaledSubtractC4InPlace,
703    subtract_scaled_in_place,
704    subtract_scaled_c4_in_place,
705    C4,
706    [
707        u8 => subtract_u8_c4_in_place,
708        u16 => subtract_u16_c4_in_place,
709        i16 => subtract_i16_c4_in_place,
710        i32 => subtract_i32_c4_in_place,
711    ]
712);
713impl_generic_binary_operation!(
714    SubtractAc4,
715    subtract,
716    subtract_ac4,
717    AC4,
718    [
719        f32 => subtract_f32_ac4,
720        Complex32 => subtract_f32_complex_ac4,
721    ]
722);
723impl_generic_binary_operation_in_place!(
724    SubtractAc4InPlace,
725    subtract_in_place,
726    subtract_ac4_in_place,
727    AC4,
728    [
729        f32 => subtract_f32_ac4_in_place,
730        Complex32 => subtract_f32_complex_ac4_in_place,
731    ]
732);
733impl_generic_scaled_binary_operation!(
734    ScaledSubtractAc4,
735    subtract_scaled,
736    subtract_scaled_ac4,
737    AC4,
738    [
739        u8 => subtract_u8_ac4,
740        u16 => subtract_u16_ac4,
741        i16 => subtract_i16_ac4,
742        ComplexI16 => subtract_i16_complex_ac4,
743        ComplexI32 => subtract_i32_complex_ac4,
744    ]
745);
746impl_generic_scaled_binary_operation_in_place!(
747    ScaledSubtractAc4InPlace,
748    subtract_scaled_in_place,
749    subtract_scaled_ac4_in_place,
750    AC4,
751    [
752        u8 => subtract_u8_ac4_in_place,
753        u16 => subtract_u16_ac4_in_place,
754        i16 => subtract_i16_ac4_in_place,
755        ComplexI16 => subtract_i16_complex_ac4_in_place,
756        ComplexI32 => subtract_i32_complex_ac4_in_place,
757    ]
758);
759
760impl_generic_binary_operation!(
761    DivideC3,
762    divide,
763    divide_c3,
764    C3,
765    [
766        f16 => divide_f16_c3,
767        f32 => divide_f32_c3,
768        Complex32 => divide_f32_complex_c3,
769    ]
770);
771impl_generic_binary_operation_in_place!(
772    DivideC3InPlace,
773    divide_in_place,
774    divide_c3_in_place,
775    C3,
776    [
777        f16 => divide_f16_c3_in_place,
778        f32 => divide_f32_c3_in_place,
779        Complex32 => divide_f32_complex_c3_in_place,
780    ]
781);
782impl_generic_scaled_binary_operation!(
783    ScaledDivideC3,
784    divide_scaled,
785    divide_scaled_c3,
786    C3,
787    [
788        u8 => divide_u8_c3,
789        u16 => divide_u16_c3,
790        i16 => divide_i16_c3,
791        ComplexI16 => divide_i16_complex_c3,
792        i32 => divide_i32_c3,
793        ComplexI32 => divide_i32_complex_c3,
794    ]
795);
796impl_generic_scaled_binary_operation_in_place!(
797    ScaledDivideC3InPlace,
798    divide_scaled_in_place,
799    divide_scaled_c3_in_place,
800    C3,
801    [
802        u8 => divide_u8_c3_in_place,
803        u16 => divide_u16_c3_in_place,
804        i16 => divide_i16_c3_in_place,
805        ComplexI16 => divide_i16_complex_c3_in_place,
806        i32 => divide_i32_c3_in_place,
807        ComplexI32 => divide_i32_complex_c3_in_place,
808    ]
809);
810impl_generic_binary_operation!(
811    DivideC4,
812    divide,
813    divide_c4,
814    C4,
815    [
816        f16 => divide_f16_c4,
817        f32 => divide_f32_c4,
818        Complex32 => divide_f32_complex_c4,
819    ]
820);
821impl_generic_binary_operation_in_place!(
822    DivideC4InPlace,
823    divide_in_place,
824    divide_c4_in_place,
825    C4,
826    [
827        f16 => divide_f16_c4_in_place,
828        f32 => divide_f32_c4_in_place,
829        Complex32 => divide_f32_complex_c4_in_place,
830    ]
831);
832impl_generic_scaled_binary_operation!(
833    ScaledDivideC4,
834    divide_scaled,
835    divide_scaled_c4,
836    C4,
837    [
838        u8 => divide_u8_c4,
839        u16 => divide_u16_c4,
840        i16 => divide_i16_c4,
841    ]
842);
843impl_generic_scaled_binary_operation_in_place!(
844    ScaledDivideC4InPlace,
845    divide_scaled_in_place,
846    divide_scaled_c4_in_place,
847    C4,
848    [
849        u8 => divide_u8_c4_in_place,
850        u16 => divide_u16_c4_in_place,
851        i16 => divide_i16_c4_in_place,
852    ]
853);
854impl_generic_binary_operation!(
855    DivideAc4,
856    divide,
857    divide_ac4,
858    AC4,
859    [
860        f32 => divide_f32_ac4,
861        Complex32 => divide_f32_complex_ac4,
862    ]
863);
864impl_generic_binary_operation_in_place!(
865    DivideAc4InPlace,
866    divide_in_place,
867    divide_ac4_in_place,
868    AC4,
869    [
870        f32 => divide_f32_ac4_in_place,
871        Complex32 => divide_f32_complex_ac4_in_place,
872    ]
873);
874impl_generic_scaled_binary_operation!(
875    ScaledDivideAc4,
876    divide_scaled,
877    divide_scaled_ac4,
878    AC4,
879    [
880        u8 => divide_u8_ac4,
881        u16 => divide_u16_ac4,
882        i16 => divide_i16_ac4,
883        ComplexI16 => divide_i16_complex_ac4,
884        ComplexI32 => divide_i32_complex_ac4,
885    ]
886);
887impl_generic_scaled_binary_operation_in_place!(
888    ScaledDivideAc4InPlace,
889    divide_scaled_in_place,
890    divide_scaled_ac4_in_place,
891    AC4,
892    [
893        u8 => divide_u8_ac4_in_place,
894        u16 => divide_u16_ac4_in_place,
895        i16 => divide_i16_ac4_in_place,
896        ComplexI16 => divide_i16_complex_ac4_in_place,
897        ComplexI32 => divide_i32_complex_ac4_in_place,
898    ]
899);
900
901impl_generic_binary_operation!(
902    MultiplyScaleC1,
903    multiply_scale,
904    multiply_scale_c1,
905    C1,
906    [
907        u8 => multiply_scale_u8_c1,
908        u16 => multiply_scale_u16_c1,
909    ]
910);
911impl_generic_binary_operation_in_place!(
912    MultiplyScaleC1InPlace,
913    multiply_scale_in_place,
914    multiply_scale_c1_in_place,
915    C1,
916    [
917        u8 => multiply_scale_u8_c1_in_place,
918        u16 => multiply_scale_u16_c1_in_place,
919    ]
920);
921impl_generic_binary_operation!(
922    MultiplyScaleC3,
923    multiply_scale,
924    multiply_scale_c3,
925    C3,
926    [
927        u8 => multiply_scale_u8_c3,
928        u16 => multiply_scale_u16_c3,
929    ]
930);
931impl_generic_binary_operation_in_place!(
932    MultiplyScaleC3InPlace,
933    multiply_scale_in_place,
934    multiply_scale_c3_in_place,
935    C3,
936    [
937        u8 => multiply_scale_u8_c3_in_place,
938        u16 => multiply_scale_u16_c3_in_place,
939    ]
940);
941impl_generic_binary_operation!(
942    MultiplyScaleC4,
943    multiply_scale,
944    multiply_scale_c4,
945    C4,
946    [
947        u8 => multiply_scale_u8_c4,
948        u16 => multiply_scale_u16_c4,
949    ]
950);
951impl_generic_binary_operation_in_place!(
952    MultiplyScaleC4InPlace,
953    multiply_scale_in_place,
954    multiply_scale_c4_in_place,
955    C4,
956    [
957        u8 => multiply_scale_u8_c4_in_place,
958        u16 => multiply_scale_u16_c4_in_place,
959    ]
960);
961impl_generic_binary_operation!(
962    MultiplyScaleAc4,
963    multiply_scale,
964    multiply_scale_ac4,
965    AC4,
966    [
967        u8 => multiply_scale_u8_ac4,
968        u16 => multiply_scale_u16_ac4,
969    ]
970);
971impl_generic_binary_operation_in_place!(
972    MultiplyScaleAc4InPlace,
973    multiply_scale_in_place,
974    multiply_scale_ac4_in_place,
975    AC4,
976    [
977        u8 => multiply_scale_u8_ac4_in_place,
978        u16 => multiply_scale_u16_ac4_in_place,
979    ]
980);
981
982impl_generic_round_scaled_binary_operation!(
983    DivideRoundC1,
984    divide_round,
985    divide_round_c1,
986    C1,
987    [
988        u8 => divide_round_u8_c1,
989        u16 => divide_round_u16_c1,
990        i16 => divide_round_i16_c1,
991    ]
992);
993impl_generic_round_scaled_binary_operation_in_place!(
994    DivideRoundC1InPlace,
995    divide_round_in_place,
996    divide_round_c1_in_place,
997    C1,
998    [
999        u8 => divide_round_u8_c1_in_place,
1000        u16 => divide_round_u16_c1_in_place,
1001        i16 => divide_round_i16_c1_in_place,
1002    ]
1003);
1004impl_generic_round_scaled_binary_operation!(
1005    DivideRoundC3,
1006    divide_round,
1007    divide_round_c3,
1008    C3,
1009    [
1010        u8 => divide_round_u8_c3,
1011        u16 => divide_round_u16_c3,
1012        i16 => divide_round_i16_c3,
1013    ]
1014);
1015impl_generic_round_scaled_binary_operation_in_place!(
1016    DivideRoundC3InPlace,
1017    divide_round_in_place,
1018    divide_round_c3_in_place,
1019    C3,
1020    [
1021        u8 => divide_round_u8_c3_in_place,
1022        u16 => divide_round_u16_c3_in_place,
1023        i16 => divide_round_i16_c3_in_place,
1024    ]
1025);
1026impl_generic_round_scaled_binary_operation!(
1027    DivideRoundC4,
1028    divide_round,
1029    divide_round_c4,
1030    C4,
1031    [
1032        u8 => divide_round_u8_c4,
1033        u16 => divide_round_u16_c4,
1034        i16 => divide_round_i16_c4,
1035    ]
1036);
1037impl_generic_round_scaled_binary_operation_in_place!(
1038    DivideRoundC4InPlace,
1039    divide_round_in_place,
1040    divide_round_c4_in_place,
1041    C4,
1042    [
1043        u8 => divide_round_u8_c4_in_place,
1044        u16 => divide_round_u16_c4_in_place,
1045        i16 => divide_round_i16_c4_in_place,
1046    ]
1047);
1048impl_generic_round_scaled_binary_operation!(
1049    DivideRoundAc4,
1050    divide_round,
1051    divide_round_ac4,
1052    AC4,
1053    [
1054        u8 => divide_round_u8_ac4,
1055        u16 => divide_round_u16_ac4,
1056        i16 => divide_round_i16_ac4,
1057    ]
1058);
1059impl_generic_round_scaled_binary_operation_in_place!(
1060    DivideRoundAc4InPlace,
1061    divide_round_in_place,
1062    divide_round_ac4_in_place,
1063    AC4,
1064    [
1065        u8 => divide_round_u8_ac4_in_place,
1066        u16 => divide_round_u16_ac4_in_place,
1067        i16 => divide_round_i16_ac4_in_place,
1068    ]
1069);