// This file is generated. Do not edit.
#ifndef VP8_RTCD_H_
#define VP8_RTCD_H_

#ifdef RTCD_C
#define RTCD_EXTERN
#else
#define RTCD_EXTERN extern
#endif

/*
 * VP8
 */

struct blockd;
struct macroblockd;
struct loop_filter_info;

/* Encoder forward decls */
struct block;
struct macroblock;
struct variance_vtable;
union int_mv;
struct yv12_buffer_config;

#ifdef __cplusplus
extern "C" {
#endif

void vp8_bilinear_predict16x16_c(unsigned char* src_ptr,
                                 int src_pixels_per_line,
                                 int xoffset,
                                 int yoffset,
                                 unsigned char* dst_ptr,
                                 int dst_pitch);
void vp8_bilinear_predict16x16_sse2(unsigned char* src_ptr,
                                    int src_pixels_per_line,
                                    int xoffset,
                                    int yoffset,
                                    unsigned char* dst_ptr,
                                    int dst_pitch);
void vp8_bilinear_predict16x16_ssse3(unsigned char* src_ptr,
                                     int src_pixels_per_line,
                                     int xoffset,
                                     int yoffset,
                                     unsigned char* dst_ptr,
                                     int dst_pitch);
RTCD_EXTERN void (*vp8_bilinear_predict16x16)(unsigned char* src_ptr,
                                              int src_pixels_per_line,
                                              int xoffset,
                                              int yoffset,
                                              unsigned char* dst_ptr,
                                              int dst_pitch);

void vp8_bilinear_predict4x4_c(unsigned char* src_ptr,
                               int src_pixels_per_line,
                               int xoffset,
                               int yoffset,
                               unsigned char* dst_ptr,
                               int dst_pitch);
void vp8_bilinear_predict4x4_sse2(unsigned char* src_ptr,
                                  int src_pixels_per_line,
                                  int xoffset,
                                  int yoffset,
                                  unsigned char* dst_ptr,
                                  int dst_pitch);
#define vp8_bilinear_predict4x4 vp8_bilinear_predict4x4_sse2

void vp8_bilinear_predict8x4_c(unsigned char* src_ptr,
                               int src_pixels_per_line,
                               int xoffset,
                               int yoffset,
                               unsigned char* dst_ptr,
                               int dst_pitch);
void vp8_bilinear_predict8x4_sse2(unsigned char* src_ptr,
                                  int src_pixels_per_line,
                                  int xoffset,
                                  int yoffset,
                                  unsigned char* dst_ptr,
                                  int dst_pitch);
#define vp8_bilinear_predict8x4 vp8_bilinear_predict8x4_sse2

void vp8_bilinear_predict8x8_c(unsigned char* src_ptr,
                               int src_pixels_per_line,
                               int xoffset,
                               int yoffset,
                               unsigned char* dst_ptr,
                               int dst_pitch);
void vp8_bilinear_predict8x8_sse2(unsigned char* src_ptr,
                                  int src_pixels_per_line,
                                  int xoffset,
                                  int yoffset,
                                  unsigned char* dst_ptr,
                                  int dst_pitch);
void vp8_bilinear_predict8x8_ssse3(unsigned char* src_ptr,
                                   int src_pixels_per_line,
                                   int xoffset,
                                   int yoffset,
                                   unsigned char* dst_ptr,
                                   int dst_pitch);
RTCD_EXTERN void (*vp8_bilinear_predict8x8)(unsigned char* src_ptr,
                                            int src_pixels_per_line,
                                            int xoffset,
                                            int yoffset,
                                            unsigned char* dst_ptr,
                                            int dst_pitch);

void vp8_blend_b_c(unsigned char* y,
                   unsigned char* u,
                   unsigned char* v,
                   int y_1,
                   int u_1,
                   int v_1,
                   int alpha,
                   int stride);
#define vp8_blend_b vp8_blend_b_c

void vp8_blend_mb_inner_c(unsigned char* y,
                          unsigned char* u,
                          unsigned char* v,
                          int y_1,
                          int u_1,
                          int v_1,
                          int alpha,
                          int stride);
#define vp8_blend_mb_inner vp8_blend_mb_inner_c

void vp8_blend_mb_outer_c(unsigned char* y,
                          unsigned char* u,
                          unsigned char* v,
                          int y_1,
                          int u_1,
                          int v_1,
                          int alpha,
                          int stride);
#define vp8_blend_mb_outer vp8_blend_mb_outer_c

int vp8_block_error_c(short* coeff, short* dqcoeff);
int vp8_block_error_sse2(short* coeff, short* dqcoeff);
#define vp8_block_error vp8_block_error_sse2

void vp8_copy32xn_c(const unsigned char* src_ptr,
                    int src_stride,
                    unsigned char* dst_ptr,
                    int dst_stride,
                    int height);
void vp8_copy32xn_sse2(const unsigned char* src_ptr,
                       int src_stride,
                       unsigned char* dst_ptr,
                       int dst_stride,
                       int height);
void vp8_copy32xn_sse3(const unsigned char* src_ptr,
                       int src_stride,
                       unsigned char* dst_ptr,
                       int dst_stride,
                       int height);
RTCD_EXTERN void (*vp8_copy32xn)(const unsigned char* src_ptr,
                                 int src_stride,
                                 unsigned char* dst_ptr,
                                 int dst_stride,
                                 int height);

void vp8_copy_mem16x16_c(unsigned char* src,
                         int src_stride,
                         unsigned char* dst,
                         int dst_stride);
void vp8_copy_mem16x16_sse2(unsigned char* src,
                            int src_stride,
                            unsigned char* dst,
                            int dst_stride);
#define vp8_copy_mem16x16 vp8_copy_mem16x16_sse2

void vp8_copy_mem8x4_c(unsigned char* src,
                       int src_stride,
                       unsigned char* dst,
                       int dst_stride);
void vp8_copy_mem8x4_mmx(unsigned char* src,
                         int src_stride,
                         unsigned char* dst,
                         int dst_stride);
#define vp8_copy_mem8x4 vp8_copy_mem8x4_mmx

void vp8_copy_mem8x8_c(unsigned char* src,
                       int src_stride,
                       unsigned char* dst,
                       int dst_stride);
void vp8_copy_mem8x8_mmx(unsigned char* src,
                         int src_stride,
                         unsigned char* dst,
                         int dst_stride);
#define vp8_copy_mem8x8 vp8_copy_mem8x8_mmx

void vp8_dc_only_idct_add_c(short input_dc,
                            unsigned char* pred_ptr,
                            int pred_stride,
                            unsigned char* dst_ptr,
                            int dst_stride);
void vp8_dc_only_idct_add_mmx(short input_dc,
                              unsigned char* pred_ptr,
                              int pred_stride,
                              unsigned char* dst_ptr,
                              int dst_stride);
#define vp8_dc_only_idct_add vp8_dc_only_idct_add_mmx

int vp8_denoiser_filter_c(unsigned char* mc_running_avg_y,
                          int mc_avg_y_stride,
                          unsigned char* running_avg_y,
                          int avg_y_stride,
                          unsigned char* sig,
                          int sig_stride,
                          unsigned int motion_magnitude,
                          int increase_denoising);
int vp8_denoiser_filter_sse2(unsigned char* mc_running_avg_y,
                             int mc_avg_y_stride,
                             unsigned char* running_avg_y,
                             int avg_y_stride,
                             unsigned char* sig,
                             int sig_stride,
                             unsigned int motion_magnitude,
                             int increase_denoising);
#define vp8_denoiser_filter vp8_denoiser_filter_sse2

int vp8_denoiser_filter_uv_c(unsigned char* mc_running_avg,
                             int mc_avg_stride,
                             unsigned char* running_avg,
                             int avg_stride,
                             unsigned char* sig,
                             int sig_stride,
                             unsigned int motion_magnitude,
                             int increase_denoising);
int vp8_denoiser_filter_uv_sse2(unsigned char* mc_running_avg,
                                int mc_avg_stride,
                                unsigned char* running_avg,
                                int avg_stride,
                                unsigned char* sig,
                                int sig_stride,
                                unsigned int motion_magnitude,
                                int increase_denoising);
#define vp8_denoiser_filter_uv vp8_denoiser_filter_uv_sse2

void vp8_dequant_idct_add_c(short* input,
                            short* dq,
                            unsigned char* dest,
                            int stride);
void vp8_dequant_idct_add_mmx(short* input,
                              short* dq,
                              unsigned char* dest,
                              int stride);
#define vp8_dequant_idct_add vp8_dequant_idct_add_mmx

void vp8_dequant_idct_add_uv_block_c(short* q,
                                     short* dq,
                                     unsigned char* dst_u,
                                     unsigned char* dst_v,
                                     int stride,
                                     char* eobs);
void vp8_dequant_idct_add_uv_block_sse2(short* q,
                                        short* dq,
                                        unsigned char* dst_u,
                                        unsigned char* dst_v,
                                        int stride,
                                        char* eobs);
#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_sse2

void vp8_dequant_idct_add_y_block_c(short* q,
                                    short* dq,
                                    unsigned char* dst,
                                    int stride,
                                    char* eobs);
void vp8_dequant_idct_add_y_block_sse2(short* q,
                                       short* dq,
                                       unsigned char* dst,
                                       int stride,
                                       char* eobs);
#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_sse2

void vp8_dequantize_b_c(struct blockd*, short* DQC);
void vp8_dequantize_b_mmx(struct blockd*, short* DQC);
#define vp8_dequantize_b vp8_dequantize_b_mmx

int vp8_diamond_search_sad_c(struct macroblock* x,
                             struct block* b,
                             struct blockd* d,
                             union int_mv* ref_mv,
                             union int_mv* best_mv,
                             int search_param,
                             int sad_per_bit,
                             int* num00,
                             struct variance_vtable* fn_ptr,
                             int* mvcost[2],
                             union int_mv* center_mv);
int vp8_diamond_search_sadx4(struct macroblock* x,
                             struct block* b,
                             struct blockd* d,
                             union int_mv* ref_mv,
                             union int_mv* best_mv,
                             int search_param,
                             int sad_per_bit,
                             int* num00,
                             struct variance_vtable* fn_ptr,
                             int* mvcost[2],
                             union int_mv* center_mv);
#define vp8_diamond_search_sad vp8_diamond_search_sadx4

void vp8_fast_quantize_b_c(struct block*, struct blockd*);
void vp8_fast_quantize_b_sse2(struct block*, struct blockd*);
void vp8_fast_quantize_b_ssse3(struct block*, struct blockd*);
RTCD_EXTERN void (*vp8_fast_quantize_b)(struct block*, struct blockd*);

void vp8_filter_by_weight16x16_c(unsigned char* src,
                                 int src_stride,
                                 unsigned char* dst,
                                 int dst_stride,
                                 int src_weight);
void vp8_filter_by_weight16x16_sse2(unsigned char* src,
                                    int src_stride,
                                    unsigned char* dst,
                                    int dst_stride,
                                    int src_weight);
#define vp8_filter_by_weight16x16 vp8_filter_by_weight16x16_sse2

void vp8_filter_by_weight4x4_c(unsigned char* src,
                               int src_stride,
                               unsigned char* dst,
                               int dst_stride,
                               int src_weight);
#define vp8_filter_by_weight4x4 vp8_filter_by_weight4x4_c

void vp8_filter_by_weight8x8_c(unsigned char* src,
                               int src_stride,
                               unsigned char* dst,
                               int dst_stride,
                               int src_weight);
void vp8_filter_by_weight8x8_sse2(unsigned char* src,
                                  int src_stride,
                                  unsigned char* dst,
                                  int dst_stride,
                                  int src_weight);
#define vp8_filter_by_weight8x8 vp8_filter_by_weight8x8_sse2

int vp8_full_search_sad_c(struct macroblock* x,
                          struct block* b,
                          struct blockd* d,
                          union int_mv* ref_mv,
                          int sad_per_bit,
                          int distance,
                          struct variance_vtable* fn_ptr,
                          int* mvcost[2],
                          union int_mv* center_mv);
int vp8_full_search_sadx3(struct macroblock* x,
                          struct block* b,
                          struct blockd* d,
                          union int_mv* ref_mv,
                          int sad_per_bit,
                          int distance,
                          struct variance_vtable* fn_ptr,
                          int* mvcost[2],
                          union int_mv* center_mv);
int vp8_full_search_sadx8(struct macroblock* x,
                          struct block* b,
                          struct blockd* d,
                          union int_mv* ref_mv,
                          int sad_per_bit,
                          int distance,
                          struct variance_vtable* fn_ptr,
                          int* mvcost[2],
                          union int_mv* center_mv);
RTCD_EXTERN int (*vp8_full_search_sad)(struct macroblock* x,
                                       struct block* b,
                                       struct blockd* d,
                                       union int_mv* ref_mv,
                                       int sad_per_bit,
                                       int distance,
                                       struct variance_vtable* fn_ptr,
                                       int* mvcost[2],
                                       union int_mv* center_mv);

void vp8_loop_filter_bh_c(unsigned char* y_ptr,
                          unsigned char* u_ptr,
                          unsigned char* v_ptr,
                          int y_stride,
                          int uv_stride,
                          struct loop_filter_info* lfi);
void vp8_loop_filter_bh_sse2(unsigned char* y_ptr,
                             unsigned char* u_ptr,
                             unsigned char* v_ptr,
                             int y_stride,
                             int uv_stride,
                             struct loop_filter_info* lfi);
#define vp8_loop_filter_bh vp8_loop_filter_bh_sse2

void vp8_loop_filter_bv_c(unsigned char* y_ptr,
                          unsigned char* u_ptr,
                          unsigned char* v_ptr,
                          int y_stride,
                          int uv_stride,
                          struct loop_filter_info* lfi);
void vp8_loop_filter_bv_sse2(unsigned char* y_ptr,
                             unsigned char* u_ptr,
                             unsigned char* v_ptr,
                             int y_stride,
                             int uv_stride,
                             struct loop_filter_info* lfi);
#define vp8_loop_filter_bv vp8_loop_filter_bv_sse2

void vp8_loop_filter_mbh_c(unsigned char* y_ptr,
                           unsigned char* u_ptr,
                           unsigned char* v_ptr,
                           int y_stride,
                           int uv_stride,
                           struct loop_filter_info* lfi);
void vp8_loop_filter_mbh_sse2(unsigned char* y_ptr,
                              unsigned char* u_ptr,
                              unsigned char* v_ptr,
                              int y_stride,
                              int uv_stride,
                              struct loop_filter_info* lfi);
#define vp8_loop_filter_mbh vp8_loop_filter_mbh_sse2

void vp8_loop_filter_mbv_c(unsigned char* y_ptr,
                           unsigned char* u_ptr,
                           unsigned char* v_ptr,
                           int y_stride,
                           int uv_stride,
                           struct loop_filter_info* lfi);
void vp8_loop_filter_mbv_sse2(unsigned char* y_ptr,
                              unsigned char* u_ptr,
                              unsigned char* v_ptr,
                              int y_stride,
                              int uv_stride,
                              struct loop_filter_info* lfi);
#define vp8_loop_filter_mbv vp8_loop_filter_mbv_sse2

void vp8_loop_filter_bhs_c(unsigned char* y_ptr,
                           int y_stride,
                           const unsigned char* blimit);
void vp8_loop_filter_bhs_sse2(unsigned char* y_ptr,
                              int y_stride,
                              const unsigned char* blimit);
#define vp8_loop_filter_simple_bh vp8_loop_filter_bhs_sse2

void vp8_loop_filter_bvs_c(unsigned char* y_ptr,
                           int y_stride,
                           const unsigned char* blimit);
void vp8_loop_filter_bvs_sse2(unsigned char* y_ptr,
                              int y_stride,
                              const unsigned char* blimit);
#define vp8_loop_filter_simple_bv vp8_loop_filter_bvs_sse2

void vp8_loop_filter_simple_horizontal_edge_c(unsigned char* y_ptr,
                                              int y_stride,
                                              const unsigned char* blimit);
void vp8_loop_filter_simple_horizontal_edge_sse2(unsigned char* y_ptr,
                                                 int y_stride,
                                                 const unsigned char* blimit);
#define vp8_loop_filter_simple_mbh vp8_loop_filter_simple_horizontal_edge_sse2

void vp8_loop_filter_simple_vertical_edge_c(unsigned char* y_ptr,
                                            int y_stride,
                                            const unsigned char* blimit);
void vp8_loop_filter_simple_vertical_edge_sse2(unsigned char* y_ptr,
                                               int y_stride,
                                               const unsigned char* blimit);
#define vp8_loop_filter_simple_mbv vp8_loop_filter_simple_vertical_edge_sse2

int vp8_mbblock_error_c(struct macroblock* mb, int dc);
int vp8_mbblock_error_sse2(struct macroblock* mb, int dc);
#define vp8_mbblock_error vp8_mbblock_error_sse2

int vp8_mbuverror_c(struct macroblock* mb);
int vp8_mbuverror_sse2(struct macroblock* mb);
#define vp8_mbuverror vp8_mbuverror_sse2

int vp8_refining_search_sad_c(struct macroblock* x,
                              struct block* b,
                              struct blockd* d,
                              union int_mv* ref_mv,
                              int error_per_bit,
                              int search_range,
                              struct variance_vtable* fn_ptr,
                              int* mvcost[2],
                              union int_mv* center_mv);
int vp8_refining_search_sadx4(struct macroblock* x,
                              struct block* b,
                              struct blockd* d,
                              union int_mv* ref_mv,
                              int error_per_bit,
                              int search_range,
                              struct variance_vtable* fn_ptr,
                              int* mvcost[2],
                              union int_mv* center_mv);
#define vp8_refining_search_sad vp8_refining_search_sadx4

void vp8_regular_quantize_b_c(struct block*, struct blockd*);
void vp8_regular_quantize_b_sse2(struct block*, struct blockd*);
void vp8_regular_quantize_b_sse4_1(struct block*, struct blockd*);
RTCD_EXTERN void (*vp8_regular_quantize_b)(struct block*, struct blockd*);

void vp8_short_fdct4x4_c(short* input, short* output, int pitch);
void vp8_short_fdct4x4_sse2(short* input, short* output, int pitch);
#define vp8_short_fdct4x4 vp8_short_fdct4x4_sse2

void vp8_short_fdct8x4_c(short* input, short* output, int pitch);
void vp8_short_fdct8x4_sse2(short* input, short* output, int pitch);
#define vp8_short_fdct8x4 vp8_short_fdct8x4_sse2

void vp8_short_idct4x4llm_c(short* input,
                            unsigned char* pred_ptr,
                            int pred_stride,
                            unsigned char* dst_ptr,
                            int dst_stride);
void vp8_short_idct4x4llm_mmx(short* input,
                              unsigned char* pred_ptr,
                              int pred_stride,
                              unsigned char* dst_ptr,
                              int dst_stride);
#define vp8_short_idct4x4llm vp8_short_idct4x4llm_mmx

void vp8_short_inv_walsh4x4_c(short* input, short* mb_dqcoeff);
void vp8_short_inv_walsh4x4_sse2(short* input, short* mb_dqcoeff);
#define vp8_short_inv_walsh4x4 vp8_short_inv_walsh4x4_sse2

void vp8_short_inv_walsh4x4_1_c(short* input, short* mb_dqcoeff);
#define vp8_short_inv_walsh4x4_1 vp8_short_inv_walsh4x4_1_c

void vp8_short_walsh4x4_c(short* input, short* output, int pitch);
void vp8_short_walsh4x4_sse2(short* input, short* output, int pitch);
#define vp8_short_walsh4x4 vp8_short_walsh4x4_sse2

void vp8_sixtap_predict16x16_c(unsigned char* src_ptr,
                               int src_pixels_per_line,
                               int xoffset,
                               int yoffset,
                               unsigned char* dst_ptr,
                               int dst_pitch);
void vp8_sixtap_predict16x16_sse2(unsigned char* src_ptr,
                                  int src_pixels_per_line,
                                  int xoffset,
                                  int yoffset,
                                  unsigned char* dst_ptr,
                                  int dst_pitch);
void vp8_sixtap_predict16x16_ssse3(unsigned char* src_ptr,
                                   int src_pixels_per_line,
                                   int xoffset,
                                   int yoffset,
                                   unsigned char* dst_ptr,
                                   int dst_pitch);
RTCD_EXTERN void (*vp8_sixtap_predict16x16)(unsigned char* src_ptr,
                                            int src_pixels_per_line,
                                            int xoffset,
                                            int yoffset,
                                            unsigned char* dst_ptr,
                                            int dst_pitch);

void vp8_sixtap_predict4x4_c(unsigned char* src_ptr,
                             int src_pixels_per_line,
                             int xoffset,
                             int yoffset,
                             unsigned char* dst_ptr,
                             int dst_pitch);
void vp8_sixtap_predict4x4_mmx(unsigned char* src_ptr,
                               int src_pixels_per_line,
                               int xoffset,
                               int yoffset,
                               unsigned char* dst_ptr,
                               int dst_pitch);
void vp8_sixtap_predict4x4_ssse3(unsigned char* src_ptr,
                                 int src_pixels_per_line,
                                 int xoffset,
                                 int yoffset,
                                 unsigned char* dst_ptr,
                                 int dst_pitch);
RTCD_EXTERN void (*vp8_sixtap_predict4x4)(unsigned char* src_ptr,
                                          int src_pixels_per_line,
                                          int xoffset,
                                          int yoffset,
                                          unsigned char* dst_ptr,
                                          int dst_pitch);

void vp8_sixtap_predict8x4_c(unsigned char* src_ptr,
                             int src_pixels_per_line,
                             int xoffset,
                             int yoffset,
                             unsigned char* dst_ptr,
                             int dst_pitch);
void vp8_sixtap_predict8x4_sse2(unsigned char* src_ptr,
                                int src_pixels_per_line,
                                int xoffset,
                                int yoffset,
                                unsigned char* dst_ptr,
                                int dst_pitch);
void vp8_sixtap_predict8x4_ssse3(unsigned char* src_ptr,
                                 int src_pixels_per_line,
                                 int xoffset,
                                 int yoffset,
                                 unsigned char* dst_ptr,
                                 int dst_pitch);
RTCD_EXTERN void (*vp8_sixtap_predict8x4)(unsigned char* src_ptr,
                                          int src_pixels_per_line,
                                          int xoffset,
                                          int yoffset,
                                          unsigned char* dst_ptr,
                                          int dst_pitch);

void vp8_sixtap_predict8x8_c(unsigned char* src_ptr,
                             int src_pixels_per_line,
                             int xoffset,
                             int yoffset,
                             unsigned char* dst_ptr,
                             int dst_pitch);
void vp8_sixtap_predict8x8_sse2(unsigned char* src_ptr,
                                int src_pixels_per_line,
                                int xoffset,
                                int yoffset,
                                unsigned char* dst_ptr,
                                int dst_pitch);
void vp8_sixtap_predict8x8_ssse3(unsigned char* src_ptr,
                                 int src_pixels_per_line,
                                 int xoffset,
                                 int yoffset,
                                 unsigned char* dst_ptr,
                                 int dst_pitch);
RTCD_EXTERN void (*vp8_sixtap_predict8x8)(unsigned char* src_ptr,
                                          int src_pixels_per_line,
                                          int xoffset,
                                          int yoffset,
                                          unsigned char* dst_ptr,
                                          int dst_pitch);

void vp8_rtcd(void);

#ifdef RTCD_C
#include "vpx_ports/x86.h"
static void setup_rtcd_internal(void) {
  int flags = x86_simd_caps();

  (void)flags;

  vp8_bilinear_predict16x16 = vp8_bilinear_predict16x16_sse2;
  if (flags & HAS_SSSE3)
    vp8_bilinear_predict16x16 = vp8_bilinear_predict16x16_ssse3;
  vp8_bilinear_predict8x8 = vp8_bilinear_predict8x8_sse2;
  if (flags & HAS_SSSE3)
    vp8_bilinear_predict8x8 = vp8_bilinear_predict8x8_ssse3;
  vp8_copy32xn = vp8_copy32xn_sse2;
  if (flags & HAS_SSE3)
    vp8_copy32xn = vp8_copy32xn_sse3;
  vp8_fast_quantize_b = vp8_fast_quantize_b_sse2;
  if (flags & HAS_SSSE3)
    vp8_fast_quantize_b = vp8_fast_quantize_b_ssse3;
  vp8_full_search_sad = vp8_full_search_sad_c;
  if (flags & HAS_SSE3)
    vp8_full_search_sad = vp8_full_search_sadx3;
  if (flags & HAS_SSE4_1)
    vp8_full_search_sad = vp8_full_search_sadx8;
  vp8_regular_quantize_b = vp8_regular_quantize_b_sse2;
  if (flags & HAS_SSE4_1)
    vp8_regular_quantize_b = vp8_regular_quantize_b_sse4_1;
  vp8_sixtap_predict16x16 = vp8_sixtap_predict16x16_sse2;
  if (flags & HAS_SSSE3)
    vp8_sixtap_predict16x16 = vp8_sixtap_predict16x16_ssse3;
  vp8_sixtap_predict4x4 = vp8_sixtap_predict4x4_mmx;
  if (flags & HAS_SSSE3)
    vp8_sixtap_predict4x4 = vp8_sixtap_predict4x4_ssse3;
  vp8_sixtap_predict8x4 = vp8_sixtap_predict8x4_sse2;
  if (flags & HAS_SSSE3)
    vp8_sixtap_predict8x4 = vp8_sixtap_predict8x4_ssse3;
  vp8_sixtap_predict8x8 = vp8_sixtap_predict8x8_sse2;
  if (flags & HAS_SSSE3)
    vp8_sixtap_predict8x8 = vp8_sixtap_predict8x8_ssse3;
}
#endif

#ifdef __cplusplus
}  // extern "C"
#endif

#endif
