How to split immediate in assembly output?


I am writing simple pattern in td that uses immediate and shall print
it in assembler in two parts. Say for input immediate i:
i1 = i << 2
i2 = i & 3

I want something like (simplified tablegen pseudocode):

def MYINSN : Insn<(outs MyOut:$r0), (ins MyReg:$r1, MyImm32:$i),
     "prefix $i1 body $r0, $r1, $i2",
     [(... some pattern here)]>;

In Insn pattern whole string goes to AsmString property.

How can I do it with tablegen? Any examples from existing backends?

P.S. Of course I can do custom node with one more parameter and write
pattern matching in DAGToDAG selection, etc. I just wonder: may be
there is some surprising tablegen magic to do it quickly in-place? In
GCC md patterns allows C-code snippets for such cases, but in LLVM I
can not find such possibility.