summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2009-12-30 21:25:13 +0100
committerChristoph Bumiller <[email protected]>2009-12-31 14:34:42 +0100
commit616ddc8dfa5bfc886db8d4c7ef7fc66793f7940d (patch)
treed0cd980936e65a194b7d35079cf90428e4622a88 /src/gallium
parentb3425bc3607666e5c8ba4f403b4ead8c8870e49c (diff)
nv50: cannot kill branch if immediate is used
The immediate's bits eat the condition bits.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/nv50/nv50_program.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index 7d1b5fd82c8..cc15f45347a 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -453,6 +453,7 @@ static INLINE void
set_pred(struct nv50_pc *pc, unsigned pred, unsigned idx,
struct nv50_program_exec *e)
{
+ assert(!is_immd(e));
set_long(pc, e);
e->inst[1] &= ~((0x1f << 7) | (0x3 << 12));
e->inst[1] |= (pred << 7) | (idx << 12);
@@ -2118,6 +2119,8 @@ nv50_kill_branch(struct nv50_pc *pc)
if (pc->if_insn[lvl]->next != pc->p->exec_tail)
return FALSE;
+ if (is_immd(pc->p->exec_tail))
+ return FALSE;
/* if ccode == 'true', the BRA is from an ELSE and the predicate
* reg may no longer be valid, since we currently always use $p0