[Mesa-dev] [PATCH 13/23] i965/disasm: Improve disassembly of atomic messages on Haswell+.

Kristian Høgsberg hoegsberg at gmail.com
Mon Jun 30 10:36:46 PDT 2014


On Sat, Jun 28, 2014 at 09:33:52PM -0700, Kenneth Graunke wrote:
> This backports the atomic message disassembly support from
> gen8_disasm.c, which additionally offers support for decoding atomic
> surface read/write messages, and showing SIMD modes and other details.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_disasm.c | 28 +++++++++++++++++++++-------
>  1 file changed, 21 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
> index 4e75cc7..99c9bd0 100644
> --- a/src/mesa/drivers/dri/i965/brw_disasm.c
> +++ b/src/mesa/drivers/dri/i965/brw_disasm.c
> @@ -1417,33 +1417,47 @@ brw_disassemble_inst(FILE *file, struct brw_context *brw, brw_inst *inst,
>           }
>           /* FALLTHROUGH */
>  
> -      case HSW_SFID_DATAPORT_DATA_CACHE_1:
> +      case HSW_SFID_DATAPORT_DATA_CACHE_1: {
>           if (brw->gen >= 7) {
>              format(file, " (");
>  
> +            unsigned msg_ctrl = brw_inst_dp_msg_control(brw, inst);
> +
>              err |= control(file, "DP DC1 message type",
>                             dp_dc1_msg_type_hsw,
>                             brw_inst_dp_msg_type(brw, inst), &space);
>  
> -            format(file, ", %d, ", brw_inst_binding_table_index(brw, inst));
> +            format(file, ", Surface = %d, ",
> +                   brw_inst_binding_table_index(brw, inst));
>  
>              switch (brw_inst_dp_msg_type(brw, inst)) {
>              case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP:
> -            case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2:
>              case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP:
> -            case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2:
>              case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP:
> +               format(file, "SIMD%d,", (msg_ctrl & (1 << 4)) ? 8 : 16);
> +               /* fallthrough */
> +            case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2:
> +            case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2:
>              case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2:

I was wondering if we could print out SIMD4x2 in these three cases as
we do above for SIMD8 and SIMD16, but it's part of the atomic operand
name, of course.

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>

> -               control(file, "atomic op", aop,
> -                       brw_inst_imm_ud(brw, inst) >> 8 & 0xf, &space);
> +               control(file, "atomic op", aop, msg_ctrl & 0xf, &space);
> +               break;
> +            case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ:
> +            case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE:
> +            case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ:
> +            case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE: {
> +               static const char *simd_modes[] = { "4x2", "16", "8" };
> +               format(file, "SIMD%s, Mask = 0x%x",
> +                      simd_modes[msg_ctrl >> 4], msg_ctrl & 0xf);
>                 break;
> +            }
>              default:
> -               format(file, "%d", brw_inst_dp_msg_control(brw, inst));
> +               format(file, "0x%x", msg_ctrl);
>              }
>              format(file, ")");
>              break;
>           }
>           /* FALLTHROUGH */
> +      }
>  
>        default:
>           format(file, "unsupported target %d", target);
> -- 
> 2.0.0
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list