[PATCH] More generic version of MSVC bug workaround

lvqcl <[email protected]>
Newsgroups gmane.comp.audio.compression.flac.devel
Message-ID <CAC1tzkibHEhsdqeWcKFEEHDa4pqybVf6S1txLZUjmbV7dRODYw@mail.gmail.com>
There was a fix for a bug in MSVC 2015 update2:
https://github.com/xiph/flac/commit/94a61241b02064c7d9fe508f72a742f2a90b8492

It seems that it's not the only version affected, see comment from
40th in this commit.
Also, JRMC is affected:
https://yabb.jriver.com/interact/index.php/topic,115742.0.html

So, it makes sense to remove version check: better safe than sorry,
and performance
impact should be very small (probably negligible) anyway.

_______________________________________________
flac-dev mailing list
[email protected]
http://lists.xiph.org/mailman/listinfo/flac-dev
Better-workaround-for-MSVC-bugs.patch (application/octet-stream, 2.8 KB)
diff --git a/src/libFLAC/stream_encoder_intrin_avx2.c b/src/libFLAC/stream_encoder_intrin_avx2.c
index 12591f0..265e6fe 100644
--- a/src/libFLAC/stream_encoder_intrin_avx2.c
+++ b/src/libFLAC/stream_encoder_intrin_avx2.c
@@ -86,8 +86,8 @@ void FLAC__precompute_partition_info_sums_intrin_avx2(const FLAC__int32 residual
 				sum128 = _mm_hadd_epi32(sum128, sum128);
 				sum128 = _mm_hadd_epi32(sum128, sum128);
 				abs_residual_partition_sums[partition] = (FLAC__uint32)_mm_cvtsi128_si32(sum128);
-/* workaround for a bug in MSVC2015U2 - see https://connect.microsoft.com/VisualStudio/feedback/details/2659191/incorrect-code-generation-for-x86-64 */
-#if (defined _MSC_VER) && (_MSC_FULL_VER == 190023918) && (defined FLAC__CPU_X86_64)
+/* workaround for MSVC bugs (at least versions 2015 and 2017 are affected) */
+#if (defined _MSC_VER) && (defined FLAC__CPU_X86_64)
 				abs_residual_partition_sums[partition] &= 0xFFFFFFFF; /**/
 #endif
 			}
diff --git a/src/libFLAC/stream_encoder_intrin_sse2.c b/src/libFLAC/stream_encoder_intrin_sse2.c
index 6c16d2e..ed94ec3 100644
--- a/src/libFLAC/stream_encoder_intrin_sse2.c
+++ b/src/libFLAC/stream_encoder_intrin_sse2.c
@@ -100,8 +100,8 @@ void FLAC__precompute_partition_info_sums_intrin_sse2(const FLAC__int32 residual
 				mm_sum = _mm_add_epi32(mm_sum, _mm_srli_si128(mm_sum, 8));
 				mm_sum = _mm_add_epi32(mm_sum, _mm_srli_si128(mm_sum, 4));
 				abs_residual_partition_sums[partition] = (FLAC__uint32)_mm_cvtsi128_si32(mm_sum);
-/* workaround for a bug in MSVC2015U2 - see https://connect.microsoft.com/VisualStudio/feedback/details/2659191/incorrect-code-generation-for-x86-64 */
-#if (defined _MSC_VER) && (_MSC_FULL_VER == 190023918) && (defined FLAC__CPU_X86_64)
+/* workaround for MSVC bugs (at least versions 2015 and 2017 are affected) */
+#if (defined _MSC_VER) && (defined FLAC__CPU_X86_64)
 				abs_residual_partition_sums[partition] &= 0xFFFFFFFF;
 #endif
 			}
diff --git a/src/libFLAC/stream_encoder_intrin_ssse3.c b/src/libFLAC/stream_encoder_intrin_ssse3.c
index 1e87d83..b5996f7 100644
--- a/src/libFLAC/stream_encoder_intrin_ssse3.c
+++ b/src/libFLAC/stream_encoder_intrin_ssse3.c
@@ -89,8 +89,8 @@ void FLAC__precompute_partition_info_sums_intrin_ssse3(const FLAC__int32 residua
 				mm_sum = _mm_hadd_epi32(mm_sum, mm_sum);
 				mm_sum = _mm_hadd_epi32(mm_sum, mm_sum);
 				abs_residual_partition_sums[partition] = (FLAC__uint32)_mm_cvtsi128_si32(mm_sum);
-/* workaround for a bug in MSVC2015U2 - see https://connect.microsoft.com/VisualStudio/feedback/details/2659191/incorrect-code-generation-for-x86-64 */
-#if (defined _MSC_VER) && (_MSC_FULL_VER == 190023918) && (defined FLAC__CPU_X86_64)
+/* workaround for MSVC bugs (at least versions 2015 and 2017 are affected) */
+#if (defined _MSC_VER) && (defined FLAC__CPU_X86_64)
 				abs_residual_partition_sums[partition] &= 0xFFFFFFFF;
 #endif
 			}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.