18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/****************************************************************************** 28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project 48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License"); 68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License. 78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at: 88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0 108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software 128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS, 138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and 158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License. 168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ***************************************************************************** 188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @file 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* ih264_platform_macros.h 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Platform specific Macro definitions used in the codec 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @author 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Ittiam 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* None 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef _IH264_PLATFORM_MACROS_H_ 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define _IH264_PLATFORM_MACROS_H_ 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <immintrin.h> 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_U8(x) CLIP3(0, 255, (x)) 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_S8(x) CLIP3(-128, 127, (x)) 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_U10(x) CLIP3(0, 1023, (x)) 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_S10(x) CLIP3(-512, 511, (x)) 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_U12(x) CLIP3(0, 4095, (x)) 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_S12(x) CLIP3(-2048, 2047, (x)) 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_U16(x) CLIP3(0, 65535, (x)) 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CLIP_S16(x) CLIP3(-32768, 32767, (x)) 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define MEM_ALIGN16 __attribute__ ((aligned (16))) 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SHL(x,y) (((y) < 32) ? ((x) << (y)) : 0) 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0) 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SHR_NEG(val,shift) ((shift>0)?(val>>shift):(val<<(-shift))) 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define SHL_NEG(val,shift) ((shift<0)?(val>>(-shift)):(val<<shift)) 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 65caab4fe0688e7c4b023d979b617fb16a275614f2Hamsalekha S#define ITT_BIG_ENDIAN(x) __builtin_bswap32(x); 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 67caab4fe0688e7c4b023d979b617fb16a275614f2Hamsalekha S#define NOP(nop_cnt) {UWORD32 nop_i; for (nop_i = 0; nop_i < nop_cnt; nop_i++) asm("nop");} 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PLD(a) 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sstatic __inline UWORD32 CLZ(UWORD32 u4_word) 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_word) 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return(__builtin_clz(u4_word)); 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 32; 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sstatic __inline UWORD32 CTZ(UWORD32 u4_word) 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(0 == u4_word) 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return 31; 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S unsigned int index; 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S index = __builtin_ctz(u4_word); 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (UWORD32)index; 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define DATA_SYNC() __sync_synchronize() 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S//#define INLINE __inline 96caab4fe0688e7c4b023d979b617fb16a275614f2Hamsalekha S#define INLINE inline 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PREFETCH_ENABLE 1 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#if PREFETCH_ENABLE 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PREFETCH(ptr, type) _mm_prefetch(ptr, type); 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#else 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define PREFETCH(ptr, type) 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define MEM_ALIGN8 __attribute__ ((aligned (8))) 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define MEM_ALIGN16 __attribute__ ((aligned (16))) 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define MEM_ALIGN32 __attribute__ ((aligned (32))) 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif /* _IH264_PLATFORM_MACROS_H_ */ 111