2002.01.23 ~00 q3asm-turbo http://www.icculus.org/~phaethon/q3/q3asm-turbo/q3asm-turbo.html In the course of trying to debug my Scheme interpreter (which fails horribly in QVM bytecode form), I got very annoyed at the tremendous wait time for a complete compile cycle to finish, with q3asm taking up more than 60 seconds. This long of a wait for each tiny tweak. So I set out to speed up q3asm. I hacked q3asm to support a chain-and-bucket hash table, where symbol values were to be stored during the symbol table construction pass (pass 0). By just using this hash table for lookups alone, linking (q3asm life time) shrunk down to 28 seconds. After spotting a singly-linked list insertion sort in pass 0, I diked that out, and linking time dropped to 3 seconds. I nearly did very aggravating(?) things to my pants. After groveling through the source, I concluded that sorting the symbols list (by value) never did anything worthwhile in q3asm, anyway. Then I sought to optimize the foonting turlingdrome out of q3asm. With the assistance of GNU profiler, I hand-optimized various heavyily-called functions. Or at least I think I optimized them. q3asm-turbo2a regularly reports 1 second elapsed compiling the game/ module of my mod. But my Scheme interpreter is equally broken in unmodified, turbo1, and turbo2a, so I don't know if the modified q3asm actually works correctly. But it's swutting fast :)