<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 30, 2015 at 3:54 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 src/mesa/drivers/dri/i965/brw_shader.cpp | 37 ++++++++++++++++++++++++++++++++<br>
 src/mesa/drivers/dri/i965/brw_shader.h   |  1 +<br>
 2 files changed, 38 insertions(+)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
index c393bfc..ff2edf3 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
@@ -620,6 +620,43 @@ brw_saturate_immediate(enum brw_reg_type type, struct brw_reg *reg)<br>
    return false;<br>
 }<br>
<br>
+bool<br>
+brw_negate_immediate(enum brw_reg_type type, struct brw_reg *reg)<br>
+{<br>
+   switch (type) {<br>
+   case BRW_REGISTER_TYPE_UD:<br>
+   case BRW_REGISTER_TYPE_D:<br>
+      reg->dw1.d = -reg->dw1.d;<br>
+      return true;<br>
+   case BRW_REGISTER_TYPE_UW:<br>
+      reg->dw1.d = -(uint16_t)reg->dw1.ud;<br></blockquote><div><br></div><div>Do we really want to negate UW and UD sources?  If so, shouldn't we change the register type to signed or something?  Maybe there's something I don't know about the arch, but this seems fishy.<br><br></div><div>Same comment applies on the next patch with abs().<br><br></div><div>Other than that, everything in this series looks fine.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+      return true;<br>
+   case BRW_REGISTER_TYPE_W:<br>
+      reg->dw1.d = -(int16_t)reg->dw1.ud;<br>
+      return true;<br>
+   case BRW_REGISTER_TYPE_F:<br>
+      reg->dw1.f = -reg->dw1.f;<br>
+      return true;<br>
+   case BRW_REGISTER_TYPE_VF:<br>
+      reg->dw1.ud ^= 0x80808080;<br>
+      return true;<br>
+   case BRW_REGISTER_TYPE_UB:<br>
+   case BRW_REGISTER_TYPE_B:<br>
+      unreachable("no UB/B immediates");<br>
+   case BRW_REGISTER_TYPE_UV:<br>
+   case BRW_REGISTER_TYPE_V:<br>
+      assert(!"unimplemented: negate UV/V immediate");<br>
+   case BRW_REGISTER_TYPE_UQ:<br>
+   case BRW_REGISTER_TYPE_Q:<br>
+      assert(!"unimplemented: negate UQ/Q immediate");<br>
+   case BRW_REGISTER_TYPE_DF:<br>
+   case BRW_REGISTER_TYPE_HF:<br>
+      assert(!"unimplemented: negate DF/HF immediate");<br>
+   }<br>
+<br>
+   return false;<br>
+}<br>
+<br>
 backend_visitor::backend_visitor(struct brw_context *brw,<br>
                                  struct gl_shader_program *shader_prog,<br>
                                  struct gl_program *prog,<br>
diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h<br>
index 6fc86e1..2b9b72e 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_shader.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_shader.h<br>
@@ -195,6 +195,7 @@ enum brw_conditional_mod brw_conditional_for_comparison(unsigned int op);<br>
 uint32_t brw_math_function(enum opcode op);<br>
 const char *brw_instruction_name(enum opcode op);<br>
 bool brw_saturate_immediate(enum brw_reg_type type, struct brw_reg *reg);<br>
+bool brw_negate_immediate(enum brw_reg_type type, struct brw_reg *reg);<br>
<br>
 #ifdef __cplusplus<br>
 extern "C" {<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.0.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>