Suggestion by Ian in a commit message that I think could be a good one, so don't want to forget.....
We could make the IA32 assembler into two classes: a superclass that doesn't print anything, and a subclass that does. In the listing version, each of the emit methods is overridden to call super, then do the print.
The downside is we are very likely to take a virtual call on each emit method (although the opt compiler could probably still do some guarded inlining). The plus is that we eliminate all the lister checks and calls in the superclass
Not clear if this would actually be a performance win, since the "real" virtual call on the emit methods might out-weigh the gain from specializing away the lister checks, but it might be worth prototyping.