http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56298
--- Comment #9 from Piotr Wyderski <piotr.wyderski at gmail dot com> 2013-02-12 17:22:08 UTC --- (In reply to comment #8) > Compiling that with icc -S t.c results in > > f: > # parameter 1: %xmm0 > # parameter 2: %xmm1 > ..B1.1: # Preds ..B1.0 > ..___tag_value_f.1: #3.33 > aesenc %xmm1, %xmm0 #5.16 > ret #5.16 So it seems that ICC and MSVC are in one team here, while GCC and CLang/LLVM are in the other. And since I consider ICC the one to be followed, as the *mmintrin.h files are provided in GCC for exactly that purpose, the conclusion is that GCC behaves in a wrong way. Jakub: you are right, the __builtin_* functions are not expected to be available when the target does not support them. But intrinsics are not like that and ultimately it is the (wrong) choice of a GCC implementer to base the intrinsic functions' implementation on builtins. Inline assembly would not cause such a problem. Just to be clear: I am perfectly aware how hard would it be to reimplement the intrinsics from scratch, but there *is* a problem.