44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
|
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
|