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
17namespace llvm {
18
19/// Utility function to get the size of the ULEB128-encoded value.
20unsigned 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.
30unsigned 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
45