Advances in microprocessor design have continued to increase the performance of computer systems while extending the life span of architecture families. The rapid pace of development has made the simultaneous presence of many different processor versions within the same basic architecture an important fact in the computer market. However, the binary executable program, along with binary dynamic-link libraries, remains the dominant form for computer software distribution. In binary form, a program is targeted towards a single processor version or towards a blend of different processors. For this reason, programs fail to achieve maximum performance on many, or even all, processor versions. Performance-enhancing features of microprocessors may be grouped in two general categories. Architectural features add new instructions or registers to the processor design. Until such extensions become supported by the majority of processor versions in the market, many software vendors will not support the new features to avoid alienating consumers with older machines. Microarchitectural features do not change the programmer-visible properties of the processor, but instead seek to achieve a certain cost-performance point by altering how the architecture is implemented. To achieve optimal performance, different implementations
often require different sequences of instructions that perform the same functional tasks. In all of these situations, the end user would benefit from having a binary program that is optimized specifically for his or her particular processor version. Manufacturers of different processor versions would also benefit, since specially optimized executables would better highlight the
performance of their products.