Revision a5a52cf2 target-sparc/op_helper.c
b/target-sparc/op_helper.c | ||
---|---|---|
1649 | 1649 |
} |
1650 | 1650 |
case 0x51: // I-MMU 8k TSB pointer |
1651 | 1651 |
case 0x52: // I-MMU 64k TSB pointer |
1652 |
case 0x55: // I-MMU data access |
|
1653 | 1652 |
// XXX |
1654 | 1653 |
break; |
1654 |
case 0x55: // I-MMU data access |
|
1655 |
{ |
|
1656 |
int reg = (addr >> 3) & 0x3f; |
|
1657 |
|
|
1658 |
ret = env->itlb_tte[reg]; |
|
1659 |
break; |
|
1660 |
} |
|
1655 | 1661 |
case 0x56: // I-MMU tag read |
1656 | 1662 |
{ |
1657 | 1663 |
unsigned int i; |
1658 | 1664 |
|
1659 | 1665 |
for (i = 0; i < 64; i++) { |
1660 | 1666 |
// Valid, ctx match, vaddr match |
1661 |
if ((env->itlb_tte[i] & 0x8000000000000000ULL) != 0 && |
|
1662 |
env->itlb_tag[i] == addr) { |
|
1663 |
ret = env->itlb_tag[i]; |
|
1664 |
break; |
|
1667 |
if ((env->itlb_tte[i] & 0x8000000000000000ULL) != 0) { |
|
1668 |
uint64_t mask; |
|
1669 |
|
|
1670 |
switch ((env->itlb_tte[i] >> 61) & 3) { |
|
1671 |
default: |
|
1672 |
case 0x0: |
|
1673 |
mask = 0xffffffffffffffff; |
|
1674 |
break; |
|
1675 |
case 0x1: |
|
1676 |
mask = 0xffffffffffff0fff; |
|
1677 |
break; |
|
1678 |
case 0x2: |
|
1679 |
mask = 0xfffffffffff80fff; |
|
1680 |
break; |
|
1681 |
case 0x3: |
|
1682 |
mask = 0xffffffffffc00fff; |
|
1683 |
break; |
|
1684 |
} |
|
1685 |
if ((env->itlb_tag[i] & mask) == (addr & mask)) { |
|
1686 |
ret = env->itlb_tte[i]; |
|
1687 |
break; |
|
1688 |
} |
|
1665 | 1689 |
} |
1666 | 1690 |
} |
1667 | 1691 |
break; |
... | ... | |
1673 | 1697 |
ret = env->dmmuregs[reg]; |
1674 | 1698 |
break; |
1675 | 1699 |
} |
1700 |
case 0x5d: // D-MMU data access |
|
1701 |
{ |
|
1702 |
int reg = (addr >> 3) & 0x3f; |
|
1703 |
|
|
1704 |
ret = env->dtlb_tte[reg]; |
|
1705 |
break; |
|
1706 |
} |
|
1676 | 1707 |
case 0x5e: // D-MMU tag read |
1677 | 1708 |
{ |
1678 | 1709 |
unsigned int i; |
1679 | 1710 |
|
1680 | 1711 |
for (i = 0; i < 64; i++) { |
1681 | 1712 |
// Valid, ctx match, vaddr match |
1682 |
if ((env->dtlb_tte[i] & 0x8000000000000000ULL) != 0 && |
|
1683 |
env->dtlb_tag[i] == addr) { |
|
1684 |
ret = env->dtlb_tag[i]; |
|
1685 |
break; |
|
1713 |
if ((env->dtlb_tte[i] & 0x8000000000000000ULL) != 0) { |
|
1714 |
uint64_t mask; |
|
1715 |
|
|
1716 |
switch ((env->dtlb_tte[i] >> 61) & 3) { |
|
1717 |
default: |
|
1718 |
case 0x0: |
|
1719 |
mask = 0xffffffffffffffff; |
|
1720 |
break; |
|
1721 |
case 0x1: |
|
1722 |
mask = 0xffffffffffff0fff; |
|
1723 |
break; |
|
1724 |
case 0x2: |
|
1725 |
mask = 0xfffffffffff80fff; |
|
1726 |
break; |
|
1727 |
case 0x3: |
|
1728 |
mask = 0xffffffffffc00fff; |
|
1729 |
break; |
|
1730 |
} |
|
1731 |
if ((env->dtlb_tag[i] & mask) == (addr & mask)) { |
|
1732 |
ret = env->dtlb_tte[i]; |
|
1733 |
break; |
|
1734 |
} |
|
1686 | 1735 |
} |
1687 | 1736 |
} |
1688 | 1737 |
break; |
1689 | 1738 |
} |
1690 | 1739 |
case 0x46: // D-cache data |
1691 | 1740 |
case 0x47: // D-cache tag access |
1741 |
case 0x4b: // E-cache error enable |
|
1742 |
case 0x4c: // E-cache asynchronous fault status |
|
1743 |
case 0x4d: // E-cache asynchronous fault address |
|
1692 | 1744 |
case 0x4e: // E-cache tag data |
1693 | 1745 |
case 0x66: // I-cache instruction access |
1694 | 1746 |
case 0x67: // I-cache tag access |
... | ... | |
1700 | 1752 |
case 0x59: // D-MMU 8k TSB pointer |
1701 | 1753 |
case 0x5a: // D-MMU 64k TSB pointer |
1702 | 1754 |
case 0x5b: // D-MMU data pointer |
1703 |
case 0x5d: // D-MMU data access |
|
1704 | 1755 |
case 0x48: // Interrupt dispatch, RO |
1705 | 1756 |
case 0x49: // Interrupt data receive |
1706 | 1757 |
case 0x7f: // Incoming interrupt vector, RO |
... | ... | |
2052 | 2103 |
return; |
2053 | 2104 |
case 0x46: // D-cache data |
2054 | 2105 |
case 0x47: // D-cache tag access |
2106 |
case 0x4b: // E-cache error enable |
|
2107 |
case 0x4c: // E-cache asynchronous fault status |
|
2108 |
case 0x4d: // E-cache asynchronous fault address |
|
2055 | 2109 |
case 0x4e: // E-cache tag data |
2056 | 2110 |
case 0x66: // I-cache instruction access |
2057 | 2111 |
case 0x67: // I-cache tag access |
Also available in: Unified diff