mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 20:50:09 +01:00
r600g: Add FC_NATIVE instruction
This is a pseudo instruction that enables the LLVM backend to encode instructions and pass it through r600_bytecode_build() Signed-off-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
parent
4a26454e97
commit
94a6a36379
3 changed files with 20 additions and 0 deletions
|
|
@ -133,6 +133,10 @@ int eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf)
|
|||
S_SQ_CF_WORD1_COND(cf->cond) |
|
||||
S_SQ_CF_WORD1_POP_COUNT(cf->pop_count);
|
||||
break;
|
||||
case CF_NATIVE:
|
||||
bc->bytecode[id++] = cf->isa[0];
|
||||
bc->bytecode[id++] = cf->isa[1];
|
||||
break;
|
||||
default:
|
||||
R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -1927,6 +1927,7 @@ int r600_bytecode_build(struct r600_bytecode *bc)
|
|||
case EG_V_SQ_CF_WORD1_SQ_CF_INST_CALL_FS:
|
||||
case EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
|
||||
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
|
||||
case CF_NATIVE:
|
||||
break;
|
||||
default:
|
||||
R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
|
||||
|
|
@ -2069,6 +2070,8 @@ int r600_bytecode_build(struct r600_bytecode *bc)
|
|||
case EG_V_SQ_CF_WORD1_SQ_CF_INST_RETURN:
|
||||
case CM_V_SQ_CF_WORD1_SQ_CF_INST_END:
|
||||
break;
|
||||
case CF_NATIVE:
|
||||
break;
|
||||
default:
|
||||
R600_ERR("unsupported CF instruction (0x%X)\n", cf->inst);
|
||||
return -EINVAL;
|
||||
|
|
@ -2341,6 +2344,10 @@ void r600_bytecode_dump(struct r600_bytecode *bc)
|
|||
fprintf(stderr, "COND:%X ", cf->cond);
|
||||
fprintf(stderr, "POP_COUNT:%X\n", cf->pop_count);
|
||||
break;
|
||||
case CF_NATIVE:
|
||||
fprintf(stderr, "%04d %08X CF NATIVE\n", id, bc->bytecode[id]);
|
||||
fprintf(stderr, "%04d %08X CF NATIVE\n", id + 1, bc->bytecode[id + 1]);
|
||||
break;
|
||||
default:
|
||||
R600_ERR("Unknown instruction %0x\n", cf->inst);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -135,6 +135,14 @@ struct r600_bytecode_kcache {
|
|||
unsigned addr;
|
||||
};
|
||||
|
||||
/* A value of CF_NATIVE in r600_bytecode_cf::inst means that this instruction
|
||||
* has already been encoded, and the encoding has been stored in
|
||||
* r600_bytecode::isa. This is used by the LLVM backend to emit CF instructions
|
||||
* e.g. RAT_WRITE_* that can't be properly represented by struct
|
||||
* r600_bytecode_cf.
|
||||
*/
|
||||
#define CF_NATIVE ~0
|
||||
|
||||
struct r600_bytecode_cf {
|
||||
struct list_head list;
|
||||
|
||||
|
|
@ -157,6 +165,7 @@ struct r600_bytecode_cf {
|
|||
struct r600_bytecode_alu *curr_bs_head;
|
||||
struct r600_bytecode_alu *prev_bs_head;
|
||||
struct r600_bytecode_alu *prev2_bs_head;
|
||||
unsigned isa[2];
|
||||
};
|
||||
|
||||
#define FC_NONE 0
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue