/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "SkOpts.h"

#define SK_OPTS_NS sse41
#include "SkBlurImageFilter_opts.h"
#include "SkBlitRow_opts.h"
#include "SkBlend_opts.h"
#include "SkRasterPipeline_opts.h"

namespace SkOpts {
    void Init_sse41() {
        box_blur_xx          = sse41::box_blur_xx;
        box_blur_xy          = sse41::box_blur_xy;
        box_blur_yx          = sse41::box_blur_yx;
        srcover_srgb_srgb    = sse41::srcover_srgb_srgb;
        blit_row_s32a_opaque = sse41::blit_row_s32a_opaque;

    #define STAGE(stage)                                                       \
        body[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage;      \
        tail[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage##_tail

        STAGE(store_565);
        STAGE(store_srgb);
        STAGE(store_f16);

        STAGE(load_s_565);
        STAGE(load_s_srgb);
        STAGE(load_s_f16);

        STAGE(load_d_565);
        STAGE(load_d_srgb);
        STAGE(load_d_f16);

        STAGE(scale_u8);

        STAGE(lerp_u8);
        STAGE(lerp_565);
    #undef STAGE

    #define STAGE(stage)                                                  \
        body[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage; \
        tail[SkRasterPipeline::stage] = (SkOpts::VoidFn)SK_OPTS_NS::stage

      // The commented-out stages don't actually benefit from SSE 4.1.
      // To cut down on code bloat we skip them here, using the identical SSE2 defaults.

      //STAGE(lerp_constant_float);
      //STAGE(constant_color);

      //STAGE(dst);
      //STAGE(dstatop);
      //STAGE(dstin);
      //STAGE(dstout);
      //STAGE(dstover);
      //STAGE(srcatop);
      //STAGE(srcin);
      //STAGE(srcout);
      //STAGE(srcover);
      //STAGE(clear);
      //STAGE(modulate);
      //STAGE(multiply);
      //STAGE(plus_);
      //STAGE(screen);
      //STAGE(xor_);
        STAGE(colorburn);
        STAGE(colordodge);
      //STAGE(darken);
      //STAGE(difference);
      //STAGE(exclusion);
        STAGE(hardlight);
      //STAGE(lighten);
        STAGE(overlay);
        STAGE(softlight);
    #undef STAGE

    }
}
