Commit 923617a396249fcac8710048f9db76345246f999
1 parent
4759513b
Improved debug output for the MIPS opcode decoder.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2801 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
77 additions
and
85 deletions
target-mips/translate.c
... | ... | @@ -540,7 +540,7 @@ enum { |
540 | 540 | BS_EXCP = 3, /* We reached an exception condition */ |
541 | 541 | }; |
542 | 542 | |
543 | -#if defined MIPS_DEBUG_DISAS | |
543 | +#ifdef MIPS_DEBUG_DISAS | |
544 | 544 | #define MIPS_DEBUG(fmt, args...) \ |
545 | 545 | do { \ |
546 | 546 | if (loglevel & CPU_LOG_TB_IN_ASM) { \ |
... | ... | @@ -710,7 +710,7 @@ OP_ST_TABLE(uxc1); |
710 | 710 | static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, |
711 | 711 | int base, int16_t offset) |
712 | 712 | { |
713 | - const char *opn = "unk"; | |
713 | + const char *opn = "ldst"; | |
714 | 714 | |
715 | 715 | if (base == 0) { |
716 | 716 | GEN_LOAD_IMM_TN(T0, offset); |
... | ... | @@ -849,7 +849,7 @@ static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, |
849 | 849 | opn = "sc"; |
850 | 850 | break; |
851 | 851 | default: |
852 | - MIPS_INVAL("load/store"); | |
852 | + MIPS_INVAL(opn); | |
853 | 853 | generate_exception(ctx, EXCP_RI); |
854 | 854 | return; |
855 | 855 | } |
... | ... | @@ -860,7 +860,7 @@ static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, |
860 | 860 | static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft, |
861 | 861 | int base, int16_t offset) |
862 | 862 | { |
863 | - const char *opn = "unk"; | |
863 | + const char *opn = "flt_ldst"; | |
864 | 864 | |
865 | 865 | if (base == 0) { |
866 | 866 | GEN_LOAD_IMM_TN(T0, offset); |
... | ... | @@ -896,7 +896,7 @@ static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft, |
896 | 896 | opn = "sdc1"; |
897 | 897 | break; |
898 | 898 | default: |
899 | - MIPS_INVAL("float load/store"); | |
899 | + MIPS_INVAL(opn); | |
900 | 900 | generate_exception(ctx, EXCP_RI); |
901 | 901 | return; |
902 | 902 | } |
... | ... | @@ -908,7 +908,7 @@ static void gen_arith_imm (DisasContext *ctx, uint32_t opc, int rt, |
908 | 908 | int rs, int16_t imm) |
909 | 909 | { |
910 | 910 | uint32_t uimm; |
911 | - const char *opn = "unk"; | |
911 | + const char *opn = "imm arith"; | |
912 | 912 | |
913 | 913 | if (rt == 0 && opc != OPC_ADDI && opc != OPC_DADDI) { |
914 | 914 | /* if no destination, treat it as a NOP |
... | ... | @@ -1073,7 +1073,7 @@ static void gen_arith_imm (DisasContext *ctx, uint32_t opc, int rt, |
1073 | 1073 | break; |
1074 | 1074 | #endif |
1075 | 1075 | default: |
1076 | - MIPS_INVAL("imm arith"); | |
1076 | + MIPS_INVAL(opn); | |
1077 | 1077 | generate_exception(ctx, EXCP_RI); |
1078 | 1078 | return; |
1079 | 1079 | } |
... | ... | @@ -1085,7 +1085,7 @@ static void gen_arith_imm (DisasContext *ctx, uint32_t opc, int rt, |
1085 | 1085 | static void gen_arith (DisasContext *ctx, uint32_t opc, |
1086 | 1086 | int rd, int rs, int rt) |
1087 | 1087 | { |
1088 | - const char *opn = "unk"; | |
1088 | + const char *opn = "arith"; | |
1089 | 1089 | |
1090 | 1090 | if (rd == 0 && opc != OPC_ADD && opc != OPC_SUB |
1091 | 1091 | && opc != OPC_DADD && opc != OPC_DSUB) { |
... | ... | @@ -1223,7 +1223,7 @@ static void gen_arith (DisasContext *ctx, uint32_t opc, |
1223 | 1223 | break; |
1224 | 1224 | #endif |
1225 | 1225 | default: |
1226 | - MIPS_INVAL("arith"); | |
1226 | + MIPS_INVAL(opn); | |
1227 | 1227 | generate_exception(ctx, EXCP_RI); |
1228 | 1228 | return; |
1229 | 1229 | } |
... | ... | @@ -1235,7 +1235,7 @@ static void gen_arith (DisasContext *ctx, uint32_t opc, |
1235 | 1235 | /* Arithmetic on HI/LO registers */ |
1236 | 1236 | static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg) |
1237 | 1237 | { |
1238 | - const char *opn = "unk"; | |
1238 | + const char *opn = "hilo"; | |
1239 | 1239 | |
1240 | 1240 | if (reg == 0 && (opc == OPC_MFHI || opc == OPC_MFLO)) { |
1241 | 1241 | /* Treat as a NOP */ |
... | ... | @@ -1264,7 +1264,7 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg) |
1264 | 1264 | opn = "mtlo"; |
1265 | 1265 | break; |
1266 | 1266 | default: |
1267 | - MIPS_INVAL("HILO"); | |
1267 | + MIPS_INVAL(opn); | |
1268 | 1268 | generate_exception(ctx, EXCP_RI); |
1269 | 1269 | return; |
1270 | 1270 | } |
... | ... | @@ -1274,7 +1274,7 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg) |
1274 | 1274 | static void gen_muldiv (DisasContext *ctx, uint32_t opc, |
1275 | 1275 | int rs, int rt) |
1276 | 1276 | { |
1277 | - const char *opn = "unk"; | |
1277 | + const char *opn = "mul/div"; | |
1278 | 1278 | |
1279 | 1279 | GEN_LOAD_REG_TN(T0, rs); |
1280 | 1280 | GEN_LOAD_REG_TN(T1, rt); |
... | ... | @@ -1330,7 +1330,7 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc, |
1330 | 1330 | opn = "msubu"; |
1331 | 1331 | break; |
1332 | 1332 | default: |
1333 | - MIPS_INVAL("mul/div"); | |
1333 | + MIPS_INVAL(opn); | |
1334 | 1334 | generate_exception(ctx, EXCP_RI); |
1335 | 1335 | return; |
1336 | 1336 | } |
... | ... | @@ -1340,7 +1340,7 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc, |
1340 | 1340 | static void gen_cl (DisasContext *ctx, uint32_t opc, |
1341 | 1341 | int rd, int rs) |
1342 | 1342 | { |
1343 | - const char *opn = "unk"; | |
1343 | + const char *opn = "CLx"; | |
1344 | 1344 | if (rd == 0) { |
1345 | 1345 | /* Treat as a NOP */ |
1346 | 1346 | MIPS_DEBUG("NOP"); |
... | ... | @@ -1367,7 +1367,7 @@ static void gen_cl (DisasContext *ctx, uint32_t opc, |
1367 | 1367 | break; |
1368 | 1368 | #endif |
1369 | 1369 | default: |
1370 | - MIPS_INVAL("CLx"); | |
1370 | + MIPS_INVAL(opn); | |
1371 | 1371 | generate_exception(ctx, EXCP_RI); |
1372 | 1372 | return; |
1373 | 1373 | } |
... | ... | @@ -1431,7 +1431,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, |
1431 | 1431 | /* Never trap: treat as NOP */ |
1432 | 1432 | return; |
1433 | 1433 | default: |
1434 | - MIPS_INVAL("TRAP"); | |
1434 | + MIPS_INVAL("trap"); | |
1435 | 1435 | generate_exception(ctx, EXCP_RI); |
1436 | 1436 | return; |
1437 | 1437 | } |
... | ... | @@ -1462,7 +1462,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, |
1462 | 1462 | gen_op_ne(); |
1463 | 1463 | break; |
1464 | 1464 | default: |
1465 | - MIPS_INVAL("TRAP"); | |
1465 | + MIPS_INVAL("trap"); | |
1466 | 1466 | generate_exception(ctx, EXCP_RI); |
1467 | 1467 | return; |
1468 | 1468 | } |
... | ... | @@ -1499,12 +1499,13 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1499 | 1499 | int bcond = 0; |
1500 | 1500 | |
1501 | 1501 | if (ctx->hflags & MIPS_HFLAG_BMASK) { |
1502 | +#ifdef MIPS_DEBUG_DISAS | |
1502 | 1503 | if (loglevel & CPU_LOG_TB_IN_ASM) { |
1503 | 1504 | fprintf(logfile, |
1504 | 1505 | "Branch in delay slot at PC 0x" TARGET_FMT_lx "\n", |
1505 | 1506 | ctx->pc); |
1506 | 1507 | } |
1507 | - MIPS_INVAL("branch/jump in bdelay slot"); | |
1508 | +#endif | |
1508 | 1509 | generate_exception(ctx, EXCP_RI); |
1509 | 1510 | return; |
1510 | 1511 | } |
... | ... | @@ -1553,6 +1554,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1553 | 1554 | if (offset != 0 && offset != 16) { |
1554 | 1555 | /* Hint = 0 is JR/JALR, hint 16 is JR.HB/JALR.HB, the |
1555 | 1556 | others are reserved. */ |
1557 | + MIPS_INVAL("jump hint"); | |
1556 | 1558 | generate_exception(ctx, EXCP_RI); |
1557 | 1559 | return; |
1558 | 1560 | } |
... | ... | @@ -1610,12 +1612,12 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1610 | 1612 | return; |
1611 | 1613 | case OPC_J: |
1612 | 1614 | ctx->hflags |= MIPS_HFLAG_B; |
1613 | - MIPS_DEBUG("j %08x", btarget); | |
1615 | + MIPS_DEBUG("j " TARGET_FMT_lx, btarget); | |
1614 | 1616 | break; |
1615 | 1617 | case OPC_JAL: |
1616 | 1618 | blink = 31; |
1617 | 1619 | ctx->hflags |= MIPS_HFLAG_B; |
1618 | - MIPS_DEBUG("jal %08x", btarget); | |
1620 | + MIPS_DEBUG("jal " TARGET_FMT_lx, btarget); | |
1619 | 1621 | break; |
1620 | 1622 | case OPC_JR: |
1621 | 1623 | ctx->hflags |= MIPS_HFLAG_BR; |
... | ... | @@ -1635,70 +1637,70 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1635 | 1637 | switch (opc) { |
1636 | 1638 | case OPC_BEQ: |
1637 | 1639 | gen_op_eq(); |
1638 | - MIPS_DEBUG("beq %s, %s, %08x", | |
1640 | + MIPS_DEBUG("beq %s, %s, " TARGET_FMT_lx, | |
1639 | 1641 | regnames[rs], regnames[rt], btarget); |
1640 | 1642 | goto not_likely; |
1641 | 1643 | case OPC_BEQL: |
1642 | 1644 | gen_op_eq(); |
1643 | - MIPS_DEBUG("beql %s, %s, %08x", | |
1645 | + MIPS_DEBUG("beql %s, %s, " TARGET_FMT_lx, | |
1644 | 1646 | regnames[rs], regnames[rt], btarget); |
1645 | 1647 | goto likely; |
1646 | 1648 | case OPC_BNE: |
1647 | 1649 | gen_op_ne(); |
1648 | - MIPS_DEBUG("bne %s, %s, %08x", | |
1650 | + MIPS_DEBUG("bne %s, %s, " TARGET_FMT_lx, | |
1649 | 1651 | regnames[rs], regnames[rt], btarget); |
1650 | 1652 | goto not_likely; |
1651 | 1653 | case OPC_BNEL: |
1652 | 1654 | gen_op_ne(); |
1653 | - MIPS_DEBUG("bnel %s, %s, %08x", | |
1655 | + MIPS_DEBUG("bnel %s, %s, " TARGET_FMT_lx, | |
1654 | 1656 | regnames[rs], regnames[rt], btarget); |
1655 | 1657 | goto likely; |
1656 | 1658 | case OPC_BGEZ: |
1657 | 1659 | gen_op_gez(); |
1658 | - MIPS_DEBUG("bgez %s, %08x", regnames[rs], btarget); | |
1660 | + MIPS_DEBUG("bgez %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1659 | 1661 | goto not_likely; |
1660 | 1662 | case OPC_BGEZL: |
1661 | 1663 | gen_op_gez(); |
1662 | - MIPS_DEBUG("bgezl %s, %08x", regnames[rs], btarget); | |
1664 | + MIPS_DEBUG("bgezl %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1663 | 1665 | goto likely; |
1664 | 1666 | case OPC_BGEZAL: |
1665 | 1667 | gen_op_gez(); |
1666 | - MIPS_DEBUG("bgezal %s, %08x", regnames[rs], btarget); | |
1668 | + MIPS_DEBUG("bgezal %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1667 | 1669 | blink = 31; |
1668 | 1670 | goto not_likely; |
1669 | 1671 | case OPC_BGEZALL: |
1670 | 1672 | gen_op_gez(); |
1671 | 1673 | blink = 31; |
1672 | - MIPS_DEBUG("bgezall %s, %08x", regnames[rs], btarget); | |
1674 | + MIPS_DEBUG("bgezall %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1673 | 1675 | goto likely; |
1674 | 1676 | case OPC_BGTZ: |
1675 | 1677 | gen_op_gtz(); |
1676 | - MIPS_DEBUG("bgtz %s, %08x", regnames[rs], btarget); | |
1678 | + MIPS_DEBUG("bgtz %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1677 | 1679 | goto not_likely; |
1678 | 1680 | case OPC_BGTZL: |
1679 | 1681 | gen_op_gtz(); |
1680 | - MIPS_DEBUG("bgtzl %s, %08x", regnames[rs], btarget); | |
1682 | + MIPS_DEBUG("bgtzl %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1681 | 1683 | goto likely; |
1682 | 1684 | case OPC_BLEZ: |
1683 | 1685 | gen_op_lez(); |
1684 | - MIPS_DEBUG("blez %s, %08x", regnames[rs], btarget); | |
1686 | + MIPS_DEBUG("blez %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1685 | 1687 | goto not_likely; |
1686 | 1688 | case OPC_BLEZL: |
1687 | 1689 | gen_op_lez(); |
1688 | - MIPS_DEBUG("blezl %s, %08x", regnames[rs], btarget); | |
1690 | + MIPS_DEBUG("blezl %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1689 | 1691 | goto likely; |
1690 | 1692 | case OPC_BLTZ: |
1691 | 1693 | gen_op_ltz(); |
1692 | - MIPS_DEBUG("bltz %s, %08x", regnames[rs], btarget); | |
1694 | + MIPS_DEBUG("bltz %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1693 | 1695 | goto not_likely; |
1694 | 1696 | case OPC_BLTZL: |
1695 | 1697 | gen_op_ltz(); |
1696 | - MIPS_DEBUG("bltzl %s, %08x", regnames[rs], btarget); | |
1698 | + MIPS_DEBUG("bltzl %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1697 | 1699 | goto likely; |
1698 | 1700 | case OPC_BLTZAL: |
1699 | 1701 | gen_op_ltz(); |
1700 | 1702 | blink = 31; |
1701 | - MIPS_DEBUG("bltzal %s, %08x", regnames[rs], btarget); | |
1703 | + MIPS_DEBUG("bltzal %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1702 | 1704 | not_likely: |
1703 | 1705 | ctx->hflags |= MIPS_HFLAG_BC; |
1704 | 1706 | gen_op_set_bcond(); |
... | ... | @@ -1706,7 +1708,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1706 | 1708 | case OPC_BLTZALL: |
1707 | 1709 | gen_op_ltz(); |
1708 | 1710 | blink = 31; |
1709 | - MIPS_DEBUG("bltzall %s, %08x", regnames[rs], btarget); | |
1711 | + MIPS_DEBUG("bltzall %s, " TARGET_FMT_lx, regnames[rs], btarget); | |
1710 | 1712 | likely: |
1711 | 1713 | ctx->hflags |= MIPS_HFLAG_BL; |
1712 | 1714 | gen_op_set_bcond(); |
... | ... | @@ -1718,7 +1720,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, |
1718 | 1720 | return; |
1719 | 1721 | } |
1720 | 1722 | } |
1721 | - MIPS_DEBUG("enter ds: link %d cond %02x target %08x", | |
1723 | + MIPS_DEBUG("enter ds: link %d cond %02x target " TARGET_FMT_lx, | |
1722 | 1724 | blink, ctx->hflags, btarget); |
1723 | 1725 | ctx->btarget = btarget; |
1724 | 1726 | if (blink > 0) { |
... | ... | @@ -4221,6 +4223,7 @@ static void gen_cp0 (DisasContext *ctx, uint32_t opc, int rt, int rd) |
4221 | 4223 | case OPC_DERET: |
4222 | 4224 | opn = "deret"; |
4223 | 4225 | if (!(ctx->hflags & MIPS_HFLAG_DM)) { |
4226 | + MIPS_INVAL(opn); | |
4224 | 4227 | generate_exception(ctx, EXCP_RI); |
4225 | 4228 | } else { |
4226 | 4229 | save_cpu_state(ctx, 0); |
... | ... | @@ -4238,11 +4241,7 @@ static void gen_cp0 (DisasContext *ctx, uint32_t opc, int rt, int rd) |
4238 | 4241 | ctx->bstate = BS_EXCP; |
4239 | 4242 | break; |
4240 | 4243 | default: |
4241 | - if (loglevel & CPU_LOG_TB_IN_ASM) { | |
4242 | - fprintf(logfile, "Invalid CP0 opcode: %08x %03x %03x %03x\n", | |
4243 | - ctx->opcode, ctx->opcode >> 26, ctx->opcode & 0x3F, | |
4244 | - ((ctx->opcode >> 16) & 0x1F)); | |
4245 | - } | |
4244 | + MIPS_INVAL(opn); | |
4246 | 4245 | generate_exception(ctx, EXCP_RI); |
4247 | 4246 | return; |
4248 | 4247 | } |
... | ... | @@ -4254,25 +4253,26 @@ static void gen_compute_branch1 (DisasContext *ctx, uint32_t op, |
4254 | 4253 | int32_t cc, int32_t offset) |
4255 | 4254 | { |
4256 | 4255 | target_ulong btarget; |
4256 | + const char *opn = "cp1 cond branch"; | |
4257 | 4257 | |
4258 | 4258 | btarget = ctx->pc + 4 + offset; |
4259 | 4259 | |
4260 | 4260 | switch (op) { |
4261 | 4261 | case OPC_BC1F: |
4262 | 4262 | gen_op_bc1f(cc); |
4263 | - MIPS_DEBUG("bc1f " TARGET_FMT_lx, btarget); | |
4263 | + opn = "bc1f"; | |
4264 | 4264 | goto not_likely; |
4265 | 4265 | case OPC_BC1FL: |
4266 | 4266 | gen_op_bc1f(cc); |
4267 | - MIPS_DEBUG("bc1fl " TARGET_FMT_lx, btarget); | |
4267 | + opn = "bc1fl"; | |
4268 | 4268 | goto likely; |
4269 | 4269 | case OPC_BC1T: |
4270 | 4270 | gen_op_bc1t(cc); |
4271 | - MIPS_DEBUG("bc1t " TARGET_FMT_lx, btarget); | |
4271 | + opn = "bc1t"; | |
4272 | 4272 | goto not_likely; |
4273 | 4273 | case OPC_BC1TL: |
4274 | 4274 | gen_op_bc1t(cc); |
4275 | - MIPS_DEBUG("bc1tl " TARGET_FMT_lx, btarget); | |
4275 | + opn = "bc1tl"; | |
4276 | 4276 | likely: |
4277 | 4277 | ctx->hflags |= MIPS_HFLAG_BL; |
4278 | 4278 | gen_op_set_bcond(); |
... | ... | @@ -4280,34 +4280,31 @@ static void gen_compute_branch1 (DisasContext *ctx, uint32_t op, |
4280 | 4280 | break; |
4281 | 4281 | case OPC_BC1FANY2: |
4282 | 4282 | gen_op_bc1fany2(cc); |
4283 | - MIPS_DEBUG("bc1fany2 " TARGET_FMT_lx, btarget); | |
4283 | + opn = "bc1fany2"; | |
4284 | 4284 | goto not_likely; |
4285 | 4285 | case OPC_BC1TANY2: |
4286 | 4286 | gen_op_bc1tany2(cc); |
4287 | - MIPS_DEBUG("bc1tany2 " TARGET_FMT_lx, btarget); | |
4287 | + opn = "bc1tany2"; | |
4288 | 4288 | goto not_likely; |
4289 | 4289 | case OPC_BC1FANY4: |
4290 | 4290 | gen_op_bc1fany4(cc); |
4291 | - MIPS_DEBUG("bc1fany4 " TARGET_FMT_lx, btarget); | |
4291 | + opn = "bc1fany4"; | |
4292 | 4292 | goto not_likely; |
4293 | 4293 | case OPC_BC1TANY4: |
4294 | 4294 | gen_op_bc1tany4(cc); |
4295 | - MIPS_DEBUG("bc1tany4 " TARGET_FMT_lx, btarget); | |
4295 | + opn = "bc1tany4"; | |
4296 | 4296 | not_likely: |
4297 | 4297 | ctx->hflags |= MIPS_HFLAG_BC; |
4298 | 4298 | gen_op_set_bcond(); |
4299 | 4299 | break; |
4300 | 4300 | default: |
4301 | - MIPS_INVAL("cp1 branch"); | |
4301 | + MIPS_INVAL(opn); | |
4302 | 4302 | generate_exception (ctx, EXCP_RI); |
4303 | 4303 | return; |
4304 | 4304 | } |
4305 | - | |
4306 | - MIPS_DEBUG("enter ds: cond %02x target " TARGET_FMT_lx, | |
4305 | + MIPS_DEBUG("%s: cond %02x target " TARGET_FMT_lx, opn, | |
4307 | 4306 | ctx->hflags, btarget); |
4308 | 4307 | ctx->btarget = btarget; |
4309 | - | |
4310 | - return; | |
4311 | 4308 | } |
4312 | 4309 | |
4313 | 4310 | /* Coprocessor 1 (FPU) */ |
... | ... | @@ -4325,18 +4322,19 @@ static void gen_compute_branch1 (DisasContext *ctx, uint32_t op, |
4325 | 4322 | * FIXME: This is broken for R2, it needs to be checked at runtime, not |
4326 | 4323 | * at translation time. |
4327 | 4324 | */ |
4328 | -#define CHECK_FR(ctx, freg) do { \ | |
4325 | +#define CHECK_FR(ctx, freg) do { \ | |
4329 | 4326 | if (!((ctx)->CP0_Status & (1 << CP0St_FR)) && ((freg) & 1)) { \ |
4330 | - generate_exception (ctx, EXCP_RI); \ | |
4331 | - return; \ | |
4332 | - } \ | |
4327 | + MIPS_INVAL("FPU mode"); \ | |
4328 | + generate_exception (ctx, EXCP_RI); \ | |
4329 | + return; \ | |
4330 | + } \ | |
4333 | 4331 | } while(0) |
4334 | 4332 | |
4335 | 4333 | #define FOP(func, fmt) (((fmt) << 21) | (func)) |
4336 | 4334 | |
4337 | 4335 | static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) |
4338 | 4336 | { |
4339 | - const char *opn = "unk"; | |
4337 | + const char *opn = "cp1 move"; | |
4340 | 4338 | |
4341 | 4339 | switch (opc) { |
4342 | 4340 | case OPC_MFC1: |
... | ... | @@ -4390,11 +4388,7 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) |
4390 | 4388 | opn = "mthc1"; |
4391 | 4389 | break; |
4392 | 4390 | default: |
4393 | - if (loglevel & CPU_LOG_TB_IN_ASM) { | |
4394 | - fprintf(logfile, "Invalid CP1 opcode: %08x %03x %03x %03x\n", | |
4395 | - ctx->opcode, ctx->opcode >> 26, ctx->opcode & 0x3F, | |
4396 | - ((ctx->opcode >> 16) & 0x1F)); | |
4397 | - } | |
4391 | + MIPS_INVAL(opn); | |
4398 | 4392 | generate_exception (ctx, EXCP_RI); |
4399 | 4393 | return; |
4400 | 4394 | } |
... | ... | @@ -4440,7 +4434,7 @@ GEN_MOVCF(ps); |
4440 | 4434 | static void gen_farith (DisasContext *ctx, uint32_t op1, int ft, |
4441 | 4435 | int fs, int fd, int cc) |
4442 | 4436 | { |
4443 | - const char *opn = "unk"; | |
4437 | + const char *opn = "farith"; | |
4444 | 4438 | const char *condnames[] = { |
4445 | 4439 | "c.f", |
4446 | 4440 | "c.un", |
... | ... | @@ -5041,11 +5035,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, int ft, |
5041 | 5035 | opn = condnames[func-48]; |
5042 | 5036 | break; |
5043 | 5037 | default: |
5044 | - if (loglevel & CPU_LOG_TB_IN_ASM) { | |
5045 | - fprintf(logfile, "Invalid FP arith function: %08x %03x %03x %03x\n", | |
5046 | - ctx->opcode, ctx->opcode >> 26, ctx->opcode & 0x3F, | |
5047 | - ((ctx->opcode >> 16) & 0x1F)); | |
5048 | - } | |
5038 | + MIPS_INVAL(opn); | |
5049 | 5039 | generate_exception (ctx, EXCP_RI); |
5050 | 5040 | return; |
5051 | 5041 | } |
... | ... | @@ -5059,7 +5049,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, int ft, |
5059 | 5049 | static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, int fd, |
5060 | 5050 | int base, int index) |
5061 | 5051 | { |
5062 | - const char *opn = "unk"; | |
5052 | + const char *opn = "extended float load/store"; | |
5063 | 5053 | |
5064 | 5054 | GEN_LOAD_REG_TN(T0, base); |
5065 | 5055 | GEN_LOAD_REG_TN(T1, index); |
... | ... | @@ -5098,7 +5088,7 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, int fd, |
5098 | 5088 | opn = "suxc1"; |
5099 | 5089 | break; |
5100 | 5090 | default: |
5101 | - MIPS_INVAL("extended float load/store"); | |
5091 | + MIPS_INVAL(opn); | |
5102 | 5092 | generate_exception(ctx, EXCP_RI); |
5103 | 5093 | return; |
5104 | 5094 | } |
... | ... | @@ -5108,7 +5098,7 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, int fd, |
5108 | 5098 | static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, int fd, |
5109 | 5099 | int fr, int fs, int ft) |
5110 | 5100 | { |
5111 | - const char *opn = "unk"; | |
5101 | + const char *opn = "flt3_arith"; | |
5112 | 5102 | |
5113 | 5103 | /* All of those work only on 64bit FPUs. */ |
5114 | 5104 | CHECK_FR(ctx, fd | fr | fs | ft); |
... | ... | @@ -5173,11 +5163,8 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, int fd, |
5173 | 5163 | generate_exception (ctx, EXCP_RI); |
5174 | 5164 | opn = "nmsub.ps"; |
5175 | 5165 | break; |
5176 | - default: | |
5177 | - if (loglevel & CPU_LOG_TB_IN_ASM) { | |
5178 | - fprintf(logfile, "Invalid extended FP arith function: %08x %03x %03x\n", | |
5179 | - ctx->opcode, ctx->opcode >> 26, ctx->opcode & 0x3F); | |
5180 | - } | |
5166 | + default: | |
5167 | + MIPS_INVAL(opn); | |
5181 | 5168 | generate_exception (ctx, EXCP_RI); |
5182 | 5169 | return; |
5183 | 5170 | } |
... | ... | @@ -5459,7 +5446,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5459 | 5446 | /* treat as noop */ |
5460 | 5447 | break; |
5461 | 5448 | default: /* Invalid */ |
5462 | - MIPS_INVAL("REGIMM"); | |
5449 | + MIPS_INVAL("regimm"); | |
5463 | 5450 | generate_exception(ctx, EXCP_RI); |
5464 | 5451 | break; |
5465 | 5452 | } |
... | ... | @@ -5494,7 +5481,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5494 | 5481 | ctx->bstate = BS_STOP; |
5495 | 5482 | break; |
5496 | 5483 | default: /* Invalid */ |
5497 | - MIPS_INVAL("MFMC0"); | |
5484 | + MIPS_INVAL("mfmc0"); | |
5498 | 5485 | generate_exception(ctx, EXCP_RI); |
5499 | 5486 | break; |
5500 | 5487 | } |
... | ... | @@ -5506,10 +5493,13 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5506 | 5493 | /* Shadow registers not implemented. */ |
5507 | 5494 | GEN_LOAD_REG_TN(T0, rt); |
5508 | 5495 | GEN_STORE_TN_REG(rd, T0); |
5509 | - } else | |
5496 | + } else { | |
5497 | + MIPS_INVAL("shadow register move"); | |
5510 | 5498 | generate_exception(ctx, EXCP_RI); |
5499 | + } | |
5511 | 5500 | break; |
5512 | 5501 | default: |
5502 | + MIPS_INVAL("cp0"); | |
5513 | 5503 | generate_exception(ctx, EXCP_RI); |
5514 | 5504 | break; |
5515 | 5505 | } |
... | ... | @@ -5539,7 +5529,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5539 | 5529 | /* Treat as a noop */ |
5540 | 5530 | break; |
5541 | 5531 | |
5542 | - /* Floating point. */ | |
5532 | + /* Floating point (COP1). */ | |
5543 | 5533 | case OPC_LWC1: |
5544 | 5534 | case OPC_LDC1: |
5545 | 5535 | case OPC_SWC1: |
... | ... | @@ -5584,6 +5574,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5584 | 5574 | (imm >> 8) & 0x7); |
5585 | 5575 | break; |
5586 | 5576 | default: |
5577 | + MIPS_INVAL("cp1"); | |
5587 | 5578 | generate_exception (ctx, EXCP_RI); |
5588 | 5579 | break; |
5589 | 5580 | } |
... | ... | @@ -5635,6 +5626,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5635 | 5626 | gen_flt3_arith(ctx, op1, sa, rs, rd, rt); |
5636 | 5627 | break; |
5637 | 5628 | default: |
5629 | + MIPS_INVAL("cp3"); | |
5638 | 5630 | generate_exception (ctx, EXCP_RI); |
5639 | 5631 | break; |
5640 | 5632 | } |
... | ... | @@ -5667,7 +5659,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
5667 | 5659 | /* MDMX: Not implemented. */ |
5668 | 5660 | #endif |
5669 | 5661 | default: /* Invalid */ |
5670 | - MIPS_INVAL(""); | |
5662 | + MIPS_INVAL("major opcode"); | |
5671 | 5663 | generate_exception(ctx, EXCP_RI); |
5672 | 5664 | break; |
5673 | 5665 | } |
... | ... | @@ -5764,7 +5756,7 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, |
5764 | 5756 | cpu_dump_state(env, logfile, fprintf, 0); |
5765 | 5757 | } |
5766 | 5758 | #endif |
5767 | -#if defined MIPS_DEBUG_DISAS | |
5759 | +#ifdef MIPS_DEBUG_DISAS | |
5768 | 5760 | if (loglevel & CPU_LOG_TB_IN_ASM) |
5769 | 5761 | fprintf(logfile, "\ntb %p super %d cond %04x\n", |
5770 | 5762 | tb, ctx.mem_idx, ctx.hflags); | ... | ... |