title: Code Morphing Software
text: # Code Morphing Software
  
  Code Morphing Software (CMS) è una tecnologia software sviluppata dalla società Transmeta e integrata nelle famiglie di microprocessori VLIW Crusoe ed Efficeon.
  
  Il Code Morphing Software è un programma che traduce le istruzioni assembler x86 in istruzioni VLIW. Il CMS è uno strato software che separa set di istruzioni x86 dal set di istruzioni utilizzate realmente dal processore. Questo strato permette alla Transmeta di realizzare microprocessori basati su architetture altamente parallele ed efficienti come quelle VLIW in grado di eseguire però codice compilato per processori x86.
  
  In un processore superscalare classico il codice x86 viene analizzato da componenti hardware del microprocessore in modo da poter individuare le istruzioni eseguibili in parallelo e quindi l'Instruction level parallelism dei programmi. In un processore Transmeta il codice viene analizzato dal CMS che provvede a tradurlo in istruzioni VLIW dove il parallelismo è esplicito. Questo permette di ridurre notevolmente le dimensioni del microprocessore e quindi anche i consumi.
  
  Il motore CMS in teoria potrebbe interpretare anche altri set di istruzioni come quelli delle architetture PowerPC o SPARC sebbene Transmeta non abbia mai distribuito CMS per architetture non x86. Inoltre il CMS permette alla Transmeta di modificare l'architettura interna anche in modo radicale senza doversi preoccupare della compatibilità software dato che il CMS provvederà ad adattare il codice x86 per le istruzioni della nuova architettura. Difatti mentre il Crusoe era un microprocessore a 128 bit l'Efficeon è un microprocessore a 256 bit, ma questo non ha prodotto problemi di compatibilità o di prestazioni.
  
  Lo svantaggio dell'utilizzare il CMS deriva dal degrado delle prestazioni dovute alla traduzione del codice. Se il programma in esecuzione esegue prevalentemente le stesse porzioni di codice il CMS non deprime le prestazioni dato che il processore mantiene in cache il codice tradotto utilizzato più frequentemente. Invece se il programma utilizza spesso nuove porzioni di codice, il CMS incide sulle prestazioni, anche se il degrado delle prestazioni è difficilmente quantificabile dato che è strettamente legato al codice in esecuzione.
  
  