diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-12-12 16:20:52 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-12-12 16:20:52 -0800 |
commit | dc9f227a0fef61e246fff0de4d742940002243e0 (patch) | |
tree | 2606d51bfa0098903cd40246e2d44ca010fe84d8 /lib/Target/CppBackend/CPPBackend.cpp | |
parent | c43a522939a5e3d49ce76c47261592d61b341173 (diff) |
implement AtomicCmpXchg
Diffstat (limited to 'lib/Target/CppBackend/CPPBackend.cpp')
-rw-r--r-- | lib/Target/CppBackend/CPPBackend.cpp | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp index 3cc023b9c2..4ff08e4531 100644 --- a/lib/Target/CppBackend/CPPBackend.cpp +++ b/lib/Target/CppBackend/CPPBackend.cpp @@ -1962,17 +1962,11 @@ std::string CppWriter::generateInstruction(const Instruction *I) { break; } case Instruction::AtomicCmpXchg: { - const AtomicCmpXchgInst *cxi = cast<AtomicCmpXchgInst>(I); - StringRef Ordering = ConvertAtomicOrdering(cxi->getOrdering()); - StringRef CrossThread = ConvertAtomicSynchScope(cxi->getSynchScope()); - Out << "AtomicCmpXchgInst* " << iName - << " = new AtomicCmpXchgInst(" - << opNames[0] << ", " << opNames[1] << ", " << opNames[2] << ", " - << Ordering << ", " << CrossThread << ", " << bbname - << ");"; - nl(Out) << iName << "->setName(\""; - printEscapedString(cxi->getName()); - Out << "\");"; + std::string Assign = getAssign(iName, I->getType()); + const Value *P = I->getOperand(0); + text = getLoad(Assign, P, I->getType(), 0) + ';' + + "if ((" + getCast(iName, I->getType()) + ") == " + getValueAsCastParenStr(I->getOperand(1)) + ") " + + getStore(P, I->getType(), getValueAsStr(I->getOperand(2)), 0) + ";"; break; } case Instruction::AtomicRMW: { |