[Beignet] [PATCH v2] Fix int div/rem assert in SIMD8 mode.
Zhigang Gong
zhigang.gong at linux.intel.com
Tue May 28 23:12:15 PDT 2013
Pushed, thanks.
On Wed, May 29, 2013 at 10:09:38AM +0800, Yang Rong wrote:
>
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
> backend/src/backend/gen_encoder.cpp | 39 ++++++++++++++++++-----------------
> 1 file changed, 20 insertions(+), 19 deletions(-)
>
> diff --git a/backend/src/backend/gen_encoder.cpp b/backend/src/backend/gen_encoder.cpp
> index d6c34fb..b65cc94 100644
> --- a/backend/src/backend/gen_encoder.cpp
> +++ b/backend/src/backend/gen_encoder.cpp
> @@ -1,4 +1,4 @@
> -/*
> +/*
> * Copyright © 2012 Intel Corporation
> *
> * This library is free software; you can redistribute it and/or
> @@ -21,7 +21,7 @@
> Copyright (C) Intel Corp. 2006. All Rights Reserved.
> Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
> develop this 3D driver.
> -
> +
> Permission is hereby granted, free of charge, to any person obtaining
> a copy of this software and associated documentation files (the
> "Software"), to deal in the Software without restriction, including
> @@ -29,11 +29,11 @@
> distribute, sublicense, and/or sell copies of the Software, and to
> permit persons to whom the Software is furnished to do so, subject to
> the following conditions:
> -
> +
> The above copyright notice and this permission notice (including the
> next paragraph) shall be included in all copies or substantial
> portions of the Software.
> -
> +
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> @@ -41,7 +41,7 @@
> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> -
> +
> **********************************************************************/
> /*
> * Authors:
> @@ -334,7 +334,7 @@ namespace gbe
> insn->bits3.da16.src1_reg_nr = reg.nr;
> }
>
> - if (reg.width == GEN_WIDTH_1 &&
> + if (reg.width == GEN_WIDTH_1 &&
> insn->header.execution_size == GEN_WIDTH_1) {
> insn->bits3.da1.src1_horiz_stride = GEN_HORIZONTAL_STRIDE_0;
> insn->bits3.da1.src1_width = GEN_WIDTH_1;
> @@ -802,20 +802,21 @@ namespace gbe
>
> if (function == GEN_MATH_FUNCTION_INT_DIV_QUOTIENT ||
> function == GEN_MATH_FUNCTION_INT_DIV_REMAINDER) {
> - assert(insn->header.execution_size == GEN_WIDTH_16);
> - insn->header.execution_size = GEN_WIDTH_8;
> + if(insn->header.execution_size == GEN_WIDTH_16) {
> + GenInstruction *insn2 = this->next(GEN_OPCODE_MATH);
> + GenRegister new_dest, new_src0, new_src1;
> + new_dest = GenRegister::QnPhysical(dst, 1);
> + new_src0 = GenRegister::QnPhysical(src0, 1);
> + new_src1 = GenRegister::QnPhysical(src1, 1);
> + insn2->header.destreg_or_condmod = function;
> + this->setHeader(insn2);
> + insn2->header.execution_size = GEN_WIDTH_8;
> + this->setDst(insn2, new_dest);
> + this->setSrc0(insn2, new_src0);
> + this->setSrc1(insn2, new_src1);
> + }
>
> - GenInstruction *insn2 = this->next(GEN_OPCODE_MATH);
> - GenRegister new_dest, new_src0, new_src1;
> - new_dest = GenRegister::QnPhysical(dst, 1);
> - new_src0 = GenRegister::QnPhysical(src0, 1);
> - new_src1 = GenRegister::QnPhysical(src1, 1);
> - insn2->header.destreg_or_condmod = function;
> - this->setHeader(insn2);
> - insn2->header.execution_size = GEN_WIDTH_8;
> - this->setDst(insn2, new_dest);
> - this->setSrc0(insn2, new_src0);
> - this->setSrc1(insn2, new_src1);
> + insn->header.execution_size = GEN_WIDTH_8;
> }
> }
>
> --
> 1.7.9.5
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list