/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* This file is a result of compiling the mont_mulf.c file to generate an
* assembly output and then hand-editing that output to replace the
* compiler-generated loop for the 512-bit case (nlen == 16) in the
* mont_mulf_noconv routine with a hand-crafted version.
* To compile this:
*
* cc -c -xarch=v8plus -KPIC mont_mulf_asm.s
*
* Note, this file does not support sparcv9 (64-bit).
*/
.align 8
!
!
.word 1089470464
.word 0
!
!
.word 1055916032
.word 0
!
!
Zero:
.word 0
.word 0
!
!
.word 1106247680
.word 0
!
!
.word 1039138816
.word 0
!
!
! 1 !#define RF_INLINE_MACROS
! 9 !#ifdef RF_INLINE_MACROS
! 11 !double upper32(double);
! 12 !double lower32(double, double);
! 13 !double mod(double, double, double);
! 15 !#else
! 17 !static double upper32(double x)
! 18 !{
! 20 !}
! 22 !static double lower32(double x, double y)
! 23 !{
! 25 !}
! 28 !{
! 30 !}
! 32 !#endif
! 36 !{
! 37 ! int i;
! 41 ! /* original code **
! 42 ! for(i=2*from;i<2*tlen-2;i++)
! 43 ! {
! 44 ! x=dt[i];
! 45 ! dt[i]=lower32(x,Zero)+tmp1;
! 46 ! tmp1=tmp;
! 47 ! tmp=upper32(x);
! 48 ! }
! 49 ! dt[tlen-2]+=tmp1;
! 50 ! dt[tlen-1]+=tmp;
! 51 ! **end original code ***/
! 52 ! /* new code ***/
! 54 ! {
! 55 ! x=dt[i];
! 61 ! }
! 62 ! /** end new code **/
! 63 !}
! 67 !{
! 68 !int i;
! 69 !long long t, t1, a, b, c, d;
! 71 ! t1=0;
! 72 ! a=(long long)d16[0];
! 75 ! {
! 78 ! t=(a>>32);
! 83 ! t1=t;
! 84 ! a=c;
! 85 ! b=d;
! 86 ! }
! 88 ! t=(a>>32);
!
!
!
!
! 92 !}
! 95 !{
! 96 !int i;
! 98 !#pragma pipeloop(0)
!
!
!
!
! 100 !}
! 104 !{
! 105 !int i;
! 106 !unsigned int a;
! 108 !#pragma pipeloop(0)
! 109 ! for(i=0;i<len;i++)
! 110 ! {
! 111 ! a=i32[i];
!
!
!
!
! 114 ! }
! 115 !}
! 119 ! const double * /* 2^16*/, const double * /* 0 */,
! 120 ! double * /*result16*/, double * /* result32 */,
! 121 ! float * /*source - should be */
! 128 !{
! 129 !int i;
! 130 !unsigned int a;
! 132 !#pragma pipeloop(0)
! 134 ! {
! 137 ! }
! 138 ! for(;i<len;i++)
! 139 ! {
! 140 ! a=i32[i];
!
!
! 144 ! }
! 145 !}
! 149 !{
! 150 !long long acc;
! 151 !int i;
! 154 ! else
! 155 ! {
! 157 ! {
! 159 ! }
! 160 ! }
! 162 ! {
! 163 ! acc=0;
! 164 ! for(i=0;i<len;i++)
! 165 ! {
!
!
! 169 ! }
! 170 ! }
! 171 !}
! 177 !/*
! 178 !** the lengths of the input arrays should be at least the following:
! 179 !** result[nlen+1], dm1[nlen], dm2[2*nlen+1], dt[4*nlen+2], dn[nlen], nint[nlen]
! 180 !** all of them should be different from one another
! 181 !**
! 182 !*/
! 187 !{
! 188 ! int i, j, jj;
! 189 ! int tmp;
! 199 ! {
! 207 ! {
! 213 !#pragma pipeloop(0)
! 215 ! {
! 217 ! }
! 219 !
! 221 ! }
! 222 ! }
! 223 ! else
! 224 ! {
! 246 ! {
! 253 ! /**** this loop will be fully unrolled:
! 254 ! for(i=1;i<16;i++)
! 255 ! {
! 256 ! pdtj[2*i]+=pdm1[i]*m2j+pdn[i]*digit;
! 257 ! }
! 258 ! *************************************/
! 274 ! /* no need for cleenup, cannot overflow */
! 276 ! }
! 277 ! }
!1
!2
!3
!4
!5
!6
!7
!8
!9
!10
!11
!12
!13
!14
!15
!16
!17
!18
!19
!20
!21
!22
!23
!24
!25
!26
!27
!28
!29
!30
!31
!32
!33
!34
!35
!36
!37
!38
!39
!40
!41
!42
!43
!44
!45
!46
!47
!48
!49
!50
!51
!52
!53
!54
!55
.xstabs ".stab.index","Xa ; O ; P ; V=3.1 ; R=WorkShop Compilers 5.0 99/02/25 C 5.0 patch 107289-01",60,0,0,0 ! (/tmp/acompAAAhNaOly:1)
.xstabs ".stab.index","/home/ferenc/venus/userland/rsa; /usr/dist/pkgs/devpro,v5.0/5.x-sparc/SC5.0/bin/cc -fast -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -xchip=ultra2 -KPIC -Wc,-Qrm-Qd -Wc,-Qrm-Qf -Wc,-assembly -V -c proba.il -o mont_mulf.o mont_mulf.c -W0,-xp",52,0,0,0 ! (/tmp/acompAAAhNaOly:2)