Mesa (master): i965/fs: Implement new ir_unop_u2i and ir_unop_i2u opcodes.

Kenneth Graunke kwg at kemper.freedesktop.org
Wed Jun 29 23:07:30 UTC 2011


Module: Mesa
Branch: master
Commit: b633ddeb9fd951ddc49e8a3fd25a946e5a16361f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b633ddeb9fd951ddc49e8a3fd25a946e5a16361f

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Jun 14 13:04:32 2011 -0700

i965/fs: Implement new ir_unop_u2i and ir_unop_i2u opcodes.

No MOV is necessary since signed/unsigned integers share the same
bit-representation; it's simply a question of interpretation.  In
particular, the fs_reg::imm union shouldn't need updating.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 .../dri/i965/brw_fs_channel_expressions.cpp        |    2 ++
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp       |    8 ++++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
index 7f3f528..46677a6 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp
@@ -191,6 +191,8 @@ ir_channel_expressions_visitor::visit_leave(ir_assignment *ir)
    case ir_unop_log:
    case ir_unop_exp2:
    case ir_unop_log2:
+   case ir_unop_i2u:
+   case ir_unop_u2i:
    case ir_unop_f2i:
    case ir_unop_i2f:
    case ir_unop_f2b:
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 2704f06..9091014 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -349,6 +349,14 @@ fs_visitor::visit(ir_expression *ir)
       emit_math(FS_OPCODE_RSQ, this->result, op[0]);
       break;
 
+   case ir_unop_i2u:
+      op[0].type = BRW_REGISTER_TYPE_UD;
+      this->result = op[0];
+      break;
+   case ir_unop_u2i:
+      op[0].type = BRW_REGISTER_TYPE_D;
+      this->result = op[0];
+      break;
    case ir_unop_i2f:
    case ir_unop_b2f:
    case ir_unop_b2i:




More information about the mesa-commit mailing list