static void print_mul_op(uint64_t inst) { uint32_t op_add = QPU_GET_FIELD(inst, QPU_OP_ADD); uint32_t op_mul = QPU_GET_FIELD(inst, QPU_OP_MUL); uint32_t cond = QPU_GET_FIELD(inst, QPU_COND_MUL); bool is_mov = (op_mul == QPU_M_V8MIN && QPU_GET_FIELD(inst, QPU_MUL_A) == QPU_GET_FIELD(inst, QPU_MUL_B)); if (is_mov) fprintf(stderr, "mov"); else fprintf(stderr, "%s", DESC(qpu_mul_opcodes, op_mul)); if ((inst & QPU_SF) && op_add == QPU_A_NOP) fprintf(stderr, ".sf"); if (op_mul != QPU_M_NOP) vc4_qpu_disasm_cond(stderr, cond); fprintf(stderr, " "); print_alu_dst(inst, true); fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_MUL_A), true); if (!is_mov) { fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_MUL_B), true); } }
static void print_add_op(uint64_t inst) { uint32_t op_add = QPU_GET_FIELD(inst, QPU_OP_ADD); uint32_t cond = QPU_GET_FIELD(inst, QPU_COND_ADD); bool is_mov = (op_add == QPU_A_OR && QPU_GET_FIELD(inst, QPU_ADD_A) == QPU_GET_FIELD(inst, QPU_ADD_B)); if (is_mov) fprintf(stderr, "mov"); else fprintf(stderr, "%s", DESC(qpu_add_opcodes, op_add)); if ((inst & QPU_SF) && op_add != QPU_A_NOP) fprintf(stderr, ".sf"); if (op_add != QPU_A_NOP) vc4_qpu_disasm_cond(stderr, cond); fprintf(stderr, " "); print_alu_dst(inst, false); fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_ADD_A), false); if (!is_mov) { fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_ADD_B), false); } }
static void print_mul_op(uint64_t inst) { uint32_t op_add = QPU_GET_FIELD(inst, QPU_OP_ADD); uint32_t op_mul = QPU_GET_FIELD(inst, QPU_OP_MUL); uint32_t cond = QPU_GET_FIELD(inst, QPU_COND_MUL); bool is_mov = (op_mul == QPU_M_V8MIN && QPU_GET_FIELD(inst, QPU_MUL_A) == QPU_GET_FIELD(inst, QPU_MUL_B)); fprintf(stderr, "%s%s%s ", is_mov ? "mov" : DESC(qpu_mul_opcodes, op_mul), ((inst & QPU_SF) && op_add == QPU_A_NOP) ? ".sf" : "", op_mul != QPU_M_NOP ? DESC(qpu_condflags, cond) : ""); print_alu_dst(inst, true); fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_MUL_A)); if (!is_mov) { fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_MUL_B)); } }
static void print_add_op(uint64_t inst) { uint32_t op_add = QPU_GET_FIELD(inst, QPU_OP_ADD); uint32_t cond = QPU_GET_FIELD(inst, QPU_COND_ADD); bool is_mov = (op_add == QPU_A_OR && QPU_GET_FIELD(inst, QPU_ADD_A) == QPU_GET_FIELD(inst, QPU_ADD_B)); fprintf(stderr, "%s%s%s ", is_mov ? "mov" : DESC(qpu_add_opcodes, op_add), ((inst & QPU_SF) && op_add != QPU_A_NOP) ? ".sf" : "", op_add != QPU_A_NOP ? DESC(qpu_condflags, cond) : ""); print_alu_dst(inst, false); fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_ADD_A)); if (!is_mov) { fprintf(stderr, ", "); print_alu_src(inst, QPU_GET_FIELD(inst, QPU_ADD_B)); } }
static void print_load_imm(uint64_t inst) { uint32_t imm = inst; uint32_t waddr_add = QPU_GET_FIELD(inst, QPU_WADDR_ADD); uint32_t waddr_mul = QPU_GET_FIELD(inst, QPU_WADDR_MUL); uint32_t cond_add = QPU_GET_FIELD(inst, QPU_COND_ADD); uint32_t cond_mul = QPU_GET_FIELD(inst, QPU_COND_MUL); fprintf(stderr, "load_imm "); print_alu_dst(inst, false); fprintf(stderr, "%s, ", (waddr_add != QPU_W_NOP ? DESC(qpu_condflags, cond_add) : "")); print_alu_dst(inst, true); fprintf(stderr, "%s, ", (waddr_mul != QPU_W_NOP ? DESC(qpu_condflags, cond_mul) : "")); fprintf(stderr, "0x%08x (%f)", imm, uif(imm)); }
static void print_load_imm(uint64_t inst) { uint32_t imm = inst; uint32_t waddr_add = QPU_GET_FIELD(inst, QPU_WADDR_ADD); uint32_t waddr_mul = QPU_GET_FIELD(inst, QPU_WADDR_MUL); uint32_t cond_add = QPU_GET_FIELD(inst, QPU_COND_ADD); uint32_t cond_mul = QPU_GET_FIELD(inst, QPU_COND_MUL); fprintf(stderr, "load_imm "); print_alu_dst(inst, false); if (waddr_add != QPU_W_NOP) vc4_qpu_disasm_cond(stderr, cond_add); fprintf(stderr, ", "); print_alu_dst(inst, true); if (waddr_mul != QPU_W_NOP) vc4_qpu_disasm_cond(stderr, cond_mul); fprintf(stderr, ", "); fprintf(stderr, "0x%08x (%f)", imm, uif(imm)); }