#! /usr/bin/python3 instrs = 0 def readBlock(f, start, end): l = f.readline() if not l: quit() while not (l.startswith(start) and 'in ' not in l): l = f.readline() if not l: quit() ret = l while not l.startswith(end): l = f.readline() if not l: quit() ret += l return ret.split('\n'), f.readline() with open('gdbcombined.txt', 'w') as out: with open('/mnt/scratch/riscv_gp/riscv_gp.txt', 'r') as gp: with open('/mnt/scratch/riscv_sp1/riscv_sp1.txt', 'r') as sp1: with open('/mnt/scratch/riscv_sp2/riscv_sp2.txt', 'r') as sp2: with open('/mnt/scratch/riscv_sp3/riscv_sp3.txt', 'r') as sp3: with open('/mnt/scratch/riscv_decodepc_threads/riscv_decodepc.txt.disassembly', 'r') as inst: inst.readline() while(True): instrs += 1 g, i1 = readBlock(gp, 'ra', 't6') p1, i2 = readBlock(sp1, 'mie', 'scounteren') p2, i3 = readBlock(sp2, '0x', 'mideleg') p3, i4 = readBlock(sp3, 'mcause', 'stvec') instr = inst.readline() if not instr: quit() while '...' in instr: instr = inst.readline() if not instr: quit() if i1 != i2 or i2 != i3 or i3 != i4 or int(p2[0].split()[0].split(':')[0], 16) != int(instr.split()[0].split(':')[0], 16): print("error: PC was not the same") print("instruction {}".format(instrs)) print(i1) print(i2) print(i3) print(i4) print(p2[0]) print(instr) quit() if "unimp" in instr: instrs -= 1 continue out.write('=> {}'.format(instr.split(':')[2][1:].replace(' ', ':\t', 1))) out.write(p2[0] + '\n') out.write("zero 0x0 0\n") out.write("\n".join(g)) pc = p2[0].split()[0] if pc.endswith(':'): pc = pc[:-1] out.write("pc {} {}\n".format(pc, pc)) out.write("\n".join(p1)) out.write("\n".join(p3)) out.write("\n".join(p2[2:])) out.write("-----\n") if instrs % 10000 == 0: print(instrs) #if instrs >= 1000010: # quit()