* @brief Sort move list by weight using small fixed-size sorting networks. * * Optimized for short lists typical in move generation. Falls back to * insertion sort for other sizes. */
| 677 | * insertion sort for other sizes. |
| 678 | */ |
| 679 | auto Moves::MergeSort() -> void { |
| 680 | const int len = numMoves; |
| 681 | MoveType tmp; |
| 682 | |
| 683 | switch (len) { |
| 684 | case 12: |
| 685 | CMP_SWAP(0, 1); |
| 686 | CMP_SWAP(2, 3); |
| 687 | CMP_SWAP(4, 5); |
| 688 | CMP_SWAP(6, 7); |
| 689 | CMP_SWAP(8, 9); |
| 690 | CMP_SWAP(10, 11); |
| 691 | |
| 692 | CMP_SWAP(1, 3); |
| 693 | CMP_SWAP(5, 7); |
| 694 | CMP_SWAP(9, 11); |
| 695 | |
| 696 | CMP_SWAP(0, 2); |
| 697 | CMP_SWAP(4, 6); |
| 698 | CMP_SWAP(8, 10); |
| 699 | |
| 700 | CMP_SWAP(1, 2); |
| 701 | CMP_SWAP(5, 6); |
| 702 | CMP_SWAP(9, 10); |
| 703 | |
| 704 | CMP_SWAP(1, 5); |
| 705 | CMP_SWAP(6, 10); |
| 706 | CMP_SWAP(5, 9); |
| 707 | CMP_SWAP(2, 6); |
| 708 | CMP_SWAP(1, 5); |
| 709 | CMP_SWAP(6, 10); |
| 710 | CMP_SWAP(0, 4); |
| 711 | CMP_SWAP(7, 11); |
| 712 | CMP_SWAP(3, 7); |
| 713 | CMP_SWAP(4, 8); |
| 714 | CMP_SWAP(0, 4); |
| 715 | CMP_SWAP(7, 11); |
| 716 | CMP_SWAP(1, 4); |
| 717 | CMP_SWAP(7, 10); |
| 718 | CMP_SWAP(3, 8); |
| 719 | CMP_SWAP(2, 3); |
| 720 | CMP_SWAP(8, 9); |
| 721 | CMP_SWAP(2, 4); |
| 722 | CMP_SWAP(7, 9); |
| 723 | CMP_SWAP(3, 5); |
| 724 | CMP_SWAP(6, 8); |
| 725 | CMP_SWAP(3, 4); |
| 726 | CMP_SWAP(5, 6); |
| 727 | CMP_SWAP(7, 8); |
| 728 | break; |
| 729 | case 11: |
| 730 | CMP_SWAP(0, 1); |
| 731 | CMP_SWAP(2, 3); |
| 732 | CMP_SWAP(4, 5); |
| 733 | CMP_SWAP(6, 7); |
| 734 | CMP_SWAP(8, 9); |
| 735 | |
| 736 | CMP_SWAP(1, 3); |
nothing calls this directly
no outgoing calls
no test coverage detected