Gentlepeople,
I have a two-operand divide instruction that takes a double length dividend in
a register pair, and produces the quotient in the first register and remainder
in the second.
How do I write a divmod pattern for that? The quotient is easy enough, I write
a match_operand for that register and a matching constraint ("0") for the input
dividend. But what about the remainder? The remainder appears in a register
that isn't explicitly mentioned in the RTL (it's the regnum one higher than the
quotient, or if you like, the second subreg of the input (dividend) register.
I can make it a define_expand that adds a move from the remainder register into
a new register which is the output operand, and count on the optimizer to
optimize away that move. Is that the best answer? The current "mod" pattern
does that, and I could keep that approach.
paul