mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 00:16:48 +00:00 
			
		
		
		
	In the case of EDInstInfo, this would actually cause a bug when -1 became 255 and was then compared >=0 in llvm-mc/Disassembler.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138825 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			140 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-EDToken.h - LLVM Enhanced Disassembler --------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| // 
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file defines the interface for the Enhanced Disassembly library's token
 | |
| // class.  The token is responsible for vending information about the token, 
 | |
| // such as its type and logical value.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_EDTOKEN_H
 | |
| #define LLVM_EDTOKEN_H
 | |
| 
 | |
| #include "llvm/ADT/StringRef.h"
 | |
| #include "llvm/Support/DataTypes.h"
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| namespace llvm {
 | |
|   
 | |
| struct EDDisassembler;
 | |
| 
 | |
| /// EDToken - Encapsulates a single token, which can provide a string
 | |
| ///   representation of itself or interpret itself in various ways, depending
 | |
| ///   on the token type.
 | |
| struct EDToken {
 | |
|   enum tokenType {
 | |
|     kTokenWhitespace,
 | |
|     kTokenOpcode,
 | |
|     kTokenLiteral,
 | |
|     kTokenRegister,
 | |
|     kTokenPunctuation
 | |
|   };
 | |
|   
 | |
|   /// The parent disassembler
 | |
|   EDDisassembler &Disassembler;
 | |
| 
 | |
|   /// The token's string representation
 | |
|   llvm::StringRef Str;
 | |
|   /// The token's string representation, but in a form suitable for export
 | |
|   std::string PermStr;
 | |
|   /// The type of the token, as exposed through the external API
 | |
|   enum tokenType Type;
 | |
|   /// The type of the token, as recorded by the syntax-specific tokenizer
 | |
|   uint64_t LocalType;
 | |
|   /// The operand corresponding to the token, or (unsigned int)-1 if not
 | |
|   ///   part of an operand.
 | |
|   int OperandID;
 | |
|   
 | |
|   /// The sign if the token is a literal (1 if negative, 0 otherwise)
 | |
|   bool LiteralSign;
 | |
|   /// The absolute value if the token is a literal
 | |
|   uint64_t LiteralAbsoluteValue;
 | |
|   /// The LLVM register ID if the token is a register name
 | |
|   unsigned RegisterID;
 | |
|   
 | |
|   /// Constructor - Initializes an EDToken with the information common to all
 | |
|   ///   tokens
 | |
|   ///
 | |
|   /// @arg str          - The string corresponding to the token
 | |
|   /// @arg type         - The token's type as exposed through the public API
 | |
|   /// @arg localType    - The token's type as recorded by the tokenizer
 | |
|   /// @arg disassembler - The disassembler responsible for the token
 | |
|   EDToken(llvm::StringRef str,
 | |
|           enum tokenType type,
 | |
|           uint64_t localType,
 | |
|           EDDisassembler &disassembler);
 | |
|   
 | |
|   /// makeLiteral - Adds the information specific to a literal
 | |
|   /// @arg sign           - The sign of the literal (1 if negative, 0 
 | |
|   ///                       otherwise)
 | |
|   ///
 | |
|   /// @arg absoluteValue  - The absolute value of the literal
 | |
|   void makeLiteral(bool sign, uint64_t absoluteValue);
 | |
|   /// makeRegister - Adds the information specific to a register
 | |
|   ///
 | |
|   /// @arg registerID - The LLVM register ID
 | |
|   void makeRegister(unsigned registerID);
 | |
|   
 | |
|   /// setOperandID - Links the token to a numbered operand
 | |
|   ///
 | |
|   /// @arg operandID  - The operand ID to link to
 | |
|   void setOperandID(int operandID);
 | |
|   
 | |
|   ~EDToken();
 | |
|   
 | |
|   /// type - Returns the public type of the token
 | |
|   enum tokenType type() const;
 | |
|   /// localType - Returns the tokenizer-specific type of the token
 | |
|   uint64_t localType() const;
 | |
|   /// string - Returns the string representation of the token
 | |
|   llvm::StringRef string() const;
 | |
|   /// operandID - Returns the operand ID of the token
 | |
|   int operandID() const;
 | |
|   
 | |
|   /// literalSign - Returns the sign of the token 
 | |
|   ///   (1 if negative, 0 if positive or unsigned, -1 if it is not a literal)
 | |
|   int literalSign() const;
 | |
|   /// literalAbsoluteValue - Retrieves the absolute value of the token, and
 | |
|   ///   returns -1 if the token is not a literal
 | |
|   /// @arg value  - A reference to a value that is filled in with the absolute
 | |
|   ///               value, if it is valid
 | |
|   int literalAbsoluteValue(uint64_t &value) const;
 | |
|   /// registerID - Retrieves the register ID of the token, and returns -1 if the
 | |
|   ///   token is not a register
 | |
|   ///
 | |
|   /// @arg registerID - A reference to a value that is filled in with the 
 | |
|   ///                   register ID, if it is valid
 | |
|   int registerID(unsigned ®isterID) const;
 | |
|   
 | |
|   /// tokenize - Tokenizes a string using the platform- and syntax-specific
 | |
|   ///   tokenizer, and returns 0 on success (-1 on failure)
 | |
|   ///
 | |
|   /// @arg tokens       - A vector that will be filled in with pointers to
 | |
|   ///                     allocated tokens
 | |
|   /// @arg str          - The string, as outputted by the AsmPrinter
 | |
|   /// @arg operandOrder - The order of the operands from the operandFlags array
 | |
|   ///                     as they appear in str
 | |
|   /// @arg disassembler - The disassembler for the desired target and
 | |
|   //                      assembly syntax
 | |
|   static int tokenize(std::vector<EDToken*> &tokens,
 | |
|                       std::string &str,
 | |
|                       const signed char *operandOrder,
 | |
|                       EDDisassembler &disassembler);
 | |
|   
 | |
|   /// getString - Directs a character pointer to the string, returning 0 on
 | |
|   ///   success (-1 on failure)
 | |
|   /// @arg buf  - A reference to a pointer that is set to point to the string.
 | |
|   ///   The string is still owned by the token.
 | |
|   int getString(const char*& buf);
 | |
| };
 | |
| 
 | |
| } // end namespace llvm
 | |
| #endif
 |