summaryrefslogtreecommitdiff
path: root/uarch/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--uarch/core.cpp25
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