intel/disasm/gen12: Disassemble Gen12 SEND instructions.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 28 Aug 2019 04:52:51 +0000 (21:52 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 11 Oct 2019 19:24:16 +0000 (12:24 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/compiler/brw_disasm.c

index 8d35e87cc98df61ae8ec0e30f97a5557eadb8527..594ea665a9c2a7c009a5e73bd0e5f66a7935683c 100644 (file)
@@ -92,8 +92,11 @@ is_send(unsigned opcode)
 static bool
 is_split_send(UNUSED const struct gen_device_info *devinfo, unsigned opcode)
 {
-   return opcode == BRW_OPCODE_SENDS ||
-          opcode == BRW_OPCODE_SENDSC;
+   if (devinfo->gen >= 12)
+      return is_send(opcode);
+   else
+      return opcode == BRW_OPCODE_SENDS ||
+             opcode == BRW_OPCODE_SENDSC;
 }
 
 const char *const conditional_modifier[16] = {
@@ -748,7 +751,11 @@ dest(FILE *file, const struct gen_device_info *devinfo, const brw_inst *inst)
       /* These are fixed for split sends */
       type = BRW_REGISTER_TYPE_UD;
       elem_size = 4;
-      if (brw_inst_dst_address_mode(devinfo, inst) == BRW_ADDRESS_DIRECT) {
+      if (devinfo->gen >= 12) {
+         err |= reg(file, brw_inst_send_dst_reg_file(devinfo, inst),
+                    brw_inst_dst_da_reg_nr(devinfo, inst));
+         string(file, brw_reg_type_to_letters(type));
+      } else if (brw_inst_dst_address_mode(devinfo, inst) == BRW_ADDRESS_DIRECT) {
          err |= reg(file, brw_inst_send_dst_reg_file(devinfo, inst),
                     brw_inst_dst_da_reg_nr(devinfo, inst));
          unsigned subreg_nr = brw_inst_dst_da16_subreg_nr(devinfo, inst);
@@ -1436,7 +1443,14 @@ static int
 src0(FILE *file, const struct gen_device_info *devinfo, const brw_inst *inst)
 {
    if (is_split_send(devinfo, brw_inst_opcode(devinfo, inst))) {
-      if (brw_inst_send_src0_address_mode(devinfo, inst) == BRW_ADDRESS_DIRECT) {
+      if (devinfo->gen >= 12) {
+         return src_sends_da(file,
+                             devinfo,
+                             BRW_REGISTER_TYPE_UD,
+                             brw_inst_send_src0_reg_file(devinfo, inst),
+                             brw_inst_src0_da_reg_nr(devinfo, inst),
+                             0);
+      } else if (brw_inst_send_src0_address_mode(devinfo, inst) == BRW_ADDRESS_DIRECT) {
          return src_sends_da(file,
                              devinfo,
                              BRW_REGISTER_TYPE_UD,