case nir_op_i2b1:
case nir_op_f2b1:
case nir_op_inot:
- case nir_op_fnot:
return true;
default:
return false;
LOWER_REDUCTION(nir_op_b32all_iequal, nir_op_ieq32, nir_op_iand);
LOWER_REDUCTION(nir_op_b32any_fnequal, nir_op_fne32, nir_op_ior);
LOWER_REDUCTION(nir_op_b32any_inequal, nir_op_ine32, nir_op_ior);
- LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fand);
- LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_for);
+ LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fmin);
+ LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_fmax);
default:
break;
unop("ineg", tint, "-src0")
unop("fneg", tfloat, "-src0")
unop("inot", tint, "~src0") # invert every bit of the integer
-unop("fnot", tfloat, ("bit_size == 64 ? ((src0 == 0.0) ? 1.0 : 0.0f) : " +
- "((src0 == 0.0f) ? 1.0f : 0.0f)"))
unop("fsign", tfloat, ("bit_size == 64 ? " +
"((src0 == 0.0) ? 0.0 : ((src0 > 0.0) ? 1.0 : -1.0)) : " +
"((src0 == 0.0f) ? 0.0f : ((src0 > 0.0f) ? 1.0f : -1.0f))"))
binop("ixor", tuint, _2src_commutative + associative, "src0 ^ src1")
-# floating point logic operators
-#
-# These use (src != 0.0) for testing the truth of the input, and output 1.0
-# for true and 0.0 for false
-
-binop("fand", tfloat32, _2src_commutative,
- "((src0 != 0.0f) && (src1 != 0.0f)) ? 1.0f : 0.0f")
-binop("for", tfloat32, _2src_commutative,
- "((src0 != 0.0f) || (src1 != 0.0f)) ? 1.0f : 0.0f")
-binop("fxor", tfloat32, _2src_commutative,
- "(src0 != 0.0f && src1 == 0.0f) || (src0 == 0.0f && src1 != 0.0f) ? 1.0f : 0.0f")
-
binop_reduce("fdot", 1, tfloat, tfloat, "{src0} * {src1}", "{src0} + {src1}",
"{src}")
(('ult', a, a), False),
(('uge', a, a), True),
# Logical and bit operations
- (('fand', a, 0.0), 0.0),
(('iand', a, a), a),
(('iand', a, ~0), a),
(('iand', a, 0), 0),
(('ior', a, a), a),
(('ior', a, 0), a),
(('ior', a, True), True),
- (('fxor', a, a), 0.0),
(('ixor', a, a), 0),
(('ixor', a, 0), a),
(('inot', ('inot', a)), a),
[nir_op_mov] = {MAXs, MAXv},
[nir_op_fsign] = {-1, CNDGTEv},
- [nir_op_fnot] = {SETEs, SETEv},
- [nir_op_for] = {MAXs, MAXv},
- [nir_op_fand] = {MINs, MINv},
- [nir_op_fxor] = {-1, SETNEv},
[nir_op_fadd] = {ADDs, ADDv},
[nir_op_fsub] = {ADDs, ADDv},
[nir_op_fmul] = {MULs, MULv},
switch (instr->op) {
/* TODO: handle these instead of lowering */
- LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fand);
- LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_for);
+ LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fmin);
+ LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_fmax);
default:
return false;
[nir_op_fmul] = gpir_op_mul,
[nir_op_fadd] = gpir_op_add,
[nir_op_fneg] = gpir_op_neg,
- [nir_op_fnot] = gpir_op_not,
[nir_op_fmin] = gpir_op_min,
[nir_op_fmax] = gpir_op_max,
[nir_op_frcp] = gpir_op_rcp,
[nir_op_fsign] = gpir_op_sign,
[nir_op_seq] = gpir_op_eq,
[nir_op_sne] = gpir_op_ne,
- [nir_op_fand] = gpir_op_min,
- [nir_op_for] = gpir_op_max,
[nir_op_fabs] = gpir_op_abs,
[nir_op_mov] = gpir_op_mov,
};
[nir_op_ffloor] = ppir_op_floor,
[nir_op_fceil] = ppir_op_ceil,
[nir_op_ffract] = ppir_op_fract,
- [nir_op_fand] = ppir_op_and,
- [nir_op_for] = ppir_op_or,
- [nir_op_fxor] = ppir_op_xor,
[nir_op_sge] = ppir_op_ge,
[nir_op_fge] = ppir_op_ge,
[nir_op_slt] = ppir_op_lt,
[nir_op_feq] = ppir_op_eq,
[nir_op_sne] = ppir_op_ne,
[nir_op_fne] = ppir_op_ne,
- [nir_op_fnot] = ppir_op_not,
[nir_op_fcsel] = ppir_op_select,
[nir_op_inot] = ppir_op_not,
[nir_op_ftrunc] = ppir_op_trunc,
case nir_op_fadd:
case nir_op_iadd:
return OP_ADD;
- case nir_op_fand:
case nir_op_iand:
return OP_AND;
case nir_op_ifind_msb:
case nir_op_fneg:
case nir_op_ineg:
return OP_NEG;
- case nir_op_fnot:
case nir_op_inot:
return OP_NOT;
- case nir_op_for:
case nir_op_ior:
return OP_OR;
case nir_op_fpow:
return OP_SUB;
case nir_op_ftrunc:
return OP_TRUNC;
- case nir_op_fxor:
case nir_op_ixor:
return OP_XOR;
default:
case nir_op_iabs:
case nir_op_fadd:
case nir_op_iadd:
- case nir_op_fand:
case nir_op_iand:
case nir_op_fceil:
case nir_op_fcos:
case nir_op_umul_high:
case nir_op_fneg:
case nir_op_ineg:
- case nir_op_fnot:
case nir_op_inot:
- case nir_op_for:
case nir_op_ior:
case nir_op_pack_64_2x32_split:
case nir_op_fpow:
case nir_op_isub:
case nir_op_ftrunc:
case nir_op_ishl:
- case nir_op_fxor:
case nir_op_ixor: {
DEFAULT_CHECKS;
LValues &newDefs = convert(&insn->dest);