diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_pc_emit.c | 12 | ||||
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_pc_optimize.c | 12 | 
2 files changed, 14 insertions, 10 deletions
diff --git a/src/gallium/drivers/nv50/nv50_pc_emit.c b/src/gallium/drivers/nv50/nv50_pc_emit.c index b917d23232..51304670a1 100644 --- a/src/gallium/drivers/nv50/nv50_pc_emit.c +++ b/src/gallium/drivers/nv50/nv50_pc_emit.c @@ -539,26 +539,26 @@ emit_mov(struct nv_pc *pc, struct nv_instruction *i)        pc->emit[1] |= DREG(i->def[0])->id << 4;     } else     if (SFILE(i, 0) == NV_FILE_IMM) { -      if (i->opcode == NV_OP_LDA) +      if (i->opcode == NV_OP_LDA) {           emit_ld(pc, i); -      else { +      } else {           pc->emit[0] = 0x10008001;           pc->emit[1] = 0x00000003; -	 emit_form_IMM(pc, i, 0); +         emit_form_IMM(pc, i, 0);        }     } else {        pc->emit[0] = 0x10000000;        pc->emit[0] |= DREG(i->def[0])->id << 2;        pc->emit[0] |= SREG(i->src[0])->id << 9; -      if (!i->is_long) +      if (!i->is_long) {           pc->emit[0] |= 0x8000; -      else { +      } else {           pc->emit[0] |= 0x00000001;           pc->emit[1] = 0x0403c000; -	 set_pred(pc, i); +         set_pred(pc, i);        }     } diff --git a/src/gallium/drivers/nv50/nv50_pc_optimize.c b/src/gallium/drivers/nv50/nv50_pc_optimize.c index 0811420e42..f81384f00d 100644 --- a/src/gallium/drivers/nv50/nv50_pc_optimize.c +++ b/src/gallium/drivers/nv50/nv50_pc_optimize.c @@ -266,11 +266,10 @@ nv_pass_fold_stores(struct nv_pass *ctx, struct nv_basic_block *b)     int j;     for (sti = b->entry; sti; sti = sti->next) { -      if (!sti->def[0]) +      if (!sti->def[0] || sti->def[0]->reg.file != NV_FILE_OUT)           continue; -      if (sti->def[0]->reg.file != NV_FILE_OUT) -         continue; +      /* only handling MOV to $oX here */        if (sti->opcode != NV_OP_MOV && sti->opcode != NV_OP_STA)           continue; @@ -282,8 +281,13 @@ nv_pass_fold_stores(struct nv_pass *ctx, struct nv_basic_block *b)        if (nvi->def[0]->refc > 1)           continue; +      /* cannot MOV immediate to $oX */ +      if (nvi->src[0]->value->reg.file == NV_FILE_IMM) +         continue; +        nvi->def[0] = sti->def[0]; -      nvi->fixed = 1; +      sti->def[0] = NULL; +      nvi->fixed = sti->fixed;        sti->fixed = 0;     }     DESCEND_ARBITRARY(j, nv_pass_fold_stores);  | 
