ref: d0c3972856df5c0d73b76984d34a6850b4680237
parent: 362f542cfb71e70d3f3ef82f5e3407857648ca6c
author: Siarhei Volkau <lis8215@gmail.com>
date: Wed Aug 20 05:03:30 EDT 2025
MIPS DSP: disable DSP code for MIPS64 with DSP Because support for MIPS64 DSP in GCC completely broken: - no builtin functions for mult, madd, msub, extr, shilo used here. - inline assembly with accumulators not works well when GCC reaches limit of 4 accumulators: observed in xcorr_kernel_mips and silk_warped_autocorrelation_FIX_c. Signed-off-by: Siarhei Volkau <lis8215@gmail.com> Signed-off-by: Jean-Marc Valin <jeanmarcv@google.com>
--- a/celt/_kiss_fft_guts.h
+++ b/celt/_kiss_fft_guts.h
@@ -102,7 +102,7 @@
#if defined(OPUS_ARM_INLINE_EDSP)
#include "arm/kiss_fft_armv5e.h"
#endif
-#if defined(__mips_dsp)
+#if defined(__mips_dsp) && __mips == 32
#include "mips/kiss_fft_mipsr1.h"
#endif
--- a/celt/celt.c
+++ b/celt/celt.c
@@ -54,7 +54,7 @@
#define PACKAGE_VERSION "unknown"
#endif
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/celt_mipsr1.h"
#endif
--- a/celt/fixed_generic.h
+++ b/celt/fixed_generic.h
@@ -200,7 +200,7 @@
/** Divide a 32-bit value by a 32-bit value. Result fits in 32 bits */
#define DIV32(a,b) (((opus_val32)(a))/((opus_val32)(b)))
-#if defined(__mips_dsp)
+#if defined(__mips_dsp) && __mips == 32
#include "mips/fixed_generic_mipsr1.h"
#endif
--- a/celt/mdct.c
+++ b/celt/mdct.c
@@ -53,7 +53,7 @@
#include "mathops.h"
#include "stack_alloc.h"
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/mdct_mipsr1.h"
#endif
--- a/celt/pitch.h
+++ b/celt/pitch.h
@@ -42,7 +42,7 @@
#include "x86/pitch_sse.h"
#endif
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/pitch_mipsr1.h"
#endif
--- a/celt/vq.c
+++ b/celt/vq.c
@@ -39,7 +39,7 @@
#include "rate.h"
#include "pitch.h"
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/vq_mipsr1.h"
#endif
--- a/silk/NSQ_del_dec.c
+++ b/silk/NSQ_del_dec.c
@@ -61,7 +61,7 @@
typedef NSQ_sample_struct NSQ_sample_pair[ 2 ];
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/NSQ_del_dec_mipsr1.h"
#endif
static OPUS_INLINE void silk_nsq_del_dec_scale_states(
--- a/silk/SigProc_FIX.h
+++ b/silk/SigProc_FIX.h
@@ -631,7 +631,7 @@
#include "arm/SigProc_FIX_armv5e.h"
#endif
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/sigproc_fix_mipsr1.h"
#endif
--- a/silk/fixed/noise_shape_analysis_FIX.c
+++ b/silk/fixed/noise_shape_analysis_FIX.c
@@ -129,7 +129,7 @@
}
/* Disable MIPS DSP version until it's updated. */
-#if 0 && defined(__mips_dsp)
+#if 0 && defined(__mips_dsp) && __mips == 32
#include "mips/noise_shape_analysis_FIX_mipsr1.h"
#endif
--- a/silk/fixed/warped_autocorrelation_FIX.c
+++ b/silk/fixed/warped_autocorrelation_FIX.c
@@ -31,7 +31,7 @@
#include "main_FIX.h"
-#if defined(__mips_dsp)
+#if defined(__mips_dsp) && __mips == 32
#include "mips/warped_autocorrelation_FIX_mipsr1.h"
#endif
--- a/silk/macros.h
+++ b/silk/macros.h
@@ -104,7 +104,7 @@
(( (a) & ((b)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a)-(b)) : \
((((a)^0x80000000) & (b) & 0x80000000) ? silk_int32_MAX : (a)-(b)) )
-#if defined(FIXED_POINT) && defined(__mips_dsp)
+#if defined(FIXED_POINT) && defined(__mips_dsp) && __mips == 32
#include "mips/macros_mipsr1.h"
#endif
--
⑨