blob: 449626f2d451ca3c4a9d6c234f4c8e0a473f469c [file] [log] [blame]
Logan Chiendbed91e2014-02-22 15:39:39 +00001//===- 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