| 568 | } |
| 569 | |
| 570 | inline void VecStore3D(const vec_float& v, float *ptr) |
| 571 | { |
| 572 | #if defined(TERATHON_SSE4) |
| 573 | |
| 574 | ptr[0] = v[0]; |
| 575 | ptr[1] = v[1]; |
| 576 | ptr[2] = v[2]; |
| 577 | |
| 578 | #elif defined(TERATHON_SSE) |
| 579 | |
| 580 | _mm_store_ss(&ptr[0], v); |
| 581 | _mm_store_ss(&ptr[1], _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1))); |
| 582 | _mm_store_ss(&ptr[2], _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2))); |
| 583 | |
| 584 | #elif defined(TERATHON_NEON) |
| 585 | |
| 586 | vst1q_lane_f32(&ptr[0], v, 0); |
| 587 | vst1q_lane_f32(&ptr[1], v, 1); |
| 588 | vst1q_lane_f32(&ptr[2], v, 2); |
| 589 | |
| 590 | #endif |
| 591 | } |
| 592 | |
| 593 | inline int32 VecTruncateConvert(const vec_float& v) |
| 594 | { |
no outgoing calls
no test coverage detected