Give more flexibility to the predictor generating macro.

Change-Id: Ia651afa8322cb5c5ae87128340d05245c0f6a900
diff --git a/src/dsp/lossless.c b/src/dsp/lossless.c
index 16ce31d..f922dc3 100644
--- a/src/dsp/lossless.c
+++ b/src/dsp/lossless.c
@@ -167,20 +167,20 @@
   return pred;
 }
 
-GENERATE_PREDICTOR_ADD(0)
-GENERATE_PREDICTOR_ADD(1)
-GENERATE_PREDICTOR_ADD(2)
-GENERATE_PREDICTOR_ADD(3)
-GENERATE_PREDICTOR_ADD(4)
-GENERATE_PREDICTOR_ADD(5)
-GENERATE_PREDICTOR_ADD(6)
-GENERATE_PREDICTOR_ADD(7)
-GENERATE_PREDICTOR_ADD(8)
-GENERATE_PREDICTOR_ADD(9)
-GENERATE_PREDICTOR_ADD(10)
-GENERATE_PREDICTOR_ADD(11)
-GENERATE_PREDICTOR_ADD(12)
-GENERATE_PREDICTOR_ADD(13)
+GENERATE_PREDICTOR_ADD(Predictor0, PredictorAdd0)
+GENERATE_PREDICTOR_ADD(Predictor1, PredictorAdd1)
+GENERATE_PREDICTOR_ADD(Predictor2, PredictorAdd2)
+GENERATE_PREDICTOR_ADD(Predictor3, PredictorAdd3)
+GENERATE_PREDICTOR_ADD(Predictor4, PredictorAdd4)
+GENERATE_PREDICTOR_ADD(Predictor5, PredictorAdd5)
+GENERATE_PREDICTOR_ADD(Predictor6, PredictorAdd6)
+GENERATE_PREDICTOR_ADD(Predictor7, PredictorAdd7)
+GENERATE_PREDICTOR_ADD(Predictor8, PredictorAdd8)
+GENERATE_PREDICTOR_ADD(Predictor9, PredictorAdd9)
+GENERATE_PREDICTOR_ADD(Predictor10, PredictorAdd10)
+GENERATE_PREDICTOR_ADD(Predictor11, PredictorAdd11)
+GENERATE_PREDICTOR_ADD(Predictor12, PredictorAdd12)
+GENERATE_PREDICTOR_ADD(Predictor13, PredictorAdd13)
 
 //------------------------------------------------------------------------------
 
diff --git a/src/dsp/lossless_common.h b/src/dsp/lossless_common.h
index 336c295..c40f711 100644
--- a/src/dsp/lossless_common.h
+++ b/src/dsp/lossless_common.h
@@ -181,27 +181,27 @@
 
 // The predictor is added to the output pixel (which
 // is therefore considered as a residual) to get the final prediction.
-#define GENERATE_PREDICTOR_ADD(X)                                        \
-  static void PredictorAdd##X(const uint32_t* in, const uint32_t* upper, \
-                              int num_pixels, uint32_t* out) {           \
-    int x;                                                               \
-    for (x = 0; x < num_pixels; ++x) {                                   \
-      const uint32_t pred = VP8LPredictors[(X)](out[x - 1], upper + x);  \
-      out[x] = VP8LAddPixels(in[x], pred);                               \
-    }                                                                    \
-  }
+#define GENERATE_PREDICTOR_ADD(PREDICTOR, PREDICTOR_ADD)             \
+static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
+                          int num_pixels, uint32_t* out) {           \
+  int x;                                                             \
+  for (x = 0; x < num_pixels; ++x) {                                 \
+    const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x);        \
+    out[x] = VP8LAddPixels(in[x], pred);                             \
+  }                                                                  \
+}
 
 // It subtracts the prediction from the input pixel and stores the residual
 // in the output pixel.
-#define GENERATE_PREDICTOR_SUB(X)                                        \
-  static void PredictorSub##X(const uint32_t* in, const uint32_t* upper, \
-                              int num_pixels, uint32_t* out) {           \
-    int x;                                                               \
-    for (x = 0; x < num_pixels; ++x) {                                   \
-      const uint32_t pred = VP8LPredictors[(X)](in[x - 1], upper + x);   \
-      out[x] = VP8LSubPixels(in[x], pred);                               \
-    }                                                                    \
-  }
+#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB)             \
+static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
+                          int num_pixels, uint32_t* out) {           \
+  int x;                                                             \
+  for (x = 0; x < num_pixels; ++x) {                                 \
+    const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x);         \
+    out[x] = VP8LSubPixels(in[x], pred);                             \
+  }                                                                  \
+}
 
 #ifdef __cplusplus
 }    // extern "C"
diff --git a/src/dsp/lossless_enc.c b/src/dsp/lossless_enc.c
index 727a278..7b18ab4 100644
--- a/src/dsp/lossless_enc.c
+++ b/src/dsp/lossless_enc.c
@@ -665,20 +665,20 @@
 
 //------------------------------------------------------------------------------
 
-GENERATE_PREDICTOR_SUB(0)
-GENERATE_PREDICTOR_SUB(1)
-GENERATE_PREDICTOR_SUB(2)
-GENERATE_PREDICTOR_SUB(3)
-GENERATE_PREDICTOR_SUB(4)
-GENERATE_PREDICTOR_SUB(5)
-GENERATE_PREDICTOR_SUB(6)
-GENERATE_PREDICTOR_SUB(7)
-GENERATE_PREDICTOR_SUB(8)
-GENERATE_PREDICTOR_SUB(9)
-GENERATE_PREDICTOR_SUB(10)
-GENERATE_PREDICTOR_SUB(11)
-GENERATE_PREDICTOR_SUB(12)
-GENERATE_PREDICTOR_SUB(13)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[0], PredictorSub0)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[1], PredictorSub1)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[2], PredictorSub2)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[3], PredictorSub3)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[4], PredictorSub4)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[5], PredictorSub5)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[6], PredictorSub6)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[7], PredictorSub7)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[8], PredictorSub8)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[9], PredictorSub9)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[10], PredictorSub10)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[11], PredictorSub11)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[12], PredictorSub12)
+GENERATE_PREDICTOR_SUB(VP8LPredictors[13], PredictorSub13)
 
 VP8LProcessEncBlueAndRedFunc VP8LSubtractGreenFromBlueAndRed;
 
diff --git a/src/dsp/lossless_sse2.c b/src/dsp/lossless_sse2.c
index 97a3292..df1d9dd 100644
--- a/src/dsp/lossless_sse2.c
+++ b/src/dsp/lossless_sse2.c
@@ -217,12 +217,12 @@
 
 // Due to averages with integers, values cannot be accumulated in parallel for
 // predictors 5 to 10.
-GENERATE_PREDICTOR_ADD(5)
-GENERATE_PREDICTOR_ADD(6)
-GENERATE_PREDICTOR_ADD(7)
-GENERATE_PREDICTOR_ADD(8)
-GENERATE_PREDICTOR_ADD(9)
-GENERATE_PREDICTOR_ADD(10)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[5], PredictorAdd5_SSE2)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[6], PredictorAdd6_SSE2)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[7], PredictorAdd7_SSE2)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[8], PredictorAdd8_SSE2)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[9], PredictorAdd9_SSE2)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[10], PredictorAdd10_SSE2)
 
 // Predictor11: select.
 static void PredictorAdd11_SSE2(const uint32_t* in, const uint32_t* upper,
@@ -300,7 +300,7 @@
 
 // Due to averages with integers, values cannot be accumulated in parallel for
 // predictors 13.
-GENERATE_PREDICTOR_ADD(13)
+GENERATE_PREDICTOR_ADD(VP8LPredictors[13], PredictorAdd13_SSE2)
 
 //------------------------------------------------------------------------------
 // Subtract-Green Transform
@@ -547,15 +547,15 @@
   VP8LPredictorsAdd[2] = PredictorAdd2_SSE2;
   VP8LPredictorsAdd[3] = PredictorAdd3_SSE2;
   VP8LPredictorsAdd[4] = PredictorAdd4_SSE2;
-  VP8LPredictorsAdd[5] = PredictorAdd5;
-  VP8LPredictorsAdd[6] = PredictorAdd6;
-  VP8LPredictorsAdd[7] = PredictorAdd7;
-  VP8LPredictorsAdd[8] = PredictorAdd8;
-  VP8LPredictorsAdd[9] = PredictorAdd9;
-  VP8LPredictorsAdd[10] = PredictorAdd10;
+  VP8LPredictorsAdd[5] = PredictorAdd5_SSE2;
+  VP8LPredictorsAdd[6] = PredictorAdd6_SSE2;
+  VP8LPredictorsAdd[7] = PredictorAdd7_SSE2;
+  VP8LPredictorsAdd[8] = PredictorAdd8_SSE2;
+  VP8LPredictorsAdd[9] = PredictorAdd9_SSE2;
+  VP8LPredictorsAdd[10] = PredictorAdd10_SSE2;
   VP8LPredictorsAdd[11] = PredictorAdd11_SSE2;
   VP8LPredictorsAdd[12] = PredictorAdd12_SSE2;
-  VP8LPredictorsAdd[13] = PredictorAdd13;
+  VP8LPredictorsAdd[13] = PredictorAdd13_SSE2;
 
   VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed;
   VP8LTransformColorInverse = TransformColorInverse;