MongoDB  2.7.0
inline_decls.h
1 // inline_decls.h
2 
3 /* Copyright 2010 10gen Inc.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #pragma once
19 
20 #if defined(__GNUC__)
21 
22 #define NOINLINE_DECL __attribute__((noinline))
23 #define PACKED_DECL __attribute__((packed))
24 
25 #elif defined(_MSC_VER)
26 
27 #define NOINLINE_DECL __declspec(noinline)
28 #define PACKED_DECL
29 
30 #else
31 
32 #define NOINLINE_DECL
33 #define PACKED_DECL
34 
35 #endif
36 
37 namespace mongo {
38 
39 /* Note: do not clutter code with these -- ONLY use in hot spots / significant loops. */
40 
41 #if !defined(__GNUC__)
42 
43 // branch prediction. indicate we expect to be true
44 # define MONGO_likely(x) ((bool)(x))
45 
46 // branch prediction. indicate we expect to be false
47 # define MONGO_unlikely(x) ((bool)(x))
48 
49 # if defined(_WIN32)
50  // prefetch data from memory
51  inline void prefetch(const void *p) {
52 #if defined(_MM_HINT_T0)
53  _mm_prefetch((char *) p, _MM_HINT_T0);
54 #endif
55  }
56 #else
57  inline void prefetch(void *p) { }
58 #endif
59 
60 #else
61 
62 # define MONGO_likely(x) ( __builtin_expect((bool)(x), 1) )
63 # define MONGO_unlikely(x) ( __builtin_expect((bool)(x), 0) )
64 
65  inline void prefetch(void *p) {
66  __builtin_prefetch(p);
67  }
68 
69 #endif
70 
71 }