Commit 2b0233abfb42d42c2ac1fb3d73953218f5e30b39
1 parent
c596defd
Switch bitfield instructions and assorted special ops to TCG.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4739 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
189 additions
and
195 deletions
target-mips/helper.h
... | ... | @@ -204,5 +204,24 @@ FOP_PROTO(ngt) |
204 | 204 | #undef FOP_PROTO |
205 | 205 | |
206 | 206 | /* Special functions */ |
207 | +DEF_HELPER(void, do_di, (void)) | |
208 | +DEF_HELPER(void, do_ei, (void)) | |
209 | +DEF_HELPER(void, do_eret, (void)) | |
210 | +DEF_HELPER(void, do_deret, (void)) | |
211 | +DEF_HELPER(void, do_rdhwr_cpunum, (void)) | |
212 | +DEF_HELPER(void, do_rdhwr_synci_step, (void)) | |
213 | +DEF_HELPER(void, do_rdhwr_cc, (void)) | |
214 | +DEF_HELPER(void, do_rdhwr_ccres, (void)) | |
207 | 215 | DEF_HELPER(void, do_pmon, (int function)) |
208 | 216 | DEF_HELPER(void, do_wait, (void)) |
217 | + | |
218 | +/* Bitfield operations. */ | |
219 | +DEF_HELPER(void, do_ext, (uint32_t pos, uint32_t size)) | |
220 | +DEF_HELPER(void, do_ins, (uint32_t pos, uint32_t size)) | |
221 | +DEF_HELPER(void, do_wsbh, (void)) | |
222 | +#ifdef TARGET_MIPS64 | |
223 | +DEF_HELPER(void, do_dext, (uint32_t pos, uint32_t size)) | |
224 | +DEF_HELPER(void, do_dins, (uint32_t pos, uint32_t size)) | |
225 | +DEF_HELPER(void, do_dsbh, (void)) | |
226 | +DEF_HELPER(void, do_dshd, (void)) | |
227 | +#endif | ... | ... |
target-mips/op.c
... | ... | @@ -661,153 +661,3 @@ void op_bc1any4t (void) |
661 | 661 | DEBUG_FPU_STATE(); |
662 | 662 | FORCE_RET(); |
663 | 663 | } |
664 | - | |
665 | -/* Specials */ | |
666 | -void op_di (void) | |
667 | -{ | |
668 | - T0 = env->CP0_Status; | |
669 | - env->CP0_Status = T0 & ~(1 << CP0St_IE); | |
670 | - CALL_FROM_TB1(cpu_mips_update_irq, env); | |
671 | - FORCE_RET(); | |
672 | -} | |
673 | - | |
674 | -void op_ei (void) | |
675 | -{ | |
676 | - T0 = env->CP0_Status; | |
677 | - env->CP0_Status = T0 | (1 << CP0St_IE); | |
678 | - CALL_FROM_TB1(cpu_mips_update_irq, env); | |
679 | - FORCE_RET(); | |
680 | -} | |
681 | - | |
682 | -void debug_pre_eret (void); | |
683 | -void debug_post_eret (void); | |
684 | -void op_eret (void) | |
685 | -{ | |
686 | - if (loglevel & CPU_LOG_EXEC) | |
687 | - CALL_FROM_TB0(debug_pre_eret); | |
688 | - if (env->CP0_Status & (1 << CP0St_ERL)) { | |
689 | - env->PC[env->current_tc] = env->CP0_ErrorEPC; | |
690 | - env->CP0_Status &= ~(1 << CP0St_ERL); | |
691 | - } else { | |
692 | - env->PC[env->current_tc] = env->CP0_EPC; | |
693 | - env->CP0_Status &= ~(1 << CP0St_EXL); | |
694 | - } | |
695 | - CALL_FROM_TB1(compute_hflags, env); | |
696 | - if (loglevel & CPU_LOG_EXEC) | |
697 | - CALL_FROM_TB0(debug_post_eret); | |
698 | - env->CP0_LLAddr = 1; | |
699 | - FORCE_RET(); | |
700 | -} | |
701 | - | |
702 | -void op_deret (void) | |
703 | -{ | |
704 | - if (loglevel & CPU_LOG_EXEC) | |
705 | - CALL_FROM_TB0(debug_pre_eret); | |
706 | - env->PC[env->current_tc] = env->CP0_DEPC; | |
707 | - env->hflags &= MIPS_HFLAG_DM; | |
708 | - CALL_FROM_TB1(compute_hflags, env); | |
709 | - if (loglevel & CPU_LOG_EXEC) | |
710 | - CALL_FROM_TB0(debug_post_eret); | |
711 | - env->CP0_LLAddr = 1; | |
712 | - FORCE_RET(); | |
713 | -} | |
714 | - | |
715 | -void op_rdhwr_cpunum(void) | |
716 | -{ | |
717 | - if ((env->hflags & MIPS_HFLAG_CP0) || | |
718 | - (env->CP0_HWREna & (1 << 0))) | |
719 | - T0 = env->CP0_EBase & 0x3ff; | |
720 | - else | |
721 | - CALL_FROM_TB1(do_raise_exception, EXCP_RI); | |
722 | - FORCE_RET(); | |
723 | -} | |
724 | - | |
725 | -void op_rdhwr_synci_step(void) | |
726 | -{ | |
727 | - if ((env->hflags & MIPS_HFLAG_CP0) || | |
728 | - (env->CP0_HWREna & (1 << 1))) | |
729 | - T0 = env->SYNCI_Step; | |
730 | - else | |
731 | - CALL_FROM_TB1(do_raise_exception, EXCP_RI); | |
732 | - FORCE_RET(); | |
733 | -} | |
734 | - | |
735 | -void op_rdhwr_cc(void) | |
736 | -{ | |
737 | - if ((env->hflags & MIPS_HFLAG_CP0) || | |
738 | - (env->CP0_HWREna & (1 << 2))) | |
739 | - T0 = env->CP0_Count; | |
740 | - else | |
741 | - CALL_FROM_TB1(do_raise_exception, EXCP_RI); | |
742 | - FORCE_RET(); | |
743 | -} | |
744 | - | |
745 | -void op_rdhwr_ccres(void) | |
746 | -{ | |
747 | - if ((env->hflags & MIPS_HFLAG_CP0) || | |
748 | - (env->CP0_HWREna & (1 << 3))) | |
749 | - T0 = env->CCRes; | |
750 | - else | |
751 | - CALL_FROM_TB1(do_raise_exception, EXCP_RI); | |
752 | - FORCE_RET(); | |
753 | -} | |
754 | - | |
755 | -/* Bitfield operations. */ | |
756 | -void op_ext(void) | |
757 | -{ | |
758 | - unsigned int pos = PARAM1; | |
759 | - unsigned int size = PARAM2; | |
760 | - | |
761 | - T0 = (int32_t)((T1 >> pos) & ((size < 32) ? ((1 << size) - 1) : ~0)); | |
762 | - FORCE_RET(); | |
763 | -} | |
764 | - | |
765 | -void op_ins(void) | |
766 | -{ | |
767 | - unsigned int pos = PARAM1; | |
768 | - unsigned int size = PARAM2; | |
769 | - target_ulong mask = ((size < 32) ? ((1 << size) - 1) : ~0) << pos; | |
770 | - | |
771 | - T0 = (int32_t)((T0 & ~mask) | ((T1 << pos) & mask)); | |
772 | - FORCE_RET(); | |
773 | -} | |
774 | - | |
775 | -void op_wsbh(void) | |
776 | -{ | |
777 | - T0 = (int32_t)(((T1 << 8) & ~0x00FF00FF) | ((T1 >> 8) & 0x00FF00FF)); | |
778 | - FORCE_RET(); | |
779 | -} | |
780 | - | |
781 | -#if defined(TARGET_MIPS64) | |
782 | -void op_dext(void) | |
783 | -{ | |
784 | - unsigned int pos = PARAM1; | |
785 | - unsigned int size = PARAM2; | |
786 | - | |
787 | - T0 = (T1 >> pos) & ((size < 64) ? ((1ULL << size) - 1) : ~0ULL); | |
788 | - FORCE_RET(); | |
789 | -} | |
790 | - | |
791 | -void op_dins(void) | |
792 | -{ | |
793 | - unsigned int pos = PARAM1; | |
794 | - unsigned int size = PARAM2; | |
795 | - target_ulong mask = ((size < 64) ? ((1ULL << size) - 1) : ~0ULL) << pos; | |
796 | - | |
797 | - T0 = (T0 & ~mask) | ((T1 << pos) & mask); | |
798 | - FORCE_RET(); | |
799 | -} | |
800 | - | |
801 | -void op_dsbh(void) | |
802 | -{ | |
803 | - T0 = ((T1 << 8) & ~0x00FF00FF00FF00FFULL) | ((T1 >> 8) & 0x00FF00FF00FF00FFULL); | |
804 | - FORCE_RET(); | |
805 | -} | |
806 | - | |
807 | -void op_dshd(void) | |
808 | -{ | |
809 | - T1 = ((T1 << 16) & ~0x0000FFFF0000FFFFULL) | ((T1 >> 16) & 0x0000FFFF0000FFFFULL); | |
810 | - T0 = (T1 << 32) | (T1 >> 32); | |
811 | - FORCE_RET(); | |
812 | -} | |
813 | -#endif | ... | ... |
target-mips/op_helper.c
... | ... | @@ -1348,6 +1348,21 @@ void dump_sc (void) |
1348 | 1348 | } |
1349 | 1349 | } |
1350 | 1350 | |
1351 | +/* Specials */ | |
1352 | +void do_di (void) | |
1353 | +{ | |
1354 | + T0 = env->CP0_Status; | |
1355 | + env->CP0_Status = T0 & ~(1 << CP0St_IE); | |
1356 | + cpu_mips_update_irq(env); | |
1357 | +} | |
1358 | + | |
1359 | +void do_ei (void) | |
1360 | +{ | |
1361 | + T0 = env->CP0_Status; | |
1362 | + env->CP0_Status = T0 | (1 << CP0St_IE); | |
1363 | + cpu_mips_update_irq(env); | |
1364 | +} | |
1365 | + | |
1351 | 1366 | void debug_pre_eret (void) |
1352 | 1367 | { |
1353 | 1368 | fprintf(logfile, "ERET: PC " TARGET_FMT_lx " EPC " TARGET_FMT_lx, |
... | ... | @@ -1375,6 +1390,114 @@ void debug_post_eret (void) |
1375 | 1390 | } |
1376 | 1391 | } |
1377 | 1392 | |
1393 | +void do_eret (void) | |
1394 | +{ | |
1395 | + if (loglevel & CPU_LOG_EXEC) | |
1396 | + debug_pre_eret(); | |
1397 | + if (env->CP0_Status & (1 << CP0St_ERL)) { | |
1398 | + env->PC[env->current_tc] = env->CP0_ErrorEPC; | |
1399 | + env->CP0_Status &= ~(1 << CP0St_ERL); | |
1400 | + } else { | |
1401 | + env->PC[env->current_tc] = env->CP0_EPC; | |
1402 | + env->CP0_Status &= ~(1 << CP0St_EXL); | |
1403 | + } | |
1404 | + compute_hflags(env); | |
1405 | + if (loglevel & CPU_LOG_EXEC) | |
1406 | + debug_post_eret(); | |
1407 | + env->CP0_LLAddr = 1; | |
1408 | +} | |
1409 | + | |
1410 | +void do_deret (void) | |
1411 | +{ | |
1412 | + if (loglevel & CPU_LOG_EXEC) | |
1413 | + debug_pre_eret(); | |
1414 | + env->PC[env->current_tc] = env->CP0_DEPC; | |
1415 | + env->hflags &= MIPS_HFLAG_DM; | |
1416 | + compute_hflags(env); | |
1417 | + if (loglevel & CPU_LOG_EXEC) | |
1418 | + debug_post_eret(); | |
1419 | + env->CP0_LLAddr = 1; | |
1420 | +} | |
1421 | + | |
1422 | +void do_rdhwr_cpunum(void) | |
1423 | +{ | |
1424 | + if ((env->hflags & MIPS_HFLAG_CP0) || | |
1425 | + (env->CP0_HWREna & (1 << 0))) | |
1426 | + T0 = env->CP0_EBase & 0x3ff; | |
1427 | + else | |
1428 | + do_raise_exception(EXCP_RI); | |
1429 | +} | |
1430 | + | |
1431 | +void do_rdhwr_synci_step(void) | |
1432 | +{ | |
1433 | + if ((env->hflags & MIPS_HFLAG_CP0) || | |
1434 | + (env->CP0_HWREna & (1 << 1))) | |
1435 | + T0 = env->SYNCI_Step; | |
1436 | + else | |
1437 | + do_raise_exception(EXCP_RI); | |
1438 | +} | |
1439 | + | |
1440 | +void do_rdhwr_cc(void) | |
1441 | +{ | |
1442 | + if ((env->hflags & MIPS_HFLAG_CP0) || | |
1443 | + (env->CP0_HWREna & (1 << 2))) | |
1444 | + T0 = env->CP0_Count; | |
1445 | + else | |
1446 | + do_raise_exception(EXCP_RI); | |
1447 | +} | |
1448 | + | |
1449 | +void do_rdhwr_ccres(void) | |
1450 | +{ | |
1451 | + if ((env->hflags & MIPS_HFLAG_CP0) || | |
1452 | + (env->CP0_HWREna & (1 << 3))) | |
1453 | + T0 = env->CCRes; | |
1454 | + else | |
1455 | + do_raise_exception(EXCP_RI); | |
1456 | +} | |
1457 | + | |
1458 | +/* Bitfield operations. */ | |
1459 | +void do_ext(uint32_t pos, uint32_t size) | |
1460 | +{ | |
1461 | + T0 = (int32_t)((T1 >> pos) & ((size < 32) ? ((1 << size) - 1) : ~0)); | |
1462 | +} | |
1463 | + | |
1464 | +void do_ins(uint32_t pos, uint32_t size) | |
1465 | +{ | |
1466 | + target_ulong mask = ((size < 32) ? ((1 << size) - 1) : ~0) << pos; | |
1467 | + | |
1468 | + T0 = (int32_t)((T0 & ~mask) | ((T1 << pos) & mask)); | |
1469 | +} | |
1470 | + | |
1471 | +void do_wsbh(void) | |
1472 | +{ | |
1473 | + T0 = (int32_t)(((T1 << 8) & ~0x00FF00FF) | ((T1 >> 8) & 0x00FF00FF)); | |
1474 | +} | |
1475 | + | |
1476 | +#if defined(TARGET_MIPS64) | |
1477 | +void do_dext(uint32_t pos, uint32_t size) | |
1478 | +{ | |
1479 | + T0 = (T1 >> pos) & ((size < 64) ? ((1ULL << size) - 1) : ~0ULL); | |
1480 | +} | |
1481 | + | |
1482 | +void do_dins(uint32_t pos, uint32_t size) | |
1483 | +{ | |
1484 | + target_ulong mask = ((size < 64) ? ((1ULL << size) - 1) : ~0ULL) << pos; | |
1485 | + | |
1486 | + T0 = (T0 & ~mask) | ((T1 << pos) & mask); | |
1487 | +} | |
1488 | + | |
1489 | +void do_dsbh(void) | |
1490 | +{ | |
1491 | + T0 = ((T1 << 8) & ~0x00FF00FF00FF00FFULL) | ((T1 >> 8) & 0x00FF00FF00FF00FFULL); | |
1492 | +} | |
1493 | + | |
1494 | +void do_dshd(void) | |
1495 | +{ | |
1496 | + T1 = ((T1 << 16) & ~0x0000FFFF0000FFFFULL) | ((T1 >> 16) & 0x0000FFFF0000FFFFULL); | |
1497 | + T0 = (T1 << 32) | (T1 >> 32); | |
1498 | +} | |
1499 | +#endif | |
1500 | + | |
1378 | 1501 | void do_pmon (int function) |
1379 | 1502 | { |
1380 | 1503 | function /= 2; | ... | ... |
target-mips/translate.c
... | ... | @@ -2512,49 +2512,49 @@ static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt, |
2512 | 2512 | case OPC_EXT: |
2513 | 2513 | if (lsb + msb > 31) |
2514 | 2514 | goto fail; |
2515 | - gen_op_ext(lsb, msb + 1); | |
2515 | + tcg_gen_helper_0_2ii(do_ext, lsb, msb + 1); | |
2516 | 2516 | break; |
2517 | 2517 | #if defined(TARGET_MIPS64) |
2518 | 2518 | case OPC_DEXTM: |
2519 | 2519 | if (lsb + msb > 63) |
2520 | 2520 | goto fail; |
2521 | - gen_op_dext(lsb, msb + 1 + 32); | |
2521 | + tcg_gen_helper_0_2ii(do_dext, lsb, msb + 1 + 32); | |
2522 | 2522 | break; |
2523 | 2523 | case OPC_DEXTU: |
2524 | 2524 | if (lsb + msb > 63) |
2525 | 2525 | goto fail; |
2526 | - gen_op_dext(lsb + 32, msb + 1); | |
2526 | + tcg_gen_helper_0_2ii(do_dext, lsb + 32, msb + 1); | |
2527 | 2527 | break; |
2528 | 2528 | case OPC_DEXT: |
2529 | 2529 | if (lsb + msb > 63) |
2530 | 2530 | goto fail; |
2531 | - gen_op_dext(lsb, msb + 1); | |
2531 | + tcg_gen_helper_0_2ii(do_dext, lsb, msb + 1); | |
2532 | 2532 | break; |
2533 | 2533 | #endif |
2534 | 2534 | case OPC_INS: |
2535 | 2535 | if (lsb > msb) |
2536 | 2536 | goto fail; |
2537 | 2537 | gen_load_gpr(cpu_T[0], rt); |
2538 | - gen_op_ins(lsb, msb - lsb + 1); | |
2538 | + tcg_gen_helper_0_2ii(do_ins, lsb, msb - lsb + 1); | |
2539 | 2539 | break; |
2540 | 2540 | #if defined(TARGET_MIPS64) |
2541 | 2541 | case OPC_DINSM: |
2542 | 2542 | if (lsb > msb) |
2543 | 2543 | goto fail; |
2544 | 2544 | gen_load_gpr(cpu_T[0], rt); |
2545 | - gen_op_dins(lsb, msb - lsb + 1 + 32); | |
2545 | + tcg_gen_helper_0_2ii(do_dins, lsb, msb - lsb + 1 + 32); | |
2546 | 2546 | break; |
2547 | 2547 | case OPC_DINSU: |
2548 | 2548 | if (lsb > msb) |
2549 | 2549 | goto fail; |
2550 | 2550 | gen_load_gpr(cpu_T[0], rt); |
2551 | - gen_op_dins(lsb + 32, msb - lsb + 1); | |
2551 | + tcg_gen_helper_0_2ii(do_dins, lsb + 32, msb - lsb + 1); | |
2552 | 2552 | break; |
2553 | 2553 | case OPC_DINS: |
2554 | 2554 | if (lsb > msb) |
2555 | 2555 | goto fail; |
2556 | 2556 | gen_load_gpr(cpu_T[0], rt); |
2557 | - gen_op_dins(lsb, msb - lsb + 1); | |
2557 | + tcg_gen_helper_0_2ii(do_dins, lsb, msb - lsb + 1); | |
2558 | 2558 | break; |
2559 | 2559 | #endif |
2560 | 2560 | default: |
... | ... | @@ -5348,7 +5348,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int |
5348 | 5348 | opn = "eret"; |
5349 | 5349 | check_insn(env, ctx, ISA_MIPS2); |
5350 | 5350 | save_cpu_state(ctx, 1); |
5351 | - gen_op_eret(); | |
5351 | + tcg_gen_helper_0_0(do_eret); | |
5352 | 5352 | ctx->bstate = BS_EXCP; |
5353 | 5353 | break; |
5354 | 5354 | case OPC_DERET: |
... | ... | @@ -5359,7 +5359,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int |
5359 | 5359 | generate_exception(ctx, EXCP_RI); |
5360 | 5360 | } else { |
5361 | 5361 | save_cpu_state(ctx, 1); |
5362 | - gen_op_deret(); | |
5362 | + tcg_gen_helper_0_0(do_deret); | |
5363 | 5363 | ctx->bstate = BS_EXCP; |
5364 | 5364 | } |
5365 | 5365 | break; |
... | ... | @@ -6792,33 +6792,33 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
6792 | 6792 | } |
6793 | 6793 | break; |
6794 | 6794 | case OPC_SPECIAL3: |
6795 | - op1 = MASK_SPECIAL3(ctx->opcode); | |
6796 | - switch (op1) { | |
6797 | - case OPC_EXT: | |
6798 | - case OPC_INS: | |
6799 | - check_insn(env, ctx, ISA_MIPS32R2); | |
6800 | - gen_bitops(ctx, op1, rt, rs, sa, rd); | |
6801 | - break; | |
6802 | - case OPC_BSHFL: | |
6803 | - check_insn(env, ctx, ISA_MIPS32R2); | |
6804 | - op2 = MASK_BSHFL(ctx->opcode); | |
6805 | - switch (op2) { | |
6806 | - case OPC_WSBH: | |
6807 | - gen_load_gpr(cpu_T[1], rt); | |
6808 | - gen_op_wsbh(); | |
6809 | - break; | |
6810 | - case OPC_SEB: | |
6811 | - gen_load_gpr(cpu_T[1], rt); | |
6812 | - tcg_gen_ext8s_tl(cpu_T[0], cpu_T[1]); | |
6813 | - break; | |
6814 | - case OPC_SEH: | |
6815 | - gen_load_gpr(cpu_T[1], rt); | |
6816 | - tcg_gen_ext16s_tl(cpu_T[0], cpu_T[1]); | |
6817 | - break; | |
6818 | - default: /* Invalid */ | |
6819 | - MIPS_INVAL("bshfl"); | |
6820 | - generate_exception(ctx, EXCP_RI); | |
6821 | - break; | |
6795 | + op1 = MASK_SPECIAL3(ctx->opcode); | |
6796 | + switch (op1) { | |
6797 | + case OPC_EXT: | |
6798 | + case OPC_INS: | |
6799 | + check_insn(env, ctx, ISA_MIPS32R2); | |
6800 | + gen_bitops(ctx, op1, rt, rs, sa, rd); | |
6801 | + break; | |
6802 | + case OPC_BSHFL: | |
6803 | + check_insn(env, ctx, ISA_MIPS32R2); | |
6804 | + op2 = MASK_BSHFL(ctx->opcode); | |
6805 | + switch (op2) { | |
6806 | + case OPC_WSBH: | |
6807 | + gen_load_gpr(cpu_T[1], rt); | |
6808 | + tcg_gen_helper_0_0(do_wsbh); | |
6809 | + break; | |
6810 | + case OPC_SEB: | |
6811 | + gen_load_gpr(cpu_T[1], rt); | |
6812 | + tcg_gen_ext8s_tl(cpu_T[0], cpu_T[1]); | |
6813 | + break; | |
6814 | + case OPC_SEH: | |
6815 | + gen_load_gpr(cpu_T[1], rt); | |
6816 | + tcg_gen_ext16s_tl(cpu_T[0], cpu_T[1]); | |
6817 | + break; | |
6818 | + default: /* Invalid */ | |
6819 | + MIPS_INVAL("bshfl"); | |
6820 | + generate_exception(ctx, EXCP_RI); | |
6821 | + break; | |
6822 | 6822 | } |
6823 | 6823 | gen_store_gpr(cpu_T[0], rd); |
6824 | 6824 | break; |
... | ... | @@ -6827,24 +6827,26 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
6827 | 6827 | switch (rd) { |
6828 | 6828 | case 0: |
6829 | 6829 | save_cpu_state(ctx, 1); |
6830 | - gen_op_rdhwr_cpunum(); | |
6830 | + tcg_gen_helper_0_0(do_rdhwr_cpunum); | |
6831 | 6831 | break; |
6832 | 6832 | case 1: |
6833 | 6833 | save_cpu_state(ctx, 1); |
6834 | - gen_op_rdhwr_synci_step(); | |
6834 | + tcg_gen_helper_0_0(do_rdhwr_synci_step); | |
6835 | 6835 | break; |
6836 | 6836 | case 2: |
6837 | 6837 | save_cpu_state(ctx, 1); |
6838 | - gen_op_rdhwr_cc(); | |
6838 | + tcg_gen_helper_0_0(do_rdhwr_cc); | |
6839 | 6839 | break; |
6840 | 6840 | case 3: |
6841 | 6841 | save_cpu_state(ctx, 1); |
6842 | - gen_op_rdhwr_ccres(); | |
6842 | + tcg_gen_helper_0_0(do_rdhwr_ccres); | |
6843 | 6843 | break; |
6844 | 6844 | case 29: |
6845 | 6845 | #if defined (CONFIG_USER_ONLY) |
6846 | 6846 | tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, tls_value)); |
6847 | 6847 | break; |
6848 | +#else | |
6849 | + /* XXX: Some CPUs implement this in hardware. Not supported yet. */ | |
6848 | 6850 | #endif |
6849 | 6851 | default: /* Invalid */ |
6850 | 6852 | MIPS_INVAL("rdhwr"); |
... | ... | @@ -6879,11 +6881,11 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
6879 | 6881 | switch (op2) { |
6880 | 6882 | case OPC_DSBH: |
6881 | 6883 | gen_load_gpr(cpu_T[1], rt); |
6882 | - gen_op_dsbh(); | |
6884 | + tcg_gen_helper_0_0(do_dsbh); | |
6883 | 6885 | break; |
6884 | 6886 | case OPC_DSHD: |
6885 | 6887 | gen_load_gpr(cpu_T[1], rt); |
6886 | - gen_op_dshd(); | |
6888 | + tcg_gen_helper_0_0(do_dshd); | |
6887 | 6889 | break; |
6888 | 6890 | default: /* Invalid */ |
6889 | 6891 | MIPS_INVAL("dbshfl"); |
... | ... | @@ -6963,14 +6965,14 @@ static void decode_opc (CPUState *env, DisasContext *ctx) |
6963 | 6965 | case OPC_DI: |
6964 | 6966 | check_insn(env, ctx, ISA_MIPS32R2); |
6965 | 6967 | save_cpu_state(ctx, 1); |
6966 | - gen_op_di(); | |
6968 | + tcg_gen_helper_0_0(do_di); | |
6967 | 6969 | /* Stop translation as we may have switched the execution mode */ |
6968 | 6970 | ctx->bstate = BS_STOP; |
6969 | 6971 | break; |
6970 | 6972 | case OPC_EI: |
6971 | 6973 | check_insn(env, ctx, ISA_MIPS32R2); |
6972 | 6974 | save_cpu_state(ctx, 1); |
6973 | - gen_op_ei(); | |
6975 | + tcg_gen_helper_0_0(do_ei); | |
6974 | 6976 | /* Stop translation as we may have switched the execution mode */ |
6975 | 6977 | ctx->bstate = BS_STOP; |
6976 | 6978 | break; | ... | ... |