 <p>each architecture has its own assembly language. and even within architectures there might be extensions which add extra commands (like the SSE extensions). Usually a Compiler can only create code for one architecture, and there might be optional flags which enable optimizations for the extensions. When these flags get enabled the program will usually only run on processors that support these extensions.</p> <p>For programs and OS it usually means you should only use compiler options that are supported by all processors of the architecture they have to run on. If thats not optimized enough you have to deliver executables/libraries with multiple code paths for he different optimizations, and pick the right one at runtime.</p>