From: Manman Ren Date: Mon, 7 Dec 2015 21:40:09 +0000 (+0000) Subject: Update doc for C++ TLS calling convention. X-Git-Tag: llvmorg-3.8.0-rc1~2544 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=17567d236090aaad68770d14efa3d4b6c493e37e;p=platform%2Fupstream%2Fllvm.git Update doc for C++ TLS calling convention. llvm-svn: 254953 --- diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index 82b3355..ca0939e 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -407,12 +407,22 @@ added in the future: used by a future version of the ObjectiveC runtime and should be considered experimental at this time. "``cxx_fast_tlscc``" - The `CXX_FAST_TLS` calling convention for access functions + Clang generates an access function to access C++-style TLS. The access + function generally has an entry block, an exit block and an initialization + block that is run at the first time. The entry and exit blocks can access + a few TLS IR variables, each access will be lowered to a platform-specific + sequence. + This calling convention aims to minimize overhead in the caller by - preserving as many registers as possible. This calling convention behaves - identical to the `C` calling convention on how arguments and return values - are passed, but it uses a different set of caller/callee-saved registers. - Given that C-style TLS on Darwin has its own special CSRs, we can't use the - existing `PreserveMost`. + preserving as many registers as possible (all the registers that are + perserved on the fast path, composed of the entry and exit blocks). + + This calling convention behaves identical to the `C` calling convention on + how arguments and return values are passed, but it uses a different set of + caller/callee-saved registers. + + Given that each platform has its own lowering sequence, hence its own set + of preserved registers, we can't use the existing `PreserveMost`. - On X86-64 the callee preserves all general purpose registers, except for RDI and RAX.