Reduce the number of registers used in MIPS optimizations.

This change is needed by ChromeOS as it introduces -fno-omit-frame-pointer
flag (see code.google.com/p/chromium/issues/detail?id=477749). This causes
compile error for MIPS, as some MIPS optimization blocks use maximum possible
number of available registers.
Also, this change contains minor GN build fix for MIPS platform regarding the
pitch_filter_mips.c / pitch_filter_c.c file inclusion.

BUG=477749
R=andrew@webrtc.org, djordje.pesut@imgtec.com, tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/48139004

Patch from Ljubomir Papuga <lpapuga@mips.com>.

Cr-Commit-Position: refs/heads/master@{#9047}
diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn
index 8db2930..790b1a9 100644
--- a/webrtc/modules/audio_coding/BUILD.gn
+++ b/webrtc/modules/audio_coding/BUILD.gn
@@ -498,7 +498,9 @@
     "codecs/isac/fix/source/lpc_tables.h",
     "codecs/isac/fix/source/pitch_estimator.c",
     "codecs/isac/fix/source/pitch_estimator.h",
+    "codecs/isac/fix/source/pitch_estimator_c.c",
     "codecs/isac/fix/source/pitch_filter.c",
+    "codecs/isac/fix/source/pitch_filter_c.c",
     "codecs/isac/fix/source/pitch_gain_tables.c",
     "codecs/isac/fix/source/pitch_gain_tables.h",
     "codecs/isac/fix/source/pitch_lag_tables.c",
@@ -546,8 +548,9 @@
       "codecs/isac/fix/source/lattice_armv7.S",
       "codecs/isac/fix/source/pitch_filter_armv6.S",
     ]
-  } else {
-    sources += [ "codecs/isac/fix/source/pitch_filter_c.c" ]
+    sources -= [
+      "codecs/isac/fix/source/pitch_filter_c.c",
+    ]
   }
 
   if (current_cpu == "mipsel") {
@@ -558,19 +561,23 @@
       "codecs/isac/fix/source/pitch_estimator_mips.c",
       "codecs/isac/fix/source/transform_mips.c",
     ]
+    sources -= [
+      "codecs/isac/fix/source/pitch_estimator_c.c"
+    ]
     if (mips_dsp_rev > 0) {
-      sources += [ "codecs/isac/fix/source/filterbanks_mips.c" ]
+      sources += [
+        "codecs/isac/fix/source/filterbanks_mips.c"
+      ]
     }
     if (mips_dsp_rev > 1) {
       sources += [
         "codecs/isac/fix/source/lpc_masking_model_mips.c",
         "codecs/isac/fix/source/pitch_filter_mips.c",
       ]
-    } else {
-      sources += [ "codecs/isac/fix/source/pitch_filter_c.c" ]
+      sources -= [
+        "codecs/isac/fix/source/pitch_filter_c.c"
+      ]
     }
-  } else {
-    sources += [ "codecs/isac/fix/source/pitch_estimator_c.c" ]
   }
 
   if (!rtc_build_armv7_neon && current_cpu != "mipsel") {
diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/source/transform_mips.c b/webrtc/modules/audio_coding/codecs/isac/fix/source/transform_mips.c
index 656a77e..e5d35f2 100644
--- a/webrtc/modules/audio_coding/codecs/isac/fix/source/transform_mips.c
+++ b/webrtc/modules/audio_coding/codecs/isac/fix/source/transform_mips.c
@@ -606,7 +606,7 @@
   int32_t* outre2;
   int16_t* cosptr = (int16_t*)WebRtcIsacfix_kCosTab2;
   int16_t* sinptr = (int16_t*)WebRtcIsacfix_kSinTab2;
-  int32_t r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, max, max1;
+  int32_t r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, max, max1;
 #if defined(MIPS_DSP_R1_LE)
   int32_t offset = FRAMESAMPLES - 4;
 #else  // #if defined(MIPS_DSP_R1_LE)
@@ -658,14 +658,14 @@
     "subu           %[r9],        %[r9],        %[r8]         \n\t"
     "subu           %[r7],        %[r6],        %[r9]         \n\t"
     "addu           %[r6],        %[r6],        %[r9]         \n\t"
-    "sll            %[r10],       %[offset],    1             \n\t"
-    "addu           %[r10],       %[outre1],    %[r10]        \n\t"
     "sw             %[r7],        0(%[outre1])                \n\t"
     "absq_s.w       %[r7],        %[r7]                       \n\t"
-    "sw             %[r6],        4(%[r10])                   \n\t"
-    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r7]         \n\t"
     "movn           %[max],       %[r7],        %[r8]         \n\t"
+    "sll            %[r7],        %[offset],    1             \n\t"
+    "addu           %[r7],        %[outre1],    %[r7]         \n\t"
+    "sw             %[r6],        4(%[r7])                    \n\t"
+    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r6]         \n\t"
     "movn           %[max],       %[r6],        %[r8]         \n\t"
     "muleq_s.w.phl  %[r6],        %[r0],        %[r2]         \n\t"
@@ -682,10 +682,12 @@
     "addu           %[r6],        %[r6],        %[r9]         \n\t"
     "sw             %[r7],        4(%[outre1])                \n\t"
     "absq_s.w       %[r7],        %[r7]                       \n\t"
-    "sw             %[r6],        0(%[r10])                   \n\t"
-    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r7]         \n\t"
     "movn           %[max],       %[r7],        %[r8]         \n\t"
+    "sll            %[r7],        %[offset],    1             \n\t"
+    "addu           %[r7],        %[outre1],    %[r7]         \n\t"
+    "sw             %[r6],        0(%[r7])                    \n\t"
+    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r6]         \n\t"
     "movn           %[max],       %[r6],        %[r8]         \n\t"
     "muleq_s.w.phr  %[r6],        %[r1],        %[r2]         \n\t"
@@ -702,14 +704,14 @@
     "subu           %[r7],        %[r6],        %[r9]         \n\t"
     "addu           %[r6],        %[r9],        %[r6]         \n\t"
     "negu           %[r6],        %[r6]                       \n\t"
-    "sll            %[r10],       %[offset],    1             \n\t"
-    "addu           %[r10],       %[outre2],    %[r10]        \n\t"
     "sw             %[r7],        0(%[outre2])                \n\t"
     "absq_s.w       %[r7],        %[r7]                       \n\t"
-    "sw             %[r6],        4(%[r10])                   \n\t"
-    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r7]         \n\t"
     "movn           %[max],       %[r7],        %[r8]         \n\t"
+    "sll            %[r7],        %[offset],    1             \n\t"
+    "addu           %[r7],        %[outre2],    %[r7]         \n\t"
+    "sw             %[r6],        4(%[r7])                    \n\t"
+    "absq_s.w       %[r6],        %[r6]                       \n\t"
     "slt            %[r8],        %[max],       %[r6]         \n\t"
     "movn           %[max],       %[r6],        %[r8]         \n\t"
     "muleq_s.w.phl  %[r6],       %[r1],         %[r2]         \n\t"
@@ -728,10 +730,12 @@
     "negu           %[r6],       %[r6]                        \n\t"
     "sw             %[r7],       4(%[outre2])                 \n\t"
     "absq_s.w       %[r7],       %[r7]                        \n\t"
-    "sw             %[r6],       0(%[r10])                    \n\t"
-    "absq_s.w       %[r6],       %[r6]                        \n\t"
     "slt            %[r8],       %[max],        %[r7]         \n\t"
     "movn           %[max],      %[r7],         %[r8]         \n\t"
+    "sll            %[r7],       %[offset],     1             \n\t"
+    "addu           %[r7],       %[outre2],     %[r7]         \n\t"
+    "sw             %[r6],       0(%[r7])                     \n\t"
+    "absq_s.w       %[r6],       %[r6]                        \n\t"
     "slt            %[r8],       %[max],        %[r6]         \n\t"
     "movn           %[max],      %[r6],         %[r8]         \n\t"
     "bgtz           %[k],        1b                           \n\t"
@@ -824,8 +828,8 @@
       [offset] "+r" (offset), [k] "+r" (k), [r0] "=&r" (r0),
       [r1] "=&r" (r1), [r2] "=&r" (r2), [r3] "=&r" (r3),
       [r4] "=&r" (r4), [r5] "=&r" (r5), [r6] "=&r" (r6),
-      [r7] "=&r" (r7), [r10] "=&r" (r10),
-      [r8] "=&r" (r8), [r9] "=&r" (r9), [max] "=&r" (max)
+      [r7] "=&r" (r7), [r8] "=&r" (r8), [r9] "=&r" (r9),
+      [max] "=&r" (max)
     : [inreQ7] "r" (inreQ7), [inimQ7] "r" (inimQ7),
       [cosptr] "r" (cosptr), [sinptr] "r" (sinptr),
       [outre1Q16] "r" (outre1Q16), [outre2Q16] "r" (outre2Q16)