in dct32() there is a cos table declared every single call, why not move this to just before the function?
It's not an array, it's a list of enum constants. It is functionally equivalent to a set of #define's except that it is conveniently limited in scope to the function in which it appears.
The location of this has absolutely no effect on the overhead of each call to the function.
in III_huffdecode() you make a new block for most of the function call. Why use this temporary block?
I'm not sure I understand what you're really asking. There is indeed a separate statement block in III_huffdecode() for decoding the big_values portion of the spectrum, and similarly another block for decoding the count1 region. This is mostly just to keep the scope of the local variables clear, but it can also help the compiler make efficient use of the stack, since variables in the latter block can replace variables in the former.
This doesn't add any overhead at run-time... it's not like calling a function. Just pretend the first block is preceded with "if (1)". :-)
-rob