freedreno/ir3: Don't access beyond available regs
emit_cat5() needs to check if the last optional reg is there before it accesses it. Signed-off-by: Kristian H. Kristensen <hoegsberg@chromium.org> Reviewed-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
7fefa4610d
commit
f30d4a1cca
1 changed files with 7 additions and 4 deletions
|
|
@ -451,10 +451,13 @@ static int emit_cat5(struct ir3_instruction *instr, void *ptr,
|
|||
* than tex/sampler idx, we use the first src reg in the ir to hold
|
||||
* samp_tex hvec2:
|
||||
*/
|
||||
struct ir3_register *src1 = instr->regs[2];
|
||||
struct ir3_register *src2 = instr->regs[3];
|
||||
struct ir3_register *src1;
|
||||
struct ir3_register *src2;
|
||||
instr_cat5_t *cat5 = ptr;
|
||||
|
||||
iassert((instr->regs_count == 2) ||
|
||||
(instr->regs_count == 3) || (instr->regs_count == 4));
|
||||
|
||||
switch (instr->opc) {
|
||||
case OPC_DSX:
|
||||
case OPC_DSXPP_1:
|
||||
|
|
@ -462,11 +465,11 @@ static int emit_cat5(struct ir3_instruction *instr, void *ptr,
|
|||
case OPC_DSYPP_1:
|
||||
iassert((instr->flags & IR3_INSTR_S2EN) == 0);
|
||||
src1 = instr->regs[1];
|
||||
src2 = instr->regs[2];
|
||||
src2 = instr->regs_count > 2 ? instr->regs[2] : NULL;
|
||||
break;
|
||||
default:
|
||||
src1 = instr->regs[2];
|
||||
src2 = instr->regs[3];
|
||||
src2 = instr->regs_count > 3 ? instr->regs[3] : NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue