00001
00027 #ifndef GALOIS_RUNTIME_LL_COMPILERSPECIFIC_H
00028 #define GALOIS_RUNTIME_LL_COMPILERSPECIFIC_H
00029
00030 namespace Galois {
00031 namespace Runtime {
00032 namespace LL {
00033
00034 inline static void asmPause() {
00035 #if defined(__i386__) || defined(__amd64__)
00036
00037 asm volatile ("pause");
00038 #endif
00039 }
00040
00041 inline static void compilerBarrier() {
00042 asm volatile ("":::"memory");
00043 }
00044
00045 inline static void flushInstructionPipeline() {
00046 #if defined(__i386__) || defined(__amd64__)
00047 asm volatile (
00048 "xor %%eax, %%eax;"
00049 "cpuid;"
00050 :::"%eax", "%ebx", "%ecx", "%edx");
00051 #endif
00052 }
00053
00054
00055 #define GALOIS_CACHE_LINE_SIZE 128
00056
00057 #if defined(__INTEL_COMPILER)
00058 #define GALOIS_ATTRIBUTE_NOINLINE __attribute__ ((noinline))
00059 #define GALOIS_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
00060 #define GALOIS_ATTRIBUTE_ALIGN_CACHE_LINE __attribute__((aligned(GALOIS_CACHE_LINE_SIZE)))
00061
00062 #elif defined( __GNUC__)
00063 #define GALOIS_ATTRIBUTE_NOINLINE __attribute__ ((noinline))
00064 #define GALOIS_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
00065 #define GALOIS_ATTRIBUTE_ALIGN_CACHE_LINE __attribute__((aligned(GALOIS_CACHE_LINE_SIZE)))
00066
00067 #elif defined( _MSC_VER)
00068 #define GALOIS_ATTRIBUTE_NOINLINE __declspec(noinline)
00069 #define GALOIS_ATTRIBUTE_DEPRECATED __declspec ((deprecated))
00070 #define GALOIS_ATTRIBUTE_ALIGN_CACHE_LINE __declspec(align(GALOIS_CACHE_LINE_SIZE))
00071
00072 #else
00073 #define GALOIS_ATTRIBUTE_NOINLINE
00074 #define GALOIS_ATTRIBUTE_ALIGN_CACHE_LINE
00075 #define GALOIS_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
00076 #endif
00077
00078
00079
00080 #ifdef GALOIS_USE_PROF
00081 #define GALOIS_ATTRIBUTE_PROF_NOINLINE GALOIS_ATTRIBUTE_NOINLINE
00082 #else
00083 #define GALOIS_ATTRIBUTE_PROF_NOINLINE inline
00084 #endif
00085
00086 }
00087 }
00088 }
00089
00090 #endif