From: Chris Lattner Date: Mon, 14 Jan 2008 06:27:57 +0000 (+0000) Subject: add a note X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d9028b7d7d9a63a87608ec3fd870a22b2cc87891;p=clang add a note git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45953 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/NOTES.txt b/NOTES.txt index 1266718ec0..33b191ebd0 100644 --- a/NOTES.txt +++ b/NOTES.txt @@ -28,6 +28,32 @@ Extensions: //===---------------------------------------------------------------------===// +When we go to reimplement , we should do it more intelligently than +the GCC-supplied header. EDG has an interesting __generic builtin that provides +overloading for C: +http://www.edg.com/docs/edg_cpp.pdf + +For example, they have: + #define sin(x) __generic(x,,, sin, sinf, sinl, csin, csinf,csinl)(x) + +It's unclear to me why you couldn't just have a builtin like: + __builtin_overload(1, arg1, impl1, impl2, impl3) + __builtin_overload(2, arg1, arg2, impl1, impl2, impl3) + __builtin_overload(3, arg1, arg2, arg3, impl1, impl2, impl3) + +Where the compiler would just pick the right "impl" based on the arguments +provided. One nasty detail is that some arithmetic promotions most be done for +use by the tgmath.h stuff, but it would be nice to be able to handle vectors +etc as well without huge globs of macros. With the above scheme, you could +use: + + #define sin(x) __builtin_overload(1, x, sin, sinf, sinl, csin, csinf,csinl)(x) + +and not need to keep track of which argument to "__generic" corresponds to which +type, etc. + +//===---------------------------------------------------------------------===// + To time GCC preprocessing speed without output, use: "time gcc -MM file" This is similar to -Eonly.