1*25c28e83SPiotr Jasiukajtis/* 2*25c28e83SPiotr Jasiukajtis * CDDL HEADER START 3*25c28e83SPiotr Jasiukajtis * 4*25c28e83SPiotr Jasiukajtis * The contents of this file are subject to the terms of the 5*25c28e83SPiotr Jasiukajtis * Common Development and Distribution License (the "License"). 6*25c28e83SPiotr Jasiukajtis * You may not use this file except in compliance with the License. 7*25c28e83SPiotr Jasiukajtis * 8*25c28e83SPiotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*25c28e83SPiotr Jasiukajtis * or http://www.opensolaris.org/os/licensing. 10*25c28e83SPiotr Jasiukajtis * See the License for the specific language governing permissions 11*25c28e83SPiotr Jasiukajtis * and limitations under the License. 12*25c28e83SPiotr Jasiukajtis * 13*25c28e83SPiotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each 14*25c28e83SPiotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*25c28e83SPiotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the 16*25c28e83SPiotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying 17*25c28e83SPiotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner] 18*25c28e83SPiotr Jasiukajtis * 19*25c28e83SPiotr Jasiukajtis * CDDL HEADER END 20*25c28e83SPiotr Jasiukajtis */ 21*25c28e83SPiotr Jasiukajtis/* 22*25c28e83SPiotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 23*25c28e83SPiotr Jasiukajtis */ 24*25c28e83SPiotr Jasiukajtis/* 25*25c28e83SPiotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 26*25c28e83SPiotr Jasiukajtis * Use is subject to license terms. 27*25c28e83SPiotr Jasiukajtis */ 28*25c28e83SPiotr Jasiukajtis 29*25c28e83SPiotr Jasiukajtis .file "__vsincosf.S" 30*25c28e83SPiotr Jasiukajtis 31*25c28e83SPiotr Jasiukajtis#include "libm.h" 32*25c28e83SPiotr Jasiukajtis 33*25c28e83SPiotr Jasiukajtis RO_DATA 34*25c28e83SPiotr Jasiukajtis .align 64 35*25c28e83SPiotr Jasiukajtisconstants: 36*25c28e83SPiotr Jasiukajtis .word 0xbfc55554,0x60000000 37*25c28e83SPiotr Jasiukajtis .word 0x3f811077,0xe0000000 38*25c28e83SPiotr Jasiukajtis .word 0xbf29956b,0x60000000 39*25c28e83SPiotr Jasiukajtis .word 0x3ff00000,0x00000000 40*25c28e83SPiotr Jasiukajtis .word 0xbfe00000,0x00000000 41*25c28e83SPiotr Jasiukajtis .word 0x3fa55554,0xa0000000 42*25c28e83SPiotr Jasiukajtis .word 0xbf56c0c1,0xe0000000 43*25c28e83SPiotr Jasiukajtis .word 0x3ef99e24,0xe0000000 44*25c28e83SPiotr Jasiukajtis .word 0x3fe45f30,0x6dc9c883 45*25c28e83SPiotr Jasiukajtis .word 0x43380000,0x00000000 46*25c28e83SPiotr Jasiukajtis .word 0x3ff921fb,0x54400000 47*25c28e83SPiotr Jasiukajtis .word 0x3dd0b461,0x1a626331 48*25c28e83SPiotr Jasiukajtis .word 0x3f490fdb,0 49*25c28e83SPiotr Jasiukajtis .word 0x49c90fdb,0 50*25c28e83SPiotr Jasiukajtis .word 0x7f800000,0 51*25c28e83SPiotr Jasiukajtis .word 0x80000000,0 52*25c28e83SPiotr Jasiukajtis 53*25c28e83SPiotr Jasiukajtis#define S0 0x0 54*25c28e83SPiotr Jasiukajtis#define S1 0x08 55*25c28e83SPiotr Jasiukajtis#define S2 0x10 56*25c28e83SPiotr Jasiukajtis#define one 0x18 57*25c28e83SPiotr Jasiukajtis#define mhalf 0x20 58*25c28e83SPiotr Jasiukajtis#define C0 0x28 59*25c28e83SPiotr Jasiukajtis#define C1 0x30 60*25c28e83SPiotr Jasiukajtis#define C2 0x38 61*25c28e83SPiotr Jasiukajtis#define invpio2 0x40 62*25c28e83SPiotr Jasiukajtis#define round 0x48 63*25c28e83SPiotr Jasiukajtis#define pio2_1 0x50 64*25c28e83SPiotr Jasiukajtis#define pio2_t 0x58 65*25c28e83SPiotr Jasiukajtis#define thresh1 0x60 66*25c28e83SPiotr Jasiukajtis#define thresh2 0x68 67*25c28e83SPiotr Jasiukajtis#define inf 0x70 68*25c28e83SPiotr Jasiukajtis#define signbit 0x78 69*25c28e83SPiotr Jasiukajtis 70*25c28e83SPiotr Jasiukajtis! local storage indices 71*25c28e83SPiotr Jasiukajtis 72*25c28e83SPiotr Jasiukajtis#define xsave STACK_BIAS-0x8 73*25c28e83SPiotr Jasiukajtis#define ssave STACK_BIAS-0x10 74*25c28e83SPiotr Jasiukajtis#define csave STACK_BIAS-0x18 75*25c28e83SPiotr Jasiukajtis#define nsave STACK_BIAS-0x1c 76*25c28e83SPiotr Jasiukajtis#define sxsave STACK_BIAS-0x20 77*25c28e83SPiotr Jasiukajtis#define sssave STACK_BIAS-0x24 78*25c28e83SPiotr Jasiukajtis#define junk STACK_BIAS-0x28 79*25c28e83SPiotr Jasiukajtis#define n3 STACK_BIAS-0x38 80*25c28e83SPiotr Jasiukajtis#define n2 STACK_BIAS-0x40 81*25c28e83SPiotr Jasiukajtis#define n1 STACK_BIAS-0x48 82*25c28e83SPiotr Jasiukajtis#define n0 STACK_BIAS-0x50 83*25c28e83SPiotr Jasiukajtis! sizeof temp storage - must be a multiple of 16 for V9 84*25c28e83SPiotr Jasiukajtis#define tmps 0x50 85*25c28e83SPiotr Jasiukajtis 86*25c28e83SPiotr Jasiukajtis! register use 87*25c28e83SPiotr Jasiukajtis 88*25c28e83SPiotr Jasiukajtis! i0 n 89*25c28e83SPiotr Jasiukajtis! i1 x 90*25c28e83SPiotr Jasiukajtis! i2 stridex 91*25c28e83SPiotr Jasiukajtis! i3 s 92*25c28e83SPiotr Jasiukajtis! i4 strides 93*25c28e83SPiotr Jasiukajtis! i5 biguns 94*25c28e83SPiotr Jasiukajtis 95*25c28e83SPiotr Jasiukajtis! l0 ps0 96*25c28e83SPiotr Jasiukajtis! l1 ps1 97*25c28e83SPiotr Jasiukajtis! l2 ps2 98*25c28e83SPiotr Jasiukajtis! l3 ps3 99*25c28e83SPiotr Jasiukajtis! l4 pc0 100*25c28e83SPiotr Jasiukajtis! l5 pc1 101*25c28e83SPiotr Jasiukajtis! l6 pc2 102*25c28e83SPiotr Jasiukajtis! l7 pc3 103*25c28e83SPiotr Jasiukajtis 104*25c28e83SPiotr Jasiukajtis! the following are 64-bit registers in both V8+ and V9 105*25c28e83SPiotr Jasiukajtis 106*25c28e83SPiotr Jasiukajtis! g1 107*25c28e83SPiotr Jasiukajtis! g5 108*25c28e83SPiotr Jasiukajtis 109*25c28e83SPiotr Jasiukajtis! o0 n0 110*25c28e83SPiotr Jasiukajtis! o1 n1 111*25c28e83SPiotr Jasiukajtis! o2 n2 112*25c28e83SPiotr Jasiukajtis! o3 n3 113*25c28e83SPiotr Jasiukajtis! o4 c 114*25c28e83SPiotr Jasiukajtis! o5 stridec 115*25c28e83SPiotr Jasiukajtis! o7 116*25c28e83SPiotr Jasiukajtis 117*25c28e83SPiotr Jasiukajtis! f0 x0 118*25c28e83SPiotr Jasiukajtis! f2 x1 119*25c28e83SPiotr Jasiukajtis! f4 x2 120*25c28e83SPiotr Jasiukajtis! f6 x3 121*25c28e83SPiotr Jasiukajtis! f8 thresh1 (pi/4) 122*25c28e83SPiotr Jasiukajtis! f10 s0 123*25c28e83SPiotr Jasiukajtis! f12 s1 124*25c28e83SPiotr Jasiukajtis! f14 s2 125*25c28e83SPiotr Jasiukajtis! f16 s3 126*25c28e83SPiotr Jasiukajtis! f18 thresh2 (2^19 pi) 127*25c28e83SPiotr Jasiukajtis! f20 c0 128*25c28e83SPiotr Jasiukajtis! f22 c1 129*25c28e83SPiotr Jasiukajtis! f24 c2 130*25c28e83SPiotr Jasiukajtis! f26 c3 131*25c28e83SPiotr Jasiukajtis! f28 signbit 132*25c28e83SPiotr Jasiukajtis! f30 133*25c28e83SPiotr Jasiukajtis! f32 134*25c28e83SPiotr Jasiukajtis! f34 135*25c28e83SPiotr Jasiukajtis! f36 136*25c28e83SPiotr Jasiukajtis! f38 inf 137*25c28e83SPiotr Jasiukajtis! f40 S0 138*25c28e83SPiotr Jasiukajtis! f42 S1 139*25c28e83SPiotr Jasiukajtis! f44 S2 140*25c28e83SPiotr Jasiukajtis! f46 one 141*25c28e83SPiotr Jasiukajtis! f48 mhalf 142*25c28e83SPiotr Jasiukajtis! f50 C0 143*25c28e83SPiotr Jasiukajtis! f52 C1 144*25c28e83SPiotr Jasiukajtis! f54 C2 145*25c28e83SPiotr Jasiukajtis! f56 invpio2 146*25c28e83SPiotr Jasiukajtis! f58 round 147*25c28e83SPiotr Jasiukajtis! f60 pio2_1 148*25c28e83SPiotr Jasiukajtis! f62 pio2_t 149*25c28e83SPiotr Jasiukajtis 150*25c28e83SPiotr Jasiukajtis ENTRY(__vsincosf) 151*25c28e83SPiotr Jasiukajtis save %sp,-SA(MINFRAME)-tmps,%sp 152*25c28e83SPiotr Jasiukajtis PIC_SETUP(l7) 153*25c28e83SPiotr Jasiukajtis PIC_SET(l7,constants,o0) 154*25c28e83SPiotr Jasiukajtis mov %o0,%g1 155*25c28e83SPiotr Jasiukajtis 156*25c28e83SPiotr Jasiukajtis#ifdef __sparcv9 157*25c28e83SPiotr Jasiukajtis stx %i1,[%fp+xsave] ! save arguments 158*25c28e83SPiotr Jasiukajtis stx %i3,[%fp+ssave] 159*25c28e83SPiotr Jasiukajtis stx %i5,[%fp+csave] 160*25c28e83SPiotr Jasiukajtis ldx [%fp+STACK_BIAS+0xb0],%o5 161*25c28e83SPiotr Jasiukajtis#else 162*25c28e83SPiotr Jasiukajtis st %i1,[%fp+xsave] ! save arguments 163*25c28e83SPiotr Jasiukajtis st %i3,[%fp+ssave] 164*25c28e83SPiotr Jasiukajtis st %i5,[%fp+csave] 165*25c28e83SPiotr Jasiukajtis ld [%fp+0x5c],%o5 166*25c28e83SPiotr Jasiukajtis#endif 167*25c28e83SPiotr Jasiukajtis st %i0,[%fp+nsave] 168*25c28e83SPiotr Jasiukajtis st %i2,[%fp+sxsave] 169*25c28e83SPiotr Jasiukajtis st %i4,[%fp+sssave] 170*25c28e83SPiotr Jasiukajtis mov %i5,%o4 171*25c28e83SPiotr Jasiukajtis mov 0,%i5 ! biguns = 0 172*25c28e83SPiotr Jasiukajtis ldd [%g1+S0],%f40 ! load constants 173*25c28e83SPiotr Jasiukajtis ldd [%g1+S1],%f42 174*25c28e83SPiotr Jasiukajtis ldd [%g1+S2],%f44 175*25c28e83SPiotr Jasiukajtis ldd [%g1+one],%f46 176*25c28e83SPiotr Jasiukajtis ldd [%g1+mhalf],%f48 177*25c28e83SPiotr Jasiukajtis ldd [%g1+C0],%f50 178*25c28e83SPiotr Jasiukajtis ldd [%g1+C1],%f52 179*25c28e83SPiotr Jasiukajtis ldd [%g1+C2],%f54 180*25c28e83SPiotr Jasiukajtis ldd [%g1+invpio2],%f56 181*25c28e83SPiotr Jasiukajtis ldd [%g1+round],%f58 182*25c28e83SPiotr Jasiukajtis ldd [%g1+pio2_1],%f60 183*25c28e83SPiotr Jasiukajtis ldd [%g1+pio2_t],%f62 184*25c28e83SPiotr Jasiukajtis ldd [%g1+thresh1],%f8 185*25c28e83SPiotr Jasiukajtis ldd [%g1+thresh2],%f18 186*25c28e83SPiotr Jasiukajtis ldd [%g1+inf],%f38 187*25c28e83SPiotr Jasiukajtis ldd [%g1+signbit],%f28 188*25c28e83SPiotr Jasiukajtis sll %i2,2,%i2 ! scale strides 189*25c28e83SPiotr Jasiukajtis sll %i4,2,%i4 190*25c28e83SPiotr Jasiukajtis sll %o5,2,%o5 191*25c28e83SPiotr Jasiukajtis nop 192*25c28e83SPiotr Jasiukajtis fzero %f10 ! loop prologue 193*25c28e83SPiotr Jasiukajtis add %fp,junk,%l0 194*25c28e83SPiotr Jasiukajtis fzero %f20 195*25c28e83SPiotr Jasiukajtis add %fp,junk,%l4 196*25c28e83SPiotr Jasiukajtis fzero %f12 197*25c28e83SPiotr Jasiukajtis add %fp,junk,%l1 198*25c28e83SPiotr Jasiukajtis fzero %f22 199*25c28e83SPiotr Jasiukajtis add %fp,junk,%l5 200*25c28e83SPiotr Jasiukajtis fzero %f14 201*25c28e83SPiotr Jasiukajtis add %fp,junk,%l2 202*25c28e83SPiotr Jasiukajtis fzero %f24 203*25c28e83SPiotr Jasiukajtis add %fp,junk,%l6 204*25c28e83SPiotr Jasiukajtis fzero %f16 205*25c28e83SPiotr Jasiukajtis add %fp,junk,%l3 206*25c28e83SPiotr Jasiukajtis fzero %f26 207*25c28e83SPiotr Jasiukajtis ba .start 208*25c28e83SPiotr Jasiukajtis add %fp,junk,%l7 209*25c28e83SPiotr Jasiukajtis 210*25c28e83SPiotr Jasiukajtis! 16-byte aligned 211*25c28e83SPiotr Jasiukajtis .align 16 212*25c28e83SPiotr Jasiukajtis.start: 213*25c28e83SPiotr Jasiukajtis ld [%i1],%f0 ! *x 214*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 215*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 216*25c28e83SPiotr Jasiukajtis fdtos %f10,%f10 217*25c28e83SPiotr Jasiukajtis 218*25c28e83SPiotr Jasiukajtis st %f10,[%l0] 219*25c28e83SPiotr Jasiukajtis mov %i3,%l0 ! ps0 = s 220*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 221*25c28e83SPiotr Jasiukajtis fdtos %f20,%f20 222*25c28e83SPiotr Jasiukajtis 223*25c28e83SPiotr Jasiukajtis st %f20,[%l4] 224*25c28e83SPiotr Jasiukajtis mov %o4,%l4 ! pc0 = c 225*25c28e83SPiotr Jasiukajtis ble,pn %icc,.last1 226*25c28e83SPiotr Jasiukajtis! delay slot 227*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 ! c += stridec 228*25c28e83SPiotr Jasiukajtis 229*25c28e83SPiotr Jasiukajtis ld [%i1],%f2 ! *x 230*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 231*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 232*25c28e83SPiotr Jasiukajtis fdtos %f12,%f12 233*25c28e83SPiotr Jasiukajtis 234*25c28e83SPiotr Jasiukajtis st %f12,[%l1] 235*25c28e83SPiotr Jasiukajtis mov %i3,%l1 ! ps1 = s 236*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 237*25c28e83SPiotr Jasiukajtis fdtos %f22,%f22 238*25c28e83SPiotr Jasiukajtis 239*25c28e83SPiotr Jasiukajtis st %f22,[%l5] 240*25c28e83SPiotr Jasiukajtis mov %o4,%l5 ! pc1 = c 241*25c28e83SPiotr Jasiukajtis ble,pn %icc,.last2 242*25c28e83SPiotr Jasiukajtis! delay slot 243*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 ! c += stridec 244*25c28e83SPiotr Jasiukajtis 245*25c28e83SPiotr Jasiukajtis ld [%i1],%f4 ! *x 246*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 247*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 248*25c28e83SPiotr Jasiukajtis fdtos %f14,%f14 249*25c28e83SPiotr Jasiukajtis 250*25c28e83SPiotr Jasiukajtis st %f14,[%l2] 251*25c28e83SPiotr Jasiukajtis mov %i3,%l2 ! ps2 = s 252*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 253*25c28e83SPiotr Jasiukajtis fdtos %f24,%f24 254*25c28e83SPiotr Jasiukajtis 255*25c28e83SPiotr Jasiukajtis st %f24,[%l6] 256*25c28e83SPiotr Jasiukajtis mov %o4,%l6 ! pc2 = c 257*25c28e83SPiotr Jasiukajtis ble,pn %icc,.last3 258*25c28e83SPiotr Jasiukajtis! delay slot 259*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 ! c += stridec 260*25c28e83SPiotr Jasiukajtis 261*25c28e83SPiotr Jasiukajtis ld [%i1],%f6 ! *x 262*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 263*25c28e83SPiotr Jasiukajtis nop 264*25c28e83SPiotr Jasiukajtis fdtos %f16,%f16 265*25c28e83SPiotr Jasiukajtis 266*25c28e83SPiotr Jasiukajtis st %f16,[%l3] 267*25c28e83SPiotr Jasiukajtis mov %i3,%l3 ! ps3 = s 268*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 269*25c28e83SPiotr Jasiukajtis fdtos %f26,%f26 270*25c28e83SPiotr Jasiukajtis 271*25c28e83SPiotr Jasiukajtis st %f26,[%l7] 272*25c28e83SPiotr Jasiukajtis mov %o4,%l7 ! pc3 = c 273*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 ! c += stridec 274*25c28e83SPiotr Jasiukajtis.cont: 275*25c28e83SPiotr Jasiukajtis fabsd %f0,%f30 276*25c28e83SPiotr Jasiukajtis 277*25c28e83SPiotr Jasiukajtis fabsd %f2,%f32 278*25c28e83SPiotr Jasiukajtis 279*25c28e83SPiotr Jasiukajtis fabsd %f4,%f34 280*25c28e83SPiotr Jasiukajtis 281*25c28e83SPiotr Jasiukajtis fabsd %f6,%f36 282*25c28e83SPiotr Jasiukajtis fcmple32 %f30,%f18,%o0 283*25c28e83SPiotr Jasiukajtis 284*25c28e83SPiotr Jasiukajtis fcmple32 %f32,%f18,%o1 285*25c28e83SPiotr Jasiukajtis 286*25c28e83SPiotr Jasiukajtis fcmple32 %f34,%f18,%o2 287*25c28e83SPiotr Jasiukajtis 288*25c28e83SPiotr Jasiukajtis fcmple32 %f36,%f18,%o3 289*25c28e83SPiotr Jasiukajtis nop 290*25c28e83SPiotr Jasiukajtis 291*25c28e83SPiotr Jasiukajtis! 16-byte aligned 292*25c28e83SPiotr Jasiukajtis andcc %o0,2,%g0 293*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range0 ! branch if > 2^19 pi 294*25c28e83SPiotr Jasiukajtis! delay slot 295*25c28e83SPiotr Jasiukajtis fcmple32 %f30,%f8,%o0 296*25c28e83SPiotr Jasiukajtis 297*25c28e83SPiotr Jasiukajtis.check1: 298*25c28e83SPiotr Jasiukajtis andcc %o1,2,%g0 299*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range1 ! branch if > 2^19 pi 300*25c28e83SPiotr Jasiukajtis! delay slot 301*25c28e83SPiotr Jasiukajtis fcmple32 %f32,%f8,%o1 302*25c28e83SPiotr Jasiukajtis 303*25c28e83SPiotr Jasiukajtis.check2: 304*25c28e83SPiotr Jasiukajtis andcc %o2,2,%g0 305*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range2 ! branch if > 2^19 pi 306*25c28e83SPiotr Jasiukajtis! delay slot 307*25c28e83SPiotr Jasiukajtis fcmple32 %f34,%f8,%o2 308*25c28e83SPiotr Jasiukajtis 309*25c28e83SPiotr Jasiukajtis.check3: 310*25c28e83SPiotr Jasiukajtis andcc %o3,2,%g0 311*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range3 ! branch if > 2^19 pi 312*25c28e83SPiotr Jasiukajtis! delay slot 313*25c28e83SPiotr Jasiukajtis fcmple32 %f36,%f8,%o3 314*25c28e83SPiotr Jasiukajtis 315*25c28e83SPiotr Jasiukajtis.checkprimary: 316*25c28e83SPiotr Jasiukajtis fsmuld %f0,%f0,%f30 317*25c28e83SPiotr Jasiukajtis fstod %f0,%f0 318*25c28e83SPiotr Jasiukajtis 319*25c28e83SPiotr Jasiukajtis fsmuld %f2,%f2,%f32 320*25c28e83SPiotr Jasiukajtis fstod %f2,%f2 321*25c28e83SPiotr Jasiukajtis and %o0,%o1,%o7 322*25c28e83SPiotr Jasiukajtis 323*25c28e83SPiotr Jasiukajtis fsmuld %f4,%f4,%f34 324*25c28e83SPiotr Jasiukajtis fstod %f4,%f4 325*25c28e83SPiotr Jasiukajtis and %o2,%o7,%o7 326*25c28e83SPiotr Jasiukajtis 327*25c28e83SPiotr Jasiukajtis fsmuld %f6,%f6,%f36 328*25c28e83SPiotr Jasiukajtis fstod %f6,%f6 329*25c28e83SPiotr Jasiukajtis and %o3,%o7,%o7 330*25c28e83SPiotr Jasiukajtis 331*25c28e83SPiotr Jasiukajtis fmuld %f30,%f54,%f20 332*25c28e83SPiotr Jasiukajtis andcc %o7,2,%g0 333*25c28e83SPiotr Jasiukajtis bz,pn %icc,.medium ! branch if any argument is > pi/4 334*25c28e83SPiotr Jasiukajtis! delay slot 335*25c28e83SPiotr Jasiukajtis nop 336*25c28e83SPiotr Jasiukajtis 337*25c28e83SPiotr Jasiukajtis fmuld %f32,%f54,%f22 338*25c28e83SPiotr Jasiukajtis 339*25c28e83SPiotr Jasiukajtis fmuld %f34,%f54,%f24 340*25c28e83SPiotr Jasiukajtis 341*25c28e83SPiotr Jasiukajtis fmuld %f36,%f54,%f26 342*25c28e83SPiotr Jasiukajtis 343*25c28e83SPiotr Jasiukajtis faddd %f20,%f52,%f20 344*25c28e83SPiotr Jasiukajtis fmuld %f30,%f44,%f10 345*25c28e83SPiotr Jasiukajtis 346*25c28e83SPiotr Jasiukajtis faddd %f22,%f52,%f22 347*25c28e83SPiotr Jasiukajtis fmuld %f32,%f44,%f12 348*25c28e83SPiotr Jasiukajtis 349*25c28e83SPiotr Jasiukajtis faddd %f24,%f52,%f24 350*25c28e83SPiotr Jasiukajtis fmuld %f34,%f44,%f14 351*25c28e83SPiotr Jasiukajtis 352*25c28e83SPiotr Jasiukajtis faddd %f26,%f52,%f26 353*25c28e83SPiotr Jasiukajtis fmuld %f36,%f44,%f16 354*25c28e83SPiotr Jasiukajtis 355*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 356*25c28e83SPiotr Jasiukajtis faddd %f10,%f42,%f10 357*25c28e83SPiotr Jasiukajtis 358*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 359*25c28e83SPiotr Jasiukajtis faddd %f12,%f42,%f12 360*25c28e83SPiotr Jasiukajtis 361*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 362*25c28e83SPiotr Jasiukajtis faddd %f14,%f42,%f14 363*25c28e83SPiotr Jasiukajtis 364*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 365*25c28e83SPiotr Jasiukajtis faddd %f16,%f42,%f16 366*25c28e83SPiotr Jasiukajtis 367*25c28e83SPiotr Jasiukajtis faddd %f20,%f50,%f20 368*25c28e83SPiotr Jasiukajtis fmuld %f30,%f10,%f10 369*25c28e83SPiotr Jasiukajtis 370*25c28e83SPiotr Jasiukajtis faddd %f22,%f50,%f22 371*25c28e83SPiotr Jasiukajtis fmuld %f32,%f12,%f12 372*25c28e83SPiotr Jasiukajtis 373*25c28e83SPiotr Jasiukajtis faddd %f24,%f50,%f24 374*25c28e83SPiotr Jasiukajtis fmuld %f34,%f14,%f14 375*25c28e83SPiotr Jasiukajtis 376*25c28e83SPiotr Jasiukajtis faddd %f26,%f50,%f26 377*25c28e83SPiotr Jasiukajtis fmuld %f36,%f16,%f16 378*25c28e83SPiotr Jasiukajtis 379*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 380*25c28e83SPiotr Jasiukajtis faddd %f10,%f40,%f10 381*25c28e83SPiotr Jasiukajtis 382*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 383*25c28e83SPiotr Jasiukajtis faddd %f12,%f40,%f12 384*25c28e83SPiotr Jasiukajtis 385*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 386*25c28e83SPiotr Jasiukajtis faddd %f14,%f40,%f14 387*25c28e83SPiotr Jasiukajtis 388*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 389*25c28e83SPiotr Jasiukajtis faddd %f16,%f40,%f16 390*25c28e83SPiotr Jasiukajtis 391*25c28e83SPiotr Jasiukajtis faddd %f20,%f48,%f20 392*25c28e83SPiotr Jasiukajtis fmuld %f30,%f10,%f10 393*25c28e83SPiotr Jasiukajtis 394*25c28e83SPiotr Jasiukajtis faddd %f22,%f48,%f22 395*25c28e83SPiotr Jasiukajtis fmuld %f32,%f12,%f12 396*25c28e83SPiotr Jasiukajtis 397*25c28e83SPiotr Jasiukajtis faddd %f24,%f48,%f24 398*25c28e83SPiotr Jasiukajtis fmuld %f34,%f14,%f14 399*25c28e83SPiotr Jasiukajtis 400*25c28e83SPiotr Jasiukajtis faddd %f26,%f48,%f26 401*25c28e83SPiotr Jasiukajtis fmuld %f36,%f16,%f16 402*25c28e83SPiotr Jasiukajtis 403*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 404*25c28e83SPiotr Jasiukajtis faddd %f10,%f46,%f10 405*25c28e83SPiotr Jasiukajtis 406*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 407*25c28e83SPiotr Jasiukajtis faddd %f12,%f46,%f12 408*25c28e83SPiotr Jasiukajtis 409*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 410*25c28e83SPiotr Jasiukajtis faddd %f14,%f46,%f14 411*25c28e83SPiotr Jasiukajtis 412*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 413*25c28e83SPiotr Jasiukajtis faddd %f16,%f46,%f16 414*25c28e83SPiotr Jasiukajtis 415*25c28e83SPiotr Jasiukajtis faddd %f20,%f46,%f20 416*25c28e83SPiotr Jasiukajtis fmuld %f0,%f10,%f10 417*25c28e83SPiotr Jasiukajtis 418*25c28e83SPiotr Jasiukajtis faddd %f22,%f46,%f22 419*25c28e83SPiotr Jasiukajtis fmuld %f2,%f12,%f12 420*25c28e83SPiotr Jasiukajtis 421*25c28e83SPiotr Jasiukajtis faddd %f24,%f46,%f24 422*25c28e83SPiotr Jasiukajtis fmuld %f4,%f14,%f14 423*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 424*25c28e83SPiotr Jasiukajtis 425*25c28e83SPiotr Jasiukajtis faddd %f26,%f46,%f26 426*25c28e83SPiotr Jasiukajtis bg,pt %icc,.start 427*25c28e83SPiotr Jasiukajtis! delay slot 428*25c28e83SPiotr Jasiukajtis fmuld %f6,%f16,%f16 429*25c28e83SPiotr Jasiukajtis 430*25c28e83SPiotr Jasiukajtis ba,pt %icc,.end 431*25c28e83SPiotr Jasiukajtis! delay slot 432*25c28e83SPiotr Jasiukajtis nop 433*25c28e83SPiotr Jasiukajtis 434*25c28e83SPiotr Jasiukajtis 435*25c28e83SPiotr Jasiukajtis .align 16 436*25c28e83SPiotr Jasiukajtis.medium: 437*25c28e83SPiotr Jasiukajtis fmuld %f0,%f56,%f10 438*25c28e83SPiotr Jasiukajtis 439*25c28e83SPiotr Jasiukajtis fmuld %f2,%f56,%f12 440*25c28e83SPiotr Jasiukajtis 441*25c28e83SPiotr Jasiukajtis fmuld %f4,%f56,%f14 442*25c28e83SPiotr Jasiukajtis 443*25c28e83SPiotr Jasiukajtis fmuld %f6,%f56,%f16 444*25c28e83SPiotr Jasiukajtis 445*25c28e83SPiotr Jasiukajtis faddd %f10,%f58,%f10 446*25c28e83SPiotr Jasiukajtis st %f11,[%fp+n0] 447*25c28e83SPiotr Jasiukajtis 448*25c28e83SPiotr Jasiukajtis faddd %f12,%f58,%f12 449*25c28e83SPiotr Jasiukajtis st %f13,[%fp+n1] 450*25c28e83SPiotr Jasiukajtis 451*25c28e83SPiotr Jasiukajtis faddd %f14,%f58,%f14 452*25c28e83SPiotr Jasiukajtis st %f15,[%fp+n2] 453*25c28e83SPiotr Jasiukajtis 454*25c28e83SPiotr Jasiukajtis faddd %f16,%f58,%f16 455*25c28e83SPiotr Jasiukajtis st %f17,[%fp+n3] 456*25c28e83SPiotr Jasiukajtis 457*25c28e83SPiotr Jasiukajtis fsubd %f10,%f58,%f10 458*25c28e83SPiotr Jasiukajtis 459*25c28e83SPiotr Jasiukajtis fsubd %f12,%f58,%f12 460*25c28e83SPiotr Jasiukajtis 461*25c28e83SPiotr Jasiukajtis fsubd %f14,%f58,%f14 462*25c28e83SPiotr Jasiukajtis 463*25c28e83SPiotr Jasiukajtis fsubd %f16,%f58,%f16 464*25c28e83SPiotr Jasiukajtis 465*25c28e83SPiotr Jasiukajtis fmuld %f10,%f60,%f20 466*25c28e83SPiotr Jasiukajtis ld [%fp+n0],%o0 467*25c28e83SPiotr Jasiukajtis 468*25c28e83SPiotr Jasiukajtis fmuld %f12,%f60,%f22 469*25c28e83SPiotr Jasiukajtis ld [%fp+n1],%o1 470*25c28e83SPiotr Jasiukajtis 471*25c28e83SPiotr Jasiukajtis fmuld %f14,%f60,%f24 472*25c28e83SPiotr Jasiukajtis ld [%fp+n2],%o2 473*25c28e83SPiotr Jasiukajtis 474*25c28e83SPiotr Jasiukajtis fmuld %f16,%f60,%f26 475*25c28e83SPiotr Jasiukajtis ld [%fp+n3],%o3 476*25c28e83SPiotr Jasiukajtis 477*25c28e83SPiotr Jasiukajtis fsubd %f0,%f20,%f0 478*25c28e83SPiotr Jasiukajtis fmuld %f10,%f62,%f30 479*25c28e83SPiotr Jasiukajtis and %o0,1,%o0 480*25c28e83SPiotr Jasiukajtis mov %l0,%g1 481*25c28e83SPiotr Jasiukajtis 482*25c28e83SPiotr Jasiukajtis fsubd %f2,%f22,%f2 483*25c28e83SPiotr Jasiukajtis fmuld %f12,%f62,%f32 484*25c28e83SPiotr Jasiukajtis and %o1,1,%o1 485*25c28e83SPiotr Jasiukajtis movrnz %o0,%l4,%l0 ! if (n & 1) exchange ps and pc 486*25c28e83SPiotr Jasiukajtis 487*25c28e83SPiotr Jasiukajtis fsubd %f4,%f24,%f4 488*25c28e83SPiotr Jasiukajtis fmuld %f14,%f62,%f34 489*25c28e83SPiotr Jasiukajtis and %o2,1,%o2 490*25c28e83SPiotr Jasiukajtis movrnz %o0,%g1,%l4 491*25c28e83SPiotr Jasiukajtis 492*25c28e83SPiotr Jasiukajtis fsubd %f6,%f26,%f6 493*25c28e83SPiotr Jasiukajtis fmuld %f16,%f62,%f36 494*25c28e83SPiotr Jasiukajtis and %o3,1,%o3 495*25c28e83SPiotr Jasiukajtis mov %l1,%g1 496*25c28e83SPiotr Jasiukajtis 497*25c28e83SPiotr Jasiukajtis fsubd %f0,%f30,%f0 498*25c28e83SPiotr Jasiukajtis movrnz %o1,%l5,%l1 499*25c28e83SPiotr Jasiukajtis 500*25c28e83SPiotr Jasiukajtis fsubd %f2,%f32,%f2 501*25c28e83SPiotr Jasiukajtis movrnz %o1,%g1,%l5 502*25c28e83SPiotr Jasiukajtis 503*25c28e83SPiotr Jasiukajtis fsubd %f4,%f34,%f4 504*25c28e83SPiotr Jasiukajtis mov %l2,%g1 505*25c28e83SPiotr Jasiukajtis 506*25c28e83SPiotr Jasiukajtis fsubd %f6,%f36,%f6 507*25c28e83SPiotr Jasiukajtis movrnz %o2,%l6,%l2 508*25c28e83SPiotr Jasiukajtis 509*25c28e83SPiotr Jasiukajtis fmuld %f0,%f0,%f30 510*25c28e83SPiotr Jasiukajtis fnegd %f0,%f10 511*25c28e83SPiotr Jasiukajtis movrnz %o2,%g1,%l6 512*25c28e83SPiotr Jasiukajtis 513*25c28e83SPiotr Jasiukajtis fmuld %f2,%f2,%f32 514*25c28e83SPiotr Jasiukajtis fnegd %f2,%f12 515*25c28e83SPiotr Jasiukajtis mov %l3,%g1 516*25c28e83SPiotr Jasiukajtis 517*25c28e83SPiotr Jasiukajtis fmuld %f4,%f4,%f34 518*25c28e83SPiotr Jasiukajtis fnegd %f4,%f14 519*25c28e83SPiotr Jasiukajtis movrnz %o3,%l7,%l3 520*25c28e83SPiotr Jasiukajtis 521*25c28e83SPiotr Jasiukajtis fmuld %f6,%f6,%f36 522*25c28e83SPiotr Jasiukajtis fnegd %f6,%f16 523*25c28e83SPiotr Jasiukajtis movrnz %o3,%g1,%l7 524*25c28e83SPiotr Jasiukajtis 525*25c28e83SPiotr Jasiukajtis fmuld %f30,%f54,%f20 526*25c28e83SPiotr Jasiukajtis fmovrdnz %o0,%f10,%f0 ! if (n & 1) x = -x 527*25c28e83SPiotr Jasiukajtis 528*25c28e83SPiotr Jasiukajtis fmuld %f32,%f54,%f22 529*25c28e83SPiotr Jasiukajtis fmovrdnz %o1,%f12,%f2 530*25c28e83SPiotr Jasiukajtis 531*25c28e83SPiotr Jasiukajtis fmuld %f34,%f54,%f24 532*25c28e83SPiotr Jasiukajtis fmovrdnz %o2,%f14,%f4 533*25c28e83SPiotr Jasiukajtis 534*25c28e83SPiotr Jasiukajtis fmuld %f36,%f54,%f26 535*25c28e83SPiotr Jasiukajtis fmovrdnz %o3,%f16,%f6 536*25c28e83SPiotr Jasiukajtis 537*25c28e83SPiotr Jasiukajtis faddd %f20,%f52,%f20 538*25c28e83SPiotr Jasiukajtis fmuld %f30,%f44,%f10 539*25c28e83SPiotr Jasiukajtis ld [%fp+n0],%o0 540*25c28e83SPiotr Jasiukajtis 541*25c28e83SPiotr Jasiukajtis faddd %f22,%f52,%f22 542*25c28e83SPiotr Jasiukajtis fmuld %f32,%f44,%f12 543*25c28e83SPiotr Jasiukajtis and %o0,2,%o0 544*25c28e83SPiotr Jasiukajtis 545*25c28e83SPiotr Jasiukajtis faddd %f24,%f52,%f24 546*25c28e83SPiotr Jasiukajtis fmuld %f34,%f44,%f14 547*25c28e83SPiotr Jasiukajtis sllx %o0,62,%g1 548*25c28e83SPiotr Jasiukajtis stx %g1,[%fp+n0] 549*25c28e83SPiotr Jasiukajtis 550*25c28e83SPiotr Jasiukajtis faddd %f26,%f52,%f26 551*25c28e83SPiotr Jasiukajtis fmuld %f36,%f44,%f16 552*25c28e83SPiotr Jasiukajtis ld [%fp+n1],%o1 553*25c28e83SPiotr Jasiukajtis 554*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 555*25c28e83SPiotr Jasiukajtis faddd %f10,%f42,%f10 556*25c28e83SPiotr Jasiukajtis and %o1,2,%o1 557*25c28e83SPiotr Jasiukajtis 558*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 559*25c28e83SPiotr Jasiukajtis faddd %f12,%f42,%f12 560*25c28e83SPiotr Jasiukajtis sllx %o1,62,%g1 561*25c28e83SPiotr Jasiukajtis stx %g1,[%fp+n1] 562*25c28e83SPiotr Jasiukajtis 563*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 564*25c28e83SPiotr Jasiukajtis faddd %f14,%f42,%f14 565*25c28e83SPiotr Jasiukajtis ld [%fp+n2],%o2 566*25c28e83SPiotr Jasiukajtis 567*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 568*25c28e83SPiotr Jasiukajtis faddd %f16,%f42,%f16 569*25c28e83SPiotr Jasiukajtis and %o2,2,%o2 570*25c28e83SPiotr Jasiukajtis 571*25c28e83SPiotr Jasiukajtis faddd %f20,%f50,%f20 572*25c28e83SPiotr Jasiukajtis fmuld %f30,%f10,%f10 573*25c28e83SPiotr Jasiukajtis sllx %o2,62,%g1 574*25c28e83SPiotr Jasiukajtis stx %g1,[%fp+n2] 575*25c28e83SPiotr Jasiukajtis 576*25c28e83SPiotr Jasiukajtis faddd %f22,%f50,%f22 577*25c28e83SPiotr Jasiukajtis fmuld %f32,%f12,%f12 578*25c28e83SPiotr Jasiukajtis ld [%fp+n3],%o3 579*25c28e83SPiotr Jasiukajtis 580*25c28e83SPiotr Jasiukajtis faddd %f24,%f50,%f24 581*25c28e83SPiotr Jasiukajtis fmuld %f34,%f14,%f14 582*25c28e83SPiotr Jasiukajtis and %o3,2,%o3 583*25c28e83SPiotr Jasiukajtis 584*25c28e83SPiotr Jasiukajtis faddd %f26,%f50,%f26 585*25c28e83SPiotr Jasiukajtis fmuld %f36,%f16,%f16 586*25c28e83SPiotr Jasiukajtis sllx %o3,62,%g1 587*25c28e83SPiotr Jasiukajtis stx %g1,[%fp+n3] 588*25c28e83SPiotr Jasiukajtis 589*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 590*25c28e83SPiotr Jasiukajtis faddd %f10,%f40,%f10 591*25c28e83SPiotr Jasiukajtis 592*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 593*25c28e83SPiotr Jasiukajtis faddd %f12,%f40,%f12 594*25c28e83SPiotr Jasiukajtis 595*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 596*25c28e83SPiotr Jasiukajtis faddd %f14,%f40,%f14 597*25c28e83SPiotr Jasiukajtis 598*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 599*25c28e83SPiotr Jasiukajtis faddd %f16,%f40,%f16 600*25c28e83SPiotr Jasiukajtis 601*25c28e83SPiotr Jasiukajtis faddd %f20,%f48,%f20 602*25c28e83SPiotr Jasiukajtis fmuld %f30,%f10,%f10 603*25c28e83SPiotr Jasiukajtis 604*25c28e83SPiotr Jasiukajtis faddd %f22,%f48,%f22 605*25c28e83SPiotr Jasiukajtis fmuld %f32,%f12,%f12 606*25c28e83SPiotr Jasiukajtis 607*25c28e83SPiotr Jasiukajtis faddd %f24,%f48,%f24 608*25c28e83SPiotr Jasiukajtis fmuld %f34,%f14,%f14 609*25c28e83SPiotr Jasiukajtis 610*25c28e83SPiotr Jasiukajtis faddd %f26,%f48,%f26 611*25c28e83SPiotr Jasiukajtis fmuld %f36,%f16,%f16 612*25c28e83SPiotr Jasiukajtis 613*25c28e83SPiotr Jasiukajtis fmuld %f30,%f20,%f20 614*25c28e83SPiotr Jasiukajtis faddd %f10,%f46,%f10 615*25c28e83SPiotr Jasiukajtis 616*25c28e83SPiotr Jasiukajtis fmuld %f32,%f22,%f22 617*25c28e83SPiotr Jasiukajtis faddd %f12,%f46,%f12 618*25c28e83SPiotr Jasiukajtis 619*25c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 620*25c28e83SPiotr Jasiukajtis faddd %f14,%f46,%f14 621*25c28e83SPiotr Jasiukajtis 622*25c28e83SPiotr Jasiukajtis fmuld %f36,%f26,%f26 623*25c28e83SPiotr Jasiukajtis faddd %f16,%f46,%f16 624*25c28e83SPiotr Jasiukajtis 625*25c28e83SPiotr Jasiukajtis faddd %f20,%f46,%f20 626*25c28e83SPiotr Jasiukajtis fmuld %f0,%f10,%f10 627*25c28e83SPiotr Jasiukajtis ldd [%fp+n0],%f30 628*25c28e83SPiotr Jasiukajtis 629*25c28e83SPiotr Jasiukajtis faddd %f22,%f46,%f22 630*25c28e83SPiotr Jasiukajtis fmuld %f2,%f12,%f12 631*25c28e83SPiotr Jasiukajtis ldd [%fp+n1],%f32 632*25c28e83SPiotr Jasiukajtis 633*25c28e83SPiotr Jasiukajtis faddd %f24,%f46,%f24 634*25c28e83SPiotr Jasiukajtis fmuld %f4,%f14,%f14 635*25c28e83SPiotr Jasiukajtis ldd [%fp+n2],%f34 636*25c28e83SPiotr Jasiukajtis 637*25c28e83SPiotr Jasiukajtis faddd %f26,%f46,%f26 638*25c28e83SPiotr Jasiukajtis fmuld %f6,%f16,%f16 639*25c28e83SPiotr Jasiukajtis ldd [%fp+n3],%f36 640*25c28e83SPiotr Jasiukajtis 641*25c28e83SPiotr Jasiukajtis fxor %f10,%f30,%f10 ! if (n & 2) negate s, c 642*25c28e83SPiotr Jasiukajtis 643*25c28e83SPiotr Jasiukajtis fxor %f12,%f32,%f12 644*25c28e83SPiotr Jasiukajtis 645*25c28e83SPiotr Jasiukajtis fxor %f14,%f34,%f14 646*25c28e83SPiotr Jasiukajtis 647*25c28e83SPiotr Jasiukajtis fxor %f16,%f36,%f16 648*25c28e83SPiotr Jasiukajtis 649*25c28e83SPiotr Jasiukajtis fxor %f20,%f30,%f20 650*25c28e83SPiotr Jasiukajtis 651*25c28e83SPiotr Jasiukajtis fxor %f22,%f32,%f22 652*25c28e83SPiotr Jasiukajtis 653*25c28e83SPiotr Jasiukajtis fxor %f24,%f34,%f24 654*25c28e83SPiotr Jasiukajtis 655*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 656*25c28e83SPiotr Jasiukajtis bg,pt %icc,.start 657*25c28e83SPiotr Jasiukajtis! delay slot 658*25c28e83SPiotr Jasiukajtis fxor %f26,%f36,%f26 659*25c28e83SPiotr Jasiukajtis 660*25c28e83SPiotr Jasiukajtis ba,pt %icc,.end 661*25c28e83SPiotr Jasiukajtis! delay slot 662*25c28e83SPiotr Jasiukajtis nop 663*25c28e83SPiotr Jasiukajtis 664*25c28e83SPiotr Jasiukajtis 665*25c28e83SPiotr Jasiukajtis .align 32 666*25c28e83SPiotr Jasiukajtis.end: 667*25c28e83SPiotr Jasiukajtis fdtos %f10,%f10 668*25c28e83SPiotr Jasiukajtis st %f10,[%l0] 669*25c28e83SPiotr Jasiukajtis fdtos %f20,%f20 670*25c28e83SPiotr Jasiukajtis st %f20,[%l4] 671*25c28e83SPiotr Jasiukajtis fdtos %f12,%f12 672*25c28e83SPiotr Jasiukajtis st %f12,[%l1] 673*25c28e83SPiotr Jasiukajtis fdtos %f22,%f22 674*25c28e83SPiotr Jasiukajtis st %f22,[%l5] 675*25c28e83SPiotr Jasiukajtis fdtos %f14,%f14 676*25c28e83SPiotr Jasiukajtis st %f14,[%l2] 677*25c28e83SPiotr Jasiukajtis fdtos %f24,%f24 678*25c28e83SPiotr Jasiukajtis st %f24,[%l6] 679*25c28e83SPiotr Jasiukajtis fdtos %f16,%f16 680*25c28e83SPiotr Jasiukajtis st %f16,[%l3] 681*25c28e83SPiotr Jasiukajtis fdtos %f26,%f26 682*25c28e83SPiotr Jasiukajtis tst %i5 ! check for huge arguments remaining 683*25c28e83SPiotr Jasiukajtis be,pt %icc,.exit 684*25c28e83SPiotr Jasiukajtis! delay slot 685*25c28e83SPiotr Jasiukajtis st %f26,[%l7] 686*25c28e83SPiotr Jasiukajtis#ifdef __sparcv9 687*25c28e83SPiotr Jasiukajtis ldx [%fp+xsave],%o1 688*25c28e83SPiotr Jasiukajtis ldx [%fp+ssave],%o3 689*25c28e83SPiotr Jasiukajtis ldx [%fp+csave],%o5 690*25c28e83SPiotr Jasiukajtis ldx [%fp+STACK_BIAS+0xb0],%i5 691*25c28e83SPiotr Jasiukajtis stx %i5,[%sp+STACK_BIAS+0xb0] 692*25c28e83SPiotr Jasiukajtis#else 693*25c28e83SPiotr Jasiukajtis ld [%fp+xsave],%o1 694*25c28e83SPiotr Jasiukajtis ld [%fp+ssave],%o3 695*25c28e83SPiotr Jasiukajtis ld [%fp+csave],%o5 696*25c28e83SPiotr Jasiukajtis ld [%fp+0x5c],%i5 697*25c28e83SPiotr Jasiukajtis st %i5,[%sp+0x5c] 698*25c28e83SPiotr Jasiukajtis#endif 699*25c28e83SPiotr Jasiukajtis ld [%fp+nsave],%o0 700*25c28e83SPiotr Jasiukajtis ld [%fp+sxsave],%o2 701*25c28e83SPiotr Jasiukajtis ld [%fp+sssave],%o4 702*25c28e83SPiotr Jasiukajtis sra %o2,0,%o2 ! sign-extend for V9 703*25c28e83SPiotr Jasiukajtis call __vlibm_vsincos_bigf 704*25c28e83SPiotr Jasiukajtis sra %o4,0,%o4 ! delay slot 705*25c28e83SPiotr Jasiukajtis 706*25c28e83SPiotr Jasiukajtis.exit: 707*25c28e83SPiotr Jasiukajtis ret 708*25c28e83SPiotr Jasiukajtis restore 709*25c28e83SPiotr Jasiukajtis 710*25c28e83SPiotr Jasiukajtis 711*25c28e83SPiotr Jasiukajtis .align 32 712*25c28e83SPiotr Jasiukajtis.last1: 713*25c28e83SPiotr Jasiukajtis fdtos %f12,%f12 714*25c28e83SPiotr Jasiukajtis st %f12,[%l1] 715*25c28e83SPiotr Jasiukajtis nop 716*25c28e83SPiotr Jasiukajtis fdtos %f22,%f22 717*25c28e83SPiotr Jasiukajtis st %f22,[%l5] 718*25c28e83SPiotr Jasiukajtis fzeros %f2 719*25c28e83SPiotr Jasiukajtis add %fp,junk,%l5 720*25c28e83SPiotr Jasiukajtis add %fp,junk,%l1 721*25c28e83SPiotr Jasiukajtis.last2: 722*25c28e83SPiotr Jasiukajtis fdtos %f14,%f14 723*25c28e83SPiotr Jasiukajtis st %f14,[%l2] 724*25c28e83SPiotr Jasiukajtis nop 725*25c28e83SPiotr Jasiukajtis fdtos %f24,%f24 726*25c28e83SPiotr Jasiukajtis st %f24,[%l6] 727*25c28e83SPiotr Jasiukajtis fzeros %f4 728*25c28e83SPiotr Jasiukajtis add %fp,junk,%l2 729*25c28e83SPiotr Jasiukajtis add %fp,junk,%l6 730*25c28e83SPiotr Jasiukajtis.last3: 731*25c28e83SPiotr Jasiukajtis fdtos %f16,%f16 732*25c28e83SPiotr Jasiukajtis st %f16,[%l3] 733*25c28e83SPiotr Jasiukajtis fdtos %f26,%f26 734*25c28e83SPiotr Jasiukajtis st %f26,[%l7] 735*25c28e83SPiotr Jasiukajtis fzeros %f6 736*25c28e83SPiotr Jasiukajtis add %fp,junk,%l3 737*25c28e83SPiotr Jasiukajtis ba,pt %icc,.cont 738*25c28e83SPiotr Jasiukajtis! delay slot 739*25c28e83SPiotr Jasiukajtis add %fp,junk,%l7 740*25c28e83SPiotr Jasiukajtis 741*25c28e83SPiotr Jasiukajtis 742*25c28e83SPiotr Jasiukajtis .align 16 743*25c28e83SPiotr Jasiukajtis.range0: 744*25c28e83SPiotr Jasiukajtis fcmpgt32 %f38,%f30,%o0 745*25c28e83SPiotr Jasiukajtis andcc %o0,2,%g0 746*25c28e83SPiotr Jasiukajtis bnz,a,pt %icc,1f ! branch if finite 747*25c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 748*25c28e83SPiotr Jasiukajtis mov 1,%i5 ! set biguns 749*25c28e83SPiotr Jasiukajtis fzeros %f1 750*25c28e83SPiotr Jasiukajtis fmuls %f0,%f1,%f0 751*25c28e83SPiotr Jasiukajtis st %f0,[%l0] 752*25c28e83SPiotr Jasiukajtis st %f0,[%l4] 753*25c28e83SPiotr Jasiukajtis1: 754*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 755*25c28e83SPiotr Jasiukajtis ble,pn %icc,1f 756*25c28e83SPiotr Jasiukajtis! delay slot 757*25c28e83SPiotr Jasiukajtis nop 758*25c28e83SPiotr Jasiukajtis ld [%i1],%f0 759*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 760*25c28e83SPiotr Jasiukajtis mov %i3,%l0 761*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 762*25c28e83SPiotr Jasiukajtis fabsd %f0,%f30 763*25c28e83SPiotr Jasiukajtis mov %o4,%l4 764*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 765*25c28e83SPiotr Jasiukajtis fcmple32 %f30,%f18,%o0 766*25c28e83SPiotr Jasiukajtis andcc %o0,2,%g0 767*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range0 768*25c28e83SPiotr Jasiukajtis! delay slot 769*25c28e83SPiotr Jasiukajtis nop 770*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check1 771*25c28e83SPiotr Jasiukajtis! delay slot 772*25c28e83SPiotr Jasiukajtis fcmple32 %f30,%f8,%o0 773*25c28e83SPiotr Jasiukajtis1: 774*25c28e83SPiotr Jasiukajtis fzero %f0 ! set up dummy argument 775*25c28e83SPiotr Jasiukajtis add %fp,junk,%l0 776*25c28e83SPiotr Jasiukajtis add %fp,junk,%l4 777*25c28e83SPiotr Jasiukajtis mov 2,%o0 778*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check1 779*25c28e83SPiotr Jasiukajtis! delay slot 780*25c28e83SPiotr Jasiukajtis fzero %f30 781*25c28e83SPiotr Jasiukajtis 782*25c28e83SPiotr Jasiukajtis 783*25c28e83SPiotr Jasiukajtis .align 16 784*25c28e83SPiotr Jasiukajtis.range1: 785*25c28e83SPiotr Jasiukajtis fcmpgt32 %f38,%f32,%o1 786*25c28e83SPiotr Jasiukajtis andcc %o1,2,%g0 787*25c28e83SPiotr Jasiukajtis bnz,a,pt %icc,1f ! branch if finite 788*25c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 789*25c28e83SPiotr Jasiukajtis mov 1,%i5 ! set biguns 790*25c28e83SPiotr Jasiukajtis fzeros %f3 791*25c28e83SPiotr Jasiukajtis fmuls %f2,%f3,%f2 792*25c28e83SPiotr Jasiukajtis st %f2,[%l1] 793*25c28e83SPiotr Jasiukajtis st %f2,[%l5] 794*25c28e83SPiotr Jasiukajtis1: 795*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 796*25c28e83SPiotr Jasiukajtis ble,pn %icc,1f 797*25c28e83SPiotr Jasiukajtis! delay slot 798*25c28e83SPiotr Jasiukajtis nop 799*25c28e83SPiotr Jasiukajtis ld [%i1],%f2 800*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 801*25c28e83SPiotr Jasiukajtis mov %i3,%l1 802*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 803*25c28e83SPiotr Jasiukajtis fabsd %f2,%f32 804*25c28e83SPiotr Jasiukajtis mov %o4,%l5 805*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 806*25c28e83SPiotr Jasiukajtis fcmple32 %f32,%f18,%o1 807*25c28e83SPiotr Jasiukajtis andcc %o1,2,%g0 808*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range1 809*25c28e83SPiotr Jasiukajtis! delay slot 810*25c28e83SPiotr Jasiukajtis nop 811*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check2 812*25c28e83SPiotr Jasiukajtis! delay slot 813*25c28e83SPiotr Jasiukajtis fcmple32 %f32,%f8,%o1 814*25c28e83SPiotr Jasiukajtis1: 815*25c28e83SPiotr Jasiukajtis fzero %f2 ! set up dummy argument 816*25c28e83SPiotr Jasiukajtis add %fp,junk,%l1 817*25c28e83SPiotr Jasiukajtis add %fp,junk,%l5 818*25c28e83SPiotr Jasiukajtis mov 2,%o1 819*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check2 820*25c28e83SPiotr Jasiukajtis! delay slot 821*25c28e83SPiotr Jasiukajtis fzero %f32 822*25c28e83SPiotr Jasiukajtis 823*25c28e83SPiotr Jasiukajtis 824*25c28e83SPiotr Jasiukajtis .align 16 825*25c28e83SPiotr Jasiukajtis.range2: 826*25c28e83SPiotr Jasiukajtis fcmpgt32 %f38,%f34,%o2 827*25c28e83SPiotr Jasiukajtis andcc %o2,2,%g0 828*25c28e83SPiotr Jasiukajtis bnz,a,pt %icc,1f ! branch if finite 829*25c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 830*25c28e83SPiotr Jasiukajtis mov 1,%i5 ! set biguns 831*25c28e83SPiotr Jasiukajtis fzeros %f5 832*25c28e83SPiotr Jasiukajtis fmuls %f4,%f5,%f4 833*25c28e83SPiotr Jasiukajtis st %f4,[%l2] 834*25c28e83SPiotr Jasiukajtis st %f4,[%l6] 835*25c28e83SPiotr Jasiukajtis1: 836*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 837*25c28e83SPiotr Jasiukajtis ble,pn %icc,1f 838*25c28e83SPiotr Jasiukajtis! delay slot 839*25c28e83SPiotr Jasiukajtis nop 840*25c28e83SPiotr Jasiukajtis ld [%i1],%f4 841*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 842*25c28e83SPiotr Jasiukajtis mov %i3,%l2 843*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 844*25c28e83SPiotr Jasiukajtis fabsd %f4,%f34 845*25c28e83SPiotr Jasiukajtis mov %o4,%l6 846*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 847*25c28e83SPiotr Jasiukajtis fcmple32 %f34,%f18,%o2 848*25c28e83SPiotr Jasiukajtis andcc %o2,2,%g0 849*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range2 850*25c28e83SPiotr Jasiukajtis! delay slot 851*25c28e83SPiotr Jasiukajtis nop 852*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check3 853*25c28e83SPiotr Jasiukajtis! delay slot 854*25c28e83SPiotr Jasiukajtis fcmple32 %f34,%f8,%o2 855*25c28e83SPiotr Jasiukajtis1: 856*25c28e83SPiotr Jasiukajtis fzero %f4 ! set up dummy argument 857*25c28e83SPiotr Jasiukajtis add %fp,junk,%l2 858*25c28e83SPiotr Jasiukajtis add %fp,junk,%l6 859*25c28e83SPiotr Jasiukajtis mov 2,%o2 860*25c28e83SPiotr Jasiukajtis ba,pt %icc,.check3 861*25c28e83SPiotr Jasiukajtis! delay slot 862*25c28e83SPiotr Jasiukajtis fzero %f34 863*25c28e83SPiotr Jasiukajtis 864*25c28e83SPiotr Jasiukajtis 865*25c28e83SPiotr Jasiukajtis .align 16 866*25c28e83SPiotr Jasiukajtis.range3: 867*25c28e83SPiotr Jasiukajtis fcmpgt32 %f38,%f36,%o3 868*25c28e83SPiotr Jasiukajtis andcc %o3,2,%g0 869*25c28e83SPiotr Jasiukajtis bnz,a,pt %icc,1f ! branch if finite 870*25c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 871*25c28e83SPiotr Jasiukajtis mov 1,%i5 ! set biguns 872*25c28e83SPiotr Jasiukajtis fzeros %f7 873*25c28e83SPiotr Jasiukajtis fmuls %f6,%f7,%f6 874*25c28e83SPiotr Jasiukajtis st %f6,[%l3] 875*25c28e83SPiotr Jasiukajtis st %f6,[%l7] 876*25c28e83SPiotr Jasiukajtis1: 877*25c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 878*25c28e83SPiotr Jasiukajtis ble,pn %icc,1f 879*25c28e83SPiotr Jasiukajtis! delay slot 880*25c28e83SPiotr Jasiukajtis nop 881*25c28e83SPiotr Jasiukajtis ld [%i1],%f6 882*25c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 883*25c28e83SPiotr Jasiukajtis mov %i3,%l3 884*25c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 885*25c28e83SPiotr Jasiukajtis fabsd %f6,%f36 886*25c28e83SPiotr Jasiukajtis mov %o4,%l7 887*25c28e83SPiotr Jasiukajtis add %o4,%o5,%o4 888*25c28e83SPiotr Jasiukajtis fcmple32 %f36,%f18,%o3 889*25c28e83SPiotr Jasiukajtis andcc %o3,2,%g0 890*25c28e83SPiotr Jasiukajtis bz,pn %icc,.range3 891*25c28e83SPiotr Jasiukajtis! delay slot 892*25c28e83SPiotr Jasiukajtis nop 893*25c28e83SPiotr Jasiukajtis ba,pt %icc,.checkprimary 894*25c28e83SPiotr Jasiukajtis! delay slot 895*25c28e83SPiotr Jasiukajtis fcmple32 %f36,%f8,%o3 896*25c28e83SPiotr Jasiukajtis1: 897*25c28e83SPiotr Jasiukajtis fzero %f6 ! set up dummy argument 898*25c28e83SPiotr Jasiukajtis add %fp,junk,%l3 899*25c28e83SPiotr Jasiukajtis add %fp,junk,%l7 900*25c28e83SPiotr Jasiukajtis mov 2,%o3 901*25c28e83SPiotr Jasiukajtis ba,pt %icc,.checkprimary 902*25c28e83SPiotr Jasiukajtis! delay slot 903*25c28e83SPiotr Jasiukajtis fzero %f36 904*25c28e83SPiotr Jasiukajtis 905*25c28e83SPiotr Jasiukajtis SET_SIZE(__vsincosf) 906*25c28e83SPiotr Jasiukajtis 907