r600g/sb: use MULADD workaround on R7xx for MULADD_IEEE
authorVadim Girlin <vadimgirlin@gmail.com>
Sat, 10 Aug 2013 22:52:34 +0000 (02:52 +0400)
committerVadim Girlin <vadimgirlin@gmail.com>
Tue, 13 Aug 2013 21:03:18 +0000 (01:03 +0400)
Looks like the same issue that was seen with MULADD in trans slot on
R7xx also affects MULADD_IEEE (maybe all OP3 instructions and MULADD is
just a most frequently used?). So the workaround is to not allow affected
instructions to be placed into the trans slot.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=67927

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
Cc: "9.2" <mesa-stable@lists.freedesktop.org>
src/gallium/drivers/r600/sb/sb_sched.cpp

index f0e41f5863774fcda77c40d5cc0173b6af07eff1..27923155dae071ca8162612909d972edb18a5853 100644 (file)
@@ -1490,7 +1490,8 @@ unsigned post_scheduler::try_add_instruction(node *n) {
 
                // FIXME workaround for some problems with MULADD in trans slot on r700,
                // (is it really needed on r600?)
-               if (a->bc.op == ALU_OP3_MULADD && !ctx.is_egcm()) {
+               if ((a->bc.op == ALU_OP3_MULADD || a->bc.op == ALU_OP3_MULADD_IEEE) &&
+                               !ctx.is_egcm()) {
                        allowed_slots &= 0x0F;
                }