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 | 24 | SECTION .text |
| 25 | 25 | |
| 26 | −%macro INT16_TO_INT32 0 | |
| 26 | +%macro INT16_TO_INT32 1 | |
| 27 | 27 | cglobal int16_to_int32_%1, 3, 3, 0, dst, src, len |
| 28 | 28 | mov srcq, [srcq] |
| 29 | 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 | 38 | .next |
| 31 | − movu m4, [srcq] | |
| 39 | + mov%1 m4, [srcq] | |
| 32 | 40 | pxor m0, m0 |
| 33 | 41 | pxor m1, m1 |
| 34 | 42 | punpcklwd m0, m4 |
| 35 | 43 | punpckhwd m1, m4 |
| 36 | − movu [ dstq], m0 | |
| 37 | − movu [mmsize + dstq], m1 | |
| 44 | + mov%1 [ dstq], m0 | |
| 45 | + mov%1 [mmsize + dstq], m1 | |
| 38 | 46 | add srcq, mmsize |
| 39 | 47 | add dstq, 2*mmsize |
| 40 | 48 | sub lenq, 2*mmsize |
| @@ -46,7 +54,9 @@ cglobal int16_to_int32_%1, 3, 3, 0, dst, src, len · 5 unmodified lines | ||
| 46 | 54 | %endmacro |
| 47 | 55 | |
| 48 | 56 | INIT_MMX mmx |
| 49 | −INT16_TO_INT32 | |
| 57 | +INT16_TO_INT32 u | |
| 58 | +INT16_TO_INT32 a | |
| 50 | 59 | |
| 51 | 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 | 22 | #include "libswresample/audioconvert.h" |
| 23 | 23 | |
| 24 | 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 | 26 | MULTI_CAPS_FUNC_DECL(mmx) |
| 27 | 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 | 39 | #define MULTI_CAPS_FUNC(flag, cap) \ |
| 40 | 40 | if (mm_flags & flag) {\ |
| 41 | 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 | 45 | MULTI_CAPS_FUNC(AV_CPU_FLAG_MMX, mmx) |