It was suggested to me to move this question from SO to here.
There was a relatively short (in tech terms, at least) period during which MMX was the only way to vectorise integer operations on the x86, as the Pentium MMX came out in 1997, and SSE2 came out in 2000. Using it seems to have always been especially unergonomic, though.
Modern C and C++ compilers do not seem to be able to vectorise using MMX properly. For GCC, this seems to be a problem in figuring out where to use emms, and doesn't seem to have ever supported automatic emission of MMX. The same goes for MSVC, and even ICC (as far as I know) in the present, if not the past. In all of these, it seems that, if one wanted the MMX registers used, then the solution is either inline assembly, intrinsics, or a module written entirely in asm. Even in that case, Clang makes the bizarre choice of making MMX intrinsics emit SSE2 assembly, meaning it is now impossible to actually output MMX with Clang intrinsics (why did they not just remove the intrinsics if they wanted them gone?)
Was there a historical version of a modern compiler, or a historical compiler now discontinued, for C and C++ that could auto-vectorise using MMX? If so, which?