114 lines
3.5 KiB
C
114 lines
3.5 KiB
C
|
/***
|
||
|
*** Copyright (C) 1985-2005 Intel Corporation. All rights reserved.
|
||
|
***
|
||
|
*** The information and source code contained herein is the exclusive
|
||
|
*** property of Intel Corporation and may not be disclosed, examined
|
||
|
*** or reproduced in whole or in part without explicit written authorization
|
||
|
*** from the company.
|
||
|
***
|
||
|
****/
|
||
|
|
||
|
#pragma once
|
||
|
#ifndef __midl
|
||
|
#ifndef _INCLUDED_TMM
|
||
|
#define _INCLUDED_TMM
|
||
|
|
||
|
#if defined (_M_CEE_PURE)
|
||
|
#error ERROR: XMM intrinsics not supported in the pure mode!
|
||
|
#else /* defined (_M_CEE_PURE) */
|
||
|
|
||
|
#include <pmmintrin.h>
|
||
|
|
||
|
#ifdef _MM2_FUNCTIONALITY
|
||
|
/* support old notation */
|
||
|
#ifndef _MM_FUNCTIONALITY
|
||
|
#define _MM_FUNCTIONALITY
|
||
|
#endif /* _MM_FUNCTIONALITY */
|
||
|
#endif /* _MM2_FUNCTIONALITY */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif /* __cplusplus */
|
||
|
|
||
|
// Add horizonally packed [saturated] words, double words,
|
||
|
// {X,}MM2/m{128,64} (b) to {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_hadd_epi16 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_hadd_epi32 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_hadds_epi16 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_hadd_pi16 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_hadd_pi32 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_hadds_pi16 (__m64 a, __m64 b);
|
||
|
|
||
|
// Subtract horizonally packed [saturated] words, double words,
|
||
|
// {X,}MM2/m{128,64} (b) from {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_hsub_epi16 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_hsub_epi32 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_hsubs_epi16 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_hsub_pi16 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_hsub_pi32 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_hsubs_pi16 (__m64 a, __m64 b);
|
||
|
|
||
|
// Multiply and add packed words,
|
||
|
// {X,}MM2/m{128,64} (b) to {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_maddubs_epi16 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_maddubs_pi16 (__m64 a, __m64 b);
|
||
|
|
||
|
// Packed multiply high integers with round and scaling,
|
||
|
// {X,}MM2/m{128,64} (b) to {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_mulhrs_epi16 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_mulhrs_pi16 (__m64 a, __m64 b);
|
||
|
|
||
|
// Packed shuffle bytes
|
||
|
// {X,}MM2/m{128,64} (b) by {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_shuffle_epi8 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_shuffle_pi8 (__m64 a, __m64 b);
|
||
|
|
||
|
// Packed byte, word, double word sign, {X,}MM2/m{128,64} (b) to
|
||
|
// {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_sign_epi8 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_sign_epi16 (__m128i a, __m128i b);
|
||
|
extern __m128i _mm_sign_epi32 (__m128i a, __m128i b);
|
||
|
|
||
|
extern __m64 _mm_sign_pi8 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_sign_pi16 (__m64 a, __m64 b);
|
||
|
extern __m64 _mm_sign_pi32 (__m64 a, __m64 b);
|
||
|
|
||
|
// Packed align and shift right by n*8 bits,
|
||
|
// {X,}MM2/m{128,64} (b) to {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_alignr_epi8 (__m128i a, __m128i b, int n);
|
||
|
|
||
|
extern __m64 _mm_alignr_pi8 (__m64 a, __m64 b, int n);
|
||
|
|
||
|
// Packed byte, word, double word absolute value,
|
||
|
// {X,}MM2/m{128,64} (b) to {X,}MM1 (a).
|
||
|
|
||
|
extern __m128i _mm_abs_epi8 (__m128i a);
|
||
|
extern __m128i _mm_abs_epi16 (__m128i a);
|
||
|
extern __m128i _mm_abs_epi32 (__m128i a);
|
||
|
|
||
|
extern __m64 _mm_abs_pi8 (__m64 a);
|
||
|
extern __m64 _mm_abs_pi16 (__m64 a);
|
||
|
extern __m64 _mm_abs_pi32 (__m64 a);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
};
|
||
|
#endif /* __cplusplus */
|
||
|
|
||
|
#endif /* defined (_M_CEE_PURE) */
|
||
|
|
||
|
#endif /* _INCLUDED_TMM */
|
||
|
|
||
|
#endif /* __midl */
|