Reviewed-by: Edward O'Callaghan On 03/22/2017 01:11 AM, Tom St Denis wrote: > It will display the leading 4 words up to > the current PC value and then 4 words after. > > Signed-off-by: Tom St Denis > --- > src/app/print_waves.c | 44 +++++++++++++++++++++++++++++++++----------- > 1 file changed, 33 insertions(+), 11 deletions(-) > > diff --git a/src/app/print_waves.c b/src/app/print_waves.c > index f0eeeba43a99..e3662983d8d1 100644 > --- a/src/app/print_waves.c > +++ b/src/app/print_waves.c > @@ -35,7 +35,8 @@ > > void umr_print_waves(struct umr_asic *asic) > { > - uint32_t x, se, sh, cu, simd, wave, sgprs[1024], shift; > + uint32_t x, se, sh, cu, simd, wave, sgprs[1024], shift, opcodes[8]; > + uint64_t pgm_addr; > struct umr_wave_status ws; > int first = 1, col = 0; > > @@ -74,17 +75,24 @@ void umr_print_waves(struct umr_asic *asic) > (unsigned long)ws.hw_id.value, (unsigned long)ws.gpr_alloc.value, (unsigned long)ws.lds_alloc.value, (unsigned long)ws.trapsts.value, (unsigned long)ws.ib_sts.value, > (unsigned long)ws.tba_hi, (unsigned long)ws.tba_lo, (unsigned long)ws.tma_hi, (unsigned long)ws.tma_lo, (unsigned long)ws.ib_dbg0, (unsigned long)ws.m0 > ); > - for (x = 0; x < ((ws.gpr_alloc.sgpr_size + 1) << shift); x += 4) > - printf(">SGPRS[%u..%u] = { %08lx, %08lx, %08lx, %08lx }\n", > - (unsigned)((ws.gpr_alloc.sgpr_base << shift) + x), > - (unsigned)((ws.gpr_alloc.sgpr_base << shift) + x + 3), > - (unsigned long)sgprs[x], > - (unsigned long)sgprs[x+1], > - (unsigned long)sgprs[x+2], > - (unsigned long)sgprs[x+3]); > - } > + for (x = 0; x < ((ws.gpr_alloc.sgpr_size + 1) << shift); x += 4) > + printf(">SGPRS[%u..%u] = { %08lx, %08lx, %08lx, %08lx }\n", > + (unsigned)((ws.gpr_alloc.sgpr_base << shift) + x), > + (unsigned)((ws.gpr_alloc.sgpr_base << shift) + x + 3), > + (unsigned long)sgprs[x], > + (unsigned long)sgprs[x+1], > + (unsigned long)sgprs[x+2], > + (unsigned long)sgprs[x+3]); > > - if (options.bitfields) { > + pgm_addr = (((uint64_t)ws.pc_hi << 32) | ws.pc_lo) - (sizeof(opcodes)/2); > + umr_read_vram(asic, ws.hw_id.vm_id, pgm_addr, sizeof(opcodes), opcodes); > + for (x = 0; x < sizeof(opcodes)/4; x++) { > + printf(">pgm[%lu@%llx] = %08lx\n", > + (unsigned long)ws.hw_id.vm_id, > + (unsigned long long)(pgm_addr + 4 * x), > + (unsigned long)opcodes[x]); > + } > + } else { > first = 0; > printf("\n------------------------------------------------------\nse%u.sh%u.cu%u.simd%u.wave%u\n", > (unsigned)se, (unsigned)sh, (unsigned)cu, (unsigned)ws.hw_id.simd_id, (unsigned)ws.hw_id.wave_id); > @@ -156,6 +164,20 @@ void umr_print_waves(struct umr_asic *asic) > (unsigned long)sgprs[x+2], > (unsigned long)sgprs[x+3]); > > + printf("\n\nPGM_MEM:\n"); > + pgm_addr = (((uint64_t)ws.pc_hi << 32) | ws.pc_lo) - (sizeof(opcodes)/2); > + umr_read_vram(asic, ws.hw_id.vm_id, pgm_addr, sizeof(opcodes), opcodes); > + for (x = 0; x < sizeof(opcodes)/4; x++) { > + if (x == (sizeof(opcodes)/8)) > + printf("*\t"); > + else > + printf("\t"); > + printf("pgm[%lu@%llx] = %08lx\n", > + (unsigned long)ws.hw_id.vm_id, > + (unsigned long long)(pgm_addr + 4 * x), > + (unsigned long)opcodes[x]); > + } > + > Hv("LDS_ALLOC", ws.lds_alloc.value); > PP(lds_alloc, lds_base); > PP(lds_alloc, lds_size); >