I would say: Whenever you have a hard performance target that you must hit, and pure C can't meet that target.<p>Every game, including Doom 3, has some targeted minimum frame rate that the developers want it to run at. (This target can be anywhere from 30-60 frames per second, depending on the studio's standards.) Additionally, the game will have some targeted hardware that it is expected to run on. (Hardware requirements for PCs may slip during development, but console hardware is pretty non-negotiable.) The developer will optimize until the game runs at the required frame rate on all the targeted hardware platforms (using a profiler to identify the functions that need optimization) then no further.<p>Now, if what you really meant is, "When is assembler actually going to be faster than pure C?" that's a harder question. Modern C compilers are pretty smart, and most assembly hackers today start by looking at the assembly generated by a C compiler, and optimizing from there.<p>Most compilers are conservative about what optimizations they run, so there are often situations where it is safe to apply an optimization yet the compiler will not recognize it as such. (Really, would you want your compiler adding bugs to your code in an effort to make it "faster"?) So, sometimes you can apply optimizations that the compiler missed.<p>Most of the time, though, if you're not John Carmack then you probably can't beat your C compiler.