| //===- LEB128.cpp - LEB128 utility functions implementation -----*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | // | 
 | // This file implements some utility functions for encoding SLEB128 and | 
 | // ULEB128 values. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "llvm/Support/LEB128.h" | 
 |  | 
 | namespace llvm { | 
 |  | 
 | /// Utility function to get the size of the ULEB128-encoded value. | 
 | unsigned getULEB128Size(uint64_t Value) { | 
 |   unsigned Size = 0; | 
 |   do { | 
 |     Value >>= 7; | 
 |     Size += sizeof(int8_t); | 
 |   } while (Value); | 
 |   return Size; | 
 | } | 
 |  | 
 | /// Utility function to get the size of the SLEB128-encoded value. | 
 | unsigned getSLEB128Size(int64_t Value) { | 
 |   unsigned Size = 0; | 
 |   int Sign = Value >> (8 * sizeof(Value) - 1); | 
 |   bool IsMore; | 
 |  | 
 |   do { | 
 |     unsigned Byte = Value & 0x7f; | 
 |     Value >>= 7; | 
 |     IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0; | 
 |     Size += sizeof(int8_t); | 
 |   } while (IsMore); | 
 |   return Size; | 
 | } | 
 |  | 
 | }  // namespace llvm |