10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/******************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  ihevc_platform_macros.h
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Platform specific Macro definitions used in the codec
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Ittiam
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef _IHEVC_PLATFORM_MACROS_H_
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _IHEVC_PLATFORM_MACROS_H_
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//#include <immintrin.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_U8(x) CLIP3((x), 0,     255)
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_S8(x) CLIP3((x), -128,  127)
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_U10(x) CLIP3((x), 0,     1023);
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_S10(x) CLIP3((x), -512,  511);
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_U12(x) CLIP3((x), 0,     4095);
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_S12(x) CLIP3((x), -2048,  2047);
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_U16(x) CLIP3((x), 0,        65535)
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define CLIP_S16(x) CLIP3((x), -32768,   32767)
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define SHL(x,y) (((y) < 32) ? ((x) << (y)) : 0)
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define SHR_NEG(val,shift)  ((shift>0)?(val>>shift):(val<<(-shift)))
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define SHL_NEG(val,shift)  ((shift<0)?(val>>(-shift)):(val<<shift))
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((x & 0x0000ff00) << 8)    |   \
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((x & 0x00ff0000) >> 8)    |   \
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((UWORD32)x >> 24);
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6973f5f5afd5a4378f16fd7e2e436e727faa6d0c3dHarish Mahendrakar#define NOP(nop_cnt)    {UWORD32 nop_i; for (nop_i = (nop_cnt) ; nop_i > 0 ; nop_i--) asm("nop");}
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7189555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakar#define POPCNT_U32(x)       __builtin_popcount(x)
7289555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakar
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define PLD(a)
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define INLINE inline
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic INLINE UWORD32 CLZ(UWORD32 u4_word)
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(u4_word)
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (__builtin_clz(u4_word));
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return 32;
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
8389555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakarstatic INLINE UWORD32 CLZNZ(UWORD32 u4_word)
8489555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakar{
8589555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakar   return (__builtin_clz(u4_word));
8689555bcf4d7d34fd8985524460312e320867b684Harish Mahendrakar}
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarstatic INLINE UWORD32 CTZ(UWORD32 u4_word)
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == u4_word)
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return 31;
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    else
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        unsigned int index;
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        index = __builtin_ctz(u4_word);
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        return (UWORD32)index;
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
99031b91dde5dd07c15d6401601e47e7c937e79051Harish Mahendrakar#define DATA_SYNC()  __sync_synchronize()
100031b91dde5dd07c15d6401601e47e7c937e79051Harish Mahendrakar
1019663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy/**
1029663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1039663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy *  @brief  returns postion of msb bit for 32bit input
1049663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1059663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy */
1069663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy#define GET_POS_MSB_32(r,word)                         \
1079663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy{                                                       \
1089663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    if(word)                                           \
1099663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = 31 - __builtin_clz(word);                  \
1119663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1129663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    else                                                \
1139663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1149663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = -1;                                         \
1159663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1169663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy}
1179663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
1189663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy/**
1199663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1209663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy *  @brief  returns postion of msb bit for 64bit input
1219663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1229663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy */
1239663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy#define GET_POS_MSB_64(r,word)                          \
1249663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy{                                                       \
1259663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    if(word)                                            \
1269663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1279663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = 63 - __builtin_clzll(word);                 \
1289663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1299663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    else                                                \
1309663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1319663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = -1;                                         \
1329663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1339663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy}
1349663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
1359663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy
1369663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy/**
1379663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1389663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy *  @brief  returns max number of bits required to represent input word (max 32bits)
1399663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy******************************************************************************
1409663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy */
1419663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy#define GETRANGE(r,word)                                \
1429663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy{                                                       \
1439663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    if(word)                                            \
1449663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1459663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = 32 - __builtin_clz(word);                   \
1469663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1479663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    else                                                \
1489663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    {                                                   \
1499663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy        r = 1;                                          \
1509663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy    }                                                   \
1519663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy}
1528c5bdca6781cc189312d1fc213fa854cb3c1de1fStephen Hines#define GCC_ENABLE 0
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if GCC_ENABLE
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _mm256_loadu2_m128i(X,Y) _mm256_insertf128_si256(_mm256_castsi128_si256(_mm_loadu_si128((Y))), _mm_loadu_si128((X)),1);
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _mm256_storeu2_m128i(X,Y,Z) {_mm_storeu_si128 ((Y), _mm256_castsi256_si128((Z)));_mm_storeu_si128 ((X), _mm256_extracti128_si256((Z),1));}
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _mm256_set_m128i(X,Y) _mm256_insertf128_si256(_mm256_castsi128_si256((Y)),(X),1);
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define PREFETCH_ENABLE 1
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if PREFETCH_ENABLE
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define PREFETCH(ptr, type)
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MEM_ALIGN8 __attribute__ ((aligned (8)))
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MEM_ALIGN16 __attribute__ ((aligned (16)))
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define MEM_ALIGN32 __attribute__ ((aligned (32)))
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif /* _IHEVC_PLATFORM_MACROS_H_ */
177