nv50: ABS
authorBen Skeggs <skeggsb@gmail.com>
Sat, 7 Jun 2008 03:01:58 +0000 (13:01 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Sun, 29 Jun 2008 05:46:15 +0000 (15:46 +1000)
src/gallium/drivers/nv50/nv50_program.c

index 448062e767f30f26521b843887a14aee7f30e625..7c2177d42db8e358ca300fe005a2edf31ed75c1e 100644 (file)
@@ -12,8 +12,7 @@
 
 #define NV50_SU_MAX_TEMP 64
 
-/* ABS
- * ARL
+/* ARL
  * DST - const(1.0)
  * LIT
  * POW
@@ -670,6 +669,21 @@ nv50_program_tx_insn(struct nv50_pc *pc, const union tgsi_full_token *tok)
        }
 
        switch (inst->Instruction.Opcode) {
+       case TGSI_OPCODE_ABS:
+               for (c = 0; c < 4; c++) {
+                       unsigned inst[2] = { 0, 0 };
+
+                       set_long(pc, inst);
+                       inst[0] = 0xa0000000; /* cvt */
+                       inst[1] |= (6 << 29); /* cvt */
+                       inst[1] |= 0x04000000; /* 32 bit */
+                       inst[1] |= (1 << 14); /* src .f32 */
+                       inst[1] |= ((1 << 6) << 14); /* .abs */
+                       set_dst(pc, dst[c], inst);
+                       set_src_0(pc, src[0][c], inst);
+                       emit(pc, inst);
+               }
+               break;
        case TGSI_OPCODE_ADD:
                for (c = 0; c < 4; c++) {
                        if (!(mask & (1 << c)))