nv50/ir: Add sat modifier for mul
authorRoy Spliet <rspliet@eclipso.eu>
Sun, 4 Jan 2015 23:22:17 +0000 (00:22 +0100)
committerIlia Mirkin <imirkin@alum.mit.edu>
Mon, 5 Jan 2015 05:34:33 +0000 (00:34 -0500)
Signed-off-by: Roy Spliet <rspliet@eclipso.eu>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nv50.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_target_nv50.cpp

index 3048f3d5f7f4597d386fc2ca909523f861f5ac69..20773884ad395d417393d7685c8c4fb9ae9757d7 100644 (file)
@@ -1059,16 +1059,22 @@ CodeEmitterNV50::emitFMUL(const Instruction *i)
       emitForm_IMM(i);
       if (neg)
          code[0] |= 0x8000;
+      if (i->saturate)
+         code[0] |= 1 << 8;
    } else
    if (i->encSize == 8) {
       code[1] = i->rnd == ROUND_Z ? 0x0000c000 : 0;
       if (neg)
          code[1] |= 0x08000000;
+      if (i->saturate)
+         code[1] |= 1 << 20;
       emitForm_MAD(i);
    } else {
       emitForm_MUL(i);
       if (neg)
          code[0] |= 0x8000;
+      if (i->saturate)
+         code[0] |= 1 << 8;
    }
 }
 
index 369420911125bba9787d32ff5a1704f422827e83..c13c565fa43bc6b3c5ac50c0bfa5341d6cb00661 100644 (file)
@@ -84,7 +84,7 @@ static const struct opProperties _initProps[] =
    //           neg  abs  not  sat  c[]  s[], a[], imm
    { OP_ADD,    0x3, 0x0, 0x0, 0x8, 0x2, 0x1, 0x1, 0x2 },
    { OP_SUB,    0x3, 0x0, 0x0, 0x0, 0x2, 0x1, 0x1, 0x2 },
-   { OP_MUL,    0x3, 0x0, 0x0, 0x0, 0x2, 0x1, 0x1, 0x2 },
+   { OP_MUL,    0x3, 0x0, 0x0, 0x8, 0x2, 0x1, 0x1, 0x2 },
    { OP_MAX,    0x3, 0x3, 0x0, 0x0, 0x2, 0x1, 0x1, 0x0 },
    { OP_MIN,    0x3, 0x3, 0x0, 0x0, 0x2, 0x1, 0x1, 0x0 },
    { OP_MAD,    0x7, 0x0, 0x0, 0x8, 0x6, 0x1, 0x1, 0x0 }, // special constraint