Lines Matching +full:write +full:- +full:assist

5  *  Copyright (c) 2003-2007 Jocelyn Mayer
23 #include "disas/dis-asm.h"
28 #include "cpu-models.h"
29 #include "mmu-hash32.h"
30 #include "mmu-hash64.h"
31 #include "qemu/error-report.h"
33 #include "qemu/qemu-print.h"
37 #include "hw/qdev-properties.h"
39 #include "mmu-book3s-v3.h"
47 #include "power8-pmu.h"
60 /* Altivec always uses round-to-nearest */ in vscr_init()
61 set_float_rounding_mode(float_round_nearest_even, &env->vec_status); in vscr_init()
674 #define SPR_BOOKE_IVORxx (-1) in register_BookE_sprs()
855 /* TLB assist registers */ in register_BookE206_sprs()
861 (i == 2 && (env->insns_flags & PPC_64B)) in register_BookE206_sprs()
866 if (env->nb_pids > 1) { in register_BookE206_sprs()
872 if (env->nb_pids > 2) { in register_BookE206_sprs()
892 switch (env->nb_ways) { in register_BookE206_sprs()
1646 * HEIR => SPR 339 (Power 2.05 hypv) (64-bit reg from 3.1)
1648 * perf => 768-783 (Power 2.04)
1649 * perf => 784-799 (Power 2.04)
1661 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000100; in init_excp_4xx()
1662 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_4xx()
1663 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_4xx()
1664 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_4xx()
1665 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_4xx()
1666 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_4xx()
1667 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_4xx()
1668 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_4xx()
1669 env->excp_vectors[POWERPC_EXCP_PIT] = 0x00001000; in init_excp_4xx()
1670 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00001010; in init_excp_4xx()
1671 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00001020; in init_excp_4xx()
1672 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00001100; in init_excp_4xx()
1673 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00001200; in init_excp_4xx()
1674 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00002000; in init_excp_4xx()
1675 env->ivor_mask = 0x0000FFF0UL; in init_excp_4xx()
1676 env->ivpr_mask = 0xFFFF0000UL; in init_excp_4xx()
1678 env->hreset_vector = 0xFFFFFFFCUL; in init_excp_4xx()
1685 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_MPC5xx()
1686 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_MPC5xx()
1687 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_MPC5xx()
1688 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_MPC5xx()
1689 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_MPC5xx()
1690 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_MPC5xx()
1691 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_MPC5xx()
1692 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_MPC5xx()
1693 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_MPC5xx()
1694 env->excp_vectors[POWERPC_EXCP_FPA] = 0x00000E00; in init_excp_MPC5xx()
1695 env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001000; in init_excp_MPC5xx()
1696 env->excp_vectors[POWERPC_EXCP_DABR] = 0x00001C00; in init_excp_MPC5xx()
1697 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001C00; in init_excp_MPC5xx()
1698 env->excp_vectors[POWERPC_EXCP_MEXTBR] = 0x00001E00; in init_excp_MPC5xx()
1699 env->excp_vectors[POWERPC_EXCP_NMEXTBR] = 0x00001F00; in init_excp_MPC5xx()
1700 env->ivor_mask = 0x0000FFF0UL; in init_excp_MPC5xx()
1701 env->ivpr_mask = 0xFFFF0000UL; in init_excp_MPC5xx()
1703 env->hreset_vector = 0x00000100UL; in init_excp_MPC5xx()
1710 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_MPC8xx()
1711 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_MPC8xx()
1712 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_MPC8xx()
1713 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_MPC8xx()
1714 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_MPC8xx()
1715 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_MPC8xx()
1716 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_MPC8xx()
1717 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_MPC8xx()
1718 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_MPC8xx()
1719 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_MPC8xx()
1720 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_MPC8xx()
1721 env->excp_vectors[POWERPC_EXCP_FPA] = 0x00000E00; in init_excp_MPC8xx()
1722 env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001000; in init_excp_MPC8xx()
1723 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00001100; in init_excp_MPC8xx()
1724 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00001200; in init_excp_MPC8xx()
1725 env->excp_vectors[POWERPC_EXCP_ITLBE] = 0x00001300; in init_excp_MPC8xx()
1726 env->excp_vectors[POWERPC_EXCP_DTLBE] = 0x00001400; in init_excp_MPC8xx()
1727 env->excp_vectors[POWERPC_EXCP_DABR] = 0x00001C00; in init_excp_MPC8xx()
1728 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001C00; in init_excp_MPC8xx()
1729 env->excp_vectors[POWERPC_EXCP_MEXTBR] = 0x00001E00; in init_excp_MPC8xx()
1730 env->excp_vectors[POWERPC_EXCP_NMEXTBR] = 0x00001F00; in init_excp_MPC8xx()
1731 env->ivor_mask = 0x0000FFF0UL; in init_excp_MPC8xx()
1732 env->ivpr_mask = 0xFFFF0000UL; in init_excp_MPC8xx()
1734 env->hreset_vector = 0x00000100UL; in init_excp_MPC8xx()
1741 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_G2()
1742 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_G2()
1743 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_G2()
1744 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_G2()
1745 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_G2()
1746 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_G2()
1747 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_G2()
1748 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_G2()
1749 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_G2()
1750 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000A00; in init_excp_G2()
1751 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_G2()
1752 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_G2()
1753 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000; in init_excp_G2()
1754 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100; in init_excp_G2()
1755 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; in init_excp_G2()
1756 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_G2()
1757 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_G2()
1759 env->hreset_vector = 0x00000100UL; in init_excp_G2()
1766 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000FFC; in init_excp_e200()
1767 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000; in init_excp_e200()
1768 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000000; in init_excp_e200()
1769 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000000; in init_excp_e200()
1770 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000000; in init_excp_e200()
1771 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000; in init_excp_e200()
1772 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000000; in init_excp_e200()
1773 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000000; in init_excp_e200()
1774 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000000; in init_excp_e200()
1775 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000000; in init_excp_e200()
1776 env->excp_vectors[POWERPC_EXCP_APU] = 0x00000000; in init_excp_e200()
1777 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000000; in init_excp_e200()
1778 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00000000; in init_excp_e200()
1779 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00000000; in init_excp_e200()
1780 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00000000; in init_excp_e200()
1781 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00000000; in init_excp_e200()
1782 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00000000; in init_excp_e200()
1788 env->excp_vectors[POWERPC_EXCP_SPEU] = 0x00000000; in init_excp_e200()
1789 env->excp_vectors[POWERPC_EXCP_EFPDI] = 0x00000000; in init_excp_e200()
1791 env->excp_vectors[POWERPC_EXCP_EFPRI] = 0x00000000; in init_excp_e200()
1792 env->ivor_mask = 0x0000FFF7UL; in init_excp_e200()
1793 env->ivpr_mask = ivpr_mask; in init_excp_e200()
1795 env->hreset_vector = 0xFFFFFFFCUL; in init_excp_e200()
1802 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000; in init_excp_BookE()
1803 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000000; in init_excp_BookE()
1804 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000000; in init_excp_BookE()
1805 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000000; in init_excp_BookE()
1806 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000; in init_excp_BookE()
1807 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000000; in init_excp_BookE()
1808 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000000; in init_excp_BookE()
1809 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000000; in init_excp_BookE()
1810 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000000; in init_excp_BookE()
1811 env->excp_vectors[POWERPC_EXCP_APU] = 0x00000000; in init_excp_BookE()
1812 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000000; in init_excp_BookE()
1813 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00000000; in init_excp_BookE()
1814 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00000000; in init_excp_BookE()
1815 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00000000; in init_excp_BookE()
1816 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00000000; in init_excp_BookE()
1817 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00000000; in init_excp_BookE()
1818 env->ivor_mask = 0x0000FFF0UL; in init_excp_BookE()
1819 env->ivpr_mask = 0xFFFF0000UL; in init_excp_BookE()
1821 env->hreset_vector = 0xFFFFFFFCUL; in init_excp_BookE()
1828 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_603()
1829 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_603()
1830 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_603()
1831 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_603()
1832 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_603()
1833 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_603()
1834 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_603()
1835 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_603()
1836 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_603()
1837 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_603()
1838 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_603()
1839 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000; in init_excp_603()
1840 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100; in init_excp_603()
1841 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; in init_excp_603()
1842 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_603()
1843 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_603()
1845 env->hreset_vector = 0x00000100UL; in init_excp_603()
1852 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_604()
1853 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_604()
1854 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_604()
1855 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_604()
1856 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_604()
1857 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_604()
1858 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_604()
1859 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_604()
1860 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_604()
1861 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_604()
1862 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_604()
1863 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_604()
1864 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_604()
1865 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_604()
1867 env->hreset_vector = 0x00000100UL; in init_excp_604()
1874 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_7x0()
1875 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_7x0()
1876 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_7x0()
1877 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_7x0()
1878 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_7x0()
1879 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_7x0()
1880 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_7x0()
1881 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_7x0()
1882 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_7x0()
1883 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_7x0()
1884 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_7x0()
1885 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_7x0()
1886 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_7x0()
1887 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_7x0()
1888 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; in init_excp_7x0()
1890 env->hreset_vector = 0x00000100UL; in init_excp_7x0()
1897 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_750cl()
1898 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_750cl()
1899 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_750cl()
1900 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_750cl()
1901 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_750cl()
1902 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_750cl()
1903 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_750cl()
1904 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_750cl()
1905 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_750cl()
1906 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_750cl()
1907 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_750cl()
1908 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_750cl()
1909 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_750cl()
1910 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_750cl()
1912 env->hreset_vector = 0x00000100UL; in init_excp_750cl()
1919 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_750cx()
1920 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_750cx()
1921 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_750cx()
1922 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_750cx()
1923 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_750cx()
1924 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_750cx()
1925 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_750cx()
1926 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_750cx()
1927 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_750cx()
1928 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_750cx()
1929 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_750cx()
1930 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_750cx()
1931 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_750cx()
1932 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; in init_excp_750cx()
1934 env->hreset_vector = 0x00000100UL; in init_excp_750cx()
1942 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_7x5()
1943 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_7x5()
1944 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_7x5()
1945 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_7x5()
1946 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_7x5()
1947 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_7x5()
1948 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_7x5()
1949 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_7x5()
1950 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_7x5()
1951 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_7x5()
1952 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_7x5()
1953 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_7x5()
1954 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000; in init_excp_7x5()
1955 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100; in init_excp_7x5()
1956 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200; in init_excp_7x5()
1957 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_7x5()
1958 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_7x5()
1959 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; in init_excp_7x5()
1961 env->hreset_vector = 0x00000100UL; in init_excp_7x5()
1968 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_7400()
1969 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_7400()
1970 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_7400()
1971 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_7400()
1972 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_7400()
1973 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_7400()
1974 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_7400()
1975 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_7400()
1976 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_7400()
1977 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_7400()
1978 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_7400()
1979 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_7400()
1980 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20; in init_excp_7400()
1981 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_7400()
1982 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_7400()
1983 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; in init_excp_7400()
1984 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700; in init_excp_7400()
1986 env->hreset_vector = 0x00000100UL; in init_excp_7400()
1993 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_7450()
1994 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_7450()
1995 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_7450()
1996 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_7450()
1997 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_7450()
1998 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_7450()
1999 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_7450()
2000 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_7450()
2001 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_7450()
2002 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_7450()
2003 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_7450()
2004 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_7450()
2005 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20; in init_excp_7450()
2006 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_7450()
2007 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400; in init_excp_7450()
2008 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600; in init_excp_7450()
2010 env->hreset_vector = 0x00000100UL; in init_excp_7450()
2018 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_970()
2019 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_970()
2020 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_970()
2021 env->excp_vectors[POWERPC_EXCP_DSEG] = 0x00000380; in init_excp_970()
2022 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_970()
2023 env->excp_vectors[POWERPC_EXCP_ISEG] = 0x00000480; in init_excp_970()
2024 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_970()
2025 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_970()
2026 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_970()
2027 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_970()
2028 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_970()
2029 env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980; in init_excp_970()
2030 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_970()
2031 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_970()
2032 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_970()
2033 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20; in init_excp_970()
2034 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300; in init_excp_970()
2035 env->excp_vectors[POWERPC_EXCP_MAINT] = 0x00001600; in init_excp_970()
2036 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001700; in init_excp_970()
2037 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001800; in init_excp_970()
2039 env->hreset_vector = 0x0000000000000100ULL; in init_excp_970()
2046 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100; in init_excp_POWER7()
2047 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200; in init_excp_POWER7()
2048 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300; in init_excp_POWER7()
2049 env->excp_vectors[POWERPC_EXCP_DSEG] = 0x00000380; in init_excp_POWER7()
2050 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400; in init_excp_POWER7()
2051 env->excp_vectors[POWERPC_EXCP_ISEG] = 0x00000480; in init_excp_POWER7()
2052 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500; in init_excp_POWER7()
2053 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600; in init_excp_POWER7()
2054 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700; in init_excp_POWER7()
2055 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800; in init_excp_POWER7()
2056 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900; in init_excp_POWER7()
2057 env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980; in init_excp_POWER7()
2058 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00; in init_excp_POWER7()
2059 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00; in init_excp_POWER7()
2060 env->excp_vectors[POWERPC_EXCP_HDSI] = 0x00000E00; in init_excp_POWER7()
2061 env->excp_vectors[POWERPC_EXCP_HISI] = 0x00000E20; in init_excp_POWER7()
2062 env->excp_vectors[POWERPC_EXCP_HV_EMU] = 0x00000E40; in init_excp_POWER7()
2063 env->excp_vectors[POWERPC_EXCP_HV_MAINT] = 0x00000E60; in init_excp_POWER7()
2064 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00; in init_excp_POWER7()
2065 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20; in init_excp_POWER7()
2066 env->excp_vectors[POWERPC_EXCP_VSXU] = 0x00000F40; in init_excp_POWER7()
2068 env->hreset_vector = 0x0000000000000100ULL; in init_excp_POWER7()
2077 env->excp_vectors[POWERPC_EXCP_SDOOR] = 0x00000A00; in init_excp_POWER8()
2078 env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60; in init_excp_POWER8()
2079 env->excp_vectors[POWERPC_EXCP_HV_FU] = 0x00000F80; in init_excp_POWER8()
2080 env->excp_vectors[POWERPC_EXCP_SDOOR_HV] = 0x00000E80; in init_excp_POWER8()
2083 env->excp_vectors[POWERPC_EXCP_PERFM_EBB] = 0x0; in init_excp_POWER8()
2084 env->excp_vectors[POWERPC_EXCP_EXTERNAL_EBB] = 0x0; in init_excp_POWER8()
2093 env->excp_vectors[POWERPC_EXCP_HVIRT] = 0x00000EA0; in init_excp_POWER9()
2094 env->excp_vectors[POWERPC_EXCP_SYSCALL_VECTORED] = 0x00017000; in init_excp_POWER9()
2107 if (env->spr[SPR_HID0] & 0x00E00000) { in check_pow_hid0()
2116 if (env->spr[SPR_HID0] & 0x00600000) { in check_pow_hid0_74xx()
2126 if (env->spr[SPR_HID0] & HID0_ENABLE_ATTN) { in check_attn_hid0()
2135 if (env->spr[SPR_HID0] & HID0_POWER9_ENABLE_ATTN) { in check_attn_hid0_power9()
2146 env->nb_tlb = 64; in init_tlbs_emb()
2147 env->nb_ways = 1; in init_tlbs_emb()
2148 env->tlb_type = TLB_EMB; in init_tlbs_emb()
2160 env->dcache_line_size = 32; in init_proc_405()
2161 env->icache_line_size = 32; in init_proc_405()
2174 dc->desc = "PowerPC 405";
2175 pcc->init_proc = init_proc_405;
2176 pcc->check_pow = check_pow_nocheck;
2177 pcc->check_attn = check_attn_none;
2178 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
2185 pcc->msr_mask = (1ull << MSR_WE) |
2195 pcc->mmu_model = POWERPC_MMU_SOFT_4xx;
2196 pcc->excp_model = POWERPC_EXCP_40x;
2197 pcc->bus_model = PPC_FLAGS_INPUT_405;
2198 pcc->bfd_mach = bfd_mach_ppc_403;
2199 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2229 env->dcache_line_size = 32; in init_proc_440EP()
2230 env->icache_line_size = 32; in init_proc_440EP()
2242 dc->desc = "PowerPC 440 EP";
2243 pcc->init_proc = init_proc_440EP;
2244 pcc->check_pow = check_pow_nocheck;
2245 pcc->check_attn = check_attn_none;
2246 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2256 pcc->msr_mask = (1ull << MSR_POW) |
2268 pcc->mmu_model = POWERPC_MMU_BOOKE;
2269 pcc->excp_model = POWERPC_EXCP_BOOKE;
2270 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2271 pcc->bfd_mach = bfd_mach_ppc_403;
2272 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2281 dc->desc = "PowerPC 460 EX";
2282 pcc->init_proc = init_proc_440EP;
2283 pcc->check_pow = check_pow_nocheck;
2284 pcc->check_attn = check_attn_none;
2285 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2295 pcc->msr_mask = (1ull << MSR_POW) |
2307 pcc->mmu_model = POWERPC_MMU_BOOKE;
2308 pcc->excp_model = POWERPC_EXCP_BOOKE;
2309 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2310 pcc->bfd_mach = bfd_mach_ppc_403;
2311 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2323 env->dcache_line_size = 32; in init_proc_440GP()
2324 env->icache_line_size = 32; in init_proc_440GP()
2336 dc->desc = "PowerPC 440 GP";
2337 pcc->init_proc = init_proc_440GP;
2338 pcc->check_pow = check_pow_nocheck;
2339 pcc->check_attn = check_attn_none;
2340 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2347 pcc->msr_mask = (1ull << MSR_POW) |
2359 pcc->mmu_model = POWERPC_MMU_BOOKE;
2360 pcc->excp_model = POWERPC_EXCP_BOOKE;
2361 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2362 pcc->bfd_mach = bfd_mach_ppc_403;
2363 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2393 env->dcache_line_size = 32; in init_proc_440x5()
2394 env->icache_line_size = 32; in init_proc_440x5()
2406 dc->desc = "PowerPC 440x5";
2407 pcc->init_proc = init_proc_440x5;
2408 pcc->check_pow = check_pow_nocheck;
2409 pcc->check_attn = check_attn_none;
2410 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2417 pcc->msr_mask = (1ull << MSR_POW) |
2429 pcc->mmu_model = POWERPC_MMU_BOOKE;
2430 pcc->excp_model = POWERPC_EXCP_BOOKE;
2431 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2432 pcc->bfd_mach = bfd_mach_ppc_403;
2433 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2442 dc->desc = "PowerPC 440x5 with double precision FPU";
2443 pcc->init_proc = init_proc_440x5;
2444 pcc->check_pow = check_pow_nocheck;
2445 pcc->check_attn = check_attn_none;
2446 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2455 pcc->insns_flags2 = PPC2_FP_CVT_S64;
2456 pcc->msr_mask = (1ull << MSR_POW) |
2468 pcc->mmu_model = POWERPC_MMU_BOOKE;
2469 pcc->excp_model = POWERPC_EXCP_BOOKE;
2470 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2471 pcc->bfd_mach = bfd_mach_ppc_403;
2472 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2481 env->dcache_line_size = 32; in init_proc_MPC5xx()
2482 env->icache_line_size = 32; in init_proc_MPC5xx()
2491 dc->desc = "Freescale 5xx cores (aka RCPU)"; in POWERPC_FAMILY()
2492 pcc->init_proc = init_proc_MPC5xx; in POWERPC_FAMILY()
2493 pcc->check_pow = check_pow_none; in POWERPC_FAMILY()
2494 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
2495 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | in POWERPC_FAMILY()
2499 pcc->msr_mask = (1ull << MSR_ILE) | in POWERPC_FAMILY()
2511 pcc->mmu_model = POWERPC_MMU_REAL; in POWERPC_FAMILY()
2512 pcc->excp_model = POWERPC_EXCP_6xx; in POWERPC_FAMILY()
2513 pcc->bus_model = PPC_FLAGS_INPUT_RCPU; in POWERPC_FAMILY()
2514 pcc->bfd_mach = bfd_mach_ppc_505; in POWERPC_FAMILY()
2515 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE | in POWERPC_FAMILY()
2524 env->dcache_line_size = 32; in init_proc_MPC8xx()
2525 env->icache_line_size = 32; in init_proc_MPC8xx()
2534 dc->desc = "Freescale 8xx cores (aka PowerQUICC)"; in POWERPC_FAMILY()
2535 pcc->init_proc = init_proc_MPC8xx; in POWERPC_FAMILY()
2536 pcc->check_pow = check_pow_none; in POWERPC_FAMILY()
2537 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
2538 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | in POWERPC_FAMILY()
2541 pcc->msr_mask = (1ull << MSR_ILE) | in POWERPC_FAMILY()
2553 pcc->mmu_model = POWERPC_MMU_MPC8xx; in POWERPC_FAMILY()
2554 pcc->excp_model = POWERPC_EXCP_6xx; in POWERPC_FAMILY()
2555 pcc->bus_model = PPC_FLAGS_INPUT_RCPU; in POWERPC_FAMILY()
2556 pcc->bfd_mach = bfd_mach_ppc_860; in POWERPC_FAMILY()
2557 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE | in POWERPC_FAMILY()
2561 /* Freescale 82xx cores (aka PowerQUICC-II) */
2574 env->dcache_line_size = 32; in init_proc_G2()
2575 env->icache_line_size = 32; in init_proc_G2()
2585 dc->desc = "PowerPC G2"; in POWERPC_FAMILY()
2586 pcc->init_proc = init_proc_G2; in POWERPC_FAMILY()
2587 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
2588 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
2589 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
2596 pcc->msr_mask = (1ull << MSR_POW) | in POWERPC_FAMILY()
2611 pcc->mmu_model = POWERPC_MMU_SOFT_6xx; in POWERPC_FAMILY()
2612 pcc->excp_model = POWERPC_EXCP_6xx; in POWERPC_FAMILY()
2613 pcc->bus_model = PPC_FLAGS_INPUT_6xx; in POWERPC_FAMILY()
2614 pcc->bfd_mach = bfd_mach_ppc_ec603e; in POWERPC_FAMILY()
2615 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE | in POWERPC_FAMILY()
2624 dc->desc = "PowerPC G2LE"; in POWERPC_FAMILY()
2625 pcc->init_proc = init_proc_G2; in POWERPC_FAMILY()
2626 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
2627 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
2628 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
2635 pcc->msr_mask = (1ull << MSR_POW) | in POWERPC_FAMILY()
2652 pcc->mmu_model = POWERPC_MMU_SOFT_6xx; in POWERPC_FAMILY()
2653 pcc->excp_model = POWERPC_EXCP_6xx; in POWERPC_FAMILY()
2654 pcc->bus_model = PPC_FLAGS_INPUT_6xx; in POWERPC_FAMILY()
2655 pcc->bfd_mach = bfd_mach_ppc_ec603e; in POWERPC_FAMILY()
2656 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE | in POWERPC_FAMILY()
2749 env->dcache_line_size = 32; in init_proc_e200()
2750 env->icache_line_size = 32; in init_proc_e200()
2759 dc->desc = "e200 core"; in POWERPC_FAMILY()
2760 pcc->init_proc = init_proc_e200; in POWERPC_FAMILY()
2761 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
2762 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
2771 * all SPE multiply-accumulate instructions in POWERPC_FAMILY()
2773 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | in POWERPC_FAMILY()
2780 pcc->msr_mask = (1ull << MSR_UCLE) | in POWERPC_FAMILY()
2794 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
2795 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
2796 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
2797 pcc->bfd_mach = bfd_mach_ppc_860; in POWERPC_FAMILY()
2798 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE | in POWERPC_FAMILY()
2863 env->nb_pids = 3; in init_proc_e500()
2864 env->nb_ways = 2; in init_proc_e500()
2881 env->nb_pids = 1; in init_proc_e500()
2887 env->spr[SPR_PVR]); in init_proc_e500()
2894 env->dcache_line_size = 32; in init_proc_e500()
2895 env->icache_line_size = 32; in init_proc_e500()
2899 env->dcache_line_size = 64; in init_proc_e500()
2900 env->icache_line_size = 64; in init_proc_e500()
2905 env->dcache_line_size = 32; in init_proc_e500()
2906 env->icache_line_size = 32; in init_proc_e500()
2912 env->spr[SPR_PVR]); in init_proc_e500()
3030 env->nb_tlb = 0; in init_proc_e500()
3031 env->tlb_type = TLB_MAS; in init_proc_e500()
3033 env->nb_tlb += booke206_tlb_size(env, i); in init_proc_e500()
3052 dc->desc = "e500v1 core"; in POWERPC_FAMILY()
3053 pcc->init_proc = init_proc_e500v1; in POWERPC_FAMILY()
3054 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
3055 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3056 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | in POWERPC_FAMILY()
3062 pcc->insns_flags2 = PPC2_BOOKE206; in POWERPC_FAMILY()
3063 pcc->msr_mask = (1ull << MSR_UCLE) | in POWERPC_FAMILY()
3077 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
3078 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
3079 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
3080 pcc->bfd_mach = bfd_mach_ppc_860; in POWERPC_FAMILY()
3081 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE | in POWERPC_FAMILY()
3096 dc->desc = "e500v2 core"; in POWERPC_FAMILY()
3097 pcc->init_proc = init_proc_e500v2; in POWERPC_FAMILY()
3098 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
3099 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3100 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | in POWERPC_FAMILY()
3106 pcc->insns_flags2 = PPC2_BOOKE206; in POWERPC_FAMILY()
3107 pcc->msr_mask = (1ull << MSR_UCLE) | in POWERPC_FAMILY()
3121 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
3122 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
3123 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
3124 pcc->bfd_mach = bfd_mach_ppc_860; in POWERPC_FAMILY()
3125 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE | in POWERPC_FAMILY()
3140 dc->desc = "e500mc core"; in POWERPC_FAMILY()
3141 pcc->init_proc = init_proc_e500mc; in POWERPC_FAMILY()
3142 pcc->check_pow = check_pow_none; in POWERPC_FAMILY()
3143 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3144 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB | in POWERPC_FAMILY()
3152 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL; in POWERPC_FAMILY()
3153 pcc->msr_mask = (1ull << MSR_GS) | in POWERPC_FAMILY()
3167 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
3168 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
3169 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
3171 pcc->bfd_mach = bfd_mach_ppc_e500; in POWERPC_FAMILY()
3172 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE | in POWERPC_FAMILY()
3187 dc->desc = "e5500 core"; in POWERPC_FAMILY()
3188 pcc->init_proc = init_proc_e5500; in POWERPC_FAMILY()
3189 pcc->check_pow = check_pow_none; in POWERPC_FAMILY()
3190 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3191 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB | in POWERPC_FAMILY()
3200 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL | PPC2_PERM_ISA206 | in POWERPC_FAMILY()
3202 pcc->msr_mask = (1ull << MSR_CM) | in POWERPC_FAMILY()
3217 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
3218 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
3219 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
3221 pcc->bfd_mach = bfd_mach_ppc_e500; in POWERPC_FAMILY()
3222 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE | in POWERPC_FAMILY()
3236 dc->desc = "e6500 core"; in POWERPC_FAMILY()
3237 pcc->init_proc = init_proc_e6500; in POWERPC_FAMILY()
3238 pcc->check_pow = check_pow_none; in POWERPC_FAMILY()
3239 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3240 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB | in POWERPC_FAMILY()
3249 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL | PPC2_PERM_ISA206 | in POWERPC_FAMILY()
3251 pcc->msr_mask = (1ull << MSR_CM) | in POWERPC_FAMILY()
3267 pcc->mmu_model = POWERPC_MMU_BOOKE206; in POWERPC_FAMILY()
3268 pcc->excp_model = POWERPC_EXCP_BOOKE; in POWERPC_FAMILY()
3269 pcc->bus_model = PPC_FLAGS_INPUT_BookE; in POWERPC_FAMILY()
3270 pcc->bfd_mach = bfd_mach_ppc_e500; in POWERPC_FAMILY()
3271 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE | in POWERPC_FAMILY()
3277 /* Non-embedded PowerPC */
3288 env->dcache_line_size = 32; in init_proc_603()
3289 env->icache_line_size = 32; in init_proc_603()
3299 dc->desc = "PowerPC 603";
3300 pcc->init_proc = init_proc_603;
3301 pcc->check_pow = check_pow_hid0;
3302 pcc->check_attn = check_attn_none;
3303 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3310 pcc->msr_mask = (1ull << MSR_POW) |
3326 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
3327 pcc->excp_model = POWERPC_EXCP_6xx;
3328 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3329 pcc->bfd_mach = bfd_mach_ppc_603;
3330 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
3339 dc->desc = "PowerPC 603e";
3340 pcc->init_proc = init_proc_603;
3341 pcc->check_pow = check_pow_hid0;
3342 pcc->check_attn = check_attn_none;
3343 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3350 pcc->msr_mask = (1ull << MSR_POW) |
3366 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
3367 pcc->excp_model = POWERPC_EXCP_6xx;
3368 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3369 pcc->bfd_mach = bfd_mach_ppc_ec603e;
3370 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
3385 dc->desc = "e300 core"; in POWERPC_FAMILY()
3386 pcc->init_proc = init_proc_e300; in POWERPC_FAMILY()
3387 pcc->check_pow = check_pow_hid0; in POWERPC_FAMILY()
3388 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
3389 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
3396 pcc->msr_mask = (1ull << MSR_POW) | in POWERPC_FAMILY()
3413 pcc->mmu_model = POWERPC_MMU_SOFT_6xx; in POWERPC_FAMILY()
3414 pcc->excp_model = POWERPC_EXCP_6xx; in POWERPC_FAMILY()
3415 pcc->bus_model = PPC_FLAGS_INPUT_6xx; in POWERPC_FAMILY()
3416 pcc->bfd_mach = bfd_mach_ppc_603; in POWERPC_FAMILY()
3417 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE | in POWERPC_FAMILY()
3430 env->dcache_line_size = 32; in init_proc_604()
3431 env->icache_line_size = 32; in init_proc_604()
3441 dc->desc = "PowerPC 604";
3442 pcc->init_proc = init_proc_604;
3443 pcc->check_pow = check_pow_nocheck;
3444 pcc->check_attn = check_attn_none;
3445 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3452 pcc->msr_mask = (1ull << MSR_POW) |
3468 pcc->mmu_model = POWERPC_MMU_32B;
3469 pcc->excp_model = POWERPC_EXCP_6xx;
3470 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3471 pcc->bfd_mach = bfd_mach_ppc_604;
3472 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3487 dc->desc = "PowerPC 604E";
3488 pcc->init_proc = init_proc_604E;
3489 pcc->check_pow = check_pow_nocheck;
3490 pcc->check_attn = check_attn_none;
3491 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3498 pcc->msr_mask = (1ull << MSR_POW) |
3514 pcc->mmu_model = POWERPC_MMU_32B;
3515 pcc->excp_model = POWERPC_EXCP_6xx;
3516 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3517 pcc->bfd_mach = bfd_mach_ppc_604;
3518 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3533 env->dcache_line_size = 32; in init_proc_740()
3534 env->icache_line_size = 32; in init_proc_740()
3544 dc->desc = "PowerPC 740";
3545 pcc->init_proc = init_proc_740;
3546 pcc->check_pow = check_pow_hid0;
3547 pcc->check_attn = check_attn_none;
3548 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3555 pcc->msr_mask = (1ull << MSR_POW) |
3571 pcc->mmu_model = POWERPC_MMU_32B;
3572 pcc->excp_model = POWERPC_EXCP_7xx;
3573 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3574 pcc->bfd_mach = bfd_mach_ppc_750;
3575 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3599 env->dcache_line_size = 32; in init_proc_750()
3600 env->icache_line_size = 32; in init_proc_750()
3610 dc->desc = "PowerPC 750";
3611 pcc->init_proc = init_proc_750;
3612 pcc->check_pow = check_pow_hid0;
3613 pcc->check_attn = check_attn_none;
3614 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3621 pcc->msr_mask = (1ull << MSR_POW) |
3637 pcc->mmu_model = POWERPC_MMU_32B;
3638 pcc->excp_model = POWERPC_EXCP_7xx;
3639 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3640 pcc->bfd_mach = bfd_mach_ppc_750;
3641 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3746 env->dcache_line_size = 32; in init_proc_750cl()
3747 env->icache_line_size = 32; in init_proc_750cl()
3757 dc->desc = "PowerPC 750 CL";
3758 pcc->init_proc = init_proc_750cl;
3759 pcc->check_pow = check_pow_hid0;
3760 pcc->check_attn = check_attn_none;
3800 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3807 pcc->msr_mask = (1ull << MSR_POW) |
3823 pcc->mmu_model = POWERPC_MMU_32B;
3824 pcc->excp_model = POWERPC_EXCP_7xx;
3825 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3826 pcc->bfd_mach = bfd_mach_ppc_750;
3827 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3854 env->dcache_line_size = 32; in init_proc_750cx()
3855 env->icache_line_size = 32; in init_proc_750cx()
3865 dc->desc = "PowerPC 750CX";
3866 pcc->init_proc = init_proc_750cx;
3867 pcc->check_pow = check_pow_hid0;
3868 pcc->check_attn = check_attn_none;
3869 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3876 pcc->msr_mask = (1ull << MSR_POW) |
3892 pcc->mmu_model = POWERPC_MMU_32B;
3893 pcc->excp_model = POWERPC_EXCP_7xx;
3894 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3895 pcc->bfd_mach = bfd_mach_ppc_750;
3896 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3927 env->dcache_line_size = 32; in init_proc_750fx()
3928 env->icache_line_size = 32; in init_proc_750fx()
3938 dc->desc = "PowerPC 750FX";
3939 pcc->init_proc = init_proc_750fx;
3940 pcc->check_pow = check_pow_hid0;
3941 pcc->check_attn = check_attn_none;
3942 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3949 pcc->msr_mask = (1ull << MSR_POW) |
3965 pcc->mmu_model = POWERPC_MMU_32B;
3966 pcc->excp_model = POWERPC_EXCP_7xx;
3967 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3968 pcc->bfd_mach = bfd_mach_ppc_750;
3969 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4000 env->dcache_line_size = 32; in init_proc_750gx()
4001 env->icache_line_size = 32; in init_proc_750gx()
4011 dc->desc = "PowerPC 750GX";
4012 pcc->init_proc = init_proc_750gx;
4013 pcc->check_pow = check_pow_hid0;
4014 pcc->check_attn = check_attn_none;
4015 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4022 pcc->msr_mask = (1ull << MSR_POW) |
4038 pcc->mmu_model = POWERPC_MMU_32B;
4039 pcc->excp_model = POWERPC_EXCP_7xx;
4040 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4041 pcc->bfd_mach = bfd_mach_ppc_750;
4042 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4060 env->dcache_line_size = 32; in init_proc_745()
4061 env->icache_line_size = 32; in init_proc_745()
4071 dc->desc = "PowerPC 745";
4072 pcc->init_proc = init_proc_745;
4073 pcc->check_pow = check_pow_hid0;
4074 pcc->check_attn = check_attn_none;
4075 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4082 pcc->msr_mask = (1ull << MSR_POW) |
4098 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
4099 pcc->excp_model = POWERPC_EXCP_7xx;
4100 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4101 pcc->bfd_mach = bfd_mach_ppc_750;
4102 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4117 dc->desc = "PowerPC 755";
4118 pcc->init_proc = init_proc_755;
4119 pcc->check_pow = check_pow_hid0;
4120 pcc->check_attn = check_attn_none;
4121 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4128 pcc->msr_mask = (1ull << MSR_POW) |
4144 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
4145 pcc->excp_model = POWERPC_EXCP_7xx;
4146 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4147 pcc->bfd_mach = bfd_mach_ppc_750;
4148 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4173 env->dcache_line_size = 32; in init_proc_7400()
4174 env->icache_line_size = 32; in init_proc_7400()
4184 dc->desc = "PowerPC 7400 (aka G4)";
4185 pcc->init_proc = init_proc_7400;
4186 pcc->check_pow = check_pow_hid0;
4187 pcc->check_attn = check_attn_none;
4188 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4199 pcc->msr_mask = (1ull << MSR_VR) |
4216 pcc->mmu_model = POWERPC_MMU_32B;
4217 pcc->excp_model = POWERPC_EXCP_74xx;
4218 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4219 pcc->bfd_mach = bfd_mach_ppc_7400;
4220 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4253 env->dcache_line_size = 32; in init_proc_7410()
4254 env->icache_line_size = 32; in init_proc_7410()
4264 dc->desc = "PowerPC 7410 (aka G4)";
4265 pcc->init_proc = init_proc_7410;
4266 pcc->check_pow = check_pow_hid0;
4267 pcc->check_attn = check_attn_none;
4268 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4279 pcc->msr_mask = (1ull << MSR_VR) |
4296 pcc->mmu_model = POWERPC_MMU_32B;
4297 pcc->excp_model = POWERPC_EXCP_74xx;
4298 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4299 pcc->bfd_mach = bfd_mach_ppc_7400;
4300 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4354 env->dcache_line_size = 32; in init_proc_7440()
4355 env->icache_line_size = 32; in init_proc_7440()
4365 dc->desc = "PowerPC 7440 (aka G4)";
4366 pcc->init_proc = init_proc_7440;
4367 pcc->check_pow = check_pow_hid0_74xx;
4368 pcc->check_attn = check_attn_none;
4369 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4380 pcc->msr_mask = (1ull << MSR_VR) |
4397 pcc->mmu_model = POWERPC_MMU_32B;
4398 pcc->excp_model = POWERPC_EXCP_74xx;
4399 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4400 pcc->bfd_mach = bfd_mach_ppc_7400;
4401 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4477 env->dcache_line_size = 32; in init_proc_7450()
4478 env->icache_line_size = 32; in init_proc_7450()
4488 dc->desc = "PowerPC 7450 (aka G4)";
4489 pcc->init_proc = init_proc_7450;
4490 pcc->check_pow = check_pow_hid0_74xx;
4491 pcc->check_attn = check_attn_none;
4492 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4503 pcc->msr_mask = (1ull << MSR_VR) |
4520 pcc->mmu_model = POWERPC_MMU_32B;
4521 pcc->excp_model = POWERPC_EXCP_74xx;
4522 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4523 pcc->bfd_mach = bfd_mach_ppc_7400;
4524 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4607 env->dcache_line_size = 32; in init_proc_7445()
4608 env->icache_line_size = 32; in init_proc_7445()
4618 dc->desc = "PowerPC 7445 (aka G4)";
4619 pcc->init_proc = init_proc_7445;
4620 pcc->check_pow = check_pow_hid0_74xx;
4621 pcc->check_attn = check_attn_none;
4622 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4633 pcc->msr_mask = (1ull << MSR_VR) |
4650 pcc->mmu_model = POWERPC_MMU_32B;
4651 pcc->excp_model = POWERPC_EXCP_74xx;
4652 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4653 pcc->bfd_mach = bfd_mach_ppc_7400;
4654 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4739 env->dcache_line_size = 32; in init_proc_7455()
4740 env->icache_line_size = 32; in init_proc_7455()
4750 dc->desc = "PowerPC 7455 (aka G4)";
4751 pcc->init_proc = init_proc_7455;
4752 pcc->check_pow = check_pow_hid0_74xx;
4753 pcc->check_attn = check_attn_none;
4754 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4765 pcc->msr_mask = (1ull << MSR_VR) |
4782 pcc->mmu_model = POWERPC_MMU_32B;
4783 pcc->excp_model = POWERPC_EXCP_74xx;
4784 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4785 pcc->bfd_mach = bfd_mach_ppc_7400;
4786 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4891 env->dcache_line_size = 32; in init_proc_7457()
4892 env->icache_line_size = 32; in init_proc_7457()
4902 dc->desc = "PowerPC 7457 (aka G4)";
4903 pcc->init_proc = init_proc_7457;
4904 pcc->check_pow = check_pow_hid0_74xx;
4905 pcc->check_attn = check_attn_none;
4906 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4917 pcc->msr_mask = (1ull << MSR_VR) |
4934 pcc->mmu_model = POWERPC_MMU_32B;
4935 pcc->excp_model = POWERPC_EXCP_74xx;
4936 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4937 pcc->bfd_mach = bfd_mach_ppc_7400;
4938 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
5026 env->dcache_line_size = 32; in init_proc_e600()
5027 env->icache_line_size = 32; in init_proc_e600()
5037 dc->desc = "PowerPC e600"; in POWERPC_FAMILY()
5038 pcc->init_proc = init_proc_e600; in POWERPC_FAMILY()
5039 pcc->check_pow = check_pow_hid0_74xx; in POWERPC_FAMILY()
5040 pcc->check_attn = check_attn_none; in POWERPC_FAMILY()
5041 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
5052 pcc->insns_flags2 = PPC_NONE; in POWERPC_FAMILY()
5053 pcc->msr_mask = (1ull << MSR_VR) | in POWERPC_FAMILY()
5070 pcc->mmu_model = POWERPC_MMU_32B; in POWERPC_FAMILY()
5071 pcc->excp_model = POWERPC_EXCP_74xx; in POWERPC_FAMILY()
5072 pcc->bus_model = PPC_FLAGS_INPUT_6xx; in POWERPC_FAMILY()
5073 pcc->bfd_mach = bfd_mach_ppc_7400; in POWERPC_FAMILY()
5074 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE | in POWERPC_FAMILY()
5088 if (env->spr[SPR_HID0] & (HID0_DEEPNAP | HID0_DOZE | HID0_NAP)) { in check_pow_970()
5134 if (!(env->insns_flags & PPC_ALTIVEC)) { in register_book3s_altivec_sprs()
5150 * 970: super/write and super/read in register_book3s_dbg_sprs()
5151 * powerisa 2.03..2.04: hypv/write and super/read. in register_book3s_dbg_sprs()
5152 * powerisa 2.05 and newer: hypv/write and hypv/read. in register_book3s_dbg_sprs()
5546 /* PURR & SPURR: Hack - treat these as aliases for the TB for now */ in register_book3s_purr_sprs()
5717 /* Directed Privileged Door-bell Exception State, used for IPI */ in register_power8_dpdes_sprs()
5898 /* in linux-user, setup the hash register with a random value */ in register_power10_hash_sprs()
5989 env->dcache_line_size = 128; in init_proc_970()
5990 env->icache_line_size = 128; in init_proc_970()
6002 dc->desc = "PowerPC 970";
6003 pcc->init_proc = init_proc_970;
6004 pcc->check_pow = check_pow_970;
6005 pcc->check_attn = check_attn_hid0;
6006 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
6015 pcc->insns_flags2 = PPC2_FP_CVT_S64 | PPC2_MEM_LWSYNC;
6016 pcc->msr_mask = (1ull << MSR_SF) |
6031 pcc->mmu_model = POWERPC_MMU_64B;
6033 pcc->hash64_opts = &ppc_hash64_opts_basic;
6035 pcc->excp_model = POWERPC_EXCP_970;
6036 pcc->bus_model = PPC_FLAGS_INPUT_970;
6037 pcc->bfd_mach = bfd_mach_ppc64;
6038 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
6041 pcc->l1_dcache_size = 0x8000;
6042 pcc->l1_icache_size = 0x10000;
6064 env->dcache_line_size = 128; in init_proc_power5plus()
6065 env->icache_line_size = 128; in init_proc_power5plus()
6077 dc->fw_name = "PowerPC,POWER5"; in POWERPC_FAMILY()
6078 dc->desc = "POWER5+"; in POWERPC_FAMILY()
6079 pcc->init_proc = init_proc_power5plus; in POWERPC_FAMILY()
6080 pcc->check_pow = check_pow_970; in POWERPC_FAMILY()
6081 pcc->check_attn = check_attn_hid0; in POWERPC_FAMILY()
6082 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
6093 pcc->insns_flags2 = PPC2_FP_CVT_S64 | PPC2_MEM_LWSYNC; in POWERPC_FAMILY()
6094 pcc->msr_mask = (1ull << MSR_SF) | in POWERPC_FAMILY()
6109 pcc->lpcr_mask = LPCR_RMLS | LPCR_ILE | LPCR_LPES0 | LPCR_LPES1 | in POWERPC_FAMILY()
6111 pcc->mmu_model = POWERPC_MMU_2_03; in POWERPC_FAMILY()
6113 pcc->hash64_opts = &ppc_hash64_opts_basic; in POWERPC_FAMILY()
6114 pcc->lrg_decr_bits = 32; in POWERPC_FAMILY()
6116 pcc->excp_model = POWERPC_EXCP_970; in POWERPC_FAMILY()
6117 pcc->bus_model = PPC_FLAGS_INPUT_970; in POWERPC_FAMILY()
6118 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6119 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE | in POWERPC_FAMILY()
6122 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6123 pcc->l1_icache_size = 0x10000; in POWERPC_FAMILY()
6149 env->dcache_line_size = 128; in init_proc_POWER7()
6150 env->icache_line_size = 128; in init_proc_POWER7()
6160 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK; in ppc_pvr_match_power7()
6183 dc->fw_name = "PowerPC,POWER7"; in POWERPC_FAMILY()
6184 dc->desc = "POWER7"; in POWERPC_FAMILY()
6185 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_2_06_PLUS; in POWERPC_FAMILY()
6186 pcc->pvr_match = ppc_pvr_match_power7; in POWERPC_FAMILY()
6187 pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05; in POWERPC_FAMILY()
6188 pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05; in POWERPC_FAMILY()
6189 pcc->init_proc = init_proc_POWER7; in POWERPC_FAMILY()
6190 pcc->check_pow = check_pow_nocheck; in POWERPC_FAMILY()
6191 pcc->check_attn = check_attn_hid0; in POWERPC_FAMILY()
6192 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
6205 pcc->insns_flags2 = PPC2_VSX | PPC2_DFP | PPC2_DBRX | PPC2_ISA205 | in POWERPC_FAMILY()
6210 pcc->msr_mask = (1ull << MSR_SF) | in POWERPC_FAMILY()
6226 pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_DPFD | in POWERPC_FAMILY()
6231 pcc->lpcr_pm = LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2; in POWERPC_FAMILY()
6232 pcc->mmu_model = POWERPC_MMU_2_06; in POWERPC_FAMILY()
6234 pcc->hash64_opts = &ppc_hash64_opts_POWER7; in POWERPC_FAMILY()
6235 pcc->lrg_decr_bits = 32; in POWERPC_FAMILY()
6237 pcc->excp_model = POWERPC_EXCP_POWER7; in POWERPC_FAMILY()
6238 pcc->bus_model = PPC_FLAGS_INPUT_POWER7; in POWERPC_FAMILY()
6239 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6240 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE | in POWERPC_FAMILY()
6244 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6245 pcc->l1_icache_size = 0x8000; in POWERPC_FAMILY()
6250 if (env->flags & POWERPC_FLAG_BHRB) { in bhrb_init_state()
6254 env->bhrb_num_entries = 1 << num_entries_log2; in bhrb_init_state()
6255 env->bhrb_base = (intptr_t)&env->bhrb[0]; in bhrb_init_state()
6256 env->bhrb_offset_mask = (env->bhrb_num_entries * sizeof(uint64_t)) - 1; in bhrb_init_state()
6262 if (env->flags & POWERPC_FLAG_BHRB) { in bhrb_reset_state()
6263 env->bhrb_offset = 0; in bhrb_reset_state()
6264 env->bhrb_filter = 0; in bhrb_reset_state()
6265 memset(env->bhrb, 0, sizeof(env->bhrb)); in bhrb_reset_state()
6309 env->dcache_line_size = 128; in init_proc_POWER8()
6310 env->icache_line_size = 128; in init_proc_POWER8()
6322 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK; in ppc_pvr_match_power8()
6347 dc->fw_name = "PowerPC,POWER8"; in POWERPC_FAMILY()
6348 dc->desc = "POWER8"; in POWERPC_FAMILY()
6349 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_2_07; in POWERPC_FAMILY()
6350 pcc->pvr_match = ppc_pvr_match_power8; in POWERPC_FAMILY()
6351 pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; in POWERPC_FAMILY()
6352 pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05; in POWERPC_FAMILY()
6353 pcc->init_proc = init_proc_POWER8; in POWERPC_FAMILY()
6354 pcc->check_pow = check_pow_nocheck; in POWERPC_FAMILY()
6355 pcc->check_attn = check_attn_hid0; in POWERPC_FAMILY()
6356 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_STRING | PPC_MFTB | in POWERPC_FAMILY()
6369 pcc->insns_flags2 = PPC2_VSX | PPC2_VSX207 | PPC2_DFP | PPC2_DBRX | in POWERPC_FAMILY()
6377 pcc->msr_mask = (1ull << MSR_SF) | in POWERPC_FAMILY()
6397 pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_KBV | in POWERPC_FAMILY()
6402 pcc->lpcr_pm = LPCR_P8_PECE0 | LPCR_P8_PECE1 | LPCR_P8_PECE2 | in POWERPC_FAMILY()
6404 pcc->mmu_model = POWERPC_MMU_2_07; in POWERPC_FAMILY()
6406 pcc->hash64_opts = &ppc_hash64_opts_POWER7; in POWERPC_FAMILY()
6407 pcc->lrg_decr_bits = 32; in POWERPC_FAMILY()
6408 pcc->n_host_threads = 8; in POWERPC_FAMILY()
6410 pcc->excp_model = POWERPC_EXCP_POWER8; in POWERPC_FAMILY()
6411 pcc->bus_model = PPC_FLAGS_INPUT_POWER7; in POWERPC_FAMILY()
6412 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6413 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE | in POWERPC_FAMILY()
6417 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6418 pcc->l1_icache_size = 0x8000; in POWERPC_FAMILY()
6423 * Radix pg sizes and AP encodings for dt node ibm,processor-radix-AP-encodings
6426 * x -> AP encoding
6427 * y -> radix mode supported page size (encoded as a shift)
6432 0x0000000c, /* 4K - enc: 0x0 */
6433 0xa0000010, /* 64K - enc: 0x5 */
6434 0x20000015, /* 2M - enc: 0x1 */
6435 0x4000001e /* 1G - enc: 0x2 */
6504 env->dcache_line_size = 128; in init_proc_POWER9()
6505 env->icache_line_size = 128; in init_proc_POWER9()
6517 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK; in ppc_pvr_match_power9()
6529 if ((pvr & 0x0f00) != (pcc->pvr & 0x0f00)) { in ppc_pvr_match_power9()
6537 if ((pcc->pvr & 0xf) == 0) { in ppc_pvr_match_power9()
6542 if ((pcc->pvr & 0xf) == 2) { in ppc_pvr_match_power9()
6556 dc->fw_name = "PowerPC,POWER9"; in POWERPC_FAMILY()
6557 dc->desc = "POWER9"; in POWERPC_FAMILY()
6558 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_00; in POWERPC_FAMILY()
6559 pcc->pvr_match = ppc_pvr_match_power9; in POWERPC_FAMILY()
6560 pcc->pcr_mask = PPC_PCR_MASK_POWER9; in POWERPC_FAMILY()
6561 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER9; in POWERPC_FAMILY()
6562 pcc->init_proc = init_proc_POWER9; in POWERPC_FAMILY()
6563 pcc->check_pow = check_pow_nocheck; in POWERPC_FAMILY()
6564 pcc->check_attn = check_attn_hid0_power9; in POWERPC_FAMILY()
6565 pcc->insns_flags = PPC_INSNS_FLAGS_POWER9; in POWERPC_FAMILY()
6566 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER9; in POWERPC_FAMILY()
6567 pcc->msr_mask = PPC_MSR_MASK_POWER9; in POWERPC_FAMILY()
6568 pcc->lpcr_mask = PPC_LPCR_MASK_POWER9; in POWERPC_FAMILY()
6569 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE; in POWERPC_FAMILY()
6570 pcc->mmu_model = POWERPC_MMU_3_00; in POWERPC_FAMILY()
6573 pcc->hash64_opts = &ppc_hash64_opts_POWER7; in POWERPC_FAMILY()
6574 pcc->radix_page_info = &POWER9_radix_page_info; in POWERPC_FAMILY()
6575 pcc->lrg_decr_bits = 56; in POWERPC_FAMILY()
6576 pcc->n_host_threads = 4; in POWERPC_FAMILY()
6578 pcc->excp_model = POWERPC_EXCP_POWER9; in POWERPC_FAMILY()
6579 pcc->bus_model = PPC_FLAGS_INPUT_POWER9; in POWERPC_FAMILY()
6580 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6581 pcc->flags = POWERPC_FLAGS_POWER9; in POWERPC_FAMILY()
6582 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6583 pcc->l1_icache_size = 0x8000; in POWERPC_FAMILY()
6588 * Radix pg sizes and AP encodings for dt node ibm,processor-radix-AP-encodings
6591 * x -> AP encoding
6592 * y -> radix mode supported page size (encoded as a shift)
6597 0x0000000c, /* 4K - enc: 0x0 */
6598 0xa0000010, /* 64K - enc: 0x5 */
6599 0x20000015, /* 2M - enc: 0x1 */
6600 0x4000001e /* 1G - enc: 0x2 */
6616 env->dcache_line_size = 128; in init_proc_POWER10()
6617 env->icache_line_size = 128; in init_proc_POWER10()
6629 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK; in ppc_pvr_match_power10()
6641 if ((pvr & 0x0f00) == (pcc->pvr & 0x0f00)) { in ppc_pvr_match_power10()
6654 dc->fw_name = "PowerPC,POWER10"; in POWERPC_FAMILY()
6655 dc->desc = "POWER10"; in POWERPC_FAMILY()
6656 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_10; in POWERPC_FAMILY()
6657 pcc->pvr_match = ppc_pvr_match_power10; in POWERPC_FAMILY()
6658 pcc->pcr_mask = PPC_PCR_MASK_POWER10; in POWERPC_FAMILY()
6659 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER10; in POWERPC_FAMILY()
6660 pcc->init_proc = init_proc_POWER10; in POWERPC_FAMILY()
6661 pcc->check_pow = check_pow_nocheck; in POWERPC_FAMILY()
6662 pcc->check_attn = check_attn_hid0_power9; in POWERPC_FAMILY()
6663 pcc->insns_flags = PPC_INSNS_FLAGS_POWER10; in POWERPC_FAMILY()
6664 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER10; in POWERPC_FAMILY()
6665 pcc->msr_mask = PPC_MSR_MASK_POWER10; in POWERPC_FAMILY()
6666 pcc->lpcr_mask = PPC_LPCR_MASK_POWER10; in POWERPC_FAMILY()
6668 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE; in POWERPC_FAMILY()
6669 pcc->mmu_model = POWERPC_MMU_3_00; in POWERPC_FAMILY()
6672 pcc->hash64_opts = &ppc_hash64_opts_POWER7; in POWERPC_FAMILY()
6673 pcc->radix_page_info = &POWER10_radix_page_info; in POWERPC_FAMILY()
6674 pcc->lrg_decr_bits = 56; in POWERPC_FAMILY()
6676 pcc->excp_model = POWERPC_EXCP_POWER10; in POWERPC_FAMILY()
6677 pcc->bus_model = PPC_FLAGS_INPUT_POWER9; in POWERPC_FAMILY()
6678 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6679 pcc->flags = POWERPC_FLAGS_POWER10; in POWERPC_FAMILY()
6680 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6681 pcc->l1_icache_size = 0x8000; in POWERPC_FAMILY()
6692 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK; in ppc_pvr_match_power11()
6702 if ((pvr & 0x0f00) == (pcc->pvr & 0x0f00)) { in ppc_pvr_match_power11()
6714 dc->fw_name = "PowerPC,POWER11"; in POWERPC_FAMILY()
6715 dc->desc = "POWER11"; in POWERPC_FAMILY()
6716 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_10_P11; in POWERPC_FAMILY()
6717 pcc->pvr_match = ppc_pvr_match_power11; in POWERPC_FAMILY()
6718 pcc->pcr_mask = PPC_PCR_MASK_POWER11; in POWERPC_FAMILY()
6719 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER11; in POWERPC_FAMILY()
6720 pcc->init_proc = init_proc_POWER11; in POWERPC_FAMILY()
6721 pcc->check_pow = check_pow_nocheck; in POWERPC_FAMILY()
6722 pcc->check_attn = check_attn_hid0_power9; in POWERPC_FAMILY()
6723 pcc->insns_flags = PPC_INSNS_FLAGS_POWER11; in POWERPC_FAMILY()
6724 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER11; in POWERPC_FAMILY()
6725 pcc->msr_mask = PPC_MSR_MASK_POWER11; in POWERPC_FAMILY()
6726 pcc->lpcr_mask = PPC_LPCR_MASK_POWER11; in POWERPC_FAMILY()
6728 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE; in POWERPC_FAMILY()
6729 pcc->mmu_model = POWERPC_MMU_3_00; in POWERPC_FAMILY()
6732 pcc->hash64_opts = &ppc_hash64_opts_POWER7; in POWERPC_FAMILY()
6733 pcc->radix_page_info = &POWER10_radix_page_info; in POWERPC_FAMILY()
6734 pcc->lrg_decr_bits = 56; in POWERPC_FAMILY()
6736 pcc->excp_model = POWERPC_EXCP_POWER11; in POWERPC_FAMILY()
6737 pcc->bus_model = PPC_FLAGS_INPUT_POWER9; in POWERPC_FAMILY()
6738 pcc->bfd_mach = bfd_mach_ppc64; in POWERPC_FAMILY()
6739 pcc->flags = POWERPC_FLAGS_POWER11; in POWERPC_FAMILY()
6740 pcc->l1_dcache_size = 0x8000; in POWERPC_FAMILY()
6741 pcc->l1_icache_size = 0x8000; in POWERPC_FAMILY()
6747 CPUPPCState *env = &cpu->env; in cpu_ppc_set_vhyp()
6749 cpu->vhyp = vhyp; in cpu_ppc_set_vhyp()
6750 cpu->vhyp_class = PPC_VIRTUAL_HYPERVISOR_GET_CLASS(vhyp); in cpu_ppc_set_vhyp()
6756 env->msr_mask &= ~MSR_HVB; in cpu_ppc_set_vhyp()
6761 CPUPPCState *env = &cpu->env; in cpu_ppc_set_1lpar()
6768 if (env->flags & POWERPC_FLAG_SMT) { in cpu_ppc_set_1lpar()
6769 env->flags |= POWERPC_FLAG_SMT_1LPAR; in cpu_ppc_set_1lpar()
6781 CPUPPCState *env = &cpu->env; in init_ppc_proc()
6787 env->excp_vectors[i] = (target_ulong)(-1ULL); in init_ppc_proc()
6789 env->ivor_mask = 0x00000000; in init_ppc_proc()
6790 env->ivpr_mask = 0x00000000; in init_ppc_proc()
6792 env->nb_BATs = 0; in init_ppc_proc()
6793 env->nb_tlb = 0; in init_ppc_proc()
6794 env->nb_ways = 0; in init_ppc_proc()
6795 env->tlb_type = TLB_NONE; in init_ppc_proc()
6801 (*pcc->init_proc)(env); in init_ppc_proc()
6804 if (env->msr_mask & (1 << 25)) { in init_ppc_proc()
6805 switch (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) { in init_ppc_proc()
6814 } else if (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) { in init_ppc_proc()
6819 if (env->msr_mask & (1 << 17)) { in init_ppc_proc()
6820 switch (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) { in init_ppc_proc()
6829 } else if (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) { in init_ppc_proc()
6834 if (env->msr_mask & (1 << 10)) { in init_ppc_proc()
6835 switch (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE | in init_ppc_proc()
6847 } else if (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE | in init_ppc_proc()
6854 if (env->msr_mask & (1 << 9)) { in init_ppc_proc()
6855 switch (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) { in init_ppc_proc()
6864 } else if (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) { in init_ppc_proc()
6869 if (env->msr_mask & (1 << 2)) { in init_ppc_proc()
6870 switch (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) { in init_ppc_proc()
6879 } else if (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) { in init_ppc_proc()
6884 if ((env->flags & POWERPC_FLAG_BUS_CLK) == 0) { in init_ppc_proc()
6886 "Should define the time-base and decrementer clock source\n"); in init_ppc_proc()
6891 if (env->nb_tlb) { in init_ppc_proc()
6892 switch (env->tlb_type) { in init_ppc_proc()
6895 env->tlb.tlb6 = g_new0(ppc6xx_tlb_t, 2 * env->nb_tlb); in init_ppc_proc()
6898 env->tlb.tlbe = g_new0(ppcemb_tlb_t, env->nb_tlb); in init_ppc_proc()
6901 env->tlb.tlbm = g_new0(ppcmas_tlb_t, env->nb_tlb); in init_ppc_proc()
6904 /* Pre-compute some useful values */ in init_ppc_proc()
6905 env->tlb_per_way = env->nb_tlb / env->nb_ways; in init_ppc_proc()
6908 if (env->check_pow == NULL) { in init_ppc_proc()
6913 if (env->check_attn == NULL) { in init_ppc_proc()
6924 CPUPPCState *env = &cpu->env; in ppc_cpu_realize()
6933 if (cpu->vcpu_id == UNASSIGNED_CPU_INDEX) { in ppc_cpu_realize()
6934 cpu->vcpu_id = cs->cpu_index; in ppc_cpu_realize()
6954 pcc->parent_realize(dev, errp); in ppc_cpu_realize()
6957 env->flags |= POWERPC_FLAG_SMT; in ppc_cpu_realize()
6971 pcc->parent_unrealize(dev); in ppc_cpu_unrealize()
6984 /* -cpu host does a PVR lookup during construction */ in ppc_cpu_compare_class_pvr()
6987 return -1; in ppc_cpu_compare_class_pvr()
6990 return pcc->pvr == pvr ? 0 : -1; in ppc_cpu_compare_class_pvr()
7001 pcc = POWERPC_CPU_CLASS(item->data); in ppc_cpu_class_by_pvr()
7014 /* -cpu host does a PVR lookup during construction */ in ppc_cpu_compare_class_pvr_mask()
7017 return -1; in ppc_cpu_compare_class_pvr_mask()
7020 if (pcc->pvr_match(pcc, pvr, true)) { in ppc_cpu_compare_class_pvr_mask()
7024 return -1; in ppc_cpu_compare_class_pvr_mask()
7035 pcc = POWERPC_CPU_CLASS(item->data); in ppc_cpu_class_by_pvr_mask()
7067 int len = p - name; in ppc_cpu_class_by_name()
7068 len = (len == 10) && (name[1] == 'x') ? len - 2 : len; in ppc_cpu_class_by_name()
7089 cpu_model = g_ascii_strdown(name, -1); in ppc_cpu_class_by_name()
7129 return -1; in ppc_cpu_list_compare()
7132 if (pcc_a->pvr < pcc_b->pvr) { in ppc_cpu_list_compare()
7133 return -1; in ppc_cpu_list_compare()
7134 } else if (pcc_a->pvr > pcc_b->pvr) { in ppc_cpu_list_compare()
7156 qemu_printf(" %-16s PVR %08x\n", name, pcc->pvr); in ppc_cpu_list_entry()
7159 ObjectClass *alias_oc = ppc_cpu_class_by_name(alias->model); in ppc_cpu_list_entry()
7168 if (strcmp(alias->alias, family->desc) == 0) { in ppc_cpu_list_entry()
7169 qemu_printf(" %-16s (alias for preferred %s CPU)\n", in ppc_cpu_list_entry()
7170 alias->alias, family->desc); in ppc_cpu_list_entry()
7172 qemu_printf(" %-16s (alias for %s)\n", in ppc_cpu_list_entry()
7173 alias->alias, name); in ppc_cpu_list_entry()
7199 cpu->env.nip = value; in ppc_cpu_set_pc()
7206 return cpu->env.nip; in ppc_cpu_get_pc()
7216 cpu->env.nip = data[0]; in ppc_restore_state_to_opc()
7228 return cs->interrupt_request & CPU_INTERRUPT_HARD; in ppc_cpu_has_work()
7237 CPUPPCState *env = &cpu->env; in ppc_cpu_reset_hold()
7241 if (pcc->parent_phases.hold) { in ppc_cpu_reset_hold()
7242 pcc->parent_phases.hold(obj, type); in ppc_cpu_reset_hold()
7265 msr |= (target_ulong)1 << MSR_LE; /* Little-endian user mode */ in ppc_cpu_reset_hold()
7266 if (!((env->msr_mask >> MSR_LE) & 1)) { in ppc_cpu_reset_hold()
7267 fprintf(stderr, "Selected CPU does not support little-endian.\n"); in ppc_cpu_reset_hold()
7274 if (mmu_is_64bit(env->mmu_model)) { in ppc_cpu_reset_hold()
7282 env->nip = env->hreset_vector | env->excp_prefix; in ppc_cpu_reset_hold()
7287 if (env->mmu_model != POWERPC_MMU_REAL) { in ppc_cpu_reset_hold()
7294 env->resume_as_sreset = 0; in ppc_cpu_reset_hold()
7297 env->reserve_addr = (target_ulong)-1ULL; in ppc_cpu_reset_hold()
7299 env->pending_interrupts = 0; in ppc_cpu_reset_hold()
7300 cs->exception_index = POWERPC_EXCP_NONE; in ppc_cpu_reset_hold()
7301 env->error_code = 0; in ppc_cpu_reset_hold()
7306 &env->fp_status); in ppc_cpu_reset_hold()
7307 /* Similarly for flush-to-zero */ in ppc_cpu_reset_hold()
7308 set_float_ftz_detection(float_ftz_before_rounding, &env->fp_status); in ppc_cpu_reset_hold()
7316 set_float_2nan_prop_rule(float_2nan_prop_ab, &env->fp_status); in ppc_cpu_reset_hold()
7317 set_float_2nan_prop_rule(float_2nan_prop_ab, &env->vec_status); in ppc_cpu_reset_hold()
7319 * NaN propagation for fused multiply-add: in ppc_cpu_reset_hold()
7324 set_float_3nan_prop_rule(float_3nan_prop_acb, &env->fp_status); in ppc_cpu_reset_hold()
7325 set_float_3nan_prop_rule(float_3nan_prop_acb, &env->vec_status); in ppc_cpu_reset_hold()
7331 set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status); in ppc_cpu_reset_hold()
7332 set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->vec_status); in ppc_cpu_reset_hold()
7335 set_float_default_nan_pattern(0b01000000, &env->fp_status); in ppc_cpu_reset_hold()
7336 set_float_default_nan_pattern(0b01000000, &env->vec_status); in ppc_cpu_reset_hold()
7338 for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) { in ppc_cpu_reset_hold()
7339 ppc_spr_t *spr = &env->spr_cb[i]; in ppc_cpu_reset_hold()
7341 if (!spr->name) { in ppc_cpu_reset_hold()
7344 env->spr[i] = spr->default_value; in ppc_cpu_reset_hold()
7358 return !FIELD_EX64(cpu_env(cs)->msr, MSR, LE); in ppc_cpu_is_big_endian()
7364 CPUPPCState *env = &POWERPC_CPU(obj)->env; in ppc_get_irq_stats()
7366 *irq_counts = env->excp_stats; in ppc_get_irq_stats()
7367 *nb_irqs = ARRAY_SIZE(env->excp_stats); in ppc_get_irq_stats()
7376 if (cpu->vhyp) { in ppc_cpu_exec_enter()
7377 cpu->vhyp_class->cpu_exec_enter(cpu->vhyp, cpu); in ppc_cpu_exec_enter()
7385 if (cpu->vhyp) { in ppc_cpu_exec_exit()
7386 cpu->vhyp_class->cpu_exec_exit(cpu->vhyp, cpu); in ppc_cpu_exec_exit()
7393 return (cpu_env(cs)->hflags >> HFLAGS_64) & 1 ? result : (uint32_t)result; in ppc_pointer_wrap()
7403 CPUPPCState *env = &cpu->env; in ppc_cpu_instance_init()
7405 cpu->vcpu_id = UNASSIGNED_CPU_INDEX; in ppc_cpu_instance_init()
7407 env->msr_mask = pcc->msr_mask; in ppc_cpu_instance_init()
7408 env->mmu_model = pcc->mmu_model; in ppc_cpu_instance_init()
7409 env->excp_model = pcc->excp_model; in ppc_cpu_instance_init()
7410 env->bus_model = pcc->bus_model; in ppc_cpu_instance_init()
7411 env->insns_flags = pcc->insns_flags; in ppc_cpu_instance_init()
7412 env->insns_flags2 = pcc->insns_flags2; in ppc_cpu_instance_init()
7413 env->flags = pcc->flags; in ppc_cpu_instance_init()
7414 env->bfd_mach = pcc->bfd_mach; in ppc_cpu_instance_init()
7415 env->check_pow = pcc->check_pow; in ppc_cpu_instance_init()
7416 env->check_attn = pcc->check_attn; in ppc_cpu_instance_init()
7428 env->has_hv_mode = !!(env->msr_mask & MSR_HVB); in ppc_cpu_instance_init()
7443 return pcc->pvr == pvr; in ppc_pvr_match_default()
7450 if ((env->hflags >> MSR_LE) & 1) { in ppc_disas_set_info()
7451 info->endian = BFD_ENDIAN_LITTLE; in ppc_disas_set_info()
7453 info->endian = BFD_ENDIAN_BIG; in ppc_disas_set_info()
7455 info->mach = env->bfd_mach; in ppc_disas_set_info()
7456 if (!env->bfd_mach) { in ppc_disas_set_info()
7458 info->mach = bfd_mach_ppc64; in ppc_disas_set_info()
7460 info->mach = bfd_mach_ppc; in ppc_disas_set_info()
7464 info->cap_arch = CS_ARCH_PPC; in ppc_disas_set_info()
7466 info->cap_mode = CS_MODE_64; in ppc_disas_set_info()
7471 #include "hw/core/sysemu-cpu-ops.h"
7484 #include "accel/tcg/cpu-ops.h"
7523 &pcc->parent_realize); in ppc_cpu_class_init()
7525 &pcc->parent_unrealize); in ppc_cpu_class_init()
7526 pcc->pvr_match = ppc_pvr_match_default; in ppc_cpu_class_init()
7529 &pcc->parent_phases); in ppc_cpu_class_init()
7531 cc->class_by_name = ppc_cpu_class_by_name; in ppc_cpu_class_init()
7532 cc->list_cpus = ppc_cpu_list; in ppc_cpu_class_init()
7533 cc->dump_state = ppc_cpu_dump_state; in ppc_cpu_class_init()
7534 cc->set_pc = ppc_cpu_set_pc; in ppc_cpu_class_init()
7535 cc->get_pc = ppc_cpu_get_pc; in ppc_cpu_class_init()
7536 cc->gdb_read_register = ppc_cpu_gdb_read_register; in ppc_cpu_class_init()
7537 cc->gdb_write_register = ppc_cpu_gdb_write_register; in ppc_cpu_class_init()
7539 cc->sysemu_ops = &ppc_sysemu_ops; in ppc_cpu_class_init()
7540 INTERRUPT_STATS_PROVIDER_CLASS(oc)->get_statistics = ppc_get_irq_stats; in ppc_cpu_class_init()
7548 cc->gdb_num_core_regs = 71; in ppc_cpu_class_init()
7550 cc->gdb_read_register = ppc_cpu_gdb_read_register_apple; in ppc_cpu_class_init()
7551 cc->gdb_write_register = ppc_cpu_gdb_write_register_apple; in ppc_cpu_class_init()
7552 cc->gdb_num_core_regs = 71 + 32; in ppc_cpu_class_init()
7555 cc->gdb_arch_name = ppc_gdb_arch_name; in ppc_cpu_class_init()
7557 cc->gdb_core_xml_file = "power64-core.xml"; in ppc_cpu_class_init()
7559 cc->gdb_core_xml_file = "power-core.xml"; in ppc_cpu_class_init()
7561 cc->disas_set_info = ppc_disas_set_info; in ppc_cpu_class_init()
7563 dc->fw_name = "PowerPC,UNKNOWN"; in ppc_cpu_class_init()
7566 cc->tcg_ops = &ppc_tcg_ops; in ppc_cpu_class_init()
7614 env->nip, env->lr, env->ctr, cpu_read_xer(env), in ppc_cpu_dump_state()
7615 cs->cpu_index); in ppc_cpu_dump_state()
7618 env->msr, env->spr[SPR_HID0], env->hflags, in ppc_cpu_dump_state()
7621 if (env->tb_env) { in ppc_cpu_dump_state()
7631 if ((i & (RGPL - 1)) == 0) { in ppc_cpu_dump_state()
7635 if ((i & (RGPL - 1)) == (RGPL - 1)) { in ppc_cpu_dump_state()
7641 qemu_fprintf(f, "%01x", env->crf[i]); in ppc_cpu_dump_state()
7644 char a = '-'; in ppc_cpu_dump_state()
7645 if (env->crf[i] & 0x08) { in ppc_cpu_dump_state()
7647 } else if (env->crf[i] & 0x04) { in ppc_cpu_dump_state()
7649 } else if (env->crf[i] & 0x02) { in ppc_cpu_dump_state()
7652 qemu_fprintf(f, " %c%c", a, env->crf[i] & 0x01 ? 'O' : ' '); in ppc_cpu_dump_state()
7655 (int)env->reserve_length, env->reserve_addr); in ppc_cpu_dump_state()
7659 if ((i & (RFPL - 1)) == 0) { in ppc_cpu_dump_state()
7663 if ((i & (RFPL - 1)) == (RFPL - 1)) { in ppc_cpu_dump_state()
7667 qemu_fprintf(f, "FPSCR " TARGET_FMT_lx "\n", env->fpscr); in ppc_cpu_dump_state()
7673 env->spr[SPR_SRR0], env->spr[SPR_SRR1], in ppc_cpu_dump_state()
7674 env->spr[SPR_PVR], env->spr[SPR_VRSAVE]); in ppc_cpu_dump_state()
7678 env->spr[SPR_SPRG0], env->spr[SPR_SPRG1], in ppc_cpu_dump_state()
7679 env->spr[SPR_SPRG2], env->spr[SPR_SPRG3]); in ppc_cpu_dump_state()
7683 env->spr[SPR_SPRG4], env->spr[SPR_SPRG5], in ppc_cpu_dump_state()
7684 env->spr[SPR_SPRG6], env->spr[SPR_SPRG7]); in ppc_cpu_dump_state()
7686 switch (env->excp_model) { in ppc_cpu_dump_state()
7693 env->spr[SPR_HSRR0], env->spr[SPR_HSRR1]); in ppc_cpu_dump_state()
7699 env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1], in ppc_cpu_dump_state()
7700 env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1]); in ppc_cpu_dump_state()
7704 env->spr[SPR_BOOKE_TCR], env->spr[SPR_BOOKE_TSR], in ppc_cpu_dump_state()
7705 env->spr[SPR_BOOKE_ESR], env->spr[SPR_BOOKE_DEAR]); in ppc_cpu_dump_state()
7709 env->spr[SPR_BOOKE_PIR], env->spr[SPR_BOOKE_DECAR], in ppc_cpu_dump_state()
7710 env->spr[SPR_BOOKE_IVPR], env->spr[SPR_BOOKE_EPCR]); in ppc_cpu_dump_state()
7714 env->spr[SPR_BOOKE_MCSR], env->spr[SPR_BOOKE_SPRG8], in ppc_cpu_dump_state()
7715 env->spr[SPR_BOOKE_EPR]); in ppc_cpu_dump_state()
7717 /* FSL-specific */ in ppc_cpu_dump_state()
7720 env->spr[SPR_Exxx_MCAR], env->spr[SPR_BOOKE_PID1], in ppc_cpu_dump_state()
7721 env->spr[SPR_BOOKE_PID2], env->spr[SPR_E500_SVR]); in ppc_cpu_dump_state()
7724 * IVORs are left out as they are large and do not change often -- in ppc_cpu_dump_state()
7731 env->spr[SPR_40x_TCR], env->spr[SPR_40x_TSR], in ppc_cpu_dump_state()
7732 env->spr[SPR_40x_ESR], env->spr[SPR_40x_DEAR]); in ppc_cpu_dump_state()
7736 env->spr[SPR_40x_EVPR], env->spr[SPR_40x_SRR2], in ppc_cpu_dump_state()
7737 env->spr[SPR_40x_SRR3], env->spr[SPR_40x_PID]); in ppc_cpu_dump_state()
7744 if (env->flags & POWERPC_FLAG_CFAR) { in ppc_cpu_dump_state()
7745 qemu_fprintf(f, " CFAR " TARGET_FMT_lx"\n", env->cfar); in ppc_cpu_dump_state()
7749 if (env->spr_cb[SPR_LPCR].name) { in ppc_cpu_dump_state()
7750 qemu_fprintf(f, " LPCR " TARGET_FMT_lx "\n", env->spr[SPR_LPCR]); in ppc_cpu_dump_state()
7753 switch (env->mmu_model) { in ppc_cpu_dump_state()
7763 if (env->spr_cb[SPR_SDR1].name) { /* SDR1 Exists */ in ppc_cpu_dump_state()
7764 qemu_fprintf(f, " SDR1 " TARGET_FMT_lx " ", env->spr[SPR_SDR1]); in ppc_cpu_dump_state()
7766 if (env->spr_cb[SPR_PTCR].name) { /* PTCR Exists */ in ppc_cpu_dump_state()
7767 qemu_fprintf(f, " PTCR " TARGET_FMT_lx " ", env->spr[SPR_PTCR]); in ppc_cpu_dump_state()
7770 env->spr[SPR_DAR], env->spr[SPR_DSISR]); in ppc_cpu_dump_state()
7775 env->spr[SPR_BOOKE_MAS0], env->spr[SPR_BOOKE_MAS1], in ppc_cpu_dump_state()
7776 env->spr[SPR_BOOKE_MAS2], env->spr[SPR_BOOKE_MAS3]); in ppc_cpu_dump_state()
7780 env->spr[SPR_BOOKE_MAS4], env->spr[SPR_BOOKE_MAS6], in ppc_cpu_dump_state()
7781 env->spr[SPR_BOOKE_MAS7], env->spr[SPR_BOOKE_PID]); in ppc_cpu_dump_state()
7785 env->spr[SPR_MMUCFG], env->spr[SPR_BOOKE_TLB0CFG], in ppc_cpu_dump_state()
7786 env->spr[SPR_BOOKE_TLB1CFG]); in ppc_cpu_dump_state()