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