Hex Artifact Content
Not logged in

Artifact 0c3e4d1bcf856abf4c1367b1531bf6c4bc303c62:


0000: 64 6e 6c 20 20 41 6c 70 68 61 20 6d 70 6e 5f 73  dnl  Alpha mpn_s
0010: 71 72 5f 64 69 61 67 6f 6e 61 6c 2e 0a 0a 64 6e  qr_diagonal...dn
0020: 6c 20 20 43 6f 70 79 72 69 67 68 74 20 32 30 30  l  Copyright 200
0030: 31 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20  1 Free Software 
0040: 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e 63 2e  Foundation, Inc.
0050: 0a 0a 64 6e 6c 20 20 54 68 69 73 20 66 69 6c 65  ..dnl  This file
0060: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
0070: 47 4e 55 20 4d 50 20 4c 69 62 72 61 72 79 2e 0a  GNU MP Library..
0080: 0a 64 6e 6c 20 20 54 68 65 20 47 4e 55 20 4d 50  .dnl  The GNU MP
0090: 20 4c 69 62 72 61 72 79 20 69 73 20 66 72 65 65   Library is free
00a0: 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63   software; you c
00b0: 61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20  an redistribute 
00c0: 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79  it and/or modify
00d0: 0a 64 6e 6c 20 20 69 74 20 75 6e 64 65 72 20 74  .dnl  it under t
00e0: 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  he terms of the 
00f0: 47 4e 55 20 4c 65 73 73 65 72 20 47 65 6e 65 72  GNU Lesser Gener
0100: 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73  al Public Licens
0110: 65 20 61 73 20 70 75 62 6c 69 73 68 65 64 0a 64  e as published.d
0120: 6e 6c 20 20 62 79 20 74 68 65 20 46 72 65 65 20  nl  by the Free 
0130: 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74  Software Foundat
0140: 69 6f 6e 3b 20 65 69 74 68 65 72 20 76 65 72 73  ion; either vers
0150: 69 6f 6e 20 32 2e 31 20 6f 66 20 74 68 65 20 4c  ion 2.1 of the L
0160: 69 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 0a 64  icense, or (at.d
0170: 6e 6c 20 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29  nl  your option)
0180: 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 69   any later versi
0190: 6f 6e 2e 0a 0a 64 6e 6c 20 20 54 68 65 20 47 4e  on...dnl  The GN
01a0: 55 20 4d 50 20 4c 69 62 72 61 72 79 20 69 73 20  U MP Library is 
01b0: 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 74  distributed in t
01c0: 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20  he hope that it 
01d0: 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 20  will be useful, 
01e0: 62 75 74 0a 64 6e 6c 20 20 57 49 54 48 4f 55 54  but.dnl  WITHOUT
01f0: 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77   ANY WARRANTY; w
0200: 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20  ithout even the 
0210: 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79  implied warranty
0220: 20 6f 66 20 4d 45 52 43 48 41 4e 54 41 42 49 4c   of MERCHANTABIL
0230: 49 54 59 0a 64 6e 6c 20 20 6f 72 20 46 49 54 4e  ITY.dnl  or FITN
0240: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0250: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
0260: 65 65 20 74 68 65 20 47 4e 55 20 4c 65 73 73 65  ee the GNU Lesse
0270: 72 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  r General Public
0280: 0a 64 6e 6c 20 20 4c 69 63 65 6e 73 65 20 66 6f  .dnl  License fo
0290: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
02a0: 0a 64 6e 6c 20 20 59 6f 75 20 73 68 6f 75 6c 64  .dnl  You should
02b0: 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61   have received a
02c0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55   copy of the GNU
02d0: 20 4c 65 73 73 65 72 20 47 65 6e 65 72 61 6c 20   Lesser General 
02e0: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 64  Public License.d
02f0: 6e 6c 20 20 61 6c 6f 6e 67 20 77 69 74 68 20 74  nl  along with t
0300: 68 65 20 47 4e 55 20 4d 50 20 4c 69 62 72 61 72  he GNU MP Librar
0310: 79 3b 20 73 65 65 20 74 68 65 20 66 69 6c 65 20  y; see the file 
0320: 43 4f 50 59 49 4e 47 2e 4c 49 42 2e 20 20 49 66  COPYING.LIB.  If
0330: 20 6e 6f 74 2c 20 77 72 69 74 65 20 74 6f 0a 64   not, write to.d
0340: 6e 6c 20 20 74 68 65 20 46 72 65 65 20 53 6f 66  nl  the Free Sof
0350: 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e  tware Foundation
0360: 2c 20 49 6e 63 2e 2c 20 35 39 20 54 65 6d 70 6c  , Inc., 59 Templ
0370: 65 20 50 6c 61 63 65 20 2d 20 53 75 69 74 65 20  e Place - Suite 
0380: 33 33 30 2c 20 42 6f 73 74 6f 6e 2c 0a 64 6e 6c  330, Boston,.dnl
0390: 20 20 4d 41 20 30 32 31 31 31 2d 31 33 30 37 2c    MA 02111-1307,
03a0: 20 55 53 41 2e 0a 0a 69 6e 63 6c 75 64 65 28 60   USA...include(`
03b0: 2e 2e 2f 63 6f 6e 66 69 67 2e 6d 34 27 29 0a 0a  ../config.m4')..
03c0: 64 6e 6c 20 20 49 4e 50 55 54 20 50 41 52 41 4d  dnl  INPUT PARAM
03d0: 45 54 45 52 53 0a 64 6e 6c 20 20 72 65 73 5f 70  ETERS.dnl  res_p
03e0: 74 72 09 72 31 36 0a 64 6e 6c 20 20 73 31 5f 70  tr.r16.dnl  s1_p
03f0: 74 72 09 72 31 37 0a 64 6e 6c 20 20 73 69 7a 65  tr.r17.dnl  size
0400: 09 72 31 38 0a 0a 64 6e 6c 20 20 54 68 69 73 20  .r18..dnl  This 
0410: 63 6f 64 65 20 72 75 6e 73 20 61 74 20 34 32 20  code runs at 42 
0420: 63 79 63 6c 65 73 2f 6c 69 6d 62 20 6f 6e 20 45  cycles/limb on E
0430: 56 34 2c 20 31 38 20 63 79 63 6c 65 73 2f 6c 69  V4, 18 cycles/li
0440: 6d 62 20 6f 6e 20 45 56 35 2c 20 61 6e 64 20 34  mb on EV5, and 4
0450: 0a 64 6e 6c 20 20 63 79 63 6c 65 73 2f 6c 69 6d  .dnl  cycles/lim
0460: 62 20 6f 6e 20 45 56 36 2e 0a 0a 41 53 4d 5f 53  b on EV6...ASM_S
0470: 54 41 52 54 28 29 0a 50 52 4f 4c 4f 47 55 45 28  TART().PROLOGUE(
0480: 6d 70 6e 5f 73 71 72 5f 64 69 61 67 6f 6e 61 6c  mpn_sqr_diagonal
0490: 29 0a 09 6c 64 71 09 72 32 2c 30 28 72 31 37 29  )..ldq.r2,0(r17)
04a0: 09 43 20 72 32 20 3d 20 73 31 5f 6c 69 6d 62 0a  .C r2 = s1_limb.
04b0: 09 6c 64 61 09 72 31 38 2c 2d 32 28 72 31 38 29  .lda.r18,-2(r18)
04c0: 09 43 20 73 69 7a 65 20 2d 3d 20 32 0a 09 6d 75  .C size -= 2..mu
04d0: 6c 71 09 72 32 2c 72 32 2c 72 33 09 43 20 72 33  lq.r2,r2,r3.C r3
04e0: 20 3d 20 70 72 6f 64 5f 6c 6f 77 0a 09 75 6d 75   = prod_low..umu
04f0: 6c 68 09 72 32 2c 72 32 2c 72 34 09 43 20 72 34  lh.r2,r2,r4.C r4
0500: 20 3d 20 70 72 6f 64 5f 68 69 67 68 0a 09 62 6c   = prod_high..bl
0510: 74 09 72 31 38 2c 24 4c 65 6e 64 31 09 43 20 6a  t.r18,$Lend1.C j
0520: 75 6d 70 20 69 66 20 73 69 7a 65 20 77 61 73 20  ump if size was 
0530: 3d 3d 20 31 0a 09 6c 64 71 09 72 32 2c 38 28 72  == 1..ldq.r2,8(r
0540: 31 37 29 09 43 20 72 32 20 3d 20 73 31 5f 6c 69  17).C r2 = s1_li
0550: 6d 62 0a 09 62 65 71 09 72 31 38 2c 24 4c 65 6e  mb..beq.r18,$Len
0560: 64 32 09 43 20 6a 75 6d 70 20 69 66 20 73 69 7a  d2.C jump if siz
0570: 65 20 77 61 73 20 3d 3d 20 32 0a 0a 09 41 4c 49  e was == 2...ALI
0580: 47 4e 28 38 29 0a 24 4c 6f 6f 70 3a 09 73 74 71  GN(8).$Loop:.stq
0590: 09 72 33 2c 30 28 72 31 36 29 0a 09 6d 75 6c 71  .r3,0(r16)..mulq
05a0: 09 72 32 2c 72 32 2c 72 33 09 43 20 72 33 20 3d  .r2,r2,r3.C r3 =
05b0: 20 70 72 6f 64 5f 6c 6f 77 0a 09 6c 64 61 09 72   prod_low..lda.r
05c0: 31 38 2c 2d 31 28 72 31 38 29 09 43 20 73 69 7a  18,-1(r18).C siz
05d0: 65 2d 2d 0a 09 73 74 71 09 72 34 2c 38 28 72 31  e--..stq.r4,8(r1
05e0: 36 29 0a 09 75 6d 75 6c 68 09 72 32 2c 72 32 2c  6)..umulh.r2,r2,
05f0: 72 34 09 43 20 72 34 20 3d 20 63 79 5f 6c 69 6d  r4.C r4 = cy_lim
0600: 62 0a 09 6c 64 71 09 72 32 2c 31 36 28 72 31 37  b..ldq.r2,16(r17
0610: 29 09 43 20 72 32 20 3d 20 73 31 5f 6c 69 6d 62  ).C r2 = s1_limb
0620: 0a 09 6c 64 61 09 72 31 37 2c 38 28 72 31 37 29  ..lda.r17,8(r17)
0630: 09 43 20 73 31 5f 70 74 72 2b 2b 0a 09 6c 64 61  .C s1_ptr++..lda
0640: 09 72 31 36 2c 31 36 28 72 31 36 29 09 43 20 72  .r16,16(r16).C r
0650: 65 73 5f 70 74 72 2b 2b 0a 09 62 6e 65 09 72 31  es_ptr++..bne.r1
0660: 38 2c 24 4c 6f 6f 70 0a 0a 24 4c 65 6e 64 32 3a  8,$Loop..$Lend2:
0670: 09 73 74 71 09 72 33 2c 30 28 72 31 36 29 0a 09  .stq.r3,0(r16)..
0680: 6d 75 6c 71 09 72 32 2c 72 32 2c 72 33 09 43 20  mulq.r2,r2,r3.C 
0690: 72 33 20 3d 20 70 72 6f 64 5f 6c 6f 77 0a 09 73  r3 = prod_low..s
06a0: 74 71 09 72 34 2c 38 28 72 31 36 29 0a 09 75 6d  tq.r4,8(r16)..um
06b0: 75 6c 68 09 72 32 2c 72 32 2c 72 34 09 43 20 72  ulh.r2,r2,r4.C r
06c0: 34 20 3d 20 63 79 5f 6c 69 6d 62 0a 09 73 74 71  4 = cy_limb..stq
06d0: 09 72 33 2c 31 36 28 72 31 36 29 0a 09 73 74 71  .r3,16(r16)..stq
06e0: 09 72 34 2c 32 34 28 72 31 36 29 0a 09 72 65 74  .r4,24(r16)..ret
06f0: 09 72 33 31 2c 28 72 32 36 29 2c 31 0a 24 4c 65  .r31,(r26),1.$Le
0700: 6e 64 31 3a 09 73 74 71 09 72 33 2c 30 28 72 31  nd1:.stq.r3,0(r1
0710: 36 29 0a 09 73 74 71 09 72 34 2c 38 28 72 31 36  6)..stq.r4,8(r16
0720: 29 0a 09 72 65 74 09 72 33 31 2c 28 72 32 36 29  )..ret.r31,(r26)
0730: 2c 31 0a 45 50 49 4c 4f 47 55 45 28 6d 70 6e 5f  ,1.EPILOGUE(mpn_
0740: 73 71 72 5f 64 69 61 67 6f 6e 61 6c 29 0a 41 53  sqr_diagonal).AS
0750: 4d 5f 45 4e 44 28 29 0a                          M_END().