mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
[ms-inline asm] Address the FIXME in AsmParser.cpp.
// FIXME: Constraints are hard coded to 'm', but we need an 'r' // constraint for addressof. This needs to be cleaned up! Test cases are already in place. Specifically, clang/test/CodeGen/ms-inline-asm.c t15(), t16(), and t24(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172569 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ee1308930
commit
1c99a7f489
@ -3972,15 +3972,13 @@ bool AsmParser::ParseMSInlineAsm(void *AsmLoc, std::string &AsmString,
|
||||
unsigned NumExprs = NumOutputs + NumInputs;
|
||||
OpDecls.resize(NumExprs);
|
||||
Constraints.resize(NumExprs);
|
||||
// FIXME: Constraints are hard coded to 'm', but we need an 'r'
|
||||
// constraint for addressof. This needs to be cleaned up!
|
||||
for (unsigned i = 0; i < NumOutputs; ++i) {
|
||||
OpDecls[i] = std::make_pair(OutputDecls[i], OutputDeclsAddressOf[i]);
|
||||
Constraints[i] = OutputDeclsAddressOf[i] ? "=r" : OutputConstraints[i];
|
||||
Constraints[i] = OutputConstraints[i];
|
||||
}
|
||||
for (unsigned i = 0, j = NumOutputs; i < NumInputs; ++i, ++j) {
|
||||
OpDecls[j] = std::make_pair(InputDecls[i], InputDeclsAddressOf[i]);
|
||||
Constraints[j] = InputDeclsAddressOf[i] ? "r" : InputConstraints[i];
|
||||
Constraints[j] = InputConstraints[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1727,7 +1727,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
<< " default: llvm_unreachable(\"invalid conversion entry!\");\n"
|
||||
<< " case CVT_Reg:\n"
|
||||
<< " Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);\n"
|
||||
<< " Operands[*(p + 1)]->setConstraint(\"m\");\n"
|
||||
<< " Operands[*(p + 1)]->setConstraint(\"r\");\n"
|
||||
<< " ++NumMCOperands;\n"
|
||||
<< " break;\n"
|
||||
<< " case CVT_Tied:\n"
|
||||
@ -1830,9 +1830,13 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
|
||||
// Add a handler for the operand number lookup.
|
||||
OpOS << " case " << Name << ":\n"
|
||||
<< " Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);\n"
|
||||
<< " Operands[*(p + 1)]->setConstraint(\"m\");\n"
|
||||
<< " NumMCOperands += " << OpInfo.MINumOperands << ";\n"
|
||||
<< " Operands[*(p + 1)]->setMCOperandNum(NumMCOperands);\n";
|
||||
|
||||
if (Op.Class->isRegisterClass())
|
||||
OpOS << " Operands[*(p + 1)]->setConstraint(\"r\");\n";
|
||||
else
|
||||
OpOS << " Operands[*(p + 1)]->setConstraint(\"m\");\n";
|
||||
OpOS << " NumMCOperands += " << OpInfo.MINumOperands << ";\n"
|
||||
<< " break;\n";
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user