| 1207 | // Helper: time 4-wide scalar u16x16 with a binary op |
| 1208 | template <typename Op> |
| 1209 | inline int64_t benchU16x16_4(int iters, Op op) { |
| 1210 | fl::u16x16 a0(1.5f), a1(2.3f), a2(0.7f), a3(3.1f); |
| 1211 | fl::u16x16 b0(0.5f), b1(1.2f), b2(2.0f), b3(0.9f); |
| 1212 | fl::u16x16 bump = fl::u16x16::from_raw(1); |
| 1213 | uint32_t t0 = micros(); |
| 1214 | for (int i = 0; i < iters; i++) { |
| 1215 | a0 = op(a0, b0); a1 = op(a1, b1); |
| 1216 | a2 = op(a2, b2); a3 = op(a3, b3); |
| 1217 | b0 = a0 + bump; b1 = a1 + bump; |
| 1218 | b2 = a2 + bump; b3 = a3 + bump; |
| 1219 | } |
| 1220 | uint32_t t1 = micros(); |
| 1221 | g_bench_sink = static_cast<uint32_t>(a0.raw()); |
| 1222 | return static_cast<int64_t>(t1 - t0); |
| 1223 | } |
| 1224 | |
| 1225 | struct OpDivFloat { |
| 1226 | float operator()(float a, float b) const { return a / b; } |
no test coverage detected