Line data Source code
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 491055 : unsigned getULEB128Size(uint64_t Value) {
21 : unsigned Size = 0;
22 : do {
23 515827 : Value >>= 7;
24 515827 : Size += sizeof(int8_t);
25 515827 : } while (Value);
26 491055 : return Size;
27 : }
28 :
29 : /// Utility function to get the size of the SLEB128-encoded value.
30 106221 : unsigned getSLEB128Size(int64_t Value) {
31 : unsigned Size = 0;
32 106221 : int Sign = Value >> (8 * sizeof(Value) - 1);
33 : bool IsMore;
34 :
35 : do {
36 108033 : unsigned Byte = Value & 0x7f;
37 108033 : Value >>= 7;
38 108033 : IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
39 1812 : Size += sizeof(int8_t);
40 : } while (IsMore);
41 106221 : return Size;
42 : }
43 :
44 : } // namespace llvm
|