intel/compiler: Enable the emission of ROR/ROL instructions
authorSagar Ghuge <sagar.ghuge@intel.com>
Wed, 29 May 2019 18:43:30 +0000 (11:43 -0700)
committerSagar Ghuge <sagar.ghuge@intel.com>
Mon, 1 Jul 2019 17:14:22 +0000 (10:14 -0700)
v2: 1) Drop changes for vec4 backend as on Gen11+ we don't support
       align16 mode (Matt Turner)

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/intel/compiler/brw_eu.c
src/intel/compiler/brw_eu.h
src/intel/compiler/brw_eu_defines.h
src/intel/compiler/brw_eu_emit.c
src/intel/compiler/brw_fs_builder.h
src/intel/compiler/brw_fs_generator.cpp

index 87a6145ac2943bfb420e485759d5ee284c57d9cb..ec30579446b1fb817561d0470373b26cadffe03e 100644 (file)
@@ -488,7 +488,13 @@ static const struct opcode_desc opcode_descs[128] = {
    [BRW_OPCODE_ASR] = {
       .name = "asr",     .nsrc = 2, .ndst = 1, .gens = GEN_ALL,
    },
-   /* Reserved - 13-15 */
+   /* Reserved - 13 */
+   [BRW_OPCODE_ROR] = {
+      .name = "ror",     .nsrc = 2, .ndst = 1, .gens = GEN_GE(GEN11),
+   },
+   [BRW_OPCODE_ROL] = {
+      .name = "rol",     .nsrc = 2, .ndst = 1, .gens = GEN_GE(GEN11),
+   },
    [BRW_OPCODE_CMP] = {
       .name = "cmp",     .nsrc = 2, .ndst = 1, .gens = GEN_ALL,
    },
index 29965e60a7f1646a32555ad7d892761093a2f665..dd504cc25fbc9cd0897c61296bfa51e5d0b8c72d 100644 (file)
@@ -204,6 +204,8 @@ ALU2(SHR)
 ALU2(SHL)
 ALU1(DIM)
 ALU2(ASR)
+ALU2(ROL)
+ALU2(ROR)
 ALU3(CSEL)
 ALU1(F32TO16)
 ALU1(F16TO32)
index 933037c4df3519aef8ce63ce26aa074d108a2aa3..e8ca7ff8b98e7ecb2effcc0561b9c564c462c12a 100644 (file)
@@ -210,7 +210,9 @@ enum opcode {
    BRW_OPCODE_SMOV =   10,  /**< Gen8+       */ /* Reused */
    /* Reserved - 11 */
    BRW_OPCODE_ASR =    12,
-   /* Reserved - 13-15 */
+   /* Reserved - 13 */
+   BRW_OPCODE_ROR =    14,  /**< Gen11+ */
+   BRW_OPCODE_ROL =    15,  /**< Gen11+ */
    BRW_OPCODE_CMP =    16,
    BRW_OPCODE_CMPN =   17,
    BRW_OPCODE_CSEL =   18,  /**< Gen8+ */
index 6cb4f7bdbf12c795857b43f4b557f5bf83628dc2..8e7263ce447d9c34495b7b4dbb0454705f08560c 100644 (file)
@@ -981,6 +981,8 @@ ALU2(SHR)
 ALU2(SHL)
 ALU1(DIM)
 ALU2(ASR)
+ALU2(ROL)
+ALU2(ROR)
 ALU3(CSEL)
 ALU1(FRC)
 ALU1(RNDD)
index b781f1257ba4f050abed024617e3934b35078d22..0c1b6f5d6c7f8b77a2c46627c6b43151d1487510 100644 (file)
@@ -594,6 +594,8 @@ namespace brw {
       ALU1(RNDE)
       ALU1(RNDU)
       ALU1(RNDZ)
+      ALU2(ROL)
+      ALU2(ROR)
       ALU2(SAD2)
       ALU2_ACC(SADA2)
       ALU2(SEL)
index 14868baa009e2d5492e733aebea6f5140a27a8a0..d068d1a51c1a8a5792c4ab00f080d4caacb10859 100644 (file)
@@ -1796,6 +1796,16 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
       case BRW_OPCODE_SHL:
         brw_SHL(p, dst, src[0], src[1]);
         break;
+      case BRW_OPCODE_ROL:
+        assert(devinfo->gen >= 11);
+        assert(src[0].type == dst.type);
+        brw_ROL(p, dst, src[0], src[1]);
+        break;
+      case BRW_OPCODE_ROR:
+        assert(devinfo->gen >= 11);
+        assert(src[0].type == dst.type);
+        brw_ROR(p, dst, src[0], src[1]);
+        break;
       case BRW_OPCODE_F32TO16:
          assert(devinfo->gen >= 7);
          brw_F32TO16(p, dst, src[0]);