diff options
author | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2010-08-16 18:00:39 +0200 |
---|---|---|
committer | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2010-08-17 00:47:47 +0200 |
commit | 62f933a6f617050a267079b27360eaae2d0e1a70 (patch) | |
tree | a7897c1efe777740babff92409ba515085254ff4 /src/gallium/drivers/nv50/nv50_pc_emit.c | |
parent | 6c5c55723d32f8933ffb5fc6b5beb209eca84ca8 (diff) |
nv50: generate JOINs for outermost IF clauses
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_pc_emit.c')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_pc_emit.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/nv50/nv50_pc_emit.c b/src/gallium/drivers/nv50/nv50_pc_emit.c index fe44b327ab..3a3b277c13 100644 --- a/src/gallium/drivers/nv50/nv50_pc_emit.c +++ b/src/gallium/drivers/nv50/nv50_pc_emit.c @@ -38,7 +38,7 @@ const ubyte nv50_inst_min_size_tab[NV_OP_COUNT] = 0, 0, 0, 8, 8, 4, 4, 4, 8, 4, 4, 8, 8, 8, 8, 8, /* 15 */ 8, 8, 8, 4, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, /* 31 */ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, /* 47 */ - 4, 8, 8, 8, 8, 8, 0, 0 + 4, 8, 8, 8, 8, 8, 0, 0, 8 }; /* XXX: silence, you ! */ @@ -71,6 +71,9 @@ nv50_inst_min_size(struct nv_instruction *i) if (i->flags_def || i->flags_src || i->src[4]) return 8; + if (i->is_join) + return 8; + if (i->src[2]) { if (i->saturate || i->src[2]->mod) return 8; @@ -1126,6 +1129,7 @@ nv50_emit_instruction(struct nv_pc *pc, struct nv_instruction *i) emit_flow(pc, i, 0xa); break; case NV_OP_NOP: + case NV_OP_JOIN: pc->emit[0] = 0xf0000001; pc->emit[1] = 0xe0000000; break; @@ -1141,5 +1145,10 @@ nv50_emit_instruction(struct nv_pc *pc, struct nv_instruction *i) break; } + if (i->is_join) { + assert(i->is_long && !(pc->emit[1] & 1)); + pc->emit[1] |= 2; + } + assert((pc->emit[0] & 1) == i->is_long); } |