i965: Add support for math instructions in the gen6 WM.
authorZhenyu Wang <zhenyuw@linux.intel.com>
Sun, 13 Jun 2010 04:30:20 +0000 (21:30 -0700)
committerEric Anholt <eric@anholt.net>
Sun, 13 Jun 2010 04:47:32 +0000 (21:47 -0700)
src/mesa/drivers/dri/i965/brw_eu_emit.c

index 175899b026863c7d2c3913d2ae081d5671ed1441..34490b7f16fc403f74baa98c4ce88604cd146c3f 100644 (file)
@@ -966,10 +966,25 @@ void brw_math_16( struct brw_compile *p,
                  struct brw_reg src,
                  GLuint precision )
 {
+   struct intel_context *intel = &p->brw->intel;
    struct brw_instruction *insn;
    GLuint msg_length = (function == BRW_MATH_FUNCTION_POW) ? 2 : 1; 
    GLuint response_length = (function == BRW_MATH_FUNCTION_SINCOS) ? 2 : 1; 
 
+   if (intel->gen >= 6) {
+      insn = next_insn(p, BRW_OPCODE_MATH);
+
+      /* Math is the same ISA format as other opcodes, except that CondModifier
+       * becomes FC[3:0] and ThreadCtrl becomes FC[5:4].
+       */
+      insn->header.destreg__conditionalmod = function;
+
+      brw_set_dest(insn, dest);
+      brw_set_src0(insn, src);
+      brw_set_src1(insn, brw_null_reg());
+      return;
+   }
+
    /* First instruction:
     */
    brw_push_insn_state(p);