Revision 534ce69f
b/target-mips/op.c | ||
---|---|---|
1293 | 1293 |
|
1294 | 1294 |
void op_mtc0_context (void) |
1295 | 1295 |
{ |
1296 |
env->CP0_Context = (env->CP0_Context & ~0x007FFFFF) | (T0 & ~0x007FFFFF);
|
|
1296 |
env->CP0_Context = (env->CP0_Context & 0x007FFFFF) | (T0 & ~0x007FFFFF); |
|
1297 | 1297 |
RETURN(); |
1298 | 1298 |
} |
1299 | 1299 |
|
... | ... | |
1458 | 1458 |
RETURN(); |
1459 | 1459 |
} |
1460 | 1460 |
|
1461 |
void op_mtc0_xcontext (void) |
|
1462 |
{ |
|
1463 |
env->CP0_XContext = (int32_t)T0; /* XXX */ |
|
1464 |
RETURN(); |
|
1465 |
} |
|
1466 |
|
|
1467 | 1461 |
void op_mtc0_framemask (void) |
1468 | 1462 |
{ |
1469 | 1463 |
env->CP0_Framemask = T0; /* XXX */ |
... | ... | |
1528 | 1522 |
RETURN(); |
1529 | 1523 |
} |
1530 | 1524 |
|
1525 |
#ifdef TARGET_MIPS64 |
|
1531 | 1526 |
void op_dmfc0_entrylo0 (void) |
1532 | 1527 |
{ |
1533 | 1528 |
T0 = env->CP0_EntryLo0; |
... | ... | |
1612 | 1607 |
|
1613 | 1608 |
void op_dmtc0_context (void) |
1614 | 1609 |
{ |
1615 |
env->CP0_Context = (env->CP0_Context & ~0x007FFFFF) | (T0 & 0x007FFFF0);
|
|
1610 |
env->CP0_Context = (env->CP0_Context & 0x007FFFFF) | (T0 & ~0x007FFFFF);
|
|
1616 | 1611 |
RETURN(); |
1617 | 1612 |
} |
1618 | 1613 |
|
... | ... | |
1632 | 1627 |
|
1633 | 1628 |
void op_dmtc0_xcontext (void) |
1634 | 1629 |
{ |
1635 |
env->CP0_XContext = T0; /* XXX */
|
|
1630 |
env->CP0_XContext = (env->CP0_XContext & 0xffffffff) | (T0 & ~0xffffffff);
|
|
1636 | 1631 |
RETURN(); |
1637 | 1632 |
} |
1638 | 1633 |
|
... | ... | |
1647 | 1642 |
env->CP0_ErrorEPC = T0; |
1648 | 1643 |
RETURN(); |
1649 | 1644 |
} |
1645 |
#endif /* TARGET_MIPS64 */ |
|
1650 | 1646 |
|
1651 | 1647 |
#if 0 |
1652 | 1648 |
# define DEBUG_FPU_STATE() CALL_FROM_TB1(dump_fpu, env) |
b/target-mips/translate.c | ||
---|---|---|
2750 | 2750 |
switch (sel) { |
2751 | 2751 |
case 0: |
2752 | 2752 |
/* 64 bit MMU only */ |
2753 |
gen_op_mtc0_xcontext();
|
|
2753 |
/* Nothing writable in lower 32 bits */
|
|
2754 | 2754 |
rn = "XContext"; |
2755 | 2755 |
break; |
2756 | 2756 |
default: |
... | ... | |
2946 | 2946 |
generate_exception(ctx, EXCP_RI); |
2947 | 2947 |
} |
2948 | 2948 |
|
2949 |
#ifdef TARGET_MIPS64 |
|
2949 | 2950 |
static void gen_dmfc0 (DisasContext *ctx, int reg, int sel) |
2950 | 2951 |
{ |
2951 | 2952 |
const char *rn = "invalid"; |
... | ... | |
4120 | 4121 |
#endif |
4121 | 4122 |
generate_exception(ctx, EXCP_RI); |
4122 | 4123 |
} |
4124 |
#endif /* TARGET_MIPS64 */ |
|
4123 | 4125 |
|
4124 | 4126 |
static void gen_cp0 (DisasContext *ctx, uint32_t opc, int rt, int rd) |
4125 | 4127 |
{ |
... | ... | |
4140 | 4142 |
gen_mtc0(ctx, rd, ctx->opcode & 0x7); |
4141 | 4143 |
opn = "mtc0"; |
4142 | 4144 |
break; |
4145 |
#ifdef TARGET_MIPS64 |
|
4143 | 4146 |
case OPC_DMFC0: |
4144 | 4147 |
if (rt == 0) { |
4145 | 4148 |
/* Treat as NOP */ |
... | ... | |
4154 | 4157 |
gen_dmtc0(ctx, rd, ctx->opcode & 0x7); |
4155 | 4158 |
opn = "dmtc0"; |
4156 | 4159 |
break; |
4160 |
#endif |
|
4157 | 4161 |
#if defined(MIPS_USES_R4K_TLB) |
4158 | 4162 |
case OPC_TLBWI: |
4159 | 4163 |
gen_op_tlbwi(); |
Also available in: Unified diff