rstsr_openblas/rayon_auto_impl/
op_ternary_arithmetic.rs1use crate::prelude_dev::*;
2
3#[duplicate_item(
4 DeviceOpAPI Op func ;
5 [DeviceAddAPI ] [Add ] [|c, a, b| { c.write(a.clone() + b.clone()); }];
6 [DeviceSubAPI ] [Sub ] [|c, a, b| { c.write(a.clone() - b.clone()); }];
7 [DeviceMulAPI ] [Mul ] [|c, a, b| { c.write(a.clone() * b.clone()); }];
8 [DeviceDivAPI ] [Div ] [|c, a, b| { c.write(a.clone() / b.clone()); }];
9 [DeviceRemAPI ] [Rem ] [|c, a, b| { c.write(a.clone() % b.clone()); }];
10 [DeviceBitOrAPI ] [BitOr ] [|c, a, b| { c.write(a.clone() | b.clone()); }];
11 [DeviceBitAndAPI] [BitAnd] [|c, a, b| { c.write(a.clone() & b.clone()); }];
12 [DeviceBitXorAPI] [BitXor] [|c, a, b| { c.write(a.clone() ^ b.clone()); }];
13 [DeviceShlAPI ] [Shl ] [|c, a, b| { c.write(a.clone() << b.clone()); }];
14 [DeviceShrAPI ] [Shr ] [|c, a, b| { c.write(a.clone() >> b.clone()); }];
15)]
16impl<TA, TB, TC, D> DeviceOpAPI<TA, TB, TC, D> for DeviceRayonAutoImpl
17where
18 TA: Clone + Send + Sync + Op<TB, Output = TC>,
19 TB: Clone + Send + Sync,
20 TC: Clone + Send + Sync,
21 D: DimAPI,
22{
23 fn op_mutc_refa_refb(
24 &self,
25 c: &mut Vec<MaybeUninit<TC>>,
26 lc: &Layout<D>,
27 a: &Vec<TA>,
28 la: &Layout<D>,
29 b: &Vec<TB>,
30 lb: &Layout<D>,
31 ) -> Result<()> {
32 self.op_mutc_refa_refb_func(c, lc, a, la, b, lb, &mut func)
33 }
34
35 fn op_mutc_refa_numb(
36 &self,
37 c: &mut Vec<MaybeUninit<TC>>,
38 lc: &Layout<D>,
39 a: &Vec<TA>,
40 la: &Layout<D>,
41 b: TB,
42 ) -> Result<()> {
43 self.op_mutc_refa_numb_func(c, lc, a, la, b, &mut func)
44 }
45
46 fn op_mutc_numa_refb(
47 &self,
48 c: &mut Vec<MaybeUninit<TC>>,
49 lc: &Layout<D>,
50 a: TA,
51 b: &Vec<TB>,
52 lb: &Layout<D>,
53 ) -> Result<()> {
54 self.op_mutc_numa_refb_func(c, lc, a, b, lb, &mut func)
55 }
56}