panfrost/midgard: Add fcsel_i opcode
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 24 Mar 2019 22:27:06 +0000 (22:27 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 26 Mar 2019 23:35:15 +0000 (23:35 +0000)
Whereas a normal fcsel acts on a boolean input in r31.w, the fcsel_i
variant acts on an integer input in r31.w, which can be preloaded with
an instruction like imov (with the appropriate negate flag on the
source).

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/panfrost/midgard/helpers.h
src/gallium/drivers/panfrost/midgard/midgard.h

index 606eb9982e7ee7364111a51b10043261857988e7..268259ce432c46f2e5ae8fcb4a94aed5686fa0c3 100644 (file)
@@ -223,6 +223,7 @@ static unsigned alu_opcode_props[256] = {
         [midgard_alu_op_ile]            = UNITS_MOST,
 
         [midgard_alu_op_icsel]          = UNITS_ADD,
+        [midgard_alu_op_fcsel_i]        = UNITS_ADD,
         [midgard_alu_op_fcsel]          = UNITS_ADD | UNIT_SMUL,
 
         [midgard_alu_op_frcp]           = UNIT_VLUT,
index 39b1df5d915f85582ef5b32ed9c51de522addb60..f3cabff8c2f9aa7c29e7ab8eeeaf1f6f2831852b 100644 (file)
@@ -105,6 +105,7 @@ typedef enum {
         midgard_alu_op_i2f        = 0xB8,
         midgard_alu_op_u2f        = 0xBC,
         midgard_alu_op_icsel      = 0xC1,
+        midgard_alu_op_fcsel_i    = 0xC4,
         midgard_alu_op_fcsel      = 0xC5,
         midgard_alu_op_fround     = 0xC6,
         midgard_alu_op_fatan_pt2  = 0xE8,
@@ -457,6 +458,7 @@ static char *alu_opcode_names[256] = {
         [midgard_alu_op_i2f]        = "i2f",
         [midgard_alu_op_u2f]        = "u2f",
         [midgard_alu_op_icsel]      = "icsel",
+        [midgard_alu_op_fcsel_i]    = "fcsel_i",
         [midgard_alu_op_fcsel]      = "fcsel",
         [midgard_alu_op_fround]     = "fround",
         [midgard_alu_op_fatan_pt2]  = "fatan_pt2",