[Mesa-dev] [PATCH 2/4] i965: Fix multiplication of immediates on Cherryview/Broxton.
Jordan Justen
jordan.l.justen at intel.com
Sat Jun 11 23:06:32 UTC 2016
On 2016-06-10 14:19:44, Kenneth Graunke wrote:
> Cherryview and Broxton don't support DW x DW multiplication. We have
> piles of code to handle this, but apparently weren't retyping in the
> immediate case.
>
> For example,
> tests/spec/arb_tessellation_shader/execution/dvec3-vs-tcs-tes
> makes the simulator angry about instructions such as:
>
> mul(8) r18<1>:D r10.0<8;8,1>:D 0x00000003:D
>
> Just retype to UW. It should be safe everywhere.
>
> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95462
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 4b29ee5..13246c2 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -3564,7 +3564,10 @@ fs_visitor::lower_integer_multiplication()
> ibld.MOV(imm, inst->src[1]);
> ibld.MUL(inst->dst, imm, inst->src[0]);
> } else {
> - ibld.MUL(inst->dst, inst->src[0], inst->src[1]);
> + const bool ud = (inst->src[1].type == BRW_REGISTER_TYPE_UD);
> + ibld.MUL(inst->dst, inst->src[0],
> + ud ? brw_imm_uw(inst->src[1].ud)
> + : brw_imm_w(inst->src[1].d));
This change looks fine, but will it actually be possible to hit this
code path for negative numbers? Above, we have:
if (inst->src[1].file == IMM &&
inst->src[1].ud < (1 << 16)) {
Bit 31 would be set if inst->src[1].d has a negative number.
-Jordan
> }
> } else {
> /* Gen < 8 (and some Gen8+ low-power parts like Cherryview) cannot
> --
> 2.8.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list