glsl: Add a lowering pass for 64-bit integer division
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
@@ -53,6 +53,7 @@
|
||||
/* Opertaions for lower_64bit_integer_instructions() */
|
||||
#define MUL64 (1U << 0)
|
||||
#define SIGN64 (1U << 1)
|
||||
#define DIV64 (1U << 2)
|
||||
|
||||
/**
|
||||
* \see class lower_packing_builtins_visitor
|
||||
|
@@ -368,6 +368,17 @@ lower_64bit_visitor::handle_rvalue(ir_rvalue **rvalue)
|
||||
}
|
||||
break;
|
||||
|
||||
case ir_binop_div:
|
||||
if (lowering(DIV64)) {
|
||||
if (ir->type->base_type == GLSL_TYPE_UINT64) {
|
||||
*rvalue = handle_op(ir, "__builtin_udiv64", generate_ir::udiv64);
|
||||
} else {
|
||||
*rvalue = handle_op(ir, "__builtin_idiv64", generate_ir::idiv64);
|
||||
}
|
||||
this->progress = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case ir_binop_mul:
|
||||
if (lowering(MUL64)) {
|
||||
*rvalue = handle_op(ir, "__builtin_umul64", generate_ir::umul64);
|
||||
|
Reference in New Issue
Block a user