1 | //===- FuzzerBuiltins.h - Internal header for builtins ----------*- C++ -* ===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // Wrapper functions and marcos around builtin functions. |
9 | //===----------------------------------------------------------------------===// |
10 | |
11 | #ifndef LLVM_FUZZER_BUILTINS_H |
12 | #define LLVM_FUZZER_BUILTINS_H |
13 | |
14 | #include "FuzzerPlatform.h" |
15 | |
16 | #if !LIBFUZZER_MSVC |
17 | #include <cstdint> |
18 | |
19 | #define GET_CALLER_PC() __builtin_return_address(0) |
20 | |
21 | namespace fuzzer { |
22 | |
23 | inline uint8_t Bswap(uint8_t x) { return x; } |
24 | inline uint16_t Bswap(uint16_t x) { return __builtin_bswap16(x); } |
25 | inline uint32_t Bswap(uint32_t x) { return __builtin_bswap32(x); } |
26 | inline uint64_t Bswap(uint64_t x) { return __builtin_bswap64(x); } |
27 | |
28 | inline uint32_t Clzll(unsigned long long X) { return __builtin_clzll(X); } |
29 | inline int Popcountll(unsigned long long X) { return __builtin_popcountll(X); } |
30 | |
31 | } // namespace fuzzer |
32 | |
33 | #endif // !LIBFUZZER_MSVC |
34 | #endif // LLVM_FUZZER_BUILTINS_H |
35 | |