| /************************************************************************** | |
| * | |
| * Copyright (c) 2012 ZTE Corporation. | |
| * | |
| *************************************************************************** | |
| * Ä£ ¿é Ãû : P98C_OSS | |
| * ÎÄ ¼þ Ãû : oss_compiler.h | |
| * Ïà¹ØÎļþ : | |
| * ʵÏÖ¹¦ÄÜ : Óë±àÒëÆ÷ºêÏà¹ØµÄºê¶¨Òå | |
| * ×÷ Õß : chenxingfang | |
| * °æ ±¾ : V1.0 | |
| * Íê³ÉÈÕÆÚ : 2012-08-10 | |
| * ÆäËü˵Ã÷ : | |
| **************************************************************************/ | |
| /************************************************************************** | |
| * Ð޸ļǼ | |
| **************************************************************************/ | |
| #ifndef _OSS_COMPILER_H | |
| #define _OSS_COMPILER_H | |
| #define _USE_COMPILER | |
| #ifdef _USE_COMPILER | |
| /************************************************************************** | |
| * #includeÇø | |
| **************************************************************************/ | |
| #ifdef _OS_TOS | |
| # include "tos_link_info.h" | |
| #endif | |
| #ifdef __cplusplus | |
| extern "C" | |
| { | |
| #endif | |
| /************************************************************************** | |
| * ³£Á¿¶¨ÒåÇø | |
| **************************************************************************/ | |
| #ifdef _OS_LINUX | |
| #ifdef _USE_TCM | |
| # define __tcm_func __tcmfunc | |
| # define __tcm_call_func __attribute__((long_call)) | |
| # define __tcm_local_func __tcmlocalfunc | |
| # define __tcm_data __tcmdata | |
| # define __tcm_const __tcmconst | |
| # define __gprof __attribute__((section(".gprof"), instrument_functions)) | |
| #else | |
| # define __tcm_func | |
| # define __tcm_call_func | |
| # define __tcm_local_func | |
| # define __tcm_data | |
| # define __tcm_const | |
| # define __gprof | |
| #endif | |
| #ifdef CONFIG_MODEM_CODE_IS_MAPPING | |
| # define __ps_static_func __attribute__((section(".ps_static_func"), long_call)) noinline | |
| # define __ps_4g_func __attribute__((section(".ps_4g_func"), long_call)) noinline | |
| # define __ps_3g_func __attribute__((section(".ps_3g_func"), long_call)) noinline | |
| # define __ps_2g_func __attribute__((section(".ps_2g_func"), long_call)) noinline | |
| # define __ps_comm_func __attribute__((section(".ps_comm_func"), long_call)) noinline | |
| #else | |
| # define __ps_static_func | |
| # define __ps_4g_func | |
| # define __ps_3g_func | |
| # define __ps_2g_func | |
| # define __ps_comm_func | |
| #endif | |
| #else // #ifdef _OS_LINUX | |
| #if (__GNUC__ == 4) && (__GNUC_MINOR__ == 3) && (__GNUC_PATCHLEVEL__ == 2) | |
| # define barrier() asm volatile( "" : : : "memory" ) | |
| #else | |
| # define barrier() | |
| #endif | |
| #if defined(__GNUC__) && defined (_USE_TCM) | |
| # define __tcm_func __attribute__((section(".itcm"), long_call)) noinline | |
| # define __tcm_call_func __attribute__((long_call)) | |
| # define __tcm_data __attribute__((section(".dtcm"))) | |
| # define __gprof __attribute__((section(".gprof"), instrument_functions)) | |
| #elif defined (__ARMCC_VERSION) && defined (_USE_TCM) | |
| # define __tcm_func __attribute__((section(".itcm"))) | |
| # define __tcm_call_func | |
| # define __tcm_data __attribute__((section(".dtcm"))) | |
| # define __gprof | |
| #else | |
| # define __tcm_func | |
| # define __tcm_call_func | |
| # define __tcm_data | |
| # define __gprof | |
| #endif | |
| #ifdef __GNUC__ | |
| # define inline __inline__ | |
| # define always_inline __inline__ __attribute__((always_inline)) | |
| # define noinline __attribute__((noinline)) | |
| #elif defined (__ARMCC_VERSION) | |
| # define inline __inline | |
| # define always_inline __forceinline | |
| # define noinline | |
| #elif defined (_MSC_VER) | |
| # define inline inline | |
| # define always_inline inline | |
| # define noinline | |
| #else | |
| # define inline | |
| # define always_inline | |
| # define noinline | |
| #endif | |
| #endif // #ifdef _OS_LINUX | |
| #ifdef __GNUC__ | |
| //#pragma GCC optimize("-O0") | |
| //#pragma GCC optimize("-O2") | |
| # define __optimize(x) __attribute__((optimize(__str(x)))) | |
| #else | |
| # define __optimize(x) | |
| #endif | |
| #ifdef __ARMCC_VERSION | |
| # define PRAGMA(X) _Pragma(#X) | |
| # define RODATA_BEGIN(X) PRAGMA(arm section rodata=#X) | |
| # define RWDATA_BEGIN(X) PRAGMA(arm section rwdata=#X) | |
| # define ZIDATA_BEGIN(X) PRAGMA(arm section zidata=#X) | |
| # define CODE_BEGIN(X) PRAGMA(arm section code=#X) | |
| # define RODATA_END _Pragma("arm section rodata") | |
| # define RWDATA_END _Pragma("arm section rwdata") | |
| # define ZIDATA_END _Pragma("arm section zidata") | |
| # define CODE_END _Pragma("arm section code") | |
| #else | |
| # define PRAGMA(X) | |
| # define RODATA_BEGIN(X) | |
| # define RWDATA_BEGIN(X) | |
| # define ZIDATA_BEGIN(X) | |
| # define CODE_BEGIN(X) | |
| # define RODATA_END | |
| # define RWDATA_END | |
| # define ZIDATA_END | |
| # define CODE_END | |
| #endif | |
| /************************************************************************** | |
| * Êý¾Ý½á¹¹¶¨ÒåÇø | |
| **************************************************************************/ | |
| /************************************************************************** | |
| * º¯ÊýÉùÃ÷Çø | |
| **************************************************************************/ | |
| /************************************************************************** | |
| * È«¾Ö±äÁ¿ÉùÃ÷Çø | |
| **************************************************************************/ | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _USE_COMPILER */ | |
| #endif /* _OSS_COMPILER_H */ | |