diff options
author | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-05 21:57:41 +0000 |
---|---|---|
committer | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-05 21:57:41 +0000 |
commit | df7929676dacf443f7cbc6d215272a793ea2b569 (patch) | |
tree | c135a411936c14f3d4bdffebc158c3e412514df8 /clang/lib | |
parent | 0fea2f5c00d5b9c7fad7fe75fa808be5c5a54fa7 (diff) | |
download | bcm5719-llvm-df7929676dacf443f7cbc6d215272a793ea2b569.tar.gz bcm5719-llvm-df7929676dacf443f7cbc6d215272a793ea2b569.zip |
[COFF, ARM64] Add _InterlockedAdd intrinsic
Reviewers: rnk, mstorsjo, compnerd, TomTan, haripul, javed.absar, efriedma
Reviewed By: efriedma
Subscribers: efriedma, kristof.beyls, chrib, jfb, cfe-commits
Differential Revision: https://reviews.llvm.org/D52811
llvm-svn: 343894
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Headers/intrin.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 8e23b22f787..18b300bf11b 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -8517,6 +8517,15 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedDecrement, E); case AArch64::BI_InterlockedIncrement64: return EmitMSVCBuiltinExpr(MSVCIntrin::_InterlockedIncrement, E); + + case AArch64::BI_InterlockedAdd: { + Value *Arg0 = EmitScalarExpr(E->getArg(0)); + Value *Arg1 = EmitScalarExpr(E->getArg(1)); + AtomicRMWInst *RMWI = Builder.CreateAtomicRMW( + AtomicRMWInst::Add, Arg0, Arg1, + llvm::AtomicOrdering::SequentiallyConsistent); + return Builder.CreateAdd(RMWI, Arg1); + } } } diff --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h index c5b4ff4d7d8..6f753ba125b 100644 --- a/clang/lib/Headers/intrin.h +++ b/clang/lib/Headers/intrin.h @@ -869,6 +869,7 @@ __nop(void) { \*----------------------------------------------------------------------------*/ #if defined(__aarch64__) unsigned __int64 __getReg(int); +long _InterlockedAdd(long volatile *Addend, long Value); #endif /*----------------------------------------------------------------------------*\ |