Hace mucho tiempo, fui responsable de la biblioteca Turbo C/C++ en tiempo de ejecución. Tanj Bennett escribió el emulador de punto flotante original de 80x87 en un ensamblador de 16 bits. No había mirado detenidamente el código de Tanj ya que funcionaba bien y no requería atención. Pero estábamos haciendo el movimiento a 32 bits y me tocó la tarea de estirar el emulador.
Si alguna vez se puede decir que la programación tiene algo en común con el arte, esto fue todo.
Las funciones matemáticas básicas de Tanj lograron mantener un resultado temporal de coma flotante de 80 bits en cinco registros de 16 bits sin tener que guardarlos y restaurarlos desde la memoria. Los programadores ensambladores de X86 entenderán qué logro fue este. El espacio de registro era escaso y mantener cinco registros como temperatura mientras simultáneamente hacía matemáticas complejas era un sitio hermoso para la vista.
Si solo fuera una cuestión de codificación inteligente que habría sido suficiente para calificarlo como arte, pero era más que eso. Tanj había elegido cuidadosamente los algoritmos matemáticos subyacentes que serían más adecuados para mantener la temperatura en los registros. El resultado fue un emulador de punto flotante ultrarrápido que fue un importante punto de venta para muchos de nuestros clientes.
Cuando llegó el 386, la mayoría de las personas que se preocupaban por el rendimiento en punto flotante no usaban un emulador, pero teníamos que admitir el 386SX de Intel, por lo que el emulador necesitaba una revisión. Reescribí la lógica de decodificación de instrucciones y el manejo de excepciones, pero dejé las funciones básicas de matemáticas completamente intactas.
@Malfist: Haznos un favor a todos y deja de editar las etiquetas. – GEOCHET
@Malfist, maldito fuera. – mmcdole
Y pensé que la solicitud para poder rechazar a un usuario era estúpida. Ahora tengo el pie en la boca ... – GEOCHET