case GLSL_TYPE_DOUBLE:
result = new(ctx) ir_expression(ir_unop_d2u, src);
break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_u642u, src);
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642u, src);
+ break;
}
break;
case GLSL_TYPE_INT:
case GLSL_TYPE_DOUBLE:
result = new(ctx) ir_expression(ir_unop_d2i, src);
break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_u642i, src);
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642i, src);
+ break;
}
break;
case GLSL_TYPE_FLOAT:
case GLSL_TYPE_DOUBLE:
result = new(ctx) ir_expression(ir_unop_d2f, desired_type, src, NULL);
break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_u642f, desired_type, src, NULL);
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642f, desired_type, src, NULL);
+ break;
}
break;
case GLSL_TYPE_BOOL:
case GLSL_TYPE_DOUBLE:
result = new(ctx) ir_expression(ir_unop_d2b, desired_type, src, NULL);
break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_i642b,
+ new(ctx) ir_expression(ir_unop_u642i64,
+ src));
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642b, desired_type, src, NULL);
+ break;
}
break;
case GLSL_TYPE_DOUBLE:
case GLSL_TYPE_FLOAT:
result = new(ctx) ir_expression(ir_unop_f2d, desired_type, src, NULL);
break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_u642d, desired_type, src, NULL);
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642d, desired_type, src, NULL);
+ break;
}
+ break;
+ case GLSL_TYPE_UINT64:
+ switch (b) {
+ case GLSL_TYPE_INT:
+ result = new(ctx) ir_expression(ir_unop_i2u64, src);
+ break;
+ case GLSL_TYPE_UINT:
+ result = new(ctx) ir_expression(ir_unop_u2u64, src);
+ break;
+ case GLSL_TYPE_BOOL:
+ result = new(ctx) ir_expression(ir_unop_i642u64,
+ new(ctx) ir_expression(ir_unop_b2i64,
+ src));
+ break;
+ case GLSL_TYPE_FLOAT:
+ result = new(ctx) ir_expression(ir_unop_f2u64, src);
+ break;
+ case GLSL_TYPE_DOUBLE:
+ result = new(ctx) ir_expression(ir_unop_d2u64, src);
+ break;
+ case GLSL_TYPE_INT64:
+ result = new(ctx) ir_expression(ir_unop_i642u64, src);
+ break;
+ }
+ break;
+ case GLSL_TYPE_INT64:
+ switch (b) {
+ case GLSL_TYPE_INT:
+ result = new(ctx) ir_expression(ir_unop_i2i64, src);
+ break;
+ case GLSL_TYPE_UINT:
+ result = new(ctx) ir_expression(ir_unop_u2i64, src);
+ break;
+ case GLSL_TYPE_BOOL:
+ result = new(ctx) ir_expression(ir_unop_b2i64, src);
+ break;
+ case GLSL_TYPE_FLOAT:
+ result = new(ctx) ir_expression(ir_unop_f2i64, src);
+ break;
+ case GLSL_TYPE_DOUBLE:
+ result = new(ctx) ir_expression(ir_unop_d2i64, src);
+ break;
+ case GLSL_TYPE_UINT64:
+ result = new(ctx) ir_expression(ir_unop_u642i64, src);
+ break;
+ }
+ break;
}
assert(result != NULL);
case GLSL_TYPE_INT: return ir_unop_i2d;
case GLSL_TYPE_UINT: return ir_unop_u2d;
case GLSL_TYPE_FLOAT: return ir_unop_f2d;
+ case GLSL_TYPE_INT64: return ir_unop_i642d;
+ case GLSL_TYPE_UINT64: return ir_unop_u642d;
+ default: return (ir_expression_operation)0;
+ }
+
+ case GLSL_TYPE_UINT64:
+ if (!state->has_int64())
+ return (ir_expression_operation)0;
+ switch (from->base_type) {
+ case GLSL_TYPE_INT: return ir_unop_i2u64;
+ case GLSL_TYPE_UINT: return ir_unop_u2u64;
+ case GLSL_TYPE_INT64: return ir_unop_i642u64;
+ default: return (ir_expression_operation)0;
+ }
+
+ case GLSL_TYPE_INT64:
+ if (!state->has_int64())
+ return (ir_expression_operation)0;
+ switch (from->base_type) {
+ case GLSL_TYPE_INT: return ir_unop_i2i64;
default: return (ir_expression_operation)0;
}