summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabian Bieler <[email protected]>2011-03-03 10:08:08 +0100
committerHenri Verbeet <[email protected]>2011-03-22 21:24:09 +0100
commit8d7c12de1e3bce6c14ed6b79b64c2bce48e560a5 (patch)
treec12388d0234133a485cba453e4fdfba4f6f76aca
parente4b040c2b922ff1887651cbf658b06b48b5992c5 (diff)
r600g: Check for relative addressing in destination register when trying to merge instruction groups
Signed-off-by: Henri Verbeet <[email protected]>
-rw-r--r--src/gallium/drivers/r600/r600_asm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c
index 240093f9b9d..c22bd8e228c 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -953,10 +953,17 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
} else
result[i] = slots[i];
- // let's check source gprs
alu = slots[i];
num_once_inst += is_alu_once_inst(bc, alu);
+ // let's check dst gpr
+ if (alu->dst.rel) {
+ if (have_mova)
+ return 0;
+ have_rel = 1;
+ }
+
+ // let's check source gprs
num_src = r600_bc_get_num_operands(bc, alu);
for (src = 0; src < num_src; ++src) {
if (alu->src[src].rel) {