Add unary operator to convert unsigned integer to float
[mesa.git] / ir_print_visitor.cpp
index ca9f75925200c0d01d5416326d3d0843481ec0ec..682a553249c13a074c3958ff7acdeaef6e8555ab 100644 (file)
@@ -102,26 +102,34 @@ void ir_print_visitor::visit(ir_expression *ir)
 }
 
 
+void ir_print_visitor::visit(ir_swizzle *ir)
+{
+   const unsigned swiz[4] = {
+      ir->mask.x,
+      ir->mask.y,
+      ir->mask.z,
+      ir->mask.w,
+   };
+
+   printf("(swiz ");
+   for (unsigned i = 0; i < ir->mask.num_components; i++) {
+      printf("%c", "xyzw"[swiz[i]]);
+   }
+   printf(" ");
+   ir->val->accept(this);
+   printf(")");
+}
+
+
 void ir_print_visitor::visit(ir_dereference *ir)
 {
    deref_depth++;
 
    switch (ir->mode) {
    case ir_dereference::ir_reference_variable: {
-      const unsigned swiz[4] = {
-        ir->selector.swizzle.x,
-        ir->selector.swizzle.y,
-        ir->selector.swizzle.z,
-        ir->selector.swizzle.w,
-      };
-
       printf("(var_ref ");
       ir->var->accept(this);
-      printf("(");
-      for (unsigned i = 0; i < ir->selector.swizzle.num_components; i++) {
-        printf("%c", "xyzw"[swiz[i]]);
-      }
-      printf(")) ");
+      printf(") ");
       break;
    }
    case ir_dereference::ir_reference_array:
@@ -169,12 +177,8 @@ void ir_print_visitor::visit(ir_constant *ir)
    print_type(base_type);
    printf(") ");
 
-   const unsigned num_values = 1
-      * ((ir->type->vector_elements > 0) ? ir->type->vector_elements : 1)
-      * ((ir->type->matrix_columns > 0) ? ir->type->matrix_columns : 1);
-
-   printf("(%d) (", num_values);
-   for (unsigned i = 0; i < num_values; i++) {
+   printf("(%d) (", ir->type->components());
+   for (unsigned i = 0; i < ir->type->components(); i++) {
       if (i != 0)
         printf(", ");
 
@@ -205,7 +209,7 @@ ir_print_visitor::visit(ir_return *ir)
 {
    printf("(return");
 
-   ir_expression *const value = ir->get_value();
+   ir_rvalue *const value = ir->get_value();
    if (value) {
       printf(" ");
       value->accept(this);