mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141557 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- llvm/MC/MCAtom.h - MCAtom class ---------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file contains the declaration of the MCAtom class, which is used to
 | |
| // represent a contiguous region in a decoded object that is uniformly data or
 | |
| // instructions;
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_MC_MCATOM_H
 | |
| #define LLVM_MC_MCATOM_H
 | |
| 
 | |
| #include "llvm/MC/MCInst.h"
 | |
| #include "llvm/Support/DataTypes.h"
 | |
| #include <vector>
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| class MCModule;
 | |
| 
 | |
| /// MCData - An entry in a data MCAtom.
 | |
| // NOTE: This may change to a more complex type in the future.
 | |
| typedef uint8_t MCData;
 | |
| 
 | |
| /// MCAtom - Represents a contiguous range of either instructions (a TextAtom)
 | |
| /// or data (a DataAtom).  Address ranges are expressed as _closed_ intervals.
 | |
| class MCAtom {
 | |
|   friend class MCModule;
 | |
|   typedef enum { TextAtom, DataAtom } AtomType;
 | |
| 
 | |
|   AtomType Type;
 | |
|   MCModule *Parent;
 | |
|   uint64_t Begin, End;
 | |
| 
 | |
|   std::vector<std::pair<uint64_t, MCInst> > Text;
 | |
|   std::vector<MCData> Data;
 | |
| 
 | |
|   // Private constructor - only callable by MCModule
 | |
|   MCAtom(AtomType T, MCModule *P, uint64_t B, uint64_t E)
 | |
|     : Type(T), Parent(P), Begin(B), End(E) { }
 | |
| 
 | |
| public:
 | |
|   bool isTextAtom() { return Type == TextAtom; }
 | |
|   bool isDataAtom() { return Type == DataAtom; }
 | |
| 
 | |
|   void addInst(const MCInst &I, uint64_t Address, unsigned Size);
 | |
|   void addData(const MCData &D);
 | |
| 
 | |
|   /// split - Splits the atom in two at a given address, which must align with
 | |
|   /// and instruction boundary if this is a TextAtom.  Returns the newly created
 | |
|   /// atom representing the high part of the split.
 | |
|   MCAtom *split(uint64_t SplitPt);
 | |
| 
 | |
|   /// truncate - Truncates an atom so that TruncPt is the last byte address
 | |
|   /// contained in the atom.
 | |
|   void truncate(uint64_t TruncPt);
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 |