nv50/ir: restore use of long immediate encodings
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 25 Oct 2012 12:32:29 +0000 (14:32 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 28 Oct 2012 13:57:20 +0000 (14:57 +0100)
NOTE: This is a candidate for the 9.0 branch.

src/gallium/drivers/nv50/codegen/nv50_ir_emit_nv50.cpp
src/gallium/drivers/nv50/codegen/nv50_ir_target_nv50.cpp

index bc4657c13b6b299b7b1f3ad1c7c7358b2bde53e3..90ec9d0c74bd941c0671ae813e8ba3f2d7f4fa02 100644 (file)
@@ -1284,6 +1284,9 @@ CodeEmitterNV50::emitLogicOp(const Instruction *i)
          assert(i->op == OP_AND);
          break;
       }
+      if (i->src(0).mod & Modifier(NV50_IR_MOD_NOT))
+         code[0] |= 1 << 22;
+
       emitForm_IMM(i);
    } else {
       switch (i->op) {
index 8b11c6a2fdda82dcd995a7a81ab6abf4aba1bbf7..6b4175edfcf156157f4e122e2f9564403af107b1 100644 (file)
@@ -323,6 +323,12 @@ TargetNV50::insnCanLoad(const Instruction *i, int s,
       ldSize = typeSizeof(ld->dType);
    }
 
+   if (sf == FILE_IMMEDIATE)
+      return true;
+
+
+   // Check if memory access is encodable:
+
    if (ldSize < 4 && sf == FILE_SHADER_INPUT) // no < 4-byte aligned a[] access
       return false;
    if (ld->getSrc(0)->reg.data.offset > (int32_t)(127 * ldSize))