"umul" is used when the insn takes two operands in A and X, and computes a value into AX. This is similar to "op2" which, in general, does AX = AX op (other register or memory). The devirtualizer will arrange for the right values to be in real registers for these.
"macax" is used when the insn pattern itself reads from two virtual registers and writes to a virtual register (i.e. V = V op V), but clobbers AX anx BC in the process. The devirutalizer does not need to devirtualize these insns.