From d5d6260329ed2df4aaffffac18d8998d4ad3676b Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 12 Jan 2016 14:03:08 +0100 Subject: [PATCH] nir: add i2d and u2d opcodes v2: - Assert supports_int and don't fallback to nir_fmov (Jason) Reviewed-by: Jason Ekstrand --- src/compiler/nir/glsl_to_nir.cpp | 8 ++++++++ src/compiler/nir/nir_opcodes.py | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/compiler/nir/glsl_to_nir.cpp b/src/compiler/nir/glsl_to_nir.cpp index 6428b95965f..0c5cc99981b 100644 --- a/src/compiler/nir/glsl_to_nir.cpp +++ b/src/compiler/nir/glsl_to_nir.cpp @@ -1361,6 +1361,14 @@ nir_visitor::visit(ir_expression *ir) case ir_unop_d2i: result = nir_d2i(&b, srcs[0]); break; case ir_unop_d2u: result = nir_d2u(&b, srcs[0]); break; case ir_unop_d2b: result = nir_d2b(&b, srcs[0]); break; + case ir_unop_i2d: + assert(supports_ints); + result = nir_i2d(&b, srcs[0]); + break; + case ir_unop_u2d: + assert(supports_ints); + result = nir_u2d(&b, srcs[0]); + break; case ir_unop_i2u: case ir_unop_u2i: case ir_unop_bitcast_i2f: diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py index 0898abcedfd..f1f12f72bdd 100644 --- a/src/compiler/nir/nir_opcodes.py +++ b/src/compiler/nir/nir_opcodes.py @@ -164,6 +164,7 @@ unop_convert("f2u", tuint32, tfloat32, "src0") # Float-to-unsigned conversion unop_convert("d2i", tint32, tfloat64, "src0") # Double-to-integer conversion. unop_convert("d2u", tuint32, tfloat64, "src0") # Double-to-unsigned conversion. unop_convert("i2f", tfloat32, tint32, "src0") # Integer-to-float conversion. +unop_convert("i2d", tfloat64, tint32, "src0") # Integer-to-double conversion. # Float-to-boolean conversion unop_convert("f2b", tbool, tfloat32, "src0 != 0.0f") unop_convert("d2b", tbool, tfloat64, "src0 != 0.0") @@ -173,6 +174,7 @@ unop_convert("b2f", tfloat32, tbool, "src0 ? 1.0f : 0.0f") unop_convert("i2b", tbool, tint32, "src0 != 0") unop_convert("b2i", tint32, tbool, "src0 ? 1 : 0") # Boolean-to-int conversion unop_convert("u2f", tfloat32, tuint32, "src0") # Unsigned-to-float conversion. +unop_convert("u2d", tfloat64, tuint32, "src0") # Unsigned-to-double conversion. # double-to-float conversion unop_convert("d2f", tfloat32, tfloat64, "src0") # Single to double precision unop_convert("f2d", tfloat64, tfloat32, "src0") # Double to single precision -- 2.30.2