Tradução e optimização de segmentos de código, com caching em memória ou ficheiros, já foi feito antes. O FX!32, para correr binários de Win32/x86 em Win32/Alpha é o caso mais antigo que conheço. Depois disso, tornou-se a forma comum de emular arquitecturas quando o objectivo era a performance. Hoje em dia, podem ver soluções semelhantes no Aries (PA-RISC -> Itanium) ou no IA32EL (x86 -> Itanium), entre outros. Tal como o QuickTransit, estes funcionam sobre o OS nativo (isto é, apenas emulam aplicações, não emulam todo o sistema operativo), o que simplifica bastante as coisas. Pelo menos no caso do FX!32, isto permitia-lhes ainda usar bibliotecas do sistema em código nativo . Não sei em que outros usam isto. No que diz respeito à performance, varia. Depende da aplicação e depende das arquitecturas. Intel e HP reclamam uns 30-80% da performance nativa para o IA32EL e Aries. Quanto mais registos a arquitectura emulada tiver, melhor.. desde que a nativa tenha ainda mais. A endianess também é importante. Se a arquitectura nativa não tiver instruções para lidar com isso devidamente, a diferença na endianess pode causar grandes estragos na performance. E depois, existem os pequenos detalhes.. Por exemplo, a arquitectura de virgula flutante x87, dos PCs, tem umas diferenças subtis relativamente às modernas arquitecturas pós-IEEE754. Subtis, mas que arrasam a performance se quisermos emular correctamente essas instruções na maioria dos CPUs modernos. No caso do FX!32, a DEC optou por torcer um pouco as coisas. |