| 1559 | |
| 1560 | |
| 1561 | static void |
| 1562 | transform_32f( const float* src, float* dst, const float* m, int len, int scn, int dcn ) |
| 1563 | { |
| 1564 | #if CV_SSE2 |
| 1565 | if( USE_SSE2 ) |
| 1566 | { |
| 1567 | int x = 0; |
| 1568 | if( scn == 3 && dcn == 3 ) |
| 1569 | { |
| 1570 | __m128 m0, m1, m2, m3; |
| 1571 | load3x3Matrix(m, m0, m1, m2, m3); |
| 1572 | |
| 1573 | for( ; x < (len - 1)*3; x += 3 ) |
| 1574 | { |
| 1575 | __m128 x0 = _mm_loadu_ps(src + x); |
| 1576 | __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps( |
| 1577 | _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))), |
| 1578 | _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))), |
| 1579 | _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), m3); |
| 1580 | _mm_storel_pi((__m64*)(dst + x), y0); |
| 1581 | _mm_store_ss(dst + x + 2, _mm_movehl_ps(y0,y0)); |
| 1582 | } |
| 1583 | |
| 1584 | for( ; x < len*3; x += 3 ) |
| 1585 | { |
| 1586 | float v0 = src[x], v1 = src[x+1], v2 = src[x+2]; |
| 1587 | float t0 = saturate_cast<float>(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]); |
| 1588 | float t1 = saturate_cast<float>(m[4]*v0 + m[5]*v1 + m[6]*v2 + m[7]); |
| 1589 | float t2 = saturate_cast<float>(m[8]*v0 + m[9]*v1 + m[10]*v2 + m[11]); |
| 1590 | dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; |
| 1591 | } |
| 1592 | return; |
| 1593 | } |
| 1594 | |
| 1595 | if( scn == 4 && dcn == 4 ) |
| 1596 | { |
| 1597 | __m128 m0, m1, m2, m3, m4; |
| 1598 | load4x4Matrix(m, m0, m1, m2, m3, m4); |
| 1599 | |
| 1600 | for( ; x < len*4; x += 4 ) |
| 1601 | { |
| 1602 | __m128 x0 = _mm_loadu_ps(src + x); |
| 1603 | __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps(_mm_add_ps( |
| 1604 | _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))), |
| 1605 | _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))), |
| 1606 | _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), |
| 1607 | _mm_mul_ps(m3, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(3,3,3,3)))), m4); |
| 1608 | _mm_storeu_ps(dst + x, y0); |
| 1609 | } |
| 1610 | return; |
| 1611 | } |
| 1612 | } |
| 1613 | #endif |
| 1614 | |
| 1615 | transform_(src, dst, m, len, scn, dcn); |
| 1616 | } |
| 1617 | |
| 1618 |
nothing calls this directly
no test coverage detected