diff options
| -rw-r--r-- | uarch/core.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/uarch/core.cpp b/uarch/core.cpp index 76af173..e6fffdd 100644 --- a/uarch/core.cpp +++ b/uarch/core.cpp | |||
| @@ -100,27 +100,28 @@ void decode_stage::clock() { | |||
| 100 | return; | 100 | return; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | if (speculative_stores_sent != c.stores_done) { | 103 | inst_bundle i; |
| 104 | |||
| 105 | i.inst = decode(c.exec.ctlregs[FLAGS], | ||
| 106 | pc, | ||
| 107 | b.data[pc & memory::LINE_BYTE_OFFSET_MASK], | ||
| 108 | interrupt); | ||
| 109 | |||
| 110 | if ((i.inst.need_indirect_load || i.inst.need_exec_load) && speculative_stores_sent != c.stores_done) { | ||
| 104 | pte(b.tr, "z"); | 111 | pte(b.tr, "z"); |
| 105 | return; | 112 | return; |
| 106 | } | 113 | } |
| 107 | 114 | ||
| 108 | inst_bundle i; | 115 | // Commit point for decode |
| 116 | |||
| 117 | interrupt = false; | ||
| 109 | 118 | ||
| 110 | i.tr = infra::pt::child(b.tr); | ||
| 111 | i.gen = c.gen; | 119 | i.gen = c.gen; |
| 112 | i.pc = pc; | 120 | i.pc = pc; |
| 113 | i.icount = icount++; | 121 | i.icount = icount++; |
| 122 | i.tr = infra::pt::child(b.tr); | ||
| 114 | 123 | ||
| 115 | pte(i.tr, "D"); | 124 | pte(i.tr, "D", fmt::format("{:05o}: {}", pc, i.inst.disasm())); |
| 116 | |||
| 117 | i.inst = decode(c.exec.ctlregs[FLAGS], | ||
| 118 | pc, | ||
| 119 | b.data[pc & memory::LINE_BYTE_OFFSET_MASK], | ||
| 120 | interrupt); | ||
| 121 | interrupt = false; | ||
| 122 | |||
| 123 | pte(i.tr, "", fmt::format("{:05o}: {}", pc, i.inst.disasm())); | ||
| 124 | 125 | ||
| 125 | pc = i.inst.next_pc; | 126 | pc = i.inst.next_pc; |
| 126 | 127 | ||
