#if WK_DISABLE_HARDWARE_ACCELERATION
#include "vp8_rtcd_no_acceleration.h"
#else

// 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

#endif // WK_DISABLE_HARDWARE_ACCELERATION
