panfrost/midgard: Note floating compares type convert
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 5 Jun 2019 22:02:20 +0000 (15:02 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 10 Jun 2019 13:50:11 +0000 (06:50 -0700)
OP_TYPE_CONVERTS denotes an opcode that returns a different type than is
source (going from int-domain to float-domain or vice versa), named
after the f2i/i2f family of opcodes it covers. We care because source
mods are determined by the source type (i/f) but output modifiers are
determined by the output type (equals the source type, unless the op
type converts, in which case it's the opposite).

The upshot is that floating-point compares (feq/fne/etc) actually do
type-convert.  That is, that take in floating-points and output in
integer space (a boolean), so we mark them off this way to ensure the
correct output modifiers are used.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/midgard/midgard_ops.c

index 97c12feec0030e970286c79d3b915da43cd75b9a..693fb56124ddd2f97f2d6706fb1df6d44ecbfdc9 100644 (file)
@@ -73,10 +73,10 @@ struct mir_op_props alu_opcode_props[256] = {
         [midgard_alu_op_imov]           = {"imov", UNITS_MOST | QUIRK_FLIPPED_R24},
 
         /* For vector comparisons, use ball etc */
-        [midgard_alu_op_feq]            = {"feq", UNITS_MOST | OP_COMMUTES},
-        [midgard_alu_op_fne]            = {"fne", UNITS_MOST | OP_COMMUTES},
-        [midgard_alu_op_fle]            = {"fle", UNITS_MOST},
-        [midgard_alu_op_flt]            = {"flt", UNITS_MOST},
+        [midgard_alu_op_feq]            = {"feq", UNITS_MOST | OP_TYPE_CONVERT | OP_COMMUTES},
+        [midgard_alu_op_fne]            = {"fne", UNITS_MOST | OP_TYPE_CONVERT | OP_COMMUTES},
+        [midgard_alu_op_fle]            = {"fle", UNITS_MOST | OP_TYPE_CONVERT},
+        [midgard_alu_op_flt]            = {"flt", UNITS_MOST | OP_TYPE_CONVERT},
         [midgard_alu_op_ieq]            = {"ieq", UNITS_MOST | OP_COMMUTES},
         [midgard_alu_op_ine]            = {"ine", UNITS_MOST | OP_COMMUTES},
         [midgard_alu_op_ilt]            = {"ilt", UNITS_MOST},