returning multiple values from macro


I'm writing a small machine simulator in CL, using tagbody/go to
define the outer-most structure.

Each instruction looks something like this:

(... implementation of instruction using 'go' to make state
transitions ...)

My question is: How can I define a macro to replace that by something

(state instruction4)
(... implementation of instruction ...)

where the 'state' defmacro should return two things: a symbol for the
target of the 'go', and a form of debugging code.

I wasn't able to find a way to return multiple values such that one of
them would be outside of forms. I thought perhaps of wrapping the
whole tagbody in a macro and walking and rewriting all the code
inside, but that seemed overly complex. (And made me feel like I was
missing something obvious when I started to try to write it!)

Thank you for any suggestions. Noob-ishly yours,