| 364 | } |
| 365 | |
| 366 | void ArrayMath::addConstant(int size, |
| 367 | const float* in, |
| 368 | float constant, |
| 369 | float* out) |
| 370 | { |
| 371 | auto simdSize = size & ~3; |
| 372 | auto simdConstant = float4::set1(constant); |
| 373 | |
| 374 | if (float4::isAligned(in) && float4::isAligned(out)) |
| 375 | { |
| 376 | for (auto i = 0; i < simdSize; i += 4) |
| 377 | { |
| 378 | float4::store(&out[i], float4::add(float4::load(&in[i]), simdConstant)); |
| 379 | } |
| 380 | } |
| 381 | else |
| 382 | { |
| 383 | for (auto i = 0; i < simdSize; i += 4) |
| 384 | { |
| 385 | float4::storeu(&out[i], float4::add(float4::loadu(&in[i]), simdConstant)); |
| 386 | } |
| 387 | } |
| 388 | |
| 389 | for (auto i = simdSize; i < size; ++i) |
| 390 | { |
| 391 | out[i] = in[i] + constant; |
| 392 | } |
| 393 | } |
| 394 | |
| 395 | void ArrayMath::max(int size, |
| 396 | const float* in, |