Loading...
Searching...
No Matches
hints.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_BASE_ARCH_HINTS_H
25#define PXR_BASE_ARCH_HINTS_H
26
27#include "pxr/base/arch/defines.h"
28
38
39#if defined(ARCH_COMPILER_GCC) || defined(ARCH_COMPILER_CLANG)
40
41#define ARCH_LIKELY(x) (__builtin_expect((bool)(x), true))
42#define ARCH_UNLIKELY(x) (__builtin_expect((bool)(x), false))
43
44#else
45
46#define ARCH_LIKELY(x) (x)
47#define ARCH_UNLIKELY(x) (x)
48
49#endif
50
66
67#if defined(ARCH_COMPILER_GCC) || \
68 defined(ARCH_COMPILER_CLANG) || \
69 defined(ARCH_COMPILER_ICC)
70
71// Intentionally using __builtin_unreachable on clang for consistency, since
72// __builtin_assume does not evaluate the expression, and our only option on gcc
73// is the __builtin_unreachable branch.
74
75#define ARCH_GUARANTEE_TO_COMPILER(x) \
76 if (static_cast<bool>(x)) { } else { __builtin_unreachable(); }
77
78#else
79
80#define ARCH_GUARANTEE_TO_COMPILER(x)
81
82#endif
83
84
85#endif // PXR_BASE_ARCH_HINTS_H