Molto tempo fa, ero responsabile della libreria di runtime Turbo C/C++. Tanj Bennett ha scritto l'emulatore floating point 80x87 originale nell'assembler a 16 bit. Non avevo guardato da vicino il codice di Tanj poiché funzionava bene e non richiedeva attenzione. Ma stavamo facendo il passaggio a 32-bit e il compito mi è toccato allungare l'emulatore.
Se si potesse mai dire che la programmazione avesse qualcosa in comune con l'arte, era così.
Le funzioni matematiche di base di Tanj sono riuscite a mantenere un risultato temporaneo in virgola mobile a 80 bit in cinque registri a 16 bit senza doverli salvare e ripristinarli dalla memoria. I programmatori di assemblaggi X86 capiranno cosa sia stato questo risultato. Lo spazio del registro era scarso e tenere cinque registri come temp mentre allo stesso tempo fare matematica complessa era un bel sito da ammirare.
Se fosse solo una questione di codice intelligente sarebbe stato sufficiente per qualificarlo come arte ma era più di quello. Tanj aveva accuratamente selezionato gli algoritmi matematici sottostanti che sarebbero stati più adatti per mantenere la temperatura nei registri. Il risultato è stato un emulatore in virgola mobile estremamente rapido che è stato un importante punto di vendita per molti dei nostri clienti.
Quando è arrivato il 386, la maggior parte delle persone a cui importavano prestazioni in virgola mobile non utilizzavano un emulatore, ma dovevamo supportare il 386SX di Intel, quindi l'emulatore aveva bisogno di una revisione. Ho riscritto la logica di decodifica delle istruzioni e la gestione delle eccezioni, ma ho lasciato intatte le funzioni matematiche di base.
fonte
2009-01-26 22:45:11
@Malfist: facciamo un favore a tutti e smettiamo di modificare i tag. – GEOCHET
@Malfist, bugger off. – mmcdole
E ho pensato che la richiesta di poter downvotare un utente fosse stupida. Ora il mio piede è nella mia bocca ... – GEOCHET