Skip to content
Snippets Groups Projects
  • Taylor Simpson's avatar
    d54c5615
    Hexagon (target/hexagon) Short-circuit packet register writes · d54c5615
    Taylor Simpson authored
    
    In certain cases, we can avoid the overhead of writing to hex_new_value
    and write directly to hex_gpr.  We add need_commit field to DisasContext
    indicating if the end-of-packet commit is needed.  If it is not needed,
    get_result_gpr() and get_result_gpr_pair() can return hex_gpr.
    
    We pass the ctx->need_commit to helpers when needed.
    
    Finally, we can early-exit from gen_reg_writes during packet commit.
    
    There are a few instructions whose semantics write to the result before
    reading all the inputs.  Therefore, the idef-parser generated code is
    incompatible with short-circuit.  We tell idef-parser to skip them.
    
    For debugging purposes, we add a cpu property to turn off short-circuit.
    When the short-circuit property is false, we skip the analysis and force
    the end-of-packet commit.
    
    Here's a simple example of the TCG generated for
    0x004000b4:  0x7800c020 {       R0 = #0x1 }
    
    BEFORE:
     ---- 004000b4
     movi_i32 new_r0,$0x1
     mov_i32 r0,new_r0
    
    AFTER:
     ---- 004000b4
     movi_i32 r0,$0x1
    
    This patch reintroduces a use of check_for_attrib, so we remove the
    G_GNUC_UNUSED added earlier in this series.
    
    Signed-off-by: default avatarTaylor Simpson <tsimpson@quicinc.com>
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Reviewed-by: default avatarBrian Cain <bcain@quicinc.com>
    Message-Id: <20230427230012.3800327-12-tsimpson@quicinc.com>
    d54c5615
    History
    Hexagon (target/hexagon) Short-circuit packet register writes
    Taylor Simpson authored
    
    In certain cases, we can avoid the overhead of writing to hex_new_value
    and write directly to hex_gpr.  We add need_commit field to DisasContext
    indicating if the end-of-packet commit is needed.  If it is not needed,
    get_result_gpr() and get_result_gpr_pair() can return hex_gpr.
    
    We pass the ctx->need_commit to helpers when needed.
    
    Finally, we can early-exit from gen_reg_writes during packet commit.
    
    There are a few instructions whose semantics write to the result before
    reading all the inputs.  Therefore, the idef-parser generated code is
    incompatible with short-circuit.  We tell idef-parser to skip them.
    
    For debugging purposes, we add a cpu property to turn off short-circuit.
    When the short-circuit property is false, we skip the analysis and force
    the end-of-packet commit.
    
    Here's a simple example of the TCG generated for
    0x004000b4:  0x7800c020 {       R0 = #0x1 }
    
    BEFORE:
     ---- 004000b4
     movi_i32 new_r0,$0x1
     mov_i32 r0,new_r0
    
    AFTER:
     ---- 004000b4
     movi_i32 r0,$0x1
    
    This patch reintroduces a use of check_for_attrib, so we remove the
    G_GNUC_UNUSED added earlier in this series.
    
    Signed-off-by: default avatarTaylor Simpson <tsimpson@quicinc.com>
    Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    Reviewed-by: default avatarBrian Cain <bcain@quicinc.com>
    Message-Id: <20230427230012.3800327-12-tsimpson@quicinc.com>