mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#! /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()
 |