-/* The problem is that we may have all three pairs used and they may
- be needed in a different order.
-
- Note: Have ex de,hl
-
- Combinations:
- hl = hl => unity, fine
- bc = bc
- de = de
-
- hl = hl hl = hl, swap de <=> bc
- bc = de
- de = bc
-
- hl = bc Worst case
- bc = de
- de = hl
-
- hl = bc de = de, swap bc <=> hl
- bc = hl
- de = de
-
- hl = de Worst case
- bc = hl
- de = bc
-
- hl = de bc = bc, swap hl <=> de
- bc = bc
- de = hl
-
- Break it down into:
- * Any pair = pair are done last
- * Any pair = iTemp are done last
- * Any swaps can be done any time
-
- A worst case:
- push p1
- p1 = p2
- p2 = p3
- pop p3
-
- So how do we detect the cases?
- How about a 3x3 matrix?
- source
- dest x x x x
- x x x x
- x x x x (Fourth for iTemp/other)
-
- First determin which mode to use by counting the number of unity and
- iTemp assigns.
- Three - any order
- Two - Assign the pair first, then the rest
- One - Swap the two, then the rest
- Zero - Worst case.
-*/