Revision 0b09be2b
b/target-sparc/op_helper.c | ||
---|---|---|
1681 | 1681 |
} |
1682 | 1682 |
|
1683 | 1683 |
#ifdef TARGET_SPARC64 |
1684 |
#ifdef DEBUG_PCALL |
|
1685 |
static const char * const excp_names[0x50] = { |
|
1686 |
[TT_TFAULT] = "Instruction Access Fault", |
|
1687 |
[TT_TMISS] = "Instruction Access MMU Miss", |
|
1688 |
[TT_CODE_ACCESS] = "Instruction Access Error", |
|
1689 |
[TT_ILL_INSN] = "Illegal Instruction", |
|
1690 |
[TT_PRIV_INSN] = "Privileged Instruction", |
|
1691 |
[TT_NFPU_INSN] = "FPU Disabled", |
|
1692 |
[TT_FP_EXCP] = "FPU Exception", |
|
1693 |
[TT_TOVF] = "Tag Overflow", |
|
1694 |
[TT_CLRWIN] = "Clean Windows", |
|
1695 |
[TT_DIV_ZERO] = "Division By Zero", |
|
1696 |
[TT_DFAULT] = "Data Access Fault", |
|
1697 |
[TT_DMISS] = "Data Access MMU Miss", |
|
1698 |
[TT_DATA_ACCESS] = "Data Access Error", |
|
1699 |
[TT_DPROT] = "Data Protection Error", |
|
1700 |
[TT_UNALIGNED] = "Unaligned Memory Access", |
|
1701 |
[TT_PRIV_ACT] = "Privileged Action", |
|
1702 |
[TT_EXTINT | 0x1] = "External Interrupt 1", |
|
1703 |
[TT_EXTINT | 0x2] = "External Interrupt 2", |
|
1704 |
[TT_EXTINT | 0x3] = "External Interrupt 3", |
|
1705 |
[TT_EXTINT | 0x4] = "External Interrupt 4", |
|
1706 |
[TT_EXTINT | 0x5] = "External Interrupt 5", |
|
1707 |
[TT_EXTINT | 0x6] = "External Interrupt 6", |
|
1708 |
[TT_EXTINT | 0x7] = "External Interrupt 7", |
|
1709 |
[TT_EXTINT | 0x8] = "External Interrupt 8", |
|
1710 |
[TT_EXTINT | 0x9] = "External Interrupt 9", |
|
1711 |
[TT_EXTINT | 0xa] = "External Interrupt 10", |
|
1712 |
[TT_EXTINT | 0xb] = "External Interrupt 11", |
|
1713 |
[TT_EXTINT | 0xc] = "External Interrupt 12", |
|
1714 |
[TT_EXTINT | 0xd] = "External Interrupt 13", |
|
1715 |
[TT_EXTINT | 0xe] = "External Interrupt 14", |
|
1716 |
[TT_EXTINT | 0xf] = "External Interrupt 15", |
|
1717 |
}; |
|
1718 |
#endif |
|
1719 |
|
|
1684 | 1720 |
void do_interrupt(int intno) |
1685 | 1721 |
{ |
1686 | 1722 |
#ifdef DEBUG_PCALL |
1687 | 1723 |
if (loglevel & CPU_LOG_INT) { |
1688 | 1724 |
static int count; |
1689 |
fprintf(logfile, "%6d: v=%04x pc=%016" PRIx64 " npc=%016" PRIx64 " SP=%016" PRIx64 "\n", |
|
1690 |
count, intno, |
|
1725 |
const char *name; |
|
1726 |
|
|
1727 |
if (intno < 0 || intno >= 0x180 || (intno > 0x4f && intno < 0x80)) |
|
1728 |
name = "Unknown"; |
|
1729 |
else if (intno >= 0x100) |
|
1730 |
name = "Trap Instruction"; |
|
1731 |
else if (intno >= 0xc0) |
|
1732 |
name = "Window Fill"; |
|
1733 |
else if (intno >= 0x80) |
|
1734 |
name = "Window Spill"; |
|
1735 |
else { |
|
1736 |
name = excp_names[intno]; |
|
1737 |
if (!name) |
|
1738 |
name = "Unknown"; |
|
1739 |
} |
|
1740 |
|
|
1741 |
fprintf(logfile, "%6d: %s (v=%04x) pc=%016" PRIx64 " npc=%016" PRIx64 |
|
1742 |
" SP=%016" PRIx64 "\n", |
|
1743 |
count, name, intno, |
|
1691 | 1744 |
env->pc, |
1692 | 1745 |
env->npc, env->regwptr[6]); |
1693 | 1746 |
cpu_dump_state(env, logfile, fprintf, 0); |
... | ... | |
1740 | 1793 |
env->exception_index = 0; |
1741 | 1794 |
} |
1742 | 1795 |
#else |
1796 |
#ifdef DEBUG_PCALL |
|
1797 |
static const char * const excp_names[0x80] = { |
|
1798 |
[TT_TFAULT] = "Instruction Access Fault", |
|
1799 |
[TT_ILL_INSN] = "Illegal Instruction", |
|
1800 |
[TT_PRIV_INSN] = "Privileged Instruction", |
|
1801 |
[TT_NFPU_INSN] = "FPU Disabled", |
|
1802 |
[TT_WIN_OVF] = "Window Overflow", |
|
1803 |
[TT_WIN_UNF] = "Window Underflow", |
|
1804 |
[TT_UNALIGNED] = "Unaligned Memory Access", |
|
1805 |
[TT_FP_EXCP] = "FPU Exception", |
|
1806 |
[TT_DFAULT] = "Data Access Fault", |
|
1807 |
[TT_TOVF] = "Tag Overflow", |
|
1808 |
[TT_EXTINT | 0x1] = "External Interrupt 1", |
|
1809 |
[TT_EXTINT | 0x2] = "External Interrupt 2", |
|
1810 |
[TT_EXTINT | 0x3] = "External Interrupt 3", |
|
1811 |
[TT_EXTINT | 0x4] = "External Interrupt 4", |
|
1812 |
[TT_EXTINT | 0x5] = "External Interrupt 5", |
|
1813 |
[TT_EXTINT | 0x6] = "External Interrupt 6", |
|
1814 |
[TT_EXTINT | 0x7] = "External Interrupt 7", |
|
1815 |
[TT_EXTINT | 0x8] = "External Interrupt 8", |
|
1816 |
[TT_EXTINT | 0x9] = "External Interrupt 9", |
|
1817 |
[TT_EXTINT | 0xa] = "External Interrupt 10", |
|
1818 |
[TT_EXTINT | 0xb] = "External Interrupt 11", |
|
1819 |
[TT_EXTINT | 0xc] = "External Interrupt 12", |
|
1820 |
[TT_EXTINT | 0xd] = "External Interrupt 13", |
|
1821 |
[TT_EXTINT | 0xe] = "External Interrupt 14", |
|
1822 |
[TT_EXTINT | 0xf] = "External Interrupt 15", |
|
1823 |
[TT_TOVF] = "Tag Overflow", |
|
1824 |
[TT_CODE_ACCESS] = "Instruction Access Error", |
|
1825 |
[TT_DATA_ACCESS] = "Data Access Error", |
|
1826 |
[TT_DIV_ZERO] = "Division By Zero", |
|
1827 |
[TT_NCP_INSN] = "Coprocessor Disabled", |
|
1828 |
}; |
|
1829 |
#endif |
|
1830 |
|
|
1743 | 1831 |
void do_interrupt(int intno) |
1744 | 1832 |
{ |
1745 | 1833 |
int cwp; |
... | ... | |
1747 | 1835 |
#ifdef DEBUG_PCALL |
1748 | 1836 |
if (loglevel & CPU_LOG_INT) { |
1749 | 1837 |
static int count; |
1750 |
fprintf(logfile, "%6d: v=%02x pc=%08x npc=%08x SP=%08x\n", |
|
1751 |
count, intno, |
|
1838 |
const char *name; |
|
1839 |
|
|
1840 |
if (intno < 0 || intno >= 0x100) |
|
1841 |
name = "Unknown"; |
|
1842 |
else if (intno >= 0x80) |
|
1843 |
name = "Trap Instruction"; |
|
1844 |
else { |
|
1845 |
name = excp_names[intno]; |
|
1846 |
if (!name) |
|
1847 |
name = "Unknown"; |
|
1848 |
} |
|
1849 |
|
|
1850 |
fprintf(logfile, "%6d: %s (v=%02x) pc=%08x npc=%08x SP=%08x\n", |
|
1851 |
count, name, intno, |
|
1752 | 1852 |
env->pc, |
1753 | 1853 |
env->npc, env->regwptr[6]); |
1754 | 1854 |
cpu_dump_state(env, logfile, fprintf, 0); |
Also available in: Unified diff