".set\tpush\n\t"                                        \
                ".set\tnoat\n\t"                                        \
                "# mfgc0\t$1, $%1, %2\n\t"                              \
-               ".word\t(0x40610000 | %1 << 11 | %2)\n\t"               \
+               _ASM_INSN_IF_MIPS(0x40610000 | %1 << 11 | %2)           \
+               _ASM_INSN32_IF_MM(0x002004fc | %1 << 16 | %2 << 11)     \
                "move\t%0, $1\n\t"                                      \
                ".set\tpop"                                             \
                : "=r" (__res)                                          \
                ".set\tpush\n\t"                                        \
                ".set\tnoat\n\t"                                        \
                "# dmfgc0\t$1, $%1, %2\n\t"                             \
-               ".word\t(0x40610100 | %1 << 11 | %2)\n\t"               \
+               _ASM_INSN_IF_MIPS(0x40610100 | %1 << 11 | %2)           \
+               _ASM_INSN32_IF_MM(0x582004fc | %1 << 16 | %2 << 11)     \
                "move\t%0, $1\n\t"                                      \
                ".set\tpop"                                             \
                : "=r" (__res)                                          \
                ".set\tnoat\n\t"                                        \
                "move\t$1, %z0\n\t"                                     \
                "# mtgc0\t$1, $%1, %2\n\t"                              \
-               ".word\t(0x40610200 | %1 << 11 | %2)\n\t"               \
+               _ASM_INSN_IF_MIPS(0x40610200 | %1 << 11 | %2)           \
+               _ASM_INSN32_IF_MM(0x002006fc | %1 << 16 | %2 << 11)     \
                ".set\tpop"                                             \
                : : "Jr" ((unsigned int)(value)),                       \
                    "i" (register), "i" (sel));                         \
                ".set\tnoat\n\t"                                        \
                "move\t$1, %z0\n\t"                                     \
                "# dmtgc0\t$1, $%1, %2\n\t"                             \
-               ".word\t(0x40610300 | %1 << 11 | %2)\n\t"               \
+               _ASM_INSN_IF_MIPS(0x40610300 | %1 << 11 | %2)           \
+               _ASM_INSN32_IF_MM(0x582006fc | %1 << 16 | %2 << 11)     \
                ".set\tpop"                                             \
                : : "Jr" (value),                                       \
                    "i" (register), "i" (sel));                         \
 {
        __asm__ __volatile__(
                "# tlbgp\n\t"
-               ".word 0x42000010");
+               _ASM_INSN_IF_MIPS(0x42000010)
+               _ASM_INSN32_IF_MM(0x0000017c));
 }
 
 static inline void guest_tlb_read(void)
 {
        __asm__ __volatile__(
                "# tlbgr\n\t"
-               ".word 0x42000009");
+               _ASM_INSN_IF_MIPS(0x42000009)
+               _ASM_INSN32_IF_MM(0x0000117c));
 }
 
 static inline void guest_tlb_write_indexed(void)
 {
        __asm__ __volatile__(
                "# tlbgwi\n\t"
-               ".word 0x4200000a");
+               _ASM_INSN_IF_MIPS(0x4200000a)
+               _ASM_INSN32_IF_MM(0x0000217c));
 }
 
 static inline void guest_tlb_write_random(void)
 {
        __asm__ __volatile__(
                "# tlbgwr\n\t"
-               ".word 0x4200000e");
+               _ASM_INSN_IF_MIPS(0x4200000e)
+               _ASM_INSN32_IF_MM(0x0000317c));
 }
 
 /*
 {
        __asm__ __volatile__(
                "# tlbginvf\n\t"
-               ".word 0x4200000c");
+               _ASM_INSN_IF_MIPS(0x4200000c)
+               _ASM_INSN32_IF_MM(0x0000517c));
 }
 
 #endif /* !TOOLCHAIN_SUPPORTS_VIRT */