Path: blob/master/thirdparty/minimp3/patches/0001-msvc-arm.patch
9912 views
diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h1index 3220ae1a85..49708b9846 1006442--- a/thirdparty/minimp3/minimp3.h3+++ b/thirdparty/minimp3/minimp3.h4@@ -1566,7 +1566,16 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins)56#else /* MINIMP3_FLOAT_OUTPUT */78+#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))9+ static f4 g_scale;10+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0);11+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 1);12+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 2);13+ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 3);14+#else15static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f };16+#endif17+18a = VMUL(a, g_scale);19b = VMUL(b, g_scale);20#if HAVE_SSE21@@ -1813,7 +1822,17 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples)22int aligned_count = num_samples & ~7;23for(; i < aligned_count; i += 8)24{25+26+#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))27+ static f4 g_scale;28+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 0);29+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 1);30+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 2);31+ g_scale = vsetq_lane_f32(32768.0f, g_scale, 3);32+#else33static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f };34+#endif35+36f4 a = VMUL(VLD(&in[i ]), g_scale);37f4 b = VMUL(VLD(&in[i+4]), g_scale);38#if HAVE_SSE394041