42 static void gather_statistics(
struct cpu *
cpu)
48 int low_pc = ((size_t)
cpu->
cd.DYNTRANS_ARCH.next_ic - (
size_t)
52 fatal(
"statistics gathering with no filename set is"
65 strlcat(buf,
" ",
sizeof(buf));
69 snprintf(buf +
strlen(buf),
sizeof(buf),
75 cpu->
cd.DYNTRANS_ARCH.cur_ic_page;
76 a =
cpu->
cd.DYNTRANS_ARCH.cur_physpage->physaddr;
81 snprintf(buf +
strlen(buf),
sizeof(buf),
82 "0x%08" PRIx32, (uint32_t)a);
84 snprintf(buf +
strlen(buf),
sizeof(buf),
85 "0x%016" PRIx64, (uint64_t)a);
94 snprintf(buf +
strlen(buf),
sizeof(buf),
95 "0x%08" PRIx32, (uint32_t)a);
97 snprintf(buf +
strlen(buf),
sizeof(buf),
98 "0x%016" PRIx64, (uint64_t)a);
108 #define S gather_statistics(cpu)
114 #define I ic = cpu->cd.DYNTRANS_ARCH.next_ic ++; ic->f(cpu, ic);
119 #define I ic = cpu->cd.DYNTRANS_ARCH.next_ic ++; \
121 int low_pc = ((size_t)cpu->cd.DYNTRANS_ARCH.next_ic - \
122 (size_t)cpu->cd.DYNTRANS_ARCH.cur_ic_page) / \
123 sizeof(struct DYNTRANS_IC); \
124 printf("cur_ic_page=%p ic=%p (low_pc=0x%x)\n", \
125 cpu->cd.DYNTRANS_ARCH.cur_ic_page, \
126 ic, low_pc << DYNTRANS_INSTR_ALIGNMENT_SHIFT); \
167 #ifdef DYNTRANS_RUN_INSTR_DEF
180 int low_pc, n_instrs;
183 #ifdef DYNTRANS_DUALMODE_32
185 DYNTRANS_PC_TO_POINTERS32(
cpu);
268 cpu->
cd.DYNTRANS_ARCH.cur_ic_page;
283 unsigned char instr[1 <<
287 fatal(
"XXX_run_instr(): could not read "
288 "the instruction\n");
290 #ifdef DYNTRANS_DELAYSLOT
295 #ifdef DYNTRANS_DELAYSLOT
299 fatal(
"WARNING: ihd func not yet"
379 low_pc = ((size_t)
cpu->
cd.DYNTRANS_ARCH.next_ic - (
size_t)
404 int32_t diff1, diff2;
410 (int32_t) (old + n_instrs);
424 if (diff1 > 0 && diff2 <= 0)
455 #ifdef DYNTRANS_FUNCTION_TRACE_DEF
465 int show_symbolic_function_name = 1;
469 int x, print_dots = 1, n_args_to_print =
470 #if defined(DYNTRANS_ALPHA)
473 #if defined(DYNTRANS_SH) || defined(DYNTRANS_M88K)
481 if (n_args >= 0 && n_args <= n_args_to_print) {
483 n_args_to_print = n_args;
489 show_symbolic_function_name = 0;
504 for (x=0; x<n_args_to_print; x++) {
505 int64_t d =
cpu->
cd.DYNTRANS_ARCH.
529 if (d > -256 && d < 256)
532 memset(strbuf, 0,
sizeof(strbuf));
534 cpu->
mem, d, strbuf,
sizeof(strbuf));
535 fatal(
"\"%s\"", strbuf);
540 if (
strlen(strbuf) >=
sizeof(strbuf)-1)
542 }
else if (
symbol != NULL && ot == 0 &&
543 show_symbolic_function_name)
547 fatal(
"0x%" PRIx32, (uint32_t)d);
549 fatal(
"0x%" PRIx64, (uint64_t)d);
552 if (x < n_args_to_print - 1)
563 #ifdef DYNTRANS_TC_ALLOCATE_DEFAULT_PAGE_DEF
579 memcpy(ppp,
cpu->
cd.DYNTRANS_ARCH.physpage_template,
sizeof(
594 #ifdef DYNTRANS_PC_TO_POINTERS_FUNC
607 cached_pc =
cpu->
pc, physaddr = 0;
608 uint32_t physpage_ofs;
609 int ok, pagenr, table_index;
610 uint32_t *physpage_entryp;
628 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
637 if (
cpu->
cd.DYNTRANS_ARCH.host_load[index] != NULL) {
638 physaddr =
cpu->
cd.DYNTRANS_ARCH.phys_addr[index];
642 if (l3->host_load[x3] != NULL) {
643 physaddr = l3->phys_addr[x3];
652 #if defined(MODE32) && defined(DYNTRANS_MIPS)
680 if (
cpu->
cd.DYNTRANS_ARCH.host_load[index] != NULL) {
681 paddr =
cpu->
cd.DYNTRANS_ARCH.phys_addr[index];
690 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
692 if (l3->host_load[x3] != NULL) {
693 paddr = l3->phys_addr[x3];
708 fatal(
"FATAL: could not find physical"
709 " address of the exception handler?");
720 if (
cpu->
cd.DYNTRANS_ARCH.host_load[index] == NULL) {
722 if (l3->host_load[x3] == NULL) {
727 if (host_page != NULL) {
729 host_page, 0, physaddr);
734 #ifdef UNSTABLE_DEVEL
735 fatal(
"[ dyntrans: resetting the translation cache ]\n");
744 physpage_ofs = *physpage_entryp;
748 while (physpage_ofs != 0) {
753 if (ppp->physaddr == physaddr)
757 physpage_ofs = ppp->next_ofs;
765 if (physpage_ofs == 0) {
766 uint32_t previous_first_page_in_chain;
772 previous_first_page_in_chain = *physpage_entryp;
775 *physpage_entryp = physpage_ofs =
785 ppp->next_ofs = previous_first_page_in_chain;
791 if (
cpu->
cd.DYNTRANS_ARCH.host_load[index] != NULL)
792 cpu->
cd.DYNTRANS_ARCH.phys_page[index] = ppp;
794 if (l3->host_load[x3] != NULL)
795 l3->phys_page[x3] = ppp;
803 if (ppp->translations_bitmap == 0) {
808 cpu->
cd.DYNTRANS_ARCH.cur_ic_page = &ppp->ics[0];
810 cpu->
cd.DYNTRANS_ARCH.next_ic =
cpu->
cd.DYNTRANS_ARCH.cur_ic_page +
845 ppp =
cpu->
cd.DYNTRANS_ARCH.phys_page[index];
859 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
861 ppp = l3->phys_page[x3];
871 cpu->
cd.DYNTRANS_ARCH.cur_ic_page = &ppp->ics[0];
872 cpu->
cd.DYNTRANS_ARCH.next_ic =
cpu->
cd.DYNTRANS_ARCH.cur_ic_page +
883 #ifdef DYNTRANS_INIT_TABLES
888 #ifdef DYNTRANS_DUALMODE_32
889 static void instr32(to_be_translated)(
struct cpu *,
struct DYNTRANS_IC *);
890 static void instr32(end_of_page)(
struct cpu *,
struct DYNTRANS_IC *);
893 #ifdef DYNTRANS_DUALMODE_32
894 #define TO_BE_TRANSLATED ( cpu->is_32bit? instr32(to_be_translated) : \
895 instr(to_be_translated) )
897 #define TO_BE_TRANSLATED ( instr(to_be_translated) )
900 #ifdef DYNTRANS_DELAYSLOT
902 #ifdef DYNTRANS_DUALMODE_32
903 static void instr32(end_of_page2)(
struct cpu *,
struct DYNTRANS_IC *);
927 ppp->translations_bitmap = 0;
928 ppp->translation_ranges_ofs = 0;
932 ppp->ics[i].f = TO_BE_TRANSLATED;
942 #ifdef DYNTRANS_DELAYSLOT
944 #ifdef DYNTRANS_DUALMODE_32
950 cpu->
cd.DYNTRANS_ARCH.physpage_template = ppp;
961 cpu->
cd.DYNTRANS_ARCH.l2_64_dummy = dummy_l2;
962 cpu->
cd.DYNTRANS_ARCH.l3_64_dummy = dummy_l3;
965 cpu->
cd.DYNTRANS_ARCH.l1_64[x1] = dummy_l2;
968 dummy_l2->l3[x2] = dummy_l3;
975 #ifdef DYNTRANS_INVAL_ENTRY
991 vaddr_page,
int flags)
997 cpu->
cd.DYNTRANS_ARCH.is_userpage[index >> 5] &= ~(1 << (index & 31));
1003 cpu->
cd.DYNTRANS_ARCH.host_store[index] = NULL;
1005 int tlbi =
cpu->
cd.DYNTRANS_ARCH.vaddr_to_tlbindex[index];
1006 cpu->
cd.DYNTRANS_ARCH.host_load[index] = NULL;
1007 cpu->
cd.DYNTRANS_ARCH.host_store[index] = NULL;
1008 cpu->
cd.DYNTRANS_ARCH.phys_addr[index] = 0;
1009 cpu->
cd.DYNTRANS_ARCH.phys_page[index] = NULL;
1011 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[tlbi-1].valid = 0;
1012 cpu->
cd.DYNTRANS_ARCH.vaddr_to_tlbindex[index] = 0;
1019 uint32_t x1, x2, x3;
1027 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1028 if (l2 ==
cpu->
cd.DYNTRANS_ARCH.l2_64_dummy)
1032 if (l3 ==
cpu->
cd.DYNTRANS_ARCH.l3_64_dummy)
1036 l3->host_store[x3] = NULL;
1048 for (x1 = 0; x1 <= mask1; x1 ++) {
1049 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1050 if (l2 ==
cpu->
cd.DYNTRANS_ARCH.l2_64_dummy)
1053 for (x1b = 0; x1b <= mask1; x1b ++)
1055 l2 ==
cpu->
cd.DYNTRANS_ARCH.l1_64[x1b]) {
1056 fatal(
"L2 reuse: %p\n", l2);
1065 for (i=0; i<=mask3; i++)
1066 if (l3->vaddr_to_tlbindex[i])
1068 if (n != l3->refcount) {
1069 printf(
"Z: %i in use, but refcount = %i!\n", n, l3->refcount);
1074 for (i=0; i<=mask3; i++)
1075 if (l3->host_load[i] != NULL)
1077 if (n != l3->refcount) {
1078 printf(
"ZHL: %i in use, but refcount = %i!\n", n, l3->refcount);
1112 l3->host_load[x3] = NULL;
1113 l3->host_store[x3] = NULL;
1114 l3->phys_addr[x3] = 0;
1115 l3->phys_page[x3] = NULL;
1116 if (l3->vaddr_to_tlbindex[x3] != 0) {
1117 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[
1118 l3->vaddr_to_tlbindex[x3] - 1].valid = 0;
1131 l3->vaddr_to_tlbindex[x3] = 0;
1133 if (l3->refcount < 0) {
1134 fatal(
"xxx_invalidate_tlb_entry(): huh? Refcount bug.\n");
1138 if (l3->refcount == 0) {
1139 l3->next =
cpu->
cd.DYNTRANS_ARCH.next_free_l3;
1140 cpu->
cd.DYNTRANS_ARCH.next_free_l3 = l3;
1141 l2->l3[x2] =
cpu->
cd.DYNTRANS_ARCH.l3_64_dummy;
1148 for (i=0; i<=mask3; i++)
1149 if (l3->host_load[i] != NULL) {
1150 fatal(
"TRYING TO RETURN A NON-CLEAN L3 PAGE!\n");
1156 if (l2->refcount < 0) {
1157 fatal(
"xxx_invalidate_tlb_entry(): Refcount bug L2.\n");
1160 if (l2->refcount == 0) {
1161 l2->next =
cpu->
cd.DYNTRANS_ARCH.next_free_l2;
1162 cpu->
cd.DYNTRANS_ARCH.next_free_l2 = l2;
1163 cpu->
cd.DYNTRANS_ARCH.l1_64[x1] =
1164 cpu->
cd.DYNTRANS_ARCH.l2_64_dummy;
1172 #ifdef DYNTRANS_INVALIDATE_TC
1220 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid &&
1221 (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].vaddr_page
1228 debug(
"[ DYNTRANS_INVALIDATE_TC: CACHE COLLISION vaddr 0x%016llx! ]\n",
1229 (
long long)addr_page);
1240 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid &&
1241 (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].vaddr_page
1242 & 0xf0000000) == addr_page) {
1257 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid) {
1272 fatal(
"HUH? Invalidate: Not vaddr, all, or paddr?\n");
1277 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid && addr_page
1278 ==
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].paddr_page) {
1280 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].vaddr_page,
1283 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r]
1286 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r]
1295 #ifdef DYNTRANS_INVALIDATE_TC_CODE
1310 vaddr_page, paddr_page;
1318 int pagenr, table_index;
1319 uint32_t physpage_ofs, *physpage_entryp;
1325 physpage_entryp = &(((uint32_t *)
cpu->
1326 translation_cache)[table_index]);
1327 physpage_ofs = *physpage_entryp;
1331 if (physpage_ofs == 0)
1334 prev_ppp = ppp = NULL;
1337 while (physpage_ofs != 0) {
1344 if (ppp->physaddr ==
addr)
1348 physpage_ofs = ppp->next_ofs;
1353 if (physpage_ofs == 0)
1365 if (prev_ppp != NULL)
1366 prev_ppp->next_ofs = ppp->next_ofs;
1368 *physpage_entryp = ppp->next_ofs;
1380 if (ppp != NULL && ppp->translations_bitmap != 0) {
1381 uint32_t x = ppp->translations_bitmap;
1400 for (i=0; i<n; i++) {
1403 ppp->ics[i*m + j].f =
1410 ppp->translations_bitmap = 0;
1413 if (ppp->translation_ranges_ofs != 0) {
1417 ppp->translation_ranges_ofs);
1427 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid) {
1428 vaddr_page =
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r]
1430 paddr_page =
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r]
1439 cpu->
cd.DYNTRANS_ARCH.phys_page[index] = NULL;
1444 uint32_t x1, x2, x3;
1453 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1455 l3->phys_page[x3] = NULL;
1465 #ifdef DYNTRANS_UPDATE_TRANSLATION_TABLE
1472 unsigned char *host_page,
int writeflag, uint64_t paddr_page)
1474 int found, r, useraccess = 0;
1478 vaddr_page &= 0xffffffffULL;
1480 if (paddr_page > 0xffffffffULL) {
1481 fatal(
"update_translation_table(): v=0x%016" PRIx64
", h=%p w=%i"
1482 " p=0x%016" PRIx64
"\n", vaddr_page, host_page, writeflag,
1494 uint32_t x1, x2, x3;
1513 #ifdef DYNTRANS_M88K
1530 found = (int)
cpu->
cd.DYNTRANS_ARCH.vaddr_to_tlbindex[
1538 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1539 if (l2 ==
cpu->
cd.DYNTRANS_ARCH.l2_64_dummy)
1543 if (l3 ==
cpu->
cd.DYNTRANS_ARCH.l3_64_dummy)
1546 found = (int)l3->vaddr_to_tlbindex[x3] - 1;
1552 static unsigned int x = 0;
1555 if (
cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid) {
1558 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].vaddr_page,
1562 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid = 1;
1563 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].host_page = host_page;
1564 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].paddr_page = paddr_page;
1565 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].vaddr_page = vaddr_page;
1566 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].writeflag =
1572 cpu->
cd.DYNTRANS_ARCH.host_load[index] = host_page;
1573 cpu->
cd.DYNTRANS_ARCH.host_store[index] =
1574 writeflag? host_page : NULL;
1575 cpu->
cd.DYNTRANS_ARCH.phys_addr[index] = paddr_page;
1576 cpu->
cd.DYNTRANS_ARCH.phys_page[index] = NULL;
1577 cpu->
cd.DYNTRANS_ARCH.vaddr_to_tlbindex[index] = r + 1;
1580 cpu->
cd.DYNTRANS_ARCH.is_userpage[index >> 5]
1581 |= 1 << (index & 31);
1584 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1585 if (l2 ==
cpu->
cd.DYNTRANS_ARCH.l2_64_dummy) {
1586 if (
cpu->
cd.DYNTRANS_ARCH.next_free_l2 != NULL) {
1587 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1] =
1588 cpu->
cd.DYNTRANS_ARCH.next_free_l2;
1589 cpu->
cd.DYNTRANS_ARCH.next_free_l2 = l2->next;
1593 cpu->
cd.DYNTRANS_ARCH.l1_64[x1] =
1598 l2->l3[i] =
cpu->
cd.DYNTRANS_ARCH.
1601 if (l2->refcount != 0) {
1602 fatal(
"Huh? l2 Refcount problem.\n");
1606 if (l2 ==
cpu->
cd.DYNTRANS_ARCH.l2_64_dummy) {
1607 fatal(
"INTERNAL ERROR L2 reuse\n");
1611 if (l3 ==
cpu->
cd.DYNTRANS_ARCH.l3_64_dummy) {
1612 if (
cpu->
cd.DYNTRANS_ARCH.next_free_l3 != NULL) {
1614 cpu->
cd.DYNTRANS_ARCH.next_free_l3;
1615 cpu->
cd.DYNTRANS_ARCH.next_free_l3 = l3->next;
1621 if (l3->refcount != 0) {
1622 fatal(
"Huh? l3 Refcount problem.\n");
1627 if (l3 ==
cpu->
cd.DYNTRANS_ARCH.l3_64_dummy) {
1628 fatal(
"INTERNAL ERROR L3 reuse\n");
1632 l3->host_load[x3] = host_page;
1633 l3->host_store[x3] = writeflag? host_page : NULL;
1634 l3->phys_addr[x3] = paddr_page;
1635 l3->phys_page[x3] = NULL;
1636 l3->vaddr_to_tlbindex[x3] = r + 1;
1643 for (i=0; i<=mask3; i++)
1644 if (l3->vaddr_to_tlbindex[i])
1646 if (n != l3->refcount) {
1647 printf(
"X: %i in use, but refcount = %i!\n", n, l3->refcount);
1652 for (i=0; i<=mask3; i++)
1653 if (l3->host_load[i] != NULL)
1655 if (n != l3->refcount) {
1656 printf(
"XHL: %i in use, but refcount = %i!\n", n, l3->refcount);
1672 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].writeflag = 1;
1674 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].writeflag = 0;
1677 cpu->
cd.DYNTRANS_ARCH.phys_page[index] = NULL;
1679 cpu->
cd.DYNTRANS_ARCH.is_userpage[index>>5] &= ~(1<<(index&31));
1681 cpu->
cd.DYNTRANS_ARCH.is_userpage[index >> 5]
1682 |= 1 << (index & 31);
1684 if (
cpu->
cd.DYNTRANS_ARCH.phys_addr[index] == paddr_page) {
1686 cpu->
cd.DYNTRANS_ARCH.host_store[index] =
1689 cpu->
cd.DYNTRANS_ARCH.host_store[index] = NULL;
1692 cpu->
cd.DYNTRANS_ARCH.host_load[index] = host_page;
1693 cpu->
cd.DYNTRANS_ARCH.host_store[index] =
1694 writeflag? host_page : NULL;
1695 cpu->
cd.DYNTRANS_ARCH.phys_addr[index] = paddr_page;
1702 l2 =
cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
1704 if (l3->phys_addr[x3] == paddr_page) {
1706 l3->host_store[x3] = host_page;
1708 l3->host_store[x3] = NULL;
1711 l3->host_load[x3] = host_page;
1712 l3->host_store[x3] = writeflag? host_page : NULL;
1713 l3->phys_addr[x3] = paddr_page;
1724 for (i=0; i<=mask3; i++)
1725 if (l3->vaddr_to_tlbindex[i])
1727 if (n != l3->refcount) {
1728 printf(
"Y: %i in use, but refcount = %i!\n", n, l3->refcount);
1733 for (i=0; i<=mask3; i++)
1734 if (l3->host_load[i] != NULL)
1736 if (n != l3->refcount) {
1737 printf(
"YHL: %i in use, but refcount = %i!\n", n, l3->refcount);
1738 printf(
"Entry r = %i\n", r);
1739 printf(
"Valid = %i\n",
1740 cpu->
cd.DYNTRANS_ARCH.vph_tlb_entry[r].valid);
1755 #ifdef DYNTRANS_TO_BE_TRANSLATED_HEAD
1772 fatal(
"BREAKPOINT: pc = 0x%" PRIx32
"\n(The "
1773 "instruction has not yet executed.)\n",
1776 fatal(
"BREAKPOINT: pc = 0x%" PRIx64
"\n(The "
1777 "instruction has not yet executed.)\n",
1780 #ifdef DYNTRANS_DELAYSLOT
1782 fatal(
"ERROR! Breakpoint in a delay"
1783 " slot! Not yet supported.\n");
1787 goto stop_running_translated;
1796 #ifdef DYNTRANS_TO_BE_TRANSLATED_TAIL
1804 cpu->
cd.DYNTRANS_ARCH.cur_ic_page;
1809 sizeof(
cpu->
cd.DYNTRANS_ARCH.cur_physpage->
1810 translations_bitmap));
1811 x /= addr_per_translation_range;
1813 cpu->
cd.DYNTRANS_ARCH.cur_physpage->
1814 translations_bitmap |= (1 << x);
1829 && !in_crosspage_delayslot
1831 &&
cpu->
cd.DYNTRANS_ARCH.combination_check != NULL
1833 cpu->
cd.DYNTRANS_ARCH.combination_check(
cpu,
ic,
1837 cpu->
cd.DYNTRANS_ARCH.combination_check = NULL;
1840 if (
ic->f == TO_BE_TRANSLATED) {
1841 fatal(
"INTERNAL ERROR: ic->f not set!\n");
1844 if (
ic->f == NULL) {
1845 fatal(
"INTERNAL ERROR: ic->f == NULL!\n");
1865 || in_crosspage_delayslot
1870 ic->f = TO_BE_TRANSLATED;
1878 uint64_t baseaddr =
cpu->
pc;
1887 void (*old_f)(
struct cpu *,
1891 if (old_f != TO_BE_TRANSLATED)
1898 if (
ic[i].
f == old_f)
1926 ic->f = TO_BE_TRANSLATED;
1932 fatal(
"to_be_translated(): TODO: unimplemented instruction");
1936 fatal(
" at 0x%" PRIx32
"\n", (uint32_t)
cpu->
pc);
1938 fatal(
" at 0x%" PRIx64
"\n", (uint64_t)
cpu->
pc);
1947 stop_running_translated:
1951 ic =
cpu->
cd.DYNTRANS_ARCH.next_ic = ¬hing_call;
1952 cpu->
cd.DYNTRANS_ARCH.next_ic ++;
1954 #ifdef DYNTRANS_DELAYSLOT