[PATCH] Add MIPS r6 support

YunQiang Su syq at debian.org
Tue Jun 11 01:59:53 UTC 2019


How about this patch?

YunQiang Su <syq at debian.org> 于2019年6月3日周一 下午1:00写道:
>
> From: Luyou Peng <lpeng at wavecomp.com>
>
> MIPS r6 changes the multiply instructions
> The previous version use non-GPR for reuslt, while r6 use GPR.
>
> The instructions are also replaced by new one:
>   multu -> mulu/muhu
>   dmultu -> dmulu/dmuhu
>
> We rewrite the code for MIPS r6, to make it in a single loop.
> Then the length of code is quite shorter now.
> ---
>  configure.ac                   | 17 ++++++++++
>  mpn/mips32/r6/addmul_1.asm     | 70 ++++++++++++++++++++++++++++++++++++++++++
>  mpn/mips32/r6/mul_1.asm        | 64 ++++++++++++++++++++++++++++++++++++++
>  mpn/mips32/r6/submul_1.asm     | 69 +++++++++++++++++++++++++++++++++++++++++
>  mpn/mips32/r6/umul.asm         | 44 ++++++++++++++++++++++++++
>  mpn/mips64/r6/addmul_1.asm     | 70 ++++++++++++++++++++++++++++++++++++++++++
>  mpn/mips64/r6/mul_1.asm        | 64 ++++++++++++++++++++++++++++++++++++++
>  mpn/mips64/r6/sqr_diagonal.asm | 59 +++++++++++++++++++++++++++++++++++
>  mpn/mips64/r6/submul_1.asm     | 69 +++++++++++++++++++++++++++++++++++++++++
>  mpn/mips64/r6/umul.asm         | 44 ++++++++++++++++++++++++++
>  10 files changed, 570 insertions(+)
>  create mode 100644 mpn/mips32/r6/addmul_1.asm
>  create mode 100644 mpn/mips32/r6/mul_1.asm
>  create mode 100644 mpn/mips32/r6/submul_1.asm
>  create mode 100644 mpn/mips32/r6/umul.asm
>  create mode 100644 mpn/mips64/r6/addmul_1.asm
>  create mode 100644 mpn/mips64/r6/mul_1.asm
>  create mode 100644 mpn/mips64/r6/sqr_diagonal.asm
>  create mode 100644 mpn/mips64/r6/submul_1.asm
>  create mode 100644 mpn/mips64/r6/umul.asm
>
> diff --git a/configure.ac b/configure.ac
> index 681254782..dfa55f065 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1006,10 +1006,22 @@ case $host in
>      # this suits both mips32 and mips64
>      GMP_INCLUDE_MPN(mips32/mips-defs.m4)
>
> +    mips_isa_rev=0
> +    case $host_cpu in
> +      mipsisa64r6*)
> +        mips_isa_rev=6
> +        ;;
> +    esac
> +
>      case $host in
>        [mips64*-*-* | mipsisa64*-*-* | mips*-*-irix[6789]*])
>          abilist="n32 64 o32"
>
> +        case $host in
> +          *abi64)
> +            abilist="64 n32 o32"
> +        esac
> +
>          cclist_n32="gcc cc"
>          gcc_n32_cflags_optlist="abi"
>          gcc_n32_cflags="$gcc_cflags"
> @@ -1026,6 +1038,11 @@ case $host in
>          cc_64_cflags="-O2 -64"         # no -g, it disables all optimizations
>          cc_64_ldflags="-Wc,-64"
>          path_64="mips64"
> +
> +       if test $mips_isa_rev -ge 6; then
> +          path_n32="mips64/r6 mips64"
> +          path_64="mips64/r6 mips64"
> +        fi
>          ;;
>      esac
>      ;;
> diff --git a/mpn/mips32/r6/addmul_1.asm b/mpn/mips32/r6/addmul_1.asm
> new file mode 100644
> index 000000000..f4e258610
> --- /dev/null
> +++ b/mpn/mips32/r6/addmul_1.asm
> @@ -0,0 +1,70 @@
> +dnl  MIPS64 mpn_addmul_1 -- Multiply a limb vector with a single limb and add
> +dnl  the product to a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_addmul_1)
> +
> +       move    $2,$0           C zero cy2
> +
> +Loop:
> +       lw      $8,0($5)
> +       lw          $10,0($4)
> +       addiu   $6,$6,-1        C decrement loop counter
> +
> +
> +       mulu    $3,$7,$8
> +
> +       addu    $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       addu    $3,$10,$3
> +       sltu    $10,$3,$10
> +       addu    $2,$2,$10
> +       sw          $3,0($4)
> +
> +       muhu    $9,$7,$8
> +
> +       addiu  $5,$5,4
> +       addiu   $4,$4,4
> +
> +       bgtz    $6,Loop
> +       addu    $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +EPILOGUE(mpn_addmul_1)
> diff --git a/mpn/mips32/r6/mul_1.asm b/mpn/mips32/r6/mul_1.asm
> new file mode 100644
> index 000000000..efce09c2f
> --- /dev/null
> +++ b/mpn/mips32/r6/mul_1.asm
> @@ -0,0 +1,64 @@
> +dnl  MIPS64 mpn_mul_1 -- Multiply a limb vector with a single limb and store
> +dnl  the product in a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_mul_1)
> +
> +       move    $2,$0           C zero cy2
> +Loop:
> +       lw              $8,0($5)
> +       addiu   $6,$6,-1        C decrement loop counter
> +
> +       mulu    $3,$7,$8
> +
> +       addu    $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       sw              $3,0($4)
> +
> +       muhu    $9,$7,$8
> +
> +       addiu   $5,$5,4
> +       addiu   $4,$4,4
> +
> +       bgtz    $6,Loop
> +       addu    $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +EPILOGUE(mpn_mul_1)
> diff --git a/mpn/mips32/r6/submul_1.asm b/mpn/mips32/r6/submul_1.asm
> new file mode 100644
> index 000000000..7d8eda4de
> --- /dev/null
> +++ b/mpn/mips32/r6/submul_1.asm
> @@ -0,0 +1,69 @@
> +dnl  MIPS64 mpn_submul_1 -- Multiply a limb vector with a single limb and
> +dnl  subtract the product from a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_submul_1)
> +
> +       move    $2,$0           C zero cy2
> +Loop:
> +       lw      $8,0($5)
> +       lw          $10,0($4)
> +       addiu   $6,$6,-1        C decrement loop counter
> +
> +       mulu    $3,$7,$8
> +
> +       addu    $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       subu    $3,$10,$3
> +       sltu    $10,$10,$3
> +       addu    $2,$2,$10
> +       sw          $3,0($4)
> +
> +       muhu    $9,$7,$8
> +
> +       addiu   $5,$5,4
> +       addiu   $4,$4,4
> +
> +       bgtz    $6,Loop
> +       addu    $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +
> +EPILOGUE(mpn_submul_1)
> diff --git a/mpn/mips32/r6/umul.asm b/mpn/mips32/r6/umul.asm
> new file mode 100644
> index 000000000..c5345e73e
> --- /dev/null
> +++ b/mpn/mips32/r6/umul.asm
> @@ -0,0 +1,44 @@
> +dnl  MIPS64 umul_ppmm -- longlong.h support.
> +
> +dnl  Copyright 2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C plp   $4
> +C u     $5
> +C v     $6
> +
> +ASM_START()
> +PROLOGUE(mpn_umul_ppmm)
> +       mulu    $3,$5,$6
> +       muhu    $2,$5,$6
> +       j       $31
> +       sw      $3,0($4)
> +EPILOGUE(mpn_umul_ppmm)
> diff --git a/mpn/mips64/r6/addmul_1.asm b/mpn/mips64/r6/addmul_1.asm
> new file mode 100644
> index 000000000..766996f60
> --- /dev/null
> +++ b/mpn/mips64/r6/addmul_1.asm
> @@ -0,0 +1,70 @@
> +dnl  MIPS64 mpn_addmul_1 -- Multiply a limb vector with a single limb and add
> +dnl  the product to a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_addmul_1)
> +
> +       move    $2,$0           C zero cy2
> +
> +Loop:
> +       ld      $8,0($5)
> +       ld          $10,0($4)
> +       daddiu  $6,$6,-1        C decrement loop counter
> +
> +
> +       dmulu   $3,$7,$8
> +
> +       daddu   $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       daddu   $3,$10,$3
> +       sltu    $10,$3,$10
> +       daddu   $2,$2,$10
> +       sd          $3,0($4)
> +
> +       dmuhu   $9,$7,$8
> +
> +       daddiu  $5,$5,8
> +       daddiu  $4,$4,8
> +
> +       bgtz    $6,Loop
> +       daddu   $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +EPILOGUE(mpn_addmul_1)
> diff --git a/mpn/mips64/r6/mul_1.asm b/mpn/mips64/r6/mul_1.asm
> new file mode 100644
> index 000000000..fc1e83d35
> --- /dev/null
> +++ b/mpn/mips64/r6/mul_1.asm
> @@ -0,0 +1,64 @@
> +dnl  MIPS64 mpn_mul_1 -- Multiply a limb vector with a single limb and store
> +dnl  the product in a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_mul_1)
> +
> +       move    $2,$0           C zero cy2
> +Loop:
> +       ld      $8,0($5)
> +       daddiu  $6,$6,-1        C decrement loop counter
> +
> +       dmulu   $3,$7,$8
> +
> +       daddu   $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       sd          $3,0($4)
> +
> +       dmuhu   $9,$7,$8
> +
> +       daddiu  $5,$5,8
> +       daddiu  $4,$4,8
> +
> +       bgtz    $6,Loop
> +       daddu   $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +EPILOGUE(mpn_mul_1)
> diff --git a/mpn/mips64/r6/sqr_diagonal.asm b/mpn/mips64/r6/sqr_diagonal.asm
> new file mode 100644
> index 000000000..66d4faf5d
> --- /dev/null
> +++ b/mpn/mips64/r6/sqr_diagonal.asm
> @@ -0,0 +1,59 @@
> +dnl  MIPS64 mpn_sqr_diagonal.
> +
> +dnl  Copyright 2001, 2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +
> +dnl  INPUT PARAMETERS
> +dnl  rp                $4
> +dnl  up                $5
> +dnl  n         $6
> +
> +include(`../config.m4')
> +
> +ASM_START()
> +PROLOGUE(mpn_sqr_diagonal)
> +
> +Loop:
> +       ld          $8,0($5)
> +       daddiu  $6,$6,-1
> +
> +       dmulu   $10,$8,$8
> +       dmuhu   $9,$8,$8
> +
> +       sd          $10,0($4)
> +       sd          $9,8($4)
> +
> +       daddiu  $5,$5,8
> +
> +       bgtz    $6,Loop
> +       daddiu  $4,$4,16
> +Lend:
> +       j       $31
> +       nop
> +EPILOGUE(mpn_sqr_diagonal)
> diff --git a/mpn/mips64/r6/submul_1.asm b/mpn/mips64/r6/submul_1.asm
> new file mode 100644
> index 000000000..6e8e6ed62
> --- /dev/null
> +++ b/mpn/mips64/r6/submul_1.asm
> @@ -0,0 +1,69 @@
> +dnl  MIPS64 mpn_submul_1 -- Multiply a limb vector with a single limb and
> +dnl  subtract the product from a second limb vector.
> +
> +dnl  Copyright 1992, 1994, 1995, 2000-2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C res_ptr      $4
> +C s1_ptr       $5
> +C size         $6
> +C s2_limb      $7
> +
> +ASM_START()
> +PROLOGUE(mpn_submul_1)
> +
> +        move   $2,$0           C zero cy2
> +Loop:
> +       ld      $8,0($5)
> +       ld          $10,0($4)
> +       daddiu  $6,$6,-1        C decrement loop counter
> +
> +       dmulu   $3,$7,$8
> +
> +       daddu   $3,$3,$2        C add old carry limb to low product limb
> +       sltu    $2,$3,$2        C carry from previous addition -> $2
> +       dsubu   $3,$10,$3
> +       sltu    $10,$10,$3
> +       daddu   $2,$2,$10
> +       sd          $3,0($4)
> +
> +       dmuhu   $9,$7,$8
> +
> +       daddiu  $5,$5,8
> +       daddiu  $4,$4,8
> +
> +       bgtz    $6,Loop
> +       daddu   $2,$9,$2        C add high product limb and carry from addition
> +Lend:
> +       j       $31
> +       nop
> +
> +EPILOGUE(mpn_submul_1)
> diff --git a/mpn/mips64/r6/umul.asm b/mpn/mips64/r6/umul.asm
> new file mode 100644
> index 000000000..22c8e8c5d
> --- /dev/null
> +++ b/mpn/mips64/r6/umul.asm
> @@ -0,0 +1,44 @@
> +dnl  MIPS64 umul_ppmm -- longlong.h support.
> +
> +dnl  Copyright 2002 Free Software Foundation, Inc.
> +
> +dnl  This file is part of the GNU MP Library.
> +dnl
> +dnl  The GNU MP Library is free software; you can redistribute it and/or modify
> +dnl  it under the terms of either:
> +dnl
> +dnl    * the GNU Lesser General Public License as published by the Free
> +dnl      Software Foundation; either version 3 of the License, or (at your
> +dnl      option) any later version.
> +dnl
> +dnl  or
> +dnl
> +dnl    * the GNU General Public License as published by the Free Software
> +dnl      Foundation; either version 2 of the License, or (at your option) any
> +dnl      later version.
> +dnl
> +dnl  or both in parallel, as here.
> +dnl
> +dnl  The GNU MP Library is distributed in the hope that it will be useful, but
> +dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> +dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> +dnl  for more details.
> +dnl
> +dnl  You should have received copies of the GNU General Public License and the
> +dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
> +dnl  see https://www.gnu.org/licenses/.
> +
> +include(`../config.m4')
> +
> +C INPUT PARAMETERS
> +C plp   $4
> +C u     $5
> +C v     $6
> +
> +ASM_START()
> +PROLOGUE(mpn_umul_ppmm)
> +       dmulu   $3,$5,$6
> +       dmuhu   $2,$5,$6
> +       j       $31
> +       sd      $3,0($4)
> +EPILOGUE(mpn_umul_ppmm)
> --
> 2.11.0
>


More information about the gmp-devel mailing list