"Fossies" - the Fresh Open Source Software archive

Member "FRAMEWAVE_1.3.1_SRC/Framewave/domain/common/include/Arithmetic/Def/AbsDef.h" of archive FRAMEWAVE_1.3.1_SRC.tar.gz:


/*
Copyright (c) 2006-2009 Advanced Micro Devices, Inc. All Rights Reserved.
This software is subject to the Apache v2.0 License.
*/

#ifndef __ABSDEF_H__
#define __ABSDEF_H__

#include "AbsImpl.h"
#include "fe.h"


namespace OPT_LEVEL
{

namespace DEF_ABS
{
	namespace ABS
	{
		namespace C1
		{
			struct Abs_16s	: public fe2<Fw16s, OPT_LEVEL::C1, Fw16s, OPT_LEVEL::C1>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[0], r.dst[0]);
				}
				IV REFR (const Fw16s *s, Fw16s *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};

			struct Abs_32s	: public fe2<Fw32s, OPT_LEVEL::C1, Fw32s, OPT_LEVEL::C1>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABS::Unit::C1::Abs_32s_unit(r.src1[0], r.dst[0]);
				}
				IV REFR (const Fw32s *s, Fw32s *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};

			struct Abs_32f	: public fe2<Fw32f, OPT_LEVEL::C1, Fw32f, OPT_LEVEL::C1>
			{
				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::C1::Abs_32f_setup(signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					r.dst[0].f	= _mm_and_ps(r.src1[0].f, signmask.f);
				}
				IV REFR (const Fw32f *s, Fw32f *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};

			struct Abs_64f	: public fe2<Fw64f, OPT_LEVEL::C1, Fw64f, OPT_LEVEL::C1>
			{
				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::C1::Abs_64f_setup(signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					r.dst[0].d	= _mm_and_pd(r.src1[0].d, signmask.d);
				}
				IV REFR (const Fw64f *s, Fw64f *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};
		}
		namespace C3
		{
			struct Abs_16s	: public fe2<Fw16s, OPT_LEVEL::C3, Fw16s, OPT_LEVEL::C3>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[0], r.dst[0]);
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[1], r.dst[1]);
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[2], r.dst[2]);
				}
				IV REFR (const Fw16s *s, Fw16s *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C3, d, OPT_LEVEL::C3);
				}
			};

			struct Abs_32f	: public fe2<Fw32f, OPT_LEVEL::C3, Fw32f, OPT_LEVEL::C3>
			{
				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::C3::Abs_32f_setup(signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					r.dst[0].f	= _mm_and_ps(r.src1[0].f, signmask.f);
					r.dst[1].f	= _mm_and_ps(r.src1[1].f, signmask.f);
					r.dst[2].f	= _mm_and_ps(r.src1[2].f, signmask.f);
				}
				IV REFR (const Fw32f *s, Fw32f *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C3, d, OPT_LEVEL::C3);
				}
			};
		}
		namespace AC4
		{
			struct Abs_16s	: public fe2<Fw16s, OPT_LEVEL::AC4, Fw16s, OPT_LEVEL::AC4>
			{
				XMM128 mask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::AC4::Abs_16s_setup(mask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					XMM128 temp;
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[0], temp);
					Common::AC4::Apply::MaskI(r.dst[0], temp, mask);
				}
				IV REFR (const Fw16s *s, Fw16s *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::AC4, d, OPT_LEVEL::AC4);
				}
			};

			struct Abs_32f	: public fe2<Fw32f, OPT_LEVEL::AC4, Fw32f, OPT_LEVEL::AC4>
			{
				XMM128 signmask, mask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::AC4::Abs_32f_setup(signmask, mask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					XMM128 temp;
					temp.f = _mm_and_ps(r.src1[0].f, signmask.f);
					Common::AC4::Apply::MaskF(r.dst[0], temp, mask);
				}
				IV REFR (const Fw32f *s, Fw32f *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::AC4, d, OPT_LEVEL::AC4);
				}
			};
		}
		namespace C4
		{
			struct Abs_16s	: public fe2<Fw16s, OPT_LEVEL::C4, Fw16s, OPT_LEVEL::C4>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABS::Unit::C1::Abs_16s_unit(r.src1[0], r.dst[0]);
				}
				IV REFR (const Fw16s *s, Fw16s *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C4, d, OPT_LEVEL::C4);
				}
			};

			struct Abs_32f	: public fe2<Fw32f, OPT_LEVEL::C4, Fw32f, OPT_LEVEL::C4>
			{
				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABS::Init::C4::Abs_32f_setup(signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					r.dst[0].f	= _mm_and_ps(r.src1[0].f, signmask.f);
				}
				IV REFR (const Fw32f *s, Fw32f *d) const
				{
					ABS_REF::ABS::Abs(s, OPT_LEVEL::C4, d, OPT_LEVEL::C4);
				}
			};
		}
	}
	namespace ABSDIFF
	{
		namespace C1
		{
			struct AbsDiff_8u	: public fe3<Fw8u, OPT_LEVEL::C1, Fw8u, OPT_LEVEL::C1, Fw8u, OPT_LEVEL::C1>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFF::Unit::C1::AbsDiff_8u_unit(r.src1[0], r.src2[0], r.dst[0]);
				}
				IV REFR (const Fw8u *s1, const Fw8u *s2, Fw8u *d) const
				{
					ABS_REF::ABSDIFF::AbsDiff(s1, OPT_LEVEL::C1, s2, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};

			struct AbsDiff_16u	: public fe3<Fw16u, OPT_LEVEL::C1, Fw16u, OPT_LEVEL::C1, Fw16u, OPT_LEVEL::C1>
			{
				FE_SSE2_REF 
				IV SSE2_Init()
				{
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFF::Unit::C1::AbsDiff_16u_unit(r.src1[0], r.src2[0], r.dst[0]);
				}
				IV REFR (const Fw16u *s1, const Fw16u *s2, Fw16u *d) const
				{
					ABS_REF::ABSDIFF::AbsDiff(s1, OPT_LEVEL::C1, s2, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};

			struct AbsDiff_32f	: public fe3<Fw32f, OPT_LEVEL::C1, Fw32f, OPT_LEVEL::C1, Fw32f, OPT_LEVEL::C1>
			{
				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABSDIFF::Init::C1::AbsDiff_32f_setup(signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFF::Unit::C1::AbsDiff_32f_unit(r.src1[0], r.src2[0], r.dst[0], signmask);
				}
				IV REFR (const Fw32f *s1, const Fw32f *s2, Fw32f *d) const
				{
					ABS_REF::ABSDIFF::AbsDiff(s1, OPT_LEVEL::C1, s2, OPT_LEVEL::C1, d, OPT_LEVEL::C1);
				}
			};
		}
	}

	namespace ABSDIFFC
	{
		namespace C1
		{
			struct AbsDiffC_8u	: public fe2<Fw8u, OPT_LEVEL::C1, Fw8u, OPT_LEVEL::C1>
			{
				Fw8u valC; XMM128 val;
				AbsDiffC_8u(Fw8u valC_)
				{
					valC = valC_;
				}

				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABSDIFFC::Init::C1::AbsDiffC_8u_setup(valC, val);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFFC::Unit::C1::AbsDiffC_8u_unit(r.src1[0], r.dst[0], val);
				}
				IV REFR (const Fw8u *s,  Fw8u *d) const
				{
					ABS_REF::ABSDIFFC::AbsDiffC(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1, valC);
				}
			};

			struct AbsDiffC_16u	: public fe2<Fw16u, OPT_LEVEL::C1, Fw16u, OPT_LEVEL::C1>
			{
				Fw16u valC; XMM128 val;
				AbsDiffC_16u(Fw16u valC_)
				{
					valC = valC_;
				}

				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABSDIFFC::Init::C1::AbsDiffC_16u_setup(valC, val);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFFC::Unit::C1::AbsDiffC_16u_unit(r.src1[0], r.dst[0], val);
				}
				IV REFR (const Fw16u *s, Fw16u *d) const
				{
					ABS_REF::ABSDIFFC::AbsDiffC(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1, valC);
				}
			};

			struct AbsDiffC_32f	: public fe2<Fw32f, OPT_LEVEL::C1, Fw32f, OPT_LEVEL::C1>
			{
				Fw32f valC; XMM128 val;
				AbsDiffC_32f(Fw32f valC_)
				{
					valC = valC_;
				}

				XMM128 signmask;
				FE_SSE2_REF 
				IV SSE2_Init()
				{
					ABS_SSE2::ABSDIFFC::Init::C1::AbsDiffC_32f_setup(valC, val, signmask);
				}

				IV SSE2( RegFile & r ) const									// SSE2 Pixel function
				{
					ABS_SSE2::ABSDIFFC::Unit::C1::AbsDiffC_32f_unit(r.src1[0], r.dst[0], signmask, val);
				}
				IV REFR (const Fw32f *s, Fw32f *d) const
				{
					ABS_REF::ABSDIFFC::AbsDiffC(s, OPT_LEVEL::C1, d, OPT_LEVEL::C1, valC);
				}
			};
		}
	}
}

} // namespace OPT_LEVEL

#endif // __ABSDEF_H__