| 42 | |
| 43 | MEGDNN_ATTRIBUTE_TARGET("sse") |
| 44 | void transpose4x4_sse(const float* src, float* dst, ptrdiff_t lda, ptrdiff_t ldb) { |
| 45 | __m128 row0 = _mm_loadu_ps(src + 0 * lda); |
| 46 | __m128 row1 = _mm_loadu_ps(src + 1 * lda); |
| 47 | __m128 row2 = _mm_loadu_ps(src + 2 * lda); |
| 48 | __m128 row3 = _mm_loadu_ps(src + 3 * lda); |
| 49 | _MM_TRANSPOSE4_PS(row0, row1, row2, row3); |
| 50 | _mm_storeu_ps(dst + 0 * ldb, row0); |
| 51 | _mm_storeu_ps(dst + 1 * ldb, row1); |
| 52 | _mm_storeu_ps(dst + 2 * ldb, row2); |
| 53 | _mm_storeu_ps(dst + 3 * ldb, row3); |
| 54 | } |
| 55 | |
| 56 | void transpose_naive( |
| 57 | const float* src, float* dst, ptrdiff_t lda, ptrdiff_t ldb, size_t n, |