18520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/******************************************************************************
28520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *
38520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Copyright (C) 2015 The Android Open Source Project
48520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *
58520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Licensed under the Apache License, Version 2.0 (the "License");
68520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * you may not use this file except in compliance with the License.
78520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * You may obtain a copy of the License at:
88520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *
98520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * http://www.apache.org/licenses/LICENSE-2.0
108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *
118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Unless required by applicable law or agreed to in writing, software
128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * distributed under the License is distributed on an "AS IS" BASIS,
138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * See the License for the specific language governing permissions and
158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * limitations under the License.
168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *
178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar *****************************************************************************
188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/
208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/**
218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*******************************************************************************
228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @file
238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*  icv_platform_macros.h
248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*
258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief
268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*  This header files contains all the platform/toolchain specific macros
278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*
288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @author
298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*  Ittiam
308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*
318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par List of Functions:
328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*
338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks
348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*  None
358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*
368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*******************************************************************************
378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/
388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#ifndef __ICV_PLATFORM_MACROS_H__
398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define __ICV_PLATFORM_MACROS_H__
408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define INLINE inline
428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakarstatic INLINE UWORD32 CLZ(UWORD32 u4_word)
448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{
458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    if(u4_word)
468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar        return (__builtin_clz(u4_word));
478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    else
488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar        return 32;
498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar}
508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakarstatic __inline  UWORD32 CLZNZ(UWORD32 u4_word)
528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{
538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    ASSERT(u4_word);
548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    return (__builtin_clz(u4_word));
558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar}
568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_U8(x) ((x) > 255) ? (255) : (((x) < 0) ? (0) : (x))
588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_S8(x) ((x) > 127) ? (127) : (((x) < -128) ? (-128) : (x))
598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_U12(x) ((x) > 4095) ? (4095) : (((x) < 0) ? (0) : (x))
618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_S12(x) ((x) > 2047) ? (2047) : (((x) < -2048) ? (-2048) : (x))
628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_U16(x) ((x) > 65535) ? (65535) : (((x) < 0) ? (0) : (x))
648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define CLIP_S16(x) ((x) > 32767) ? (32767) : (((x) < -32768) ? (-32768) : (x))
658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define ITT_BIG_ENDIAN(x) __asm__("rev %0, %1" : "=r"(x) : "r"(x));
678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define NOP(nop_cnt)                                \
698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{                                                   \
708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    UWORD32 nop_i;                                  \
718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    for (nop_i = 0; nop_i < nop_cnt; nop_i++)       \
728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar        __asm__ __volatile__("mov x0, x0");         \
738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar}
748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define PREFETCH(x) __builtin_prefetch(x);
778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define DATA_SYNC() __sync_synchronize()
798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define SHL(x,y) (((y) < 32) ? ((x) << (y)) : 0)
818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define SHR_NEG(val,shift)  (((shift) > 0) ? ( (val) >> (shift)) : ((val) << (-(shift))))
848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define SHL_NEG(val,shift)  (((shift) > 0) ? ( (val) >> (-(shift))) : ((val) << (shift)))
858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define INLINE inline
878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define MEM_ALIGN8 __attribute__ ((aligned (8)))
898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define MEM_ALIGN16 __attribute__ ((aligned (16)))
908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define MEM_ALIGN32 __attribute__ ((aligned (32)))
918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#endif /* __ICV_PLATFORM_MACROS_H__ */
94