mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
r300/compiler: Print debug info for flow control instructions.
This commit is contained in:
parent
82d0602c1f
commit
7f57530943
1 changed files with 73 additions and 5 deletions
|
|
@ -252,7 +252,7 @@ void r500FragmentProgramDump(struct rX00_fragment_program_code *c)
|
|||
struct r500_fragment_program_code *code = &c->code.r500;
|
||||
fprintf(stderr, "R500 Fragment Program:\n--------\n");
|
||||
|
||||
int n;
|
||||
int n, i;
|
||||
uint32_t inst;
|
||||
uint32_t inst0;
|
||||
char *str = NULL;
|
||||
|
|
@ -275,8 +275,8 @@ void r500FragmentProgramDump(struct rX00_fragment_program_code *c)
|
|||
to_mask((inst >> 15) & 0xf));
|
||||
|
||||
switch(inst0 & 0x3) {
|
||||
case 0:
|
||||
case 1:
|
||||
case R500_INST_TYPE_ALU:
|
||||
case R500_INST_TYPE_OUT:
|
||||
fprintf(stderr,"\t1:RGB_ADDR 0x%08x:", code->inst[n].inst1);
|
||||
inst = code->inst[n].inst1;
|
||||
|
||||
|
|
@ -319,9 +319,77 @@ void r500FragmentProgramDump(struct rX00_fragment_program_code *c)
|
|||
(inst >> 23) & 0x3,
|
||||
(inst >> 25) & 0x3, toswiz((inst >> 27) & 0x7), (inst >> 30) & 0x3);
|
||||
break;
|
||||
case 2:
|
||||
case R500_INST_TYPE_FC:
|
||||
fprintf(stderr, "\t2:FC_INST 0x%08x:", code->inst[n].inst2);
|
||||
inst = code->inst[n].inst2;
|
||||
switch(inst & 0x7){
|
||||
case R500_FC_OP_JUMP:
|
||||
fprintf(stderr, "JUMP");
|
||||
break;
|
||||
case R500_FC_OP_LOOP:
|
||||
fprintf(stderr, "LOOP");
|
||||
break;
|
||||
case R500_FC_OP_ENDLOOP:
|
||||
fprintf(stderr, "ENDLOOP");
|
||||
break;
|
||||
case R500_FC_OP_REP:
|
||||
fprintf(stderr, "REP");
|
||||
break;
|
||||
case R500_FC_OP_ENDREP:
|
||||
fprintf(stderr, "ENDREP");
|
||||
break;
|
||||
case R500_FC_OP_BREAKLOOP:
|
||||
fprintf(stderr, "BREAKLOOP");
|
||||
break;
|
||||
case R500_FC_OP_BREAKREP:
|
||||
fprintf(stderr, "BREAKREP");
|
||||
break;
|
||||
case R500_FC_OP_CONTINUE:
|
||||
fprintf(stderr, "CONTINUE");
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, " B_ELSE: %1x, JUMP_ANY: %1x", (inst & R500_FC_B_ELSE) >> 4,
|
||||
(inst & R500_FC_JUMP_ANY) >> 5);
|
||||
fprintf(stderr, ", A_OP: ");
|
||||
switch(inst & (0x3 << 6)){
|
||||
case R500_FC_A_OP_NONE:
|
||||
fprintf(stderr, "NONE");
|
||||
break;
|
||||
case R500_FC_A_OP_POP:
|
||||
fprintf(stderr, "POP");
|
||||
break;
|
||||
case R500_FC_A_OP_PUSH:
|
||||
fprintf(stderr, "PUSH");
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, "\n\tJUMP_FUNC 0x%02x, B_POP_CNT: %d",
|
||||
(inst >> 8) & 0xff,
|
||||
(inst >> 16) & 0x1f);
|
||||
for(i=0; i<2; i++){
|
||||
fprintf(stderr, ", B_OP%d: ", i);
|
||||
switch(inst & (0x3 << (24 + (i * 2)))){
|
||||
/* R500_FC_B_OP0_NONE
|
||||
* R500_FC_B_OP1_NONE */
|
||||
case 0:
|
||||
fprintf(stderr, "NONE");
|
||||
break;
|
||||
case R500_FC_B_OP0_DECR:
|
||||
case R500_FC_B_OP1_DECR:
|
||||
fprintf(stderr, "DECR");
|
||||
break;
|
||||
case R500_FC_B_OP0_INCR:
|
||||
case R500_FC_B_OP1_INCR:
|
||||
fprintf(stderr, "INCR");
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, ", IGN_UNC: %1x\n", inst & R500_FC_IGNORE_UNCOVERED);
|
||||
inst = code->inst[n].inst3;
|
||||
fprintf(stderr, "\t3:FC_ADDR 0x%08x:", inst);
|
||||
fprintf(stderr, "BOOL: 0x%02x, INT: 0x%02x, JUMP_ADDR: %d, JMP_GLBL: %1x\n",
|
||||
inst & 0x1f, (inst >> 8) & 0x1f, (inst >> 16) & 0x1ff, inst >> 31);
|
||||
break;
|
||||
case 3:
|
||||
case R500_INST_TYPE_TEX:
|
||||
inst = code->inst[n].inst1;
|
||||
fprintf(stderr,"\t1:TEX_INST: 0x%08x: id: %d op:%s, %s, %s %s\n", inst, (inst >> 16) & 0xf,
|
||||
to_texop((inst >> 22) & 0x7), (inst & (1<<25)) ? "ACQ" : "",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue