Don't use assembly unless you're an expert
Writing SSE assembly (not intrinsics) by hand can sometimes give you over a 10x speedup in an inner loop of a computationally expensive problem, like CPU bone animation of vertices.<p>And while it's convenient to use intrinsics to generate SSE (intrinsics look like ordinary C functions and save you from having to write actual assembly), it's impossible for them to <i>always</i> be as efficient as a clever programmer.  I'm pretty sure that generating perfectly efficient SSE from SSE intrinsics is an NP-complete problem.  So a clever programmer will always be able to boost performance more than a compiler.<p>That said, the two biggest arguments against assembly are:<p>(a) performance matters much less in the modern day,<p>(b) you kill your portability by writing inline assembly.  If you expect your code to run on Windows (and gamedevs expect their code to run on Windows, though this may be changing) you'll need to maintain two parallel, #ifdef'd hand written bits of assembly that do exactly the same thing: one for GCC, and one for MSVC.  It's a Royal Pain.<p>Those are two damning arguments, and it's why SSE assembly crafting has become something of a lost art.<p>EDIT:  I originally led with "It's disappointing that the author makes no mention of SSE assembly," but this was confusing due to the distinction between assembly vs intrinsics. They did briefly mention SSE intrinsics, but not that hand-written SSE assembly is sometimes superior for raw performance.  Also, getting a strikethrough modifier on HN for edits would be wonderful.