enum {
DEFFLAG = 0x01, // this is a def of the operand
USEFLAG = 0x02, // this is a use of the operand
- HIFLAG32 = 0x04, // operand is %hi32(value_or_immedVal)
- LOFLAG32 = 0x08, // operand is %lo32(value_or_immedVal)
- HIFLAG64 = 0x10, // operand is %hi64(value_or_immedVal)
- LOFLAG64 = 0x20, // operand is %lo64(value_or_immedVal)
PCRELATIVE = 0x40 // Operand is relative to PC, not a global address
};
///
UseType getUseType() const { return UseType(flags & (USEFLAG|DEFFLAG)); }
- /// isPCRelative - This returns the value of the PCRELATIVE flag, which
- /// indicates whether this operand should be emitted as a PC relative value
- /// instead of a global address. This is used for operands of the forms:
- /// MachineBasicBlock, GlobalAddress, ExternalSymbol
- ///
- bool isPCRelative() const { return (flags & PCRELATIVE) != 0; }
-
/// isRegister - Return true if this operand is a register operand. The X86
/// backend currently can't decide whether to use MO_MR or MO_VR to represent
/// them, so we accept both.
MachineOperand& setUse () { flags |= USEFLAG; return *this; }
bool isDef () const { return flags & DEFFLAG; }
MachineOperand& setDef () { flags |= DEFFLAG; return *this; }
- bool isHiBits32 () const { return flags & HIFLAG32; }
- bool isLoBits32 () const { return flags & LOFLAG32; }
- bool isHiBits64 () const { return flags & HIFLAG64; }
- bool isLoBits64 () const { return flags & LOFLAG64; }
/// hasAllocatedReg - Returns true iff a machine register has been
/// allocated to this operand.
if (TM) MRI = TM->getRegisterInfo();
- bool CloseParen = true;
- if (MO.isHiBits32())
- OS << "%lm(";
- else if (MO.isLoBits32())
- OS << "%lo(";
- else if (MO.isHiBits64())
- OS << "%hh(";
- else if (MO.isLoBits64())
- OS << "%hm(";
- else
- CloseParen = false;
-
switch (MO.getType()) {
case MachineOperand::MO_VirtualRegister:
if (MO.getVRegValue()) {
default:
assert(0 && "Unrecognized operand type");
}
-
- if (CloseParen)
- OS << ")";
}
void MachineInstr::print(std::ostream &OS, const TargetMachine *TM) const {
OS << "\n";
}
-namespace llvm {
-std::ostream &operator<<(std::ostream &os, const MachineInstr &MI) {
+std::ostream &llvm::operator<<(std::ostream &os, const MachineInstr &MI) {
// If the instruction is embedded into a basic block, we can find the target
// info for the instruction.
if (const MachineBasicBlock *MBB = MI.getParent()) {
return os << "\n";
}
-std::ostream &operator<<(std::ostream &OS, const MachineOperand &MO) {
- if (MO.isHiBits32())
- OS << "%lm(";
- else if (MO.isLoBits32())
- OS << "%lo(";
- else if (MO.isHiBits64())
- OS << "%hh(";
- else if (MO.isLoBits64())
- OS << "%hm(";
-
+std::ostream &llvm::operator<<(std::ostream &OS, const MachineOperand &MO) {
switch (MO.getType()) {
case MachineOperand::MO_VirtualRegister:
if (MO.hasAllocatedReg())
break;
}
- if (MO.isHiBits32() || MO.isLoBits32() || MO.isHiBits64() || MO.isLoBits64())
- OS << ")";
-
return OS;
}
-
-}
return;
case MachineOperand::MO_GlobalAddress:
- //Abuse PCrel to specify pcrel calls
- //calls are the only thing that use this flag
-// if (MO.isPCRelative())
-// O << PrivateGlobalPrefix << Mang->getValueName(MO.getGlobal()) << "..ng";
-// else
- O << Mang->getValueName(MO.getGlobal());
+ O << Mang->getValueName(MO.getGlobal());
return;
default:
} else if (MO1.isGlobalAddress()) {
assert(sizeOfImm(Desc) == 4 &&
"Don't know how to emit non-pointer values!");
- assert(!MO1.isPCRelative() && "Function pointer ref is PC relative?");
emitGlobalAddressForPtr(MO1.getGlobal(), MO1.getOffset());
} else if (MO1.isExternalSymbol()) {
assert(sizeOfImm(Desc) == 4 &&