Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Support/Endian.h
Line
Count
Source (jump to first uncovered line)
1
//===- Endian.h - Utilities for IO with endian specific data ----*- 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
//
9
// This file declares generic functions to read and write endian specific data.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_SUPPORT_ENDIAN_H
14
#define LLVM_SUPPORT_ENDIAN_H
15
16
#include "llvm/Support/AlignOf.h"
17
#include "llvm/Support/Compiler.h"
18
#include "llvm/Support/Host.h"
19
#include "llvm/Support/SwapByteOrder.h"
20
#include <cassert>
21
#include <cstddef>
22
#include <cstdint>
23
#include <cstring>
24
#include <type_traits>
25
26
namespace llvm {
27
namespace support {
28
29
enum endianness {big, little, native};
30
31
// These are named values for common alignments.
32
enum {aligned = 0, unaligned = 1};
33
34
namespace detail {
35
36
/// ::value is either alignment, or alignof(T) if alignment is 0.
37
template<class T, int alignment>
38
struct PickAlignment {
39
 enum { value = alignment == 0 ? alignof(T) : alignment };
40
};
41
42
} // end namespace detail
43
44
namespace endian {
45
46
231M
constexpr endianness system_endianness() {
47
231M
  return sys::IsBigEndianHost ? 
big0
: little;
48
231M
}
49
50
template <typename value_type>
51
231M
inline value_type byte_swap(value_type value, endianness endian) {
52
231M
  if ((endian != native) && 
(endian != system_endianness())231M
)
53
996k
    sys::swapByteOrder(value);
54
231M
  return value;
55
231M
}
unsigned short llvm::support::endian::byte_swap<unsigned short>(unsigned short, llvm::support::endianness)
Line
Count
Source
51
47.4M
inline value_type byte_swap(value_type value, endianness endian) {
52
47.4M
  if ((endian != native) && 
(endian != system_endianness())47.4M
)
53
218k
    sys::swapByteOrder(value);
54
47.4M
  return value;
55
47.4M
}
unsigned int llvm::support::endian::byte_swap<unsigned int>(unsigned int, llvm::support::endianness)
Line
Count
Source
51
114M
inline value_type byte_swap(value_type value, endianness endian) {
52
114M
  if ((endian != native) && 
(endian != system_endianness())114M
)
53
394k
    sys::swapByteOrder(value);
54
114M
  return value;
55
114M
}
unsigned long long llvm::support::endian::byte_swap<unsigned long long>(unsigned long long, llvm::support::endianness)
Line
Count
Source
51
33.5M
inline value_type byte_swap(value_type value, endianness endian) {
52
33.5M
  if ((endian != native) && 
(endian != system_endianness())33.5M
)
53
263k
    sys::swapByteOrder(value);
54
33.5M
  return value;
55
33.5M
}
unsigned char llvm::support::endian::byte_swap<unsigned char>(unsigned char, llvm::support::endianness)
Line
Count
Source
51
411k
inline value_type byte_swap(value_type value, endianness endian) {
52
411k
  if ((endian != native) && 
(endian != system_endianness())411k
)
53
100k
    sys::swapByteOrder(value);
54
411k
  return value;
55
411k
}
int llvm::support::endian::byte_swap<int>(int, llvm::support::endianness)
Line
Count
Source
51
29.8k
inline value_type byte_swap(value_type value, endianness endian) {
52
29.8k
  if ((endian != native) && 
(endian != system_endianness())29.7k
)
53
6.19k
    sys::swapByteOrder(value);
54
29.8k
  return value;
55
29.8k
}
char llvm::support::endian::byte_swap<char>(char, llvm::support::endianness)
Line
Count
Source
51
3.67k
inline value_type byte_swap(value_type value, endianness endian) {
52
3.67k
  if ((endian != native) && 
(endian != system_endianness())2.52k
)
53
0
    sys::swapByteOrder(value);
54
3.67k
  return value;
55
3.67k
}
unsigned long llvm::support::endian::byte_swap<unsigned long>(unsigned long, llvm::support::endianness)
Line
Count
Source
51
36.2M
inline value_type byte_swap(value_type value, endianness endian) {
52
36.2M
  if (
(endian != native)36.2M
&& (endian != system_endianness()))
53
4
    sys::swapByteOrder(value);
54
36.2M
  return value;
55
36.2M
}
long long llvm::support::endian::byte_swap<long long>(long long, llvm::support::endianness)
Line
Count
Source
51
64.7k
inline value_type byte_swap(value_type value, endianness endian) {
52
64.7k
  if ((endian != native) && 
(endian != system_endianness())64.7k
)
53
13.7k
    sys::swapByteOrder(value);
54
64.7k
  return value;
55
64.7k
}
llvm::minidump::StreamType llvm::support::endian::byte_swap<llvm::minidump::StreamType>(llvm::minidump::StreamType, llvm::support::endianness)
Line
Count
Source
51
55
inline value_type byte_swap(value_type value, endianness endian) {
52
55
  if ((endian != native) && (endian != system_endianness()))
53
0
    sys::swapByteOrder(value);
54
55
  return value;
55
55
}
short llvm::support::endian::byte_swap<short>(short, llvm::support::endianness)
Line
Count
Source
51
3.05k
inline value_type byte_swap(value_type value, endianness endian) {
52
3.05k
  if ((endian != native) && 
(endian != system_endianness())3.04k
)
53
23
    sys::swapByteOrder(value);
54
3.05k
  return value;
55
3.05k
}
signed char llvm::support::endian::byte_swap<signed char>(signed char, llvm::support::endianness)
Line
Count
Source
51
60
inline value_type byte_swap(value_type value, endianness endian) {
52
60
  if ((endian != native) && (endian != system_endianness()))
53
56
    sys::swapByteOrder(value);
54
60
  return value;
55
60
}
56
57
/// Swap the bytes of value to match the given endianness.
58
template<typename value_type, endianness endian>
59
31.3M
inline value_type byte_swap(value_type value) {
60
31.3M
  return byte_swap(value, endian);
61
31.3M
}
unsigned int llvm::support::endian::byte_swap<unsigned int, (llvm::support::endianness)1>(unsigned int)
Line
Count
Source
59
31.2M
inline value_type byte_swap(value_type value) {
60
31.2M
  return byte_swap(value, endian);
61
31.2M
}
unsigned long long llvm::support::endian::byte_swap<unsigned long long, (llvm::support::endianness)1>(unsigned long long)
Line
Count
Source
59
41.7k
inline value_type byte_swap(value_type value) {
60
41.7k
  return byte_swap(value, endian);
61
41.7k
}
unsigned int llvm::support::endian::byte_swap<unsigned int, (llvm::support::endianness)0>(unsigned int)
Line
Count
Source
59
5.62k
inline value_type byte_swap(value_type value) {
60
5.62k
  return byte_swap(value, endian);
61
5.62k
}
unsigned long long llvm::support::endian::byte_swap<unsigned long long, (llvm::support::endianness)0>(unsigned long long)
Line
Count
Source
59
1.60k
inline value_type byte_swap(value_type value) {
60
1.60k
  return byte_swap(value, endian);
61
1.60k
}
62
63
/// Read a value of a particular endianness from memory.
64
template <typename value_type, std::size_t alignment>
65
103M
inline value_type read(const void *memory, endianness endian) {
66
103M
  value_type ret;
67
103M
68
103M
  memcpy(&ret,
69
103M
         LLVM_ASSUME_ALIGNED(
70
103M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
103M
         sizeof(value_type));
72
103M
  return byte_swap<value_type>(ret, endian);
73
103M
}
unsigned short llvm::support::endian::read<unsigned short, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
17.5M
inline value_type read(const void *memory, endianness endian) {
66
17.5M
  value_type ret;
67
17.5M
68
17.5M
  memcpy(&ret,
69
17.5M
         LLVM_ASSUME_ALIGNED(
70
17.5M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
17.5M
         sizeof(value_type));
72
17.5M
  return byte_swap<value_type>(ret, endian);
73
17.5M
}
unsigned int llvm::support::endian::read<unsigned int, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
23.0M
inline value_type read(const void *memory, endianness endian) {
66
23.0M
  value_type ret;
67
23.0M
68
23.0M
  memcpy(&ret,
69
23.0M
         LLVM_ASSUME_ALIGNED(
70
23.0M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
23.0M
         sizeof(value_type));
72
23.0M
  return byte_swap<value_type>(ret, endian);
73
23.0M
}
unsigned long long llvm::support::endian::read<unsigned long long, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
24.2M
inline value_type read(const void *memory, endianness endian) {
66
24.2M
  value_type ret;
67
24.2M
68
24.2M
  memcpy(&ret,
69
24.2M
         LLVM_ASSUME_ALIGNED(
70
24.2M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
24.2M
         sizeof(value_type));
72
24.2M
  return byte_swap<value_type>(ret, endian);
73
24.2M
}
unsigned char llvm::support::endian::read<unsigned char, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
20.0k
inline value_type read(const void *memory, endianness endian) {
66
20.0k
  value_type ret;
67
20.0k
68
20.0k
  memcpy(&ret,
69
20.0k
         LLVM_ASSUME_ALIGNED(
70
20.0k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
20.0k
         sizeof(value_type));
72
20.0k
  return byte_swap<value_type>(ret, endian);
73
20.0k
}
unsigned long llvm::support::endian::read<unsigned long, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
36.2M
inline value_type read(const void *memory, endianness endian) {
66
36.2M
  value_type ret;
67
36.2M
68
36.2M
  memcpy(&ret,
69
36.2M
         LLVM_ASSUME_ALIGNED(
70
36.2M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
36.2M
         sizeof(value_type));
72
36.2M
  return byte_swap<value_type>(ret, endian);
73
36.2M
}
unsigned int llvm::support::endian::read<unsigned int, 0ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
1.87M
inline value_type read(const void *memory, endianness endian) {
66
1.87M
  value_type ret;
67
1.87M
68
1.87M
  memcpy(&ret,
69
1.87M
         LLVM_ASSUME_ALIGNED(
70
1.87M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
1.87M
         sizeof(value_type));
72
1.87M
  return byte_swap<value_type>(ret, endian);
73
1.87M
}
unsigned long long llvm::support::endian::read<unsigned long long, 0ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
2.65k
inline value_type read(const void *memory, endianness endian) {
66
2.65k
  value_type ret;
67
2.65k
68
2.65k
  memcpy(&ret,
69
2.65k
         LLVM_ASSUME_ALIGNED(
70
2.65k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
2.65k
         sizeof(value_type));
72
2.65k
  return byte_swap<value_type>(ret, endian);
73
2.65k
}
int llvm::support::endian::read<int, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
20.6k
inline value_type read(const void *memory, endianness endian) {
66
20.6k
  value_type ret;
67
20.6k
68
20.6k
  memcpy(&ret,
69
20.6k
         LLVM_ASSUME_ALIGNED(
70
20.6k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
20.6k
         sizeof(value_type));
72
20.6k
  return byte_swap<value_type>(ret, endian);
73
20.6k
}
long long llvm::support::endian::read<long long, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
53.7k
inline value_type read(const void *memory, endianness endian) {
66
53.7k
  value_type ret;
67
53.7k
68
53.7k
  memcpy(&ret,
69
53.7k
         LLVM_ASSUME_ALIGNED(
70
53.7k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
53.7k
         sizeof(value_type));
72
53.7k
  return byte_swap<value_type>(ret, endian);
73
53.7k
}
llvm::minidump::StreamType llvm::support::endian::read<llvm::minidump::StreamType, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
43
inline value_type read(const void *memory, endianness endian) {
66
43
  value_type ret;
67
43
68
43
  memcpy(&ret,
69
43
         LLVM_ASSUME_ALIGNED(
70
43
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
43
         sizeof(value_type));
72
43
  return byte_swap<value_type>(ret, endian);
73
43
}
short llvm::support::endian::read<short, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
31
inline value_type read(const void *memory, endianness endian) {
66
31
  value_type ret;
67
31
68
31
  memcpy(&ret,
69
31
         LLVM_ASSUME_ALIGNED(
70
31
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
31
         sizeof(value_type));
72
31
  return byte_swap<value_type>(ret, endian);
73
31
}
signed char llvm::support::endian::read<signed char, 1ul>(void const*, llvm::support::endianness)
Line
Count
Source
65
11
inline value_type read(const void *memory, endianness endian) {
66
11
  value_type ret;
67
11
68
11
  memcpy(&ret,
69
11
         LLVM_ASSUME_ALIGNED(
70
11
             memory, (detail::PickAlignment<value_type, alignment>::value)),
71
11
         sizeof(value_type));
72
11
  return byte_swap<value_type>(ret, endian);
73
11
}
74
75
template<typename value_type,
76
         endianness endian,
77
         std::size_t alignment>
78
92.1M
inline value_type read(const void *memory) {
79
92.1M
  return read<value_type, alignment>(memory, endian);
80
92.1M
}
unsigned short llvm::support::endian::read<unsigned short, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
11.1M
inline value_type read(const void *memory) {
79
11.1M
  return read<value_type, alignment>(memory, endian);
80
11.1M
}
unsigned int llvm::support::endian::read<unsigned int, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
20.0M
inline value_type read(const void *memory) {
79
20.0M
  return read<value_type, alignment>(memory, endian);
80
20.0M
}
unsigned short llvm::support::endian::read<unsigned short, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
186k
inline value_type read(const void *memory) {
79
186k
  return read<value_type, alignment>(memory, endian);
80
186k
}
unsigned int llvm::support::endian::read<unsigned int, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
244k
inline value_type read(const void *memory) {
79
244k
  return read<value_type, alignment>(memory, endian);
80
244k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
160k
inline value_type read(const void *memory) {
79
160k
  return read<value_type, alignment>(memory, endian);
80
160k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
24.0M
inline value_type read(const void *memory) {
79
24.0M
  return read<value_type, alignment>(memory, endian);
80
24.0M
}
unsigned char llvm::support::endian::read<unsigned char, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
32
inline value_type read(const void *memory) {
79
32
  return read<value_type, alignment>(memory, endian);
80
32
}
unsigned long llvm::support::endian::read<unsigned long, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
36.2M
inline value_type read(const void *memory) {
79
36.2M
  return read<value_type, alignment>(memory, endian);
80
36.2M
}
unsigned int llvm::support::endian::read<unsigned int, (llvm::support::endianness)2, 1ul>(void const*)
Line
Count
Source
78
71.4k
inline value_type read(const void *memory) {
79
71.4k
  return read<value_type, alignment>(memory, endian);
80
71.4k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)2, 1ul>(void const*)
Line
Count
Source
78
19.8k
inline value_type read(const void *memory) {
79
19.8k
  return read<value_type, alignment>(memory, endian);
80
19.8k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)1, 0ul>(void const*)
Line
Count
Source
78
739
inline value_type read(const void *memory) {
79
739
  return read<value_type, alignment>(memory, endian);
80
739
}
int llvm::support::endian::read<int, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
13.4k
inline value_type read(const void *memory) {
79
13.4k
  return read<value_type, alignment>(memory, endian);
80
13.4k
}
long long llvm::support::endian::read<long long, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
40.6k
inline value_type read(const void *memory) {
79
40.6k
  return read<value_type, alignment>(memory, endian);
80
40.6k
}
int llvm::support::endian::read<int, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
4.60k
inline value_type read(const void *memory) {
79
4.60k
  return read<value_type, alignment>(memory, endian);
80
4.60k
}
long long llvm::support::endian::read<long long, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
13.0k
inline value_type read(const void *memory) {
79
13.0k
  return read<value_type, alignment>(memory, endian);
80
13.0k
}
llvm::minidump::StreamType llvm::support::endian::read<llvm::minidump::StreamType, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
43
inline value_type read(const void *memory) {
79
43
  return read<value_type, alignment>(memory, endian);
80
43
}
short llvm::support::endian::read<short, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
14
inline value_type read(const void *memory) {
79
14
  return read<value_type, alignment>(memory, endian);
80
14
}
signed char llvm::support::endian::read<signed char, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
7
inline value_type read(const void *memory) {
79
7
  return read<value_type, alignment>(memory, endian);
80
7
}
unsigned char llvm::support::endian::read<unsigned char, (llvm::support::endianness)0, 1ul>(void const*)
Line
Count
Source
78
89
inline value_type read(const void *memory) {
79
89
  return read<value_type, alignment>(memory, endian);
80
89
}
short llvm::support::endian::read<short, (llvm::support::endianness)1, 1ul>(void const*)
Line
Count
Source
78
9
inline value_type read(const void *memory) {
79
9
  return read<value_type, alignment>(memory, endian);
80
9
}
81
82
/// Read a value of a particular endianness from a buffer, and increment the
83
/// buffer past that value.
84
template <typename value_type, std::size_t alignment, typename CharT>
85
10.2M
inline value_type readNext(const CharT *&memory, endianness endian) {
86
10.2M
  value_type ret = read<value_type, alignment>(memory, endian);
87
10.2M
  memory += sizeof(value_type);
88
10.2M
  return ret;
89
10.2M
}
unsigned long long llvm::support::endian::readNext<unsigned long long, 1ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
38.2k
inline value_type readNext(const CharT *&memory, endianness endian) {
86
38.2k
  value_type ret = read<value_type, alignment>(memory, endian);
87
38.2k
  memory += sizeof(value_type);
88
38.2k
  return ret;
89
38.2k
}
unsigned int llvm::support::endian::readNext<unsigned int, 0ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
1.87M
inline value_type readNext(const CharT *&memory, endianness endian) {
86
1.87M
  value_type ret = read<value_type, alignment>(memory, endian);
87
1.87M
  memory += sizeof(value_type);
88
1.87M
  return ret;
89
1.87M
}
unsigned short llvm::support::endian::readNext<unsigned short, 1ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
6.11M
inline value_type readNext(const CharT *&memory, endianness endian) {
86
6.11M
  value_type ret = read<value_type, alignment>(memory, endian);
87
6.11M
  memory += sizeof(value_type);
88
6.11M
  return ret;
89
6.11M
}
unsigned int llvm::support::endian::readNext<unsigned int, 1ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
2.20M
inline value_type readNext(const CharT *&memory, endianness endian) {
86
2.20M
  value_type ret = read<value_type, alignment>(memory, endian);
87
2.20M
  memory += sizeof(value_type);
88
2.20M
  return ret;
89
2.20M
}
unsigned char llvm::support::endian::readNext<unsigned char, 1ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
12.8k
inline value_type readNext(const CharT *&memory, endianness endian) {
86
12.8k
  value_type ret = read<value_type, alignment>(memory, endian);
87
12.8k
  memory += sizeof(value_type);
88
12.8k
  return ret;
89
12.8k
}
unsigned long long llvm::support::endian::readNext<unsigned long long, 0ul, unsigned char>(unsigned char const*&, llvm::support::endianness)
Line
Count
Source
85
1.91k
inline value_type readNext(const CharT *&memory, endianness endian) {
86
1.91k
  value_type ret = read<value_type, alignment>(memory, endian);
87
1.91k
  memory += sizeof(value_type);
88
1.91k
  return ret;
89
1.91k
}
90
91
template<typename value_type, endianness endian, std::size_t alignment,
92
         typename CharT>
93
10.2M
inline value_type readNext(const CharT *&memory) {
94
10.2M
  return readNext<value_type, alignment, CharT>(memory, endian);
95
10.2M
}
unsigned long long llvm::support::endian::readNext<unsigned long long, (llvm::support::endianness)1, 1ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
38.2k
inline value_type readNext(const CharT *&memory) {
94
38.2k
  return readNext<value_type, alignment, CharT>(memory, endian);
95
38.2k
}
unsigned int llvm::support::endian::readNext<unsigned int, (llvm::support::endianness)1, 0ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
1.87M
inline value_type readNext(const CharT *&memory) {
94
1.87M
  return readNext<value_type, alignment, CharT>(memory, endian);
95
1.87M
}
unsigned short llvm::support::endian::readNext<unsigned short, (llvm::support::endianness)1, 1ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
6.11M
inline value_type readNext(const CharT *&memory) {
94
6.11M
  return readNext<value_type, alignment, CharT>(memory, endian);
95
6.11M
}
unsigned int llvm::support::endian::readNext<unsigned int, (llvm::support::endianness)1, 1ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
2.20M
inline value_type readNext(const CharT *&memory) {
94
2.20M
  return readNext<value_type, alignment, CharT>(memory, endian);
95
2.20M
}
unsigned char llvm::support::endian::readNext<unsigned char, (llvm::support::endianness)1, 1ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
12.8k
inline value_type readNext(const CharT *&memory) {
94
12.8k
  return readNext<value_type, alignment, CharT>(memory, endian);
95
12.8k
}
unsigned int llvm::support::endian::readNext<unsigned int, (llvm::support::endianness)0, 1ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
2
inline value_type readNext(const CharT *&memory) {
94
2
  return readNext<value_type, alignment, CharT>(memory, endian);
95
2
}
unsigned long long llvm::support::endian::readNext<unsigned long long, (llvm::support::endianness)1, 0ul, unsigned char>(unsigned char const*&)
Line
Count
Source
93
1.91k
inline value_type readNext(const CharT *&memory) {
94
1.91k
  return readNext<value_type, alignment, CharT>(memory, endian);
95
1.91k
}
96
97
/// Write a value to memory with a particular endianness.
98
template <typename value_type, std::size_t alignment>
99
11.3M
inline void write(void *memory, value_type value, endianness endian) {
100
11.3M
  value = byte_swap<value_type>(value, endian);
101
11.3M
  memcpy(LLVM_ASSUME_ALIGNED(
102
11.3M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
11.3M
         &value, sizeof(value_type));
104
11.3M
}
void llvm::support::endian::write<unsigned short, 1ul>(void*, unsigned short, llvm::support::endianness)
Line
Count
Source
99
1.42M
inline void write(void *memory, value_type value, endianness endian) {
100
1.42M
  value = byte_swap<value_type>(value, endian);
101
1.42M
  memcpy(LLVM_ASSUME_ALIGNED(
102
1.42M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
1.42M
         &value, sizeof(value_type));
104
1.42M
}
void llvm::support::endian::write<unsigned int, 1ul>(void*, unsigned int, llvm::support::endianness)
Line
Count
Source
99
4.91M
inline void write(void *memory, value_type value, endianness endian) {
100
4.91M
  value = byte_swap<value_type>(value, endian);
101
4.91M
  memcpy(LLVM_ASSUME_ALIGNED(
102
4.91M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
4.91M
         &value, sizeof(value_type));
104
4.91M
}
void llvm::support::endian::write<unsigned long long, 1ul>(void*, unsigned long long, llvm::support::endianness)
Line
Count
Source
99
5.00M
inline void write(void *memory, value_type value, endianness endian) {
100
5.00M
  value = byte_swap<value_type>(value, endian);
101
5.00M
  memcpy(LLVM_ASSUME_ALIGNED(
102
5.00M
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
5.00M
         &value, sizeof(value_type));
104
5.00M
}
void llvm::support::endian::write<char, 1ul>(void*, char, llvm::support::endianness)
Line
Count
Source
99
2.52k
inline void write(void *memory, value_type value, endianness endian) {
100
2.52k
  value = byte_swap<value_type>(value, endian);
101
2.52k
  memcpy(LLVM_ASSUME_ALIGNED(
102
2.52k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
2.52k
         &value, sizeof(value_type));
104
2.52k
}
void llvm::support::endian::write<int, 1ul>(void*, int, llvm::support::endianness)
Line
Count
Source
99
8.98k
inline void write(void *memory, value_type value, endianness endian) {
100
8.98k
  value = byte_swap<value_type>(value, endian);
101
8.98k
  memcpy(LLVM_ASSUME_ALIGNED(
102
8.98k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
8.98k
         &value, sizeof(value_type));
104
8.98k
}
void llvm::support::endian::write<long long, 1ul>(void*, long long, llvm::support::endianness)
Line
Count
Source
99
10.9k
inline void write(void *memory, value_type value, endianness endian) {
100
10.9k
  value = byte_swap<value_type>(value, endian);
101
10.9k
  memcpy(LLVM_ASSUME_ALIGNED(
102
10.9k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
10.9k
         &value, sizeof(value_type));
104
10.9k
}
void llvm::support::endian::write<unsigned char, 1ul>(void*, unsigned char, llvm::support::endianness)
Line
Count
Source
99
13.3k
inline void write(void *memory, value_type value, endianness endian) {
100
13.3k
  value = byte_swap<value_type>(value, endian);
101
13.3k
  memcpy(LLVM_ASSUME_ALIGNED(
102
13.3k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
13.3k
         &value, sizeof(value_type));
104
13.3k
}
Unexecuted instantiation: void llvm::support::endian::write<signed char, 1ul>(void*, signed char, llvm::support::endianness)
void llvm::support::endian::write<short, 1ul>(void*, short, llvm::support::endianness)
Line
Count
Source
99
3.01k
inline void write(void *memory, value_type value, endianness endian) {
100
3.01k
  value = byte_swap<value_type>(value, endian);
101
3.01k
  memcpy(LLVM_ASSUME_ALIGNED(
102
3.01k
             memory, (detail::PickAlignment<value_type, alignment>::value)),
103
3.01k
         &value, sizeof(value_type));
104
3.01k
}
105
106
template<typename value_type,
107
         endianness endian,
108
         std::size_t alignment>
109
11.2M
inline void write(void *memory, value_type value) {
110
11.2M
  write<value_type, alignment>(memory, value, endian);
111
11.2M
}
void llvm::support::endian::write<unsigned short, (llvm::support::endianness)1, 1ul>(void*, unsigned short)
Line
Count
Source
109
1.35M
inline void write(void *memory, value_type value) {
110
1.35M
  write<value_type, alignment>(memory, value, endian);
111
1.35M
}
void llvm::support::endian::write<unsigned int, (llvm::support::endianness)1, 1ul>(void*, unsigned int)
Line
Count
Source
109
4.82M
inline void write(void *memory, value_type value) {
110
4.82M
  write<value_type, alignment>(memory, value, endian);
111
4.82M
}
void llvm::support::endian::write<unsigned long long, (llvm::support::endianness)1, 1ul>(void*, unsigned long long)
Line
Count
Source
109
4.95M
inline void write(void *memory, value_type value) {
110
4.95M
  write<value_type, alignment>(memory, value, endian);
111
4.95M
}
void llvm::support::endian::write<unsigned short, (llvm::support::endianness)0, 1ul>(void*, unsigned short)
Line
Count
Source
109
14.0k
inline void write(void *memory, value_type value) {
110
14.0k
  write<value_type, alignment>(memory, value, endian);
111
14.0k
}
void llvm::support::endian::write<unsigned int, (llvm::support::endianness)0, 1ul>(void*, unsigned int)
Line
Count
Source
109
62.1k
inline void write(void *memory, value_type value) {
110
62.1k
  write<value_type, alignment>(memory, value, endian);
111
62.1k
}
void llvm::support::endian::write<unsigned long long, (llvm::support::endianness)0, 1ul>(void*, unsigned long long)
Line
Count
Source
109
33.7k
inline void write(void *memory, value_type value) {
110
33.7k
  write<value_type, alignment>(memory, value, endian);
111
33.7k
}
void llvm::support::endian::write<int, (llvm::support::endianness)1, 1ul>(void*, int)
Line
Count
Source
109
6.98k
inline void write(void *memory, value_type value) {
110
6.98k
  write<value_type, alignment>(memory, value, endian);
111
6.98k
}
void llvm::support::endian::write<int, (llvm::support::endianness)0, 1ul>(void*, int)
Line
Count
Source
109
1.47k
inline void write(void *memory, value_type value) {
110
1.47k
  write<value_type, alignment>(memory, value, endian);
111
1.47k
}
void llvm::support::endian::write<long long, (llvm::support::endianness)1, 1ul>(void*, long long)
Line
Count
Source
109
10.2k
inline void write(void *memory, value_type value) {
110
10.2k
  write<value_type, alignment>(memory, value, endian);
111
10.2k
}
void llvm::support::endian::write<long long, (llvm::support::endianness)0, 1ul>(void*, long long)
Line
Count
Source
109
700
inline void write(void *memory, value_type value) {
110
700
  write<value_type, alignment>(memory, value, endian);
111
700
}
112
113
template <typename value_type>
114
using make_unsigned_t = typename std::make_unsigned<value_type>::type;
115
116
/// Read a value of a particular endianness from memory, for a location
117
/// that starts at the given bit offset within the first byte.
118
template <typename value_type, endianness endian, std::size_t alignment>
119
inline value_type readAtBitAlignment(const void *memory, uint64_t startBit) {
120
  assert(startBit < 8);
121
  if (startBit == 0)
122
    return read<value_type, endian, alignment>(memory);
123
  else {
124
    // Read two values and compose the result from them.
125
    value_type val[2];
126
    memcpy(&val[0],
127
           LLVM_ASSUME_ALIGNED(
128
               memory, (detail::PickAlignment<value_type, alignment>::value)),
129
           sizeof(value_type) * 2);
130
    val[0] = byte_swap<value_type, endian>(val[0]);
131
    val[1] = byte_swap<value_type, endian>(val[1]);
132
133
    // Shift bits from the lower value into place.
134
    make_unsigned_t<value_type> lowerVal = val[0] >> startBit;
135
    // Mask off upper bits after right shift in case of signed type.
136
    make_unsigned_t<value_type> numBitsFirstVal =
137
        (sizeof(value_type) * 8) - startBit;
138
    lowerVal &= ((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1;
139
140
    // Get the bits from the upper value.
141
    make_unsigned_t<value_type> upperVal =
142
        val[1] & (((make_unsigned_t<value_type>)1 << startBit) - 1);
143
    // Shift them in to place.
144
    upperVal <<= numBitsFirstVal;
145
146
    return lowerVal | upperVal;
147
  }
148
}
149
150
/// Write a value to memory with a particular endianness, for a location
151
/// that starts at the given bit offset within the first byte.
152
template <typename value_type, endianness endian, std::size_t alignment>
153
inline void writeAtBitAlignment(void *memory, value_type value,
154
133k
                                uint64_t startBit) {
155
133k
  assert(startBit < 8);
156
133k
  if (startBit == 0)
157
128k
    write<value_type, endian, alignment>(memory, value);
158
4.86k
  else {
159
4.86k
    // Read two values and shift the result into them.
160
4.86k
    value_type val[2];
161
4.86k
    memcpy(&val[0],
162
4.86k
           LLVM_ASSUME_ALIGNED(
163
4.86k
               memory, (detail::PickAlignment<value_type, alignment>::value)),
164
4.86k
           sizeof(value_type) * 2);
165
4.86k
    val[0] = byte_swap<value_type, endian>(val[0]);
166
4.86k
    val[1] = byte_swap<value_type, endian>(val[1]);
167
4.86k
168
4.86k
    // Mask off any existing bits in the upper part of the lower value that
169
4.86k
    // we want to replace.
170
4.86k
    val[0] &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
171
4.86k
    make_unsigned_t<value_type> numBitsFirstVal =
172
4.86k
        (sizeof(value_type) * 8) - startBit;
173
4.86k
    make_unsigned_t<value_type> lowerVal = value;
174
4.86k
    if (startBit > 0) {
175
4.86k
      // Mask off the upper bits in the new value that are not going to go into
176
4.86k
      // the lower value. This avoids a left shift of a negative value, which
177
4.86k
      // is undefined behavior.
178
4.86k
      lowerVal &= (((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1);
179
4.86k
      // Now shift the new bits into place
180
4.86k
      lowerVal <<= startBit;
181
4.86k
    }
182
4.86k
    val[0] |= lowerVal;
183
4.86k
184
4.86k
    // Mask off any existing bits in the lower part of the upper value that
185
4.86k
    // we want to replace.
186
4.86k
    val[1] &= ~(((make_unsigned_t<value_type>)1 << startBit) - 1);
187
4.86k
    // Next shift the bits that go into the upper value into position.
188
4.86k
    make_unsigned_t<value_type> upperVal = value >> numBitsFirstVal;
189
4.86k
    // Mask off upper bits after right shift in case of signed type.
190
4.86k
    upperVal &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
191
4.86k
    val[1] |= upperVal;
192
4.86k
193
4.86k
    // Finally, rewrite values.
194
4.86k
    val[0] = byte_swap<value_type, endian>(val[0]);
195
4.86k
    val[1] = byte_swap<value_type, endian>(val[1]);
196
4.86k
    memcpy(LLVM_ASSUME_ALIGNED(
197
4.86k
               memory, (detail::PickAlignment<value_type, alignment>::value)),
198
4.86k
           &val[0], sizeof(value_type) * 2);
199
4.86k
  }
200
133k
}
201
202
} // end namespace endian
203
204
namespace detail {
205
206
template<typename ValueType,
207
         endianness Endian,
208
         std::size_t Alignment>
209
struct packed_endian_specific_integral {
210
  using value_type = ValueType;
211
  static constexpr endianness endian = Endian;
212
  static constexpr std::size_t alignment = Alignment;
213
214
  packed_endian_specific_integral() = default;
215
216
941k
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)1, 1ul>::packed_endian_specific_integral(unsigned int)
Line
Count
Source
216
471k
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
llvm::support::detail::packed_endian_specific_integral<int, (llvm::support::endianness)1, 1ul>::packed_endian_specific_integral(int)
Line
Count
Source
216
421
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)1, 1ul>::packed_endian_specific_integral(unsigned short)
Line
Count
Source
216
469k
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)0, 1ul>::packed_endian_specific_integral(unsigned int)
Line
Count
Source
216
1
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)1, 1ul>::packed_endian_specific_integral(unsigned long long)
Line
Count
Source
216
11
  explicit packed_endian_specific_integral(value_type val) { *this = val; }
Unexecuted instantiation: llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)0, 1ul>::packed_endian_specific_integral(unsigned long long)
217
218
55.9M
  operator value_type() const {
219
55.9M
    return endian::read<value_type, endian, alignment>(
220
55.9M
      (const void*)Value.buffer);
221
55.9M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)1, 1ul>::operator unsigned short() const
Line
Count
Source
218
11.1M
  operator value_type() const {
219
11.1M
    return endian::read<value_type, endian, alignment>(
220
11.1M
      (const void*)Value.buffer);
221
11.1M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)1, 1ul>::operator unsigned int() const
Line
Count
Source
218
20.0M
  operator value_type() const {
219
20.0M
    return endian::read<value_type, endian, alignment>(
220
20.0M
      (const void*)Value.buffer);
221
20.0M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)1, 1ul>::operator unsigned long long() const
Line
Count
Source
218
24.0M
  operator value_type() const {
219
24.0M
    return endian::read<value_type, endian, alignment>(
220
24.0M
      (const void*)Value.buffer);
221
24.0M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)0, 1ul>::operator unsigned short() const
Line
Count
Source
218
186k
  operator value_type() const {
219
186k
    return endian::read<value_type, endian, alignment>(
220
186k
      (const void*)Value.buffer);
221
186k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)0, 1ul>::operator unsigned int() const
Line
Count
Source
218
244k
  operator value_type() const {
219
244k
    return endian::read<value_type, endian, alignment>(
220
244k
      (const void*)Value.buffer);
221
244k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)0, 1ul>::operator unsigned long long() const
Line
Count
Source
218
160k
  operator value_type() const {
219
160k
    return endian::read<value_type, endian, alignment>(
220
160k
      (const void*)Value.buffer);
221
160k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)2, 1ul>::operator unsigned int() const
Line
Count
Source
218
71.4k
  operator value_type() const {
219
71.4k
    return endian::read<value_type, endian, alignment>(
220
71.4k
      (const void*)Value.buffer);
221
71.4k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)2, 1ul>::operator unsigned long long() const
Line
Count
Source
218
19.8k
  operator value_type() const {
219
19.8k
    return endian::read<value_type, endian, alignment>(
220
19.8k
      (const void*)Value.buffer);
221
19.8k
  }
llvm::support::detail::packed_endian_specific_integral<int, (llvm::support::endianness)1, 1ul>::operator int() const
Line
Count
Source
218
13.3k
  operator value_type() const {
219
13.3k
    return endian::read<value_type, endian, alignment>(
220
13.3k
      (const void*)Value.buffer);
221
13.3k
  }
llvm::support::detail::packed_endian_specific_integral<long long, (llvm::support::endianness)1, 1ul>::operator long long() const
Line
Count
Source
218
40.6k
  operator value_type() const {
219
40.6k
    return endian::read<value_type, endian, alignment>(
220
40.6k
      (const void*)Value.buffer);
221
40.6k
  }
llvm::support::detail::packed_endian_specific_integral<int, (llvm::support::endianness)0, 1ul>::operator int() const
Line
Count
Source
218
4.60k
  operator value_type() const {
219
4.60k
    return endian::read<value_type, endian, alignment>(
220
4.60k
      (const void*)Value.buffer);
221
4.60k
  }
llvm::support::detail::packed_endian_specific_integral<long long, (llvm::support::endianness)0, 1ul>::operator long long() const
Line
Count
Source
218
13.0k
  operator value_type() const {
219
13.0k
    return endian::read<value_type, endian, alignment>(
220
13.0k
      (const void*)Value.buffer);
221
13.0k
  }
llvm::support::detail::packed_endian_specific_integral<llvm::minidump::StreamType, (llvm::support::endianness)1, 1ul>::operator llvm::minidump::StreamType() const
Line
Count
Source
218
43
  operator value_type() const {
219
43
    return endian::read<value_type, endian, alignment>(
220
43
      (const void*)Value.buffer);
221
43
  }
llvm::support::detail::packed_endian_specific_integral<short, (llvm::support::endianness)0, 1ul>::operator short() const
Line
Count
Source
218
14
  operator value_type() const {
219
14
    return endian::read<value_type, endian, alignment>(
220
14
      (const void*)Value.buffer);
221
14
  }
llvm::support::detail::packed_endian_specific_integral<signed char, (llvm::support::endianness)0, 1ul>::operator signed char() const
Line
Count
Source
218
7
  operator value_type() const {
219
7
    return endian::read<value_type, endian, alignment>(
220
7
      (const void*)Value.buffer);
221
7
  }
llvm::support::detail::packed_endian_specific_integral<unsigned char, (llvm::support::endianness)0, 1ul>::operator unsigned char() const
Line
Count
Source
218
89
  operator value_type() const {
219
89
    return endian::read<value_type, endian, alignment>(
220
89
      (const void*)Value.buffer);
221
89
  }
llvm::support::detail::packed_endian_specific_integral<short, (llvm::support::endianness)1, 1ul>::operator short() const
Line
Count
Source
218
9
  operator value_type() const {
219
9
    return endian::read<value_type, endian, alignment>(
220
9
      (const void*)Value.buffer);
221
9
  }
222
223
11.1M
  void operator=(value_type newValue) {
224
11.1M
    endian::write<value_type, endian, alignment>(
225
11.1M
      (void*)Value.buffer, newValue);
226
11.1M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)1, 1ul>::operator=(unsigned short)
Line
Count
Source
223
1.35M
  void operator=(value_type newValue) {
224
1.35M
    endian::write<value_type, endian, alignment>(
225
1.35M
      (void*)Value.buffer, newValue);
226
1.35M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)1, 1ul>::operator=(unsigned int)
Line
Count
Source
223
4.68M
  void operator=(value_type newValue) {
224
4.68M
    endian::write<value_type, endian, alignment>(
225
4.68M
      (void*)Value.buffer, newValue);
226
4.68M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)1, 1ul>::operator=(unsigned long long)
Line
Count
Source
223
4.95M
  void operator=(value_type newValue) {
224
4.95M
    endian::write<value_type, endian, alignment>(
225
4.95M
      (void*)Value.buffer, newValue);
226
4.95M
  }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)0, 1ul>::operator=(unsigned short)
Line
Count
Source
223
14.0k
  void operator=(value_type newValue) {
224
14.0k
    endian::write<value_type, endian, alignment>(
225
14.0k
      (void*)Value.buffer, newValue);
226
14.0k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)0, 1ul>::operator=(unsigned int)
Line
Count
Source
223
62.1k
  void operator=(value_type newValue) {
224
62.1k
    endian::write<value_type, endian, alignment>(
225
62.1k
      (void*)Value.buffer, newValue);
226
62.1k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)0, 1ul>::operator=(unsigned long long)
Line
Count
Source
223
33.7k
  void operator=(value_type newValue) {
224
33.7k
    endian::write<value_type, endian, alignment>(
225
33.7k
      (void*)Value.buffer, newValue);
226
33.7k
  }
llvm::support::detail::packed_endian_specific_integral<int, (llvm::support::endianness)1, 1ul>::operator=(int)
Line
Count
Source
223
6.98k
  void operator=(value_type newValue) {
224
6.98k
    endian::write<value_type, endian, alignment>(
225
6.98k
      (void*)Value.buffer, newValue);
226
6.98k
  }
llvm::support::detail::packed_endian_specific_integral<int, (llvm::support::endianness)0, 1ul>::operator=(int)
Line
Count
Source
223
1.47k
  void operator=(value_type newValue) {
224
1.47k
    endian::write<value_type, endian, alignment>(
225
1.47k
      (void*)Value.buffer, newValue);
226
1.47k
  }
llvm::support::detail::packed_endian_specific_integral<long long, (llvm::support::endianness)1, 1ul>::operator=(long long)
Line
Count
Source
223
10.2k
  void operator=(value_type newValue) {
224
10.2k
    endian::write<value_type, endian, alignment>(
225
10.2k
      (void*)Value.buffer, newValue);
226
10.2k
  }
llvm::support::detail::packed_endian_specific_integral<long long, (llvm::support::endianness)0, 1ul>::operator=(long long)
Line
Count
Source
223
700
  void operator=(value_type newValue) {
224
700
    endian::write<value_type, endian, alignment>(
225
700
      (void*)Value.buffer, newValue);
226
700
  }
227
228
53.1k
  packed_endian_specific_integral &operator+=(value_type newValue) {
229
53.1k
    *this = *this + newValue;
230
53.1k
    return *this;
231
53.1k
  }
232
233
0
  packed_endian_specific_integral &operator-=(value_type newValue) {
234
0
    *this = *this - newValue;
235
0
    return *this;
236
0
  }
237
238
76.5k
  packed_endian_specific_integral &operator|=(value_type newValue) {
239
76.5k
    *this = *this | newValue;
240
76.5k
    return *this;
241
76.5k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)1, 1ul>::operator|=(unsigned int)
Line
Count
Source
238
72.8k
  packed_endian_specific_integral &operator|=(value_type newValue) {
239
72.8k
    *this = *this | newValue;
240
72.8k
    return *this;
241
72.8k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned short, (llvm::support::endianness)1, 1ul>::operator|=(unsigned short)
Line
Count
Source
238
2.84k
  packed_endian_specific_integral &operator|=(value_type newValue) {
239
2.84k
    *this = *this | newValue;
240
2.84k
    return *this;
241
2.84k
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)0, 1ul>::operator|=(unsigned int)
Line
Count
Source
238
884
  packed_endian_specific_integral &operator|=(value_type newValue) {
239
884
    *this = *this | newValue;
240
884
    return *this;
241
884
  }
242
243
44
  packed_endian_specific_integral &operator&=(value_type newValue) {
244
44
    *this = *this & newValue;
245
44
    return *this;
246
44
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)1, 1ul>::operator&=(unsigned int)
Line
Count
Source
243
21
  packed_endian_specific_integral &operator&=(value_type newValue) {
244
21
    *this = *this & newValue;
245
21
    return *this;
246
21
  }
llvm::support::detail::packed_endian_specific_integral<unsigned int, (llvm::support::endianness)0, 1ul>::operator&=(unsigned int)
Line
Count
Source
243
23
  packed_endian_specific_integral &operator&=(value_type newValue) {
244
23
    *this = *this & newValue;
245
23
    return *this;
246
23
  }
Unexecuted instantiation: llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)1, 1ul>::operator&=(unsigned long long)
Unexecuted instantiation: llvm::support::detail::packed_endian_specific_integral<unsigned long long, (llvm::support::endianness)0, 1ul>::operator&=(unsigned long long)
247
248
private:
249
  AlignedCharArray<PickAlignment<value_type, alignment>::value,
250
                   sizeof(value_type)> Value;
251
252
public:
253
  struct ref {
254
    explicit ref(void *Ptr) : Ptr(Ptr) {}
255
256
    operator value_type() const {
257
      return endian::read<value_type, endian, alignment>(Ptr);
258
    }
259
260
    void operator=(value_type NewValue) {
261
      endian::write<value_type, endian, alignment>(Ptr, NewValue);
262
    }
263
264
  private:
265
    void *Ptr;
266
  };
267
};
268
269
} // end namespace detail
270
271
using ulittle16_t =
272
    detail::packed_endian_specific_integral<uint16_t, little, unaligned>;
273
using ulittle32_t =
274
    detail::packed_endian_specific_integral<uint32_t, little, unaligned>;
275
using ulittle64_t =
276
    detail::packed_endian_specific_integral<uint64_t, little, unaligned>;
277
278
using little16_t =
279
    detail::packed_endian_specific_integral<int16_t, little, unaligned>;
280
using little32_t =
281
    detail::packed_endian_specific_integral<int32_t, little, unaligned>;
282
using little64_t =
283
    detail::packed_endian_specific_integral<int64_t, little, unaligned>;
284
285
using aligned_ulittle16_t =
286
    detail::packed_endian_specific_integral<uint16_t, little, aligned>;
287
using aligned_ulittle32_t =
288
    detail::packed_endian_specific_integral<uint32_t, little, aligned>;
289
using aligned_ulittle64_t =
290
    detail::packed_endian_specific_integral<uint64_t, little, aligned>;
291
292
using aligned_little16_t =
293
    detail::packed_endian_specific_integral<int16_t, little, aligned>;
294
using aligned_little32_t =
295
    detail::packed_endian_specific_integral<int32_t, little, aligned>;
296
using aligned_little64_t =
297
    detail::packed_endian_specific_integral<int64_t, little, aligned>;
298
299
using ubig16_t =
300
    detail::packed_endian_specific_integral<uint16_t, big, unaligned>;
301
using ubig32_t =
302
    detail::packed_endian_specific_integral<uint32_t, big, unaligned>;
303
using ubig64_t =
304
    detail::packed_endian_specific_integral<uint64_t, big, unaligned>;
305
306
using big16_t =
307
    detail::packed_endian_specific_integral<int16_t, big, unaligned>;
308
using big32_t =
309
    detail::packed_endian_specific_integral<int32_t, big, unaligned>;
310
using big64_t =
311
    detail::packed_endian_specific_integral<int64_t, big, unaligned>;
312
313
using aligned_ubig16_t =
314
    detail::packed_endian_specific_integral<uint16_t, big, aligned>;
315
using aligned_ubig32_t =
316
    detail::packed_endian_specific_integral<uint32_t, big, aligned>;
317
using aligned_ubig64_t =
318
    detail::packed_endian_specific_integral<uint64_t, big, aligned>;
319
320
using aligned_big16_t =
321
    detail::packed_endian_specific_integral<int16_t, big, aligned>;
322
using aligned_big32_t =
323
    detail::packed_endian_specific_integral<int32_t, big, aligned>;
324
using aligned_big64_t =
325
    detail::packed_endian_specific_integral<int64_t, big, aligned>;
326
327
using unaligned_uint16_t =
328
    detail::packed_endian_specific_integral<uint16_t, native, unaligned>;
329
using unaligned_uint32_t =
330
    detail::packed_endian_specific_integral<uint32_t, native, unaligned>;
331
using unaligned_uint64_t =
332
    detail::packed_endian_specific_integral<uint64_t, native, unaligned>;
333
334
using unaligned_int16_t =
335
    detail::packed_endian_specific_integral<int16_t, native, unaligned>;
336
using unaligned_int32_t =
337
    detail::packed_endian_specific_integral<int32_t, native, unaligned>;
338
using unaligned_int64_t =
339
    detail::packed_endian_specific_integral<int64_t, native, unaligned>;
340
341
template <typename T>
342
using little_t = detail::packed_endian_specific_integral<T, little, unaligned>;
343
template <typename T>
344
using big_t = detail::packed_endian_specific_integral<T, big, unaligned>;
345
346
template <typename T>
347
using aligned_little_t =
348
    detail::packed_endian_specific_integral<T, little, aligned>;
349
template <typename T>
350
using aligned_big_t = detail::packed_endian_specific_integral<T, big, aligned>;
351
352
namespace endian {
353
354
417k
template <typename T> inline T read(const void *P, endianness E) {
355
417k
  return read<T, unaligned>(P, E);
356
417k
}
unsigned long long llvm::support::endian::read<unsigned long long>(void const*, llvm::support::endianness)
Line
Count
Source
354
1.08k
template <typename T> inline T read(const void *P, endianness E) {
355
1.08k
  return read<T, unaligned>(P, E);
356
1.08k
}
unsigned short llvm::support::endian::read<unsigned short>(void const*, llvm::support::endianness)
Line
Count
Source
354
94
template <typename T> inline T read(const void *P, endianness E) {
355
94
  return read<T, unaligned>(P, E);
356
94
}
unsigned int llvm::support::endian::read<unsigned int>(void const*, llvm::support::endianness)
Line
Count
Source
354
416k
template <typename T> inline T read(const void *P, endianness E) {
355
416k
  return read<T, unaligned>(P, E);
356
416k
}
357
358
1.39M
template <typename T, endianness E> inline T read(const void *P) {
359
1.39M
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
1.39M
}
unsigned short llvm::support::endian::read<unsigned short, (llvm::support::endianness)1>(void const*)
Line
Count
Source
358
32.0k
template <typename T, endianness E> inline T read(const void *P) {
359
32.0k
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
32.0k
}
unsigned int llvm::support::endian::read<unsigned int, (llvm::support::endianness)1>(void const*)
Line
Count
Source
358
203k
template <typename T, endianness E> inline T read(const void *P) {
359
203k
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
203k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)1>(void const*)
Line
Count
Source
358
1.13M
template <typename T, endianness E> inline T read(const void *P) {
359
1.13M
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
1.13M
}
unsigned short llvm::support::endian::read<unsigned short, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
323
template <typename T, endianness E> inline T read(const void *P) {
359
323
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
323
}
unsigned int llvm::support::endian::read<unsigned int, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
15.5k
template <typename T, endianness E> inline T read(const void *P) {
359
15.5k
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
15.5k
}
unsigned long long llvm::support::endian::read<unsigned long long, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
70
template <typename T, endianness E> inline T read(const void *P) {
359
70
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
70
}
signed char llvm::support::endian::read<signed char, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
7
template <typename T, endianness E> inline T read(const void *P) {
359
7
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
7
}
short llvm::support::endian::read<short, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
3
template <typename T, endianness E> inline T read(const void *P) {
359
3
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
3
}
int llvm::support::endian::read<int, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
3
template <typename T, endianness E> inline T read(const void *P) {
359
3
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
3
}
long long llvm::support::endian::read<long long, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
3
template <typename T, endianness E> inline T read(const void *P) {
359
3
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
3
}
unsigned char llvm::support::endian::read<unsigned char, (llvm::support::endianness)0>(void const*)
Line
Count
Source
358
89
template <typename T, endianness E> inline T read(const void *P) {
359
89
  return *(const detail::packed_endian_specific_integral<T, E, unaligned> *)P;
360
89
}
361
362
91
inline uint16_t read16(const void *P, endianness E) {
363
91
  return read<uint16_t>(P, E);
364
91
}
365
416k
inline uint32_t read32(const void *P, endianness E) {
366
416k
  return read<uint32_t>(P, E);
367
416k
}
368
1.04k
inline uint64_t read64(const void *P, endianness E) {
369
1.04k
  return read<uint64_t>(P, E);
370
1.04k
}
371
372
32.0k
template <endianness E> inline uint16_t read16(const void *P) {
373
32.0k
  return read<uint16_t, E>(P);
374
32.0k
}
unsigned short llvm::support::endian::read16<(llvm::support::endianness)1>(void const*)
Line
Count
Source
372
32.0k
template <endianness E> inline uint16_t read16(const void *P) {
373
32.0k
  return read<uint16_t, E>(P);
374
32.0k
}
unsigned short llvm::support::endian::read16<(llvm::support::endianness)0>(void const*)
Line
Count
Source
372
6
template <endianness E> inline uint16_t read16(const void *P) {
373
6
  return read<uint16_t, E>(P);
374
6
}
375
38.8k
template <endianness E> inline uint32_t read32(const void *P) {
376
38.8k
  return read<uint32_t, E>(P);
377
38.8k
}
unsigned int llvm::support::endian::read32<(llvm::support::endianness)1>(void const*)
Line
Count
Source
375
23.3k
template <endianness E> inline uint32_t read32(const void *P) {
376
23.3k
  return read<uint32_t, E>(P);
377
23.3k
}
unsigned int llvm::support::endian::read32<(llvm::support::endianness)0>(void const*)
Line
Count
Source
375
15.5k
template <endianness E> inline uint32_t read32(const void *P) {
376
15.5k
  return read<uint32_t, E>(P);
377
15.5k
}
378
996k
template <endianness E> inline uint64_t read64(const void *P) {
379
996k
  return read<uint64_t, E>(P);
380
996k
}
unsigned long long llvm::support::endian::read64<(llvm::support::endianness)1>(void const*)
Line
Count
Source
378
996k
template <endianness E> inline uint64_t read64(const void *P) {
379
996k
  return read<uint64_t, E>(P);
380
996k
}
unsigned long long llvm::support::endian::read64<(llvm::support::endianness)0>(void const*)
Line
Count
Source
378
60
template <endianness E> inline uint64_t read64(const void *P) {
379
60
  return read<uint64_t, E>(P);
380
60
}
381
382
32.0k
inline uint16_t read16le(const void *P) { return read16<little>(P); }
383
23.1k
inline uint32_t read32le(const void *P) { return read32<little>(P); }
384
996k
inline uint64_t read64le(const void *P) { return read64<little>(P); }
385
0
inline uint16_t read16be(const void *P) { return read16<big>(P); }
386
4.75k
inline uint32_t read32be(const void *P) { return read32<big>(P); }
387
60
inline uint64_t read64be(const void *P) { return read64<big>(P); }
388
389
27.6k
template <typename T> inline void write(void *P, T V, endianness E) {
390
27.6k
  write<T, unaligned>(P, V, E);
391
27.6k
}
void llvm::support::endian::write<unsigned short>(void*, unsigned short, llvm::support::endianness)
Line
Count
Source
389
1.50k
template <typename T> inline void write(void *P, T V, endianness E) {
390
1.50k
  write<T, unaligned>(P, V, E);
391
1.50k
}
void llvm::support::endian::write<unsigned int>(void*, unsigned int, llvm::support::endianness)
Line
Count
Source
389
14.7k
template <typename T> inline void write(void *P, T V, endianness E) {
390
14.7k
  write<T, unaligned>(P, V, E);
391
14.7k
}
void llvm::support::endian::write<unsigned long long>(void*, unsigned long long, llvm::support::endianness)
Line
Count
Source
389
11.3k
template <typename T> inline void write(void *P, T V, endianness E) {
390
11.3k
  write<T, unaligned>(P, V, E);
391
11.3k
}
392
393
221k
template <typename T, endianness E> inline void write(void *P, T V) {
394
221k
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
221k
}
void llvm::support::endian::write<unsigned short, (llvm::support::endianness)1>(void*, unsigned short)
Line
Count
Source
393
2.03k
template <typename T, endianness E> inline void write(void *P, T V) {
394
2.03k
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
2.03k
}
void llvm::support::endian::write<unsigned int, (llvm::support::endianness)1>(void*, unsigned int)
Line
Count
Source
393
207k
template <typename T, endianness E> inline void write(void *P, T V) {
394
207k
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
207k
}
void llvm::support::endian::write<unsigned long long, (llvm::support::endianness)1>(void*, unsigned long long)
Line
Count
Source
393
1.33k
template <typename T, endianness E> inline void write(void *P, T V) {
394
1.33k
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
1.33k
}
void llvm::support::endian::write<unsigned short, (llvm::support::endianness)0>(void*, unsigned short)
Line
Count
Source
393
79
template <typename T, endianness E> inline void write(void *P, T V) {
394
79
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
79
}
void llvm::support::endian::write<unsigned int, (llvm::support::endianness)0>(void*, unsigned int)
Line
Count
Source
393
10.6k
template <typename T, endianness E> inline void write(void *P, T V) {
394
10.6k
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
10.6k
}
void llvm::support::endian::write<unsigned long long, (llvm::support::endianness)0>(void*, unsigned long long)
Line
Count
Source
393
10
template <typename T, endianness E> inline void write(void *P, T V) {
394
10
  *(detail::packed_endian_specific_integral<T, E, unaligned> *)P = V;
395
10
}
396
397
1.44k
inline void write16(void *P, uint16_t V, endianness E) {
398
1.44k
  write<uint16_t>(P, V, E);
399
1.44k
}
400
14.4k
inline void write32(void *P, uint32_t V, endianness E) {
401
14.4k
  write<uint32_t>(P, V, E);
402
14.4k
}
403
11.3k
inline void write64(void *P, uint64_t V, endianness E) {
404
11.3k
  write<uint64_t>(P, V, E);
405
11.3k
}
406
407
2.11k
template <endianness E> inline void write16(void *P, uint16_t V) {
408
2.11k
  write<uint16_t, E>(P, V);
409
2.11k
}
void llvm::support::endian::write16<(llvm::support::endianness)1>(void*, unsigned short)
Line
Count
Source
407
2.03k
template <endianness E> inline void write16(void *P, uint16_t V) {
408
2.03k
  write<uint16_t, E>(P, V);
409
2.03k
}
void llvm::support::endian::write16<(llvm::support::endianness)0>(void*, unsigned short)
Line
Count
Source
407
79
template <endianness E> inline void write16(void *P, uint16_t V) {
408
79
  write<uint16_t, E>(P, V);
409
79
}
410
218k
template <endianness E> inline void write32(void *P, uint32_t V) {
411
218k
  write<uint32_t, E>(P, V);
412
218k
}
void llvm::support::endian::write32<(llvm::support::endianness)1>(void*, unsigned int)
Line
Count
Source
410
207k
template <endianness E> inline void write32(void *P, uint32_t V) {
411
207k
  write<uint32_t, E>(P, V);
412
207k
}
void llvm::support::endian::write32<(llvm::support::endianness)0>(void*, unsigned int)
Line
Count
Source
410
10.6k
template <endianness E> inline void write32(void *P, uint32_t V) {
411
10.6k
  write<uint32_t, E>(P, V);
412
10.6k
}
413
1.33k
template <endianness E> inline void write64(void *P, uint64_t V) {
414
1.33k
  write<uint64_t, E>(P, V);
415
1.33k
}
void llvm::support::endian::write64<(llvm::support::endianness)1>(void*, unsigned long long)
Line
Count
Source
413
1.32k
template <endianness E> inline void write64(void *P, uint64_t V) {
414
1.32k
  write<uint64_t, E>(P, V);
415
1.32k
}
void llvm::support::endian::write64<(llvm::support::endianness)0>(void*, unsigned long long)
Line
Count
Source
413
8
template <endianness E> inline void write64(void *P, uint64_t V) {
414
8
  write<uint64_t, E>(P, V);
415
8
}
416
417
2.00k
inline void write16le(void *P, uint16_t V) { write16<little>(P, V); }
418
207k
inline void write32le(void *P, uint32_t V) { write32<little>(P, V); }
419
1.32k
inline void write64le(void *P, uint64_t V) { write64<little>(P, V); }
420
20
inline void write16be(void *P, uint16_t V) { write16<big>(P, V); }
421
20
inline void write32be(void *P, uint32_t V) { write32<big>(P, V); }
422
0
inline void write64be(void *P, uint64_t V) { write64<big>(P, V); }
423
424
} // end namespace endian
425
426
} // end namespace support
427
} // end namespace llvm
428
429
#endif // LLVM_SUPPORT_ENDIAN_H