summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r600/eg_asm.c
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2010-12-14 00:43:53 +0100
committerChristian König <deathsimple@vodafone.de>2011-01-12 19:31:36 +0100
commit8813842121d46d1be476807c98b0ba0b771f0c91 (patch)
tree35bde640f8de3fec2c3773587cc3df2ead3a664e /src/gallium/drivers/r600/eg_asm.c
parent052b9e8fab2e7deddf7f287d63c45aa938e5ec67 (diff)
r600g: optimize away CF_INST_POP
If last instruction is an CF_INST_ALU we don't need to emit an additional CF_INST_POP for stack clean up after an IF ELSE ENDIF.
Diffstat (limited to 'src/gallium/drivers/r600/eg_asm.c')
-rw-r--r--src/gallium/drivers/r600/eg_asm.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/eg_asm.c b/src/gallium/drivers/r600/eg_asm.c
index c44506c7eb..67d742b376 100644
--- a/src/gallium/drivers/r600/eg_asm.c
+++ b/src/gallium/drivers/r600/eg_asm.c
@@ -35,6 +35,8 @@ int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf)
switch (cf->inst) {
case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU << 3):
+ case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_POP_AFTER << 3):
+ case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_POP2_AFTER << 3):
case (EG_V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU_PUSH_BEFORE << 3):
bc->bytecode[id++] = S_SQ_CF_ALU_WORD0_ADDR(cf->addr >> 1) |
S_SQ_CF_ALU_WORD0_KCACHE_MODE0(cf->kcache[0].mode) |