Evolving machine microprograms: Application to the code2 microarchitecture