I have a cpp.o version on x86_64 that is 48Kb (normally it's about 200k), which is better, albeit still rather large.
That involved changing the input to a pike-string (size /= 3), and changing all the macros to functions (most are automatically inlined by gcc, compiling with -Os saves a few Kb more).
I can not for the life of me get it to produce the correct output, though. Linenumbers change, and things are generally shaky.
The code is extremely sensitive to change, I think I would have to do it over from scratch, changing at most a few lines at a time and running a testsuite on it all the time.