aaboud marked an inline comment as done. ================ Comment at: include/clang/Basic/Attr.td:1657 @@ +1656,3 @@ + TargetSpecificAttr<TargetAnyX86> { + let Spellings = [GNU<"no_caller_saved_registers">]; + let Subjects = SubjectList<[FunctionLike], WarnDiag, "ExpectedFunction">; ---------------- aaron.ballman wrote: > Any particular reason this isn't (also) a C++-style attribute under the clang > namespace? I am not sure about that, I was just following the way the "interrupt" attribute was defined. Do you think we should change both to consider C++ style attribute as well?
================ Comment at: include/clang/Basic/AttrDocs.td:2177 @@ +2176,3 @@ +Use this attribute to indicate that the specified function has no +caller-saved registers. That is, all registers are callee-saved. +The compiler generates proper function entry and exit sequences to ---------------- aaron.ballman wrote: > How does this interact with calling convention attributes? For instance, if I > have a function that is explicitly marked cdecl and has this attribute, what > is the behavior for EAX, ECX, and EDX? > > Also, why is this an attribute rather than a calling convention? I'm > wondering how this works through function pointers, for instance (whether it > is intended to work or not). Please, correct me if I am mistaken, but calling convention determine not only what the callee and the caller function saved registers are, but also how we move parameters to the called function, right? The idea behind no_caller_saved_registers attribute, is that it can be combined with any other calling convention, and it only override the callee/caller saved register list, but not the way parameters are passed to the called function. So, using a calling convention for this attribute will not be right. H.J., can you confirm this? https://reviews.llvm.org/D22045 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits