PageRenderTime 96ms CodeModel.GetById 12ms app.highlight 67ms RepoModel.GetById 1ms app.codeStats 0ms

/security/nss/lib/freebl/mpi/montmulfv9.s

http://github.com/zpao/v8monkey
Assembly | 2380 lines | 2308 code | 72 blank | 0 comment | 22 complexity | 372b9ac3da56c404731d9b3376e645f5 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

   1!  
   2! ***** BEGIN LICENSE BLOCK *****
   3! Version: MPL 1.1/GPL 2.0/LGPL 2.1
   4!
   5! The contents of this file are subject to the Mozilla Public License Version
   6! 1.1 (the "License"); you may not use this file except in compliance with
   7! the License. You may obtain a copy of the License at
   8! http://www.mozilla.org/MPL/
   9!
  10! Software distributed under the License is distributed on an "AS IS" basis,
  11! WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12! for the specific language governing rights and limitations under the
  13! License.
  14!
  15! The Original Code is SPARC hand-optimized Montgomery multiply functions.
  16!
  17! The Initial Developer of the Original Code is
  18! Sun Microsystems Inc.
  19! Portions created by the Initial Developer are Copyright (C) 1999-2000
  20! the Initial Developer. All Rights Reserved.
  21!
  22! Contributor(s):
  23!
  24! Alternatively, the contents of this file may be used under the terms of
  25! either the GNU General Public License Version 2 or later (the "GPL"), or
  26! the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27! in which case the provisions of the GPL or the LGPL are applicable instead
  28! of those above. If you wish to allow use of your version of this file only
  29! under the terms of either the GPL or the LGPL, and not to allow others to
  30! use your version of this file under the terms of the MPL, indicate your
  31! decision by deleting the provisions above and replace them with the notice
  32! and other provisions required by the GPL or the LGPL. If you do not delete
  33! the provisions above, a recipient may use your version of this file under
  34! the terms of any one of the MPL, the GPL or the LGPL.
  35!
  36! ***** END LICENSE BLOCK *****
  37
  38	.section	".text",#alloc,#execinstr
  39	.file	"montmulf.c"
  40
  41	.section	".rodata",#alloc
  42	.global	TwoTo16
  43	.align	8
  44!
  45! CONSTANT POOL
  46!
  47	.global TwoTo16
  48TwoTo16:
  49	.word	1089470464
  50	.word	0
  51	.type	TwoTo16,#object
  52	.size	TwoTo16,8
  53	.global	TwoToMinus16
  54!
  55! CONSTANT POOL
  56!
  57	.global TwoToMinus16
  58TwoToMinus16:
  59	.word	1055916032
  60	.word	0
  61	.type	TwoToMinus16,#object
  62	.size	TwoToMinus16,8
  63	.global	Zero
  64!
  65! CONSTANT POOL
  66!
  67	.global Zero
  68Zero:
  69	.word	0
  70	.word	0
  71	.type	Zero,#object
  72	.size	Zero,8
  73	.global	TwoTo32
  74!
  75! CONSTANT POOL
  76!
  77	.global TwoTo32
  78TwoTo32:
  79	.word	1106247680
  80	.word	0
  81	.type	TwoTo32,#object
  82	.size	TwoTo32,8
  83	.global	TwoToMinus32
  84!
  85! CONSTANT POOL
  86!
  87	.global TwoToMinus32
  88TwoToMinus32:
  89	.word	1039138816
  90	.word	0
  91	.type	TwoToMinus32,#object
  92	.size	TwoToMinus32,8
  93
  94	.section	".text",#alloc,#execinstr
  95/* 000000	   0 */		.register	%g3,#scratch
  96/* 000000	     */		.register	%g2,#scratch
  97/* 000000	   0 */		.align	8
  98!
  99! SUBROUTINE conv_d16_to_i32
 100!
 101! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
 102
 103                       	.global conv_d16_to_i32
 104                       conv_d16_to_i32:
 105/* 000000	     */		save	%sp,-208,%sp
 106! FILE montmulf.c
 107
 108!    1		      !/*
 109!    2		      ! * The contents of this file are subject to the Mozilla Public
 110!    3		      ! * License Version 1.1 (the "License"); you may not use this file
 111!    4		      ! * except in compliance with the License. You may obtain a copy of
 112!    5		      ! * the License at http://www.mozilla.org/MPL/
 113!    6		      ! * 
 114!    7		      ! * Software distributed under the License is distributed on an "AS
 115!    8		      ! * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 116!    9		      ! * implied. See the License for the specific language governing
 117!   10		      ! * rights and limitations under the License.
 118!   11		      ! * 
 119!   12		      ! * The Original Code is SPARC optimized Montgomery multiply functions.
 120!   13		      ! *
 121!   14		      ! * The Initial Developer of the Original Code is Sun Microsystems Inc.
 122!   15		      ! * Portions created by Sun Microsystems Inc. are 
 123!   16		      ! * Copyright (C) 1999-2000 Sun Microsystems Inc.  All Rights Reserved.
 124!   17		      ! * 
 125!   18		      ! * Contributor(s):
 126!   19		      ! *	Netscape Communications Corporation
 127!   20		      ! * 
 128!   21		      ! * Alternatively, the contents of this file may be used under the
 129!   22		      ! * terms of the GNU General Public License Version 2 or later (the
 130!   23		      ! * "GPL"), in which case the provisions of the GPL are applicable 
 131!   24		      ! * instead of those above.	If you wish to allow use of your 
 132!   25		      ! * version of this file only under the terms of the GPL and not to
 133!   26		      ! * allow others to use your version of this file under the MPL,
 134!   27		      ! * indicate your decision by deleting the provisions above and
 135!   28		      ! * replace them with the notice and other provisions required by
 136!   29		      ! * the GPL.  If you do not delete the provisions above, a recipient
 137!   30		      ! * may use your version of this file under either the MPL or the
 138!   31		      ! * GPL.
 139!   32		      ! *
 140!   33		      ! *  $Id: montmulfv9.s,v 1.5 2006/12/11 09:45:32 gerv%gerv.net Exp $
 141!   34		      ! */
 142!   36		      !#define RF_INLINE_MACROS
 143!   38		      !static const double TwoTo16=65536.0;
 144!   39		      !static const double TwoToMinus16=1.0/65536.0;
 145!   40		      !static const double Zero=0.0;
 146!   41		      !static const double TwoTo32=65536.0*65536.0;
 147!   42		      !static const double TwoToMinus32=1.0/(65536.0*65536.0);
 148!   44		      !#ifdef RF_INLINE_MACROS
 149!   46		      !double upper32(double);
 150!   47		      !double lower32(double, double);
 151!   48		      !double mod(double, double, double);
 152!   50		      !void i16_to_d16_and_d32x4(const double * /*1/(2^16)*/, 
 153!   51		      !			  const double * /* 2^16*/,
 154!   52		      !			  const double * /* 0 */,
 155!   53		      !			  double *       /*result16*/, 
 156!   54		      !			  double *       /* result32 */,
 157!   55		      !			  float *  /*source - should be unsigned int*
 158!   56		      !		          	       converted to float* */);
 159!   58		      !#else
 160!   60		      !static double upper32(double x)
 161!   61		      !{
 162!   62		      !  return floor(x*TwoToMinus32);
 163!   63		      !}
 164!   65		      !static double lower32(double x, double y)
 165!   66		      !{
 166!   67		      !  return x-TwoTo32*floor(x*TwoToMinus32);
 167!   68		      !}
 168!   70		      !static double mod(double x, double oneoverm, double m)
 169!   71		      !{
 170!   72		      !  return x-m*floor(x*oneoverm);
 171!   73		      !}
 172!   75		      !#endif
 173!   78		      !static void cleanup(double *dt, int from, int tlen)
 174!   79		      !{
 175!   80		      ! int i;
 176!   81		      ! double tmp,tmp1,x,x1;
 177!   83		      ! tmp=tmp1=Zero;
 178!   84		      ! /* original code **
 179!   85		      ! for(i=2*from;i<2*tlen-2;i++)
 180!   86		      !   {
 181!   87		      !     x=dt[i];
 182!   88		      !     dt[i]=lower32(x,Zero)+tmp1;
 183!   89		      !     tmp1=tmp;
 184!   90		      !     tmp=upper32(x);
 185!   91		      !   }
 186!   92		      ! dt[tlen-2]+=tmp1;
 187!   93		      ! dt[tlen-1]+=tmp;
 188!   94		      ! **end original code ***/
 189!   95		      ! /* new code ***/
 190!   96		      ! for(i=2*from;i<2*tlen;i+=2)
 191!   97		      !   {
 192!   98		      !     x=dt[i];
 193!   99		      !     x1=dt[i+1];
 194!  100		      !     dt[i]=lower32(x,Zero)+tmp;
 195!  101		      !     dt[i+1]=lower32(x1,Zero)+tmp1;
 196!  102		      !     tmp=upper32(x);
 197!  103		      !     tmp1=upper32(x1);
 198!  104		      !   }
 199!  105		      !  /** end new code **/
 200!  106		      !}
 201!  109		      !void conv_d16_to_i32(unsigned int *i32, double *d16, long long *tmp, int ilen)
 202!  110		      !{
 203!  111		      !int i;
 204!  112		      !long long t, t1, a, b, c, d;
 205!  114		      ! t1=0;
 206!  115		      ! a=(long long)d16[0];
 207
 208/* 0x0004	 115 */		ldd	[%i1],%f2
 209
 210!  116		      ! b=(long long)d16[1];
 211!  117		      ! for(i=0; i<ilen-1; i++)
 212
 213/* 0x0008	 117 */		sub	%i3,1,%o1
 214/* 0x000c	 110 */		or	%g0,%i0,%g1
 215/* 0x0010	 116 */		ldd	[%i1+8],%f4
 216/* 0x0014	 117 */		cmp	%o1,0
 217/* 0x0018	 114 */		or	%g0,0,%g5
 218/* 0x001c	 115 */		fdtox	%f2,%f2
 219/* 0x0020	     */		std	%f2,[%sp+2247]
 220/* 0x0024	 117 */		or	%g0,0,%o0
 221/* 0x0028	 116 */		fdtox	%f4,%f2
 222/* 0x002c	     */		std	%f2,[%sp+2239]
 223/* 0x0030	 110 */		sub	%o1,1,%o7
 224/* 0x0034	     */		or	%g0,%i1,%o4
 225/* 0x0038	     */		sethi	%hi(0xfc00),%o3
 226/* 0x003c	     */		or	%g0,-1,%o1
 227/* 0x0040	     */		or	%g0,2,%i1
 228/* 0x0044	     */		srl	%o1,0,%g3
 229/* 0x0048	     */		or	%g0,%o4,%g4
 230/* 0x004c	 116 */		ldx	[%sp+2239],%i2
 231/* 0x0050	     */		add	%o3,1023,%o5
 232/* 0x0054	 117 */		sub	%o7,1,%o2
 233/* 0x0058	 115 */		ldx	[%sp+2247],%i3
 234/* 0x005c	 117 */		ble,pt	%icc,.L900000113
 235/* 0x0060	     */		sethi	%hi(0xfc00),%g2
 236/* 0x0064	     */		add	%o7,1,%g2
 237
 238!  118		      !   {
 239!  119		      !     c=(long long)d16[2*i+2];
 240!  120		      !     t1+=a&0xffffffff;
 241!  121		      !     t=(a>>32);
 242!  122		      !     d=(long long)d16[2*i+3];
 243!  123		      !     t1+=(b&0xffff)<<16;
 244
 245/* 0x0068	 123 */		and	%i2,%o5,%i4
 246/* 0x006c	     */		sllx	%i4,16,%o1
 247/* 0x0070	 117 */		cmp	%g2,6
 248/* 0x0074	     */		bl,pn	%icc,.L77000134
 249/* 0x0078	     */		or	%g0,3,%i0
 250/* 0x007c	 119 */		ldd	[%o4+16],%f0
 251/* 0x0080	 120 */		and	%i3,%g3,%o3
 252
 253!  124		      !     t+=(b>>16)+(t1>>32);
 254
 255/* 0x0084	 124 */		srax	%i2,16,%i5
 256/* 0x0088	 117 */		add	%o3,%o1,%i4
 257/* 0x008c	 121 */		srax	%i3,32,%i3
 258/* 0x0090	 119 */		fdtox	%f0,%f0
 259/* 0x0094	     */		std	%f0,[%sp+2231]
 260
 261!  125		      !     i32[i]=t1&0xffffffff;
 262
 263/* 0x0098	 125 */		and	%i4,%g3,%l0
 264/* 0x009c	 117 */		or	%g0,72,%o3
 265/* 0x00a0	 122 */		ldd	[%g4+24],%f0
 266/* 0x00a4	 117 */		or	%g0,64,%o4
 267/* 0x00a8	     */		or	%g0,4,%o1
 268
 269!  126		      !     t1=t;
 270!  127		      !     a=c;
 271!  128		      !     b=d;
 272
 273/* 0x00ac	 128 */		or	%g0,5,%i0
 274/* 0x00b0	     */		or	%g0,4,%i1
 275/* 0x00b4	 119 */		ldx	[%sp+2231],%g2
 276/* 0x00b8	 122 */		fdtox	%f0,%f0
 277/* 0x00bc	 128 */		or	%g0,4,%o0
 278/* 0x00c0	 122 */		std	%f0,[%sp+2223]
 279/* 0x00c4	     */		ldd	[%g4+40],%f2
 280/* 0x00c8	 120 */		and	%g2,%g3,%i2
 281/* 0x00cc	 119 */		ldd	[%g4+32],%f0
 282/* 0x00d0	 121 */		srax	%g2,32,%g2
 283/* 0x00d4	 122 */		ldd	[%g4+56],%f4
 284/* 0x00d8	     */		fdtox	%f2,%f2
 285/* 0x00dc	     */		ldx	[%sp+2223],%g5
 286/* 0x00e0	 119 */		fdtox	%f0,%f0
 287/* 0x00e4	 125 */		st	%l0,[%g1]
 288/* 0x00e8	 124 */		srax	%i4,32,%l0
 289/* 0x00ec	 122 */		fdtox	%f4,%f4
 290/* 0x00f0	     */		std	%f2,[%sp+2223]
 291/* 0x00f4	 123 */		and	%g5,%o5,%i4
 292/* 0x00f8	 124 */		add	%i5,%l0,%i5
 293/* 0x00fc	 119 */		std	%f0,[%sp+2231]
 294/* 0x0100	 123 */		sllx	%i4,16,%i4
 295/* 0x0104	 124 */		add	%i3,%i5,%i3
 296/* 0x0108	 119 */		ldd	[%g4+48],%f2
 297/* 0x010c	 124 */		srax	%g5,16,%g5
 298/* 0x0110	 117 */		add	%i2,%i4,%i2
 299/* 0x0114	 122 */		ldd	[%g4+72],%f0
 300/* 0x0118	 117 */		add	%i2,%i3,%i4
 301/* 0x011c	 124 */		srax	%i4,32,%i5
 302/* 0x0120	 119 */		fdtox	%f2,%f2
 303/* 0x0124	 125 */		and	%i4,%g3,%i4
 304/* 0x0128	 122 */		ldx	[%sp+2223],%i2
 305/* 0x012c	 124 */		add	%g5,%i5,%g5
 306/* 0x0130	 119 */		ldx	[%sp+2231],%i3
 307/* 0x0134	 124 */		add	%g2,%g5,%g5
 308/* 0x0138	 119 */		std	%f2,[%sp+2231]
 309/* 0x013c	 122 */		std	%f4,[%sp+2223]
 310/* 0x0140	 119 */		ldd	[%g4+64],%f2
 311/* 0x0144	 125 */		st	%i4,[%g1+4]
 312                       .L900000108:
 313/* 0x0148	 122 */		ldx	[%sp+2223],%i4
 314/* 0x014c	 128 */		add	%o0,2,%o0
 315/* 0x0150	     */		add	%i0,4,%i0
 316/* 0x0154	 119 */		ldx	[%sp+2231],%l0
 317/* 0x0158	 117 */		add	%o3,16,%o3
 318/* 0x015c	 123 */		and	%i2,%o5,%g2
 319/* 0x0160	     */		sllx	%g2,16,%i5
 320/* 0x0164	 120 */		and	%i3,%g3,%g2
 321/* 0x0168	 122 */		ldd	[%g4+%o3],%f4
 322/* 0x016c	     */		fdtox	%f0,%f0
 323/* 0x0170	     */		std	%f0,[%sp+2223]
 324/* 0x0174	 124 */		srax	%i2,16,%i2
 325/* 0x0178	 117 */		add	%g2,%i5,%g2
 326/* 0x017c	 119 */		fdtox	%f2,%f0
 327/* 0x0180	 117 */		add	%o4,16,%o4
 328/* 0x0184	 119 */		std	%f0,[%sp+2231]
 329/* 0x0188	 117 */		add	%g2,%g5,%g2
 330/* 0x018c	 119 */		ldd	[%g4+%o4],%f2
 331/* 0x0190	 124 */		srax	%g2,32,%i5
 332/* 0x0194	 128 */		cmp	%o0,%o2
 333/* 0x0198	 121 */		srax	%i3,32,%g5
 334/* 0x019c	 124 */		add	%i2,%i5,%i2
 335/* 0x01a0	     */		add	%g5,%i2,%i5
 336/* 0x01a4	 117 */		add	%o1,4,%o1
 337/* 0x01a8	 125 */		and	%g2,%g3,%g2
 338/* 0x01ac	 127 */		or	%g0,%l0,%g5
 339/* 0x01b0	 125 */		st	%g2,[%g1+%o1]
 340/* 0x01b4	 128 */		add	%i1,4,%i1
 341/* 0x01b8	 122 */		ldx	[%sp+2223],%i2
 342/* 0x01bc	 119 */		ldx	[%sp+2231],%i3
 343/* 0x01c0	 117 */		add	%o3,16,%o3
 344/* 0x01c4	 123 */		and	%i4,%o5,%g2
 345/* 0x01c8	     */		sllx	%g2,16,%l0
 346/* 0x01cc	 120 */		and	%g5,%g3,%g2
 347/* 0x01d0	 122 */		ldd	[%g4+%o3],%f0
 348/* 0x01d4	     */		fdtox	%f4,%f4
 349/* 0x01d8	     */		std	%f4,[%sp+2223]
 350/* 0x01dc	 124 */		srax	%i4,16,%i4
 351/* 0x01e0	 117 */		add	%g2,%l0,%g2
 352/* 0x01e4	 119 */		fdtox	%f2,%f2
 353/* 0x01e8	 117 */		add	%o4,16,%o4
 354/* 0x01ec	 119 */		std	%f2,[%sp+2231]
 355/* 0x01f0	 117 */		add	%g2,%i5,%g2
 356/* 0x01f4	 119 */		ldd	[%g4+%o4],%f2
 357/* 0x01f8	 124 */		srax	%g2,32,%i5
 358/* 0x01fc	 121 */		srax	%g5,32,%g5
 359/* 0x0200	 124 */		add	%i4,%i5,%i4
 360/* 0x0204	     */		add	%g5,%i4,%g5
 361/* 0x0208	 117 */		add	%o1,4,%o1
 362/* 0x020c	 125 */		and	%g2,%g3,%g2
 363/* 0x0210	 128 */		ble,pt	%icc,.L900000108
 364/* 0x0214	     */		st	%g2,[%g1+%o1]
 365                       .L900000111:
 366/* 0x0218	 122 */		ldx	[%sp+2223],%o2
 367/* 0x021c	 123 */		and	%i2,%o5,%i4
 368/* 0x0220	 120 */		and	%i3,%g3,%g2
 369/* 0x0224	 123 */		sllx	%i4,16,%i4
 370/* 0x0228	 119 */		ldx	[%sp+2231],%i5
 371/* 0x022c	 128 */		cmp	%o0,%o7
 372/* 0x0230	 124 */		srax	%i2,16,%i2
 373/* 0x0234	 117 */		add	%g2,%i4,%g2
 374/* 0x0238	 122 */		fdtox	%f0,%f4
 375/* 0x023c	     */		std	%f4,[%sp+2223]
 376/* 0x0240	 117 */		add	%g2,%g5,%g5
 377/* 0x0244	 123 */		and	%o2,%o5,%l0
 378/* 0x0248	 124 */		srax	%g5,32,%l1
 379/* 0x024c	 120 */		and	%i5,%g3,%i4
 380/* 0x0250	 119 */		fdtox	%f2,%f0
 381/* 0x0254	 121 */		srax	%i3,32,%g2
 382/* 0x0258	 119 */		std	%f0,[%sp+2231]
 383/* 0x025c	 124 */		add	%i2,%l1,%i2
 384/* 0x0260	 123 */		sllx	%l0,16,%i3
 385/* 0x0264	 124 */		add	%g2,%i2,%i2
 386/* 0x0268	     */		srax	%o2,16,%o2
 387/* 0x026c	 117 */		add	%o1,4,%g2
 388/* 0x0270	     */		add	%i4,%i3,%o1
 389/* 0x0274	 125 */		and	%g5,%g3,%g5
 390/* 0x0278	     */		st	%g5,[%g1+%g2]
 391/* 0x027c	 119 */		ldx	[%sp+2231],%i3
 392/* 0x0280	 117 */		add	%o1,%i2,%o1
 393/* 0x0284	     */		add	%g2,4,%g2
 394/* 0x0288	 124 */		srax	%o1,32,%i4
 395/* 0x028c	 122 */		ldx	[%sp+2223],%i2
 396/* 0x0290	 125 */		and	%o1,%g3,%g5
 397/* 0x0294	 121 */		srax	%i5,32,%o1
 398/* 0x0298	 124 */		add	%o2,%i4,%o2
 399/* 0x029c	 125 */		st	%g5,[%g1+%g2]
 400/* 0x02a0	 128 */		bg,pn	%icc,.L77000127
 401/* 0x02a4	     */		add	%o1,%o2,%g5
 402/* 0x02a8	     */		add	%i0,6,%i0
 403/* 0x02ac	     */		add	%i1,6,%i1
 404                       .L77000134:
 405/* 0x02b0	 119 */		sra	%i1,0,%o2
 406                       .L900000112:
 407/* 0x02b4	 119 */		sllx	%o2,3,%o3
 408/* 0x02b8	 120 */		and	%i3,%g3,%o1
 409/* 0x02bc	 119 */		ldd	[%g4+%o3],%f0
 410/* 0x02c0	 122 */		sra	%i0,0,%o3
 411/* 0x02c4	 123 */		and	%i2,%o5,%o2
 412/* 0x02c8	 122 */		sllx	%o3,3,%o3
 413/* 0x02cc	 120 */		add	%g5,%o1,%o1
 414/* 0x02d0	 119 */		fdtox	%f0,%f0
 415/* 0x02d4	     */		std	%f0,[%sp+2231]
 416/* 0x02d8	 123 */		sllx	%o2,16,%o2
 417/* 0x02dc	     */		add	%o1,%o2,%o2
 418/* 0x02e0	 128 */		add	%i1,2,%i1
 419/* 0x02e4	 122 */		ldd	[%g4+%o3],%f0
 420/* 0x02e8	 124 */		srax	%o2,32,%g2
 421/* 0x02ec	 125 */		and	%o2,%g3,%o3
 422/* 0x02f0	 124 */		srax	%i2,16,%o1
 423/* 0x02f4	 128 */		add	%i0,2,%i0
 424/* 0x02f8	 122 */		fdtox	%f0,%f0
 425/* 0x02fc	     */		std	%f0,[%sp+2223]
 426/* 0x0300	 125 */		sra	%o0,0,%o2
 427/* 0x0304	     */		sllx	%o2,2,%o2
 428/* 0x0308	 124 */		add	%o1,%g2,%g5
 429/* 0x030c	 121 */		srax	%i3,32,%g2
 430/* 0x0310	 128 */		add	%o0,1,%o0
 431/* 0x0314	 124 */		add	%g2,%g5,%g5
 432/* 0x0318	 128 */		cmp	%o0,%o7
 433/* 0x031c	 119 */		ldx	[%sp+2231],%o4
 434/* 0x0320	 122 */		ldx	[%sp+2223],%i2
 435/* 0x0324	 125 */		st	%o3,[%g1+%o2]
 436/* 0x0328	 127 */		or	%g0,%o4,%i3
 437/* 0x032c	 128 */		ble,pt	%icc,.L900000112
 438/* 0x0330	     */		sra	%i1,0,%o2
 439                       .L77000127:
 440
 441!  129		      !   }
 442!  130		      !     t1+=a&0xffffffff;
 443!  131		      !     t=(a>>32);
 444!  132		      !     t1+=(b&0xffff)<<16;
 445!  133		      !     i32[i]=t1&0xffffffff;
 446
 447/* 0x0334	 133 */		sethi	%hi(0xfc00),%g2
 448                       .L900000113:
 449/* 0x0338	 133 */		or	%g0,-1,%g3
 450/* 0x033c	     */		add	%g2,1023,%g2
 451/* 0x0340	     */		srl	%g3,0,%g3
 452/* 0x0344	     */		and	%i2,%g2,%g2
 453/* 0x0348	     */		and	%i3,%g3,%g4
 454/* 0x034c	     */		sllx	%g2,16,%g2
 455/* 0x0350	     */		add	%g5,%g4,%g4
 456/* 0x0354	     */		sra	%o0,0,%g5
 457/* 0x0358	     */		add	%g4,%g2,%g4
 458/* 0x035c	     */		sllx	%g5,2,%g2
 459/* 0x0360	     */		and	%g4,%g3,%g3
 460/* 0x0364	     */		st	%g3,[%g1+%g2]
 461/* 0x0368	     */		ret	! Result = 
 462/* 0x036c	     */		restore	%g0,%g0,%g0
 463/* 0x0370	   0 */		.type	conv_d16_to_i32,2
 464/* 0x0370	     */		.size	conv_d16_to_i32,(.-conv_d16_to_i32)
 465
 466	.section	".text",#alloc,#execinstr
 467/* 000000	   0 */		.align	8
 468!
 469! CONSTANT POOL
 470!
 471                       .L_const_seg_900000201:
 472/* 000000	   0 */		.word	1127219200,0
 473/* 0x0008	   0 */		.align	8
 474/* 0x0008	     */		.skip	24
 475!
 476! SUBROUTINE conv_i32_to_d32
 477!
 478! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
 479
 480                       	.global conv_i32_to_d32
 481                       conv_i32_to_d32:
 482/* 000000	     */		or	%g0,%o7,%g3
 483
 484!  135		      !}
 485!  137		      !void conv_i32_to_d32(double *d32, unsigned int *i32, int len)
 486!  138		      !{
 487!  139		      !int i;
 488!  141		      !#pragma pipeloop(0)
 489!  142		      ! for(i=0;i<len;i++) d32[i]=(double)(i32[i]);
 490
 491/* 0x0004	 142 */		cmp	%o2,0
 492                       .L900000210:
 493/* 0x0008	     */		call	.+8
 494/* 0x000c	     */		sethi	/*X*/%hi(_GLOBAL_OFFSET_TABLE_-(.L900000210-.)),%g4
 495/* 0x0010	 142 */		or	%g0,0,%o3
 496/* 0x0014	 138 */		add	%g4,/*X*/%lo(_GLOBAL_OFFSET_TABLE_-(.L900000210-.)),%g4
 497/* 0x0018	 142 */		sub	%o2,1,%o4
 498/* 0x001c	 138 */		add	%g4,%o7,%g1
 499/* 0x0020	 142 */		ble,pt	%icc,.L77000140
 500/* 0x0024	     */		or	%g0,%g3,%o7
 501/* 0x0028	     */		sethi	%hi(.L_const_seg_900000201),%g3
 502/* 0x002c	     */		cmp	%o2,12
 503/* 0x0030	     */		add	%g3,%lo(.L_const_seg_900000201),%g2
 504/* 0x0034	     */		or	%g0,%o1,%g5
 505/* 0x0038	     */		ldx	[%g1+%g2],%g4
 506/* 0x003c	     */		or	%g0,0,%g1
 507/* 0x0040	     */		or	%g0,24,%g2
 508/* 0x0044	     */		bl,pn	%icc,.L77000144
 509/* 0x0048	     */		or	%g0,0,%g3
 510/* 0x004c	     */		ld	[%o1],%f13
 511/* 0x0050	     */		or	%g0,7,%o3
 512/* 0x0054	     */		ldd	[%g4],%f8
 513/* 0x0058	     */		sub	%o2,5,%g3
 514/* 0x005c	     */		or	%g0,8,%g1
 515/* 0x0060	     */		ld	[%o1+4],%f11
 516/* 0x0064	     */		ld	[%o1+8],%f7
 517/* 0x0068	     */		fmovs	%f8,%f12
 518/* 0x006c	     */		ld	[%o1+12],%f5
 519/* 0x0070	     */		fmovs	%f8,%f10
 520/* 0x0074	     */		ld	[%o1+16],%f3
 521/* 0x0078	     */		fmovs	%f8,%f6
 522/* 0x007c	     */		ld	[%o1+20],%f1
 523/* 0x0080	     */		fsubd	%f12,%f8,%f12
 524/* 0x0084	     */		std	%f12,[%o0]
 525/* 0x0088	     */		fsubd	%f10,%f8,%f10
 526/* 0x008c	     */		std	%f10,[%o0+8]
 527                       .L900000205:
 528/* 0x0090	     */		ld	[%o1+%g2],%f11
 529/* 0x0094	     */		add	%g1,8,%g1
 530/* 0x0098	     */		add	%o3,5,%o3
 531/* 0x009c	     */		fsubd	%f6,%f8,%f6
 532/* 0x00a0	     */		add	%g2,4,%g2
 533/* 0x00a4	     */		std	%f6,[%o0+%g1]
 534/* 0x00a8	     */		cmp	%o3,%g3
 535/* 0x00ac	     */		fmovs	%f8,%f4
 536/* 0x00b0	     */		ld	[%o1+%g2],%f7
 537/* 0x00b4	     */		fsubd	%f4,%f8,%f12
 538/* 0x00b8	     */		add	%g1,8,%g1
 539/* 0x00bc	     */		add	%g2,4,%g2
 540/* 0x00c0	     */		fmovs	%f8,%f2
 541/* 0x00c4	     */		std	%f12,[%o0+%g1]
 542/* 0x00c8	     */		ld	[%o1+%g2],%f5
 543/* 0x00cc	     */		fsubd	%f2,%f8,%f12
 544/* 0x00d0	     */		add	%g1,8,%g1
 545/* 0x00d4	     */		add	%g2,4,%g2
 546/* 0x00d8	     */		fmovs	%f8,%f0
 547/* 0x00dc	     */		std	%f12,[%o0+%g1]
 548/* 0x00e0	     */		ld	[%o1+%g2],%f3
 549/* 0x00e4	     */		fsubd	%f0,%f8,%f12
 550/* 0x00e8	     */		add	%g1,8,%g1
 551/* 0x00ec	     */		add	%g2,4,%g2
 552/* 0x00f0	     */		fmovs	%f8,%f10
 553/* 0x00f4	     */		std	%f12,[%o0+%g1]
 554/* 0x00f8	     */		ld	[%o1+%g2],%f1
 555/* 0x00fc	     */		fsubd	%f10,%f8,%f10
 556/* 0x0100	     */		add	%g1,8,%g1
 557/* 0x0104	     */		add	%g2,4,%g2
 558/* 0x0108	     */		std	%f10,[%o0+%g1]
 559/* 0x010c	     */		ble,pt	%icc,.L900000205
 560/* 0x0110	     */		fmovs	%f8,%f6
 561                       .L900000208:
 562/* 0x0114	     */		fmovs	%f8,%f4
 563/* 0x0118	     */		ld	[%o1+%g2],%f11
 564/* 0x011c	     */		add	%g1,8,%g3
 565/* 0x0120	     */		fmovs	%f8,%f2
 566/* 0x0124	     */		add	%g1,16,%g1
 567/* 0x0128	     */		cmp	%o3,%o4
 568/* 0x012c	     */		fmovs	%f8,%f0
 569/* 0x0130	     */		add	%g1,8,%o1
 570/* 0x0134	     */		add	%g1,16,%o2
 571/* 0x0138	     */		fmovs	%f8,%f10
 572/* 0x013c	     */		add	%g1,24,%g2
 573/* 0x0140	     */		fsubd	%f6,%f8,%f6
 574/* 0x0144	     */		std	%f6,[%o0+%g3]
 575/* 0x0148	     */		fsubd	%f4,%f8,%f4
 576/* 0x014c	     */		std	%f4,[%o0+%g1]
 577/* 0x0150	     */		sra	%o3,0,%g1
 578/* 0x0154	     */		fsubd	%f2,%f8,%f2
 579/* 0x0158	     */		std	%f2,[%o0+%o1]
 580/* 0x015c	     */		sllx	%g1,2,%g3
 581/* 0x0160	     */		fsubd	%f0,%f8,%f0
 582/* 0x0164	     */		std	%f0,[%o0+%o2]
 583/* 0x0168	     */		fsubd	%f10,%f8,%f0
 584/* 0x016c	     */		bg,pn	%icc,.L77000140
 585/* 0x0170	     */		std	%f0,[%o0+%g2]
 586                       .L77000144:
 587/* 0x0174	     */		ldd	[%g4],%f8
 588                       .L900000211:
 589/* 0x0178	     */		ld	[%g5+%g3],%f13
 590/* 0x017c	     */		sllx	%g1,3,%g2
 591/* 0x0180	     */		add	%o3,1,%o3
 592/* 0x0184	     */		sra	%o3,0,%g1
 593/* 0x0188	     */		cmp	%o3,%o4
 594/* 0x018c	     */		fmovs	%f8,%f12
 595/* 0x0190	     */		sllx	%g1,2,%g3
 596/* 0x0194	     */		fsubd	%f12,%f8,%f0
 597/* 0x0198	     */		std	%f0,[%o0+%g2]
 598/* 0x019c	     */		ble,a,pt	%icc,.L900000211
 599/* 0x01a0	     */		ldd	[%g4],%f8
 600                       .L77000140:
 601/* 0x01a4	     */		retl	! Result = 
 602/* 0x01a8	     */		nop
 603/* 0x01ac	   0 */		.type	conv_i32_to_d32,2
 604/* 0x01ac	     */		.size	conv_i32_to_d32,(.-conv_i32_to_d32)
 605
 606	.section	".text",#alloc,#execinstr
 607/* 000000	   0 */		.align	8
 608!
 609! CONSTANT POOL
 610!
 611                       .L_const_seg_900000301:
 612/* 000000	   0 */		.word	1127219200,0
 613/* 0x0008	   0 */		.align	8
 614/* 0x0008	     */		.skip	24
 615!
 616! SUBROUTINE conv_i32_to_d16
 617!
 618! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
 619
 620                       	.global conv_i32_to_d16
 621                       conv_i32_to_d16:
 622/* 000000	     */		save	%sp,-192,%sp
 623                       .L900000310:
 624/* 0x0004	     */		call	.+8
 625/* 0x0008	     */		sethi	/*X*/%hi(_GLOBAL_OFFSET_TABLE_-(.L900000310-.)),%g3
 626
 627!  143		      !}
 628!  146		      !void conv_i32_to_d16(double *d16, unsigned int *i32, int len)
 629!  147		      !{
 630!  148		      !int i;
 631!  149		      !unsigned int a;
 632!  151		      !#pragma pipeloop(0)
 633!  152		      ! for(i=0;i<len;i++)
 634
 635/* 0x000c	 152 */		cmp	%i2,0
 636/* 0x0010	 147 */		add	%g3,/*X*/%lo(_GLOBAL_OFFSET_TABLE_-(.L900000310-.)),%g3
 637/* 0x0014	 152 */		ble,pt	%icc,.L77000150
 638/* 0x0018	     */		add	%g3,%o7,%o0
 639
 640!  153		      !   {
 641!  154		      !     a=i32[i];
 642!  155		      !     d16[2*i]=(double)(a&0xffff);
 643!  156		      !     d16[2*i+1]=(double)(a>>16);
 644
 645/* 0x001c	 156 */		sethi	%hi(.L_const_seg_900000301),%g2
 646/* 0x0020	 147 */		or	%g0,%i2,%o1
 647/* 0x0024	 152 */		sethi	%hi(0xfc00),%g3
 648/* 0x0028	 156 */		add	%g2,%lo(.L_const_seg_900000301),%g2
 649/* 0x002c	 152 */		or	%g0,%o1,%g4
 650/* 0x0030	 156 */		ldx	[%o0+%g2],%o5
 651/* 0x0034	 152 */		add	%g3,1023,%g1
 652/* 0x0038	 147 */		or	%g0,%i1,%o7
 653/* 0x003c	 152 */		or	%g0,0,%i2
 654/* 0x0040	     */		sub	%o1,1,%g5
 655/* 0x0044	     */		or	%g0,0,%g3
 656/* 0x0048	     */		or	%g0,1,%g2
 657/* 0x004c	 154 */		or	%g0,0,%o2
 658/* 0x0050	     */		cmp	%g4,6
 659/* 0x0054	 152 */		bl,pn	%icc,.L77000154
 660/* 0x0058	     */		ldd	[%o5],%f0
 661/* 0x005c	     */		sub	%o1,2,%o3
 662/* 0x0060	     */		or	%g0,16,%o2
 663/* 0x0064	 154 */		ld	[%i1],%o4
 664/* 0x0068	 156 */		or	%g0,3,%g2
 665/* 0x006c	     */		or	%g0,2,%g3
 666/* 0x0070	 155 */		fmovs	%f0,%f2
 667/* 0x0074	 156 */		or	%g0,4,%i2
 668/* 0x0078	 155 */		and	%o4,%g1,%o0
 669/* 0x007c	     */		st	%o0,[%sp+2227]
 670/* 0x0080	     */		fmovs	%f0,%f4
 671/* 0x0084	 156 */		srl	%o4,16,%i4
 672/* 0x0088	 152 */		or	%g0,12,%o4
 673/* 0x008c	     */		or	%g0,24,%o0
 674/* 0x0090	 155 */		ld	[%sp+2227],%f3
 675/* 0x0094	     */		fsubd	%f2,%f0,%f2
 676/* 0x0098	     */		std	%f2,[%i0]
 677/* 0x009c	 156 */		st	%i4,[%sp+2223]
 678/* 0x00a0	 154 */		ld	[%o7+4],%o1
 679/* 0x00a4	 156 */		fmovs	%f0,%f2
 680/* 0x00a8	 155 */		and	%o1,%g1,%i1
 681/* 0x00ac	 156 */		ld	[%sp+2223],%f3
 682/* 0x00b0	     */		srl	%o1,16,%o1
 683/* 0x00b4	     */		fsubd	%f2,%f0,%f2
 684/* 0x00b8	     */		std	%f2,[%i0+8]
 685/* 0x00bc	     */		st	%o1,[%sp+2223]
 686/* 0x00c0	 155 */		st	%i1,[%sp+2227]
 687/* 0x00c4	 154 */		ld	[%o7+8],%o1
 688/* 0x00c8	 156 */		fmovs	%f0,%f2
 689/* 0x00cc	 155 */		and	%o1,%g1,%g4
 690/* 0x00d0	     */		ld	[%sp+2227],%f5
 691/* 0x00d4	 156 */		srl	%o1,16,%o1
 692/* 0x00d8	     */		ld	[%sp+2223],%f3
 693/* 0x00dc	     */		st	%o1,[%sp+2223]
 694/* 0x00e0	 155 */		fsubd	%f4,%f0,%f4
 695/* 0x00e4	     */		st	%g4,[%sp+2227]
 696/* 0x00e8	 156 */		fsubd	%f2,%f0,%f2
 697/* 0x00ec	 154 */		ld	[%o7+12],%o1
 698/* 0x00f0	 155 */		std	%f4,[%i0+16]
 699/* 0x00f4	 156 */		std	%f2,[%i0+24]
 700                       .L900000306:
 701/* 0x00f8	 155 */		ld	[%sp+2227],%f5
 702/* 0x00fc	 156 */		add	%i2,2,%i2
 703/* 0x0100	     */		add	%g2,4,%g2
 704/* 0x0104	     */		ld	[%sp+2223],%f3
 705/* 0x0108	     */		cmp	%i2,%o3
 706/* 0x010c	     */		add	%g3,4,%g3
 707/* 0x0110	 155 */		and	%o1,%g1,%g4
 708/* 0x0114	 156 */		srl	%o1,16,%o1
 709/* 0x0118	 155 */		st	%g4,[%sp+2227]
 710/* 0x011c	 156 */		st	%o1,[%sp+2223]
 711/* 0x0120	 152 */		add	%o4,4,%o1
 712/* 0x0124	 154 */		ld	[%o7+%o1],%o4
 713/* 0x0128	 156 */		fmovs	%f0,%f2
 714/* 0x012c	 155 */		fmovs	%f0,%f4
 715/* 0x0130	     */		fsubd	%f4,%f0,%f4
 716/* 0x0134	 152 */		add	%o2,16,%o2
 717/* 0x0138	 156 */		fsubd	%f2,%f0,%f2
 718/* 0x013c	 155 */		std	%f4,[%i0+%o2]
 719/* 0x0140	 152 */		add	%o0,16,%o0
 720/* 0x0144	 156 */		std	%f2,[%i0+%o0]
 721/* 0x0148	 155 */		ld	[%sp+2227],%f5
 722/* 0x014c	 156 */		ld	[%sp+2223],%f3
 723/* 0x0150	 155 */		and	%o4,%g1,%g4
 724/* 0x0154	 156 */		srl	%o4,16,%o4
 725/* 0x0158	 155 */		st	%g4,[%sp+2227]
 726/* 0x015c	 156 */		st	%o4,[%sp+2223]
 727/* 0x0160	 152 */		add	%o1,4,%o4
 728/* 0x0164	 154 */		ld	[%o7+%o4],%o1
 729/* 0x0168	 156 */		fmovs	%f0,%f2
 730/* 0x016c	 155 */		fmovs	%f0,%f4
 731/* 0x0170	     */		fsubd	%f4,%f0,%f4
 732/* 0x0174	 152 */		add	%o2,16,%o2
 733/* 0x0178	 156 */		fsubd	%f2,%f0,%f2
 734/* 0x017c	 155 */		std	%f4,[%i0+%o2]
 735/* 0x0180	 152 */		add	%o0,16,%o0
 736/* 0x0184	 156 */		ble,pt	%icc,.L900000306
 737/* 0x0188	     */		std	%f2,[%i0+%o0]
 738                       .L900000309:
 739/* 0x018c	 155 */		ld	[%sp+2227],%f5
 740/* 0x0190	 156 */		fmovs	%f0,%f2
 741/* 0x0194	     */		srl	%o1,16,%o3
 742/* 0x0198	     */		ld	[%sp+2223],%f3
 743/* 0x019c	 155 */		and	%o1,%g1,%i1
 744/* 0x01a0	 152 */		add	%o2,16,%g4
 745/* 0x01a4	 155 */		fmovs	%f0,%f4
 746/* 0x01a8	     */		st	%i1,[%sp+2227]
 747/* 0x01ac	 152 */		add	%o0,16,%o2
 748/* 0x01b0	 156 */		st	%o3,[%sp+2223]
 749/* 0x01b4	 154 */		sra	%i2,0,%o3
 750/* 0x01b8	 152 */		add	%g4,16,%o1
 751/* 0x01bc	 155 */		fsubd	%f4,%f0,%f4
 752/* 0x01c0	     */		std	%f4,[%i0+%g4]
 753/* 0x01c4	 152 */		add	%o0,32,%o0
 754/* 0x01c8	 156 */		fsubd	%f2,%f0,%f2
 755/* 0x01cc	     */		std	%f2,[%i0+%o2]
 756/* 0x01d0	     */		sllx	%o3,2,%o2
 757/* 0x01d4	 155 */		ld	[%sp+2227],%f5
 758/* 0x01d8	 156 */		cmp	%i2,%g5
 759/* 0x01dc	     */		add	%g2,6,%g2
 760/* 0x01e0	     */		ld	[%sp+2223],%f3
 761/* 0x01e4	     */		add	%g3,6,%g3
 762/* 0x01e8	 155 */		fmovs	%f0,%f4
 763/* 0x01ec	 156 */		fmovs	%f0,%f2
 764/* 0x01f0	 155 */		fsubd	%f4,%f0,%f4
 765/* 0x01f4	     */		std	%f4,[%i0+%o1]
 766/* 0x01f8	 156 */		fsubd	%f2,%f0,%f0
 767/* 0x01fc	     */		bg,pn	%icc,.L77000150
 768/* 0x0200	     */		std	%f0,[%i0+%o0]
 769                       .L77000154:
 770/* 0x0204	 155 */		ldd	[%o5],%f0
 771                       .L900000311:
 772/* 0x0208	 154 */		ld	[%o7+%o2],%o0
 773/* 0x020c	 155 */		sra	%g3,0,%o1
 774/* 0x0210	     */		fmovs	%f0,%f2
 775/* 0x0214	     */		sllx	%o1,3,%o2
 776/* 0x0218	 156 */		add	%i2,1,%i2
 777/* 0x021c	 155 */		and	%o0,%g1,%o1
 778/* 0x0220	     */		st	%o1,[%sp+2227]
 779/* 0x0224	 156 */		add	%g3,2,%g3
 780/* 0x0228	     */		srl	%o0,16,%o1
 781/* 0x022c	     */		cmp	%i2,%g5
 782/* 0x0230	     */		sra	%g2,0,%o0
 783/* 0x0234	     */		add	%g2,2,%g2
 784/* 0x0238	     */		sllx	%o0,3,%o0
 785/* 0x023c	 155 */		ld	[%sp+2227],%f3
 786/* 0x0240	 154 */		sra	%i2,0,%o3
 787/* 0x0244	 155 */		fsubd	%f2,%f0,%f2
 788/* 0x0248	     */		std	%f2,[%i0+%o2]
 789/* 0x024c	     */		sllx	%o3,2,%o2
 790/* 0x0250	 156 */		st	%o1,[%sp+2223]
 791/* 0x0254	     */		fmovs	%f0,%f2
 792/* 0x0258	     */		ld	[%sp+2223],%f3
 793/* 0x025c	     */		fsubd	%f2,%f0,%f0
 794/* 0x0260	     */		std	%f0,[%i0+%o0]
 795/* 0x0264	     */		ble,a,pt	%icc,.L900000311
 796/* 0x0268	     */		ldd	[%o5],%f0
 797                       .L77000150:
 798/* 0x026c	     */		ret	! Result = 
 799/* 0x0270	     */		restore	%g0,%g0,%g0
 800/* 0x0274	   0 */		.type	conv_i32_to_d16,2
 801/* 0x0274	     */		.size	conv_i32_to_d16,(.-conv_i32_to_d16)
 802
 803	.section	".text",#alloc,#execinstr
 804/* 000000	   0 */		.align	8
 805!
 806! CONSTANT POOL
 807!
 808                       .L_const_seg_900000401:
 809/* 000000	   0 */		.word	1127219200,0
 810/* 0x0008	   0 */		.align	8
 811/* 0x0008	     */		.skip	24
 812!
 813! SUBROUTINE conv_i32_to_d32_and_d16
 814!
 815! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
 816
 817                       	.global conv_i32_to_d32_and_d16
 818                       conv_i32_to_d32_and_d16:
 819/* 000000	     */		save	%sp,-192,%sp
 820                       .L900000415:
 821/* 0x0004	     */		call	.+8
 822/* 0x0008	     */		sethi	/*X*/%hi(_GLOBAL_OFFSET_TABLE_-(.L900000415-.)),%g3
 823
 824!  157		      !   }
 825!  158		      !}
 826!  161		      !void conv_i32_to_d32_and_d16(double *d32, double *d16, 
 827!  162		      !			     unsigned int *i32, int len)
 828!  163		      !{
 829!  164		      !int i = 0;
 830!  165		      !unsigned int a;
 831!  167		      !#pragma pipeloop(0)
 832!  168		      !#ifdef RF_INLINE_MACROS
 833!  169		      ! for(;i<len-3;i+=4)
 834!  170		      !   {
 835!  171		      !     i16_to_d16_and_d32x4(&TwoToMinus16, &TwoTo16, &Zero,
 836!  172		      !			  &(d16[2*i]), &(d32[i]), (float *)(&(i32[i])));
 837
 838/* 0x000c	 172 */		sethi	%hi(Zero),%g2
 839/* 0x0010	 163 */		add	%g3,/*X*/%lo(_GLOBAL_OFFSET_TABLE_-(.L900000415-.)),%g3
 840/* 0x0014	     */		or	%g0,%i3,%g5
 841/* 0x0018	     */		add	%g3,%o7,%o3
 842/* 0x001c	 172 */		add	%g2,%lo(Zero),%g2
 843/* 0x0020	     */		ldx	[%o3+%g2],%o0
 844/* 0x0024	     */		sethi	%hi(TwoToMinus16),%g3
 845/* 0x0028	 163 */		or	%g0,%i0,%i3
 846/* 0x002c	 169 */		sub	%g5,3,%o1
 847/* 0x0030	 172 */		sethi	%hi(TwoTo16),%g4
 848/* 0x0034	 163 */		or	%g0,%i2,%i0
 849/* 0x0038	 172 */		add	%g3,%lo(TwoToMinus16),%g2
 850/* 0x003c	     */		ldx	[%o3+%g2],%o2
 851/* 0x0040	 169 */		cmp	%o1,0
 852/* 0x0044	 164 */		or	%g0,0,%i2
 853/* 0x0048	 169 */		ble,pt	%icc,.L900000418
 854/* 0x004c	     */		cmp	%i2,%g5
 855/* 0x0050	     */		ldd	[%o0],%f2
 856/* 0x0054	 172 */		add	%g4,%lo(TwoTo16),%g3
 857/* 0x0058	     */		ldx	[%o3+%g3],%o1
 858/* 0x005c	 169 */		sub	%g5,4,%o4
 859/* 0x0060	     */		or	%g0,0,%o5
 860                       .L900000417:
 861/* 0x0064	 172 */		sra	%i2,0,%g2
 862/* 0x0068	     */		fmovd	%f2,%f14
 863/* 0x006c	     */		ldd	[%o2],%f0
 864/* 0x0070	     */		sllx	%g2,2,%g3
 865/* 0x0074	     */		fmovd	%f2,%f10
 866/* 0x0078	     */		ldd	[%o1],%f16
 867/* 0x007c	     */		ld	[%g3+%i0],%f15
 868/* 0x0080	     */		add	%i0,%g3,%g3
 869/* 0x0084	     */		fmovd	%f2,%f6
 870/* 0x0088	     */		ld	[%g3+4],%f11
 871/* 0x008c	     */		sra	%o5,0,%g4
 872/* 0x0090	     */		add	%i2,4,%i2
 873/* 0x0094	     */		ld	[%g3+8],%f7
 874/* 0x0098	     */		fxtod	%f14,%f14
 875/* 0x009c	     */		sllx	%g2,3,%g2
 876/* 0x00a0	     */		ld	[%g3+12],%f3
 877/* 0x00a4	     */		fxtod	%f10,%f10
 878/* 0x00a8	     */		sllx	%g4,3,%g3
 879/* 0x00ac	     */		fxtod	%f6,%f6
 880/* 0x00b0	     */		std	%f14,[%g2+%i3]
 881/* 0x00b4	     */		add	%i3,%g2,%g4
 882/* 0x00b8	     */		fxtod	%f2,%f2
 883/* 0x00bc	     */		fmuld	%f0,%f14,%f12
 884/* 0x00c0	     */		std	%f2,[%g4+24]
 885/* 0x00c4	     */		fmuld	%f0,%f10,%f8
 886/* 0x00c8	     */		std	%f10,[%g4+8]
 887/* 0x00cc	     */		add	%i1,%g3,%g2
 888/* 0x00d0	     */		fmuld	%f0,%f6,%f4
 889/* 0x00d4	     */		std	%f6,[%g4+16]
 890/* 0x00d8	     */		cmp	%i2,%o4
 891/* 0x00dc	     */		fmuld	%f0,%f2,%f0
 892/* 0x00e0	     */		fdtox	%f12,%f12
 893/* 0x00e4	     */		add	%o5,8,%o5
 894/* 0x00e8	     */		fdtox	%f8,%f8
 895/* 0x00ec	     */		fdtox	%f4,%f4
 896/* 0x00f0	     */		fdtox	%f0,%f0
 897/* 0x00f4	     */		fxtod	%f12,%f12
 898/* 0x00f8	     */		std	%f12,[%g2+8]
 899/* 0x00fc	     */		fxtod	%f8,%f8
 900/* 0x0100	     */		std	%f8,[%g2+24]
 901/* 0x0104	     */		fxtod	%f4,%f4
 902/* 0x0108	     */		std	%f4,[%g2+40]
 903/* 0x010c	     */		fxtod	%f0,%f0
 904/* 0x0110	     */		std	%f0,[%g2+56]
 905/* 0x0114	     */		fmuld	%f12,%f16,%f12
 906/* 0x0118	     */		fmuld	%f8,%f16,%f8
 907/* 0x011c	     */		fmuld	%f4,%f16,%f4
 908/* 0x0120	     */		fsubd	%f14,%f12,%f12
 909/* 0x0124	     */		std	%f12,[%g3+%i1]
 910/* 0x0128	     */		fmuld	%f0,%f16,%f0
 911/* 0x012c	     */		fsubd	%f10,%f8,%f8
 912/* 0x0130	     */		std	%f8,[%g2+16]
 913/* 0x0134	     */		fsubd	%f6,%f4,%f4
 914/* 0x0138	     */		std	%f4,[%g2+32]
 915/* 0x013c	     */		fsubd	%f2,%f0,%f0
 916/* 0x0140	     */		std	%f0,[%g2+48]
 917/* 0x0144	     */		ble,a,pt	%icc,.L900000417
 918/* 0x0148	     */		ldd	[%o0],%f2
 919                       .L77000159:
 920
 921!  173		      !   }
 922!  174		      !#endif
 923!  175		      ! for(;i<len;i++)
 924
 925/* 0x014c	 175 */		cmp	%i2,%g5
 926                       .L900000418:
 927/* 0x0150	 175 */		bge,pt	%icc,.L77000164
 928/* 0x0154	     */		nop
 929
 930!  176		      !   {
 931!  177		      !     a=i32[i];
 932!  178		      !     d32[i]=(double)(i32[i]);
 933!  179		      !     d16[2*i]=(double)(a&0xffff);
 934!  180		      !     d16[2*i+1]=(double)(a>>16);
 935
 936/* 0x0158	 180 */		sethi	%hi(.L_const_seg_900000401),%g2
 937/* 0x015c	     */		add	%g2,%lo(.L_const_seg_900000401),%g2
 938/* 0x0160	 175 */		sethi	%hi(0xfc00),%g3
 939/* 0x0164	 180 */		ldx	[%o3+%g2],%g1
 940/* 0x0168	 175 */		sll	%i2,1,%i4
 941/* 0x016c	     */		sub	%g5,%i2,%g4
 942/* 0x0170	 177 */		sra	%i2,0,%o3
 943/* 0x0174	 175 */		add	%g3,1023,%g3
 944/* 0x0178	 178 */		ldd	[%g1],%f2
 945/* 0x017c	     */		sllx	%o3,2,%o2
 946/* 0x0180	 175 */		add	%i4,1,%g2
 947/* 0x0184	 177 */		or	%g0,%o3,%o1
 948/* 0x0188	     */		cmp	%g4,6
 949/* 0x018c	 175 */		bl,pn	%icc,.L77000161
 950/* 0x0190	     */		sra	%i2,0,%o3
 951/* 0x0194	 177 */		or	%g0,%o2,%o0
 952/* 0x0198	 178 */		ld	[%i0+%o2],%f5
 953/* 0x019c	 179 */		fmovs	%f2,%f8
 954/* 0x01a0	 175 */		add	%o0,4,%o3
 955/* 0x01a4	 177 */		ld	[%i0+%o0],%o7
 956/* 0x01a8	 180 */		fmovs	%f2,%f6
 957/* 0x01ac	 178 */		fmovs	%f2,%f4
 958/* 0x01b0	     */		sllx	%o1,3,%o2
 959/* 0x01b4	 175 */		add	%o3,4,%o5
 960/* 0x01b8	 179 */		sra	%i4,0,%o0
 961/* 0x01bc	 175 */		add	%o3,8,%o4
 962/* 0x01c0	 178 */		fsubd	%f4,%f2,%f4
 963/* 0x01c4	     */		std	%f4,[%i3+%o2]
 964/* 0x01c8	 179 */		sllx	%o0,3,%i5
 965/* 0x01cc	     */		and	%o7,%g3,%o0
 966/* 0x01d0	     */		st	%o0,[%sp+2227]
 967/* 0x01d4	 175 */		add	%i5,16,%o1
 968/* 0x01d8	 180 */		srl	%o7,16,%g4
 969/* 0x01dc	     */		add	%i2,1,%i2
 970/* 0x01e0	     */		sra	%g2,0,%o0
 971/* 0x01e4	 175 */		add	%o2,8,%o2
 972/* 0x01e8	 179 */		fmovs	%f2,%f4
 973/* 0x01ec	 180 */		sllx	%o0,3,%l0
 974/* 0x01f0	     */		add	%i4,3,%g2
 975/* 0x01f4	 179 */		ld	[%sp+2227],%f5
 976/* 0x01f8	 175 */		add	%l0,16,%o0
 977/* 0x01fc	 180 */		add	%i4,2,%i4
 978/* 0x0200	 175 */		sub	%g5,1,%o7
 979/* 0x0204	 180 */		add	%i2,3,%i2
 980/* 0x0208	 179 */		fsubd	%f4,%f2,%f4
 981/* 0x020c	     */		std	%f4,[%i1+%i5]
 982/* 0x0210	 180 */		st	%g4,[%sp+2223]
 983/* 0x0214	 177 */		ld	[%i0+%o3],%i5
 984/* 0x0218	 180 */		fmovs	%f2,%f4
 985/* 0x021c	     */		srl	%i5,16,%g4
 986/* 0x0220	 179 */		and	%i5,%g3,%i5
 987/* 0x0224	 180 */		ld	[%sp+2223],%f5
 988/* 0x0228	     */		fsubd	%f4,%f2,%f4
 989/* 0x022c	     */		std	%f4,[%i1+%l0]
 990/* 0x0230	     */		st	%g4,[%sp+2223]
 991/* 0x0234	 177 */		ld	[%i0+%o5],%g4
 992/* 0x0238	 179 */		st	%i5,[%sp+2227]
 993/* 0x023c	 178 */		fmovs	%f2,%f4
 994/* 0x0240	 180 */		srl	%g4,16,%i5
 995/* 0x0244	 179 */		and	%g4,%g3,%g4
 996/* 0x0248	 180 */		ld	[%sp+2223],%f7
 997/* 0x024c	     */		st	%i5,[%sp+2223]
 998/* 0x0250	 178 */		ld	[%i0+%o3],%f5
 999/* 0x0254	 180 */		fsubd	%f6,%f2,%f6
1000/* 0x0258	 177 */		ld	[%i0+%o4],%o3
1001/* 0x025c	 178 */		fsubd	%f4,%f2,%f4
1002/* 0x0260	 179 */		ld	[%sp+2227],%f9
1003/* 0x0264	 180 */		ld	[%sp+2223],%f1
1004/* 0x0268	 179 */		st	%g4,[%sp+2227]
1005/* 0x026c	     */		fsubd	%f8,%f2,%f8
1006/* 0x0270	     */		std	%f8,[%i1+%o1]
1007/* 0x0274	 180 */		std	%f6,[%i1+%o0]
1008/* 0x0278	 178 */		std	%f4,[%i3+%o2]
1009                       .L900000411:
1010/* 0x027c	 179 */		ld	[%sp+2227],%f13
1011/* 0x0280	 180 */		srl	%o3,16,%g4
1012/* 0x0284	     */		add	%i2,2,%i2
1013/* 0x0288	     */		st	%g4,[%sp+2223]
1014/* 0x028c	     */		cmp	%i2,%o7
1015/* 0x0290	     */		add	%g2,4,%g2
1016/* 0x0294	 178 */		ld	[%i0+%o5],%f11
1017/* 0x0298	 180 */		add	%i4,4,%i4
1018/* 0x029c	 175 */		add	%o4,4,%o5
1019/* 0x02a0	 177 */		ld	[%i0+%o5],%g4
1020/* 0x02a4	 179 */		and	%o3,%g3,%o3
1021/* 0x02a8	     */		st	%o3,[%sp+2227]
1022/* 0x02ac	 180 */		fmovs	%f2,%f0
1023/* 0x02b0	 179 */		fmovs	%f2,%f12
1024/* 0x02b4	 180 */		fsubd	%f0,%f2,%f8
1025/* 0x02b8	 179 */		fsubd	%f12,%f2,%f4
1026/* 0x02bc	 175 */		add	%o1,16,%o1
1027/* 0x02c0	 180 */		ld	[%sp+2223],%f7
1028/* 0x02c4	 178 */		fmovs	%f2,%f10
1029/* 0x02c8	 179 */		std	%f4,[%i1+%o1]
1030/* 0x02cc	 175 */		add	%o0,16,%o0
1031/* 0x02d0	 178 */		fsubd	%f10,%f2,%f4
1032/* 0x02d4	 175 */		add	%o2,8,%o2
1033/* 0x02d8	 180 */		std	%f8,[%i1+%o0]
1034/* 0x02dc	 178 */		std	%f4,[%i3+%o2]
1035/* 0x02e0	 179 */		ld	[%sp+2227],%f9
1036/* 0x02e4	 180 */		srl	%g4,16,%o3
1037/* 0x02e8	     */		st	%o3,[%sp+2223]
1038/* 0x02ec	 178 */		ld	[%i0+%o4],%f5
1039/* 0x02f0	 175 */		add	%o4,8,%o4
1040/* 0x02f4	 177 */		ld	[%i0+%o4],%o3
1041/* 0x02f8	 179 */		and	%g4,%g3,%g4
1042/* 0x02fc	     */		st	%g4,[%sp+2227]
1043/* 0x0300	 180 */		fmovs	%f2,%f6
1044/* 0x0304	 179 */		fmovs	%f2,%f8
1045/* 0x0308	 180 */		fsubd	%f6,%f2,%f6
1046/* 0x030c	 179 */		fsubd	%f8,%f2,%f8
1047/* 0x0310	 175 */		add	%o1,16,%o1
1048/* 0x0314	 180 */		ld	[%sp+2223],%f1
1049/* 0x0318	 178 */		fmovs	%f2,%f4
1050/* 0x031c	 179 */		std	%f8,[%i1+%o1]
1051/* 0x0320	 175 */		add	%o0,16,%o0
1052/* 0x0324	 178 */		fsubd	%f4,%f2,%f4
1053/* 0x0328	 175 */		add	%o2,8,%o2
1054/* 0x032c	 180 */		std	%f6,[%i1+%o0]
1055/* 0x0330	     */		bl,pt	%icc,.L900000411
1056/* 0x0334	     */		std	%f4,[%i3+%o2]
1057                       .L900000414:
1058/* 0x0338	 180 */		srl	%o3,16,%o7
1059/* 0x033c	     */		st	%o7,[%sp+2223]
1060/* 0x0340	 179 */		fmovs	%f2,%f12
1061/* 0x0344	 178 */		ld	[%i0+%o5],%f11
1062/* 0x0348	 180 */		fmovs	%f2,%f0
1063/* 0x034c	 179 */		and	%o3,%g3,%g4
1064/* 0x0350	 180 */		fmovs	%f2,%f6
1065/* 0x0354	 175 */		add	%o1,16,%o3
1066/* 0x0358	     */		add	%o0,16,%o7
1067/* 0x035c	 178 */		fmovs	%f2,%f10
1068/* 0x0360	 175 */		add	%o2,8,%o2
1069/* 0x0364	     */		add	%o1,32,%o5
1070/* 0x0368	 179 */		ld	[%sp+2227],%f13
1071/* 0x036c	 178 */		fmovs	%f2,%f4
1072/* 0x0370	 175 */		add	%o0,32,%o1
1073/* 0x0374	 180 */		ld	[%sp+2223],%f7
1074/* 0x0378	 175 */		add	%o2,8,%o0
1075/* 0x037c	 180 */		cmp	%i2,%g5
1076/* 0x0380	 179 */		st	%g4,[%sp+2227]
1077/* 0x0384	     */		fsubd	%f12,%f2,%f8
1078/* 0x0388	 180 */		add	%g2,6,%g2
1079/* 0x038c	 179 */		std	%f8,[%i1+%o3]
1080/* 0x0390	 180 */		fsubd	%f0,%f2,%f0
1081/* 0x0394	 177 */		sra	%i2,0,%o3
1082/* 0x0398	 180 */		std	%f0,[%i1+%o7]
1083/* 0x039c	 178 */		fsubd	%f10,%f2,%f0
1084/* 0x03a0	 180 */		add	%i4,6,%i4
1085/* 0x03a4	 178 */		std	%f0,[%i3+%o2]
1086/* 0x03a8	     */		sllx	%o3,2,%o2
1087/* 0x03ac	 179 */		ld	[%sp+2227],%f9
1088/* 0x03b0	 178 */		ld	[%i0+%o4],%f5
1089/* 0x03b4	 179 */		fmovs	%f2,%f8
1090/* 0x03b8	     */		fsubd	%f8,%f2,%f0
1091/* 0x03bc	     */		std	%f0,[%i1+%o5]
1092/* 0x03c0	 180 */		fsubd	%f6,%f2,%f0
1093/* 0x03c4	     */		std	%f0,[%i1+%o1]
1094/* 0x03c8	 178 */		fsubd	%f4,%f2,%f0
1095/* 0x03cc	 180 */		bge,pn	%icc,.L77000164
1096/* 0x03d0	     */		std	%f0,[%i3+%o0]
1097                       .L77000161:
1098/* 0x03d4	 178 */		ldd	[%g1],%f2
1099                       .L900000416:
1100/* 0x03d8	 178 */		ld	[%i0+%o2],%f5
1101/* 0x03dc	 179 */		sra	%i4,0,%o0
1102/* 0x03e0	 180 */		add	%i2,1,%i2
1103/* 0x03e4	 177 */		ld	[%i0+%o2],%o1
1104/* 0x03e8	 178 */		sllx	%o3,3,%o3
1105/* 0x03ec	 180 */		add	%i4,2,%i4
1106/* 0x03f0	 178 */		fmovs	%f2,%f4
1107/* 0x03f4	 179 */		sllx	%o0,3,%o4
1108/* 0x03f8	 180 */		cmp	%i2,%g5
1109/* 0x03fc	 179 */		and	%o1,%g3,%o0
1110/* 0x0400	 178 */		fsubd	%f4,%f2,%f0
1111/* 0x0404	     */		std	%f0,[%i3+%o3]
1112/* 0x0408	 180 */		srl	%o1,16,%o1
1113/* 0x040c	 179 */		st	%o0,[%sp+2227]
1114/* 0x0410	 180 */		sra	%g2,0,%o0
1115/* 0x0414	     */		add	%g2,2,%g2
1116/* 0x0418	 177 */		sra	%i2,0,%o3
1117/* 0x041c	 180 */		sllx	%o0,3,%o0
1118/* 0x0420	 179 */		fmovs	%f2,%f4
1119/* 0x0424	     */		sllx	%o3,2,%o2
1120/* 0x0428	     */		ld	[%sp+2227],%f5
1121/* 0x042c	     */		fsubd	%f4,%f2,%f0
1122/* 0x0430	     */		std	%f0,[%i1+%o4]
1123/* 0x0434	 180 */		st	%o1,[%sp+2223]
1124/* 0x0438	     */		fmovs	%f2,%f4
1125/* 0x043c	     */		ld	[%sp+2223],%f5
1126/* 0x0440	     */		fsubd	%f4,%f2,%f0
1127/* 0x0444	     */		std	%f0,[%i1+%o0]
1128/* 0x0448	     */		bl,a,pt	%icc,.L900000416
1129/* 0x044c	     */		ldd	[%g1],%f2
1130                       .L77000164:
1131/* 0x0450	     */		ret	! Result = 
1132/* 0x0454	     */		restore	%g0,%g0,%g0
1133/* 0x0458	   0 */		.type	conv_i32_to_d32_and_d16,2
1134/* 0x0458	     */		.size	conv_i32_to_d32_and_d16,(.-conv_i32_to_d32_and_d16)
1135
1136	.section	".text",#alloc,#execinstr
1137/* 000000	   0 */		.align	8
1138!
1139! SUBROUTINE adjust_montf_result
1140!
1141! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
1142
1143                       	.global adjust_montf_result
1144                       adjust_montf_result:
1145/* 000000	     */		save	%sp,-176,%sp
1146/* 0x0004	     */		or	%g0,%i2,%o1
1147/* 0x0008	     */		or	%g0,%i0,%i2
1148
1149!  181		      !   }
1150!  182		      !}
1151!  185		      !void adjust_montf_result(unsigned int *i32, unsigned int *nint, int len)
1152!  186		      !{
1153!  187		      !long long acc;
1154!  188		      !int i;
1155!  190		      ! if(i32[len]>0) i=-1;
1156
1157/* 0x000c	 190 */		sra	%o1,0,%g2
1158/* 0x0010	     */		or	%g0,-1,%o2
1159/* 0x0014	     */		sllx	%g2,2,%g2
1160/* 0x0018	     */		ld	[%i2+%g2],%g2
1161/* 0x001c	     */		cmp	%g2,0
1162/* 0x0020	     */		bleu,pn	%icc,.L77000175
1163/* 0x0024	     */		or	%g0,%i1,%i0
1164/* 0x0028	     */		ba	.L900000511
1165/* 0x002c	     */		cmp	%o2,0
1166                       .L77000175:
1167
1168!  191		      ! else
1169!  192		      !   {
1170!  193		      !     for(i=len-1; i>=0; i--)
1171
1172/* 0x0030	 193 */		sub	%o1,1,%o2
1173/* 0x0034	     */		cmp	%o2,0
1174/* 0x0038	     */		bl,pn	%icc,.L77000182
1175/* 0x003c	     */		sra	%o2,0,%g2
1176                       .L900000510:
1177
1178!  194		      !       {
1179!  195		      !	 if(i32[i]!=nint[i]) break;
1180
1181/* 0x0040	 195 */		sllx	%g2,2,%g2
1182/* 0x0044	     */		sub	%o2,1,%o0
1183/* 0x0048	     */		ld	[%i1+%g2],%g3
1184/* 0x004c	     */		ld	[%i2+%g2],%g2
1185/* 0x0050	     */		cmp	%g2,%g3
1186/* 0x0054	     */		bne,pn	%icc,.L77000182
1187/* 0x0058	     */		nop
1188/* 0x005c	   0 */		or	%g0,%o0,%o2
1189/* 0x0060	 195 */		cmp	%o0,0
1190/* 0x0064	     */		bge,pt	%icc,.L900000510
1191/* 0x0068	     */		sra	%o2,0,%g2
1192                       .L77000182:
1193
1194!  196		      !       }
1195!  197		      !   }
1196!  198		      ! if((i<0)||(i32[i]>nint[i]))
1197
1198/* 0x006c	 198 */		cmp	%o2,0
1199                       .L900000511:
1200/* 0x0070	 198 */		bl,pn	%icc,.L77000198
1201/* 0x0074	     */		sra	%o2,0,%g2
1202/* 0x0078	     */		sllx	%g2,2,%g2
1203/* 0x007c	     */		ld	[%i1+%g2],%g3
1204/* 0x0080	     */		ld	[%i2+%g2],%g2
1205/* 0x0084	     */		cmp	%g2,%g3
1206/* 0x0088	     */		bleu,pt	%icc,.L77000191
1207/* 0x008c	     */		nop
1208                       .L77000198:
1209
1210!  199		      !   {
1211!  200		      !     acc=0;
1212!  201		      !     for(i=0;i<len;i++)
1213
1214/* 0x0090	 201 */		cmp	%o1,0
1215/* 0x0094	     */		ble,pt	%icc,.L77000191
1216/* 0x0098	     */		nop
1217/* 0x009c	 198 */		or	%g0,-1,%g2
1218/* 0x00a0	 201 */		or	%g0,%o1,%g3
1219/* 0x00a4	 198 */		srl	%g2,0,%g2
1220/* 0x00a8	     */		sub	%o1,1,%g4
1221/* 0x00ac	     */		cmp	%o1,9
1222/* 0x00b0	 201 */		or	%g0,0,%i1
1223/* 0x00b4	 200 */		or	%g0,0,%g5
1224
1225!  202		      !       {
1226!  203		      !	 acc=acc+(unsigned long long)(i32[i])-(unsigned long long)(nint[i]);
1227
1228/* 0x00b8	 203 */		or	%g0,0,%o1
1229/* 0x00bc	 201 */		bl,pn	%icc,.L77000199
1230/* 0x00c0	     */		sub	%g3,4,%o7
1231/* 0x00c4	 203 */		ld	[%i2],%o1
1232
1233!  204		      !	 i32[i]=acc&0xffffffff;
1234!  205		      !	 acc=acc>>32;
1235
1236/* 0x00c8	 205 */		or	%g0,5,%i1
1237/* 0x00cc	 203 */		ld	[%i0],%o2
1238/* 0x00d0	 201 */		or	%g0,8,%o5
1239/* 0x00d4	     */		or	%g0,12,%o4
1240/* 0x00d8	 203 */		ld	[%i0+4],%o3
1241/* 0x00dc	 201 */		or	%g0,16,%g1
1242/* 0x00e0	 203 */		ld	[%i2+4],%o0
1243/* 0x00e4	 201 */		sub	%o1,%o2,%o1
1244/* 0x00e8	 203 */		ld	[%i0+8],%i3
1245/* 0x00ec	 204 */		and	%o1,%g2,%g5
1246/* 0x00f0	     */		st	%g5,[%i2]
1247/* 0x00f4	 205 */		srax	%o1,32,%g5
1248/* 0x00f8	 201 */		sub	%o0,%o3,%o0
1249/* 0x00fc	 203 */		ld	[%i0+12],%o2
1250/* 0x0100	 201 */		add	%o0,%g5,%o0
1251/* 0x0104	 204 */		and	%o0,%g2,%g5
1252/* 0x0108	     */		st	%g5,[%i2+4]
1253/* 0x010c	 205 */		srax	%o0,32,%o0
1254/* 0x0110	 203 */		ld	[%i2+8],%o1
1255/* 0x0114	     */		ld	[%i2+12],%o3
1256/* 0x0118	 201 */		sub	%o1,%i3,%o1
1257                       .L900000505:
1258/* 0x011c	     */		add	%g1,4,%g3
1259/* 0x0120	 203 */		ld	[%g1+%i2],%g5
1260/* 0x0124	 201 */		add	%o1,%o0,%o0
1261/* 0x0128	 203 */		ld	[%i0+%g1],%i3
1262/* 0x012c	 201 */		sub	%o3,%o2,%o1
1263/* 0x0130	 204 */		and	%o0,%g2,%o2
1264/* 0x0134	     */		st	%o2,[%o5+%i2]
1265/* 0x0138	 205 */		srax	%o0,32,%o2
1266/* 0x013c	     */		add	%i1,4,%i1
1267/* 0x0140	 201 */		add	%g1,8,%o5
1268/* 0x0144	 203 */		ld	[%g3+%i2],%o0
1269/* 0x0148	 201 */		add	%o1,%o2,%o1
1270/* 0x014c	 203 */		ld	[%i0+%g3],%o3
1271/* 0x0150	 201 */		sub	%g5,%i3,%o2
1272/* 0x0154	 204 */		and	%o1,%g2,%g5
1273/* 0x0158	     */		st	%g5,[%o4+%i2]
1274/* 0x015c	 205 */		srax	%o1,32,%g5
1275/* 0x0160	     */		cmp	%i1,%o7
1276/* 0x0164	 201 */		add	%g1,12,%o4
1277/* 0x0168	 203 */		ld	[%o5+%i2],%o1
1278/* 0x016c	 201 */		add	%o2,%g5,%o2
1279/* 0x0170	 203 */		ld	[%i0+%o5],%i3
1280/* 0x0174	 201 */		sub	%o0,%o3,%o0
1281/* 0x0178	 204 */		and	%o2,%g2,%o3
1282/* 0x017c	     */		st	%o3,[%g1+%i2]
1283/* 0x0180	 205 */		srax	%o2,32,%g5
1284/* 0x0184	 203 */		ld	[%o4+%i2],%o3
1285/* 0x0188	 201 */		add	%g1,16,%g1
1286/* 0x018c	     */		add	%o0,%g5,%o0
1287/* 0x0190	 203 */		ld	[%i0+%o4],%o2
1288/* 0x0194	 201 */		sub	%o1,%i3,%o1
1289/* 0x0198	 204 */		and	%o0,%g2,%g5
1290/* 0x019c	     */		st	%g5,[%g3+%i2]
1291/* 0x01a0	 205 */		ble,pt	%icc,.L900000505
1292/* 0x01a4	     */		srax	%o0,32,%o0
1293                       .L900000508:
1294/* 0x01a8	     */		add	%o1,%o0,%g3
1295/* 0x01ac	     */		sub	%o3,%o2,%o1
1296/* 0x01b0	 203 */		ld	[%g1+%i2],%o0
1297/* 0x01b4	     */		ld	[%i0+%g1],%o2
1298/* 0x01b8	 205 */		srax	%g3,32,%o7
1299/* 0x01bc	 204 */		and	%g3,%g2,%o3
1300/* 0x01c0	 201 */		add	%o1,%o7,%o1
1301/* 0x01c4	 204 */		st	%o3,[%o5+%i2]
1302/* 0x01c8	 205 */		cmp	%i1,%g4
1303/* 0x01cc	 201 */		sub	%o0,%o2,%o0
1304/* 0x01d0	 204 */		and	%o1,%g2,%o2
1305/* 0x01d4	     */		st	%o2,[%o4+%i2]
1306/* 0x01d8	 205 */		srax	%o1,32,%o1
1307/* 0x01dc	 203 */		sra	%i1,0,%o2
1308/* 0x01e0	 201 */		add	%o0,%o1,%o0
1309/* 0x01e4	 205 */		srax	%o0,32,%g5
1310/* 0x01e8	 204 */		and	%o0,%g2,%o1
1311/* 0x01ec	     */		st	%o1,[%g1+%i2]
1312/* 0x01f0	 205 */		bg,pn	%icc,.L77000191
1313/* 0x01f4	     */		sllx	%o2,2,%o1
1314                       .L77000199:
1315/* 0x01f8	   0 */		or	%g0,%o1,%g1
1316                       .L900000509:
1317/* 0x01fc	 203 */		ld	[%o1+%i2],%o0
1318/* 0x0200	 205 */		add	%i1,1,%i1
1319/* 0x0204	 203 */		ld	[%i0+%o1],%o1
1320/* 0x0208	     */		sra	%i1,0,%o2
1321/* 0x020c	 205 */		cmp	%i1,%g4
1322/* 0x0210	 203 */		add	%g5,%o0,%o0
1323/* 0x0214	     */		sub	%o0,%o1,%o0
1324/* 0x0218	 205 */		srax	%o0,32,%g5
1325/* 0x021c	 204 */		and	%o0,%g2,%o1
1326/* 0x0220	     */		st	%o1,[%g1+%i2]
1327/* 0x0224	     */		sllx	%o2,2,%o1
1328/* 0x0228	 205 */		ble,pt	%icc,.L900000509
1329/* 0x022c	     */		or	%g0,%o1,%g1
1330                       .L77000191:
1331/* 0x0230	     */		ret	! Result = 
1332/* 0x0234	     */		restore	%g0,%g0,%g0
1333/* 0x0238	   0 */		.type	adjust_montf_result,2
1334/* 0x0238	     */		.size	adjust_montf_result,(.-adjust_montf_result)
1335
1336	.section	".text",#alloc,#execinstr
1337/* 000000	   0 */		.align	8
1338/* 000000	     */		.skip	24
1339!
1340! SUBROUTINE mont_mulf_noconv
1341!
1342! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
1343
1344                       	.global mont_mulf_noconv
1345                       mont_mulf_noconv:
1346/* 000000	     */		save	%sp,-224,%sp
1347                       .L900000643:
1348/* 0x0004	     */		call	.+8
1349/* 0x0008	     */		sethi	/*X*/%hi(_GLOBAL_OFFSET_TABLE_-(.L900000643-.)),%g5
1350/* 0x000c	     */		ldx	[%fp+2223],%l0
1351
1352!  206		      !       }
1353!  207		      !   }
1354!  208		      !}
1355!  213		      !/*
1356!  214		      !** the lengths of the input arrays should be at least the following:
1357!  215		      !** result[nlen+1], dm1[nlen], dm2[2*nlen+1], dt[4*nlen+2], dn[nlen], nint[nlen]
1358!  216		      !** all of them should be different from one another
1359!  217		      !**
1360!  218		      !*/
1361!  219		      !void mont_mulf_noconv(unsigned int *result,
1362!  220		      !		     double *dm1, double *dm2, double *dt,
1363!  221		      !		     double *dn, unsigned int *nint,
1364!  222		      !		     int nlen, double dn0)
1365!  223		      !{
1366!  224		      ! int i, j, jj;
1367!  225		      ! int tmp;
1368!  226		      ! double digit, m2j, nextm2j, a, b;
1369!  227		      ! double *dptmp, *pdm1, *pdm2, *pdn, *pdtj, pdn_0, pdm1_0;
1370!  229		      ! pdm1=&(dm1[0]);
1371!  230		      ! pdm2=&(dm2[0]);
1372!  231		      ! pdn=&(dn[0]);
1373!  232		      ! pdm2[2*nlen]=Zero;
1374
1375/* 0x0010	 232 */		sethi	%hi(Zero),%g2
1376/* 0x0014	 223 */		fmovd	%f14,%f30
1377/* 0x0018	     */		add	%g5,/*X*/%lo(_GLOBAL_OFFSET_TABLE_-(.L900000643-.)),%g5
1378/* 0x001c	 232 */		add	%g2,%lo(Zero),%g2
1379/* 0x0020	     */		sll	%l0,1,%o3
1380/* 0x0024	 223 */		add	%g5,%o7,%o4
1381/* 0x0028	 232 */		sra	%o3,0,%g5
1382/* 0x002c	     */		ldx	[%o4+%g2],%o7
1383
1384!  234		      ! if (nlen!=16)
1385!  235		      !   {
1386!  236		      !     for(i=0;i<4*nlen+2;i++) dt[i]=Zero;
1387!  238		      !     a=dt[0]=pdm1[0]*pdm2[0];
1388!  239		      !     digit=mod(lower32(a,Zero)*dn0,TwoToMinus16,TwoTo16);
1389
1390/* 0x0030	 239 */		sethi	%hi(TwoToMinus16),%g3
1391/* 0x0034	     */		sethi	%hi(TwoTo16),%g4
1392/* 0x0038	     */		add	%g3,%lo(TwoToMinus16),%g2
1393/* 0x003c	 232 */		ldd	[%o7],%f0
1394/* 0x0040	 239 */		add	%g4,%lo(TwoTo16),%g3
1395/* 0x0044	 223 */		or	%g0,%i4,%o0
1396/* 0x0048	 232 */		sllx	%g5,3,%g4
1397/* 0x004c	 239 */		ldx	[%o4+%g2],%o5
1398/* 0x0050	 223 */		or	%g0,%i5,%l3
1399/* 0x0054	     */		or	%g0,%i0,%l2
1400/* 0x0058	 239 */		ldx	[%o4+%g3],%o4
1401/* 0x005c	 234 */		cmp	%l0,16
1402/* 0x0060	 232 */		std	%f0,[%i2+%g4]
1403/* 0x0064	 234 */		be,pn	%icc,.L77000279
1404/* 0x0068	     */		or	%g0,%i3,%l4
1405/* 0x006c	 236 */		sll	%l0,2,%g2
1406/* 0x0070	 223 */		or	%g0,%o0,%i5
1407/* 0x0074	 236 */		add	%g2,2,%o0
1408/* 0x0078	 223 */		or	%g0,%i1,%i4
1409/* 0x007c	 236 */		cmp	%o0,0
1410/* 0x0080	 223 */		or	%g0,%i2,%l1
1411/* 0x0084	 236 */		ble,a,pt	%icc,.L900000657
1412/* 0x0088	     */		ldd	[%i1],%f6
1413
1414!  241		      !     pdtj=&(dt[0]);
1415!  242		      !     for(j=jj=0;j<2*nlen;j++,jj++,pdtj++)
1416!  243		      !       {
1417!  244		      !	 m2j=pdm2[j];
1418!  245		      !	 a=pdtj[0]+pdn[0]*digit;
1419!  246		      !	 b=pdtj[1]+pdm1[0]*pdm2[j+1]+a*TwoToMinus16;
1420!  247		      !	 pdtj[1]=b;
1421!  249		      !#pragma pipeloop(0)
1422!  250		      !	 for(i=1;i<nlen;i++)
1423!  251		      !	   {
1424!  252		      !	     pdtj[2*i]+=pdm1[i]*m2j+pdn[i]*digit;
1425!  253		      !	   }
1426!  254		      ! 	 if((jj==30)) {cleanup(dt,j/2+1,2*nlen+1); jj=0;}
1427!  255		      !	 
1428!  256		      !	 digit=mod(lower32(b,Zero)*dn0,TwoToMinus16,TwoTo16);
1429!  257		      !       }
1430!  258		      !   }
1431!  259		      ! else
1432!  260		      !   {
1433!  261		      !     a=dt[0]=pdm1[0]*pdm2[0];
1434!  263		      !     dt[65]=     dt[64]=     dt[63]=     dt[62]=     dt[61]=     dt[60]=
1435!  264		      !     dt[59]=     dt[58]=     dt[57]=     dt[56]=     dt[55]=     dt[54]=
1436!  265		      !     dt[53]=     dt[52]=     dt[51]=     dt[50]=     dt[49]=     dt[48]=
1437!  266		      !     dt[47]=     dt[46]=     dt[45]=     dt[44]=     dt[43]=     dt[42]=
1438!  267		      !     dt[41]=     dt[40]=     dt[39]=     dt[38]=     dt[37]=     dt[36]=
1439!  268		      !     dt[35]=     dt[34]=     dt[33]=     dt[32]=     dt[31]=     dt[30]=
1440!  269		      !     dt[29]=     dt[28]=     dt[27]=     dt[26]=     dt[25]=     dt[24]=
1441!  270		      !     dt[23]=     dt[22]=     dt[21]=     dt[20]=     dt[19]=     dt[18]=
1442!  271		      !     dt[17]=     dt[16]=     dt[15]=     dt[14]=     dt[13]=     dt[12]=
1443!  272		      !     dt[11]=     dt[10]=     dt[ 9]=     dt[ 8]=     dt[ 7]=     dt[ 6]=
1444!  273		      !     dt[ 5

Large files files are truncated, but you can click here to view the full file