HexagonMCInst.h revision dce4a407a24b04eebc6a376f8e62b41aaa7b071f
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===- HexagonMCInst.h - Hexagon sub-class of MCInst ----------------------===// 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The LLVM Compiler Infrastructure 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This file is distributed under the University of Illinois Open Source 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// License. See LICENSE.TXT for details. 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===// 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This class extends MCInst to allow some VLIW annotations. 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===// 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef HEXAGONMCINST_H 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define HEXAGONMCINST_H 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "HexagonTargetMachine.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "llvm/MC/MCInst.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace llvm { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class MCOperand; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class HexagonMCInst: public MCInst { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MCID is set during instruction lowering. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // It is needed in order to access TSFlags for 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // use in checking MC instruction properties. 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MCInstrDesc *MCID; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Packet start and end markers 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned packetStart: 1, packetEnd: 1; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit HexagonMCInst(): 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MCInst(), MCID(nullptr), packetStart(0), packetEnd(0) {}; 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HexagonMCInst(const MCInstrDesc& mcid): 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MCInst(), MCID(&mcid), packetStart(0), packetEnd(0) {}; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isPacketStart() const { return (packetStart); }; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isPacketEnd() const { return (packetEnd); }; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void setPacketStart(bool Y) { packetStart = Y; }; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void setPacketEnd(bool Y) { packetEnd = Y; }; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void resetPacket() { setPacketStart(false); setPacketEnd(false); }; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return the slots used by the insn. 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned getUnits(const HexagonTargetMachine* TM) const; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return the Hexagon ISA class for the insn. 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned getType() const; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void setDesc(const MCInstrDesc& mcid) { MCID = &mcid; }; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MCInstrDesc& getDesc(void) const { return *MCID; }; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the insn is an actual insn. 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isCanon() const; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the insn is a prefix. 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isPrefix() const; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the insn is solo, i.e., cannot be in a packet. 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isSolo() const; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the instruction needs to be constant extended. 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isConstExtended() const; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return constant extended operand number. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned short getCExtOpNum(void) const; 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the insn is a new-value consumer. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isNewValue() const; 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the instruction is a legal new-value producer. 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool hasNewValue() const; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return the operand that consumes or produces a new value. 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MCOperand& getNewValue() const; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return number of bits in the constant extended operand. 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned getBitCount(void) const; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return whether the instruction must be always extended. 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isExtended() const; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return true if the insn may be extended based on the operand value. 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isExtendable() const; 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return true if the operand can be constant extended. 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool isOperandExtended(const unsigned short OperandNum) const; 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return the min value that a constant extendable operand can have 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // without being extended. 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int getMinValue() const; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return the max value that a constant extendable operand can have 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // without being extended. 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int getMaxValue() const; 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci