i965: Add can_do_saturate() method to backend_instruction.
authorMatt Turner <mattst88@gmail.com>
Thu, 12 Dec 2013 07:07:49 +0000 (23:07 -0800)
committerMatt Turner <mattst88@gmail.com>
Wed, 29 Jan 2014 01:47:41 +0000 (17:47 -0800)
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_shader.cpp
src/mesa/drivers/dri/i965/brw_shader.h

index 45bf73091b39941fd4280950117836d70e5ad4c7..6cc259572f618c8ea18a12ecaf69b520e5201517 100644 (file)
@@ -603,6 +603,50 @@ backend_instruction::can_do_source_mods()
    }
 }
 
+bool
+backend_instruction::can_do_saturate()
+{
+   switch (opcode) {
+   case BRW_OPCODE_ADD:
+   case BRW_OPCODE_ASR:
+   case BRW_OPCODE_AVG:
+   case BRW_OPCODE_DP2:
+   case BRW_OPCODE_DP3:
+   case BRW_OPCODE_DP4:
+   case BRW_OPCODE_DPH:
+   case BRW_OPCODE_F16TO32:
+   case BRW_OPCODE_F32TO16:
+   case BRW_OPCODE_LINE:
+   case BRW_OPCODE_LRP:
+   case BRW_OPCODE_MAC:
+   case BRW_OPCODE_MACH:
+   case BRW_OPCODE_MAD:
+   case BRW_OPCODE_MATH:
+   case BRW_OPCODE_MOV:
+   case BRW_OPCODE_MUL:
+   case BRW_OPCODE_PLN:
+   case BRW_OPCODE_RNDD:
+   case BRW_OPCODE_RNDE:
+   case BRW_OPCODE_RNDU:
+   case BRW_OPCODE_RNDZ:
+   case BRW_OPCODE_SEL:
+   case BRW_OPCODE_SHL:
+   case BRW_OPCODE_SHR:
+   case FS_OPCODE_LINTERP:
+   case SHADER_OPCODE_COS:
+   case SHADER_OPCODE_EXP2:
+   case SHADER_OPCODE_LOG2:
+   case SHADER_OPCODE_POW:
+   case SHADER_OPCODE_RCP:
+   case SHADER_OPCODE_RSQ:
+   case SHADER_OPCODE_SIN:
+   case SHADER_OPCODE_SQRT:
+      return true;
+   default:
+      return false;
+   }
+}
+
 bool
 backend_instruction::has_side_effects() const
 {
index 936a2070dc05095243e785e324b8440a18cc3c23..c76f33ba5b41dd271160f98f8ced68a5f5920bda 100644 (file)
@@ -45,6 +45,7 @@ public:
    bool is_math();
    bool is_control_flow();
    bool can_do_source_mods();
+   bool can_do_saturate();
 
    /**
     * True if the instruction has side effects other than writing to