i965: Fix a weirdness in NOT handling.
authorEric Anholt <eric@anholt.net>
Mon, 18 Oct 2010 18:13:26 +0000 (11:13 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 18 Oct 2010 19:56:44 +0000 (12:56 -0700)
XOR makes much more sense.  Note that the previous code would have
failed for not(not(x)), but that gets optimized out.

src/mesa/drivers/dri/i965/brw_fs.cpp

index c9e109871adef7cb72f116b6e076f6089e53a6b9..2224dc7a0e9a547be9932728f8f3b4bec50370db 100644 (file)
@@ -720,7 +720,7 @@ fs_visitor::visit(ir_expression *ir)
       /* Note that BRW_OPCODE_NOT is not appropriate here, since it is
        * ones complement of the whole register, not just bit 0.
        */
-      emit(fs_inst(BRW_OPCODE_ADD, this->result, op[0], fs_reg(-1)));
+      emit(fs_inst(BRW_OPCODE_XOR, this->result, op[0], fs_reg(1)));
       break;
    case ir_unop_neg:
       op[0].negate = !op[0].negate;