If someone has an idea on how to do this cleaner, its welcome
Showing the changes to libswresample (2 of 2 files). Show all
Unified · Split
| @@ -23,18 +23,26 @@ · 22 unmodified lines | |||
| 23 | 23 | ||
| 24 | SECTION .text | 24 | SECTION .text |
| 25 | 25 | ||
| 26 | %macro INT16_TO_INT32 0 | 26 | %macro INT16_TO_INT32 1 |
| 27 | cglobal int16_to_int32_%1, 3, 3, 0, dst, src, len | 27 | cglobal int16_to_int32_%1, 3, 3, 0, dst, src, len |
| 28 | mov srcq, [srcq] | 28 | mov srcq, [srcq] |
| 29 | mov dstq, [dstq] | 29 | mov dstq, [dstq] |
| 30 | %ifidn %1, a | ||
| 31 | test dstq, mmsize-1 | ||
| 32 | jne int16_to_int32_u_int %+ SUFFIX | ||
| 33 | test srcq, mmsize-1 | ||
| 34 | jne int16_to_int32_u_int %+ SUFFIX | ||
| 35 | %else | ||
| 36 | int16_to_int32_u_int %+ SUFFIX | ||
| 37 | %endif | ||
| 30 | .next | 38 | .next |
| 31 | movu m4, [srcq] | 39 | mov%1 m4, [srcq] |
| 32 | pxor m0, m0 | 40 | pxor m0, m0 |
| 33 | pxor m1, m1 | 41 | pxor m1, m1 |
| 34 | punpcklwd m0, m4 | 42 | punpcklwd m0, m4 |
| 35 | punpckhwd m1, m4 | 43 | punpckhwd m1, m4 |
| 36 | movu [ dstq], m0 | 44 | mov%1 [ dstq], m0 |
| 37 | movu [mmsize + dstq], m1 | 45 | mov%1 [mmsize + dstq], m1 |
| 38 | add srcq, mmsize | 46 | add srcq, mmsize |
| 39 | add dstq, 2*mmsize | 47 | add dstq, 2*mmsize |
| 40 | sub lenq, 2*mmsize | 48 | sub lenq, 2*mmsize |
| @@ -46,7 +54,9 @@ cglobal int16_to_int32_%1, 3, 3, 0, dst, src, len · 5 unmodified lines | |||
| 46 | %endmacro | 54 | %endmacro |
| 47 | 55 | ||
| 48 | INIT_MMX mmx | 56 | INIT_MMX mmx |
| 49 | INT16_TO_INT32 | 57 | INT16_TO_INT32 u |
| 58 | INT16_TO_INT32 a | ||
| 50 | 59 | ||
| 51 | INIT_XMM sse | 60 | INIT_XMM sse |
| 52 | INT16_TO_INT32 | 61 | INT16_TO_INT32 u |
| 62 | INT16_TO_INT32 a | ||
| @@ -22,7 +22,7 @@ · 21 unmodified lines | |||
| 22 | #include "libswresample/audioconvert.h" | 22 | #include "libswresample/audioconvert.h" |
| 23 | 23 | ||
| 24 | #define MULTI_CAPS_FUNC_DECL(cap) \ | 24 | #define MULTI_CAPS_FUNC_DECL(cap) \ |
| 25 | void ff_int16_to_int32_ ## cap(uint8_t **dst, const uint8_t **src, int len); | 25 | void ff_int16_to_int32_a_ ## cap(uint8_t **dst, const uint8_t **src, int len); |
| 26 | MULTI_CAPS_FUNC_DECL(mmx) | 26 | MULTI_CAPS_FUNC_DECL(mmx) |
| 27 | MULTI_CAPS_FUNC_DECL(sse) | 27 | MULTI_CAPS_FUNC_DECL(sse) |
| 28 | 28 | ||
| @@ -39,7 +39,7 @@ void swri_audio_convert_init_x86(struct AudioConvert *ac, · 10 unmodified lines | |||
| 39 | #define MULTI_CAPS_FUNC(flag, cap) \ | 39 | #define MULTI_CAPS_FUNC(flag, cap) \ |
| 40 | if (mm_flags & flag) {\ | 40 | if (mm_flags & flag) {\ |
| 41 | if( out_fmt == AV_SAMPLE_FMT_S32 && in_fmt == AV_SAMPLE_FMT_S16 || out_fmt == AV_SAMPLE_FMT_S32P && in_fmt == AV_SAMPLE_FMT_S16P)\ | 41 | if( out_fmt == AV_SAMPLE_FMT_S32 && in_fmt == AV_SAMPLE_FMT_S16 || out_fmt == AV_SAMPLE_FMT_S32P && in_fmt == AV_SAMPLE_FMT_S16P)\ |
| 42 | ac->simd_f = ff_int16_to_int32_ ## cap;\ | 42 | ac->simd_f = ff_int16_to_int32_a_ ## cap;\ |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | MULTI_CAPS_FUNC(AV_CPU_FLAG_MMX, mmx) | 45 | MULTI_CAPS_FUNC(AV_CPU_FLAG_MMX, mmx) |