Add Chromium-only Blender WebEngine parity work
This commit is contained in:
79
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/com.asm
vendored
Normal file
79
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/com.asm
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
dnl PowerPC 750 mpn_com -- mpn bitwise one's complement
|
||||
|
||||
dnl Copyright 2002, 2003 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 3.0
|
||||
C 75x (G3): 2.0
|
||||
C 7400,7410 (G4): 2.0
|
||||
C 744x,745x (G4+): 3.0
|
||||
|
||||
C void mpn_com (mp_ptr dst, mp_srcptr src, mp_size_t size);
|
||||
C
|
||||
C This loop form is necessary for the claimed speed.
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_com)
|
||||
|
||||
C r3 dst
|
||||
C r4 src
|
||||
C r5 size
|
||||
|
||||
mtctr r5 C size
|
||||
lwz r5, 0(r4) C src low limb
|
||||
|
||||
sub r4, r4, r3 C src-dst
|
||||
subi r3, r3, 4 C dst-4
|
||||
|
||||
addi r4, r4, 8 C src-dst+8
|
||||
bdz L(one)
|
||||
|
||||
L(top):
|
||||
C r3 &dst[i-1]
|
||||
C r4 src-dst
|
||||
C r5 src[i]
|
||||
C r6 scratch
|
||||
|
||||
not r6, r5 C ~src[i]
|
||||
lwzx r5, r4,r3 C src[i+1]
|
||||
|
||||
stwu r6, 4(r3) C dst[i]
|
||||
bdnz L(top)
|
||||
|
||||
L(one):
|
||||
not r6, r5
|
||||
|
||||
stw r6, 4(r3) C dst[size-1]
|
||||
blr
|
||||
|
||||
EPILOGUE()
|
||||
192
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/gmp-mparam.h
vendored
Normal file
192
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,192 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 2002, 2004, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
|
||||
/* This file is used for 75x (G3) and for 7400/7410 (G4), both which have
|
||||
much slow multiply instructions. */
|
||||
|
||||
/* 450 MHz PPC 7400 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_NORM_THRESHOLD 3
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 11
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 7
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 11
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 18
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 38
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 10
|
||||
#define MUL_TOOM33_THRESHOLD 38
|
||||
#define MUL_TOOM44_THRESHOLD 99
|
||||
#define MUL_TOOM6H_THRESHOLD 141
|
||||
#define MUL_TOOM8H_THRESHOLD 212
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 69
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 65
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 66
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 4
|
||||
#define SQR_TOOM2_THRESHOLD 18
|
||||
#define SQR_TOOM3_THRESHOLD 57
|
||||
#define SQR_TOOM4_THRESHOLD 142
|
||||
#define SQR_TOOM6_THRESHOLD 173
|
||||
#define SQR_TOOM8_THRESHOLD 309
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 9
|
||||
#define SQRMOD_BNM1_THRESHOLD 11
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 220, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \
|
||||
{ 8, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \
|
||||
{ 13, 7}, { 7, 6}, { 17, 7}, { 9, 6}, \
|
||||
{ 19, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \
|
||||
{ 7, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \
|
||||
{ 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \
|
||||
{ 39, 8}, { 23, 9}, { 15, 8}, { 39, 9}, \
|
||||
{ 23, 8}, { 47,10}, { 15, 9}, { 31, 8}, \
|
||||
{ 67, 9}, { 55,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 7}, { 255, 9}, { 71, 8}, { 143, 7}, \
|
||||
{ 287, 9}, { 79,10}, { 47, 9}, { 95,11}, \
|
||||
{ 31,10}, { 63, 9}, { 127, 8}, { 255, 9}, \
|
||||
{ 143, 8}, { 287,10}, { 79, 9}, { 159, 8}, \
|
||||
{ 319, 9}, { 175, 8}, { 351, 7}, { 703,10}, \
|
||||
{ 95, 9}, { 191, 8}, { 383, 9}, { 207,10}, \
|
||||
{ 111,11}, { 63,10}, { 127, 9}, { 255,10}, \
|
||||
{ 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \
|
||||
{ 319,10}, { 175, 9}, { 351, 8}, { 703,11}, \
|
||||
{ 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \
|
||||
{ 415, 8}, { 831,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543,10}, \
|
||||
{ 287, 9}, { 575,11}, { 159,10}, { 351, 9}, \
|
||||
{ 703, 8}, { 1407,11}, { 191,10}, { 415, 9}, \
|
||||
{ 831,11}, { 223,10}, { 447, 9}, { 895,12}, \
|
||||
{ 127,11}, { 255,10}, { 543,11}, { 287,10}, \
|
||||
{ 575,11}, { 351,10}, { 703, 9}, { 1407,12}, \
|
||||
{ 191,11}, { 415,10}, { 831,11}, { 447,10}, \
|
||||
{ 895,13}, { 127,12}, { 255,11}, { 543,10}, \
|
||||
{ 1087,11}, { 575,12}, { 319,11}, { 703,10}, \
|
||||
{ 1407,12}, { 383,11}, { 831,12}, { 447,11}, \
|
||||
{ 895,10}, { 1791,11}, { 959,13}, { 255,12}, \
|
||||
{ 511,11}, { 1087,12}, { 575,11}, { 1215,12}, \
|
||||
{ 703,11}, { 1407,13}, { 383,12}, { 895,11}, \
|
||||
{ 1791,12}, { 959,14}, { 255,13}, { 511,12}, \
|
||||
{ 1215,13}, { 639,12}, { 1407,13}, { 895,12}, \
|
||||
{ 1919,14}, { 511,13}, { 1023,12}, { 2047,13}, \
|
||||
{ 1151,12}, { 2303,13}, { 1407,14}, { 767,13}, \
|
||||
{ 1919,10}, { 15359,12}, { 4096,13}, { 8192,14}, \
|
||||
{ 16384,15}, { 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 154
|
||||
#define MUL_FFT_THRESHOLD 2688
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 184 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 184, 5}, { 6, 4}, { 13, 5}, { 13, 6}, \
|
||||
{ 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \
|
||||
{ 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \
|
||||
{ 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \
|
||||
{ 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \
|
||||
{ 31, 8}, { 19, 7}, { 39, 8}, { 27, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \
|
||||
{ 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 7}, { 255, 9}, { 71, 8}, { 143, 7}, \
|
||||
{ 287, 9}, { 79, 8}, { 159,10}, { 47, 9}, \
|
||||
{ 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \
|
||||
{ 255, 9}, { 143, 8}, { 287, 7}, { 575,10}, \
|
||||
{ 79, 9}, { 159, 8}, { 319, 9}, { 175, 8}, \
|
||||
{ 351,10}, { 95, 9}, { 191, 8}, { 383, 9}, \
|
||||
{ 207,10}, { 111,11}, { 63,10}, { 127, 9}, \
|
||||
{ 255,10}, { 143, 9}, { 287, 8}, { 575,10}, \
|
||||
{ 159, 9}, { 319,10}, { 175, 9}, { 351,11}, \
|
||||
{ 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \
|
||||
{ 415, 8}, { 831,10}, { 223,12}, { 63,11}, \
|
||||
{ 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \
|
||||
{ 575,11}, { 159,10}, { 351, 9}, { 703,11}, \
|
||||
{ 191,10}, { 415, 9}, { 831,11}, { 223,10}, \
|
||||
{ 447, 9}, { 895,12}, { 127,11}, { 255,10}, \
|
||||
{ 511,11}, { 287,10}, { 575,11}, { 319,10}, \
|
||||
{ 639,11}, { 351,10}, { 703, 9}, { 1407,12}, \
|
||||
{ 191,11}, { 383,10}, { 767,11}, { 415,10}, \
|
||||
{ 831,11}, { 447,10}, { 895,13}, { 127,12}, \
|
||||
{ 255,11}, { 511,10}, { 1023,11}, { 575,12}, \
|
||||
{ 319,11}, { 703,10}, { 1407,12}, { 383,11}, \
|
||||
{ 831,12}, { 447,11}, { 895,10}, { 1791,11}, \
|
||||
{ 959,13}, { 255,12}, { 511,11}, { 1023,12}, \
|
||||
{ 575,11}, { 1215,12}, { 703,11}, { 1407,13}, \
|
||||
{ 383,12}, { 895,11}, { 1791,12}, { 959,14}, \
|
||||
{ 255,13}, { 511,12}, { 1215,13}, { 639,12}, \
|
||||
{ 1471,13}, { 767,12}, { 1535,13}, { 895,12}, \
|
||||
{ 1919,14}, { 511,13}, { 1151,12}, { 2431,13}, \
|
||||
{ 1407,14}, { 767,13}, { 1919,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 152
|
||||
#define SQR_FFT_THRESHOLD 1728
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 0 /* always */
|
||||
#define MULLO_DC_THRESHOLD 33
|
||||
#define MULLO_MUL_N_THRESHOLD 5240
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 31
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 108
|
||||
#define DC_BDIV_QR_THRESHOLD 35
|
||||
#define DC_BDIV_Q_THRESHOLD 88
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 42
|
||||
#define INV_NEWTON_THRESHOLD 149
|
||||
#define INV_APPR_THRESHOLD 125
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 156
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 39
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 807
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 807
|
||||
#define MUPI_DIV_QR_THRESHOLD 66
|
||||
#define MU_BDIV_QR_THRESHOLD 667
|
||||
#define MU_BDIV_Q_THRESHOLD 807
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 11
|
||||
#define HGCD_THRESHOLD 87
|
||||
#define GCD_DC_THRESHOLD 233
|
||||
#define GCDEXT_DC_THRESHOLD 198
|
||||
#define JACOBI_BASE_METHOD 1
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 12
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 28
|
||||
#define SET_STR_DC_THRESHOLD 390
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 814
|
||||
155
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/lshift.asm
vendored
Normal file
155
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/lshift.asm
vendored
Normal file
@@ -0,0 +1,155 @@
|
||||
dnl PowerPC 750 mpn_lshift -- mpn left shift.
|
||||
|
||||
dnl Copyright 2002, 2003 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 cycles/limb
|
||||
C 750: 3.0
|
||||
C 7400: 3.0
|
||||
|
||||
|
||||
C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size,
|
||||
C unsigned shift);
|
||||
C
|
||||
C This code is the same per-limb speed as mpn/powerpc32/lshift.asm, but
|
||||
C smaller and saving about 30 or so cycles of overhead.
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_lshift)
|
||||
|
||||
C r3 dst
|
||||
C r4 src
|
||||
C r5 size
|
||||
C r6 shift
|
||||
|
||||
mtctr r5 C size
|
||||
slwi r5, r5, 2 C 4*size
|
||||
|
||||
subfic r7, r6, 32 C 32-shift
|
||||
add r4, r4, r5 C &src[size]
|
||||
|
||||
add r5, r3, r5 C &dst[size]
|
||||
lwz r8, -4(r4) C src[size-1]
|
||||
bdz L(one)
|
||||
|
||||
lwzu r9, -8(r4) C src[size-2]
|
||||
|
||||
srw r3, r8, r7 C return value
|
||||
slw r8, r8, r6 C src[size-1] << shift
|
||||
bdz L(two)
|
||||
|
||||
|
||||
L(top):
|
||||
C r3 return value
|
||||
C r4 src, incrementing
|
||||
C r5 dst, incrementing
|
||||
C r6 lshift
|
||||
C r7 32-shift
|
||||
C r8 src[i+1] << shift
|
||||
C r9 src[i]
|
||||
C r10
|
||||
|
||||
lwzu r10, -4(r4)
|
||||
srw r11, r9, r7
|
||||
|
||||
or r8, r8, r11
|
||||
stwu r8, -4(r5)
|
||||
|
||||
slw r8, r9, r6
|
||||
bdz L(odd)
|
||||
|
||||
C r8 src[i+1] << shift
|
||||
C r9
|
||||
C r10 src[i]
|
||||
|
||||
lwzu r9, -4(r4)
|
||||
srw r11, r10, r7
|
||||
|
||||
or r8, r8, r11
|
||||
stwu r8, -4(r5)
|
||||
|
||||
slw r8, r10, r6
|
||||
bdnz L(top)
|
||||
|
||||
|
||||
L(two):
|
||||
C r3 return value
|
||||
C r4
|
||||
C r5 &dst[2]
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[1] << shift
|
||||
C r9 src[0]
|
||||
C r10
|
||||
|
||||
srw r11, r9, r7
|
||||
slw r12, r9, r6 C src[0] << shift
|
||||
|
||||
or r8, r8, r11
|
||||
stw r12, -8(r5) C dst[0]
|
||||
|
||||
stw r8, -4(r5) C dst[1]
|
||||
blr
|
||||
|
||||
|
||||
L(odd):
|
||||
C r3 return value
|
||||
C r4
|
||||
C r5 &dst[2]
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[1] << shift
|
||||
C r9
|
||||
C r10 src[0]
|
||||
|
||||
srw r11, r10, r7
|
||||
slw r12, r10, r6
|
||||
|
||||
or r8, r8, r11
|
||||
stw r12, -8(r5) C dst[0]
|
||||
|
||||
stw r8, -4(r5) C dst[1]
|
||||
blr
|
||||
|
||||
|
||||
L(one):
|
||||
C r5 &dst[1]
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[0]
|
||||
|
||||
srw r3, r8, r7 C return value
|
||||
slw r8, r8, r6 C src[size-1] << shift
|
||||
|
||||
stw r8, -4(r5) C dst[0]
|
||||
blr
|
||||
|
||||
EPILOGUE(mpn_lshift)
|
||||
153
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/rshift.asm
vendored
Normal file
153
blender-5.2.0/extern/gmp-source/mpn/powerpc32/750/rshift.asm
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
dnl PowerPC 750 mpn_rshift -- mpn right shift.
|
||||
|
||||
dnl Copyright 2002, 2003 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 cycles/limb
|
||||
C 750: 3.0
|
||||
C 7400: 3.0
|
||||
|
||||
|
||||
C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size,
|
||||
C unsigned shift);
|
||||
C
|
||||
C This code is the same per-limb speed as mpn/powerpc32/rshift.asm, but
|
||||
C smaller and saving about 30 or so cycles of overhead.
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_rshift)
|
||||
|
||||
C r3 dst
|
||||
C r4 src
|
||||
C r5 size
|
||||
C r6 shift
|
||||
|
||||
mtctr r5 C size
|
||||
lwz r8, 0(r4) C src[0]
|
||||
|
||||
subfic r7, r6, 32 C 32-shift
|
||||
addi r5, r3, -4 C dst-4
|
||||
|
||||
slw r3, r8, r7 C return value
|
||||
bdz L(one)
|
||||
|
||||
lwzu r9, 4(r4) C src[1]
|
||||
srw r8, r8, r6 C src[0] >> shift
|
||||
bdz L(two)
|
||||
|
||||
|
||||
L(top):
|
||||
C r3 return value
|
||||
C r4 src, incrementing
|
||||
C r5 dst, incrementing
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[i-1] >> shift
|
||||
C r9 src[i]
|
||||
C r10
|
||||
|
||||
lwzu r10, 4(r4)
|
||||
slw r11, r9, r7
|
||||
|
||||
or r8, r8, r11
|
||||
stwu r8, 4(r5)
|
||||
|
||||
srw r8, r9, r6
|
||||
bdz L(odd)
|
||||
|
||||
C r8 src[i-1] >> shift
|
||||
C r9
|
||||
C r10 src[i]
|
||||
|
||||
lwzu r9, 4(r4)
|
||||
slw r11, r10, r7
|
||||
|
||||
or r8, r8, r11
|
||||
stwu r8, 4(r5)
|
||||
|
||||
srw r8, r10, r6
|
||||
bdnz L(top)
|
||||
|
||||
|
||||
L(two):
|
||||
C r3 return value
|
||||
C r4
|
||||
C r5 &dst[size-2]
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[size-2] >> shift
|
||||
C r9 src[size-1]
|
||||
C r10
|
||||
|
||||
slw r11, r9, r7
|
||||
srw r12, r9, r6 C src[size-1] >> shift
|
||||
|
||||
or r8, r8, r11
|
||||
stw r12, 8(r5) C dst[size-1]
|
||||
|
||||
stw r8, 4(r5) C dst[size-2]
|
||||
blr
|
||||
|
||||
|
||||
L(odd):
|
||||
C r3 return value
|
||||
C r4
|
||||
C r5 &dst[size-2]
|
||||
C r6 shift
|
||||
C r7 32-shift
|
||||
C r8 src[size-2] >> shift
|
||||
C r9
|
||||
C r10 src[size-1]
|
||||
|
||||
slw r11, r10, r7
|
||||
srw r12, r10, r6
|
||||
|
||||
or r8, r8, r11
|
||||
stw r12, 8(r5) C dst[size-1]
|
||||
|
||||
stw r8, 4(r5) C dst[size-2]
|
||||
blr
|
||||
|
||||
|
||||
L(one):
|
||||
C r3 return value
|
||||
C r4
|
||||
C r5 dst-4
|
||||
C r6 shift
|
||||
C r7
|
||||
C r8 src[0]
|
||||
|
||||
srw r8, r8, r6
|
||||
|
||||
stw r8, 4(r5) C dst[0]
|
||||
blr
|
||||
|
||||
EPILOGUE(mpn_rshift)
|
||||
180
blender-5.2.0/extern/gmp-source/mpn/powerpc32/README
vendored
Normal file
180
blender-5.2.0/extern/gmp-source/mpn/powerpc32/README
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
Copyright 2002, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
POWERPC 32-BIT MPN SUBROUTINES
|
||||
|
||||
|
||||
This directory contains mpn functions for various 32-bit PowerPC chips.
|
||||
|
||||
|
||||
CODE ORGANIZATION
|
||||
|
||||
directory used for
|
||||
================================================
|
||||
powerpc generic, 604, 604e, 744x, 745x
|
||||
powerpc/750 740, 750, 7400, 7410
|
||||
|
||||
|
||||
The top-level powerpc directory is currently mostly aimed at 604/604e but
|
||||
should be reasonable on all powerpcs.
|
||||
|
||||
|
||||
|
||||
STATUS
|
||||
|
||||
The code is quite well optimized for the 604e, other chips have had less
|
||||
attention.
|
||||
|
||||
Altivec SIMD available in 74xx might hold some promise, but unfortunately
|
||||
GMP only guarantees 32-bit data alignment, so there's lots of fiddling
|
||||
around with partial operations at the start and end of limb vectors. A
|
||||
128-bit limb would be a novel idea, but is unlikely to be practical, since
|
||||
it would have to work with ordinary +, -, * etc in the C code.
|
||||
|
||||
Also, Altivec isn't very well suited for the GMP multiplication needs.
|
||||
Using floating-point based multiplication has much better better performance
|
||||
potential for all current powerpcs, both the ones with slow integer multiply
|
||||
units (603, 740, 750, 7400, 7410) and those with fast (604, 604e, 744x,
|
||||
745x). This is because all powerpcs do some level of pipelining in the FPU:
|
||||
|
||||
603 and 750 can sustain one fmadd every 2nd cycle.
|
||||
604 and 604e can sustain one fmadd per cycle.
|
||||
7400 and 7410 can sustain 3 fmadd in 4 cycles.
|
||||
744x and 745x can sustain 4 fmadd in 5 cycles.
|
||||
|
||||
|
||||
|
||||
REGISTER NAMES
|
||||
|
||||
The normal powerpc convention is to give registers as plain numbers, like
|
||||
"mtctr 6", but on Apple MacOS X (powerpc*-*-rhapsody* and
|
||||
powerpc*-*-darwin*) the assembler demands an "r" like "mtctr r6". Note
|
||||
however when register 0 in an instruction means a literal zero the "r" is
|
||||
omitted, for instance "lwzx r6,0,r7".
|
||||
|
||||
The GMP code uses the "r" forms, powerpc-defs.m4 transforms them to plain
|
||||
numbers according to what GMP_ASM_POWERPC_R_REGISTERS finds is needed.
|
||||
(Note that this style isn't fully general, as the identifier r4 and the
|
||||
register r4 will not be distinguishable on some systems. However, this is
|
||||
not a problem for the limited GMP assembly usage.)
|
||||
|
||||
|
||||
|
||||
GLOBAL REFERENCES
|
||||
|
||||
Linux non-PIC
|
||||
lis 9, __gmp_binvert_limb_table@ha
|
||||
rlwinm 11, 5, 31, 25, 31
|
||||
la 9, __gmp_binvert_limb_table@l(9)
|
||||
lbzx 11, 9, 11
|
||||
|
||||
Linux PIC (FIXME)
|
||||
.LCL0:
|
||||
.long .LCTOC1-.LCF0
|
||||
bcl 20, 31, .LCF0
|
||||
.LCF0:
|
||||
mflr 30
|
||||
lwz 7, .LCL0-.LCF0(30)
|
||||
add 30, 7, 30
|
||||
lwz 11, .LC0-.LCTOC1(30)
|
||||
rlwinm 3, 5, 31, 25, 31
|
||||
lbzx 7, 11, 3
|
||||
|
||||
AIX (always PIC)
|
||||
LC..0:
|
||||
.tc __gmp_binvert_limb_table[TC],__gmp_binvert_limb_table[RW]
|
||||
lwz 9, LC..0(2)
|
||||
rlwinm 0, 5, 31, 25, 31
|
||||
lbzx 0, 9, 0
|
||||
|
||||
Darwin (non-PIC)
|
||||
lis r2, ha16(___gmp_binvert_limb_table)
|
||||
rlwinm r9, r5, 31, 25, 31
|
||||
la r2, lo16(___gmp_binvert_limb_table)(r2)
|
||||
lbzx r0, r2, r9
|
||||
Darwin (PIC)
|
||||
mflr r0
|
||||
bcl 20, 31, L0001$pb
|
||||
L0001$pb:
|
||||
mflr r7
|
||||
mtlr r0
|
||||
addis r2, r7, ha16(L___gmp_binvert_limb_table$non_lazy_ptr-L0001$pb)
|
||||
rlwinm r9, r5, 31, 25, 31
|
||||
lwz r2, lo16(L___gmp_binvert_limb_table$non_lazy_ptr-L0001$pb)(r2)
|
||||
lbzx r0, r2, r9
|
||||
------
|
||||
.non_lazy_symbol_pointer
|
||||
L___gmp_binvert_limb_table$non_lazy_ptr:
|
||||
.indirect_symbol ___gmp_binvert_limb_table
|
||||
.long 0
|
||||
.subsections_via_symbols
|
||||
|
||||
|
||||
For GNU/Linux and Darwin, we might want to duplicate __gmp_binvert_limb_table
|
||||
into the text section in this file. We should thus be able to reach it like
|
||||
this:
|
||||
|
||||
blr L0
|
||||
L0: mflr r2
|
||||
rlwinm r9, r5, 31, 25, 31
|
||||
addi r9, r9, lo16(local_binvert_table-L0)
|
||||
lbzx r0, r2, r9
|
||||
|
||||
|
||||
|
||||
REFERENCES
|
||||
|
||||
PowerPC Microprocessor Family: The Programming Environments for 32-bit
|
||||
Microprocessors, IBM document G522-0290-01, 2000.
|
||||
|
||||
PowerPC 604e RISC Microprocessor User's Manual with Supplement for PowerPC
|
||||
604 Microprocessor, IBM document G552-0330-00, Freescale document
|
||||
MPC604EUM/AD, 3/1998.
|
||||
|
||||
MPC7410/MPC7400 RISC Microprocessor User's Manual, Freescale document
|
||||
MPC7400UM/D, rev 1, 11/2002.
|
||||
|
||||
MPC7450 RISC Microprocessor Family Reference Manual, Freescale document
|
||||
MPC7450UM, rev 5, 1/2005.
|
||||
|
||||
The above are available online from
|
||||
|
||||
http://www.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC
|
||||
http://www.freescale.com/PowerPC
|
||||
|
||||
|
||||
|
||||
----------------
|
||||
Local variables:
|
||||
mode: text
|
||||
fill-column: 76
|
||||
End:
|
||||
100
blender-5.2.0/extern/gmp-source/mpn/powerpc32/addlsh1_n.asm
vendored
Normal file
100
blender-5.2.0/extern/gmp-source/mpn/powerpc32/addlsh1_n.asm
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
dnl PowerPC-32 mpn_addlsh1_n -- rp[] = up[] + (vp[] << 1)
|
||||
|
||||
dnl Copyright 2003, 2005, 2007 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 4.0
|
||||
C 75x (G3): 5.0
|
||||
C 7400,7410 (G4): 5.0
|
||||
C 744x,745x (G4+): 5.0
|
||||
C power4/ppc970: 4.25
|
||||
C power5: 5.0
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C vp r5
|
||||
C n r6
|
||||
|
||||
define(`rp',`r3')
|
||||
define(`up',`r4')
|
||||
define(`vp',`r5')
|
||||
|
||||
define(`s0',`r6')
|
||||
define(`s1',`r7')
|
||||
define(`u0',`r8')
|
||||
define(`v0',`r10')
|
||||
define(`v1',`r11')
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_addlsh1_n)
|
||||
mtctr r6 C copy n in ctr
|
||||
addic r31, r31, 0 C clear cy
|
||||
|
||||
lwz v0, 0(vp) C load v limb
|
||||
lwz u0, 0(up) C load u limb
|
||||
addi up, up, -4 C update up
|
||||
addi rp, rp, -4 C update rp
|
||||
slwi s1, v0, 1
|
||||
bdz L(end) C If done, skip loop
|
||||
|
||||
L(loop):
|
||||
lwz v1, 4(vp) C load v limb
|
||||
adde s1, s1, u0 C add limbs with cy, set cy
|
||||
srwi s0, v0, 31 C shift down previous v limb
|
||||
stw s1, 4(rp) C store result limb
|
||||
lwzu u0, 8(up) C load u limb and update up
|
||||
rlwimi s0, v1, 1, 0,30 C left shift v limb and merge with prev v limb
|
||||
|
||||
bdz L(exit) C decrement ctr and exit if done
|
||||
|
||||
lwzu v0, 8(vp) C load v limb and update vp
|
||||
adde s0, s0, u0 C add limbs with cy, set cy
|
||||
srwi s1, v1, 31 C shift down previous v limb
|
||||
stwu s0, 8(rp) C store result limb and update rp
|
||||
lwz u0, 4(up) C load u limb
|
||||
rlwimi s1, v0, 1, 0,30 C left shift v limb and merge with prev v limb
|
||||
|
||||
bdnz L(loop) C decrement ctr and loop back
|
||||
|
||||
L(end): adde r7, s1, u0
|
||||
srwi r4, v0, 31
|
||||
stw r7, 4(rp) C store last result limb
|
||||
addze r3, r4
|
||||
blr
|
||||
L(exit):
|
||||
adde r7, s0, u0
|
||||
srwi r4, v1, 31
|
||||
stw r7, 8(rp) C store last result limb
|
||||
addze r3, r4
|
||||
blr
|
||||
EPILOGUE()
|
||||
159
blender-5.2.0/extern/gmp-source/mpn/powerpc32/addmul_1.asm
vendored
Normal file
159
blender-5.2.0/extern/gmp-source/mpn/powerpc32/addmul_1.asm
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
dnl PowerPC-32 mpn_addmul_1 -- Multiply a limb vector with a limb and add the
|
||||
dnl result to a second limb vector.
|
||||
|
||||
dnl Copyright 1995, 1997, 1998, 2000-2003, 2005 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 6.75
|
||||
C 75x (G3): 8.7-14.3
|
||||
C 7400,7410 (G4): 8.7-14.3
|
||||
C 744x,745x (G4+): 9.5
|
||||
C power4/ppc970: 6.25
|
||||
C power5: 6.25
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C vl r6
|
||||
|
||||
C This is optimized for the PPC604. It has not been tuned for other
|
||||
C PowerPC processors.
|
||||
C
|
||||
C Loop Analysis for the 604:
|
||||
C 12 mem insn
|
||||
C 8 serializing insn
|
||||
C 8 int multiply
|
||||
C 25 int reg write
|
||||
C 9 int ops (8 of which serialize)
|
||||
C
|
||||
C The multiply insns need 16 cycles/4limb.
|
||||
C The integer register writes will need 13 cycles/4limb.
|
||||
C All-in-all, it should be possible to get to 4 or 5 cycles/limb on PPC604,
|
||||
C but that will require some clever FPNOPS and BNOPS for exact
|
||||
C issue control.
|
||||
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_addmul_1)
|
||||
cmpwi cr0,r5,9 C more than 9 limbs?
|
||||
bgt cr0,L(big) C branch if more than 9 limbs
|
||||
|
||||
mtctr r5
|
||||
lwz r0,0(r4)
|
||||
mullw r7,r0,r6
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,0(r3)
|
||||
addc r8,r7,r9
|
||||
addi r3,r3,-4
|
||||
bdz L(end)
|
||||
L(loop):
|
||||
lwzu r0,4(r4)
|
||||
stwu r8,4(r3)
|
||||
mullw r8,r0,r6
|
||||
adde r7,r8,r10
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,4(r3)
|
||||
addze r10,r10
|
||||
addc r8,r7,r9
|
||||
bdnz L(loop)
|
||||
L(end): stw r8,4(r3)
|
||||
addze r3,r10
|
||||
blr
|
||||
|
||||
L(big): stwu r1,-16(r1)
|
||||
addi r5,r5,-1
|
||||
stw r30,8(r1)
|
||||
srwi r0,r5,2
|
||||
stw r31,12(r1)
|
||||
mtctr r0
|
||||
|
||||
lwz r7,0(r4)
|
||||
mullw r8,r7,r6
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,0(r3)
|
||||
addc r8,r8,r7
|
||||
stw r8,0(r3)
|
||||
|
||||
L(loopU):
|
||||
lwz r7,4(r4)
|
||||
lwz r12,8(r4)
|
||||
lwz r30,12(r4)
|
||||
lwzu r31,16(r4)
|
||||
mullw r8,r7,r6
|
||||
mullw r9,r12,r6
|
||||
mullw r10,r30,r6
|
||||
mullw r11,r31,r6
|
||||
adde r8,r8,r0 C add cy_limb
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,4(r3)
|
||||
adde r9,r9,r0
|
||||
mulhwu r0,r12,r6
|
||||
lwz r12,8(r3)
|
||||
adde r10,r10,r0
|
||||
mulhwu r0,r30,r6
|
||||
lwz r30,12(r3)
|
||||
adde r11,r11,r0
|
||||
mulhwu r0,r31,r6
|
||||
lwz r31,16(r3)
|
||||
addze r0,r0 C new cy_limb
|
||||
addc r8,r8,r7
|
||||
stw r8,4(r3)
|
||||
adde r9,r9,r12
|
||||
stw r9,8(r3)
|
||||
adde r10,r10,r30
|
||||
stw r10,12(r3)
|
||||
adde r11,r11,r31
|
||||
stwu r11,16(r3)
|
||||
bdnz L(loopU)
|
||||
|
||||
andi. r31,r5,3
|
||||
mtctr r31
|
||||
beq cr0,L(endx)
|
||||
|
||||
L(loopE):
|
||||
lwzu r7,4(r4)
|
||||
mullw r8,r7,r6
|
||||
adde r8,r8,r0 C add cy_limb
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,4(r3)
|
||||
addze r0,r0 C new cy_limb
|
||||
addc r8,r8,r7
|
||||
stwu r8,4(r3)
|
||||
bdnz L(loopE)
|
||||
L(endx):
|
||||
addze r3,r0
|
||||
lwz r30,8(r1)
|
||||
lwz r31,12(r1)
|
||||
addi r1,r1,16
|
||||
blr
|
||||
EPILOGUE(mpn_addmul_1)
|
||||
82
blender-5.2.0/extern/gmp-source/mpn/powerpc32/aix.m4
vendored
Normal file
82
blender-5.2.0/extern/gmp-source/mpn/powerpc32/aix.m4
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
divert(-1)
|
||||
dnl m4 macros for AIX 32-bit assembly.
|
||||
|
||||
dnl Copyright 2000-2002, 2005, 2006 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/.
|
||||
|
||||
define(`ASM_START',
|
||||
` .toc')
|
||||
|
||||
dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl EPILOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
dnl Don't want ELF style .size in the epilogue.
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
`
|
||||
.globl $1
|
||||
.globl .$1
|
||||
.csect [DS], 2
|
||||
$1:
|
||||
.long .$1, TOC[tc0], 0
|
||||
.csect [PR]
|
||||
.align 2
|
||||
.$1:')
|
||||
|
||||
define(`EPILOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
`')
|
||||
|
||||
define(`TOC_ENTRY', `')
|
||||
|
||||
define(`LEA',
|
||||
m4_assert_numargs(2)
|
||||
`define(`TOC_ENTRY',
|
||||
` .toc
|
||||
tc$2:
|
||||
.tc $2[TC], $2')'
|
||||
` lwz $1, tc$2(2)')
|
||||
|
||||
define(`EXTERN',
|
||||
m4_assert_numargs(1)
|
||||
` .globl $1')
|
||||
|
||||
define(`DEF_OBJECT',
|
||||
m4_assert_numargs_range(1,2)
|
||||
` .csect [RO], 3
|
||||
ALIGN(ifelse($#,1,2,$2))
|
||||
$1:
|
||||
')
|
||||
|
||||
define(`END_OBJECT',
|
||||
m4_assert_numargs(1))
|
||||
|
||||
define(`ASM_END', `TOC_ENTRY')
|
||||
|
||||
divert
|
||||
157
blender-5.2.0/extern/gmp-source/mpn/powerpc32/aors_n.asm
vendored
Normal file
157
blender-5.2.0/extern/gmp-source/mpn/powerpc32/aors_n.asm
vendored
Normal file
@@ -0,0 +1,157 @@
|
||||
dnl PowerPC-32 mpn_add_n and mpn_sub_n.
|
||||
|
||||
dnl Copyright 2002, 2005, 2007 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: ? old: 3.25
|
||||
C 75x (G3): ? old: 3.5
|
||||
C 7400,7410 (G4): 3.25
|
||||
C 744x,745x (G4+): 4
|
||||
C POWER3/PPC630 2
|
||||
C POWER4/PPC970 2.4
|
||||
C POWER5 2.75
|
||||
C POWER6 40-140
|
||||
C POWER7 3
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`vp', `r5')
|
||||
define(`n', `r6')
|
||||
define(`cy', `r7')
|
||||
|
||||
ifdef(`OPERATION_add_n', `
|
||||
define(ADCSBC, adde)
|
||||
define(func, mpn_add_n)
|
||||
define(func_nc, mpn_add_nc)
|
||||
define(IFADD, `$1')
|
||||
define(IFSUB, `')')
|
||||
ifdef(`OPERATION_sub_n', `
|
||||
define(ADCSBC, subfe)
|
||||
define(func, mpn_sub_n)
|
||||
define(func_nc, mpn_sub_nc)
|
||||
define(IFADD, `')
|
||||
define(IFSUB, `$1')')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc)
|
||||
|
||||
ASM_START()
|
||||
|
||||
PROLOGUE(func_nc)
|
||||
IFADD(` addic r0, cy, -1') C set carry from argument
|
||||
IFSUB(` subfic r0, cy, 0') C set carry from argument
|
||||
b L(ent)
|
||||
EPILOGUE()
|
||||
|
||||
PROLOGUE(func)
|
||||
IFADD(` addic r0, n, 0') C clear carry
|
||||
IFSUB(` addic r0, n, -1') C set carry
|
||||
L(ent): andi. r0, n, 3
|
||||
addi r3, r3, -12
|
||||
addi n, n, 1
|
||||
cmpwi cr7, r0, 2
|
||||
srwi r0, n, 2
|
||||
sub r4, r4, r3
|
||||
sub r5, r5, r3
|
||||
mtctr r0
|
||||
bne cr0, L(n00)
|
||||
|
||||
lwzx r7, r4, r3 C n = 4, 8, 12, ...
|
||||
lwzx r8, r5, r3
|
||||
addi r3, r3, 4
|
||||
lwzx r9, r4, r3
|
||||
ADCSBC r7, r8, r7
|
||||
lwzx r10, r5, r3
|
||||
addi r3, r3, 4
|
||||
b L(00)
|
||||
|
||||
L(n00): bge cr7, L(n01)
|
||||
cmpwi cr0, r0, 0 C n = 1, 5, 9, 13, ...
|
||||
lwzx r0, r4, r3
|
||||
lwzx r6, r5, r3
|
||||
addi r3, r3, 4
|
||||
ADCSBC r0, r6, r0
|
||||
ble L(ret)
|
||||
L(gt1): lwzx r7, r4, r3
|
||||
lwzx r8, r5, r3
|
||||
addi r3, r3, 4
|
||||
b L(01)
|
||||
|
||||
L(n10):
|
||||
lwzx r9, r4, r3 C n = 3, 7, 11, 15, ...
|
||||
lwzx r10, r5, r3
|
||||
addi r3, r3, 4
|
||||
lwzx r11, r4, r3
|
||||
ADCSBC r9, r10, r9
|
||||
lwzx r12, r5, r3
|
||||
addi r3, r3, 4
|
||||
b L(11)
|
||||
|
||||
L(n01): bne cr7, L(n10)
|
||||
cmpwi cr0, r0, 0 C n = 2, 6, 10, 14, ...
|
||||
lwzx r11, r4, r3
|
||||
lwzx r12, r5, r3
|
||||
addi r3, r3, 4
|
||||
lwzx r0, r4, r3
|
||||
ADCSBC r11, r12, r11
|
||||
lwzx r6, r5, r3
|
||||
addi r3, r3, 4
|
||||
ble cr0, L(end)
|
||||
|
||||
|
||||
L(lp): lwzx r7, r4, r3
|
||||
ADCSBC r0, r6, r0
|
||||
lwzx r8, r5, r3
|
||||
stwu r11, 4(r3)
|
||||
L(01): lwzx r9, r4, r3
|
||||
ADCSBC r7, r8, r7
|
||||
lwzx r10, r5, r3
|
||||
stwu r0, 4(r3)
|
||||
L(00): lwzx r11, r4, r3
|
||||
ADCSBC r9, r10, r9
|
||||
lwzx r12, r5, r3
|
||||
stwu r7, 4(r3)
|
||||
L(11): lwzx r0, r4, r3
|
||||
ADCSBC r11, r12, r11
|
||||
lwzx r6, r5, r3
|
||||
stwu r9, 4(r3)
|
||||
bdnz L(lp)
|
||||
|
||||
L(end): ADCSBC r0, r6, r0
|
||||
stw r11, 4(r3)
|
||||
L(ret): stw r0, 8(r3)
|
||||
IFADD(` li r3, 0 ')
|
||||
IFADD(` addze r3, r3 ')
|
||||
IFSUB(` subfe r3, r0, r0')
|
||||
IFSUB(` neg r3, r3')
|
||||
blr
|
||||
EPILOGUE()
|
||||
131
blender-5.2.0/extern/gmp-source/mpn/powerpc32/bdiv_dbm1c.asm
vendored
Normal file
131
blender-5.2.0/extern/gmp-source/mpn/powerpc32/bdiv_dbm1c.asm
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
dnl PPC32 mpn_bdiv_dbm1c.
|
||||
|
||||
dnl Copyright 2008 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: ?
|
||||
C 75x (G3): ?
|
||||
C 7400,7410 (G4): 9.43
|
||||
C 744x,745x (G4+): 6.28
|
||||
C power4/ppc970: ?
|
||||
C power5: ?
|
||||
|
||||
C TODO
|
||||
C * Nothing to do...
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`n', `r5')
|
||||
define(`bd', `r6')
|
||||
define(`cy', `r7')
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_bdiv_dbm1c)
|
||||
lwz r0, 0(r4)
|
||||
|
||||
rlwinm. r12, r5, 0,30,31
|
||||
cmplwi cr6, r12, 2
|
||||
cmplwi cr7, r5, 4
|
||||
addi r5, r5, 1
|
||||
srwi r5, r5, 2
|
||||
mtctr r5
|
||||
beq cr0, L(b00)
|
||||
blt cr6, L(b01)
|
||||
beq cr6, L(b10)
|
||||
|
||||
L(b11): mullw r5, r0, r6
|
||||
mulhwu r12, r0, r6
|
||||
lwz r0, 4(r4)
|
||||
addi r4, r4, -12
|
||||
addi r3, r3, -12
|
||||
b L(3)
|
||||
|
||||
L(b00): mullw r9, r0, r6
|
||||
mulhwu r8, r0, r6
|
||||
lwz r0, 4(r4)
|
||||
addi r4, r4, -8
|
||||
addi r3, r3, -8
|
||||
b L(0)
|
||||
|
||||
L(b01): mullw r5, r0, r6
|
||||
mulhwu r12, r0, r6
|
||||
addi r3, r3, -4
|
||||
ble cr7, L(e1)
|
||||
lwz r0, 4(r4)
|
||||
addi r4, r4, -4
|
||||
b L(1)
|
||||
|
||||
L(b10): mullw r9, r0, r6
|
||||
mulhwu r8, r0, r6
|
||||
lwz r0, 4(r4)
|
||||
ble cr7, L(e2)
|
||||
|
||||
ALIGN(16)
|
||||
L(top): mullw r5, r0, r6
|
||||
mulhwu r12, r0, r6
|
||||
subfc r11, r9, r7
|
||||
lwz r0, 8(r4)
|
||||
subfe r7, r8, r11
|
||||
stw r11, 0(r3)
|
||||
L(1): mullw r9, r0, r6
|
||||
mulhwu r8, r0, r6
|
||||
subfc r11, r5, r7
|
||||
lwz r0, 12(r4)
|
||||
subfe r7, r12, r11
|
||||
stw r11, 4(r3)
|
||||
L(0): mullw r5, r0, r6
|
||||
mulhwu r12, r0, r6
|
||||
subfc r11, r9, r7
|
||||
lwz r0, 16(r4)
|
||||
subfe r7, r8, r11
|
||||
stw r11, 8(r3)
|
||||
L(3): mullw r9, r0, r6
|
||||
mulhwu r8, r0, r6
|
||||
subfc r11, r5, r7
|
||||
lwz r0, 20(r4)
|
||||
subfe r7, r12, r11
|
||||
stw r11, 12(r3)
|
||||
addi r4, r4, 16
|
||||
addi r3, r3, 16
|
||||
bdnz L(top)
|
||||
|
||||
L(e2): mullw r5, r0, r6
|
||||
mulhwu r12, r0, r6
|
||||
subfc r11, r9, r7
|
||||
subfe r7, r8, r11
|
||||
stw r11, 0(r3)
|
||||
L(e1): subfc r11, r5, r7
|
||||
stw r11, 4(r3)
|
||||
subfe r3, r12, r11
|
||||
blr
|
||||
EPILOGUE()
|
||||
91
blender-5.2.0/extern/gmp-source/mpn/powerpc32/darwin.m4
vendored
Normal file
91
blender-5.2.0/extern/gmp-source/mpn/powerpc32/darwin.m4
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
divert(-1)
|
||||
dnl m4 macros for Mac OS 32-bit assembly.
|
||||
|
||||
dnl Copyright 2005, 2006 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/.
|
||||
|
||||
define(`ASM_START',`')
|
||||
|
||||
dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc])
|
||||
dnl EPILOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs_range(1,2)
|
||||
`ifelse(`$2',toc,,
|
||||
`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl
|
||||
.text
|
||||
.globl $1
|
||||
.align 3
|
||||
$1:')
|
||||
|
||||
define(`EPILOGUE_cpu',
|
||||
m4_assert_numargs(1))
|
||||
|
||||
|
||||
dnl LEA -- Load Effective Address.
|
||||
|
||||
define(`LEA',
|
||||
m4_assert_numargs(2)
|
||||
`ifdef(`PIC',
|
||||
` mflr r0 C save return address
|
||||
bcl 20, 31, 1f
|
||||
1: mflr $1
|
||||
addis $1, $1, ha16($2-1b)
|
||||
la $1, lo16($2-1b)($1)
|
||||
mtlr r0 C restore return address
|
||||
',`
|
||||
lis $1, ha16($2)
|
||||
la $1, lo16($2)($1)
|
||||
')')
|
||||
|
||||
define(`LEAL',
|
||||
m4_assert_numargs(2)
|
||||
`LEA($1,$2)')
|
||||
|
||||
|
||||
define(`EXTERN',
|
||||
m4_assert_numargs(1)
|
||||
`dnl')
|
||||
|
||||
define(`DEF_OBJECT',
|
||||
m4_assert_numargs_range(1,2)
|
||||
` .const
|
||||
ALIGN(ifelse($#,1,2,$2))
|
||||
$1:
|
||||
')
|
||||
|
||||
define(`END_OBJECT',
|
||||
m4_assert_numargs(1))
|
||||
|
||||
define(`ASM_END', `dnl')
|
||||
|
||||
ifdef(`PIC',`
|
||||
define(`PIC_SLOW')')
|
||||
|
||||
divert
|
||||
93
blender-5.2.0/extern/gmp-source/mpn/powerpc32/diveby3.asm
vendored
Normal file
93
blender-5.2.0/extern/gmp-source/mpn/powerpc32/diveby3.asm
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
dnl PowerPC-32 mpn_divexact_by3 -- mpn by 3 exact division
|
||||
|
||||
dnl Copyright 2002, 2003, 2005, 2006 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 5
|
||||
C 75x (G3): ?
|
||||
C 7400,7410 (G4): 8
|
||||
C 744x,745x (G4+): 6
|
||||
C power4/ppc970: 12
|
||||
C power5: ?
|
||||
|
||||
C void mpn_divexact_by3 (mp_ptr dst, mp_srcptr src, mp_size_t size);
|
||||
C
|
||||
C We avoid the slow subfe instruction and instead rely on an extremely unlikely
|
||||
C branch.
|
||||
C
|
||||
C The mullw has the inverse in the first operand, since 0xAA..AB won't allow
|
||||
C any early-out. The src[] data normally won't either, but there's at least
|
||||
C a chance, whereas 0xAA..AB never will. If, for instance, src[] is all
|
||||
C zeros (not a sensible input of course) we run at 7.0 c/l on ppc750.
|
||||
C
|
||||
C The mulhwu has the "3" multiplier in the second operand, which lets 750 and
|
||||
C 7400 use an early-out.
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`n', `r5')
|
||||
define(`cy', `r6')
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_divexact_by3c)
|
||||
lwz r11, 0(up)
|
||||
mtctr n
|
||||
lis r12, 0xAAAA
|
||||
ori r12, r12, 0xAAAB
|
||||
li r10, 3
|
||||
|
||||
cmplw cr7, cy, r11
|
||||
subf r11, cy, r11
|
||||
|
||||
mullw r0, r11, r12
|
||||
stw r0, 0(rp)
|
||||
bdz L(one)
|
||||
|
||||
L(top): lwzu r9, 4(up)
|
||||
mulhwu r7, r0, r10
|
||||
bgt- cr7, L(adj) C very unlikely branch
|
||||
L(bko): cmplw cr7, r7, r9
|
||||
subf r0, r7, r9
|
||||
mullw r0, r12, r0
|
||||
stwu r0, 4(rp)
|
||||
bdnz L(top)
|
||||
|
||||
L(one): mulhwu r3, r0, r10
|
||||
blelr+ cr7
|
||||
addi r3, r3, 1
|
||||
blr
|
||||
|
||||
L(adj): addi r7, r7, 1
|
||||
b L(bko)
|
||||
EPILOGUE()
|
||||
ASM_END()
|
||||
182
blender-5.2.0/extern/gmp-source/mpn/powerpc32/divrem_2.asm
vendored
Normal file
182
blender-5.2.0/extern/gmp-source/mpn/powerpc32/divrem_2.asm
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
dnl PPC-32 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number.
|
||||
|
||||
dnl Copyright 2007, 2008, 2012, 2017 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 cycles/limb
|
||||
C norm frac
|
||||
C 7410 ~36.5 ~36.5
|
||||
C 744x, 745x 29 29
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C qp = r3
|
||||
C fn = r4
|
||||
C up = r5
|
||||
C un = r6
|
||||
C d = r7
|
||||
|
||||
C TODO
|
||||
C * Decrease register usage.
|
||||
C * Make sure mul operands and optimal for early-out.
|
||||
C * Check that things work well for a shared library build.
|
||||
C * Write an invert_limb, perhaps inline, perhaps as a private call. Or at
|
||||
C least vastly improve the current __udiv_qrnnd_c based code.
|
||||
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_divrem_2)
|
||||
stwu r1, -32(r1)
|
||||
slwi r0, r6, 2
|
||||
add r5, r5, r0
|
||||
stmw r28, 8(r1)
|
||||
addi r29, r5, -8 C up = up_param + un - 2
|
||||
lwz r10, 4(r7)
|
||||
lwz r12, 4(r29)
|
||||
addi r8, r3, -12
|
||||
lwz r7, 0(r7)
|
||||
cmplw cr7, r12, r10
|
||||
lwz r28, 0(r29)
|
||||
blt- cr7, L(2)
|
||||
bgt+ cr7, L(4)
|
||||
cmplw cr7, r28, r7
|
||||
blt- cr7, L(2)
|
||||
L(4): subfc r28, r7, r28
|
||||
subfe r12, r10, r12
|
||||
li r3, 1
|
||||
b L(6)
|
||||
L(2): li r3, 0
|
||||
|
||||
L(6): add r0, r4, r6
|
||||
addic. r30, r0, -2
|
||||
ble- cr0, L(ret)
|
||||
|
||||
slwi r9, r0, 2
|
||||
add r8, r8, r9 C rp += un + fn
|
||||
mtctr r30
|
||||
|
||||
C Compute di from d1
|
||||
srwi r11, r10, 16
|
||||
nor r0, r10, r10
|
||||
divwu r31, r0, r11
|
||||
rlwinm r5, r10, 0, 16, 31
|
||||
mullw r9, r11, r31
|
||||
mullw r6, r5, r31
|
||||
subf r0, r9, r0
|
||||
slwi r0, r0, 16
|
||||
ori r0, r0, 65535
|
||||
cmplw cr7, r0, r6
|
||||
bge- cr7, L(9)
|
||||
add r0, r0, r10
|
||||
cmplw cr7, r0, r10
|
||||
cmplw cr6, r6, r0
|
||||
addi r31, r31, -1 C q1--
|
||||
crorc 28, 28, 25
|
||||
blt+ cr7, L(9)
|
||||
addi r31, r31, -1 C q1--
|
||||
add r0, r0, r10
|
||||
L(9): subf r0, r6, r0
|
||||
divwu r6, r0, r11
|
||||
mullw r9, r11, r6
|
||||
mullw r11, r5, r6
|
||||
subf r0, r9, r0
|
||||
slwi r0, r0, 16
|
||||
ori r0, r0, 65535
|
||||
cmplw cr7, r0, r11
|
||||
bge- cr7, L(13)
|
||||
add r0, r0, r10
|
||||
cmplw cr7, r0, r10
|
||||
cmplw cr6, r11, r0
|
||||
addi r6, r6, -1 C q0--
|
||||
crorc 28, 28, 25
|
||||
blt+ cr7, L(13)
|
||||
C add r0, r0, r10 C final remainder
|
||||
addi r6, r6, -1 C q0--
|
||||
L(13): rlwimi r6, r31, 16, 0, 15 C assemble final quotient
|
||||
|
||||
C Adjust di by including d0
|
||||
mullw r9, r10, r6 C t0 = LO(di * d1)
|
||||
addc r11, r9, r7
|
||||
subfe r0, r1, r1
|
||||
mulhwu r9, r6, r7 C s1 = HI(di * d0)
|
||||
addc r9, r11, r9
|
||||
addze. r0, r0
|
||||
blt cr0, L(17)
|
||||
L(18): subfc r9, r10, r9
|
||||
addi r6, r6, -1
|
||||
addme. r0, r0
|
||||
bge+ cr0, L(18)
|
||||
L(17):
|
||||
|
||||
C r0 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r28 r29 r30 r31
|
||||
C msl di d0 qp d1 fn up un
|
||||
L(loop):
|
||||
mullw r0, r12, r6 C q0 = LO(n2 * di)
|
||||
cmpw cr7, r30, r4
|
||||
addc r31, r0, r28 C q0 += n1
|
||||
mulhwu r9, r12, r6 C q = HI(n2 * di)
|
||||
adde r12, r9, r12 C q += n2
|
||||
addi r30, r30, -1
|
||||
mullw r0, r10, r12 C d1 * q
|
||||
li r9, 0
|
||||
subf r0, r0, r28 C n1 -= d1 * q
|
||||
addi r5, r12, 1
|
||||
ble- cr7, L(23)
|
||||
lwzu r9, -4(r29)
|
||||
L(23): mullw r11, r12, r7 C t0 = LO(d0 * q)
|
||||
subfc r28, r7, r9 C n0 -= d0
|
||||
subfe r0, r10, r0 C n1 -= d1
|
||||
mulhwu r12, r12, r7 C t1 = HI(d0 * q)
|
||||
subfc r28, r11, r28 C n0 -= t0
|
||||
subfe r12, r12, r0 C n1 -= t1
|
||||
cmplw cr7, r12, r31
|
||||
blt+ cr7, L(24)
|
||||
addc r28, r28, r7
|
||||
adde r12, r12, r10
|
||||
addi r5, r5, -1
|
||||
L(24): cmplw cr7, r12, r10
|
||||
bge- cr7, L(fix)
|
||||
L(bck): stw r5, 0(r8)
|
||||
addi r8, r8, -4
|
||||
bdnz L(loop)
|
||||
|
||||
L(ret): stw r28, 0(r29)
|
||||
stw r12, 4(r29)
|
||||
lmw r28, 8(r1)
|
||||
addi r1, r1, 32
|
||||
blr
|
||||
|
||||
L(fix): cmplw cr6, r28, r7
|
||||
bgt+ cr7, L(28)
|
||||
blt- cr6, L(bck)
|
||||
L(28): subfc r28, r7, r28
|
||||
subfe r12, r10, r12
|
||||
addi r5, r5, 1
|
||||
b L(bck)
|
||||
EPILOGUE()
|
||||
86
blender-5.2.0/extern/gmp-source/mpn/powerpc32/eabi.m4
vendored
Normal file
86
blender-5.2.0/extern/gmp-source/mpn/powerpc32/eabi.m4
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
divert(-1)
|
||||
dnl m4 macros for powerpc32 eABI assembly.
|
||||
|
||||
dnl Copyright 2003, 2005, 2006 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/.
|
||||
|
||||
define(`ASM_START',`')
|
||||
|
||||
dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl EPILOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
`
|
||||
.section ".text"
|
||||
.align 3
|
||||
.globl $1
|
||||
.type $1, @function
|
||||
$1:')
|
||||
|
||||
define(`EPILOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
` .size $1, .-$1')
|
||||
|
||||
dnl This ought to support PIC, but it is unclear how that is done for eABI
|
||||
define(`LEA',
|
||||
m4_assert_numargs(2)
|
||||
`
|
||||
lis $1, $2@ha
|
||||
la $1, $2@l($1)
|
||||
')
|
||||
|
||||
define(`EXTERN',
|
||||
m4_assert_numargs(1)
|
||||
`dnl')
|
||||
|
||||
define(`DEF_OBJECT',
|
||||
m4_assert_numargs_range(1,2)
|
||||
`
|
||||
.section .rodata
|
||||
ALIGN(ifelse($#,1,2,$2))
|
||||
.type $1, @object
|
||||
$1:
|
||||
')
|
||||
|
||||
define(`END_OBJECT',
|
||||
m4_assert_numargs(1)
|
||||
` .size $1, .-$1')
|
||||
|
||||
define(`ASM_END', `dnl')
|
||||
|
||||
ifdef(`PIC',`
|
||||
define(`PIC_SLOW')')
|
||||
|
||||
dnl 64-bit "long long" parameters are put in an even-odd pair, skipping an
|
||||
dnl even register if that was in turn. I wish somebody could explain why that
|
||||
dnl is a good idea.
|
||||
define(`BROKEN_LONGLONG_PARAM')
|
||||
|
||||
divert
|
||||
100
blender-5.2.0/extern/gmp-source/mpn/powerpc32/elf.m4
vendored
Normal file
100
blender-5.2.0/extern/gmp-source/mpn/powerpc32/elf.m4
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
divert(-1)
|
||||
dnl m4 macros for powerpc32 GNU/Linux assembly.
|
||||
|
||||
dnl Copyright 2003, 2005, 2006 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/.
|
||||
|
||||
define(`ASM_START',`')
|
||||
|
||||
dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo[,toc])
|
||||
dnl EPILOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs_range(1,2)
|
||||
`ifelse(`$2',toc,,
|
||||
`ifelse(`$2',,,`m4_error(`Unrecognised PROLOGUE parameter')')')dnl
|
||||
.section ".text"
|
||||
.align 3
|
||||
.globl $1
|
||||
.type $1, @function
|
||||
$1:')
|
||||
|
||||
define(`EPILOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
` .size $1, .-$1')
|
||||
|
||||
define(`LEA',
|
||||
m4_assert_numargs(2)
|
||||
`ifdef(`PIC',`
|
||||
mflr r0
|
||||
bcl 20, 31, 1f
|
||||
1: mflr $1
|
||||
addis $1, $1, (_GLOBAL_OFFSET_TABLE_-1b)@ha
|
||||
addi $1, $1, (_GLOBAL_OFFSET_TABLE_-1b)@l
|
||||
mtlr r0
|
||||
lwz $1, $2@got($1)
|
||||
',`
|
||||
lis $1, $2@ha
|
||||
la $1, $2@l($1)
|
||||
')')
|
||||
|
||||
|
||||
define(`LEAL',
|
||||
m4_assert_numargs(2)
|
||||
`LEA($1,$2)')
|
||||
|
||||
|
||||
define(`EXTERN',
|
||||
m4_assert_numargs(1)
|
||||
`dnl')
|
||||
|
||||
define(`DEF_OBJECT',
|
||||
m4_assert_numargs_range(1,2)
|
||||
`
|
||||
.section .rodata
|
||||
ALIGN(ifelse($#,1,2,$2))
|
||||
.type $1, @object
|
||||
$1:
|
||||
')
|
||||
|
||||
define(`END_OBJECT',
|
||||
m4_assert_numargs(1)
|
||||
` .size $1, .-$1')
|
||||
|
||||
define(`ASM_END', `dnl')
|
||||
|
||||
ifdef(`PIC',`
|
||||
define(`PIC_SLOW')')
|
||||
|
||||
dnl 64-bit "long long" parameters are put in an even-odd pair, skipping an
|
||||
dnl even register if that was in turn. I wish somebody could explain why that
|
||||
dnl is a good idea.
|
||||
define(`BROKEN_LONGLONG_PARAM')
|
||||
|
||||
divert
|
||||
222
blender-5.2.0/extern/gmp-source/mpn/powerpc32/gmp-mparam.h
vendored
Normal file
222
blender-5.2.0/extern/gmp-source/mpn/powerpc32/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,222 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 1991, 1993, 1994, 1999-2004, 2008-2010, 2014, 2015 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
|
||||
/* This file is supposed to be used for 604, 604e, 744x/745x/747x (G4+), i.e.,
|
||||
32-bit PowerPC processors with reasonably fast integer multiply insns. The
|
||||
values below are chosen to be best for the latter processors, since 604 is
|
||||
largely irrelevant today.
|
||||
|
||||
In mpn/powerpc32/750/gmp-mparam.h there are values for 75x (G3) and for
|
||||
7400/7410 (G4), both which have much slower multiply instructions. */
|
||||
|
||||
/* 1417 MHz PPC 7447A */
|
||||
/* FFT tuning limit = 15 M */
|
||||
/* Generated by tuneup.c, 2015-10-08, gcc 4.6 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 1
|
||||
#define MOD_1_NORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 8
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 6
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 8
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 45
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 18
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIV_QR_1N_PI1_METHOD 1
|
||||
#define DIV_QR_1_NORM_THRESHOLD 2
|
||||
#define DIV_QR_1_UNNORM_THRESHOLD 1
|
||||
#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD 69
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 14
|
||||
#define MUL_TOOM33_THRESHOLD 73
|
||||
#define MUL_TOOM44_THRESHOLD 106
|
||||
#define MUL_TOOM6H_THRESHOLD 156
|
||||
#define MUL_TOOM8H_THRESHOLD 236
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 73
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 71
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 73
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 72
|
||||
#define MUL_TOOM43_TO_TOOM54_THRESHOLD 82
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 0 /* always */
|
||||
#define SQR_TOOM2_THRESHOLD 22
|
||||
#define SQR_TOOM3_THRESHOLD 74
|
||||
#define SQR_TOOM4_THRESHOLD 142
|
||||
#define SQR_TOOM6_THRESHOLD 190
|
||||
#define SQR_TOOM8_THRESHOLD 333
|
||||
|
||||
#define MULMID_TOOM42_THRESHOLD 32
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 9
|
||||
#define SQRMOD_BNM1_THRESHOLD 13
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 284 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 284, 5}, { 15, 6}, { 8, 5}, { 17, 6}, \
|
||||
{ 9, 5}, { 19, 6}, { 17, 7}, { 9, 6}, \
|
||||
{ 20, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \
|
||||
{ 7, 7}, { 19, 8}, { 11, 7}, { 25, 9}, \
|
||||
{ 7, 8}, { 15, 7}, { 33, 8}, { 19, 7}, \
|
||||
{ 39, 8}, { 23, 7}, { 47, 8}, { 27, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \
|
||||
{ 15, 9}, { 31, 8}, { 67, 9}, { 39, 8}, \
|
||||
{ 79, 9}, { 47, 8}, { 95,10}, { 31, 9}, \
|
||||
{ 71, 8}, { 143, 9}, { 79,10}, { 47, 9}, \
|
||||
{ 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \
|
||||
{ 255, 9}, { 135, 8}, { 271, 9}, { 143,10}, \
|
||||
{ 79, 9}, { 159, 8}, { 319, 9}, { 175,10}, \
|
||||
{ 95, 9}, { 191, 8}, { 383, 9}, { 207, 8}, \
|
||||
{ 415,11}, { 63,10}, { 127, 9}, { 255, 8}, \
|
||||
{ 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \
|
||||
{ 575,10}, { 159, 9}, { 319,10}, { 175,11}, \
|
||||
{ 95,10}, { 191, 9}, { 383,10}, { 207, 9}, \
|
||||
{ 415, 8}, { 831,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \
|
||||
{ 1087,10}, { 287, 9}, { 575,11}, { 159,10}, \
|
||||
{ 319, 9}, { 639,10}, { 351, 9}, { 703,11}, \
|
||||
{ 191,10}, { 415, 9}, { 831,11}, { 223,10}, \
|
||||
{ 447, 9}, { 895,10}, { 479, 9}, { 959,12}, \
|
||||
{ 127,11}, { 255,10}, { 543, 9}, { 1087,11}, \
|
||||
{ 287,10}, { 607,11}, { 319,10}, { 639,11}, \
|
||||
{ 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \
|
||||
{ 383,10}, { 767,11}, { 415,10}, { 831,11}, \
|
||||
{ 447,10}, { 895,11}, { 479,10}, { 959,13}, \
|
||||
{ 127,12}, { 255,11}, { 543,10}, { 1087,11}, \
|
||||
{ 607,12}, { 319,11}, { 639,10}, { 1279,11}, \
|
||||
{ 703,10}, { 1407,12}, { 383,11}, { 831,12}, \
|
||||
{ 447,11}, { 959,13}, { 255,12}, { 511,11}, \
|
||||
{ 1087,12}, { 575,11}, { 1215,10}, { 2431,12}, \
|
||||
{ 639,11}, { 1279,12}, { 703,11}, { 1407,13}, \
|
||||
{ 383,12}, { 959,14}, { 255,13}, { 511,12}, \
|
||||
{ 1215,11}, { 2431,13}, { 639,12}, { 1471,13}, \
|
||||
{ 767,12}, { 1599,13}, { 895,12}, { 1919,14}, \
|
||||
{ 511,13}, { 1023,12}, { 2111,13}, { 1151,12}, \
|
||||
{ 2431,13}, { 1407,14}, { 767,13}, { 1535,12}, \
|
||||
{ 3071,13}, { 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 164
|
||||
#define MUL_FFT_THRESHOLD 3712
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 248 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 248, 5}, { 17, 6}, { 9, 5}, { 19, 6}, \
|
||||
{ 17, 7}, { 9, 6}, { 20, 7}, { 11, 6}, \
|
||||
{ 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \
|
||||
{ 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \
|
||||
{ 33, 8}, { 19, 7}, { 39, 8}, { 27, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \
|
||||
{ 15, 9}, { 31, 8}, { 63, 9}, { 39, 8}, \
|
||||
{ 79, 9}, { 47,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 9}, { 71, 8}, { 143, 9}, { 79,10}, \
|
||||
{ 47, 9}, { 95,11}, { 31,10}, { 63, 9}, \
|
||||
{ 127, 8}, { 255, 7}, { 511, 9}, { 143,10}, \
|
||||
{ 79, 9}, { 159, 8}, { 319, 9}, { 175, 8}, \
|
||||
{ 351,10}, { 95, 9}, { 191, 8}, { 383, 9}, \
|
||||
{ 207, 8}, { 415, 7}, { 831,11}, { 63,10}, \
|
||||
{ 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \
|
||||
{ 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \
|
||||
{ 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \
|
||||
{ 383,10}, { 207, 9}, { 415, 8}, { 831,12}, \
|
||||
{ 63,11}, { 127,10}, { 255, 9}, { 511,10}, \
|
||||
{ 271, 9}, { 543,10}, { 287, 9}, { 575,11}, \
|
||||
{ 159,10}, { 319, 9}, { 639,10}, { 351, 9}, \
|
||||
{ 703,11}, { 191,10}, { 383, 9}, { 767,10}, \
|
||||
{ 415, 9}, { 831,11}, { 223,10}, { 447, 9}, \
|
||||
{ 895,12}, { 127,11}, { 255,10}, { 543,11}, \
|
||||
{ 287,10}, { 607,11}, { 319,10}, { 639,11}, \
|
||||
{ 351,10}, { 703, 9}, { 1407,12}, { 191,11}, \
|
||||
{ 383,10}, { 767,11}, { 415,10}, { 831,11}, \
|
||||
{ 447,10}, { 895,11}, { 479,13}, { 127,12}, \
|
||||
{ 255,11}, { 543,10}, { 1087,11}, { 607,12}, \
|
||||
{ 319,11}, { 639,10}, { 1279,11}, { 703,10}, \
|
||||
{ 1407,12}, { 383,11}, { 831,12}, { 447,11}, \
|
||||
{ 959,13}, { 255,12}, { 511,11}, { 1087,12}, \
|
||||
{ 575,11}, { 1215,12}, { 639,11}, { 1279,12}, \
|
||||
{ 703,11}, { 1407,13}, { 383,12}, { 959,14}, \
|
||||
{ 255,13}, { 511,12}, { 1215,13}, { 639,12}, \
|
||||
{ 1471,13}, { 767,12}, { 1599,13}, { 895,12}, \
|
||||
{ 1919,14}, { 511,13}, { 1023,12}, { 2111,13}, \
|
||||
{ 1151,12}, { 2431,13}, { 1407,14}, { 767,13}, \
|
||||
{ 1535,12}, { 3199,13}, { 8192,14}, { 16384,15}, \
|
||||
{ 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 157
|
||||
#define SQR_FFT_THRESHOLD 2688
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 2
|
||||
#define MULLO_DC_THRESHOLD 50
|
||||
#define MULLO_MUL_N_THRESHOLD 6633
|
||||
#define SQRLO_BASECASE_THRESHOLD 4
|
||||
#define SQRLO_DC_THRESHOLD 115
|
||||
#define SQRLO_SQR_THRESHOLD 5274
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 43
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 141
|
||||
#define DC_BDIV_QR_THRESHOLD 51
|
||||
#define DC_BDIV_Q_THRESHOLD 120
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 43
|
||||
#define INV_NEWTON_THRESHOLD 173
|
||||
#define INV_APPR_THRESHOLD 156
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 204
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 51
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 1017
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 1078
|
||||
#define MUPI_DIV_QR_THRESHOLD 84
|
||||
#define MU_BDIV_QR_THRESHOLD 872
|
||||
#define MU_BDIV_Q_THRESHOLD 1078
|
||||
|
||||
#define POWM_SEC_TABLE 1,16,102,428,1378
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 12
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 27
|
||||
#define SET_STR_DC_THRESHOLD 781
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 1505
|
||||
|
||||
#define FAC_DSC_THRESHOLD 141
|
||||
#define FAC_ODD_THRESHOLD 34
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 12
|
||||
#define HGCD_THRESHOLD 118
|
||||
#define HGCD_APPR_THRESHOLD 161
|
||||
#define HGCD_REDUCE_THRESHOLD 1679
|
||||
#define GCD_DC_THRESHOLD 351
|
||||
#define GCDEXT_DC_THRESHOLD 273
|
||||
#define JACOBI_BASE_METHOD 4
|
||||
142
blender-5.2.0/extern/gmp-source/mpn/powerpc32/invert_limb.asm
vendored
Normal file
142
blender-5.2.0/extern/gmp-source/mpn/powerpc32/invert_limb.asm
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
dnl PowerPC-32 mpn_invert_limb -- Invert a normalized limb.
|
||||
|
||||
dnl Copyright 2011 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: ?
|
||||
C 75x (G3): ?
|
||||
C 7400,7410 (G4): ?
|
||||
C 744x,745x (G4+): 32
|
||||
C power4/ppc970: ?
|
||||
C power5: ?
|
||||
|
||||
EXTERN(approx_tab)
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_invert_limb)
|
||||
rlwinm r6, r3, 11, 22, 30 C extract bits 30..22 to pos 2^1
|
||||
srwi r10, r3, 11 C extract bits 31..11
|
||||
LEA( r9, approx_tab) C N.B. clobbers r0 for ELF and Darwin
|
||||
lhzx r9, r9, r6 C w2
|
||||
addi r0, r10, 1
|
||||
mullw r11, r9, r9
|
||||
slwi r9, r9, 4
|
||||
mulhwu r7, r11, r0
|
||||
rlwinm r11, r3, 0, 31, 31 C extract bit 0
|
||||
addi r0, r9, -1
|
||||
srwi r9, r3, 1 C d >> 1
|
||||
subf r0, r7, r0 C w1
|
||||
add r9, r9, r11 C d31
|
||||
mullw r9, r0, r9 C w1 * d31
|
||||
srwi r10, r0, 1 C w1 >> 1
|
||||
neg r11, r11
|
||||
and r11, r10, r11
|
||||
subf r11, r9, r11
|
||||
mulhwu r9, r11, r0
|
||||
slwi r0, r0, 15
|
||||
srwi r9, r9, 1
|
||||
add r0, r9, r0 C w0
|
||||
mullw r10, r0, r3
|
||||
mulhwu r9, r0, r3
|
||||
addc r11, r10, r3
|
||||
adde r3, r9, r3
|
||||
subf r3, r3, r0
|
||||
blr
|
||||
EPILOGUE()
|
||||
|
||||
DEF_OBJECT(approx_tab)
|
||||
.short 0x7fe1,0x7fa1,0x7f61,0x7f22,0x7ee3,0x7ea4,0x7e65,0x7e27
|
||||
.short 0x7de9,0x7dab,0x7d6d,0x7d30,0x7cf3,0x7cb6,0x7c79,0x7c3d
|
||||
.short 0x7c00,0x7bc4,0x7b89,0x7b4d,0x7b12,0x7ad7,0x7a9c,0x7a61
|
||||
.short 0x7a27,0x79ec,0x79b2,0x7979,0x793f,0x7906,0x78cc,0x7894
|
||||
.short 0x785b,0x7822,0x77ea,0x77b2,0x777a,0x7742,0x770b,0x76d3
|
||||
.short 0x769c,0x7665,0x762f,0x75f8,0x75c2,0x758c,0x7556,0x7520
|
||||
.short 0x74ea,0x74b5,0x7480,0x744b,0x7416,0x73e2,0x73ad,0x7379
|
||||
.short 0x7345,0x7311,0x72dd,0x72aa,0x7277,0x7243,0x7210,0x71de
|
||||
.short 0x71ab,0x7179,0x7146,0x7114,0x70e2,0x70b1,0x707f,0x704e
|
||||
.short 0x701c,0x6feb,0x6fba,0x6f8a,0x6f59,0x6f29,0x6ef9,0x6ec8
|
||||
.short 0x6e99,0x6e69,0x6e39,0x6e0a,0x6ddb,0x6dab,0x6d7d,0x6d4e
|
||||
.short 0x6d1f,0x6cf1,0x6cc2,0x6c94,0x6c66,0x6c38,0x6c0a,0x6bdd
|
||||
.short 0x6bb0,0x6b82,0x6b55,0x6b28,0x6afb,0x6acf,0x6aa2,0x6a76
|
||||
.short 0x6a49,0x6a1d,0x69f1,0x69c6,0x699a,0x696e,0x6943,0x6918
|
||||
.short 0x68ed,0x68c2,0x6897,0x686c,0x6842,0x6817,0x67ed,0x67c3
|
||||
.short 0x6799,0x676f,0x6745,0x671b,0x66f2,0x66c8,0x669f,0x6676
|
||||
.short 0x664d,0x6624,0x65fc,0x65d3,0x65aa,0x6582,0x655a,0x6532
|
||||
.short 0x650a,0x64e2,0x64ba,0x6493,0x646b,0x6444,0x641c,0x63f5
|
||||
.short 0x63ce,0x63a7,0x6381,0x635a,0x6333,0x630d,0x62e7,0x62c1
|
||||
.short 0x629a,0x6275,0x624f,0x6229,0x6203,0x61de,0x61b8,0x6193
|
||||
.short 0x616e,0x6149,0x6124,0x60ff,0x60da,0x60b6,0x6091,0x606d
|
||||
.short 0x6049,0x6024,0x6000,0x5fdc,0x5fb8,0x5f95,0x5f71,0x5f4d
|
||||
.short 0x5f2a,0x5f07,0x5ee3,0x5ec0,0x5e9d,0x5e7a,0x5e57,0x5e35
|
||||
.short 0x5e12,0x5def,0x5dcd,0x5dab,0x5d88,0x5d66,0x5d44,0x5d22
|
||||
.short 0x5d00,0x5cde,0x5cbd,0x5c9b,0x5c7a,0x5c58,0x5c37,0x5c16
|
||||
.short 0x5bf5,0x5bd4,0x5bb3,0x5b92,0x5b71,0x5b51,0x5b30,0x5b10
|
||||
.short 0x5aef,0x5acf,0x5aaf,0x5a8f,0x5a6f,0x5a4f,0x5a2f,0x5a0f
|
||||
.short 0x59ef,0x59d0,0x59b0,0x5991,0x5972,0x5952,0x5933,0x5914
|
||||
.short 0x58f5,0x58d6,0x58b7,0x5899,0x587a,0x585b,0x583d,0x581f
|
||||
.short 0x5800,0x57e2,0x57c4,0x57a6,0x5788,0x576a,0x574c,0x572e
|
||||
.short 0x5711,0x56f3,0x56d5,0x56b8,0x569b,0x567d,0x5660,0x5643
|
||||
.short 0x5626,0x5609,0x55ec,0x55cf,0x55b2,0x5596,0x5579,0x555d
|
||||
.short 0x5540,0x5524,0x5507,0x54eb,0x54cf,0x54b3,0x5497,0x547b
|
||||
.short 0x545f,0x5443,0x5428,0x540c,0x53f0,0x53d5,0x53b9,0x539e
|
||||
.short 0x5383,0x5368,0x534c,0x5331,0x5316,0x52fb,0x52e0,0x52c6
|
||||
.short 0x52ab,0x5290,0x5276,0x525b,0x5240,0x5226,0x520c,0x51f1
|
||||
.short 0x51d7,0x51bd,0x51a3,0x5189,0x516f,0x5155,0x513b,0x5121
|
||||
.short 0x5108,0x50ee,0x50d5,0x50bb,0x50a2,0x5088,0x506f,0x5056
|
||||
.short 0x503c,0x5023,0x500a,0x4ff1,0x4fd8,0x4fbf,0x4fa6,0x4f8e
|
||||
.short 0x4f75,0x4f5c,0x4f44,0x4f2b,0x4f13,0x4efa,0x4ee2,0x4eca
|
||||
.short 0x4eb1,0x4e99,0x4e81,0x4e69,0x4e51,0x4e39,0x4e21,0x4e09
|
||||
.short 0x4df1,0x4dda,0x4dc2,0x4daa,0x4d93,0x4d7b,0x4d64,0x4d4d
|
||||
.short 0x4d35,0x4d1e,0x4d07,0x4cf0,0x4cd8,0x4cc1,0x4caa,0x4c93
|
||||
.short 0x4c7d,0x4c66,0x4c4f,0x4c38,0x4c21,0x4c0b,0x4bf4,0x4bde
|
||||
.short 0x4bc7,0x4bb1,0x4b9a,0x4b84,0x4b6e,0x4b58,0x4b41,0x4b2b
|
||||
.short 0x4b15,0x4aff,0x4ae9,0x4ad3,0x4abd,0x4aa8,0x4a92,0x4a7c
|
||||
.short 0x4a66,0x4a51,0x4a3b,0x4a26,0x4a10,0x49fb,0x49e5,0x49d0
|
||||
.short 0x49bb,0x49a6,0x4990,0x497b,0x4966,0x4951,0x493c,0x4927
|
||||
.short 0x4912,0x48fe,0x48e9,0x48d4,0x48bf,0x48ab,0x4896,0x4881
|
||||
.short 0x486d,0x4858,0x4844,0x482f,0x481b,0x4807,0x47f3,0x47de
|
||||
.short 0x47ca,0x47b6,0x47a2,0x478e,0x477a,0x4766,0x4752,0x473e
|
||||
.short 0x472a,0x4717,0x4703,0x46ef,0x46db,0x46c8,0x46b4,0x46a1
|
||||
.short 0x468d,0x467a,0x4666,0x4653,0x4640,0x462c,0x4619,0x4606
|
||||
.short 0x45f3,0x45e0,0x45cd,0x45ba,0x45a7,0x4594,0x4581,0x456e
|
||||
.short 0x455b,0x4548,0x4536,0x4523,0x4510,0x44fe,0x44eb,0x44d8
|
||||
.short 0x44c6,0x44b3,0x44a1,0x448f,0x447c,0x446a,0x4458,0x4445
|
||||
.short 0x4433,0x4421,0x440f,0x43fd,0x43eb,0x43d9,0x43c7,0x43b5
|
||||
.short 0x43a3,0x4391,0x437f,0x436d,0x435c,0x434a,0x4338,0x4327
|
||||
.short 0x4315,0x4303,0x42f2,0x42e0,0x42cf,0x42bd,0x42ac,0x429b
|
||||
.short 0x4289,0x4278,0x4267,0x4256,0x4244,0x4233,0x4222,0x4211
|
||||
.short 0x4200,0x41ef,0x41de,0x41cd,0x41bc,0x41ab,0x419a,0x418a
|
||||
.short 0x4179,0x4168,0x4157,0x4147,0x4136,0x4125,0x4115,0x4104
|
||||
.short 0x40f4,0x40e3,0x40d3,0x40c2,0x40b2,0x40a2,0x4091,0x4081
|
||||
.short 0x4071,0x4061,0x4050,0x4040,0x4030,0x4020,0x4010,0x4000
|
||||
END_OBJECT(approx_tab)
|
||||
ASM_END()
|
||||
168
blender-5.2.0/extern/gmp-source/mpn/powerpc32/lshift.asm
vendored
Normal file
168
blender-5.2.0/extern/gmp-source/mpn/powerpc32/lshift.asm
vendored
Normal file
@@ -0,0 +1,168 @@
|
||||
dnl PowerPC-32 mpn_lshift -- Shift a number left.
|
||||
|
||||
dnl Copyright 1995, 1998, 2000, 2002-2005 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 3.0
|
||||
C 75x (G3): 3.0
|
||||
C 7400,7410 (G4): 3.0
|
||||
C 7445,7455 (G4+): 2.5
|
||||
C 7447,7457 (G4+): 2.25
|
||||
C power4/ppc970: 2.5
|
||||
C power5: 2.5
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C cnt r6
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_lshift)
|
||||
cmpwi cr0, r5, 30 C more than 30 limbs?
|
||||
slwi r0, r5, 2
|
||||
add r4, r4, r0 C make r4 point at end of s1
|
||||
add r7, r3, r0 C make r7 point at end of res
|
||||
bgt L(BIG) C branch if more than 12 limbs
|
||||
|
||||
mtctr r5 C copy size into CTR
|
||||
subfic r8, r6, 32
|
||||
lwzu r11, -4(r4) C load first s1 limb
|
||||
srw r3, r11, r8 C compute function return value
|
||||
bdz L(end1)
|
||||
|
||||
L(oop): lwzu r10, -4(r4)
|
||||
slw r9, r11, r6
|
||||
srw r12, r10, r8
|
||||
or r9, r9, r12
|
||||
stwu r9, -4(r7)
|
||||
bdz L(end2)
|
||||
lwzu r11, -4(r4)
|
||||
slw r9, r10, r6
|
||||
srw r12, r11, r8
|
||||
or r9, r9, r12
|
||||
stwu r9, -4(r7)
|
||||
bdnz L(oop)
|
||||
|
||||
L(end1):
|
||||
slw r0, r11, r6
|
||||
stw r0, -4(r7)
|
||||
blr
|
||||
L(end2):
|
||||
slw r0, r10, r6
|
||||
stw r0, -4(r7)
|
||||
blr
|
||||
|
||||
L(BIG):
|
||||
stwu r1, -48(r1)
|
||||
stmw r24, 8(r1) C save registers we are supposed to preserve
|
||||
lwzu r9, -4(r4)
|
||||
subfic r8, r6, 32
|
||||
srw r3, r9, r8 C compute function return value
|
||||
slw r0, r9, r6
|
||||
addi r5, r5, -1
|
||||
|
||||
andi. r10, r5, 3 C count for spill loop
|
||||
beq L(e)
|
||||
mtctr r10
|
||||
lwzu r28, -4(r4)
|
||||
bdz L(xe0)
|
||||
|
||||
L(loop0):
|
||||
slw r12, r28, r6
|
||||
srw r24, r28, r8
|
||||
lwzu r28, -4(r4)
|
||||
or r24, r0, r24
|
||||
stwu r24, -4(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loop0) C taken at most once!
|
||||
|
||||
L(xe0): slw r12, r28, r6
|
||||
srw r24, r28, r8
|
||||
or r24, r0, r24
|
||||
stwu r24, -4(r7)
|
||||
mr r0, r12
|
||||
|
||||
L(e): srwi r5, r5, 2 C count for unrolled loop
|
||||
addi r5, r5, -1
|
||||
mtctr r5
|
||||
lwz r28, -4(r4)
|
||||
lwz r29, -8(r4)
|
||||
lwz r30, -12(r4)
|
||||
lwzu r31, -16(r4)
|
||||
|
||||
L(loopU):
|
||||
slw r9, r28, r6
|
||||
srw r24, r28, r8
|
||||
lwz r28, -4(r4)
|
||||
slw r10, r29, r6
|
||||
srw r25, r29, r8
|
||||
lwz r29, -8(r4)
|
||||
slw r11, r30, r6
|
||||
srw r26, r30, r8
|
||||
lwz r30, -12(r4)
|
||||
slw r12, r31, r6
|
||||
srw r27, r31, r8
|
||||
lwzu r31, -16(r4)
|
||||
or r24, r0, r24
|
||||
stw r24, -4(r7)
|
||||
or r25, r9, r25
|
||||
stw r25, -8(r7)
|
||||
or r26, r10, r26
|
||||
stw r26, -12(r7)
|
||||
or r27, r11, r27
|
||||
stwu r27, -16(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loopU)
|
||||
|
||||
slw r9, r28, r6
|
||||
srw r24, r28, r8
|
||||
slw r10, r29, r6
|
||||
srw r25, r29, r8
|
||||
slw r11, r30, r6
|
||||
srw r26, r30, r8
|
||||
slw r12, r31, r6
|
||||
srw r27, r31, r8
|
||||
or r24, r0, r24
|
||||
stw r24, -4(r7)
|
||||
or r25, r9, r25
|
||||
stw r25, -8(r7)
|
||||
or r26, r10, r26
|
||||
stw r26, -12(r7)
|
||||
or r27, r11, r27
|
||||
stw r27, -16(r7)
|
||||
|
||||
stw r12, -20(r7)
|
||||
lmw r24, 8(r1) C restore registers
|
||||
addi r1, r1, 48
|
||||
blr
|
||||
EPILOGUE()
|
||||
170
blender-5.2.0/extern/gmp-source/mpn/powerpc32/lshiftc.asm
vendored
Normal file
170
blender-5.2.0/extern/gmp-source/mpn/powerpc32/lshiftc.asm
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
dnl PowerPC-32 mpn_lshiftc.
|
||||
|
||||
dnl Copyright 1995, 1998, 2000, 2002-2005, 2010 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 3.0
|
||||
C 75x (G3): 3.0
|
||||
C 7400,7410 (G4): 3.0
|
||||
C 7445,7455 (G4+): 2.5
|
||||
C 7447,7457 (G4+): 2.25
|
||||
C power4/ppc970: 2.5
|
||||
C power5: 2.5
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C cnt r6
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_lshiftc)
|
||||
cmpwi cr0, r5, 30 C more than 30 limbs?
|
||||
slwi r0, r5, 2
|
||||
add r4, r4, r0 C make r4 point at end of s1
|
||||
add r7, r3, r0 C make r7 point at end of res
|
||||
bgt L(BIG) C branch if more than 12 limbs
|
||||
|
||||
mtctr r5 C copy size into CTR
|
||||
subfic r8, r6, 32
|
||||
lwzu r11, -4(r4) C load first s1 limb
|
||||
srw r3, r11, r8 C compute function return value
|
||||
bdz L(end1)
|
||||
|
||||
L(oop): lwzu r10, -4(r4)
|
||||
slw r9, r11, r6
|
||||
srw r12, r10, r8
|
||||
nor r9, r9, r12
|
||||
stwu r9, -4(r7)
|
||||
bdz L(end2)
|
||||
lwzu r11, -4(r4)
|
||||
slw r9, r10, r6
|
||||
srw r12, r11, r8
|
||||
nor r9, r9, r12
|
||||
stwu r9, -4(r7)
|
||||
bdnz L(oop)
|
||||
|
||||
L(end1):
|
||||
slw r0, r11, r6
|
||||
nor r0, r0, r0
|
||||
stw r0, -4(r7)
|
||||
blr
|
||||
L(end2):
|
||||
slw r0, r10, r6
|
||||
nor r0, r0, r0
|
||||
stw r0, -4(r7)
|
||||
blr
|
||||
|
||||
L(BIG):
|
||||
stwu r1, -48(r1)
|
||||
stmw r24, 8(r1) C save registers we are supposed to preserve
|
||||
lwzu r9, -4(r4)
|
||||
subfic r8, r6, 32
|
||||
srw r3, r9, r8 C compute function return value
|
||||
slw r0, r9, r6
|
||||
addi r5, r5, -1
|
||||
|
||||
andi. r10, r5, 3 C count for spill loop
|
||||
beq L(e)
|
||||
mtctr r10
|
||||
lwzu r28, -4(r4)
|
||||
bdz L(xe0)
|
||||
|
||||
L(loop0):
|
||||
slw r12, r28, r6
|
||||
srw r24, r28, r8
|
||||
lwzu r28, -4(r4)
|
||||
nor r24, r0, r24
|
||||
stwu r24, -4(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loop0) C taken at most once!
|
||||
|
||||
L(xe0): slw r12, r28, r6
|
||||
srw r24, r28, r8
|
||||
nor r24, r0, r24
|
||||
stwu r24, -4(r7)
|
||||
mr r0, r12
|
||||
|
||||
L(e): srwi r5, r5, 2 C count for unrolled loop
|
||||
addi r5, r5, -1
|
||||
mtctr r5
|
||||
lwz r28, -4(r4)
|
||||
lwz r29, -8(r4)
|
||||
lwz r30, -12(r4)
|
||||
lwzu r31, -16(r4)
|
||||
|
||||
L(loopU):
|
||||
slw r9, r28, r6
|
||||
srw r24, r28, r8
|
||||
lwz r28, -4(r4)
|
||||
slw r10, r29, r6
|
||||
srw r25, r29, r8
|
||||
lwz r29, -8(r4)
|
||||
slw r11, r30, r6
|
||||
srw r26, r30, r8
|
||||
lwz r30, -12(r4)
|
||||
slw r12, r31, r6
|
||||
srw r27, r31, r8
|
||||
lwzu r31, -16(r4)
|
||||
nor r24, r0, r24
|
||||
stw r24, -4(r7)
|
||||
nor r25, r9, r25
|
||||
stw r25, -8(r7)
|
||||
nor r26, r10, r26
|
||||
stw r26, -12(r7)
|
||||
nor r27, r11, r27
|
||||
stwu r27, -16(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loopU)
|
||||
|
||||
slw r9, r28, r6
|
||||
srw r24, r28, r8
|
||||
slw r10, r29, r6
|
||||
srw r25, r29, r8
|
||||
slw r11, r30, r6
|
||||
srw r26, r30, r8
|
||||
slw r12, r31, r6
|
||||
srw r27, r31, r8
|
||||
nor r24, r0, r24
|
||||
stw r24, -4(r7)
|
||||
nor r25, r9, r25
|
||||
stw r25, -8(r7)
|
||||
nor r26, r10, r26
|
||||
stw r26, -12(r7)
|
||||
nor r27, r11, r27
|
||||
stw r27, -16(r7)
|
||||
nor r12, r12, r12
|
||||
stw r12, -20(r7)
|
||||
lmw r24, 8(r1) C restore registers
|
||||
addi r1, r1, 48
|
||||
blr
|
||||
EPILOGUE()
|
||||
145
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mod_34lsub1.asm
vendored
Normal file
145
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mod_34lsub1.asm
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1.
|
||||
|
||||
dnl Copyright 2002, 2003, 2005 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 3
|
||||
C 75x (G3): 3
|
||||
C 7400,7410 (G4): 3
|
||||
C 744x,745x (G4+): 3
|
||||
C power4/ppc970: 2.5
|
||||
C power5: 2.5
|
||||
|
||||
C mp_limb_t mpn_mod_34lsub1 (mp_srcptr src, mp_size_t size)
|
||||
C
|
||||
C There seems no need to schedule the loads back, the code is still 3.0 c/l
|
||||
C on 750/7400 no matter where they're placed.
|
||||
C
|
||||
C Alternatives:
|
||||
C
|
||||
C Fetching half words would allow add instead for accumulating, instead of
|
||||
C adde and its serialization. An outer loop would be required though, since
|
||||
C 2^16 halfwords can overflow. lhz+add would be 2.0 c/l, but if there's
|
||||
C also a bdz or bdnz for each and a pointer update say every three limbs
|
||||
C then the total would be 2.67 c/l which isn't much faster than the current
|
||||
C simpler code.
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_mod_34lsub1)
|
||||
|
||||
C r3 src
|
||||
C r4 size
|
||||
|
||||
mtctr r4
|
||||
addic r6, r3, 8 C &src[2], and clear CA
|
||||
|
||||
lwz r3, 0(r3) C acc0 = src[0]
|
||||
bdz L(done)
|
||||
|
||||
lwz r4, -4(r6) C acc1 = src[1]
|
||||
bdz L(two)
|
||||
|
||||
lwz r5, 0(r6) C acc2 = src[2]
|
||||
lis r7, 0 C no carry if just three limbs
|
||||
|
||||
bdz L(three)
|
||||
lis r7, 1 C 0x10000 carry pos
|
||||
|
||||
L(top):
|
||||
C r3 acc0
|
||||
C r4 acc1
|
||||
C r5 acc2
|
||||
C r6 src, incrementing
|
||||
C r7 carry pos
|
||||
|
||||
lwz r0, 4(r6)
|
||||
adde r3, r3, r0
|
||||
bdz L(end0)
|
||||
|
||||
lwz r0, 8(r6)
|
||||
adde r4, r4, r0
|
||||
bdz L(end1)
|
||||
|
||||
lwzu r0, 12(r6)
|
||||
adde r5, r5, r0
|
||||
bdnz L(top)
|
||||
|
||||
|
||||
srwi r7, r7, 8
|
||||
L(end0):
|
||||
srwi r7, r7, 8
|
||||
L(end1):
|
||||
subfe r0, r0, r0 C -1 if not CA
|
||||
|
||||
andc r7, r7, r0 C final carry, 0x10000, 0x100, 1 or 0
|
||||
L(three):
|
||||
rlwinm r6, r3, 0,8,31 C acc0 low
|
||||
|
||||
add r7, r7, r6
|
||||
rlwinm r6, r3, 8,24,31 C acc0 high
|
||||
|
||||
add r7, r7, r6
|
||||
rlwinm r6, r4, 8,8,23 C acc1 low
|
||||
|
||||
add r7, r7, r6
|
||||
rlwinm r6, r4, 16,16,31 C acc1 high
|
||||
|
||||
add r7, r7, r6
|
||||
rlwinm r6, r5, 16,8,15 C acc2 low
|
||||
|
||||
add r7, r7, r6
|
||||
rlwinm r6, r5, 24,8,31 C acc2 high
|
||||
|
||||
add r3, r7, r6
|
||||
|
||||
L(done):
|
||||
blr
|
||||
|
||||
L(two):
|
||||
C r3 acc0
|
||||
C r4 acc1
|
||||
|
||||
rlwinm r5, r3, 8,24,31 C acc0 high
|
||||
rlwinm r3, r3, 0,8,31 C acc0 low
|
||||
|
||||
add r3, r3, r5 C acc0 high + low
|
||||
rlwinm r5, r4, 16,16,31 C acc1 high
|
||||
|
||||
add r3, r3, r5 C add acc1 high
|
||||
rlwinm r5, r4, 8,8,23 C acc1 low
|
||||
|
||||
add r3, r3, r5 C add acc1 low
|
||||
|
||||
blr
|
||||
|
||||
EPILOGUE()
|
||||
127
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mode1o.asm
vendored
Normal file
127
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mode1o.asm
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
dnl PowerPC-32 mpn_modexact_1_odd -- mpn by limb exact remainder.
|
||||
|
||||
dnl Copyright 2002, 2003, 2005, 2006 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 6.0
|
||||
C 75x (G3): 6.0-13.0, depending on divisor
|
||||
C 7400,7410 (G4): 6.0-13.0, depending on divisor
|
||||
C 744x,745x (G4+): 8.0-10.0, depending on divisor
|
||||
C power4/ppc970: 12.0
|
||||
C power5: 12.0
|
||||
|
||||
|
||||
C mp_limb_t mpn_modexact_1_odd (mp_srcptr src, mp_size_t size,
|
||||
C mp_limb_t divisor);
|
||||
C mp_limb_t mpn_modexact_1c_odd (mp_srcptr src, mp_size_t size,
|
||||
C mp_limb_t divisor, mp_limb_t carry);
|
||||
C
|
||||
C For PIC, the inverse is established arithmetically since it measures about
|
||||
C 5 cycles faster than the nonsense needed to access binvert_limb_table in
|
||||
C SVR4 or Darwin style PIC. AIX might be better, since it avoids bl/mflr to
|
||||
C get at the GOT/TOC/whatever.
|
||||
C
|
||||
C Using divwu for size==1 measured about 10 cycles slower on 604e, or about
|
||||
C 3-5 cycles faster on 750. For now it doesn't seem worth bothering with.
|
||||
C
|
||||
C The loop allows an early-out on mullw for the inverse, and on mulhwu for
|
||||
C the divisor. So the fastest is for instance divisor==1 (inverse==-1), and
|
||||
C the slowest is anything giving a full 32-bits in both, such as
|
||||
C divisor==0xDEADBEEF (inverse==0x904B300F). These establish the stated
|
||||
C range above for 750 and 7400.
|
||||
|
||||
|
||||
ASM_START()
|
||||
|
||||
EXTERN(binvert_limb_table)
|
||||
|
||||
PROLOGUE(mpn_modexact_1_odd)
|
||||
li r6, 0
|
||||
|
||||
PROLOGUE(mpn_modexact_1c_odd)
|
||||
|
||||
mtctr r4 C size
|
||||
|
||||
ifdef(`PIC_SLOW',`
|
||||
C Load from our table with PIC is so slow on Linux and Darwin that we avoid it
|
||||
rlwinm r7, r5, 1,28,28 C (divisor << 1) & 8
|
||||
rlwinm r8, r5, 2,28,28 C (divisor << 2) & 8
|
||||
xor r7, r7, r8 C ((divisor << 1) ^ (divisor << 2)) & 8
|
||||
rlwinm r4, r5, 0,28,31 C divisor low 4 bits, speedup mullw
|
||||
xor r4, r4, r7 C inverse, 4 bits
|
||||
mullw r7, r4, r4 C i*i
|
||||
slwi r4, r4, 1 C 2*i
|
||||
rlwinm r8, r5, 0,24,31 C divisor low 8 bits, speedup mullw
|
||||
mullw r7, r7, r8 C i*i*d
|
||||
sub r4, r4, r7 C inverse, 8 bits
|
||||
',`
|
||||
LEA( r7, binvert_limb_table)
|
||||
rlwinm r4, r5, 31,25,31 C (divisor/2) & 0x7F
|
||||
lbzx r4, r4,r7 C inverse, 8 bits
|
||||
')
|
||||
|
||||
mullw r7, r4, r4 C i*i
|
||||
slwi r4, r4, 1 C 2*i
|
||||
mullw r7, r5, r7 C i*i*d [i*i is 16 bits, so second operand]
|
||||
sub r4, r4, r7 C inverse, 16 bits
|
||||
mullw r7, r4, r4 C i*i
|
||||
slwi r4, r4, 1 C 2*i
|
||||
mullw r7, r7, r5 C i*i*d
|
||||
lwz r0, 0(r3) C src[0]
|
||||
sub r4, r4, r7 C inverse, 32 bits
|
||||
subfc r7, r6, r0 C l = src[0] - carry
|
||||
|
||||
mullw r7, r7, r4 C q = l * inverse
|
||||
bdz L(one)
|
||||
|
||||
lwzu r0, 4(r3) C src[1]
|
||||
mulhwu r6, r7, r5 C carry = high(q*divisor)
|
||||
subfe r7, r6, r0 C l = src[1] - carry
|
||||
bdz L(two)
|
||||
|
||||
L(top):
|
||||
mullw r7, r7, r4 C q = l * inverse
|
||||
lwzu r0, 4(r3) C src[i]
|
||||
mulhwu r6, r7, r5 C carry = high(q*divisor)
|
||||
subfe r7, r6, r0 C l = src[i] - carry
|
||||
bdnz L(top)
|
||||
|
||||
L(two): mullw r7, r7, r4 C q = l * inverse
|
||||
L(one): subfe r3, r3, r3 C ca 0 or -1
|
||||
mulhwu r6, r7, r5 C carry = high(q*divisor)
|
||||
subf r3, r3, r6 C carry + ca
|
||||
blr
|
||||
|
||||
EPILOGUE(mpn_modexact_1c_odd)
|
||||
EPILOGUE(mpn_modexact_1_odd)
|
||||
ASM_END()
|
||||
101
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mul_1.asm
vendored
Normal file
101
blender-5.2.0/extern/gmp-source/mpn/powerpc32/mul_1.asm
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
dnl PowerPC-32 mpn_mul_1 -- Multiply a limb vector with a limb and store the
|
||||
dnl result in a second limb vector.
|
||||
|
||||
dnl Copyright 1995, 1997, 2000, 2002, 2003, 2005 Free Software Foundation,
|
||||
dnl 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 4.0
|
||||
C 75x (G3): 4.5-11
|
||||
C 7400,7410 (G4): 4.5-11
|
||||
C 744x,745x (G4+): 6.0
|
||||
C power4/ppc970: 6.0
|
||||
C power5: 5.63
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C vl r6
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_mul_1)
|
||||
mtctr r5
|
||||
addi r3,r3,-4 C adjust res_ptr, it's offset before it's used
|
||||
li r12,0 C clear upper product reg
|
||||
addic r0,r0,0 C clear cy
|
||||
C Start software pipeline
|
||||
lwz r8,0(r4)
|
||||
bdz L(end3)
|
||||
lwzu r9,4(r4)
|
||||
mullw r11,r8,r6
|
||||
mulhwu r0,r8,r6
|
||||
bdz L(end1)
|
||||
C Software pipelined main loop
|
||||
L(loop):
|
||||
lwz r8,4(r4)
|
||||
mullw r10,r9,r6
|
||||
adde r5,r11,r12
|
||||
mulhwu r12,r9,r6
|
||||
stw r5,4(r3)
|
||||
bdz L(end2)
|
||||
lwzu r9,8(r4)
|
||||
mullw r11,r8,r6
|
||||
adde r7,r10,r0
|
||||
mulhwu r0,r8,r6
|
||||
stwu r7,8(r3)
|
||||
bdnz L(loop)
|
||||
C Finish software pipeline
|
||||
L(end1):
|
||||
mullw r10,r9,r6
|
||||
adde r5,r11,r12
|
||||
mulhwu r12,r9,r6
|
||||
stw r5,4(r3)
|
||||
adde r7,r10,r0
|
||||
stwu r7,8(r3)
|
||||
addze r3,r12
|
||||
blr
|
||||
L(end2):
|
||||
mullw r11,r8,r6
|
||||
adde r7,r10,r0
|
||||
mulhwu r0,r8,r6
|
||||
stwu r7,8(r3)
|
||||
adde r5,r11,r12
|
||||
stw r5,4(r3)
|
||||
addze r3,r0
|
||||
blr
|
||||
L(end3):
|
||||
mullw r11,r8,r6
|
||||
stw r11,4(r3)
|
||||
mulhwu r3,r8,r6
|
||||
blr
|
||||
EPILOGUE(mpn_mul_1)
|
||||
187
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p3-p7/aors_n.asm
vendored
Normal file
187
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p3-p7/aors_n.asm
vendored
Normal file
@@ -0,0 +1,187 @@
|
||||
dnl PowerPC-32 mpn_add_n/mpn_sub_n -- mpn addition and subtraction.
|
||||
|
||||
dnl Copyright 1999-2001, 2003-2005, 2007, 2011 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 cycles/limb
|
||||
C POWER3/PPC630 1.5
|
||||
C POWER4/PPC970 2
|
||||
C POWER5 2
|
||||
C POWER6 2.78
|
||||
C POWER7 2.15-2.87
|
||||
|
||||
C This code is based on powerpc64/aors_n.asm.
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C vp r5
|
||||
C n r6
|
||||
|
||||
ifdef(`OPERATION_add_n',`
|
||||
define(ADDSUBC, adde)
|
||||
define(ADDSUB, addc)
|
||||
define(func, mpn_add_n)
|
||||
define(func_nc, mpn_add_nc)
|
||||
define(GENRVAL, `addi r3, r3, 1')
|
||||
define(SETCBR, `addic r0, $1, -1')
|
||||
define(CLRCB, `addic r0, r0, 0')
|
||||
')
|
||||
ifdef(`OPERATION_sub_n',`
|
||||
define(ADDSUBC, subfe)
|
||||
define(ADDSUB, subfc)
|
||||
define(func, mpn_sub_n)
|
||||
define(func_nc, mpn_sub_nc)
|
||||
define(GENRVAL, `neg r3, r3')
|
||||
define(SETCBR, `subfic r0, $1, 0')
|
||||
define(CLRCB, `addic r0, r1, -1')
|
||||
')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_add_n mpn_add_nc mpn_sub_n mpn_sub_nc)
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(func_nc)
|
||||
SETCBR(r7)
|
||||
b L(ent)
|
||||
EPILOGUE()
|
||||
|
||||
PROLOGUE(func)
|
||||
CLRCB
|
||||
L(ent): stwu r1, -32(r1)
|
||||
rlwinm. r0, r6, 0,30,31 C r0 = n & 3, set cr0
|
||||
cmpwi cr6, r0, 2
|
||||
stw r28, 8(r1)
|
||||
addi r6, r6, 3 C compute count...
|
||||
stw r29, 12(r1)
|
||||
srwi r6, r6, 2 C ...for ctr
|
||||
stw r30, 16(r1)
|
||||
mtctr r6 C copy count into ctr
|
||||
stw r31, 20(r1)
|
||||
beq cr0, L(b00)
|
||||
blt cr6, L(b01)
|
||||
beq cr6, L(b10)
|
||||
|
||||
L(b11): lwz r8, 0(r4) C load s1 limb
|
||||
lwz r9, 0(r5) C load s2 limb
|
||||
lwz r10, 4(r4) C load s1 limb
|
||||
lwz r11, 4(r5) C load s2 limb
|
||||
lwz r12, 8(r4) C load s1 limb
|
||||
addi r4, r4, 12
|
||||
lwz r0, 8(r5) C load s2 limb
|
||||
addi r5, r5, 12
|
||||
ADDSUBC r29, r9, r8
|
||||
ADDSUBC r30, r11, r10
|
||||
ADDSUBC r31, r0, r12
|
||||
stw r29, 0(r3)
|
||||
stw r30, 4(r3)
|
||||
stw r31, 8(r3)
|
||||
addi r3, r3, 12
|
||||
bdnz L(go)
|
||||
b L(ret)
|
||||
|
||||
L(b01): lwz r12, 0(r4) C load s1 limb
|
||||
addi r4, r4, 4
|
||||
lwz r0, 0(r5) C load s2 limb
|
||||
addi r5, r5, 4
|
||||
ADDSUBC r31, r0, r12 C add
|
||||
stw r31, 0(r3)
|
||||
addi r3, r3, 4
|
||||
bdnz L(go)
|
||||
b L(ret)
|
||||
|
||||
L(b10): lwz r10, 0(r4) C load s1 limb
|
||||
lwz r11, 0(r5) C load s2 limb
|
||||
lwz r12, 4(r4) C load s1 limb
|
||||
addi r4, r4, 8
|
||||
lwz r0, 4(r5) C load s2 limb
|
||||
addi r5, r5, 8
|
||||
ADDSUBC r30, r11, r10 C add
|
||||
ADDSUBC r31, r0, r12 C add
|
||||
stw r30, 0(r3)
|
||||
stw r31, 4(r3)
|
||||
addi r3, r3, 8
|
||||
bdnz L(go)
|
||||
b L(ret)
|
||||
|
||||
L(b00): C INITCY C clear/set cy
|
||||
L(go): lwz r6, 0(r4) C load s1 limb
|
||||
lwz r7, 0(r5) C load s2 limb
|
||||
lwz r8, 4(r4) C load s1 limb
|
||||
lwz r9, 4(r5) C load s2 limb
|
||||
lwz r10, 8(r4) C load s1 limb
|
||||
lwz r11, 8(r5) C load s2 limb
|
||||
lwz r12, 12(r4) C load s1 limb
|
||||
lwz r0, 12(r5) C load s2 limb
|
||||
bdz L(end)
|
||||
|
||||
addi r4, r4, 16
|
||||
addi r5, r5, 16
|
||||
|
||||
ALIGN(16)
|
||||
L(top): ADDSUBC r28, r7, r6
|
||||
lwz r6, 0(r4) C load s1 limb
|
||||
lwz r7, 0(r5) C load s2 limb
|
||||
ADDSUBC r29, r9, r8
|
||||
lwz r8, 4(r4) C load s1 limb
|
||||
lwz r9, 4(r5) C load s2 limb
|
||||
ADDSUBC r30, r11, r10
|
||||
lwz r10, 8(r4) C load s1 limb
|
||||
lwz r11, 8(r5) C load s2 limb
|
||||
ADDSUBC r31, r0, r12
|
||||
lwz r12, 12(r4) C load s1 limb
|
||||
lwz r0, 12(r5) C load s2 limb
|
||||
stw r28, 0(r3)
|
||||
addi r4, r4, 16
|
||||
stw r29, 4(r3)
|
||||
addi r5, r5, 16
|
||||
stw r30, 8(r3)
|
||||
stw r31, 12(r3)
|
||||
addi r3, r3, 16
|
||||
bdnz L(top) C decrement ctr and loop back
|
||||
|
||||
L(end): ADDSUBC r28, r7, r6
|
||||
ADDSUBC r29, r9, r8
|
||||
ADDSUBC r30, r11, r10
|
||||
ADDSUBC r31, r0, r12
|
||||
stw r28, 0(r3)
|
||||
stw r29, 4(r3)
|
||||
stw r30, 8(r3)
|
||||
stw r31, 12(r3)
|
||||
|
||||
L(ret):
|
||||
lwz r28, 8(r1)
|
||||
lwz r29, 12(r1)
|
||||
subfe r3, r0, r0 C -cy
|
||||
lwz r30, 16(r1)
|
||||
GENRVAL
|
||||
lwz r31, 20(r1)
|
||||
addi r1, r1, 32
|
||||
blr
|
||||
EPILOGUE()
|
||||
155
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p3/gmp-mparam.h
vendored
Normal file
155
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p3/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,155 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
/* 450 MHz POWER3 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 2
|
||||
#define MOD_1_NORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 3
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 2
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 12
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 18
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 8
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 10
|
||||
#define MUL_TOOM33_THRESHOLD 38
|
||||
#define MUL_TOOM44_THRESHOLD 58
|
||||
#define MUL_TOOM6H_THRESHOLD 129
|
||||
#define MUL_TOOM8H_THRESHOLD 212
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 65
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 63
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 59
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 64
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 0 /* always */
|
||||
#define SQR_TOOM2_THRESHOLD 14
|
||||
#define SQR_TOOM3_THRESHOLD 53
|
||||
#define SQR_TOOM4_THRESHOLD 76
|
||||
#define SQR_TOOM6_THRESHOLD 106
|
||||
#define SQR_TOOM8_THRESHOLD 284
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 9
|
||||
#define SQRMOD_BNM1_THRESHOLD 9
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 220 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 220, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \
|
||||
{ 9, 5}, { 19, 6}, { 13, 7}, { 7, 6}, \
|
||||
{ 16, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \
|
||||
{ 11, 7}, { 23, 9}, { 7, 8}, { 15, 7}, \
|
||||
{ 33, 8}, { 23, 9}, { 15, 8}, { 35, 9}, \
|
||||
{ 23,10}, { 15, 9}, { 31, 8}, { 67, 9}, \
|
||||
{ 39, 8}, { 79, 9}, { 47,10}, { 31, 9}, \
|
||||
{ 63, 8}, { 127, 9}, { 71, 8}, { 143, 9}, \
|
||||
{ 79,10}, { 47,11}, { 31,10}, { 63, 9}, \
|
||||
{ 127, 8}, { 255, 9}, { 143,10}, { 79, 9}, \
|
||||
{ 159, 8}, { 319, 9}, { 175, 8}, { 351,10}, \
|
||||
{ 95, 9}, { 191, 8}, { 383,10}, { 111,11}, \
|
||||
{ 63,10}, { 127, 9}, { 255,10}, { 143, 9}, \
|
||||
{ 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \
|
||||
{ 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \
|
||||
{ 383,10}, { 207, 9}, { 415,12}, { 63,11}, \
|
||||
{ 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \
|
||||
{ 575,11}, { 159,10}, { 351, 9}, { 703, 8}, \
|
||||
{ 1407,11}, { 191,10}, { 415,11}, { 223,10}, \
|
||||
{ 447, 9}, { 895,12}, { 4096,13}, { 8192,14}, \
|
||||
{ 16384,15}, { 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 82
|
||||
#define MUL_FFT_THRESHOLD 2688
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 176 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 176, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \
|
||||
{ 13, 7}, { 7, 6}, { 16, 7}, { 9, 6}, \
|
||||
{ 19, 7}, { 11, 6}, { 23, 7}, { 13, 8}, \
|
||||
{ 7, 7}, { 19, 8}, { 11, 7}, { 23, 9}, \
|
||||
{ 7, 8}, { 15, 7}, { 31, 8}, { 23, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \
|
||||
{ 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 9}, { 71, 8}, { 143, 7}, { 287, 6}, \
|
||||
{ 575, 9}, { 79, 8}, { 159,10}, { 47, 9}, \
|
||||
{ 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \
|
||||
{ 255, 9}, { 143, 8}, { 287, 7}, { 575,10}, \
|
||||
{ 79, 9}, { 159, 8}, { 319, 9}, { 175,10}, \
|
||||
{ 95, 9}, { 191, 8}, { 383,10}, { 111, 9}, \
|
||||
{ 223,11}, { 63,10}, { 127, 9}, { 255,10}, \
|
||||
{ 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \
|
||||
{ 319,10}, { 175,11}, { 95,10}, { 191, 9}, \
|
||||
{ 383,10}, { 223,12}, { 63,11}, { 127,10}, \
|
||||
{ 287, 9}, { 575,11}, { 159,10}, { 351, 9}, \
|
||||
{ 703, 8}, { 1407,11}, { 191,10}, { 383,11}, \
|
||||
{ 223,10}, { 447, 9}, { 895,12}, { 4096,13}, \
|
||||
{ 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 87
|
||||
#define SQR_FFT_THRESHOLD 1728
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 2
|
||||
#define MULLO_DC_THRESHOLD 33
|
||||
#define MULLO_MUL_N_THRESHOLD 5240
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 32
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 123
|
||||
#define DC_BDIV_QR_THRESHOLD 34
|
||||
#define DC_BDIV_Q_THRESHOLD 84
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 42
|
||||
#define INV_NEWTON_THRESHOLD 129
|
||||
#define INV_APPR_THRESHOLD 124
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 148
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 38
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 748
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 748
|
||||
#define MUPI_DIV_QR_THRESHOLD 59
|
||||
#define MU_BDIV_QR_THRESHOLD 562
|
||||
#define MU_BDIV_Q_THRESHOLD 654
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 11
|
||||
#define HGCD_THRESHOLD 76
|
||||
#define GCD_DC_THRESHOLD 205
|
||||
#define GCDEXT_DC_THRESHOLD 174
|
||||
#define JACOBI_BASE_METHOD 1
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 14
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 27
|
||||
#define SET_STR_DC_THRESHOLD 181
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 525
|
||||
209
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p4/gmp-mparam.h
vendored
Normal file
209
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p4/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,209 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 1991, 1993, 1994, 1999-2004, 2008-2011, 2014 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
/* 1800 MHz PowerPC-970 */
|
||||
/* FFT tuning limit = 10000000 */
|
||||
/* Generated by tuneup.c, 2014-03-12, gcc 4.0 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 1
|
||||
#define MOD_1_NORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 7
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 5
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 42
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 14
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIV_QR_1N_PI1_METHOD 1
|
||||
#define DIV_QR_1_NORM_THRESHOLD 1
|
||||
#define DIV_QR_1_UNNORM_THRESHOLD 1
|
||||
#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD 45
|
||||
|
||||
#define DIV_1_VS_MUL_1_PERCENT 225
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 20
|
||||
#define MUL_TOOM33_THRESHOLD 73
|
||||
#define MUL_TOOM44_THRESHOLD 130
|
||||
#define MUL_TOOM6H_THRESHOLD 222
|
||||
#define MUL_TOOM8H_THRESHOLD 333
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 107
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 108
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 89
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 92
|
||||
#define MUL_TOOM43_TO_TOOM54_THRESHOLD 100
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 5
|
||||
#define SQR_TOOM2_THRESHOLD 30
|
||||
#define SQR_TOOM3_THRESHOLD 85
|
||||
#define SQR_TOOM4_THRESHOLD 160
|
||||
#define SQR_TOOM6_THRESHOLD 197
|
||||
#define SQR_TOOM8_THRESHOLD 357
|
||||
|
||||
#define MULMID_TOOM42_THRESHOLD 32
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 15
|
||||
#define SQRMOD_BNM1_THRESHOLD 16
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 444 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 444, 5}, { 17, 6}, { 9, 5}, { 21, 6}, \
|
||||
{ 11, 5}, { 23, 6}, { 21, 7}, { 11, 6}, \
|
||||
{ 24, 7}, { 13, 6}, { 28, 7}, { 15, 6}, \
|
||||
{ 31, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \
|
||||
{ 15, 7}, { 33, 8}, { 19, 7}, { 41, 8}, \
|
||||
{ 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \
|
||||
{ 39, 9}, { 23, 8}, { 51,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \
|
||||
{ 47, 8}, { 95,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 9}, { 79,10}, { 47, 9}, { 95,11}, \
|
||||
{ 31,10}, { 63, 9}, { 135,10}, { 79, 9}, \
|
||||
{ 167,10}, { 95, 9}, { 191, 8}, { 383,10}, \
|
||||
{ 111,11}, { 63,10}, { 127, 9}, { 255, 8}, \
|
||||
{ 511,10}, { 143, 9}, { 287, 8}, { 575, 9}, \
|
||||
{ 303,10}, { 159, 9}, { 319,11}, { 95,10}, \
|
||||
{ 191, 9}, { 383,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \
|
||||
{ 1087,10}, { 287, 9}, { 575,10}, { 303,11}, \
|
||||
{ 159,10}, { 335, 9}, { 671, 8}, { 1343,10}, \
|
||||
{ 351, 9}, { 703,11}, { 191,10}, { 383, 9}, \
|
||||
{ 767,10}, { 415, 9}, { 831,11}, { 223,10}, \
|
||||
{ 447,12}, { 127,11}, { 255,10}, { 543, 9}, \
|
||||
{ 1087,11}, { 287,10}, { 607, 9}, { 1215,11}, \
|
||||
{ 319,10}, { 671, 9}, { 1343,11}, { 351,10}, \
|
||||
{ 703, 9}, { 1407,12}, { 191,11}, { 383,10}, \
|
||||
{ 767,11}, { 415,10}, { 831,11}, { 447,13}, \
|
||||
{ 127,12}, { 255,11}, { 543,10}, { 1087,11}, \
|
||||
{ 607,10}, { 1215,12}, { 319,11}, { 671,10}, \
|
||||
{ 1343,11}, { 703,10}, { 1407,11}, { 735,12}, \
|
||||
{ 383,11}, { 767,10}, { 1535,11}, { 831,12}, \
|
||||
{ 447,10}, { 1791,11}, { 959,13}, { 255,12}, \
|
||||
{ 511,11}, { 1087,12}, { 575,11}, { 1215,10}, \
|
||||
{ 2431,12}, { 639,11}, { 1343,12}, { 703,11}, \
|
||||
{ 1407,13}, { 383,12}, { 767,11}, { 1535,12}, \
|
||||
{ 831,11}, { 1727,10}, { 3455,11}, { 1791,12}, \
|
||||
{ 959,14}, { 255,13}, { 511,12}, { 1215,11}, \
|
||||
{ 2431,13}, { 639,12}, { 1471,13}, { 767,12}, \
|
||||
{ 1727,11}, { 3455,12}, { 1791,14}, { 511,13}, \
|
||||
{ 1151,12}, { 2431,13}, { 8192,14}, { 16384,15}, \
|
||||
{ 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 157
|
||||
#define MUL_FFT_THRESHOLD 6784
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 340 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 340, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \
|
||||
{ 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \
|
||||
{ 28, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \
|
||||
{ 15, 7}, { 33, 8}, { 19, 7}, { 39, 8}, \
|
||||
{ 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \
|
||||
{ 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \
|
||||
{ 47,10}, { 31, 9}, { 79,10}, { 47, 9}, \
|
||||
{ 95,11}, { 31,10}, { 63, 9}, { 127, 8}, \
|
||||
{ 255, 9}, { 135,10}, { 79, 9}, { 159, 8}, \
|
||||
{ 319,10}, { 95, 9}, { 191, 8}, { 383, 9}, \
|
||||
{ 207,11}, { 63,10}, { 127, 9}, { 255, 8}, \
|
||||
{ 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \
|
||||
{ 575, 9}, { 303, 8}, { 607,10}, { 159, 9}, \
|
||||
{ 319,10}, { 175,11}, { 95,10}, { 191, 9}, \
|
||||
{ 383,10}, { 207,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \
|
||||
{ 1087,10}, { 287, 9}, { 575,10}, { 303, 9}, \
|
||||
{ 607,11}, { 159,10}, { 319, 9}, { 639,10}, \
|
||||
{ 335, 9}, { 671,10}, { 351, 9}, { 703,11}, \
|
||||
{ 191,10}, { 383, 9}, { 767,10}, { 415, 9}, \
|
||||
{ 831,11}, { 223,10}, { 447,12}, { 127,11}, \
|
||||
{ 255,10}, { 543, 9}, { 1087,11}, { 287,10}, \
|
||||
{ 607, 9}, { 1215,11}, { 319,10}, { 671,11}, \
|
||||
{ 351,10}, { 703,12}, { 191,11}, { 383,10}, \
|
||||
{ 767,11}, { 415,10}, { 831,11}, { 479,13}, \
|
||||
{ 127,12}, { 255,11}, { 543,10}, { 1087,11}, \
|
||||
{ 607,10}, { 1215,12}, { 319,11}, { 671,10}, \
|
||||
{ 1343,11}, { 703,10}, { 1407,11}, { 735,12}, \
|
||||
{ 383,11}, { 831,12}, { 447,11}, { 959,13}, \
|
||||
{ 255,12}, { 511,11}, { 1087,12}, { 575,11}, \
|
||||
{ 1215,12}, { 639,11}, { 1343,12}, { 703,11}, \
|
||||
{ 1407,13}, { 383,12}, { 831,11}, { 1727,12}, \
|
||||
{ 959,14}, { 255,13}, { 511,12}, { 1215,13}, \
|
||||
{ 639,12}, { 1471,13}, { 767,12}, { 1727,13}, \
|
||||
{ 895,12}, { 1919,14}, { 511,13}, { 1023,12}, \
|
||||
{ 2111,13}, { 1151,12}, { 2431,13}, { 8192,14}, \
|
||||
{ 16384,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 150
|
||||
#define SQR_FFT_THRESHOLD 4736
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 0 /* always */
|
||||
#define MULLO_DC_THRESHOLD 55
|
||||
#define MULLO_MUL_N_THRESHOLD 13463
|
||||
#define SQRLO_BASECASE_THRESHOLD 4
|
||||
#define SQRLO_DC_THRESHOLD 169
|
||||
#define SQRLO_SQR_THRESHOLD 9335
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 50
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 196
|
||||
#define DC_BDIV_QR_THRESHOLD 51
|
||||
#define DC_BDIV_Q_THRESHOLD 166
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 50
|
||||
#define INV_NEWTON_THRESHOLD 226
|
||||
#define INV_APPR_THRESHOLD 202
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 228
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 67
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 1187
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 1308
|
||||
#define MUPI_DIV_QR_THRESHOLD 114
|
||||
#define MU_BDIV_QR_THRESHOLD 998
|
||||
#define MU_BDIV_Q_THRESHOLD 1142
|
||||
|
||||
#define POWM_SEC_TABLE 3,28,78,480,1099
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 11
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 24
|
||||
#define SET_STR_DC_THRESHOLD 381
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 1002
|
||||
|
||||
#define FAC_DSC_THRESHOLD 179
|
||||
#define FAC_ODD_THRESHOLD 28
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 9
|
||||
#define HGCD_THRESHOLD 93
|
||||
#define HGCD_APPR_THRESHOLD 109
|
||||
#define HGCD_REDUCE_THRESHOLD 2479
|
||||
#define GCD_DC_THRESHOLD 379
|
||||
#define GCDEXT_DC_THRESHOLD 273
|
||||
#define JACOBI_BASE_METHOD 4
|
||||
156
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p5/gmp-mparam.h
vendored
Normal file
156
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p5/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
/* 1650 MHz POWER5 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 1
|
||||
#define MOD_1_NORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 8
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 6
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 9
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 50
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 18
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD 61
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 22
|
||||
#define MUL_TOOM33_THRESHOLD 57
|
||||
#define MUL_TOOM44_THRESHOLD 130
|
||||
#define MUL_TOOM6H_THRESHOLD 189
|
||||
#define MUL_TOOM8H_THRESHOLD 309
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 89
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 99
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 83
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 88
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 6
|
||||
#define SQR_TOOM2_THRESHOLD 40
|
||||
#define SQR_TOOM3_THRESHOLD 77
|
||||
#define SQR_TOOM4_THRESHOLD 124
|
||||
#define SQR_TOOM6_THRESHOLD 140
|
||||
#define SQR_TOOM8_THRESHOLD 238
|
||||
|
||||
#define MULMID_TOOM42_THRESHOLD 40
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 15
|
||||
#define SQRMOD_BNM1_THRESHOLD 16
|
||||
|
||||
#define POWM_SEC_TABLE 4,29,252,840,2080
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 412 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 412, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \
|
||||
{ 12, 5}, { 25, 6}, { 21, 7}, { 11, 6}, \
|
||||
{ 25, 7}, { 13, 6}, { 27, 7}, { 21, 8}, \
|
||||
{ 11, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \
|
||||
{ 19, 7}, { 39, 8}, { 23, 7}, { 47, 8}, \
|
||||
{ 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \
|
||||
{ 51,10}, { 15, 9}, { 31, 8}, { 67, 9}, \
|
||||
{ 39, 8}, { 79, 9}, { 55,10}, { 31, 9}, \
|
||||
{ 79,10}, { 47, 9}, { 95,11}, { 31,10}, \
|
||||
{ 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \
|
||||
{ 95,11}, { 63,10}, { 127, 9}, { 255,10}, \
|
||||
{ 143, 9}, { 287,10}, { 159,11}, { 95,10}, \
|
||||
{ 191,12}, { 63,11}, { 127,10}, { 255, 9}, \
|
||||
{ 511,10}, { 271, 9}, { 543,10}, { 287,11}, \
|
||||
{ 159,10}, { 335, 9}, { 671,10}, { 351, 9}, \
|
||||
{ 703,11}, { 191,10}, { 383, 9}, { 767,10}, \
|
||||
{ 415, 9}, { 831,11}, { 223,12}, { 4096,13}, \
|
||||
{ 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 71
|
||||
#define MUL_FFT_THRESHOLD 4736
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 340 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 340, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \
|
||||
{ 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \
|
||||
{ 27, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \
|
||||
{ 15, 7}, { 33, 8}, { 19, 7}, { 39, 8}, \
|
||||
{ 23, 7}, { 47, 8}, { 27, 9}, { 15, 8}, \
|
||||
{ 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 67, 9}, { 47,10}, { 31, 9}, \
|
||||
{ 71,10}, { 47,11}, { 31,10}, { 63, 9}, \
|
||||
{ 127, 8}, { 255, 9}, { 135,10}, { 79, 9}, \
|
||||
{ 159,10}, { 95, 9}, { 191,11}, { 63,10}, \
|
||||
{ 127, 9}, { 255, 8}, { 511, 9}, { 271,10}, \
|
||||
{ 143, 9}, { 287, 8}, { 575, 9}, { 303,10}, \
|
||||
{ 159,11}, { 95,10}, { 191,12}, { 63,11}, \
|
||||
{ 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \
|
||||
{ 543,10}, { 287, 9}, { 575,10}, { 303,11}, \
|
||||
{ 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \
|
||||
{ 671,10}, { 351,11}, { 191,10}, { 383, 9}, \
|
||||
{ 767,10}, { 415,11}, { 223,10}, { 447,12}, \
|
||||
{ 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 76
|
||||
#define SQR_FFT_THRESHOLD 3712
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 2
|
||||
#define MULLO_DC_THRESHOLD 68
|
||||
#define MULLO_MUL_N_THRESHOLD 9236
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 69
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 220
|
||||
#define DC_BDIV_QR_THRESHOLD 75
|
||||
#define DC_BDIV_Q_THRESHOLD 188
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 54
|
||||
#define INV_NEWTON_THRESHOLD 230
|
||||
#define INV_APPR_THRESHOLD 230
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 278
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 87
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 1210
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 1308
|
||||
#define MUPI_DIV_QR_THRESHOLD 106
|
||||
#define MU_BDIV_QR_THRESHOLD 1017
|
||||
#define MU_BDIV_Q_THRESHOLD 1210
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 14
|
||||
#define HGCD_THRESHOLD 110
|
||||
#define HGCD_APPR_THRESHOLD 138
|
||||
#define HGCD_REDUCE_THRESHOLD 2578
|
||||
#define GCD_DC_THRESHOLD 408
|
||||
#define GCDEXT_DC_THRESHOLD 298
|
||||
#define JACOBI_BASE_METHOD 4
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 13
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 24
|
||||
#define SET_STR_DC_THRESHOLD 527
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 1090
|
||||
165
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p6/gmp-mparam.h
vendored
Normal file
165
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p6/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,165 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 1991, 1993, 1994, 1999-2004, 2008-2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
/* 3500 MHz POWER6 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 2
|
||||
#define MOD_1_NORM_THRESHOLD 3
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 3
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 3
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD MP_SIZE_T_MAX
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 0 /* never mpn_mod_1s_2p */
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 8
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 19
|
||||
#define MUL_TOOM33_THRESHOLD 55
|
||||
#define MUL_TOOM44_THRESHOLD 88
|
||||
#define MUL_TOOM6H_THRESHOLD 137
|
||||
#define MUL_TOOM8H_THRESHOLD 181
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 57
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 56
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 57
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 56
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 0 /* always */
|
||||
#define SQR_TOOM2_THRESHOLD 30
|
||||
#define SQR_TOOM3_THRESHOLD 56
|
||||
#define SQR_TOOM4_THRESHOLD 130
|
||||
#define SQR_TOOM6_THRESHOLD 189
|
||||
#define SQR_TOOM8_THRESHOLD 296
|
||||
|
||||
#define MULMID_TOOM42_THRESHOLD 26
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 7
|
||||
#define SQRMOD_BNM1_THRESHOLD 12
|
||||
|
||||
#define POWM_SEC_TABLE 2,26,127,453,1068
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 212 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 212, 5}, { 13, 6}, { 7, 5}, { 15, 6}, \
|
||||
{ 13, 7}, { 7, 6}, { 16, 7}, { 9, 6}, \
|
||||
{ 19, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \
|
||||
{ 11, 7}, { 25, 9}, { 7, 8}, { 15, 7}, \
|
||||
{ 31, 8}, { 19, 7}, { 39, 8}, { 23, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23, 8}, { 47,10}, \
|
||||
{ 15, 9}, { 31, 8}, { 63, 9}, { 39, 8}, \
|
||||
{ 79, 9}, { 47,10}, { 31, 9}, { 63, 8}, \
|
||||
{ 127, 9}, { 71, 8}, { 143, 7}, { 287, 9}, \
|
||||
{ 79,10}, { 47,11}, { 31,10}, { 63, 9}, \
|
||||
{ 127, 8}, { 255, 7}, { 511, 9}, { 143, 8}, \
|
||||
{ 287,10}, { 79, 9}, { 159, 8}, { 319, 9}, \
|
||||
{ 175, 8}, { 351,10}, { 95, 9}, { 191, 8}, \
|
||||
{ 383, 9}, { 207,10}, { 111,11}, { 63,10}, \
|
||||
{ 127, 9}, { 255, 8}, { 511,10}, { 143, 9}, \
|
||||
{ 287, 8}, { 575,10}, { 159, 9}, { 319,10}, \
|
||||
{ 175, 9}, { 351,11}, { 95,10}, { 191, 9}, \
|
||||
{ 383,10}, { 207, 9}, { 415,12}, { 63,11}, \
|
||||
{ 127,10}, { 255, 9}, { 511,10}, { 287, 9}, \
|
||||
{ 575,11}, { 159,10}, { 351, 9}, { 703,11}, \
|
||||
{ 191,10}, { 415, 9}, { 831,11}, { 223,10}, \
|
||||
{ 447,12}, { 4096,13}, { 8192,14}, { 16384,15}, \
|
||||
{ 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 89
|
||||
#define MUL_FFT_THRESHOLD 1728
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 184 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 184, 5}, { 6, 4}, { 13, 5}, { 13, 6}, \
|
||||
{ 7, 5}, { 15, 6}, { 13, 7}, { 7, 6}, \
|
||||
{ 16, 7}, { 9, 6}, { 19, 7}, { 11, 6}, \
|
||||
{ 23, 7}, { 13, 8}, { 7, 7}, { 19, 8}, \
|
||||
{ 11, 7}, { 23, 9}, { 7, 8}, { 23, 9}, \
|
||||
{ 15, 8}, { 39, 9}, { 23,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 63, 9}, { 39, 8}, { 79, 9}, \
|
||||
{ 47,10}, { 31, 9}, { 63, 8}, { 127, 7}, \
|
||||
{ 255, 9}, { 71, 8}, { 143, 7}, { 287, 6}, \
|
||||
{ 575, 9}, { 79,10}, { 47,11}, { 31,10}, \
|
||||
{ 63, 9}, { 127, 8}, { 255, 9}, { 143, 8}, \
|
||||
{ 287, 7}, { 575,10}, { 79, 9}, { 159, 8}, \
|
||||
{ 319, 9}, { 175, 8}, { 351,10}, { 95, 9}, \
|
||||
{ 191, 8}, { 383, 9}, { 207,10}, { 111, 9}, \
|
||||
{ 223,11}, { 63,10}, { 127, 9}, { 255,10}, \
|
||||
{ 143, 9}, { 287, 8}, { 575,10}, { 159, 9}, \
|
||||
{ 319,10}, { 175, 9}, { 351,11}, { 95,10}, \
|
||||
{ 191, 9}, { 383,10}, { 207, 9}, { 415,10}, \
|
||||
{ 223,12}, { 63,11}, { 127,10}, { 255, 9}, \
|
||||
{ 511,10}, { 287, 9}, { 575,11}, { 159,10}, \
|
||||
{ 351, 9}, { 703, 8}, { 1407,11}, { 191,10}, \
|
||||
{ 415,11}, { 223,10}, { 447, 9}, { 895,12}, \
|
||||
{ 4096,13}, { 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 92
|
||||
#define SQR_FFT_THRESHOLD 1600
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 2
|
||||
#define MULLO_DC_THRESHOLD 57
|
||||
#define MULLO_MUL_N_THRESHOLD 3176
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 52
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 187
|
||||
#define DC_BDIV_QR_THRESHOLD 64
|
||||
#define DC_BDIV_Q_THRESHOLD 146
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 68
|
||||
#define INV_NEWTON_THRESHOLD 182
|
||||
#define INV_APPR_THRESHOLD 182
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 186
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 60
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 924
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 807
|
||||
#define MUPI_DIV_QR_THRESHOLD 73
|
||||
#define MU_BDIV_QR_THRESHOLD 667
|
||||
#define MU_BDIV_Q_THRESHOLD 823
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 8
|
||||
#define HGCD_THRESHOLD 61
|
||||
#define HGCD_APPR_THRESHOLD 50
|
||||
#define HGCD_REDUCE_THRESHOLD 974
|
||||
#define GCD_DC_THRESHOLD 195
|
||||
#define GCDEXT_DC_THRESHOLD 134
|
||||
#define JACOBI_BASE_METHOD 4
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 9
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 21
|
||||
#define SET_STR_DC_THRESHOLD 190
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 411
|
||||
170
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p7/gmp-mparam.h
vendored
Normal file
170
blender-5.2.0/extern/gmp-source/mpn/powerpc32/p7/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
/* PowerPC-32 gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 2017 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU MP Library.
|
||||
|
||||
The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
it under the terms of either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
/* 4150 MHz POWER8/T4 */
|
||||
/* FFT tuning limit = 0.5 M */
|
||||
/* Generated by tuneup.c, 2017-02-18, gcc 6.1 */
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD 0 /* always */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_1P_METHOD 1
|
||||
#define MOD_1_NORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1_UNNORM_THRESHOLD 0 /* always */
|
||||
#define MOD_1N_TO_MOD_1_1_THRESHOLD 9
|
||||
#define MOD_1U_TO_MOD_1_1_THRESHOLD 8
|
||||
#define MOD_1_1_TO_MOD_1_2_THRESHOLD 0 /* never mpn_mod_1_1p */
|
||||
#define MOD_1_2_TO_MOD_1_4_THRESHOLD 22
|
||||
#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 11
|
||||
#define USE_PREINV_DIVREM_1 1
|
||||
#define DIV_QR_1N_PI1_METHOD 2
|
||||
#define DIV_QR_1_NORM_THRESHOLD 4
|
||||
#define DIV_QR_1_UNNORM_THRESHOLD 3
|
||||
#define DIV_QR_2_PI2_THRESHOLD 15
|
||||
#define DIVEXACT_1_THRESHOLD 0 /* always */
|
||||
#define BMOD_1_TO_MOD_1_THRESHOLD 39
|
||||
|
||||
#define DIV_1_VS_MUL_1_PERCENT 343
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 20
|
||||
#define MUL_TOOM33_THRESHOLD 73
|
||||
#define MUL_TOOM44_THRESHOLD 202
|
||||
#define MUL_TOOM6H_THRESHOLD 286
|
||||
#define MUL_TOOM8H_THRESHOLD 430
|
||||
|
||||
#define MUL_TOOM32_TO_TOOM43_THRESHOLD 137
|
||||
#define MUL_TOOM32_TO_TOOM53_THRESHOLD 140
|
||||
#define MUL_TOOM42_TO_TOOM53_THRESHOLD 128
|
||||
#define MUL_TOOM42_TO_TOOM63_THRESHOLD 145
|
||||
#define MUL_TOOM43_TO_TOOM54_THRESHOLD 121
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 0 /* always */
|
||||
#define SQR_TOOM2_THRESHOLD 26
|
||||
#define SQR_TOOM3_THRESHOLD 97
|
||||
#define SQR_TOOM4_THRESHOLD 236
|
||||
#define SQR_TOOM6_THRESHOLD 318
|
||||
#define SQR_TOOM8_THRESHOLD 478
|
||||
|
||||
#define MULMID_TOOM42_THRESHOLD 34
|
||||
|
||||
#define MULMOD_BNM1_THRESHOLD 18
|
||||
#define SQRMOD_BNM1_THRESHOLD 18
|
||||
|
||||
#define MUL_FFT_MODF_THRESHOLD 444 /* k = 5 */
|
||||
#define MUL_FFT_TABLE3 \
|
||||
{ { 444, 5}, { 21, 6}, { 12, 5}, { 25, 6}, \
|
||||
{ 13, 5}, { 27, 6}, { 21, 7}, { 11, 6}, \
|
||||
{ 25, 7}, { 13, 6}, { 27, 7}, { 17, 6}, \
|
||||
{ 35, 7}, { 21, 8}, { 11, 7}, { 27, 8}, \
|
||||
{ 15, 7}, { 35, 8}, { 19, 7}, { 41, 8}, \
|
||||
{ 27, 9}, { 15, 8}, { 39, 9}, { 23, 8}, \
|
||||
{ 51,10}, { 15, 9}, { 31, 8}, { 63, 9}, \
|
||||
{ 39, 8}, { 79, 9}, { 47,10}, { 31, 9}, \
|
||||
{ 79,10}, { 47,11}, { 31,10}, { 63, 9}, \
|
||||
{ 135,10}, { 79, 9}, { 159,10}, { 95, 9}, \
|
||||
{ 191,10}, { 111,11}, { 63,10}, { 127, 9}, \
|
||||
{ 255,10}, { 143, 9}, { 287,10}, { 159,11}, \
|
||||
{ 95,10}, { 191,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543, 8}, \
|
||||
{ 1087,10}, { 287,11}, { 159,10}, { 319, 9}, \
|
||||
{ 639,10}, { 351,11}, { 191,10}, { 415, 9}, \
|
||||
{ 831,11}, { 223,12}, { 4096,13}, { 8192,14}, \
|
||||
{ 16384,15}, { 32768,16} }
|
||||
#define MUL_FFT_TABLE3_SIZE 70
|
||||
#define MUL_FFT_THRESHOLD 4544
|
||||
|
||||
#define SQR_FFT_MODF_THRESHOLD 332 /* k = 5 */
|
||||
#define SQR_FFT_TABLE3 \
|
||||
{ { 332, 5}, { 21, 6}, { 11, 5}, { 23, 6}, \
|
||||
{ 21, 7}, { 11, 6}, { 24, 7}, { 13, 6}, \
|
||||
{ 27, 7}, { 15, 6}, { 31, 7}, { 21, 8}, \
|
||||
{ 11, 7}, { 27, 8}, { 15, 7}, { 33, 8}, \
|
||||
{ 19, 7}, { 39, 8}, { 27, 9}, { 15, 8}, \
|
||||
{ 39, 9}, { 23, 8}, { 47,10}, { 15, 9}, \
|
||||
{ 31, 8}, { 63, 9}, { 47,10}, { 31, 9}, \
|
||||
{ 79,10}, { 47,11}, { 31,10}, { 63, 9}, \
|
||||
{ 127, 8}, { 255, 9}, { 135,10}, { 95, 9}, \
|
||||
{ 191,11}, { 63,10}, { 127, 9}, { 255, 8}, \
|
||||
{ 511, 9}, { 271,10}, { 143, 9}, { 287, 8}, \
|
||||
{ 575, 9}, { 303, 8}, { 607,10}, { 159,11}, \
|
||||
{ 95,10}, { 191,12}, { 63,11}, { 127,10}, \
|
||||
{ 255, 9}, { 511,10}, { 271, 9}, { 543,10}, \
|
||||
{ 287, 9}, { 575,10}, { 303, 9}, { 607,11}, \
|
||||
{ 159,10}, { 319, 9}, { 639,10}, { 351, 9}, \
|
||||
{ 703,11}, { 191,10}, { 383, 9}, { 767,10}, \
|
||||
{ 415,11}, { 223,10}, { 447,12}, { 4096,13}, \
|
||||
{ 8192,14}, { 16384,15}, { 32768,16} }
|
||||
#define SQR_FFT_TABLE3_SIZE 75
|
||||
#define SQR_FFT_THRESHOLD 3520
|
||||
|
||||
#define MULLO_BASECASE_THRESHOLD 0 /* always */
|
||||
#define MULLO_DC_THRESHOLD 36
|
||||
#define MULLO_MUL_N_THRESHOLD 8648
|
||||
#define SQRLO_BASECASE_THRESHOLD 5
|
||||
#define SQRLO_DC_THRESHOLD 193
|
||||
#define SQRLO_SQR_THRESHOLD 6675
|
||||
|
||||
#define DC_DIV_QR_THRESHOLD 33
|
||||
#define DC_DIVAPPR_Q_THRESHOLD 134
|
||||
#define DC_BDIV_QR_THRESHOLD 51
|
||||
#define DC_BDIV_Q_THRESHOLD 134
|
||||
|
||||
#define INV_MULMOD_BNM1_THRESHOLD 66
|
||||
#define INV_NEWTON_THRESHOLD 132
|
||||
#define INV_APPR_THRESHOLD 131
|
||||
|
||||
#define BINV_NEWTON_THRESHOLD 292
|
||||
#define REDC_1_TO_REDC_N_THRESHOLD 67
|
||||
|
||||
#define MU_DIV_QR_THRESHOLD 1334
|
||||
#define MU_DIVAPPR_Q_THRESHOLD 1334
|
||||
#define MUPI_DIV_QR_THRESHOLD 62
|
||||
#define MU_BDIV_QR_THRESHOLD 1142
|
||||
#define MU_BDIV_Q_THRESHOLD 1470
|
||||
|
||||
#define POWM_SEC_TABLE 3,25,114,480,1486
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 8
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 14
|
||||
#define SET_STR_DC_THRESHOLD 644
|
||||
#define SET_STR_PRECOMPUTE_THRESHOLD 1365
|
||||
|
||||
#define FAC_DSC_THRESHOLD 107
|
||||
#define FAC_ODD_THRESHOLD 29
|
||||
|
||||
#define MATRIX22_STRASSEN_THRESHOLD 16
|
||||
#define HGCD_THRESHOLD 95
|
||||
#define HGCD_APPR_THRESHOLD 121
|
||||
#define HGCD_REDUCE_THRESHOLD 2681
|
||||
#define GCD_DC_THRESHOLD 456
|
||||
#define GCDEXT_DC_THRESHOLD 386
|
||||
#define JACOBI_BASE_METHOD 4
|
||||
128
blender-5.2.0/extern/gmp-source/mpn/powerpc32/powerpc-defs.m4
vendored
Normal file
128
blender-5.2.0/extern/gmp-source/mpn/powerpc32/powerpc-defs.m4
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
divert(-1)
|
||||
|
||||
dnl m4 macros for PowerPC assembler (32 and 64 bit).
|
||||
|
||||
dnl Copyright 2000, 2002, 2003, 2017, 2018, 2020 Free Software Foundation,
|
||||
dnl 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 Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
dnl This is the same as the default in mpn/asm-defs.m4, but with ALIGN(4)
|
||||
dnl not 8.
|
||||
dnl
|
||||
dnl 4-byte alignment is normally enough, certainly it's what gcc gives. We
|
||||
dnl don't want bigger alignment within PROLOGUE since it can introduce
|
||||
dnl padding into multiple-entrypoint routines, and with gas such padding is
|
||||
dnl zero words, which are not valid instructions.
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
` TEXT
|
||||
ALIGN(4)
|
||||
GLOBL `$1' GLOBL_ATTR
|
||||
TYPE(`$1',`function')
|
||||
`$1'LABEL_SUFFIX')
|
||||
|
||||
|
||||
dnl Usage: r0 ... r31, cr0 ... cr7
|
||||
dnl
|
||||
dnl Registers names, either left as "r0" etc or mapped to plain 0 etc,
|
||||
dnl according to the result of the GMP_ASM_POWERPC_REGISTERS configure
|
||||
dnl test.
|
||||
|
||||
ifelse(WANT_R_REGISTERS,no,`
|
||||
forloop(i,0,31,`deflit(`r'i,i)')
|
||||
forloop(i,0,31,`deflit(`v'i,i)')
|
||||
forloop(i,0,31,`deflit(`f'i,i)')
|
||||
forloop(i,0,7, `deflit(`cr'i,i)')
|
||||
')
|
||||
|
||||
|
||||
dnl Usage: ASSERT(cond,instructions)
|
||||
dnl
|
||||
dnl If WANT_ASSERT is 1, output the given instructions and expect the given
|
||||
dnl flags condition to then be satisfied. For example,
|
||||
dnl
|
||||
dnl ASSERT(eq, `cmpwi r6, 123')
|
||||
dnl
|
||||
dnl The instructions can be omitted to just assert a flags condition with
|
||||
dnl no extra calculation. For example,
|
||||
dnl
|
||||
dnl ASSERT(ne)
|
||||
dnl
|
||||
dnl The condition can be omitted to just output the given instructions when
|
||||
dnl assertion checking is wanted. For example,
|
||||
dnl
|
||||
dnl ASSERT(, `mr r11, r0')
|
||||
dnl
|
||||
dnl Using a zero word for an illegal instruction is probably not ideal,
|
||||
dnl since it marks the beginning of a traceback table in the 64-bit ABI.
|
||||
dnl But assertions are only for development, so it doesn't matter too much.
|
||||
|
||||
define(ASSERT,
|
||||
m4_assert_numargs_range(1,2)
|
||||
m4_assert_defined(`WANT_ASSERT')
|
||||
`ifelse(WANT_ASSERT,1,
|
||||
`C ASSERT
|
||||
$2
|
||||
ifelse(`$1',,,
|
||||
` b$1 L(ASSERT_ok`'ASSERT_counter)
|
||||
W32 0 C assertion failed
|
||||
L(ASSERT_ok`'ASSERT_counter):
|
||||
define(`ASSERT_counter',incr(ASSERT_counter))
|
||||
')')')
|
||||
|
||||
define(ASSERT_counter,1)
|
||||
|
||||
dnl Manually assemble some new instructions
|
||||
dnl
|
||||
|
||||
define(`maddld',m4_assert_numargs(4)`dnl
|
||||
.long eval(0x10000033+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11)+m4_lshift($4,6))')
|
||||
|
||||
define(`maddhdu',m4_assert_numargs(4)`dnl
|
||||
.long eval(0x10000031+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11)+m4_lshift($4,6))')
|
||||
|
||||
define(`popcntd',m4_assert_numargs(2)`dnl
|
||||
.long eval(0x7c0003f4+m4_lshift($2,21)+m4_lshift($1,16))')
|
||||
|
||||
define(`divdeu',m4_assert_numargs(3)`dnl
|
||||
.long eval(0x7c000312+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11))')
|
||||
|
||||
define(`addex',m4_assert_numargs(4)`dnl
|
||||
.long eval(0x7c000154+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11)+m4_lshift($4,9))')
|
||||
|
||||
define(`aese',m4_assert_numargs(3)`dnl
|
||||
.long eval(0x10000508+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11))')
|
||||
|
||||
define(`aeselst',m4_assert_numargs(3)`dnl
|
||||
.long eval(0x10000509+m4_lshift($1,21)+m4_lshift($2,16)+m4_lshift($3,11))')
|
||||
|
||||
divert
|
||||
166
blender-5.2.0/extern/gmp-source/mpn/powerpc32/rshift.asm
vendored
Normal file
166
blender-5.2.0/extern/gmp-source/mpn/powerpc32/rshift.asm
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
dnl PowerPC-32 mpn_rshift -- Shift a number right.
|
||||
|
||||
dnl Copyright 1995, 1998, 2000, 2002-2005 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 3.0
|
||||
C 75x (G3): 3.0
|
||||
C 7400,7410 (G4): 3.0
|
||||
C 7445,7455 (G4+): 2.5
|
||||
C 7447,7457 (G4+): 2.25
|
||||
C power4/ppc970: 2.5
|
||||
C power5: 2.5
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C cnt r6
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_rshift)
|
||||
cmpwi cr0, r5, 30 C more than 30 limbs?
|
||||
addi r7, r3, -4 C dst-4
|
||||
bgt L(BIG) C branch if more than 12 limbs
|
||||
|
||||
mtctr r5 C copy size into CTR
|
||||
subfic r8, r6, 32
|
||||
lwz r11, 0(r4) C load first s1 limb
|
||||
slw r3, r11, r8 C compute function return value
|
||||
bdz L(end1)
|
||||
|
||||
L(oop): lwzu r10, 4(r4)
|
||||
srw r9, r11, r6
|
||||
slw r12, r10, r8
|
||||
or r9, r9, r12
|
||||
stwu r9, 4(r7)
|
||||
bdz L(end2)
|
||||
lwzu r11, 4(r4)
|
||||
srw r9, r10, r6
|
||||
slw r12, r11, r8
|
||||
or r9, r9, r12
|
||||
stwu r9, 4(r7)
|
||||
bdnz L(oop)
|
||||
|
||||
L(end1):
|
||||
srw r0, r11, r6
|
||||
stw r0, 4(r7)
|
||||
blr
|
||||
L(end2):
|
||||
srw r0, r10, r6
|
||||
stw r0, 4(r7)
|
||||
blr
|
||||
|
||||
L(BIG):
|
||||
stwu r1, -48(r1)
|
||||
stmw r24, 8(r1) C save registers we are supposed to preserve
|
||||
lwz r9, 0(r4)
|
||||
subfic r8, r6, 32
|
||||
slw r3, r9, r8 C compute function return value
|
||||
srw r0, r9, r6
|
||||
addi r5, r5, -1
|
||||
|
||||
andi. r10, r5, 3 C count for spill loop
|
||||
beq L(e)
|
||||
mtctr r10
|
||||
lwzu r28, 4(r4)
|
||||
bdz L(xe0)
|
||||
|
||||
L(loop0):
|
||||
srw r12, r28, r6
|
||||
slw r24, r28, r8
|
||||
lwzu r28, 4(r4)
|
||||
or r24, r0, r24
|
||||
stwu r24, 4(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loop0) C taken at most once!
|
||||
|
||||
L(xe0): srw r12, r28, r6
|
||||
slw r24, r28, r8
|
||||
or r24, r0, r24
|
||||
stwu r24, 4(r7)
|
||||
mr r0, r12
|
||||
|
||||
L(e): srwi r5, r5, 2 C count for unrolled loop
|
||||
addi r5, r5, -1
|
||||
mtctr r5
|
||||
lwz r28, 4(r4)
|
||||
lwz r29, 8(r4)
|
||||
lwz r30, 12(r4)
|
||||
lwzu r31, 16(r4)
|
||||
|
||||
L(loopU):
|
||||
srw r9, r28, r6
|
||||
slw r24, r28, r8
|
||||
lwz r28, 4(r4)
|
||||
srw r10, r29, r6
|
||||
slw r25, r29, r8
|
||||
lwz r29, 8(r4)
|
||||
srw r11, r30, r6
|
||||
slw r26, r30, r8
|
||||
lwz r30, 12(r4)
|
||||
srw r12, r31, r6
|
||||
slw r27, r31, r8
|
||||
lwzu r31, 16(r4)
|
||||
or r24, r0, r24
|
||||
stw r24, 4(r7)
|
||||
or r25, r9, r25
|
||||
stw r25, 8(r7)
|
||||
or r26, r10, r26
|
||||
stw r26, 12(r7)
|
||||
or r27, r11, r27
|
||||
stwu r27, 16(r7)
|
||||
mr r0, r12
|
||||
bdnz L(loopU)
|
||||
|
||||
srw r9, r28, r6
|
||||
slw r24, r28, r8
|
||||
srw r10, r29, r6
|
||||
slw r25, r29, r8
|
||||
srw r11, r30, r6
|
||||
slw r26, r30, r8
|
||||
srw r12, r31, r6
|
||||
slw r27, r31, r8
|
||||
or r24, r0, r24
|
||||
stw r24, 4(r7)
|
||||
or r25, r9, r25
|
||||
stw r25, 8(r7)
|
||||
or r26, r10, r26
|
||||
stw r26, 12(r7)
|
||||
or r27, r11, r27
|
||||
stw r27, 16(r7)
|
||||
|
||||
stw r12, 20(r7)
|
||||
lmw r24, 8(r1) C restore registers
|
||||
addi r1, r1, 48
|
||||
blr
|
||||
EPILOGUE()
|
||||
143
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sec_tabselect.asm
vendored
Normal file
143
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sec_tabselect.asm
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
dnl PowerPC-32 mpn_sec_tabselect.
|
||||
|
||||
dnl Contributed to the GNU project by Torbjörn Granlund.
|
||||
|
||||
dnl Copyright 2011-2013 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: ?
|
||||
C 75x (G3): ?
|
||||
C 7400,7410 (G4): 2.5
|
||||
C 744x,745x (G4+): 2.0
|
||||
C power4/ppc970: 2.0
|
||||
C power5: ?
|
||||
|
||||
define(`rp', `r3')
|
||||
define(`tp', `r4')
|
||||
define(`n', `r5')
|
||||
define(`nents', `r6')
|
||||
define(`which', `r7')
|
||||
|
||||
define(`i', `r8')
|
||||
define(`j', `r9')
|
||||
define(`stride', `r12')
|
||||
define(`mask', `r11')
|
||||
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_sec_tabselect)
|
||||
stwu r1, -32(r1)
|
||||
addic. j, n, -4 C outer loop induction variable
|
||||
stmw r27, 8(r1)
|
||||
slwi stride, n, 2
|
||||
|
||||
blt cr0, L(outer_end)
|
||||
L(outer_top):
|
||||
mtctr nents
|
||||
mr r10, tp
|
||||
li r28, 0
|
||||
li r29, 0
|
||||
li r30, 0
|
||||
li r31, 0
|
||||
addic. j, j, -4 C outer loop induction variable
|
||||
mr i, which
|
||||
|
||||
ALIGN(16)
|
||||
L(top): addic i, i, -1 C set carry iff i != 0
|
||||
subfe mask, mask, mask
|
||||
lwz r0, 0(tp)
|
||||
lwz r27, 4(tp)
|
||||
and r0, r0, mask
|
||||
and r27, r27, mask
|
||||
or r28, r28, r0
|
||||
or r29, r29, r27
|
||||
lwz r0, 8(tp)
|
||||
lwz r27, 12(tp)
|
||||
and r0, r0, mask
|
||||
and r27, r27, mask
|
||||
or r30, r30, r0
|
||||
or r31, r31, r27
|
||||
add tp, tp, stride
|
||||
bdnz L(top)
|
||||
|
||||
stw r28, 0(rp)
|
||||
stw r29, 4(rp)
|
||||
stw r30, 8(rp)
|
||||
stw r31, 12(rp)
|
||||
addi tp, r10, 16
|
||||
addi rp, rp, 16
|
||||
bge cr0, L(outer_top)
|
||||
L(outer_end):
|
||||
|
||||
andi. r0, n, 2
|
||||
beq cr0, L(b0x)
|
||||
L(b1x): mtctr nents
|
||||
mr r10, tp
|
||||
li r28, 0
|
||||
li r29, 0
|
||||
mr i, which
|
||||
ALIGN(16)
|
||||
L(tp2): addic i, i, -1
|
||||
subfe mask, mask, mask
|
||||
lwz r0, 0(tp)
|
||||
lwz r27, 4(tp)
|
||||
and r0, r0, mask
|
||||
and r27, r27, mask
|
||||
or r28, r28, r0
|
||||
or r29, r29, r27
|
||||
add tp, tp, stride
|
||||
bdnz L(tp2)
|
||||
stw r28, 0(rp)
|
||||
stw r29, 4(rp)
|
||||
addi tp, r10, 8
|
||||
addi rp, rp, 8
|
||||
|
||||
L(b0x): andi. r0, n, 1
|
||||
beq cr0, L(b00)
|
||||
L(b01): mtctr nents
|
||||
mr r10, tp
|
||||
li r28, 0
|
||||
mr i, which
|
||||
ALIGN(16)
|
||||
L(tp1): addic i, i, -1
|
||||
subfe mask, mask, mask
|
||||
lwz r0, 0(tp)
|
||||
and r0, r0, mask
|
||||
or r28, r28, r0
|
||||
add tp, tp, stride
|
||||
bdnz L(tp1)
|
||||
stw r28, 0(rp)
|
||||
|
||||
L(b00): lmw r27, 8(r1)
|
||||
addi r1, r1, 32
|
||||
blr
|
||||
EPILOGUE()
|
||||
80
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sqr_diag_addlsh1.asm
vendored
Normal file
80
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sqr_diag_addlsh1.asm
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
dnl PowerPC-32 mpn_sqr_diag_addlsh1.
|
||||
|
||||
dnl Copyright 2013 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 cycles/limb
|
||||
C 603e ?
|
||||
C 604e ?
|
||||
C 75x (G3) ?
|
||||
C 7400,7410 (G4) ?
|
||||
C 744x,745x (G4+) 6
|
||||
C power4/ppc970 ?
|
||||
C power5 ?
|
||||
|
||||
C This has been feebly optimised for 7447 but not for any other CPU.
|
||||
|
||||
define(`rp', r3)
|
||||
define(`tp', r4)
|
||||
define(`up', r5)
|
||||
define(`n', r6)
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_sqr_diag_addlsh1)
|
||||
addi n, n, -1
|
||||
addi tp, tp, -4
|
||||
mtctr n
|
||||
lwz r0, 0(up)
|
||||
li r10, 0
|
||||
mullw r7, r0, r0
|
||||
stw r7, 0(rp)
|
||||
mulhwu r6, r0, r0
|
||||
addic r31, r31, 0 C clear CF
|
||||
|
||||
ALIGN(16)
|
||||
L(top): lwzu r0, 4(up)
|
||||
mullw r7, r0, r0
|
||||
lwz r8, 4(tp)
|
||||
lwzu r9, 8(tp)
|
||||
rlwimi r10, r8, 1,0,30
|
||||
srwi r11, r8, 31
|
||||
rlwimi r11, r9, 1,0,30
|
||||
adde r10, r10, r6
|
||||
adde r11, r11, r7
|
||||
stw r10, 4(rp)
|
||||
srwi r10, r9, 31
|
||||
mulhwu r6, r0, r0
|
||||
stwu r11, 8(rp)
|
||||
bdnz L(top)
|
||||
|
||||
adde r10, r10, r6
|
||||
stw r10, 4(rp)
|
||||
blr
|
||||
EPILOGUE()
|
||||
101
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sublsh1_n.asm
vendored
Normal file
101
blender-5.2.0/extern/gmp-source/mpn/powerpc32/sublsh1_n.asm
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
dnl PowerPC-32 mpn_sublsh1_n -- rp[] = up[] - (vp[] << 1)
|
||||
|
||||
dnl Copyright 2003, 2005, 2007 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 4.0
|
||||
C 75x (G3): 5.0
|
||||
C 7400,7410 (G4): 5.0
|
||||
C 744x,745x (G4+): 5.0
|
||||
C power4/ppc970: 4.25
|
||||
C power5: 5.0
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C vp r5
|
||||
C n r6
|
||||
|
||||
define(`rp',`r3')
|
||||
define(`up',`r4')
|
||||
define(`vp',`r5')
|
||||
|
||||
define(`s0',`r6')
|
||||
define(`s1',`r7')
|
||||
define(`u0',`r8')
|
||||
define(`v0',`r10')
|
||||
define(`v1',`r11')
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_sublsh1_n)
|
||||
mtctr r6 C copy n in ctr
|
||||
|
||||
lwz v0, 0(vp) C load v limb
|
||||
lwz u0, 0(up) C load u limb
|
||||
addic up, up, -4 C update up; set cy
|
||||
addi rp, rp, -4 C update rp
|
||||
slwi s1, v0, 1
|
||||
bdz L(end) C If done, skip loop
|
||||
|
||||
L(loop):
|
||||
lwz v1, 4(vp) C load v limb
|
||||
subfe s1, s1, u0 C add limbs with cy, set cy
|
||||
srwi s0, v0, 31 C shift down previous v limb
|
||||
stw s1, 4(rp) C store result limb
|
||||
lwzu u0, 8(up) C load u limb and update up
|
||||
rlwimi s0, v1, 1, 0,30 C left shift v limb and merge with prev v limb
|
||||
|
||||
bdz L(exit) C decrement ctr and exit if done
|
||||
|
||||
lwzu v0, 8(vp) C load v limb and update vp
|
||||
subfe s0, s0, u0 C add limbs with cy, set cy
|
||||
srwi s1, v1, 31 C shift down previous v limb
|
||||
stwu s0, 8(rp) C store result limb and update rp
|
||||
lwz u0, 4(up) C load u limb
|
||||
rlwimi s1, v0, 1, 0,30 C left shift v limb and merge with prev v limb
|
||||
|
||||
bdnz L(loop) C decrement ctr and loop back
|
||||
|
||||
L(end): subfe r7, s1, u0
|
||||
srwi r4, v0, 31
|
||||
stw r7, 4(rp) C store last result limb
|
||||
subfze r3, r4
|
||||
neg r3, r3
|
||||
blr
|
||||
L(exit):
|
||||
subfe r7, s0, u0
|
||||
srwi r4, v1, 31
|
||||
stw r7, 8(rp) C store last result limb
|
||||
subfze r3, r4
|
||||
neg r3, r3
|
||||
blr
|
||||
EPILOGUE()
|
||||
151
blender-5.2.0/extern/gmp-source/mpn/powerpc32/submul_1.asm
vendored
Normal file
151
blender-5.2.0/extern/gmp-source/mpn/powerpc32/submul_1.asm
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
dnl PowerPC-32 mpn_submul_1 -- Multiply a limb vector with a limb and subtract
|
||||
dnl the result from a second limb vector.
|
||||
|
||||
dnl Copyright 1995, 1997, 1998, 2000, 2002, 2005 Free Software Foundation,
|
||||
dnl 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 cycles/limb
|
||||
C 603e: ?
|
||||
C 604e: 7.5
|
||||
C 75x (G3): 9.3-15
|
||||
C 7400,7410 (G4): 9.3-15
|
||||
C 744x,745x (G4+): 10.5
|
||||
C power4/ppc970: 6.75
|
||||
C power5: 6.5
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C rp r3
|
||||
C up r4
|
||||
C n r5
|
||||
C vl r6
|
||||
|
||||
C This is optimized for the PPC604. See addmul_1.asm for additional comments.
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_submul_1)
|
||||
cmpwi cr0,r5,9 C more than 9 limbs?
|
||||
bgt cr0,L(big) C branch if more than 9 limbs
|
||||
|
||||
mtctr r5
|
||||
lwz r0,0(r4)
|
||||
mullw r7,r0,r6
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,0(r3)
|
||||
subfc r8,r7,r9
|
||||
addc r7,r7,r8 C invert cy (r7 is junk)
|
||||
addi r3,r3,-4
|
||||
bdz L(end)
|
||||
L(loop):
|
||||
lwzu r0,4(r4)
|
||||
stwu r8,4(r3)
|
||||
mullw r8,r0,r6
|
||||
adde r7,r8,r10
|
||||
mulhwu r10,r0,r6
|
||||
lwz r9,4(r3)
|
||||
addze r10,r10
|
||||
subfc r8,r7,r9
|
||||
addc r7,r7,r8 C invert cy (r7 is junk)
|
||||
bdnz L(loop)
|
||||
L(end): stw r8,4(r3)
|
||||
addze r3,r10
|
||||
blr
|
||||
|
||||
L(big): stwu r1,-16(r1)
|
||||
addi r5,r5,-1
|
||||
stw r30,8(r1)
|
||||
srwi r0,r5,2
|
||||
stw r31,12(r1)
|
||||
mtctr r0
|
||||
|
||||
lwz r7,0(r4)
|
||||
mullw r8,r7,r6
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,0(r3)
|
||||
subfc r7,r8,r7
|
||||
addc r8,r8,r7
|
||||
stw r7,0(r3)
|
||||
|
||||
L(loopU):
|
||||
lwz r7,4(r4)
|
||||
lwz r12,8(r4)
|
||||
lwz r30,12(r4)
|
||||
lwzu r31,16(r4)
|
||||
mullw r8,r7,r6
|
||||
mullw r9,r12,r6
|
||||
mullw r10,r30,r6
|
||||
mullw r11,r31,r6
|
||||
adde r8,r8,r0 C add cy_limb
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,4(r3)
|
||||
adde r9,r9,r0
|
||||
mulhwu r0,r12,r6
|
||||
lwz r12,8(r3)
|
||||
adde r10,r10,r0
|
||||
mulhwu r0,r30,r6
|
||||
lwz r30,12(r3)
|
||||
adde r11,r11,r0
|
||||
mulhwu r0,r31,r6
|
||||
lwz r31,16(r3)
|
||||
addze r0,r0 C new cy_limb
|
||||
subfc r7,r8,r7
|
||||
stw r7,4(r3)
|
||||
subfe r12,r9,r12
|
||||
stw r12,8(r3)
|
||||
subfe r30,r10,r30
|
||||
stw r30,12(r3)
|
||||
subfe r31,r11,r31
|
||||
stwu r31,16(r3)
|
||||
subfe r11,r11,r11 C invert ...
|
||||
addic r11,r11,1 C ... carry
|
||||
bdnz L(loopU)
|
||||
|
||||
andi. r31,r5,3
|
||||
mtctr r31
|
||||
beq cr0,L(endx)
|
||||
|
||||
L(loopE):
|
||||
lwzu r7,4(r4)
|
||||
mullw r8,r7,r6
|
||||
adde r8,r8,r0 C add cy_limb
|
||||
mulhwu r0,r7,r6
|
||||
lwz r7,4(r3)
|
||||
addze r0,r0 C new cy_limb
|
||||
subfc r7,r8,r7
|
||||
addc r8,r8,r7
|
||||
stwu r7,4(r3)
|
||||
bdnz L(loopE)
|
||||
L(endx):
|
||||
addze r3,r0
|
||||
lwz r30,8(r1)
|
||||
lwz r31,12(r1)
|
||||
addi r1,r1,16
|
||||
blr
|
||||
EPILOGUE(mpn_submul_1)
|
||||
50
blender-5.2.0/extern/gmp-source/mpn/powerpc32/umul.asm
vendored
Normal file
50
blender-5.2.0/extern/gmp-source/mpn/powerpc32/umul.asm
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
dnl PowerPC-32 umul_ppmm -- support for longlong.h
|
||||
|
||||
dnl Copyright 2000, 2001 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 mp_limb_t mpn_umul_ppmm (mp_limb_t *lowptr, mp_limb_t m1, mp_limb_t m2);
|
||||
C
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_umul_ppmm)
|
||||
|
||||
C r3 lowptr
|
||||
C r4 m1
|
||||
C r5 m2
|
||||
|
||||
mullw r0, r4, r5
|
||||
mulhwu r9, r4, r5
|
||||
stw r0, 0(r3)
|
||||
mr r3, r9
|
||||
blr
|
||||
|
||||
EPILOGUE(mpn_umul_ppmm)
|
||||
203
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/copyd.asm
vendored
Normal file
203
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/copyd.asm
vendored
Normal file
@@ -0,0 +1,203 @@
|
||||
dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_copyd.
|
||||
|
||||
dnl Copyright 2006 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 16-byte coaligned unaligned
|
||||
C cycles/limb cycles/limb
|
||||
C 7400,7410 (G4): 0.5 0.64
|
||||
C 744x,745x (G4+): 0.75 0.82
|
||||
C 970 (G5): 0.78 1.02 (64-bit limbs)
|
||||
|
||||
C STATUS
|
||||
C * Works for all sizes and alignments.
|
||||
|
||||
C TODO
|
||||
C * Optimize unaligned case. Some basic tests with 2-way and 4-way unrolling
|
||||
C indicate that we can reach 0.56 c/l for 7400, 0.75 c/l for 745x, and 0.80
|
||||
C c/l for 970.
|
||||
C * Consider using VMX instructions also for head and tail, by using some
|
||||
C read-modify-write tricks.
|
||||
C * The VMX code is used from the smallest sizes it handles, but measurements
|
||||
C show a large speed bump at the cutoff points. Small copying (perhaps
|
||||
C using some read-modify-write technique) should be optimized.
|
||||
C * Make an mpn_com based on this code.
|
||||
|
||||
define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8))
|
||||
define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES))
|
||||
define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES))
|
||||
|
||||
|
||||
ifelse(GMP_LIMB_BITS,32,`
|
||||
define(`LIMB32',` $1')
|
||||
define(`LIMB64',`')
|
||||
',`
|
||||
define(`LIMB32',`')
|
||||
define(`LIMB64',` $1')
|
||||
')
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`n', `r5')
|
||||
|
||||
define(`us', `v4')
|
||||
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_copyd)
|
||||
|
||||
LIMB32(`slwi. r0, n, 2 ')
|
||||
LIMB64(`sldi. r0, n, 3 ')
|
||||
add rp, rp, r0
|
||||
add up, up, r0
|
||||
|
||||
LIMB32(`cmpi cr7, n, 11 ')
|
||||
LIMB64(`cmpdi cr7, n, 5 ')
|
||||
bge cr7, L(big)
|
||||
|
||||
beqlr cr0
|
||||
|
||||
C Handle small cases with plain operations
|
||||
mtctr n
|
||||
L(topS):
|
||||
LIMB32(`lwz r0, -4(up) ')
|
||||
LIMB64(`ld r0, -8(up) ')
|
||||
addi up, up, -GMP_LIMB_BYTES
|
||||
LIMB32(`stw r0, -4(rp) ')
|
||||
LIMB64(`std r0, -8(rp) ')
|
||||
addi rp, rp, -GMP_LIMB_BYTES
|
||||
bdnz L(topS)
|
||||
blr
|
||||
|
||||
C Handle large cases with VMX operations
|
||||
L(big):
|
||||
addi rp, rp, -16
|
||||
addi up, up, -16
|
||||
mfspr r12, 256
|
||||
oris r0, r12, 0xf800 C Set VRSAVE bit 0-4
|
||||
mtspr 256, r0
|
||||
|
||||
LIMB32(`rlwinm. r7, rp, 30,30,31') C (rp >> 2) mod 4
|
||||
LIMB64(`rlwinm. r7, rp, 29,31,31') C (rp >> 3) mod 2
|
||||
beq L(rp_aligned)
|
||||
|
||||
subf n, r7, n
|
||||
L(top0):
|
||||
LIMB32(`lwz r0, 12(up) ')
|
||||
LIMB64(`ld r0, 8(up) ')
|
||||
addi up, up, -GMP_LIMB_BYTES
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
LIMB32(`stw r0, 12(rp) ')
|
||||
LIMB64(`std r0, 8(rp) ')
|
||||
addi rp, rp, -GMP_LIMB_BYTES
|
||||
LIMB32(`bne L(top0) ')
|
||||
|
||||
L(rp_aligned):
|
||||
|
||||
LIMB32(`rlwinm. r0, up, 30,30,31') C (up >> 2) mod 4
|
||||
LIMB64(`rlwinm. r0, up, 29,31,31') C (up >> 3) mod 2
|
||||
|
||||
LIMB64(`srdi r7, n, 2 ') C loop count corresponding to n
|
||||
LIMB32(`srwi r7, n, 3 ') C loop count corresponding to n
|
||||
mtctr r7 C copy n to count register
|
||||
|
||||
li r10, -16
|
||||
|
||||
beq L(up_aligned)
|
||||
|
||||
lvsl us, 0, up
|
||||
|
||||
addi up, up, 16
|
||||
LIMB32(`andi. r0, n, 0x4 ')
|
||||
LIMB64(`andi. r0, n, 0x2 ')
|
||||
beq L(1)
|
||||
lvx v0, 0, up
|
||||
lvx v2, r10, up
|
||||
vperm v3, v2, v0, us
|
||||
stvx v3, 0, rp
|
||||
addi up, up, -32
|
||||
addi rp, rp, -16
|
||||
b L(lpu)
|
||||
L(1): lvx v2, 0, up
|
||||
addi up, up, -16
|
||||
b L(lpu)
|
||||
|
||||
ALIGN(32)
|
||||
L(lpu): lvx v0, 0, up
|
||||
vperm v3, v0, v2, us
|
||||
stvx v3, 0, rp
|
||||
lvx v2, r10, up
|
||||
addi up, up, -32
|
||||
vperm v3, v2, v0, us
|
||||
stvx v3, r10, rp
|
||||
addi rp, rp, -32
|
||||
bdnz L(lpu)
|
||||
|
||||
b L(tail)
|
||||
|
||||
L(up_aligned):
|
||||
|
||||
LIMB32(`andi. r0, n, 0x4 ')
|
||||
LIMB64(`andi. r0, n, 0x2 ')
|
||||
beq L(lpa)
|
||||
lvx v0, 0, up
|
||||
stvx v0, 0, rp
|
||||
addi up, up, -16
|
||||
addi rp, rp, -16
|
||||
b L(lpa)
|
||||
|
||||
ALIGN(32)
|
||||
L(lpa): lvx v0, 0, up
|
||||
lvx v1, r10, up
|
||||
addi up, up, -32
|
||||
nop
|
||||
stvx v0, 0, rp
|
||||
stvx v1, r10, rp
|
||||
addi rp, rp, -32
|
||||
bdnz L(lpa)
|
||||
|
||||
L(tail):
|
||||
LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4
|
||||
LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2
|
||||
beq L(ret)
|
||||
LIMB32(`li r10, 12 ')
|
||||
L(top2):
|
||||
LIMB32(`lwzx r0, r10, up ')
|
||||
LIMB64(`ld r0, 8(up) ')
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
LIMB32(`stwx r0, r10, rp ')
|
||||
LIMB64(`std r0, 8(rp) ')
|
||||
LIMB32(`addi r10, r10, -GMP_LIMB_BYTES')
|
||||
LIMB32(`bne L(top2) ')
|
||||
|
||||
L(ret): mtspr 256, r12
|
||||
blr
|
||||
EPILOGUE()
|
||||
198
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/copyi.asm
vendored
Normal file
198
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/copyi.asm
vendored
Normal file
@@ -0,0 +1,198 @@
|
||||
dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_copyi.
|
||||
|
||||
dnl Copyright 2006 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 16-byte coaligned unaligned
|
||||
C cycles/limb cycles/limb
|
||||
C 7400,7410 (G4): 0.5 0.64
|
||||
C 744x,745x (G4+): 0.75 0.82
|
||||
C 970 (G5): 0.78 1.02 (64-bit limbs)
|
||||
|
||||
C STATUS
|
||||
C * Works for all sizes and alignments.
|
||||
|
||||
C TODO
|
||||
C * Optimize unaligned case. Some basic tests with 2-way and 4-way unrolling
|
||||
C indicate that we can reach 0.56 c/l for 7400, 0.75 c/l for 745x, and 0.80
|
||||
C c/l for 970.
|
||||
C * Consider using VMX instructions also for head and tail, by using some
|
||||
C read-modify-write tricks.
|
||||
C * The VMX code is used from the smallest sizes it handles, but measurements
|
||||
C show a large speed bump at the cutoff points. Small copying (perhaps
|
||||
C using some read-modify-write technique) should be optimized.
|
||||
C * Make an mpn_com based on this code.
|
||||
|
||||
define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8))
|
||||
define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES))
|
||||
define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES))
|
||||
|
||||
|
||||
ifelse(GMP_LIMB_BITS,32,`
|
||||
define(`LIMB32',` $1')
|
||||
define(`LIMB64',`')
|
||||
',`
|
||||
define(`LIMB32',`')
|
||||
define(`LIMB64',` $1')
|
||||
')
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`n', `r5')
|
||||
|
||||
define(`us', `v4')
|
||||
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_copyi)
|
||||
|
||||
LIMB32(`cmpi cr7, n, 11 ')
|
||||
LIMB64(`cmpdi cr7, n, 5 ')
|
||||
bge cr7, L(big)
|
||||
|
||||
or. r0, n, n
|
||||
beqlr cr0
|
||||
|
||||
C Handle small cases with plain operations
|
||||
mtctr n
|
||||
L(topS):
|
||||
LIMB32(`lwz r0, 0(up) ')
|
||||
LIMB64(`ld r0, 0(up) ')
|
||||
addi up, up, GMP_LIMB_BYTES
|
||||
LIMB32(`stw r0, 0(rp) ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
addi rp, rp, GMP_LIMB_BYTES
|
||||
bdnz L(topS)
|
||||
blr
|
||||
|
||||
C Handle large cases with VMX operations
|
||||
L(big):
|
||||
mfspr r12, 256
|
||||
oris r0, r12, 0xf800 C Set VRSAVE bit 0-4
|
||||
mtspr 256, r0
|
||||
|
||||
LIMB32(`rlwinm. r7, rp, 30,30,31') C (rp >> 2) mod 4
|
||||
LIMB64(`rlwinm. r7, rp, 29,31,31') C (rp >> 3) mod 2
|
||||
beq L(rp_aligned)
|
||||
|
||||
subfic r7, r7, LIMBS_PER_VR
|
||||
subf n, r7, n
|
||||
L(top0):
|
||||
LIMB32(`lwz r0, 0(up) ')
|
||||
LIMB64(`ld r0, 0(up) ')
|
||||
addi up, up, GMP_LIMB_BYTES
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
LIMB32(`stw r0, 0(rp) ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
addi rp, rp, GMP_LIMB_BYTES
|
||||
LIMB32(`bne L(top0) ')
|
||||
|
||||
L(rp_aligned):
|
||||
|
||||
LIMB32(`rlwinm. r0, up, 30,30,31') C (up >> 2) mod 4
|
||||
LIMB64(`rlwinm. r0, up, 29,31,31') C (up >> 3) mod 2
|
||||
|
||||
LIMB64(`srdi r7, n, 2 ') C loop count corresponding to n
|
||||
LIMB32(`srwi r7, n, 3 ') C loop count corresponding to n
|
||||
mtctr r7 C copy n to count register
|
||||
|
||||
li r10, 16
|
||||
|
||||
beq L(up_aligned)
|
||||
|
||||
lvsl us, 0, up
|
||||
|
||||
LIMB32(`andi. r0, n, 0x4 ')
|
||||
LIMB64(`andi. r0, n, 0x2 ')
|
||||
beq L(1)
|
||||
lvx v0, 0, up
|
||||
lvx v2, r10, up
|
||||
vperm v3, v0, v2, us
|
||||
stvx v3, 0, rp
|
||||
addi up, up, 32
|
||||
addi rp, rp, 16
|
||||
b L(lpu)
|
||||
L(1): lvx v2, 0, up
|
||||
addi up, up, 16
|
||||
b L(lpu)
|
||||
|
||||
ALIGN(32)
|
||||
L(lpu): lvx v0, 0, up
|
||||
vperm v3, v2, v0, us
|
||||
stvx v3, 0, rp
|
||||
lvx v2, r10, up
|
||||
addi up, up, 32
|
||||
vperm v3, v0, v2, us
|
||||
stvx v3, r10, rp
|
||||
addi rp, rp, 32
|
||||
bdnz L(lpu)
|
||||
|
||||
addi up, up, -16
|
||||
b L(tail)
|
||||
|
||||
L(up_aligned):
|
||||
|
||||
LIMB32(`andi. r0, n, 0x4 ')
|
||||
LIMB64(`andi. r0, n, 0x2 ')
|
||||
beq L(lpa)
|
||||
lvx v0, 0, up
|
||||
stvx v0, 0, rp
|
||||
addi up, up, 16
|
||||
addi rp, rp, 16
|
||||
b L(lpa)
|
||||
|
||||
ALIGN(32)
|
||||
L(lpa): lvx v0, 0, up
|
||||
lvx v1, r10, up
|
||||
addi up, up, 32
|
||||
nop
|
||||
stvx v0, 0, rp
|
||||
stvx v1, r10, rp
|
||||
addi rp, rp, 32
|
||||
bdnz L(lpa)
|
||||
|
||||
L(tail):
|
||||
LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4
|
||||
LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2
|
||||
beq L(ret)
|
||||
LIMB32(`li r10, 0 ')
|
||||
L(top2):
|
||||
LIMB32(`lwzx r0, r10, up ')
|
||||
LIMB64(`ld r0, 0(up) ')
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
LIMB32(`stwx r0, r10, rp ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
LIMB32(`addi r10, r10, GMP_LIMB_BYTES')
|
||||
LIMB32(`bne L(top2) ')
|
||||
|
||||
L(ret): mtspr 256, r12
|
||||
blr
|
||||
EPILOGUE()
|
||||
310
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/logops_n.asm
vendored
Normal file
310
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/logops_n.asm
vendored
Normal file
@@ -0,0 +1,310 @@
|
||||
dnl PowerPC-32/VMX and PowerPC-64/VMX mpn_and_n, mpn_andn_n, mpn_nand_n,
|
||||
dnl mpn_ior_n, mpn_iorn_n, mpn_nior_n, mpn_xor_n, mpn_xnor_n -- mpn bitwise
|
||||
dnl logical operations.
|
||||
|
||||
dnl Copyright 2006 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 and,ior,andn,nior,xor iorn,xnor nand
|
||||
C cycles/limb cycles/limb cycles/limb
|
||||
C 7400,7410 (G4): 1.39 ? ?
|
||||
C 744x,745x (G4+): 1.14 1.39 1.39
|
||||
C 970: 1.7 2.0 2.0
|
||||
|
||||
C STATUS
|
||||
C * Works for all sizes and alignment for 32-bit limbs.
|
||||
C * Works for n >= 4 for 64-bit limbs; untested for smaller operands.
|
||||
C * Current performance makes this pointless for 970
|
||||
|
||||
C TODO
|
||||
C * Might want to make variants when just one of the source operands needs
|
||||
C vperm, and when neither needs it. The latter runs 50% faster on 7400.
|
||||
C * Idea: If the source operands are equally aligned, we could do the logops
|
||||
C first, then vperm before storing! That means we never need more than one
|
||||
C vperm, ever!
|
||||
C * Perhaps align `rp' after initial alignment loop?
|
||||
C * Instead of having scalar code in the beginning and end, consider using
|
||||
C read-modify-write vector code.
|
||||
C * Software pipeline? Hopefully not too important, this is hairy enough
|
||||
C already.
|
||||
C * At least be more clever about operand loading, i.e., load v operands before
|
||||
C u operands, since v operands are sometimes negated.
|
||||
|
||||
define(`GMP_LIMB_BYTES', eval(GMP_LIMB_BITS/8))
|
||||
define(`LIMBS_PER_VR', eval(16/GMP_LIMB_BYTES))
|
||||
define(`LIMBS_PER_2VR', eval(32/GMP_LIMB_BYTES))
|
||||
|
||||
define(`vnegb', `') C default neg-before to null
|
||||
define(`vnega', `') C default neg-before to null
|
||||
|
||||
ifdef(`OPERATION_and_n',
|
||||
` define(`func', `mpn_and_n')
|
||||
define(`logopS',`and $1,$2,$3')
|
||||
define(`logop', `vand $1,$2,$3')')
|
||||
ifdef(`OPERATION_andn_n',
|
||||
` define(`func', `mpn_andn_n')
|
||||
define(`logopS',`andc $1,$2,$3')
|
||||
define(`logop', `vandc $1,$2,$3')')
|
||||
ifdef(`OPERATION_nand_n',
|
||||
` define(`func', `mpn_nand_n')
|
||||
define(`logopS',`nand $1,$2,$3')
|
||||
define(`logop', `vand $1,$2,$3')
|
||||
define(`vnega', `vnor $1,$2,$2')')
|
||||
ifdef(`OPERATION_ior_n',
|
||||
` define(`func', `mpn_ior_n')
|
||||
define(`logopS',`or $1,$2,$3')
|
||||
define(`logop', `vor $1,$2,$3')')
|
||||
ifdef(`OPERATION_iorn_n',
|
||||
` define(`func', `mpn_iorn_n')
|
||||
define(`logopS',`orc $1,$2,$3')
|
||||
define(`vnegb', `vnor $1,$2,$2')
|
||||
define(`logop', `vor $1,$2,$3')')
|
||||
ifdef(`OPERATION_nior_n',
|
||||
` define(`func', `mpn_nior_n')
|
||||
define(`logopS',`nor $1,$2,$3')
|
||||
define(`logop', `vnor $1,$2,$3')')
|
||||
ifdef(`OPERATION_xor_n',
|
||||
` define(`func', `mpn_xor_n')
|
||||
define(`logopS',`xor $1,$2,$3')
|
||||
define(`logop', `vxor $1,$2,$3')')
|
||||
ifdef(`OPERATION_xnor_n',
|
||||
` define(`func',`mpn_xnor_n')
|
||||
define(`logopS',`eqv $1,$2,$3')
|
||||
define(`vnegb', `vnor $1,$2,$2')
|
||||
define(`logop', `vxor $1,$2,$3')')
|
||||
|
||||
ifelse(GMP_LIMB_BITS,`32',`
|
||||
define(`LIMB32',` $1')
|
||||
define(`LIMB64',`')
|
||||
',`
|
||||
define(`LIMB32',`')
|
||||
define(`LIMB64',` $1')
|
||||
')
|
||||
|
||||
C INPUT PARAMETERS
|
||||
define(`rp', `r3')
|
||||
define(`up', `r4')
|
||||
define(`vp', `r5')
|
||||
define(`n', `r6')
|
||||
|
||||
define(`us', `v8')
|
||||
define(`vs', `v9')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_and_n mpn_andn_n mpn_nand_n mpn_ior_n mpn_iorn_n mpn_nior_n mpn_xor_n mpn_xnor_n)
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(func)
|
||||
|
||||
LIMB32(`cmpwi cr0, n, 8 ')
|
||||
LIMB64(`cmpdi cr0, n, 4 ')
|
||||
bge L(big)
|
||||
|
||||
mtctr n
|
||||
|
||||
LIMB32(`lwz r8, 0(up) ')
|
||||
LIMB32(`lwz r9, 0(vp) ')
|
||||
LIMB32(`logopS( r0, r8, r9) ')
|
||||
LIMB32(`stw r0, 0(rp) ')
|
||||
LIMB32(`bdz L(endS) ')
|
||||
|
||||
L(topS):
|
||||
LIMB32(`lwzu r8, 4(up) ')
|
||||
LIMB64(`ld r8, 0(up) ')
|
||||
LIMB64(`addi up, up, GMP_LIMB_BYTES ')
|
||||
LIMB32(`lwzu r9, 4(vp) ')
|
||||
LIMB64(`ld r9, 0(vp) ')
|
||||
LIMB64(`addi vp, vp, GMP_LIMB_BYTES ')
|
||||
logopS( r0, r8, r9)
|
||||
LIMB32(`stwu r0, 4(rp) ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
LIMB64(`addi rp, rp, GMP_LIMB_BYTES ')
|
||||
bdnz L(topS)
|
||||
L(endS):
|
||||
blr
|
||||
|
||||
L(big): mfspr r12, 256
|
||||
oris r0, r12, 0xfffc C Set VRSAVE bit 0-13 FIXME
|
||||
mtspr 256, r0
|
||||
|
||||
C First loop until the destination is 16-byte aligned. This will execute 0 or 1
|
||||
C times for 64-bit machines, and 0 to 3 times for 32-bit machines.
|
||||
|
||||
LIMB32(`rlwinm. r0, rp, 30,30,31') C (rp >> 2) mod 4
|
||||
LIMB64(`rlwinm. r0, rp, 29,31,31') C (rp >> 3) mod 2
|
||||
beq L(aligned)
|
||||
|
||||
subfic r7, r0, LIMBS_PER_VR
|
||||
LIMB32(`li r10, 0 ')
|
||||
subf n, r7, n
|
||||
L(top0):
|
||||
LIMB32(`lwz r8, 0(up) ')
|
||||
LIMB64(`ld r8, 0(up) ')
|
||||
addi up, up, GMP_LIMB_BYTES
|
||||
LIMB32(`lwz r9, 0(vp) ')
|
||||
LIMB64(`ld r9, 0(vp) ')
|
||||
addi vp, vp, GMP_LIMB_BYTES
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
logopS( r0, r8, r9)
|
||||
LIMB32(`stwx r0, r10, rp ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
LIMB32(`addi r10, r10, GMP_LIMB_BYTES')
|
||||
LIMB32(`bne L(top0) ')
|
||||
|
||||
addi rp, rp, 16 C update rp, but preserve its alignment
|
||||
|
||||
L(aligned):
|
||||
LIMB64(`srdi r7, n, 1 ') C loop count corresponding to n
|
||||
LIMB32(`srwi r7, n, 2 ') C loop count corresponding to n
|
||||
mtctr r7 C copy n to count register
|
||||
|
||||
li r10, 16
|
||||
lvsl us, 0, up
|
||||
lvsl vs, 0, vp
|
||||
|
||||
lvx v2, 0, up
|
||||
lvx v3, 0, vp
|
||||
bdnz L(gt1)
|
||||
lvx v0, r10, up
|
||||
lvx v1, r10, vp
|
||||
vperm v4, v2, v0, us
|
||||
vperm v5, v3, v1, vs
|
||||
vnegb( v5, v5)
|
||||
logop( v6, v4, v5)
|
||||
vnega( v6, v6)
|
||||
stvx v6, 0, rp
|
||||
addi up, up, 16
|
||||
addi vp, vp, 16
|
||||
addi rp, rp, 4
|
||||
b L(tail)
|
||||
|
||||
L(gt1): addi up, up, 16
|
||||
addi vp, vp, 16
|
||||
|
||||
L(top): lvx v0, 0, up
|
||||
lvx v1, 0, vp
|
||||
vperm v4, v2, v0, us
|
||||
vperm v5, v3, v1, vs
|
||||
vnegb( v5, v5)
|
||||
logop( v6, v4, v5)
|
||||
vnega( v6, v6)
|
||||
stvx v6, 0, rp
|
||||
bdz L(end)
|
||||
lvx v2, r10, up
|
||||
lvx v3, r10, vp
|
||||
vperm v4, v0, v2, us
|
||||
vperm v5, v1, v3, vs
|
||||
vnegb( v5, v5)
|
||||
logop( v6, v4, v5)
|
||||
vnega( v6, v6)
|
||||
stvx v6, r10, rp
|
||||
addi up, up, 32
|
||||
addi vp, vp, 32
|
||||
addi rp, rp, 32
|
||||
bdnz L(top)
|
||||
|
||||
andi. r0, up, 15
|
||||
vxor v0, v0, v0
|
||||
beq 1f
|
||||
lvx v0, 0, up
|
||||
1: andi. r0, vp, 15
|
||||
vxor v1, v1, v1
|
||||
beq 1f
|
||||
lvx v1, 0, vp
|
||||
1: vperm v4, v2, v0, us
|
||||
vperm v5, v3, v1, vs
|
||||
vnegb( v5, v5)
|
||||
logop( v6, v4, v5)
|
||||
vnega( v6, v6)
|
||||
stvx v6, 0, rp
|
||||
addi rp, rp, 4
|
||||
b L(tail)
|
||||
|
||||
L(end): andi. r0, up, 15
|
||||
vxor v2, v2, v2
|
||||
beq 1f
|
||||
lvx v2, r10, up
|
||||
1: andi. r0, vp, 15
|
||||
vxor v3, v3, v3
|
||||
beq 1f
|
||||
lvx v3, r10, vp
|
||||
1: vperm v4, v0, v2, us
|
||||
vperm v5, v1, v3, vs
|
||||
vnegb( v5, v5)
|
||||
logop( v6, v4, v5)
|
||||
vnega( v6, v6)
|
||||
stvx v6, r10, rp
|
||||
|
||||
addi up, up, 16
|
||||
addi vp, vp, 16
|
||||
addi rp, rp, 20
|
||||
|
||||
L(tail):
|
||||
LIMB32(`rlwinm. r7, n, 0,30,31 ') C r7 = n mod 4
|
||||
LIMB64(`rlwinm. r7, n, 0,31,31 ') C r7 = n mod 2
|
||||
beq L(ret)
|
||||
addi rp, rp, 15
|
||||
LIMB32(`rlwinm rp, rp, 0,0,27 ')
|
||||
LIMB64(`rldicr rp, rp, 0,59 ')
|
||||
li r10, 0
|
||||
L(top2):
|
||||
LIMB32(`lwzx r8, r10, up ')
|
||||
LIMB64(`ldx r8, r10, up ')
|
||||
LIMB32(`lwzx r9, r10, vp ')
|
||||
LIMB64(`ldx r9, r10, vp ')
|
||||
LIMB32(`addic. r7, r7, -1 ')
|
||||
logopS( r0, r8, r9)
|
||||
LIMB32(`stwx r0, r10, rp ')
|
||||
LIMB64(`std r0, 0(rp) ')
|
||||
LIMB32(`addi r10, r10, GMP_LIMB_BYTES')
|
||||
LIMB32(`bne L(top2) ')
|
||||
|
||||
L(ret): mtspr 256, r12
|
||||
blr
|
||||
EPILOGUE()
|
||||
|
||||
C This works for 64-bit PowerPC, since a limb ptr can only be aligned
|
||||
C in 2 relevant ways, which means we can always find a pair of aligned
|
||||
C pointers of rp, up, and vp.
|
||||
C process words until rp is 16-byte aligned
|
||||
C if (((up | vp) & 15) == 0)
|
||||
C process with VMX without any vperm
|
||||
C else if ((up & 15) != 0 && (vp & 15) != 0)
|
||||
C process with VMX using vperm on store data
|
||||
C else if ((up & 15) != 0)
|
||||
C process with VMX using vperm on up data
|
||||
C else
|
||||
C process with VMX using vperm on vp data
|
||||
C
|
||||
C rlwinm, r0, up, 0,28,31
|
||||
C rlwinm r0, vp, 0,28,31
|
||||
C cmpwi cr7, r0, 0
|
||||
C cror cr6, cr0, cr7
|
||||
C crand cr0, cr0, cr7
|
||||
388
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/mod_34lsub1.asm
vendored
Normal file
388
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/mod_34lsub1.asm
vendored
Normal file
@@ -0,0 +1,388 @@
|
||||
dnl PowerPC-32 mpn_mod_34lsub1 -- mpn remainder mod 2^24-1.
|
||||
|
||||
dnl Copyright 2002, 2003, 2005-2007, 2012 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 cycles/limb
|
||||
C 603e: -
|
||||
C 604e: -
|
||||
C 75x (G3): -
|
||||
C 7400,7410 (G4): 1 simple load-use scheduling results in 0.75
|
||||
C 744x,745x (G4+): 0.75
|
||||
C ppc970: 0.75
|
||||
C power4: -
|
||||
C power5: -
|
||||
|
||||
C TODO
|
||||
C * Either start using the low-end masking constants, or remove them.
|
||||
C * Merge multiple feed-in cases into a parameterized code block.
|
||||
C * Reduce register usage. It should be possible to almost halve it.
|
||||
|
||||
define(`up', `r3')
|
||||
define(`n', `r4')
|
||||
|
||||
define(`a0', `v3')
|
||||
define(`a1', `v4')
|
||||
define(`a2', `v5')
|
||||
define(`c0', `v6')
|
||||
define(`c1', `v7')
|
||||
define(`c2', `v8')
|
||||
define(`z', `v9')
|
||||
define(`x0', `v10')
|
||||
define(`x1', `v11')
|
||||
define(`x2', `v12')
|
||||
define(`x3', `v13')
|
||||
define(`pv', `v14')
|
||||
define(`y0', `v0')
|
||||
define(`y1', `v1')
|
||||
define(`y2', `v2')
|
||||
define(`y3', `v15')
|
||||
|
||||
ASM_START()
|
||||
PROLOGUE(mpn_mod_34lsub1)
|
||||
cmpwi cr0, n, 20 C tuned cutoff point
|
||||
bge L(large)
|
||||
|
||||
li r9, 0 C result accumulator
|
||||
mulli r10, n, 0xb C 0xb = ceil(32/3)
|
||||
srwi. r10, r10, 5 C r10 = floor(n/3), n < 32
|
||||
beq L(small_tail)
|
||||
mtctr r10
|
||||
lwz r6, 0(up)
|
||||
lwz r7, 4(up)
|
||||
lwzu r8, 8(up)
|
||||
subf n, r10, n
|
||||
subf n, r10, n
|
||||
subf n, r10, n
|
||||
bdz L(small_end)
|
||||
|
||||
ALIGN(16)
|
||||
L(los): rlwinm r0, r6, 0,8,31
|
||||
add r9, r9, r0 C add 24b from u0
|
||||
srwi r0, r6, 24
|
||||
lwz r6, 4(up)
|
||||
rlwimi r0, r7, 8, 0x00ffff00 C --111100
|
||||
add r9, r9, r0 C add 8b from u0 and 16b from u1
|
||||
srwi r0, r7, 16
|
||||
lwz r7, 8(up)
|
||||
rlwimi r0, r8, 16, 0x00ff0000 C --221111
|
||||
add r9, r9, r0 C add 16b from u1 and 8b from u2
|
||||
srwi r0, r8, 8 C --222222
|
||||
lwzu r8, 12(up)
|
||||
add r9, r9, r0 C add 24b from u2
|
||||
bdnz L(los)
|
||||
L(small_end):
|
||||
rlwinm r0, r6, 0,8,31
|
||||
add r9, r9, r0 C add 24b from u0
|
||||
srwi r0, r6, 24
|
||||
rlwimi r0, r7, 8, 0x00ffff00 C --111100
|
||||
add r9, r9, r0 C add 8b from u0 and 16b from u1
|
||||
srwi r0, r7, 16
|
||||
rlwimi r0, r8, 16, 0x00ff0000 C --221111
|
||||
add r9, r9, r0 C add 16b from u1 and 8b from u2
|
||||
srwi r0, r8, 8 C --222222
|
||||
add r9, r9, r0 C add 24b from u2
|
||||
|
||||
addi up, up, 4
|
||||
rlwinm r0, r9, 0,8,31
|
||||
srwi r9, r9, 24
|
||||
add r9, r9, r0
|
||||
|
||||
L(small_tail):
|
||||
cmpi cr0, n, 1
|
||||
blt L(ret)
|
||||
|
||||
lwz r6, 0(up)
|
||||
rlwinm r0, r6, 0,8,31
|
||||
srwi r6, r6, 24
|
||||
add r9, r9, r0
|
||||
add r9, r9, r6
|
||||
|
||||
beq L(ret)
|
||||
|
||||
lwz r6, 4(up)
|
||||
rlwinm r0, r6, 8,8,23
|
||||
srwi r6, r6, 16
|
||||
add r9, r9, r0
|
||||
add r9, r9, r6
|
||||
|
||||
L(ret): mr r3, r9
|
||||
blr
|
||||
|
||||
|
||||
L(large):
|
||||
stwu r1, -32(r1)
|
||||
mfspr r10, 256
|
||||
oris r0, r10, 0xffff C Set VRSAVE bit 0-15
|
||||
mtspr 256, r0
|
||||
|
||||
andi. r7, up, 15
|
||||
vxor a0, v0, v0
|
||||
lis r9, 0xaaaa
|
||||
vxor a1, v0, v0
|
||||
ori r9, r9, 0xaaab
|
||||
vxor a2, v0, v0
|
||||
li r5, 16
|
||||
vxor c0, v0, v0
|
||||
li r6, 32
|
||||
vxor c1, v0, v0
|
||||
LEAL( r11, cnsts) C CAUTION clobbers r0 for elf, darwin
|
||||
vxor c2, v0, v0
|
||||
vxor z, v0, v0
|
||||
|
||||
beq L(aligned16)
|
||||
|
||||
cmpwi cr7, r7, 8
|
||||
bge cr7, L(na4)
|
||||
|
||||
lvx a2, 0, up
|
||||
addi up, up, 16
|
||||
vsldoi a2, a2, z, 4
|
||||
vsldoi a2, z, a2, 12
|
||||
|
||||
addi n, n, 9
|
||||
mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
mulli r8, r0, 12
|
||||
subf n, r8, n
|
||||
b L(2)
|
||||
|
||||
L(na4): bne cr7, L(na8)
|
||||
|
||||
lvx a1, 0, up
|
||||
addi up, up, -16
|
||||
vsldoi a1, a1, z, 8
|
||||
vsldoi a1, z, a1, 8
|
||||
|
||||
addi n, n, 6
|
||||
mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
mulli r8, r0, 12
|
||||
subf n, r8, n
|
||||
b L(1)
|
||||
|
||||
L(na8):
|
||||
lvx a0, 0, up
|
||||
vsldoi a0, a0, z, 12
|
||||
vsldoi a0, z, a0, 4
|
||||
|
||||
addi n, n, 3
|
||||
mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
mulli r8, r0, 12
|
||||
subf n, r8, n
|
||||
b L(0)
|
||||
|
||||
L(aligned16):
|
||||
mulhwu r0, n, r9
|
||||
srwi r0, r0, 3 C r0 = floor(n/12)
|
||||
mtctr r0
|
||||
|
||||
mulli r8, r0, 12
|
||||
subf n, r8, n
|
||||
|
||||
lvx a0, 0, up
|
||||
L(0): lvx a1, r5, up
|
||||
L(1): lvx a2, r6, up
|
||||
addi up, up, 48
|
||||
L(2): bdz L(end)
|
||||
li r12, 256
|
||||
li r9, 288
|
||||
ALIGN(32)
|
||||
L(top):
|
||||
lvx v0, 0, up
|
||||
vaddcuw v10, a0, v0
|
||||
vadduwm a0, a0, v0
|
||||
vadduwm c0, c0, v10
|
||||
|
||||
lvx v1, r5, up
|
||||
vaddcuw v10, a1, v1
|
||||
vadduwm a1, a1, v1
|
||||
vadduwm c1, c1, v10
|
||||
|
||||
lvx v2, r6, up
|
||||
dcbt up, r12
|
||||
dcbt up, r9
|
||||
addi up, up, 48
|
||||
vaddcuw v10, a2, v2
|
||||
vadduwm a2, a2, v2
|
||||
vadduwm c2, c2, v10
|
||||
bdnz L(top)
|
||||
|
||||
L(end):
|
||||
C n = 0...11
|
||||
cmpwi cr0, n, 0
|
||||
beq L(sum)
|
||||
cmpwi cr0, n, 4
|
||||
ble L(tail.1..4)
|
||||
cmpwi cr0, n, 8
|
||||
ble L(tail.5..8)
|
||||
|
||||
L(tail.9..11):
|
||||
lvx v0, 0, up
|
||||
vaddcuw v10, a0, v0
|
||||
vadduwm a0, a0, v0
|
||||
vadduwm c0, c0, v10
|
||||
|
||||
lvx v1, r5, up
|
||||
vaddcuw v10, a1, v1
|
||||
vadduwm a1, a1, v1
|
||||
vadduwm c1, c1, v10
|
||||
|
||||
lvx v2, r6, up
|
||||
|
||||
addi r8, r11, 96
|
||||
rlwinm r3, n ,4,26,27
|
||||
lvx v11, r3, r8
|
||||
vand v2, v2, v11
|
||||
|
||||
vaddcuw v10, a2, v2
|
||||
vadduwm a2, a2, v2
|
||||
vadduwm c2, c2, v10
|
||||
b L(sum)
|
||||
|
||||
L(tail.5..8):
|
||||
lvx v0, 0, up
|
||||
vaddcuw v10, a0, v0
|
||||
vadduwm a0, a0, v0
|
||||
vadduwm c0, c0, v10
|
||||
|
||||
lvx v1, r5, up
|
||||
|
||||
addi r8, r11, 96
|
||||
rlwinm r3, n ,4,26,27
|
||||
lvx v11, r3, r8
|
||||
vand v1, v1, v11
|
||||
|
||||
vaddcuw v10, a1, v1
|
||||
vadduwm a1, a1, v1
|
||||
vadduwm c1, c1, v10
|
||||
b L(sum)
|
||||
|
||||
L(tail.1..4):
|
||||
lvx v0, 0, up
|
||||
|
||||
addi r8, r11, 96
|
||||
rlwinm r3, n ,4,26,27
|
||||
lvx v11, r3, r8
|
||||
vand v0, v0, v11
|
||||
|
||||
vaddcuw v10, a0, v0
|
||||
vadduwm a0, a0, v0
|
||||
vadduwm c0, c0, v10
|
||||
|
||||
L(sum): lvx pv, 0, r11
|
||||
vperm x0, a0, z, pv C extract 4 24-bit field from a0
|
||||
vperm y0, c2, z, pv
|
||||
lvx pv, r5, r11
|
||||
vperm x1, a1, z, pv C extract 4 24-bit field from a1
|
||||
vperm y1, c0, z, pv C extract 4 24-bit field from a1
|
||||
lvx pv, r6, r11
|
||||
vperm x2, a2, z, pv C extract 4 24-bit field from a1
|
||||
vperm y2, c1, z, pv C extract 4 24-bit field from a1
|
||||
li r10, 48
|
||||
lvx pv, r10, r11
|
||||
vperm x3, a0, z, pv C extract remaining/partial a0 fields
|
||||
vperm y3, c2, z, pv C extract remaining/partial a0 fields
|
||||
li r10, 64
|
||||
lvx pv, r10, r11
|
||||
vperm x3, a1, x3, pv C insert remaining/partial a1 fields
|
||||
vperm y3, c0, y3, pv C insert remaining/partial a1 fields
|
||||
li r10, 80
|
||||
lvx pv, r10, r11
|
||||
vperm x3, a2, x3, pv C insert remaining/partial a2 fields
|
||||
vperm y3, c1, y3, pv C insert remaining/partial a2 fields
|
||||
|
||||
C We now have 4 128-bit accumulators to sum
|
||||
vadduwm x0, x0, x1
|
||||
vadduwm x2, x2, x3
|
||||
vadduwm x0, x0, x2
|
||||
|
||||
vadduwm y0, y0, y1
|
||||
vadduwm y2, y2, y3
|
||||
vadduwm y0, y0, y2
|
||||
|
||||
vadduwm x0, x0, y0
|
||||
|
||||
C Reduce 32-bit fields
|
||||
vsumsws x0, x0, z
|
||||
|
||||
li r7, 16
|
||||
stvx x0, r7, r1
|
||||
lwz r3, 28(r1)
|
||||
|
||||
mtspr 256, r10
|
||||
addi r1, r1, 32
|
||||
blr
|
||||
EPILOGUE()
|
||||
|
||||
C load | v0 | v1 | v2 |
|
||||
C acc | a0 | a1 | a2 |
|
||||
C carry | c0 | c1 | c2 |
|
||||
C | 0 1 2 3 | 4 5 6 7 | 8 9 10 11 | 128
|
||||
C |---|---|---|---|---|---|---|---|---|---|---|---| 32
|
||||
C | | | | | | | | | | | | | | | | | 24
|
||||
C | | | | | | | | | 48
|
||||
|
||||
C $---------------$---------------$---------------$---------------$
|
||||
C | . . . . . . . . . . . . . . . |
|
||||
C |_______________________________________________________________|
|
||||
C | | | | | | |
|
||||
C <-hi16-> <--- 24 --> <--- 24 --> <--- 24 --> <--- 24 --> <-lo16->
|
||||
|
||||
|
||||
DEF_OBJECT(cnsts,16)
|
||||
C Permutation vectors in the order they are used above
|
||||
C # 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
|
||||
.byte 0x10,0x01,0x02,0x03, 0x10,0x06,0x07,0x00, 0x10,0x0b,0x04,0x05, 0x10,0x08,0x09,0x0a C a0
|
||||
.byte 0x10,0x07,0x00,0x01, 0x10,0x04,0x05,0x06, 0x10,0x09,0x0a,0x0b, 0x10,0x0e,0x0f,0x08 C a1
|
||||
.byte 0x10,0x00,0x01,0x02, 0x10,0x05,0x06,0x07, 0x10,0x0a,0x0b,0x04, 0x10,0x0f,0x08,0x09 C a2
|
||||
.byte 0x10,0x0d,0x0e,0x0f, 0x10,0x10,0x10,0x0c, 0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10 C part a0
|
||||
.byte 0x10,0x11,0x12,0x13, 0x10,0x02,0x03,0x17, 0x10,0x10,0x0c,0x0d, 0x10,0x10,0x10,0x10 C part a1
|
||||
.byte 0x10,0x11,0x12,0x13, 0x10,0x15,0x16,0x17, 0x10,0x03,0x1a,0x1b, 0x10,0x0c,0x0d,0x0e C part a2
|
||||
C Masks for high end of number
|
||||
.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
.byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00
|
||||
C Masks for low end of number
|
||||
C .byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
C .byte 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
C .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
C .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
END_OBJECT(cnsts)
|
||||
34
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/popcount.asm
vendored
Normal file
34
blender-5.2.0/extern/gmp-source/mpn/powerpc32/vmx/popcount.asm
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
dnl PowerPC-32/VMX mpn_popcount.
|
||||
|
||||
dnl Copyright 2006 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')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_popcount)
|
||||
include_mpn(`powerpc64/vmx/popcount.asm')
|
||||
Reference in New Issue
Block a user