nv50/ir: fix emission of s[] args in certain situations
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 7 Nov 2015 23:48:55 +0000 (18:48 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 7 Nov 2015 23:58:58 +0000 (18:58 -0500)
There might only be a single arg (e.g. cvt), so use mode rather than
looking at the source directly. Also we don't want to rely on the type
of the value, which can be unreliable, but instead use the
instruction's. This works out well since mkSplit doesn't adjust the
type.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp

index 7e0fb532565e8d179f8ce8e2713c02fcbde10e5e..0b5288218d129ade109eddb501100c9bb6e16cca 100644 (file)
@@ -441,9 +441,9 @@ CodeEmitterNV50::setSrcFileBits(const Instruction *i, int enc)
       return;
 
    if ((mode & 3) == 1) {
-      const int pos = i->src(1).getFile() == FILE_IMMEDIATE ? 13 : 14;
+      const int pos = ((mode >> 2) & 3) == 3 ? 13 : 14;
 
-      switch (i->getSrc(0)->reg.type) {
+      switch (i->sType) {
       case TYPE_U8:
          break;
       case TYPE_U16: