Adaptive Code Generation
Generally, you do not need to understand the details of the underlying hardware architecture so that the architecture can change smoothly over time. Architecture changes range from adding a single processor instruction to changing the entire processor instruction set. To ensure that your programs continue to run correctly when the operating system moves between platforms that have different levels of underlying hardware, an abstract machine interface (MI) that represents programs in a hardware-independent format is used.
The optimizing translator is responsible for generating hardware instructions from the MI representation. Because the optimizing translator is a component of the operating system, there is a single version of the optimizing translator for each release . However, a given release might be supported on a number of different system models, each of which might have slightly different processor hardware from the others.
In releases before 6.1, the optimizing translator for a given release was designed to generate only instructions that would run on all system models supported by that release. The advantage of this policy is that a program compiled for a particular release can run unchanged on any system running the same release . This makes it easy to build and distribute software for each release. However, important new processor features, which often provide significant performance advantages, cannot be used until they are present on all systems supported by the current release. A gap of a number of years might occur between the availability of a processor feature and its use in your programs.
As of 6.1, you can take advantage of all processor features on your systems, regardless of whether those features are present on other system models supported by the same release. Furthermore, programs can be moved from one system model to another and continue to run correctly, even if the new machine does not have all the processor features available on the original one. The technology used to achieve this is called adaptive code generation. Adaptive code generation (ACG) can work without user intervention for most scenarios. However, if you build and distribute software to run on a variety of system models, you might want to exercise some control over which processor features are used by adaptive code generation.