mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-05 18:17:00 +00:00
Add memory operand and int regs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28896 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1725599574
commit
df97cc67a6
@ -62,6 +62,10 @@ namespace {
|
||||
|
||||
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
||||
unsigned AsmVariant, const char *ExtraCode);
|
||||
bool PrintAsmMemoryOperand(const MachineInstr *MI,
|
||||
unsigned OpNo,
|
||||
unsigned AsmVariant,
|
||||
const char *ExtraCode);
|
||||
};
|
||||
} // end of anonymous namespace
|
||||
|
||||
@ -277,3 +281,13 @@ bool AlphaAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
||||
printOperand(MI, OpNo);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AlphaAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
|
||||
unsigned OpNo,
|
||||
unsigned AsmVariant,
|
||||
const char *ExtraCode) {
|
||||
if (ExtraCode && ExtraCode[0])
|
||||
return true; // Unknown modifier.
|
||||
printOperand(MI, OpNo);
|
||||
return false;
|
||||
}
|
||||
|
@ -119,6 +119,24 @@ namespace {
|
||||
return "Alpha DAG->DAG Pattern Instruction Selection";
|
||||
}
|
||||
|
||||
/// SelectInlineAsmMemoryOperand - Implement addressing mode selection for
|
||||
/// inline asm expressions.
|
||||
virtual bool SelectInlineAsmMemoryOperand(const SDOperand &Op,
|
||||
char ConstraintCode,
|
||||
std::vector<SDOperand> &OutOps,
|
||||
SelectionDAG &DAG) {
|
||||
SDOperand Op0;
|
||||
switch (ConstraintCode) {
|
||||
default: return true;
|
||||
case 'm': // memory
|
||||
Select(Op0, Op);
|
||||
break;
|
||||
}
|
||||
|
||||
OutOps.push_back(Op0);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Include the pieces autogenerated from the target description.
|
||||
#include "AlphaGenDAGISel.inc"
|
||||
|
||||
|
@ -591,6 +591,7 @@ AlphaTargetLowering::getConstraintType(char ConstraintLetter) const {
|
||||
switch (ConstraintLetter) {
|
||||
default: break;
|
||||
case 'f':
|
||||
case 'r':
|
||||
return C_RegisterClass;
|
||||
}
|
||||
return TargetLowering::getConstraintType(ConstraintLetter);
|
||||
@ -614,6 +615,19 @@ getRegClassForInlineAsmConstraint(const std::string &Constraint,
|
||||
Alpha::F24, Alpha::F25, Alpha::F26,
|
||||
Alpha::F27, Alpha::F28, Alpha::F29,
|
||||
Alpha::F30, Alpha::F31, 0);
|
||||
case 'r':
|
||||
return make_vector<unsigned>(Alpha::R0 , Alpha::R1 , Alpha::R2 ,
|
||||
Alpha::R3 , Alpha::R4 , Alpha::R5 ,
|
||||
Alpha::R6 , Alpha::R7 , Alpha::R8 ,
|
||||
Alpha::R9 , Alpha::R10, Alpha::R11,
|
||||
Alpha::R12, Alpha::R13, Alpha::R14,
|
||||
Alpha::R15, Alpha::R16, Alpha::R17,
|
||||
Alpha::R18, Alpha::R19, Alpha::R20,
|
||||
Alpha::R21, Alpha::R22, Alpha::R23,
|
||||
Alpha::R24, Alpha::R25, Alpha::R26,
|
||||
Alpha::R27, Alpha::R28, Alpha::R29,
|
||||
Alpha::R30, Alpha::R31, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user