1283 static unsigned uTruths[8][8] = {
1284 { 0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA },
1285 { 0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC },
1286 { 0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0 },
1287 { 0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00 },
1288 { 0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000 },
1289 { 0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF },
1290 { 0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF },
1291 { 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }
1293 static signed char Cases[256] = {
1551 static char Perms[256][8] = {
1552 { 0, 1, 2, 3, 4, 5, 6, 7 },
1553 { 0, 1, 2, 3, 4, 5, 6, 7 },
1554 { 1, 0, 2, 3, 4, 5, 6, 7 },
1555 { 0, 1, 2, 3, 4, 5, 6, 7 },
1556 { 1, 2, 0, 3, 4, 5, 6, 7 },
1557 { 0, 2, 1, 3, 4, 5, 6, 7 },
1558 { 2, 0, 1, 3, 4, 5, 6, 7 },
1559 { 0, 1, 2, 3, 4, 5, 6, 7 },
1560 { 1, 2, 3, 0, 4, 5, 6, 7 },
1561 { 0, 2, 3, 1, 4, 5, 6, 7 },
1562 { 2, 0, 3, 1, 4, 5, 6, 7 },
1563 { 0, 1, 3, 2, 4, 5, 6, 7 },
1564 { 2, 3, 0, 1, 4, 5, 6, 7 },
1565 { 0, 3, 1, 2, 4, 5, 6, 7 },
1566 { 3, 0, 1, 2, 4, 5, 6, 7 },
1567 { 0, 1, 2, 3, 4, 5, 6, 7 },
1568 { 1, 2, 3, 4, 0, 5, 6, 7 },
1569 { 0, 2, 3, 4, 1, 5, 6, 7 },
1570 { 2, 0, 3, 4, 1, 5, 6, 7 },
1571 { 0, 1, 3, 4, 2, 5, 6, 7 },
1572 { 2, 3, 0, 4, 1, 5, 6, 7 },
1573 { 0, 3, 1, 4, 2, 5, 6, 7 },
1574 { 3, 0, 1, 4, 2, 5, 6, 7 },
1575 { 0, 1, 2, 4, 3, 5, 6, 7 },
1576 { 2, 3, 4, 0, 1, 5, 6, 7 },
1577 { 0, 3, 4, 1, 2, 5, 6, 7 },
1578 { 3, 0, 4, 1, 2, 5, 6, 7 },
1579 { 0, 1, 4, 2, 3, 5, 6, 7 },
1580 { 3, 4, 0, 1, 2, 5, 6, 7 },
1581 { 0, 4, 1, 2, 3, 5, 6, 7 },
1582 { 4, 0, 1, 2, 3, 5, 6, 7 },
1583 { 0, 1, 2, 3, 4, 5, 6, 7 },
1584 { 1, 2, 3, 4, 5, 0, 6, 7 },
1585 { 0, 2, 3, 4, 5, 1, 6, 7 },
1586 { 2, 0, 3, 4, 5, 1, 6, 7 },
1587 { 0, 1, 3, 4, 5, 2, 6, 7 },
1588 { 2, 3, 0, 4, 5, 1, 6, 7 },
1589 { 0, 3, 1, 4, 5, 2, 6, 7 },
1590 { 3, 0, 1, 4, 5, 2, 6, 7 },
1591 { 0, 1, 2, 4, 5, 3, 6, 7 },
1592 { 2, 3, 4, 0, 5, 1, 6, 7 },
1593 { 0, 3, 4, 1, 5, 2, 6, 7 },
1594 { 3, 0, 4, 1, 5, 2, 6, 7 },
1595 { 0, 1, 4, 2, 5, 3, 6, 7 },
1596 { 3, 4, 0, 1, 5, 2, 6, 7 },
1597 { 0, 4, 1, 2, 5, 3, 6, 7 },
1598 { 4, 0, 1, 2, 5, 3, 6, 7 },
1599 { 0, 1, 2, 3, 5, 4, 6, 7 },
1600 { 2, 3, 4, 5, 0, 1, 6, 7 },
1601 { 0, 3, 4, 5, 1, 2, 6, 7 },
1602 { 3, 0, 4, 5, 1, 2, 6, 7 },
1603 { 0, 1, 4, 5, 2, 3, 6, 7 },
1604 { 3, 4, 0, 5, 1, 2, 6, 7 },
1605 { 0, 4, 1, 5, 2, 3, 6, 7 },
1606 { 4, 0, 1, 5, 2, 3, 6, 7 },
1607 { 0, 1, 2, 5, 3, 4, 6, 7 },
1608 { 3, 4, 5, 0, 1, 2, 6, 7 },
1609 { 0, 4, 5, 1, 2, 3, 6, 7 },
1610 { 4, 0, 5, 1, 2, 3, 6, 7 },
1611 { 0, 1, 5, 2, 3, 4, 6, 7 },
1612 { 4, 5, 0, 1, 2, 3, 6, 7 },
1613 { 0, 5, 1, 2, 3, 4, 6, 7 },
1614 { 5, 0, 1, 2, 3, 4, 6, 7 },
1615 { 0, 1, 2, 3, 4, 5, 6, 7 },
1616 { 1, 2, 3, 4, 5, 6, 0, 7 },
1617 { 0, 2, 3, 4, 5, 6, 1, 7 },
1618 { 2, 0, 3, 4, 5, 6, 1, 7 },
1619 { 0, 1, 3, 4, 5, 6, 2, 7 },
1620 { 2, 3, 0, 4, 5, 6, 1, 7 },
1621 { 0, 3, 1, 4, 5, 6, 2, 7 },
1622 { 3, 0, 1, 4, 5, 6, 2, 7 },
1623 { 0, 1, 2, 4, 5, 6, 3, 7 },
1624 { 2, 3, 4, 0, 5, 6, 1, 7 },
1625 { 0, 3, 4, 1, 5, 6, 2, 7 },
1626 { 3, 0, 4, 1, 5, 6, 2, 7 },
1627 { 0, 1, 4, 2, 5, 6, 3, 7 },
1628 { 3, 4, 0, 1, 5, 6, 2, 7 },
1629 { 0, 4, 1, 2, 5, 6, 3, 7 },
1630 { 4, 0, 1, 2, 5, 6, 3, 7 },
1631 { 0, 1, 2, 3, 5, 6, 4, 7 },
1632 { 2, 3, 4, 5, 0, 6, 1, 7 },
1633 { 0, 3, 4, 5, 1, 6, 2, 7 },
1634 { 3, 0, 4, 5, 1, 6, 2, 7 },
1635 { 0, 1, 4, 5, 2, 6, 3, 7 },
1636 { 3, 4, 0, 5, 1, 6, 2, 7 },
1637 { 0, 4, 1, 5, 2, 6, 3, 7 },
1638 { 4, 0, 1, 5, 2, 6, 3, 7 },
1639 { 0, 1, 2, 5, 3, 6, 4, 7 },
1640 { 3, 4, 5, 0, 1, 6, 2, 7 },
1641 { 0, 4, 5, 1, 2, 6, 3, 7 },
1642 { 4, 0, 5, 1, 2, 6, 3, 7 },
1643 { 0, 1, 5, 2, 3, 6, 4, 7 },
1644 { 4, 5, 0, 1, 2, 6, 3, 7 },
1645 { 0, 5, 1, 2, 3, 6, 4, 7 },
1646 { 5, 0, 1, 2, 3, 6, 4, 7 },
1647 { 0, 1, 2, 3, 4, 6, 5, 7 },
1648 { 2, 3, 4, 5, 6, 0, 1, 7 },
1649 { 0, 3, 4, 5, 6, 1, 2, 7 },
1650 { 3, 0, 4, 5, 6, 1, 2, 7 },
1651 { 0, 1, 4, 5, 6, 2, 3, 7 },
1652 { 3, 4, 0, 5, 6, 1, 2, 7 },
1653 { 0, 4, 1, 5, 6, 2, 3, 7 },
1654 { 4, 0, 1, 5, 6, 2, 3, 7 },
1655 { 0, 1, 2, 5, 6, 3, 4, 7 },
1656 { 3, 4, 5, 0, 6, 1, 2, 7 },
1657 { 0, 4, 5, 1, 6, 2, 3, 7 },
1658 { 4, 0, 5, 1, 6, 2, 3, 7 },
1659 { 0, 1, 5, 2, 6, 3, 4, 7 },
1660 { 4, 5, 0, 1, 6, 2, 3, 7 },
1661 { 0, 5, 1, 2, 6, 3, 4, 7 },
1662 { 5, 0, 1, 2, 6, 3, 4, 7 },
1663 { 0, 1, 2, 3, 6, 4, 5, 7 },
1664 { 3, 4, 5, 6, 0, 1, 2, 7 },
1665 { 0, 4, 5, 6, 1, 2, 3, 7 },
1666 { 4, 0, 5, 6, 1, 2, 3, 7 },
1667 { 0, 1, 5, 6, 2, 3, 4, 7 },
1668 { 4, 5, 0, 6, 1, 2, 3, 7 },
1669 { 0, 5, 1, 6, 2, 3, 4, 7 },
1670 { 5, 0, 1, 6, 2, 3, 4, 7 },
1671 { 0, 1, 2, 6, 3, 4, 5, 7 },
1672 { 4, 5, 6, 0, 1, 2, 3, 7 },
1673 { 0, 5, 6, 1, 2, 3, 4, 7 },
1674 { 5, 0, 6, 1, 2, 3, 4, 7 },
1675 { 0, 1, 6, 2, 3, 4, 5, 7 },
1676 { 5, 6, 0, 1, 2, 3, 4, 7 },
1677 { 0, 6, 1, 2, 3, 4, 5, 7 },
1678 { 6, 0, 1, 2, 3, 4, 5, 7 },
1679 { 0, 1, 2, 3, 4, 5, 6, 7 },
1680 { 1, 2, 3, 4, 5, 6, 7, 0 },
1681 { 0, 2, 3, 4, 5, 6, 7, 1 },
1682 { 2, 0, 3, 4, 5, 6, 7, 1 },
1683 { 0, 1, 3, 4, 5, 6, 7, 2 },
1684 { 2, 3, 0, 4, 5, 6, 7, 1 },
1685 { 0, 3, 1, 4, 5, 6, 7, 2 },
1686 { 3, 0, 1, 4, 5, 6, 7, 2 },
1687 { 0, 1, 2, 4, 5, 6, 7, 3 },
1688 { 2, 3, 4, 0, 5, 6, 7, 1 },
1689 { 0, 3, 4, 1, 5, 6, 7, 2 },
1690 { 3, 0, 4, 1, 5, 6, 7, 2 },
1691 { 0, 1, 4, 2, 5, 6, 7, 3 },
1692 { 3, 4, 0, 1, 5, 6, 7, 2 },
1693 { 0, 4, 1, 2, 5, 6, 7, 3 },
1694 { 4, 0, 1, 2, 5, 6, 7, 3 },
1695 { 0, 1, 2, 3, 5, 6, 7, 4 },
1696 { 2, 3, 4, 5, 0, 6, 7, 1 },
1697 { 0, 3, 4, 5, 1, 6, 7, 2 },
1698 { 3, 0, 4, 5, 1, 6, 7, 2 },
1699 { 0, 1, 4, 5, 2, 6, 7, 3 },
1700 { 3, 4, 0, 5, 1, 6, 7, 2 },
1701 { 0, 4, 1, 5, 2, 6, 7, 3 },
1702 { 4, 0, 1, 5, 2, 6, 7, 3 },
1703 { 0, 1, 2, 5, 3, 6, 7, 4 },
1704 { 3, 4, 5, 0, 1, 6, 7, 2 },
1705 { 0, 4, 5, 1, 2, 6, 7, 3 },
1706 { 4, 0, 5, 1, 2, 6, 7, 3 },
1707 { 0, 1, 5, 2, 3, 6, 7, 4 },
1708 { 4, 5, 0, 1, 2, 6, 7, 3 },
1709 { 0, 5, 1, 2, 3, 6, 7, 4 },
1710 { 5, 0, 1, 2, 3, 6, 7, 4 },
1711 { 0, 1, 2, 3, 4, 6, 7, 5 },
1712 { 2, 3, 4, 5, 6, 0, 7, 1 },
1713 { 0, 3, 4, 5, 6, 1, 7, 2 },
1714 { 3, 0, 4, 5, 6, 1, 7, 2 },
1715 { 0, 1, 4, 5, 6, 2, 7, 3 },
1716 { 3, 4, 0, 5, 6, 1, 7, 2 },
1717 { 0, 4, 1, 5, 6, 2, 7, 3 },
1718 { 4, 0, 1, 5, 6, 2, 7, 3 },
1719 { 0, 1, 2, 5, 6, 3, 7, 4 },
1720 { 3, 4, 5, 0, 6, 1, 7, 2 },
1721 { 0, 4, 5, 1, 6, 2, 7, 3 },
1722 { 4, 0, 5, 1, 6, 2, 7, 3 },
1723 { 0, 1, 5, 2, 6, 3, 7, 4 },
1724 { 4, 5, 0, 1, 6, 2, 7, 3 },
1725 { 0, 5, 1, 2, 6, 3, 7, 4 },
1726 { 5, 0, 1, 2, 6, 3, 7, 4 },
1727 { 0, 1, 2, 3, 6, 4, 7, 5 },
1728 { 3, 4, 5, 6, 0, 1, 7, 2 },
1729 { 0, 4, 5, 6, 1, 2, 7, 3 },
1730 { 4, 0, 5, 6, 1, 2, 7, 3 },
1731 { 0, 1, 5, 6, 2, 3, 7, 4 },
1732 { 4, 5, 0, 6, 1, 2, 7, 3 },
1733 { 0, 5, 1, 6, 2, 3, 7, 4 },
1734 { 5, 0, 1, 6, 2, 3, 7, 4 },
1735 { 0, 1, 2, 6, 3, 4, 7, 5 },
1736 { 4, 5, 6, 0, 1, 2, 7, 3 },
1737 { 0, 5, 6, 1, 2, 3, 7, 4 },
1738 { 5, 0, 6, 1, 2, 3, 7, 4 },
1739 { 0, 1, 6, 2, 3, 4, 7, 5 },
1740 { 5, 6, 0, 1, 2, 3, 7, 4 },
1741 { 0, 6, 1, 2, 3, 4, 7, 5 },
1742 { 6, 0, 1, 2, 3, 4, 7, 5 },
1743 { 0, 1, 2, 3, 4, 5, 7, 6 },
1744 { 2, 3, 4, 5, 6, 7, 0, 1 },
1745 { 0, 3, 4, 5, 6, 7, 1, 2 },
1746 { 3, 0, 4, 5, 6, 7, 1, 2 },
1747 { 0, 1, 4, 5, 6, 7, 2, 3 },
1748 { 3, 4, 0, 5, 6, 7, 1, 2 },
1749 { 0, 4, 1, 5, 6, 7, 2, 3 },
1750 { 4, 0, 1, 5, 6, 7, 2, 3 },
1751 { 0, 1, 2, 5, 6, 7, 3, 4 },
1752 { 3, 4, 5, 0, 6, 7, 1, 2 },
1753 { 0, 4, 5, 1, 6, 7, 2, 3 },
1754 { 4, 0, 5, 1, 6, 7, 2, 3 },
1755 { 0, 1, 5, 2, 6, 7, 3, 4 },
1756 { 4, 5, 0, 1, 6, 7, 2, 3 },
1757 { 0, 5, 1, 2, 6, 7, 3, 4 },
1758 { 5, 0, 1, 2, 6, 7, 3, 4 },
1759 { 0, 1, 2, 3, 6, 7, 4, 5 },
1760 { 3, 4, 5, 6, 0, 7, 1, 2 },
1761 { 0, 4, 5, 6, 1, 7, 2, 3 },
1762 { 4, 0, 5, 6, 1, 7, 2, 3 },
1763 { 0, 1, 5, 6, 2, 7, 3, 4 },
1764 { 4, 5, 0, 6, 1, 7, 2, 3 },
1765 { 0, 5, 1, 6, 2, 7, 3, 4 },
1766 { 5, 0, 1, 6, 2, 7, 3, 4 },
1767 { 0, 1, 2, 6, 3, 7, 4, 5 },
1768 { 4, 5, 6, 0, 1, 7, 2, 3 },
1769 { 0, 5, 6, 1, 2, 7, 3, 4 },
1770 { 5, 0, 6, 1, 2, 7, 3, 4 },
1771 { 0, 1, 6, 2, 3, 7, 4, 5 },
1772 { 5, 6, 0, 1, 2, 7, 3, 4 },
1773 { 0, 6, 1, 2, 3, 7, 4, 5 },
1774 { 6, 0, 1, 2, 3, 7, 4, 5 },
1775 { 0, 1, 2, 3, 4, 7, 5, 6 },
1776 { 3, 4, 5, 6, 7, 0, 1, 2 },
1777 { 0, 4, 5, 6, 7, 1, 2, 3 },
1778 { 4, 0, 5, 6, 7, 1, 2, 3 },
1779 { 0, 1, 5, 6, 7, 2, 3, 4 },
1780 { 4, 5, 0, 6, 7, 1, 2, 3 },
1781 { 0, 5, 1, 6, 7, 2, 3, 4 },
1782 { 5, 0, 1, 6, 7, 2, 3, 4 },
1783 { 0, 1, 2, 6, 7, 3, 4, 5 },
1784 { 4, 5, 6, 0, 7, 1, 2, 3 },
1785 { 0, 5, 6, 1, 7, 2, 3, 4 },
1786 { 5, 0, 6, 1, 7, 2, 3, 4 },
1787 { 0, 1, 6, 2, 7, 3, 4, 5 },
1788 { 5, 6, 0, 1, 7, 2, 3, 4 },
1789 { 0, 6, 1, 2, 7, 3, 4, 5 },
1790 { 6, 0, 1, 2, 7, 3, 4, 5 },
1791 { 0, 1, 2, 3, 7, 4, 5, 6 },
1792 { 4, 5, 6, 7, 0, 1, 2, 3 },
1793 { 0, 5, 6, 7, 1, 2, 3, 4 },
1794 { 5, 0, 6, 7, 1, 2, 3, 4 },
1795 { 0, 1, 6, 7, 2, 3, 4, 5 },
1796 { 5, 6, 0, 7, 1, 2, 3, 4 },
1797 { 0, 6, 1, 7, 2, 3, 4, 5 },
1798 { 6, 0, 1, 7, 2, 3, 4, 5 },
1799 { 0, 1, 2, 7, 3, 4, 5, 6 },
1800 { 5, 6, 7, 0, 1, 2, 3, 4 },
1801 { 0, 6, 7, 1, 2, 3, 4, 5 },
1802 { 6, 0, 7, 1, 2, 3, 4, 5 },
1803 { 0, 1, 7, 2, 3, 4, 5, 6 },
1804 { 6, 7, 0, 1, 2, 3, 4, 5 },
1805 { 0, 7, 1, 2, 3, 4, 5, 6 },
1806 { 7, 0, 1, 2, 3, 4, 5, 6 },
1807 { 0, 1, 2, 3, 4, 5, 6, 7 }
1810 assert( uPhase > 0 && uPhase < (
unsigned)(1 << nVars) );
1813 if ( Cases[uPhase] == 0 )
1816 for ( i = 0; i <
nWords; i++ )
1817 puTruthR[i] = puTruth[i];
1822 if ( Cases[uPhase] > 0 )
1825 for ( i = 0; i <
nWords; i++ )
1826 puTruthR[i] = uTruths[(
int)Cases[uPhase]][i];
1833 int i, k, nMints, iRes;
1834 char * pPerm = Perms[uPhase];
1836 nMints = (1 << nVars);
1837 for ( i = 0; i < nMints; i++ )
1838 if ( puTruth[0] & (1 << i) )
1840 for ( iRes = 0, k = 0; k < nVars; k++ )
1841 if ( i & (1 << pPerm[k]) )
1843 puTruthR[0] |= (1 << iRes);
1850 char * pPerm = Perms[uPhase];
1851 puTruthR[0] = puTruthR[1] = 0;
1852 for ( i = 0; i < 32; i++ )
1854 if ( puTruth[0] & (1 << i) )
1856 for ( iRes = 0, k = 0; k < 6; k++ )
1857 if ( i & (1 << pPerm[k]) )
1860 puTruthR[0] |= (1 << iRes);
1862 puTruthR[1] |= (1 << (iRes-32));
1865 for ( ; i < 64; i++ )
1867 if ( puTruth[1] & (1 << (i-32)) )
1869 for ( iRes = 0, k = 0; k < 6; k++ )
1870 if ( i & (1 << pPerm[k]) )
1873 puTruthR[0] |= (1 << iRes);
1875 puTruthR[1] |= (1 << (iRes-32));
1882 int i, k, nMints, iRes;
1883 char * pPerm = Perms[uPhase];
1884 for ( i = 0; i <
nWords; i++ )
1886 nMints = (1 << nVars);
1887 for ( i = 0; i < nMints; i++ )
1888 if ( puTruth[i>>5] & (1 << (i&31)) )
1890 for ( iRes = 0, k = 0; k < 5; k++ )
1891 if ( i & (1 << pPerm[k]) )
1893 puTruthR[iRes>>5] |= (1 << (iRes&31));