0001-msvc-arm.patch 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. diff --git a/thirdparty/minimp3/minimp3.h b/thirdparty/minimp3/minimp3.h
  2. index 3220ae1a85..49708b9846 100644
  3. --- a/thirdparty/minimp3/minimp3.h
  4. +++ b/thirdparty/minimp3/minimp3.h
  5. @@ -1566,7 +1566,16 @@ static void mp3d_synth(float *xl, mp3d_sample_t *dstl, int nch, float *lins)
  6. #else /* MINIMP3_FLOAT_OUTPUT */
  7. +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
  8. + static f4 g_scale;
  9. + g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 0);
  10. + g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 1);
  11. + g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 2);
  12. + g_scale = vsetq_lane_f32(1.0f/32768.0f, g_scale, 3);
  13. +#else
  14. static const f4 g_scale = { 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f, 1.0f/32768.0f };
  15. +#endif
  16. +
  17. a = VMUL(a, g_scale);
  18. b = VMUL(b, g_scale);
  19. #if HAVE_SSE
  20. @@ -1813,7 +1822,17 @@ void mp3dec_f32_to_s16(const float *in, int16_t *out, int num_samples)
  21. int aligned_count = num_samples & ~7;
  22. for(; i < aligned_count; i += 8)
  23. {
  24. +
  25. +#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_ARM))
  26. + static f4 g_scale;
  27. + g_scale = vsetq_lane_f32(32768.0f, g_scale, 0);
  28. + g_scale = vsetq_lane_f32(32768.0f, g_scale, 1);
  29. + g_scale = vsetq_lane_f32(32768.0f, g_scale, 2);
  30. + g_scale = vsetq_lane_f32(32768.0f, g_scale, 3);
  31. +#else
  32. static const f4 g_scale = { 32768.0f, 32768.0f, 32768.0f, 32768.0f };
  33. +#endif
  34. +
  35. f4 a = VMUL(VLD(&in[i ]), g_scale);
  36. f4 b = VMUL(VLD(&in[i+4]), g_scale);
  37. #if HAVE_SSE