LLVM  8.0.1
LEB128.cpp
Go to the documentation of this file.
1 //===- LEB128.cpp - LEB128 utility functions implementation -----*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements some utility functions for encoding SLEB128 and
11 // ULEB128 values.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/Support/LEB128.h"
16 
17 namespace llvm {
18 
19 /// Utility function to get the size of the ULEB128-encoded value.
20 unsigned getULEB128Size(uint64_t Value) {
21  unsigned Size = 0;
22  do {
23  Value >>= 7;
24  Size += sizeof(int8_t);
25  } while (Value);
26  return Size;
27 }
28 
29 /// Utility function to get the size of the SLEB128-encoded value.
30 unsigned getSLEB128Size(int64_t Value) {
31  unsigned Size = 0;
32  int Sign = Value >> (8 * sizeof(Value) - 1);
33  bool IsMore;
34 
35  do {
36  unsigned Byte = Value & 0x7f;
37  Value >>= 7;
38  IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
39  Size += sizeof(int8_t);
40  } while (IsMore);
41  return Size;
42 }
43 
44 } // namespace llvm
This class represents lattice values for constants.
Definition: AllocatorList.h:24
unsigned getULEB128Size(uint64_t Value)
Utility function to get the size of the ULEB128-encoded value.
Definition: LEB128.cpp:20
uint32_t Size
Definition: Profile.cpp:47
unsigned getSLEB128Size(int64_t Value)
Utility function to get the size of the SLEB128-encoded value.
Definition: LEB128.cpp:30
LLVM Value Representation.
Definition: Value.h:73