libFLAC: Add a workaround for a bug in MSVC2105 update2
authorErik de Castro Lopo <erikd@mega-nerd.com>
Thu, 5 May 2016 07:21:20 +0000 (17:21 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Thu, 5 May 2016 07:23:52 +0000 (17:23 +1000)
commit94a61241b02064c7d9fe508f72a742f2a90b8492
tree63929d6dc3541cf2dc6500114f507c3dc155a156
parent387992bd6411411739014e633a80cfe639e4db36
libFLAC: Add a workaround for a bug in MSVC2105 update2

MSVC2105 update2 compiles the C code:

    abs_residual_partition_sums[partition] =
                  (FLAC__uint32)_mm_cvtsi128_si32(mm_sum);

into this:

    movq    QWORD PTR [rsi], xmm2

while it should be:

    movd    eax, xmm2
    mov     QWORD PTR [rsi], rax

With this patch, MSVC emits:

    movq    QWORD PTR [rsi], xmm2
    mov     DWORD PTR [rsi+4], r9d

so the price of this workaround is 1 extra write instruction per
partition.

Patch-from: lvqcl <lvqcl.mail@gmail.com>
src/libFLAC/stream_encoder_intrin_avx2.c
src/libFLAC/stream_encoder_intrin_sse2.c
src/libFLAC/stream_encoder_intrin_ssse3.c