mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
78d033e086
Take an incremental step towards type plane elimination. This change separates types from values in the symbol tables by finally making use of the TypeSymbolTable class. This yields more natural interfaces for dealing with types and unclutters the SymbolTable class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32956 91177308-0d34-0410-b5e6-96231b3b80d8
60 lines
2.5 KiB
C++
60 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
|
|
ValueSymbolTableBlockID= 4, ///< Value 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 = 8,
|
|
|
|
TypeSymbolTableBlockID = 9, ///< Value Symbol table identifier
|
|
// Not a block id, just used to count them
|
|
NumberOfBlockIDs
|
|
};
|
|
};
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|