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