summaryrefslogtreecommitdiff
path: root/thirdparty/minimp3/patches/msvc-arm-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/minimp3/patches/msvc-arm-fix.patch')
-rw-r--r--thirdparty/minimp3/patches/msvc-arm-fix.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/thirdparty/minimp3/patches/msvc-arm-fix.patch b/thirdparty/minimp3/patches/msvc-arm-fix.patch
new file mode 100644
index 0000000000..bca915aceb
--- /dev/null
+++ b/thirdparty/minimp3/patches/msvc-arm-fix.patch
@@ -0,0 +1,43 @@
+diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h
+index 3220ae1a85..2a9975cc86 100644
+--- a/thirdparty/minimp3/minimp3.h
++++ b/thirdparty/minimp3/minimp3.h
+@@ -1566,7 +1566,18 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins)
+
+ #else /* MINIMP3_FLOAT_OUTPUT */
+
++// -- GODOT start --
++#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
++ static f4 g_scale;
++ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0);
++ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 1);
++ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 2);
++ g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 3);
++#else
+ static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f };
++#endif
++// -- GODOT end --
++
+ a = VMUL(a, g_scale);
+ b = VMUL(b, g_scale);
+ #if HAVE_SSE
+@@ -1813,7 +1824,19 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples)
+ int aligned_count = num_samples & ~7;
+ for(; i < aligned_count; i += 8)
+ {
++
++// -- GODOT start --
++#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
++ static f4 g_scale;
++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 0);
++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 1);
++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 2);
++ g_scale = vsetq_lane_f32(32768.0f, g_scale, 3);
++#else
+ static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f };
++#endif
++// -- GODOT end --
++
+ f4 a = VMUL(VLD(&in[i ]), g_scale);
+ f4 b = VMUL(VLD(&in[i+4]), g_scale);
+ #if HAVE_SSE