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