1use tract_data::internal::f16;
2
3by_scalar_impl_wrap!(
4 f32,
5 SMulByScalar4,
6 4,
7 4,
8 f32,
9 fn run(x: &mut [f32], s: f32) {
10 debug_assert!(x.len() % Self::nr() == 0);
11 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
12 x.iter_mut().for_each(|px| *px *= s)
13 }
14);
15
16by_scalar_impl_wrap!(
17 f32,
18 SAddByScalar4,
19 4,
20 4,
21 f32,
22 fn run(x: &mut [f32], s: f32) {
23 debug_assert!(x.len() % Self::nr() == 0);
24 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
25 x.iter_mut().for_each(|px| *px += s)
26 }
27);
28
29by_scalar_impl_wrap!(
30 f32,
31 SSubByScalar4,
32 4,
33 4,
34 f32,
35 fn run(x: &mut [f32], s: f32) {
36 debug_assert!(x.len() % Self::nr() == 0);
37 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
38 x.iter_mut().for_each(|px| *px -= s)
39 }
40);
41
42by_scalar_impl_wrap!(
43 f32,
44 SSubFByScalar4,
45 4,
46 4,
47 f32,
48 fn run(x: &mut [f32], s: f32) {
49 debug_assert!(x.len() % Self::nr() == 0);
50 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
51 x.iter_mut().for_each(|px| *px = s - *px)
52 }
53);
54
55by_scalar_impl_wrap!(
56 f32,
57 SMinByScalar4,
58 4,
59 4,
60 f32,
61 fn run(x: &mut [f32], s: f32) {
62 debug_assert!(x.len() % Self::nr() == 0);
63 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
64 x.iter_mut().for_each(|px| *px = px.min(s))
65 }
66);
67
68by_scalar_impl_wrap!(
69 f32,
70 SMaxByScalar4,
71 4,
72 4,
73 f32,
74 fn run(x: &mut [f32], s: f32) {
75 debug_assert!(x.len() % Self::nr() == 0);
76 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
77 x.iter_mut().for_each(|px| *px = px.max(s))
78 }
79);
80
81#[cfg(test)]
82#[macro_use]
83pub mod mul_by_scalar_f32 {
84 use super::*;
85 by_scalar_frame_tests!(true, f32, SMulByScalar4, |a, b| a * b);
86 by_scalar_frame_tests!(true, f32, SAddByScalar4, |a, b| a + b );
87 by_scalar_frame_tests!(true, f32, SSubByScalar4, |a, b| a - b);
88 by_scalar_frame_tests!(true, f32, SSubFByScalar4, |a, b| b - a);
89 by_scalar_frame_tests!(true, f32, SMinByScalar4, |a, b| a.min(b));
90 by_scalar_frame_tests!(true, f32, SMaxByScalar4, |a, b| a.max(b));
91}
92
93by_scalar_impl_wrap!(
94 f16,
95 HMulByScalar8,
96 8,
97 8,
98 f16,
99 fn run(x: &mut [f16], s: f16) {
100 debug_assert!(x.len() % Self::nr() == 0);
101 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
102 x.iter_mut().for_each(|px| *px *= s)
103 }
104);
105
106by_scalar_impl_wrap!(
107 f16,
108 HAddByScalar8,
109 8,
110 8,
111 f16,
112 fn run(x: &mut [f16], s: f16) {
113 debug_assert!(x.len() % Self::nr() == 0);
114 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
115 x.iter_mut().for_each(|px| *px += s)
116 }
117);
118
119by_scalar_impl_wrap!(
120 f16,
121 HSubByScalar8,
122 8,
123 8,
124 f16,
125 fn run(x: &mut [f16], s: f16) {
126 debug_assert!(x.len() % Self::nr() == 0);
127 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
128 x.iter_mut().for_each(|px| *px -= s)
129 }
130);
131
132by_scalar_impl_wrap!(
133 f16,
134 HSubFByScalar8,
135 8,
136 8,
137 f16,
138 fn run(x: &mut [f16], s: f16) {
139 debug_assert!(x.len() % Self::nr() == 0);
140 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
141 x.iter_mut().for_each(|px| *px = s - *px)
142 }
143);
144
145by_scalar_impl_wrap!(
146 f16,
147 HMinByScalar8,
148 8,
149 8,
150 f16,
151 fn run(x: &mut [f16], s: f16) {
152 debug_assert!(x.len() % Self::nr() == 0);
153 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
154 x.iter_mut().for_each(|px| *px = px.min(s))
155 }
156);
157
158by_scalar_impl_wrap!(
159 f16,
160 HMaxByScalar8,
161 8,
162 8,
163 f16,
164 fn run(x: &mut [f16], s: f16) {
165 debug_assert!(x.len() % Self::nr() == 0);
166 debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
167 x.iter_mut().for_each(|px| *px = px.max(s))
168 }
169);
170
171#[cfg(test)]
172#[macro_use]
173pub mod mul_by_scalar_f16 {
174 use super::*;
175 by_scalar_frame_tests!(true, f16, HMulByScalar8, |a, b| a * b);
176 by_scalar_frame_tests!(true, f16, HAddByScalar8, |a, b| a + b);
177 by_scalar_frame_tests!(true, f16, HSubByScalar8, |a, b| a - b);
178 by_scalar_frame_tests!(true, f16, HSubFByScalar8, |a, b| b - a);
179 by_scalar_frame_tests!(true, f16, HMinByScalar8, |a, b| a.min(b));
180 by_scalar_frame_tests!(true, f16, HMaxByScalar8, |a, b| a.max(b));
181}