/* This file is part of the Vc library. Copyright (C) 2010-2011 Matthias Kretz Vc is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Vc is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Vc. If not, see . */ #ifndef VC_SSE_DEINTERLEAVE_H #define VC_SSE_DEINTERLEAVE_H #include "macros.h" namespace ROOT { namespace Vc { namespace Internal { template<> struct HelperImpl { typedef SSE::Vector float_v; typedef SSE::Vector sfloat_v; typedef SSE::Vector double_v; typedef SSE::Vector int_v; typedef SSE::Vector uint_v; typedef SSE::Vector short_v; typedef SSE::Vector ushort_v; template static void deinterleave(float_v &, float_v &, const float *, A); template static void deinterleave(float_v &, float_v &, const short *, A); template static void deinterleave(float_v &, float_v &, const unsigned short *, A); template static void deinterleave(sfloat_v &, sfloat_v &, const float *, A); template static void deinterleave(sfloat_v &, sfloat_v &, const short *, A); template static void deinterleave(sfloat_v &, sfloat_v &, const unsigned short *, A); template static void deinterleave(double_v &, double_v &, const double *, A); template static void deinterleave(int_v &, int_v &, const int *, A); template static void deinterleave(int_v &, int_v &, const short *, A); template static void deinterleave(uint_v &, uint_v &, const unsigned int *, A); template static void deinterleave(uint_v &, uint_v &, const unsigned short *, A); template static void deinterleave(short_v &, short_v &, const short *, A); template static void deinterleave(ushort_v &, ushort_v &, const unsigned short *, A); static Vc_ALWAYS_INLINE_L void prefetchForOneRead(const void *addr) Vc_ALWAYS_INLINE_R; static Vc_ALWAYS_INLINE_L void prefetchForModify(const void *addr) Vc_ALWAYS_INLINE_R; static Vc_ALWAYS_INLINE_L void prefetchClose(const void *addr) Vc_ALWAYS_INLINE_R; static Vc_ALWAYS_INLINE_L void prefetchMid(const void *addr) Vc_ALWAYS_INLINE_R; static Vc_ALWAYS_INLINE_L void prefetchFar(const void *addr) Vc_ALWAYS_INLINE_R; template static Vc_ALWAYS_INLINE_L void *malloc(size_t n) Vc_ALWAYS_INLINE_R; static Vc_ALWAYS_INLINE_L void free(void *p) Vc_ALWAYS_INLINE_R; }; template<> struct HelperImpl : public HelperImpl {}; template<> struct HelperImpl : public HelperImpl {}; template<> struct HelperImpl : public HelperImpl {}; template<> struct HelperImpl : public HelperImpl {}; } // namespace Internal } // namespace Vc } // namespace ROOT #include "deinterleave.tcc" #include "prefetches.tcc" #include "helperimpl.tcc" #include "undomacros.h" #endif // VC_SSE_DEINTERLEAVE_H