[Mesa-dev] [PATCH 3/9] i965: Don't consider control flow instructions to have sources.

Iago Toral itoral at igalia.com
Wed Oct 28 03:32:07 PDT 2015


On Wed, 2015-10-21 at 15:58 -0700, Matt Turner wrote:
> And why did IFF have a destination?
> 
> I suspect that once upon a time the disassembler used this information
> to know which fields to find the jump targets in. The jump targets have
> moved, so the disassembler has to know how to handle these
> per-generation anyway.

Control-flow instructions are explicitly handled by the disassembler and
don't use .nsrc or .ndst at all, so I think this should be fine.

The only other place where we use .ndst is the the check for compr4 in
gen < 6, but IFF would not fall in that case anyway.

Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>

> ---
>  src/mesa/drivers/dri/i965/brw_disasm.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
> index c2dac7c..29056ed 100644
> --- a/src/mesa/drivers/dri/i965/brw_disasm.c
> +++ b/src/mesa/drivers/dri/i965/brw_disasm.c
> @@ -90,20 +90,20 @@ const struct opcode_desc opcode_descs[128] = {
>     [BRW_OPCODE_NOP]      = { .name = "nop",     .nsrc = 0, .ndst = 0 },
>     [BRW_OPCODE_NENOP]    = { .name = "nenop",   .nsrc = 0, .ndst = 0 },
>     [BRW_OPCODE_JMPI]     = { .name = "jmpi",    .nsrc = 0, .ndst = 0 },
> -   [BRW_OPCODE_IF]       = { .name = "if",      .nsrc = 2, .ndst = 0 },
> -   [BRW_OPCODE_IFF]      = { .name = "iff",     .nsrc = 2, .ndst = 1 },
> -   [BRW_OPCODE_WHILE]    = { .name = "while",   .nsrc = 2, .ndst = 0 },
> -   [BRW_OPCODE_ELSE]     = { .name = "else",    .nsrc = 2, .ndst = 0 },
> -   [BRW_OPCODE_BREAK]    = { .name = "break",   .nsrc = 2, .ndst = 0 },
> -   [BRW_OPCODE_CONTINUE] = { .name = "cont",    .nsrc = 1, .ndst = 0 },
> -   [BRW_OPCODE_HALT]     = { .name = "halt",    .nsrc = 1, .ndst = 0 },
> +   [BRW_OPCODE_IF]       = { .name = "if",      .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_IFF]      = { .name = "iff",     .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_WHILE]    = { .name = "while",   .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_ELSE]     = { .name = "else",    .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_BREAK]    = { .name = "break",   .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_CONTINUE] = { .name = "cont",    .nsrc = 0, .ndst = 0 },
> +   [BRW_OPCODE_HALT]     = { .name = "halt",    .nsrc = 0, .ndst = 0 },
>     // [BRW_OPCODE_MSAVE]    = { .name = "msave",   .nsrc = 1, .ndst = 1 },
>     // [BRW_OPCODE_PUSH]     = { .name = "push",    .nsrc = 1, .ndst = 1 },
>     // [BRW_OPCODE_MREST]    = { .name = "mrest",   .nsrc = 1, .ndst = 1 },
>     // [BRW_OPCODE_POP]      = { .name = "pop",     .nsrc = 2, .ndst = 0 },
>     [BRW_OPCODE_WAIT]     = { .name = "wait",    .nsrc = 1, .ndst = 0 },
>     [BRW_OPCODE_DO]       = { .name = "do",      .nsrc = 0, .ndst = 0 },
> -   [BRW_OPCODE_ENDIF]    = { .name = "endif",   .nsrc = 2, .ndst = 0 },
> +   [BRW_OPCODE_ENDIF]    = { .name = "endif",   .nsrc = 0, .ndst = 0 },
>  };
>  
>  static bool




More information about the mesa-dev mailing list