nir: add frexp_exp and frexp_sig opcodes
authorTimothy Arceri <tarceri@itsqueeze.com>
Tue, 20 Mar 2018 02:06:23 +0000 (13:06 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 22 Mar 2018 01:42:34 +0000 (12:42 +1100)
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/compiler/glsl/glsl_to_nir.cpp
src/compiler/nir/nir_opcodes.py

index 80eb15f1ab184c4cf13b8458c9b17c29d897615a..be8cc33e067bc2472120cc2813bc98c69fdb5d13 100644 (file)
@@ -1612,6 +1612,8 @@ nir_visitor::visit(ir_expression *ir)
    case ir_unop_ceil:  result = nir_fceil(&b, srcs[0]); break;
    case ir_unop_floor: result = nir_ffloor(&b, srcs[0]); break;
    case ir_unop_fract: result = nir_ffract(&b, srcs[0]); break;
+   case ir_unop_frexp_exp: result = nir_frexp_exp(&b, srcs[0]); break;
+   case ir_unop_frexp_sig: result = nir_frexp_sig(&b, srcs[0]); break;
    case ir_unop_round_even: result = nir_fround_even(&b, srcs[0]); break;
    case ir_unop_sin:   result = nir_fsin(&b, srcs[0]); break;
    case ir_unop_cos:   result = nir_fcos(&b, srcs[0]); break;
index 65d13200624066b56a986aa41b646016a7dcb286..04edffc6c0bd971ecfb02957ba05644a54318d38 100644 (file)
@@ -214,6 +214,9 @@ unop("fquantize2f16", tfloat, "(fabs(src0) < ldexpf(1.0, -14)) ? copysignf(0.0f,
 unop("fsin", tfloat, "bit_size == 64 ? sin(src0) : sinf(src0)")
 unop("fcos", tfloat, "bit_size == 64 ? cos(src0) : cosf(src0)")
 
+# dfrexp
+unop_convert("frexp_exp", tint32, tfloat64, "frexp(src0, &dst);")
+unop_convert("frexp_sig", tfloat64, tfloat64, "int n; dst = frexp(src0, &n);")
 
 # Partial derivatives.