michael@0: #ifndef SkXfermode_opts_arm_neon_DEFINED michael@0: #define SkXfermode_opts_arm_neon_DEFINED michael@0: michael@0: #include "SkXfermode_proccoeff.h" michael@0: michael@0: class SkNEONProcCoeffXfermode : public SkProcCoeffXfermode { michael@0: public: michael@0: SkNEONProcCoeffXfermode(const ProcCoeff& rec, SkXfermode::Mode mode, michael@0: void* procSIMD) michael@0: : INHERITED(rec, mode), fProcSIMD(procSIMD) {} michael@0: michael@0: virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count, michael@0: const SkAlpha aa[]) const SK_OVERRIDE; michael@0: virtual void xfer16(uint16_t* SK_RESTRICT dst, const SkPMColor* SK_RESTRICT src, michael@0: int count, const SkAlpha* SK_RESTRICT aa) const SK_OVERRIDE; michael@0: michael@0: SK_TO_STRING_OVERRIDE() michael@0: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkNEONProcCoeffXfermode) michael@0: michael@0: private: michael@0: SkNEONProcCoeffXfermode(SkReadBuffer& buffer); michael@0: michael@0: // void* is used to avoid pulling arm_neon.h in the core and having to build michael@0: // it with -mfpu=neon. michael@0: void* fProcSIMD; michael@0: typedef SkProcCoeffXfermode INHERITED; michael@0: }; michael@0: michael@0: extern SkPMColor srcatop_modeproc_neon(SkPMColor src, SkPMColor dst); michael@0: extern SkPMColor dstatop_modeproc_neon(SkPMColor src, SkPMColor dst); michael@0: extern SkPMColor xor_modeproc_neon(SkPMColor src, SkPMColor dst); michael@0: extern SkPMColor plus_modeproc_neon(SkPMColor src, SkPMColor dst); michael@0: extern SkPMColor modulate_modeproc_neon(SkPMColor src, SkPMColor dst); michael@0: michael@0: #endif //#ifdef SkXfermode_opts_arm_neon_DEFINED