diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp index e9de6fd66c6..4eeb2b0cfd6 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_alu.cpp @@ -1357,8 +1357,10 @@ AluInstr::from_string(istream& is, ValueFactory& value_factory, AluGroup *group, if (op_descr.alu_opcode != op0_nop && op_descr.alu_opcode != op0_group_barrier) { if (dest) retval = new AluInstr(op_descr.alu_opcode, dest, sources, flags, slots); - else + else if (op_descr.nsrc < 3) retval = new AluInstr(op_descr.alu_opcode, chan, sources, flags); + else + retval = new AluInstr(op_descr.alu_opcode, value_factory.dummy_dest(chan), sources, flags, 1); } else { retval = new AluInstr(op_descr.alu_opcode, 0); for (auto f : flags) diff --git a/src/gallium/drivers/r600/sfn/tests/sfn_instrfromstring_test.cpp b/src/gallium/drivers/r600/sfn/tests/sfn_instrfromstring_test.cpp index 587c1a5c820..f0f6e104254 100644 --- a/src/gallium/drivers/r600/sfn/tests/sfn_instrfromstring_test.cpp +++ b/src/gallium/drivers/r600/sfn/tests/sfn_instrfromstring_test.cpp @@ -222,12 +222,12 @@ TEST_F(TestInstrFromString, test_alu_muladd_neg3) add_dest_from_string("R1999.w"); add_dest_from_string("R2000.y"); AluInstr expect(op3_muladd_ieee, - 1, - {new Register(1999, 3, pin_none), - new Register(1998, 2, pin_none), - new Register(2000, 1, pin_none)}, + new Register(g_registers_unused, 1, pin_chan), + new Register(1999, 3, pin_none), + new Register(1998, 2, pin_none), + new Register(2000, 1, pin_none), {alu_last_instr}); - check("ALU MULADD_IEEE __.y : R1999.w R1998.z -R2000.y {L}", expect); + check("ALU MULADD_IEEE __.y@chan : R1999.w R1998.z -R2000.y {L}", expect); } TEST_F(TestInstrFromString, test_alu_mov_bs)