aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/mm')
-rw-r--r--arch/mips/mm/Makefile10
-rw-r--r--arch/mips/mm/c-r4k.c43
-rw-r--r--arch/mips/mm/dma-default.c5
-rw-r--r--arch/mips/mm/gup.c2
-rw-r--r--arch/mips/mm/init.c2
-rw-r--r--arch/mips/mm/ioremap.c18
-rw-r--r--arch/mips/mm/sc-r5k.c2
-rw-r--r--arch/mips/mm/tlb-r4k.c2
-rw-r--r--arch/mips/mm/tlbex.c18
-rw-r--r--arch/mips/mm/uasm-mips.c2
-rw-r--r--arch/mips/mm/uasm.c14
11 files changed, 87 insertions, 31 deletions
diff --git a/arch/mips/mm/Makefile b/arch/mips/mm/Makefile
index 7f4f93ab22b7..67ede4ef9b8d 100644
--- a/arch/mips/mm/Makefile
+++ b/arch/mips/mm/Makefile
@@ -4,7 +4,13 @@
4 4
5obj-y += cache.o dma-default.o extable.o fault.o \ 5obj-y += cache.o dma-default.o extable.o fault.o \
6 gup.o init.o mmap.o page.o page-funcs.o \ 6 gup.o init.o mmap.o page.o page-funcs.o \
7 tlbex.o tlbex-fault.o tlb-funcs.o uasm-mips.o 7 tlbex.o tlbex-fault.o tlb-funcs.o
8
9ifdef CONFIG_CPU_MICROMIPS
10obj-y += uasm-micromips.o
11else
12obj-y += uasm-mips.o
13endif
8 14
9obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o 15obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
10obj-$(CONFIG_64BIT) += pgtable-64.o 16obj-$(CONFIG_64BIT) += pgtable-64.o
@@ -22,5 +28,3 @@ obj-$(CONFIG_IP22_CPU_SCACHE) += sc-ip22.o
22obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o 28obj-$(CONFIG_R5000_CPU_SCACHE) += sc-r5k.o
23obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o 29obj-$(CONFIG_RM7000_CPU_SCACHE) += sc-rm7k.o
24obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o 30obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o
25
26obj-$(CONFIG_SYS_SUPPORTS_MICROMIPS) += uasm-micromips.o
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index fbcd8674ff1d..dd261df005c2 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -917,6 +917,18 @@ static inline void alias_74k_erratum(struct cpuinfo_mips *c)
917 } 917 }
918} 918}
919 919
920static void b5k_instruction_hazard(void)
921{
922 __sync();
923 __sync();
924 __asm__ __volatile__(
925 " nop; nop; nop; nop; nop; nop; nop; nop\n"
926 " nop; nop; nop; nop; nop; nop; nop; nop\n"
927 " nop; nop; nop; nop; nop; nop; nop; nop\n"
928 " nop; nop; nop; nop; nop; nop; nop; nop\n"
929 : : : "memory");
930}
931
920static char *way_string[] = { NULL, "direct mapped", "2-way", 932static char *way_string[] = { NULL, "direct mapped", "2-way",
921 "3-way", "4-way", "5-way", "6-way", "7-way", "8-way" 933 "3-way", "4-way", "5-way", "6-way", "7-way", "8-way"
922}; 934};
@@ -1683,6 +1695,37 @@ void r4k_cache_init(void)
1683 1695
1684 coherency_setup(); 1696 coherency_setup();
1685 board_cache_error_setup = r4k_cache_error_setup; 1697 board_cache_error_setup = r4k_cache_error_setup;
1698
1699 /*
1700 * Per-CPU overrides
1701 */
1702 switch (current_cpu_type()) {
1703 case CPU_BMIPS4350:
1704 case CPU_BMIPS4380:
1705 /* No IPI is needed because all CPUs share the same D$ */
1706 flush_data_cache_page = r4k_blast_dcache_page;
1707 break;
1708 case CPU_BMIPS5000:
1709 /* We lose our superpowers if L2 is disabled */
1710 if (c->scache.flags & MIPS_CACHE_NOT_PRESENT)
1711 break;
1712
1713 /* I$ fills from D$ just by emptying the write buffers */
1714 flush_cache_page = (void *)b5k_instruction_hazard;
1715 flush_cache_range = (void *)b5k_instruction_hazard;
1716 flush_cache_sigtramp = (void *)b5k_instruction_hazard;
1717 local_flush_data_cache_page = (void *)b5k_instruction_hazard;
1718 flush_data_cache_page = (void *)b5k_instruction_hazard;
1719 flush_icache_range = (void *)b5k_instruction_hazard;
1720 local_flush_icache_range = (void *)b5k_instruction_hazard;
1721
1722 /* Cache aliases are handled in hardware; allow HIGHMEM */
1723 current_cpu_data.dcache.flags &= ~MIPS_CACHE_ALIASES;
1724
1725 /* Optimization: an L2 flush implicitly flushes the L1 */
1726 current_cpu_data.options |= MIPS_CPU_INCLUSIVE_CACHES;
1727 break;
1728 }
1686} 1729}
1687 1730
1688static int r4k_cache_pm_notifier(struct notifier_block *self, unsigned long cmd, 1731static int r4k_cache_pm_notifier(struct notifier_block *self, unsigned long cmd,
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index 33ba3c558fe4..af5f046e627e 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -61,6 +61,11 @@ static inline struct page *dma_addr_to_page(struct device *dev,
61 * Warning on the terminology - Linux calls an uncached area coherent; 61 * Warning on the terminology - Linux calls an uncached area coherent;
62 * MIPS terminology calls memory areas with hardware maintained coherency 62 * MIPS terminology calls memory areas with hardware maintained coherency
63 * coherent. 63 * coherent.
64 *
65 * Note that the R14000 and R16000 should also be checked for in this
66 * condition. However this function is only called on non-I/O-coherent
67 * systems and only the R10000 and R12000 are used in such systems, the
68 * SGI IP28 Indigo² rsp. SGI IP32 aka O2.
64 */ 69 */
65static inline int cpu_needs_post_dma_flush(struct device *dev) 70static inline int cpu_needs_post_dma_flush(struct device *dev)
66{ 71{
diff --git a/arch/mips/mm/gup.c b/arch/mips/mm/gup.c
index 06ce17c2a905..7cba480568c8 100644
--- a/arch/mips/mm/gup.c
+++ b/arch/mips/mm/gup.c
@@ -17,7 +17,7 @@
17 17
18static inline pte_t gup_get_pte(pte_t *ptep) 18static inline pte_t gup_get_pte(pte_t *ptep)
19{ 19{
20#if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) 20#if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
21 pte_t pte; 21 pte_t pte;
22 22
23retry: 23retry:
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index f42e35e42790..448cde372af0 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -95,7 +95,7 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)
95 idx += in_interrupt() ? FIX_N_COLOURS : 0; 95 idx += in_interrupt() ? FIX_N_COLOURS : 0;
96 vaddr = __fix_to_virt(FIX_CMAP_END - idx); 96 vaddr = __fix_to_virt(FIX_CMAP_END - idx);
97 pte = mk_pte(page, prot); 97 pte = mk_pte(page, prot);
98#if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) 98#if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
99 entrylo = pte.pte_high; 99 entrylo = pte.pte_high;
100#else 100#else
101 entrylo = pte_to_entrylo(pte_val(pte)); 101 entrylo = pte_to_entrylo(pte_val(pte));
diff --git a/arch/mips/mm/ioremap.c b/arch/mips/mm/ioremap.c
index 7f840bc08abf..8d5008cbdc0f 100644
--- a/arch/mips/mm/ioremap.c
+++ b/arch/mips/mm/ioremap.c
@@ -17,9 +17,9 @@
17#include <asm/tlbflush.h> 17#include <asm/tlbflush.h>
18 18
19static inline void remap_area_pte(pte_t * pte, unsigned long address, 19static inline void remap_area_pte(pte_t * pte, unsigned long address,
20 phys_t size, phys_t phys_addr, unsigned long flags) 20 phys_addr_t size, phys_addr_t phys_addr, unsigned long flags)
21{ 21{
22 phys_t end; 22 phys_addr_t end;
23 unsigned long pfn; 23 unsigned long pfn;
24 pgprot_t pgprot = __pgprot(_PAGE_GLOBAL | _PAGE_PRESENT | __READABLE 24 pgprot_t pgprot = __pgprot(_PAGE_GLOBAL | _PAGE_PRESENT | __READABLE
25 | __WRITEABLE | flags); 25 | __WRITEABLE | flags);
@@ -43,9 +43,9 @@ static inline void remap_area_pte(pte_t * pte, unsigned long address,
43} 43}
44 44
45static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, 45static inline int remap_area_pmd(pmd_t * pmd, unsigned long address,
46 phys_t size, phys_t phys_addr, unsigned long flags) 46 phys_addr_t size, phys_addr_t phys_addr, unsigned long flags)
47{ 47{
48 phys_t end; 48 phys_addr_t end;
49 49
50 address &= ~PGDIR_MASK; 50 address &= ~PGDIR_MASK;
51 end = address + size; 51 end = address + size;
@@ -64,8 +64,8 @@ static inline int remap_area_pmd(pmd_t * pmd, unsigned long address,
64 return 0; 64 return 0;
65} 65}
66 66
67static int remap_area_pages(unsigned long address, phys_t phys_addr, 67static int remap_area_pages(unsigned long address, phys_addr_t phys_addr,
68 phys_t size, unsigned long flags) 68 phys_addr_t size, unsigned long flags)
69{ 69{
70 int error; 70 int error;
71 pgd_t * dir; 71 pgd_t * dir;
@@ -111,13 +111,13 @@ static int remap_area_pages(unsigned long address, phys_t phys_addr,
111 * caller shouldn't need to know that small detail. 111 * caller shouldn't need to know that small detail.
112 */ 112 */
113 113
114#define IS_LOW512(addr) (!((phys_t)(addr) & (phys_t) ~0x1fffffffULL)) 114#define IS_LOW512(addr) (!((phys_addr_t)(addr) & (phys_addr_t) ~0x1fffffffULL))
115 115
116void __iomem * __ioremap(phys_t phys_addr, phys_t size, unsigned long flags) 116void __iomem * __ioremap(phys_addr_t phys_addr, phys_addr_t size, unsigned long flags)
117{ 117{
118 struct vm_struct * area; 118 struct vm_struct * area;
119 unsigned long offset; 119 unsigned long offset;
120 phys_t last_addr; 120 phys_addr_t last_addr;
121 void * addr; 121 void * addr;
122 122
123 phys_addr = fixup_bigphys_addr(phys_addr, size); 123 phys_addr = fixup_bigphys_addr(phys_addr, size);
diff --git a/arch/mips/mm/sc-r5k.c b/arch/mips/mm/sc-r5k.c
index 0216ed6eaa2a..751b5cd18bf2 100644
--- a/arch/mips/mm/sc-r5k.c
+++ b/arch/mips/mm/sc-r5k.c
@@ -81,7 +81,7 @@ static inline int __init r5k_sc_probe(void)
81 unsigned long config = read_c0_config(); 81 unsigned long config = read_c0_config();
82 82
83 if (config & CONF_SC) 83 if (config & CONF_SC)
84 return(0); 84 return 0;
85 85
86 scache_size = (512 * 1024) << ((config & R5K_CONF_SS) >> 20); 86 scache_size = (512 * 1024) << ((config & R5K_CONF_SS) >> 20);
87 87
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
index c3917e251f59..e90b2e899291 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
@@ -332,7 +332,7 @@ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte)
332 { 332 {
333 ptep = pte_offset_map(pmdp, address); 333 ptep = pte_offset_map(pmdp, address);
334 334
335#if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) 335#if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
336 write_c0_entrylo0(ptep->pte_high); 336 write_c0_entrylo0(ptep->pte_high);
337 ptep++; 337 ptep++;
338 write_c0_entrylo1(ptep->pte_high); 338 write_c0_entrylo1(ptep->pte_high);
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index e3328a96e809..3978a3d81366 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -637,7 +637,7 @@ static __maybe_unused void build_convert_pte_to_entrylo(u32 **p,
637 if (cpu_has_rixi) { 637 if (cpu_has_rixi) {
638 UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL)); 638 UASM_i_ROTR(p, reg, reg, ilog2(_PAGE_GLOBAL));
639 } else { 639 } else {
640#ifdef CONFIG_64BIT_PHYS_ADDR 640#ifdef CONFIG_PHYS_ADDR_T_64BIT
641 uasm_i_dsrl_safe(p, reg, reg, ilog2(_PAGE_GLOBAL)); 641 uasm_i_dsrl_safe(p, reg, reg, ilog2(_PAGE_GLOBAL));
642#else 642#else
643 UASM_i_SRL(p, reg, reg, ilog2(_PAGE_GLOBAL)); 643 UASM_i_SRL(p, reg, reg, ilog2(_PAGE_GLOBAL));
@@ -1009,7 +1009,7 @@ static void build_update_entries(u32 **p, unsigned int tmp, unsigned int ptep)
1009 * 64bit address support (36bit on a 32bit CPU) in a 32bit 1009 * 64bit address support (36bit on a 32bit CPU) in a 32bit
1010 * Kernel is a special case. Only a few CPUs use it. 1010 * Kernel is a special case. Only a few CPUs use it.
1011 */ 1011 */
1012#ifdef CONFIG_64BIT_PHYS_ADDR 1012#ifdef CONFIG_PHYS_ADDR_T_64BIT
1013 if (cpu_has_64bits) { 1013 if (cpu_has_64bits) {
1014 uasm_i_ld(p, tmp, 0, ptep); /* get even pte */ 1014 uasm_i_ld(p, tmp, 0, ptep); /* get even pte */
1015 uasm_i_ld(p, ptep, sizeof(pte_t), ptep); /* get odd pte */ 1015 uasm_i_ld(p, ptep, sizeof(pte_t), ptep); /* get odd pte */
@@ -1510,14 +1510,14 @@ static void
1510iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr) 1510iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr)
1511{ 1511{
1512#ifdef CONFIG_SMP 1512#ifdef CONFIG_SMP
1513# ifdef CONFIG_64BIT_PHYS_ADDR 1513# ifdef CONFIG_PHYS_ADDR_T_64BIT
1514 if (cpu_has_64bits) 1514 if (cpu_has_64bits)
1515 uasm_i_lld(p, pte, 0, ptr); 1515 uasm_i_lld(p, pte, 0, ptr);
1516 else 1516 else
1517# endif 1517# endif
1518 UASM_i_LL(p, pte, 0, ptr); 1518 UASM_i_LL(p, pte, 0, ptr);
1519#else 1519#else
1520# ifdef CONFIG_64BIT_PHYS_ADDR 1520# ifdef CONFIG_PHYS_ADDR_T_64BIT
1521 if (cpu_has_64bits) 1521 if (cpu_has_64bits)
1522 uasm_i_ld(p, pte, 0, ptr); 1522 uasm_i_ld(p, pte, 0, ptr);
1523 else 1523 else
@@ -1530,13 +1530,13 @@ static void
1530iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr, 1530iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
1531 unsigned int mode) 1531 unsigned int mode)
1532{ 1532{
1533#ifdef CONFIG_64BIT_PHYS_ADDR 1533#ifdef CONFIG_PHYS_ADDR_T_64BIT
1534 unsigned int hwmode = mode & (_PAGE_VALID | _PAGE_DIRTY); 1534 unsigned int hwmode = mode & (_PAGE_VALID | _PAGE_DIRTY);
1535#endif 1535#endif
1536 1536
1537 uasm_i_ori(p, pte, pte, mode); 1537 uasm_i_ori(p, pte, pte, mode);
1538#ifdef CONFIG_SMP 1538#ifdef CONFIG_SMP
1539# ifdef CONFIG_64BIT_PHYS_ADDR 1539# ifdef CONFIG_PHYS_ADDR_T_64BIT
1540 if (cpu_has_64bits) 1540 if (cpu_has_64bits)
1541 uasm_i_scd(p, pte, 0, ptr); 1541 uasm_i_scd(p, pte, 0, ptr);
1542 else 1542 else
@@ -1548,7 +1548,7 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
1548 else 1548 else
1549 uasm_il_beqz(p, r, pte, label_smp_pgtable_change); 1549 uasm_il_beqz(p, r, pte, label_smp_pgtable_change);
1550 1550
1551# ifdef CONFIG_64BIT_PHYS_ADDR 1551# ifdef CONFIG_PHYS_ADDR_T_64BIT
1552 if (!cpu_has_64bits) { 1552 if (!cpu_has_64bits) {
1553 /* no uasm_i_nop needed */ 1553 /* no uasm_i_nop needed */
1554 uasm_i_ll(p, pte, sizeof(pte_t) / 2, ptr); 1554 uasm_i_ll(p, pte, sizeof(pte_t) / 2, ptr);
@@ -1563,14 +1563,14 @@ iPTE_SW(u32 **p, struct uasm_reloc **r, unsigned int pte, unsigned int ptr,
1563 uasm_i_nop(p); 1563 uasm_i_nop(p);
1564# endif 1564# endif
1565#else 1565#else
1566# ifdef CONFIG_64BIT_PHYS_ADDR 1566# ifdef CONFIG_PHYS_ADDR_T_64BIT
1567 if (cpu_has_64bits) 1567 if (cpu_has_64bits)
1568 uasm_i_sd(p, pte, 0, ptr); 1568 uasm_i_sd(p, pte, 0, ptr);
1569 else 1569 else
1570# endif 1570# endif
1571 UASM_i_SW(p, pte, 0, ptr); 1571 UASM_i_SW(p, pte, 0, ptr);
1572 1572
1573# ifdef CONFIG_64BIT_PHYS_ADDR 1573# ifdef CONFIG_PHYS_ADDR_T_64BIT
1574 if (!cpu_has_64bits) { 1574 if (!cpu_has_64bits) {
1575 uasm_i_lw(p, pte, sizeof(pte_t) / 2, ptr); 1575 uasm_i_lw(p, pte, sizeof(pte_t) / 2, ptr);
1576 uasm_i_ori(p, pte, pte, hwmode); 1576 uasm_i_ori(p, pte, pte, hwmode);
diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c
index 6708a2dbf934..8e02291cfc0c 100644
--- a/arch/mips/mm/uasm-mips.c
+++ b/arch/mips/mm/uasm-mips.c
@@ -96,9 +96,11 @@ static struct insn insn_table[] = {
96 { insn_lw, M(lw_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, 96 { insn_lw, M(lw_op, 0, 0, 0, 0, 0), RS | RT | SIMM },
97 { insn_lwx, M(spec3_op, 0, 0, 0, lwx_op, lx_op), RS | RT | RD }, 97 { insn_lwx, M(spec3_op, 0, 0, 0, lwx_op, lx_op), RS | RT | RD },
98 { insn_mfc0, M(cop0_op, mfc_op, 0, 0, 0, 0), RT | RD | SET}, 98 { insn_mfc0, M(cop0_op, mfc_op, 0, 0, 0, 0), RT | RD | SET},
99 { insn_mfhc0, M(cop0_op, mfhc0_op, 0, 0, 0, 0), RT | RD | SET},
99 { insn_mfhi, M(spec_op, 0, 0, 0, 0, mfhi_op), RD }, 100 { insn_mfhi, M(spec_op, 0, 0, 0, 0, mfhi_op), RD },
100 { insn_mflo, M(spec_op, 0, 0, 0, 0, mflo_op), RD }, 101 { insn_mflo, M(spec_op, 0, 0, 0, 0, mflo_op), RD },
101 { insn_mtc0, M(cop0_op, mtc_op, 0, 0, 0, 0), RT | RD | SET}, 102 { insn_mtc0, M(cop0_op, mtc_op, 0, 0, 0, 0), RT | RD | SET},
103 { insn_mthc0, M(cop0_op, mthc0_op, 0, 0, 0, 0), RT | RD | SET},
102 { insn_mul, M(spec2_op, 0, 0, 0, 0, mul_op), RS | RT | RD}, 104 { insn_mul, M(spec2_op, 0, 0, 0, 0, mul_op), RS | RT | RD},
103 { insn_ori, M(ori_op, 0, 0, 0, 0, 0), RS | RT | UIMM }, 105 { insn_ori, M(ori_op, 0, 0, 0, 0, 0), RS | RT | UIMM },
104 { insn_or, M(spec_op, 0, 0, 0, 0, or_op), RS | RT | RD }, 106 { insn_or, M(spec_op, 0, 0, 0, 0, or_op), RS | RT | RD },
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c
index a01b0d6cedd2..4adf30284813 100644
--- a/arch/mips/mm/uasm.c
+++ b/arch/mips/mm/uasm.c
@@ -51,12 +51,12 @@ enum opcode {
51 insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret, 51 insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret,
52 insn_ext, insn_ins, insn_j, insn_jal, insn_jalr, insn_jr, insn_lb, 52 insn_ext, insn_ins, insn_j, insn_jal, insn_jalr, insn_jr, insn_lb,
53 insn_ld, insn_ldx, insn_lh, insn_ll, insn_lld, insn_lui, insn_lw, 53 insn_ld, insn_ldx, insn_lh, insn_ll, insn_lld, insn_lui, insn_lw,
54 insn_lwx, insn_mfc0, insn_mfhi, insn_mflo, insn_mtc0, insn_mul, 54 insn_lwx, insn_mfc0, insn_mfhc0, insn_mfhi, insn_mflo, insn_mtc0,
55 insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sc, insn_scd, 55 insn_mthc0, insn_mul, insn_or, insn_ori, insn_pref, insn_rfe,
56 insn_sd, insn_sll, insn_sllv, insn_slt, insn_sltiu, insn_sltu, insn_sra, 56 insn_rotr, insn_sc, insn_scd, insn_sd, insn_sll, insn_sllv, insn_slt,
57 insn_srl, insn_srlv, insn_subu, insn_sw, insn_sync, insn_syscall, 57 insn_sltiu, insn_sltu, insn_sra, insn_srl, insn_srlv, insn_subu,
58 insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_wait, insn_wsbh, 58 insn_sw, insn_sync, insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi,
59 insn_xor, insn_xori, insn_yield, 59 insn_tlbwr, insn_wait, insn_wsbh, insn_xor, insn_xori, insn_yield,
60}; 60};
61 61
62struct insn { 62struct insn {
@@ -284,9 +284,11 @@ I_u2s3u1(_lld)
284I_u1s2(_lui) 284I_u1s2(_lui)
285I_u2s3u1(_lw) 285I_u2s3u1(_lw)
286I_u1u2u3(_mfc0) 286I_u1u2u3(_mfc0)
287I_u1u2u3(_mfhc0)
287I_u1(_mfhi) 288I_u1(_mfhi)
288I_u1(_mflo) 289I_u1(_mflo)
289I_u1u2u3(_mtc0) 290I_u1u2u3(_mtc0)
291I_u1u2u3(_mthc0)
290I_u3u1u2(_mul) 292I_u3u1u2(_mul)
291I_u2u1u3(_ori) 293I_u2u1u3(_ori)
292I_u3u1u2(_or) 294I_u3u1u2(_or)