compiler.h revision 6bcd4d3e7310240d9424f13444542572e9ae3632
1b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian/* 2cccf42773a54b972301a0a62f314269acd252e3eMathias Agopian * Copyright (C) 2009 The Android Open Source Project 3b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * 4b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * you may not use this file except in compliance with the License. 6b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * You may obtain a copy of the License at 7b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * 8b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * 10b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * Unless required by applicable law or agreed to in writing, software 11b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * See the License for the specific language governing permissions and 14b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * limitations under the License. 15b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian */ 16b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian 17b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#ifndef ANDROID_CUTILS_COMPILER_H 18b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#define ANDROID_CUTILS_COMPILER_H 19b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian 20b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian/* 21b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian * helps the compiler's optimizer predicting branches 22b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian */ 23b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian 24b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#ifdef __cplusplus 25b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian# define CC_LIKELY( exp ) (__builtin_expect( !!(exp), true )) 26b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian# define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), false )) 27b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#else 28b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian# define CC_LIKELY( exp ) (__builtin_expect( !!(exp), 1 )) 29b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian# define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), 0 )) 30b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#endif 31b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian 326bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy/** 336bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * exports marked symbols 346bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * 356bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * if used on a C++ class declaration, this macro must be inserted 366bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * after the "class" keyword. For instance: 376bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * 386bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * template <typename TYPE> 396bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy * class ANDROID_API Singleton { } 406bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy */ 416bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy 426bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy#define ANDROID_API __attribute__((visibility("default"))) 436bcd4d3e7310240d9424f13444542572e9ae3632Romain Guy 44b5fbd75f6c58558a430ce15d077eed0a5ae97d9dMathias Agopian#endif // ANDROID_CUTILS_COMPILER_H 45