rcu_test
Two traces; the first without the link snapped, the second with. Examining the traces starting at the point where the link snap returns, and the corresponding point in the second trace:
CORE: core_read 60124234 000314000043 (INDIRECT_WORD_FETCH)
CORE: core_read 60124235 001711000000 (INDIRECT_WORD_FETCH)
APPENDING: do_append_cycle(J)
APPENDING: do_append_cycle(O)
APPENDING: do_append_cycle(O) TRR 4 RSDWH.R1 4 ITS.RNR 0
APPENDING: do_append_cycle(O) Set TRR to 4
APPENDING: do_append_cycle (Exit) PRR 4 PSR 00313 P 0 IC 000041
APPENDING: do_append_cycle (Exit) TRR 4 TSR 00247 TBR 00 CA 024234
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124234 readData=000314000043
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124235 readData=001711000000
APPENDING: do_ITS/ITP: 000314000043 001711000000 Tag:20
[[/code]]
The pre-snapped trace shows:
APPENDING: do_ITS/ITP: 000314000043 001711000000 Tag:66
The tag value is different?
static void do_ITS_ITP (word6 Tag, word6 * newtag)
{
word6 ind_tag = GET_TAG (cpu.itxPair [0]);
sim_debug (DBG_APPENDING, & cpu_dev,
"do_ITS/ITP: %012"PRIo64" %012"PRIo64" Tag:%o\n",
cpu.itxPair[0], cpu.itxPair[1], Tag);
Earlier in the listing (same in both traces):
ADDRMOD: IR_MOD: CT_HOLD=66 6
ADDRMOD: IR_MOD: fetching indirect word from 024234
So apparently Ct_HOLD is being misplaced?
// Figure 6-5. Indirect Then Register Modification Flowchart
IR_MOD:;
{
sim_debug (DBG_ADDRMOD, & cpu_dev,
"IR_MOD: CT_HOLD=%o %o\n", cpu.cu.CT_HOLD, Td);
sim_debug (DBG_ADDRMOD, & cpu_dev,
"IR_MOD: fetching indirect word from %06o\n",
cpu.TPR.CA);
...
// in case it turns out to be a ITS/ITP
iTAG = cpu.rTAG;
word18 saveCA = cpu.TPR.CA;
ReadIndirect ();
...
if ((saveCA & 1) == 0 && (ISITP (cpu.itxPair[0]) || ISITS (cpu.itxPair[0])))
{
do_ITS_ITP (iTAG, & cpu.rTAG);
}
I think this is okay; the tag value passed in to do_ItS_ITP is used only to check for incorrect address modifier fault.
Next in the traces:
unsnapped:
ADDRMOD: RI_MOD: cpu.itxPair[0]=000314000043 TPR.CA=001711 rTAG=00
ADDRMOD: updateIWB: IWB was 024234236020 024234 n*
ADDRMOD: updateIWB: IWB now 001711236000 001711
ADDRMOD: do_caf(startCA): restart; CT_HOLD 66
ADDRMOD: do_caf(startCA): TAG=00() Tm=0 Td=0 CT_HOLD 66
ADDRMOD: readOperands (LDQ 001711):mne=ldq flags=1
ADDRMOD: readOperands a 0 address 00001711
snapped:
ADDRMOD: IR_MOD: CT_HOLD=66
ADDRMOD: IR_MOD1: cpu.itxPair[0]=000314000043 TPR.CA=001711 Tm=0 Td=00 (its)
ADDRMOD: IR_MOD(TM_R): CT_HOLD 6 Cr=000025
ADDRMOD: IR_MOD(TM_R): TPR.CA=001736
ADDRMOD: updateIWB: IWB was 400014236166 400014 *ql
ADDRMOD: updateIWB: IWB now 001736236000 001736
So now it is clearly lost; the unsnapped code thinks that the addressing mode is RI, that snapped link is IR.
The entry to address formation was:
ADDRMOD: do_caf(Entry): operType:readCY TPR.CA=024234
ADDRMOD: do_caf(Entry): CT_HOLD 0
ADDRMOD: do_caf(startCA): TAG=66(*ql) Tm=60 Td=6 CT_HOLD 66
ADDRMOD: IR_MOD: CT_HOLD=66 6
ADDRMOD: IR_MOD: fetching indirect word from 024234
In more detail…
The unsnapped trace:
TRACE: 0: 00313:000041 4 400014236166 (LDQ PR4|14,*QL) 000014 236(0) 1 0 3 06
APPENDING: doPtrReg: PR[4] SNR=00247 RNR=4 WORDNO=024220 BITNO=00
APPENDING: doPtrReg: n=4 offset=00014 TPR.CA=024220 TPR.TBR=0 TPR.TSR=00247 TPR.TRR=4
ADDRMOD: do_caf(Entry): operType:readCY TPR.CA=024234
ADDRMOD: do_caf(Entry): CT_HOLD 0
ADDRMOD: do_caf(startCA): TAG=66(*ql) Tm=60 Td=6 CT_HOLD 66
ADDRMOD: IR_MOD: CT_HOLD=66 6
ADDRMOD: IR_MOD: fetching indirect word from 024234
APPENDING: do_append_cycle(Entry) thisCycle=INDIRECT_WORD_FETCH
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124234 readData=777764000046
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124235 readData=000045000000
ADDRMOD: IR_MOD: CT_HOLD=66
ADDRMOD: IR_MOD1: cpu.itxPair[0]=777764000046 TPR.CA=777764 Tm=40 Td=06 (f2)
ADDRMOD: IR_MOD(TM_IT): Td=06 => 66
F2 fault
restart:
TRACE: 0: 00313:000041 4 024234236020 (LDQ 024234,N*) 024234 236(0) 0 0 1 00
ADDRMOD: do_caf(Entry): operType:readCY TPR.CA=024234
ADDRMOD: do_caf(Entry): CT_HOLD 66
ADDRMOD: do_caf(startCA): restart; CT_HOLD 66
ADDRMOD: do_caf(startCA): TAG=20(n*) Tm=20 Td=0 CT_HOLD 66
ADDRMOD: RI_MOD: Td=0
APPENDING: do_append_cycle(Entry) thisCycle=INDIRECT_WORD_FETCH
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124234 readData=000314000043
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124235 readData=001711000000
APPENDING: do_ITS/ITP: 000314000043 001711000000 Tag:20
APPENDING: ITS Pair: SEGNO=314 RN=0 WORDNO=1711 BITNO=0 MOD=0
APPENDING: ITS Pair Ring: RN 0 RSDWH_R1 4 TRR 4 max 4
APPENDING: do_ITS_ITP sets XSF to 1
ADDRMOD: RI_MOD: cpu.itxPair[0]=000314000043 TPR.CA=001711 rTAG=00
ADDRMOD: updateIWB: IWB was 024234236020 024234 n*
ADDRMOD: updateIWB: IWB now 001711236000 001711
ADDRMOD: do_caf(startCA): restart; CT_HOLD 66
ADDRMOD: do_caf(startCA): TAG=00() Tm=0 Td=0 CT_HOLD 66
ADDRMOD: readOperands (LDQ 001711):mne=ldq flags=1
ADDRMOD: readOperands a 0 address 00001711
APPENDING: do_append_cycle(Entry) thisCycle=OPERAND_READ
FINAL: Read (Actual) Read: iefpFinalAddress=60771711 readData=000000000016
REGDUMPAQI: A=000000000000 Q=000000000016 IR:~BAR
The snapped trace:
ADDRMOD: do_caf(Entry): operType:readCY TPR.CA=024234
ADDRMOD: do_caf(Entry): CT_HOLD 0
ADDRMOD: do_caf(startCA): TAG=66(*ql) Tm=60 Td=6 CT_HOLD 66
ADDRMOD: IR_MOD: CT_HOLD=66 6
ADDRMOD: IR_MOD: fetching indirect word from 024234
APPENDING: do_append_cycle(Entry) thisCycle=INDIRECT_WORD_FETCH
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124234 readData=000314000043
FINAL: Read2 (Actual) Read: iefpFinalAddress=60124235 readData=001711000000
APPENDING: do_ITS/ITP: 000314000043 001711000000 Tag:66
APPENDING: ITS Pair: SEGNO=314 RN=0 WORDNO=1711 BITNO=0 MOD=0
APPENDING: ITS Pair Ring: RN 0 RSDWH_R1 4 TRR 4 max 4
APPENDING: do_ITS_ITP sets XSF to 1
ADDRMOD: IR_MOD: CT_HOLD=66
ADDRMOD: IR_MOD1: cpu.itxPair[0]=000314000043 TPR.CA=001711 Tm=0 Td=00 (its)
ADDRMOD: IR_MOD(TM_R): CT_HOLD 6 Cr=000025
ADDRMOD: IR_MOD(TM_R): TPR.CA=001736
ADDRMOD: updateIWB: IWB was 400014236166 400014 *ql
ADDRMOD: updateIWB: IWB now 001736236000 001736
ADDRMOD: readOperands (LDQ 001736):mne=ldq flags=1
ADDRMOD: readOperands a 0 address 00001736
APPENDING: do_append_cycle(Entry) thisCycle=OPERAND_READ
FINAL: Read (Actual) Read: iefpFinalAddress=60771736 readData=777777777777