/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "vpx_config.h"
#include "vpx_ports/x86.h"
#include "vp9/common/loopfilter.h"
#include "vp9/common/idct.h"
#include "vp9/common/pragmas.h"
#include "vp9/common/onyxc_int.h"

void vp9_arch_x86_common_init(VP9_COMMON *ctx) {
#if CONFIG_RUNTIME_CPU_DETECT
  VP9_COMMON_RTCD *rtcd = &ctx->rtcd;
  int flags = x86_simd_caps();

  /* Note:
   *
   * This platform can be built without runtime CPU detection as well. If
   * you modify any of the function mappings present in this file, be sure
   * to also update them in static mapings (<arch>/filename_<arch>.h)
   */

  /* Override default functions with fastest ones for this CPU. */
#if HAVE_MMX
// The commented functions need to be re-written for vpx.
  if (flags & HAS_MMX) {
    rtcd->idct.idct1        = vp9_short_idct4x4llm_1_mmx;
    rtcd->idct.idct16       = vp9_short_idct4x4llm_mmx;
    rtcd->idct.idct1_scalar_add = vp9_dc_only_idct_add_mmx;
    // rtcd->idct.iwalsh16     = vp9_short_inv_walsh4x4_mmx;
    // rtcd->idct.iwalsh1     = vp9_short_inv_walsh4x4_1_mmx;

#if CONFIG_POSTPROC
    rtcd->postproc.down        = vp9_mbpost_proc_down_mmx;
    /*rtcd->postproc.across      = vp9_mbpost_proc_across_ip_c;*/
    rtcd->postproc.downacross  = vp9_post_proc_down_and_across_mmx;
    rtcd->postproc.addnoise    = vp9_plane_add_noise_mmx;
#endif
  }

#endif
#if HAVE_SSE2

  if (flags & HAS_SSE2) {


    // rtcd->idct.iwalsh16     = vp9_short_inv_walsh4x4_sse2;

#if CONFIG_POSTPROC
    rtcd->postproc.down        = vp9_mbpost_proc_down_xmm;
    rtcd->postproc.across      = vp9_mbpost_proc_across_ip_xmm;
    rtcd->postproc.downacross  = vp9_post_proc_down_and_across_xmm;
    rtcd->postproc.addnoise    = vp9_plane_add_noise_wmt;
#endif
  }

#endif

#if HAVE_SSSE3

  if (flags & HAS_SSSE3) {

    /* these are disable because of unsupported diagonal pred modes
    rtcd->recon.build_intra_predictors_mbuv =
      vp9_build_intra_predictors_mbuv_ssse3;
    rtcd->recon.build_intra_predictors_mbuv_s =
      vp9_build_intra_predictors_mbuv_s_ssse3;
      */
  }
#endif

#endif
}
