mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Reader code much easier to read and maintain. Backwards compatibility from version 5 format has been retained. Older formats will produce an error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31723 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- llvm/Bytecode/Format.h - VM bytecode file format info ---*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file was developed by the LLVM research group and is distributed under
 | 
						|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This header defines intrinsic constants that are useful to libraries that
 | 
						|
// need to hack on bytecode files directly, like the reader and writer.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_BYTECODE_FORMAT_H
 | 
						|
#define LLVM_BYTECODE_FORMAT_H
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
 | 
						|
class BytecodeFormat {   // Throw the constants into a poorman's namespace...
 | 
						|
  BytecodeFormat();      // do not implement
 | 
						|
public:
 | 
						|
  /// The the identifier and the size of the block are encoded into a single 
 | 
						|
  /// vbr_uint32 with 5 bits for the block identifier and 27-bits for block 
 | 
						|
  /// length. This limits blocks to a maximum of
 | 
						|
  /// 128MBytes of data, and block types to 31 which should be sufficient
 | 
						|
  /// for the foreseeable usage. Because the values of block identifiers MUST
 | 
						|
  /// fit within 5 bits (values 1-31), this enumeration is used to ensure
 | 
						|
  /// smaller values are used for 1.3 and subsequent bytecode versions.
 | 
						|
  /// @brief The block number identifiers used in LLVM 1.3 bytecode
 | 
						|
  /// format.
 | 
						|
  enum BytecodeBlockIdentifiers {
 | 
						|
 | 
						|
    Reserved_DoNotUse      = 0,  ///< Zero value is forbidden, do not use.
 | 
						|
    ModuleBlockID          = 1,  ///< Module block that contains other blocks.
 | 
						|
    FunctionBlockID        = 2,  ///< Function block identifier
 | 
						|
    ConstantPoolBlockID    = 3,  ///< Constant pool identifier
 | 
						|
    SymbolTableBlockID     = 4,  ///< Symbol table identifier
 | 
						|
    ModuleGlobalInfoBlockID= 5,  ///< Module global info identifier
 | 
						|
    GlobalTypePlaneBlockID = 6,  ///< Global type plan identifier
 | 
						|
    InstructionListBlockID = 7,  ///< All instructions in a function
 | 
						|
 | 
						|
    /// Blocks with this id are used to define a function local remapping
 | 
						|
    /// table for the function's values. This allows the indices used within 
 | 
						|
    /// the function to be as small as possible.  This often allows the 
 | 
						|
    /// instructions to be encoded more efficiently because VBR takes fewer
 | 
						|
    /// bytes with smaller values.
 | 
						|
    /// @brief Value Compaction Table Block
 | 
						|
    CompactionTableBlockID = 0x08,
 | 
						|
 | 
						|
    // Not a block id, just used to count them
 | 
						|
    NumberOfBlockIDs
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
} // End llvm namespace
 | 
						|
 | 
						|
#endif
 |