X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fvc4%2Fvc4_qpu.h;h=0719d2828b5ef5c2cc43a7d8413a85947fc43838;hb=89b1b33f44bc6ce71109ac8668529c30b6d6d910;hp=00aebf0a7063b6a774a5eb422a580612c60e7d3d;hpb=1850d0a1cbf044dc4d29b7a9ede2c634f667d853;p=mesa.git diff --git a/src/gallium/drivers/vc4/vc4_qpu.h b/src/gallium/drivers/vc4/vc4_qpu.h index 00aebf0a706..0719d2828b5 100644 --- a/src/gallium/drivers/vc4/vc4_qpu.h +++ b/src/gallium/drivers/vc4/vc4_qpu.h @@ -24,12 +24,15 @@ #ifndef VC4_QPU_H #define VC4_QPU_H +#include #include #include "util/u_math.h" #include "vc4_qpu_defines.h" +struct vc4_compile; + struct qpu_reg { enum qpu_mux mux; uint8_t addr; @@ -120,16 +123,24 @@ static inline struct qpu_reg qpu_r3(void) { return qpu_rn(3); } static inline struct qpu_reg qpu_r4(void) { return qpu_rn(4); } static inline struct qpu_reg qpu_r5(void) { return qpu_rn(5); } -uint64_t qpu_a_MOV(struct qpu_reg dst, struct qpu_reg src); -uint64_t qpu_m_MOV(struct qpu_reg dst, struct qpu_reg src); -uint64_t qpu_a_NOP(void); -uint64_t qpu_m_NOP(void); +uint64_t qpu_NOP(void) ATTRIBUTE_CONST; +uint64_t qpu_a_MOV(struct qpu_reg dst, struct qpu_reg src) ATTRIBUTE_CONST; +uint64_t qpu_m_MOV(struct qpu_reg dst, struct qpu_reg src) ATTRIBUTE_CONST; uint64_t qpu_a_alu2(enum qpu_op_add op, struct qpu_reg dst, - struct qpu_reg src0, struct qpu_reg src1); + struct qpu_reg src0, struct qpu_reg src1) ATTRIBUTE_CONST; uint64_t qpu_m_alu2(enum qpu_op_mul op, struct qpu_reg dst, - struct qpu_reg src0, struct qpu_reg src1); -uint64_t qpu_inst(uint64_t add, uint64_t mul); -uint64_t qpu_load_imm_ui(struct qpu_reg dst, uint32_t val); + struct qpu_reg src0, struct qpu_reg src1) ATTRIBUTE_CONST; +uint64_t qpu_merge_inst(uint64_t a, uint64_t b) ATTRIBUTE_CONST; +uint64_t qpu_load_imm_ui(struct qpu_reg dst, uint32_t val) ATTRIBUTE_CONST; +uint64_t qpu_set_sig(uint64_t inst, uint32_t sig) ATTRIBUTE_CONST; +uint64_t qpu_set_cond_add(uint64_t inst, uint32_t cond) ATTRIBUTE_CONST; +uint64_t qpu_set_cond_mul(uint64_t inst, uint32_t cond) ATTRIBUTE_CONST; +uint32_t qpu_encode_small_immediate(uint32_t i) ATTRIBUTE_CONST; + +bool qpu_waddr_is_tlb(uint32_t waddr) ATTRIBUTE_CONST; +bool qpu_inst_is_tlb(uint64_t inst) ATTRIBUTE_CONST; +int qpu_num_sf_accesses(uint64_t inst) ATTRIBUTE_CONST; +void qpu_serialize_one_inst(struct vc4_compile *c, uint64_t inst); static inline uint64_t qpu_load_imm_f(struct qpu_reg dst, float val) @@ -163,8 +174,8 @@ A_ALU2(FADD) A_ALU2(FSUB) A_ALU2(FMIN) A_ALU2(FMAX) -A_ALU2(MINABS) -A_ALU2(MAXABS) +A_ALU2(FMINABS) +A_ALU2(FMAXABS) A_ALU1(FTOI) A_ALU1(ITOF) A_ALU2(ADD) @@ -195,6 +206,12 @@ M_ALU2(V8SUBS) void vc4_qpu_disasm(const uint64_t *instructions, int num_instructions); +void +vc4_qpu_disasm_pack_mul(FILE *out, uint32_t pack); + +void +vc4_qpu_disasm_pack_a(FILE *out, uint32_t pack); + void vc4_qpu_validate(uint64_t *insts, uint32_t num_inst);