125c28e83SPiotr Jasiukajtis/* 225c28e83SPiotr Jasiukajtis * CDDL HEADER START 325c28e83SPiotr Jasiukajtis * 425c28e83SPiotr Jasiukajtis * The contents of this file are subject to the terms of the 525c28e83SPiotr Jasiukajtis * Common Development and Distribution License (the "License"). 625c28e83SPiotr Jasiukajtis * You may not use this file except in compliance with the License. 725c28e83SPiotr Jasiukajtis * 825c28e83SPiotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 925c28e83SPiotr Jasiukajtis * or http://www.opensolaris.org/os/licensing. 1025c28e83SPiotr Jasiukajtis * See the License for the specific language governing permissions 1125c28e83SPiotr Jasiukajtis * and limitations under the License. 1225c28e83SPiotr Jasiukajtis * 1325c28e83SPiotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each 1425c28e83SPiotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1525c28e83SPiotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the 1625c28e83SPiotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying 1725c28e83SPiotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner] 1825c28e83SPiotr Jasiukajtis * 1925c28e83SPiotr Jasiukajtis * CDDL HEADER END 2025c28e83SPiotr Jasiukajtis */ 2125c28e83SPiotr Jasiukajtis/* 2225c28e83SPiotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 2325c28e83SPiotr Jasiukajtis */ 2425c28e83SPiotr Jasiukajtis/* 2525c28e83SPiotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 2625c28e83SPiotr Jasiukajtis * Use is subject to license terms. 2725c28e83SPiotr Jasiukajtis */ 2825c28e83SPiotr Jasiukajtis 2925c28e83SPiotr Jasiukajtis .file "__vsincos.S" 3025c28e83SPiotr Jasiukajtis 3125c28e83SPiotr Jasiukajtis#include "libm.h" 3225c28e83SPiotr Jasiukajtis 3325c28e83SPiotr Jasiukajtis RO_DATA 3425c28e83SPiotr Jasiukajtis .align 64 3525c28e83SPiotr Jasiukajtisconstants: 3625c28e83SPiotr Jasiukajtis .word 0x42c80000,0x00000000 ! 3 * 2^44 3725c28e83SPiotr Jasiukajtis .word 0x43380000,0x00000000 ! 3 * 2^51 3825c28e83SPiotr Jasiukajtis .word 0x3fe45f30,0x6dc9c883 ! invpio2 3925c28e83SPiotr Jasiukajtis .word 0x3ff921fb,0x54442c00 ! pio2_1 4025c28e83SPiotr Jasiukajtis .word 0x3d318469,0x898cc400 ! pio2_2 4125c28e83SPiotr Jasiukajtis .word 0x3a71701b,0x839a2520 ! pio2_3 4225c28e83SPiotr Jasiukajtis .word 0xbfc55555,0x55555533 ! pp1 4325c28e83SPiotr Jasiukajtis .word 0x3f811111,0x10e7d53b ! pp2 4425c28e83SPiotr Jasiukajtis .word 0xbf2a0167,0xe6b3cf9b ! pp3 4525c28e83SPiotr Jasiukajtis .word 0xbfdfffff,0xffffff65 ! qq1 4625c28e83SPiotr Jasiukajtis .word 0x3fa55555,0x54f88ed0 ! qq2 4725c28e83SPiotr Jasiukajtis .word 0xbf56c12c,0xdd185f60 ! qq3 4825c28e83SPiotr Jasiukajtis 4925c28e83SPiotr Jasiukajtis! local storage indices 5025c28e83SPiotr Jasiukajtis 5125c28e83SPiotr Jasiukajtis#define xsave STACK_BIAS-0x8 5225c28e83SPiotr Jasiukajtis#define ssave STACK_BIAS-0x10 5325c28e83SPiotr Jasiukajtis#define csave STACK_BIAS-0x18 5425c28e83SPiotr Jasiukajtis#define nsave STACK_BIAS-0x1c 5525c28e83SPiotr Jasiukajtis#define sxsave STACK_BIAS-0x20 5625c28e83SPiotr Jasiukajtis#define sssave STACK_BIAS-0x24 5725c28e83SPiotr Jasiukajtis#define biguns STACK_BIAS-0x28 5825c28e83SPiotr Jasiukajtis#define junk STACK_BIAS-0x30 5925c28e83SPiotr Jasiukajtis#define nk2 STACK_BIAS-0x38 6025c28e83SPiotr Jasiukajtis#define nk1 STACK_BIAS-0x3c 6125c28e83SPiotr Jasiukajtis#define nk0 STACK_BIAS-0x40 6225c28e83SPiotr Jasiukajtis! sizeof temp storage - must be a multiple of 16 for V9 6325c28e83SPiotr Jasiukajtis#define tmps 0x40 6425c28e83SPiotr Jasiukajtis 6525c28e83SPiotr Jasiukajtis! register use 6625c28e83SPiotr Jasiukajtis 6725c28e83SPiotr Jasiukajtis! i0 n 6825c28e83SPiotr Jasiukajtis! i1 x 6925c28e83SPiotr Jasiukajtis! i2 stridex 7025c28e83SPiotr Jasiukajtis! i3 s 7125c28e83SPiotr Jasiukajtis! i4 strides 7225c28e83SPiotr Jasiukajtis! i5 0x80000000,n0 7325c28e83SPiotr Jasiukajtis 7425c28e83SPiotr Jasiukajtis! l0 hx0,k0 7525c28e83SPiotr Jasiukajtis! l1 hx1,k1 7625c28e83SPiotr Jasiukajtis! l2 hx2,k2 7725c28e83SPiotr Jasiukajtis! l3 c 7825c28e83SPiotr Jasiukajtis! l4 pc0 7925c28e83SPiotr Jasiukajtis! l5 pc1 8025c28e83SPiotr Jasiukajtis! l6 pc2 8125c28e83SPiotr Jasiukajtis! l7 stridec 8225c28e83SPiotr Jasiukajtis 8325c28e83SPiotr Jasiukajtis! the following are 64-bit registers in both V8+ and V9 8425c28e83SPiotr Jasiukajtis 8525c28e83SPiotr Jasiukajtis! g1 __vlibm_TBL_sincos2 8625c28e83SPiotr Jasiukajtis! g5 scratch,n1 8725c28e83SPiotr Jasiukajtis 8825c28e83SPiotr Jasiukajtis! o0 ps0 8925c28e83SPiotr Jasiukajtis! o1 ps1 9025c28e83SPiotr Jasiukajtis! o2 ps2 9125c28e83SPiotr Jasiukajtis! o3 0x3fe921fb 9225c28e83SPiotr Jasiukajtis! o4 0x3e400000 9325c28e83SPiotr Jasiukajtis! o5 0x4099251e 9425c28e83SPiotr Jasiukajtis! o7 scratch,n2 9525c28e83SPiotr Jasiukajtis 9625c28e83SPiotr Jasiukajtis! f0 x0,z0 9725c28e83SPiotr Jasiukajtis! f2 abs(x0) 98*55fea89dSDan Cross! f4 99*55fea89dSDan Cross! f6 100*55fea89dSDan Cross! f8 10125c28e83SPiotr Jasiukajtis! f10 x1,z1 10225c28e83SPiotr Jasiukajtis! f12 abs(x1) 103*55fea89dSDan Cross! f14 104*55fea89dSDan Cross! f16 105*55fea89dSDan Cross! f18 10625c28e83SPiotr Jasiukajtis! f20 x2,z2 10725c28e83SPiotr Jasiukajtis! f22 abs(x2) 108*55fea89dSDan Cross! f24 109*55fea89dSDan Cross! f26 110*55fea89dSDan Cross! f28 111*55fea89dSDan Cross! f30 112*55fea89dSDan Cross! f32 113*55fea89dSDan Cross! f34 11425c28e83SPiotr Jasiukajtis! f36 11525c28e83SPiotr Jasiukajtis! f38 11625c28e83SPiotr Jasiukajtis 11725c28e83SPiotr Jasiukajtis#define c3two44 %f40 11825c28e83SPiotr Jasiukajtis#define c3two51 %f42 11925c28e83SPiotr Jasiukajtis#define invpio2 %f44 12025c28e83SPiotr Jasiukajtis#define pio2_1 %f46 12125c28e83SPiotr Jasiukajtis#define pio2_2 %f48 12225c28e83SPiotr Jasiukajtis#define pio2_3 %f50 12325c28e83SPiotr Jasiukajtis#define pp1 %f52 12425c28e83SPiotr Jasiukajtis#define pp2 %f54 12525c28e83SPiotr Jasiukajtis#define pp3 %f56 12625c28e83SPiotr Jasiukajtis#define qq1 %f58 12725c28e83SPiotr Jasiukajtis#define qq2 %f60 12825c28e83SPiotr Jasiukajtis#define qq3 %f62 12925c28e83SPiotr Jasiukajtis 13025c28e83SPiotr Jasiukajtis ENTRY(__vsincos) 13125c28e83SPiotr Jasiukajtis save %sp,-SA(MINFRAME)-tmps,%sp 13225c28e83SPiotr Jasiukajtis PIC_SETUP(l7) 13325c28e83SPiotr Jasiukajtis PIC_SET(l7,constants,o0) 13425c28e83SPiotr Jasiukajtis PIC_SET(l7,__vlibm_TBL_sincos2,o1) 13525c28e83SPiotr Jasiukajtis mov %o1,%g1 13625c28e83SPiotr Jasiukajtis wr %g0,0x82,%asi ! set %asi for non-faulting loads 13725c28e83SPiotr Jasiukajtis#ifdef __sparcv9 13825c28e83SPiotr Jasiukajtis stx %i1,[%fp+xsave] ! save arguments 13925c28e83SPiotr Jasiukajtis stx %i3,[%fp+ssave] 14025c28e83SPiotr Jasiukajtis stx %i5,[%fp+csave] 14125c28e83SPiotr Jasiukajtis ldx [%fp+STACK_BIAS+0xb0],%l7 14225c28e83SPiotr Jasiukajtis#else 14325c28e83SPiotr Jasiukajtis st %i1,[%fp+xsave] ! save arguments 14425c28e83SPiotr Jasiukajtis st %i3,[%fp+ssave] 14525c28e83SPiotr Jasiukajtis st %i5,[%fp+csave] 14625c28e83SPiotr Jasiukajtis ld [%fp+0x5c],%l7 14725c28e83SPiotr Jasiukajtis#endif 14825c28e83SPiotr Jasiukajtis st %i0,[%fp+nsave] 14925c28e83SPiotr Jasiukajtis st %i2,[%fp+sxsave] 15025c28e83SPiotr Jasiukajtis st %i4,[%fp+sssave] 15125c28e83SPiotr Jasiukajtis mov %i5,%l3 15225c28e83SPiotr Jasiukajtis st %g0,[%fp+biguns] ! biguns = 0 15325c28e83SPiotr Jasiukajtis ldd [%o0+0x00],c3two44 ! load/set up constants 15425c28e83SPiotr Jasiukajtis ldd [%o0+0x08],c3two51 15525c28e83SPiotr Jasiukajtis ldd [%o0+0x10],invpio2 15625c28e83SPiotr Jasiukajtis ldd [%o0+0x18],pio2_1 15725c28e83SPiotr Jasiukajtis ldd [%o0+0x20],pio2_2 15825c28e83SPiotr Jasiukajtis ldd [%o0+0x28],pio2_3 15925c28e83SPiotr Jasiukajtis ldd [%o0+0x30],pp1 16025c28e83SPiotr Jasiukajtis ldd [%o0+0x38],pp2 16125c28e83SPiotr Jasiukajtis ldd [%o0+0x40],pp3 16225c28e83SPiotr Jasiukajtis ldd [%o0+0x48],qq1 16325c28e83SPiotr Jasiukajtis ldd [%o0+0x50],qq2 16425c28e83SPiotr Jasiukajtis ldd [%o0+0x58],qq3 16525c28e83SPiotr Jasiukajtis sethi %hi(0x80000000),%i5 16625c28e83SPiotr Jasiukajtis sethi %hi(0x3e400000),%o4 16725c28e83SPiotr Jasiukajtis sethi %hi(0x3fe921fb),%o3 16825c28e83SPiotr Jasiukajtis or %o3,%lo(0x3fe921fb),%o3 16925c28e83SPiotr Jasiukajtis sethi %hi(0x4099251e),%o5 17025c28e83SPiotr Jasiukajtis or %o5,%lo(0x4099251e),%o5 17125c28e83SPiotr Jasiukajtis sll %i2,3,%i2 ! scale strides 17225c28e83SPiotr Jasiukajtis sll %i4,3,%i4 17325c28e83SPiotr Jasiukajtis sll %l7,3,%l7 17425c28e83SPiotr Jasiukajtis add %fp,junk,%o0 ! loop prologue 17525c28e83SPiotr Jasiukajtis add %fp,junk,%o1 17625c28e83SPiotr Jasiukajtis add %fp,junk,%o2 17725c28e83SPiotr Jasiukajtis ld [%i1],%l0 ! *x 17825c28e83SPiotr Jasiukajtis ld [%i1],%f0 17925c28e83SPiotr Jasiukajtis ld [%i1+4],%f3 18025c28e83SPiotr Jasiukajtis andn %l0,%i5,%l0 ! mask off sign 18125c28e83SPiotr Jasiukajtis ba .loop0 18225c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 18325c28e83SPiotr Jasiukajtis 18425c28e83SPiotr Jasiukajtis! 16-byte aligned 18525c28e83SPiotr Jasiukajtis .align 16 18625c28e83SPiotr Jasiukajtis.loop0: 18725c28e83SPiotr Jasiukajtis lda [%i1]%asi,%l1 ! preload next argument 18825c28e83SPiotr Jasiukajtis sub %l0,%o4,%g5 18925c28e83SPiotr Jasiukajtis sub %o5,%l0,%o7 19025c28e83SPiotr Jasiukajtis fabss %f0,%f2 19125c28e83SPiotr Jasiukajtis 19225c28e83SPiotr Jasiukajtis lda [%i1]%asi,%f10 19325c28e83SPiotr Jasiukajtis orcc %o7,%g5,%g0 19425c28e83SPiotr Jasiukajtis mov %i3,%o0 ! ps0 = s 19525c28e83SPiotr Jasiukajtis bl,pn %icc,.range0 ! hx < 0x3e400000 or hx > 0x4099251e 19625c28e83SPiotr Jasiukajtis 19725c28e83SPiotr Jasiukajtis! delay slot 19825c28e83SPiotr Jasiukajtis lda [%i1+4]%asi,%f13 19925c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 20025c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 20125c28e83SPiotr Jasiukajtis 20225c28e83SPiotr Jasiukajtis mov %l3,%l4 ! pc0 = c 20325c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 20425c28e83SPiotr Jasiukajtis ble,pn %icc,.last1 20525c28e83SPiotr Jasiukajtis 20625c28e83SPiotr Jasiukajtis! delay slot 20725c28e83SPiotr Jasiukajtis andn %l1,%i5,%l1 20825c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 20925c28e83SPiotr Jasiukajtis faddd %f2,c3two44,%f4 21025c28e83SPiotr Jasiukajtis st %f17,[%o1+4] 21125c28e83SPiotr Jasiukajtis 21225c28e83SPiotr Jasiukajtis.loop1: 21325c28e83SPiotr Jasiukajtis lda [%i1]%asi,%l2 ! preload next argument 21425c28e83SPiotr Jasiukajtis sub %l1,%o4,%g5 21525c28e83SPiotr Jasiukajtis sub %o5,%l1,%o7 21625c28e83SPiotr Jasiukajtis fabss %f10,%f12 21725c28e83SPiotr Jasiukajtis 21825c28e83SPiotr Jasiukajtis lda [%i1]%asi,%f20 21925c28e83SPiotr Jasiukajtis orcc %o7,%g5,%g0 22025c28e83SPiotr Jasiukajtis mov %i3,%o1 ! ps1 = s 22125c28e83SPiotr Jasiukajtis bl,pn %icc,.range1 ! hx < 0x3e400000 or hx > 0x4099251e 22225c28e83SPiotr Jasiukajtis 22325c28e83SPiotr Jasiukajtis! delay slot 22425c28e83SPiotr Jasiukajtis lda [%i1+4]%asi,%f23 22525c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 22625c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 22725c28e83SPiotr Jasiukajtis 22825c28e83SPiotr Jasiukajtis mov %l3,%l5 ! pc1 = c 22925c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 23025c28e83SPiotr Jasiukajtis ble,pn %icc,.last2 23125c28e83SPiotr Jasiukajtis 23225c28e83SPiotr Jasiukajtis! delay slot 23325c28e83SPiotr Jasiukajtis andn %l2,%i5,%l2 23425c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 23525c28e83SPiotr Jasiukajtis faddd %f12,c3two44,%f14 23625c28e83SPiotr Jasiukajtis st %f27,[%o2+4] 23725c28e83SPiotr Jasiukajtis 23825c28e83SPiotr Jasiukajtis.loop2: 23925c28e83SPiotr Jasiukajtis sub %l2,%o4,%g5 24025c28e83SPiotr Jasiukajtis sub %o5,%l2,%o7 24125c28e83SPiotr Jasiukajtis fabss %f20,%f22 24225c28e83SPiotr Jasiukajtis st %f5,[%fp+nk0] 24325c28e83SPiotr Jasiukajtis 24425c28e83SPiotr Jasiukajtis orcc %o7,%g5,%g0 24525c28e83SPiotr Jasiukajtis mov %i3,%o2 ! ps2 = s 24625c28e83SPiotr Jasiukajtis bl,pn %icc,.range2 ! hx < 0x3e400000 or hx > 0x4099251e 24725c28e83SPiotr Jasiukajtis! delay slot 24825c28e83SPiotr Jasiukajtis st %f15,[%fp+nk1] 24925c28e83SPiotr Jasiukajtis 25025c28e83SPiotr Jasiukajtis mov %l3,%l6 ! pc2 = c 25125c28e83SPiotr Jasiukajtis 25225c28e83SPiotr Jasiukajtis.cont: 25325c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 25425c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 25525c28e83SPiotr Jasiukajtis faddd %f22,c3two44,%f24 25625c28e83SPiotr Jasiukajtis st %f25,[%fp+nk2] 25725c28e83SPiotr Jasiukajtis 25825c28e83SPiotr Jasiukajtis sub %o3,%l0,%l0 25925c28e83SPiotr Jasiukajtis sub %o3,%l1,%l1 26025c28e83SPiotr Jasiukajtis fmovs %f3,%f1 26125c28e83SPiotr Jasiukajtis 26225c28e83SPiotr Jasiukajtis sub %o3,%l2,%l2 26325c28e83SPiotr Jasiukajtis fmovs %f13,%f11 26425c28e83SPiotr Jasiukajtis 26525c28e83SPiotr Jasiukajtis or %l0,%l1,%l0 26625c28e83SPiotr Jasiukajtis orcc %l0,%l2,%g0 26725c28e83SPiotr Jasiukajtis fmovs %f23,%f21 26825c28e83SPiotr Jasiukajtis 26925c28e83SPiotr Jasiukajtis fmuld %f0,invpio2,%f6 ! x * invpio2, for medium range 27025c28e83SPiotr Jasiukajtis 27125c28e83SPiotr Jasiukajtis fmuld %f10,invpio2,%f16 27225c28e83SPiotr Jasiukajtis ld [%fp+nk0],%l0 27325c28e83SPiotr Jasiukajtis 27425c28e83SPiotr Jasiukajtis fmuld %f20,invpio2,%f26 27525c28e83SPiotr Jasiukajtis ld [%fp+nk1],%l1 27625c28e83SPiotr Jasiukajtis 27725c28e83SPiotr Jasiukajtis bl,pn %icc,.medium 27825c28e83SPiotr Jasiukajtis! delay slot 27925c28e83SPiotr Jasiukajtis ld [%fp+nk2],%l2 28025c28e83SPiotr Jasiukajtis 28125c28e83SPiotr Jasiukajtis sll %l0,5,%l0 ! k 28225c28e83SPiotr Jasiukajtis fcmpd %fcc0,%f0,pio2_3 ! x < pio2_3 iff x < 0 28325c28e83SPiotr Jasiukajtis 28425c28e83SPiotr Jasiukajtis sll %l1,5,%l1 28525c28e83SPiotr Jasiukajtis ldd [%l0+%g1],%f4 28625c28e83SPiotr Jasiukajtis fcmpd %fcc1,%f10,pio2_3 28725c28e83SPiotr Jasiukajtis 28825c28e83SPiotr Jasiukajtis sll %l2,5,%l2 28925c28e83SPiotr Jasiukajtis ldd [%l1+%g1],%f14 29025c28e83SPiotr Jasiukajtis fcmpd %fcc2,%f20,pio2_3 29125c28e83SPiotr Jasiukajtis 29225c28e83SPiotr Jasiukajtis ldd [%l2+%g1],%f24 29325c28e83SPiotr Jasiukajtis 29425c28e83SPiotr Jasiukajtis fsubd %f2,%f4,%f2 ! x -= __vlibm_TBL_sincos2[k] 29525c28e83SPiotr Jasiukajtis 29625c28e83SPiotr Jasiukajtis fsubd %f12,%f14,%f12 29725c28e83SPiotr Jasiukajtis 29825c28e83SPiotr Jasiukajtis fsubd %f22,%f24,%f22 29925c28e83SPiotr Jasiukajtis 30025c28e83SPiotr Jasiukajtis fmuld %f2,%f2,%f0 ! z = x * x 30125c28e83SPiotr Jasiukajtis 30225c28e83SPiotr Jasiukajtis fmuld %f12,%f12,%f10 30325c28e83SPiotr Jasiukajtis 30425c28e83SPiotr Jasiukajtis fmuld %f22,%f22,%f20 30525c28e83SPiotr Jasiukajtis 30625c28e83SPiotr Jasiukajtis fmuld %f0,pp3,%f6 30725c28e83SPiotr Jasiukajtis 30825c28e83SPiotr Jasiukajtis fmuld %f10,pp3,%f16 30925c28e83SPiotr Jasiukajtis 31025c28e83SPiotr Jasiukajtis fmuld %f20,pp3,%f26 31125c28e83SPiotr Jasiukajtis 31225c28e83SPiotr Jasiukajtis faddd %f6,pp2,%f6 31325c28e83SPiotr Jasiukajtis fmuld %f0,qq3,%f4 31425c28e83SPiotr Jasiukajtis 31525c28e83SPiotr Jasiukajtis faddd %f16,pp2,%f16 31625c28e83SPiotr Jasiukajtis fmuld %f10,qq3,%f14 31725c28e83SPiotr Jasiukajtis 31825c28e83SPiotr Jasiukajtis faddd %f26,pp2,%f26 31925c28e83SPiotr Jasiukajtis fmuld %f20,qq3,%f24 32025c28e83SPiotr Jasiukajtis 32125c28e83SPiotr Jasiukajtis fmuld %f0,%f6,%f6 32225c28e83SPiotr Jasiukajtis faddd %f4,qq2,%f4 32325c28e83SPiotr Jasiukajtis 32425c28e83SPiotr Jasiukajtis fmuld %f10,%f16,%f16 32525c28e83SPiotr Jasiukajtis faddd %f14,qq2,%f14 32625c28e83SPiotr Jasiukajtis 32725c28e83SPiotr Jasiukajtis fmuld %f20,%f26,%f26 32825c28e83SPiotr Jasiukajtis faddd %f24,qq2,%f24 32925c28e83SPiotr Jasiukajtis 33025c28e83SPiotr Jasiukajtis faddd %f6,pp1,%f6 33125c28e83SPiotr Jasiukajtis fmuld %f0,%f4,%f4 33225c28e83SPiotr Jasiukajtis add %l0,%g1,%l0 33325c28e83SPiotr Jasiukajtis 33425c28e83SPiotr Jasiukajtis faddd %f16,pp1,%f16 33525c28e83SPiotr Jasiukajtis fmuld %f10,%f14,%f14 33625c28e83SPiotr Jasiukajtis add %l1,%g1,%l1 33725c28e83SPiotr Jasiukajtis 33825c28e83SPiotr Jasiukajtis faddd %f26,pp1,%f26 33925c28e83SPiotr Jasiukajtis fmuld %f20,%f24,%f24 34025c28e83SPiotr Jasiukajtis add %l2,%g1,%l2 34125c28e83SPiotr Jasiukajtis 34225c28e83SPiotr Jasiukajtis fmuld %f0,%f6,%f6 34325c28e83SPiotr Jasiukajtis faddd %f4,qq1,%f4 34425c28e83SPiotr Jasiukajtis 34525c28e83SPiotr Jasiukajtis fmuld %f10,%f16,%f16 34625c28e83SPiotr Jasiukajtis faddd %f14,qq1,%f14 34725c28e83SPiotr Jasiukajtis 34825c28e83SPiotr Jasiukajtis fmuld %f20,%f26,%f26 34925c28e83SPiotr Jasiukajtis faddd %f24,qq1,%f24 35025c28e83SPiotr Jasiukajtis 35125c28e83SPiotr Jasiukajtis fmuld %f2,%f6,%f6 35225c28e83SPiotr Jasiukajtis ldd [%l0+8],%f8 35325c28e83SPiotr Jasiukajtis 35425c28e83SPiotr Jasiukajtis fmuld %f12,%f16,%f16 35525c28e83SPiotr Jasiukajtis ldd [%l1+8],%f18 35625c28e83SPiotr Jasiukajtis 35725c28e83SPiotr Jasiukajtis fmuld %f22,%f26,%f26 35825c28e83SPiotr Jasiukajtis ldd [%l2+8],%f28 35925c28e83SPiotr Jasiukajtis 36025c28e83SPiotr Jasiukajtis faddd %f6,%f2,%f6 36125c28e83SPiotr Jasiukajtis fmuld %f0,%f4,%f4 36225c28e83SPiotr Jasiukajtis ldd [%l0+16],%f30 36325c28e83SPiotr Jasiukajtis 36425c28e83SPiotr Jasiukajtis faddd %f16,%f12,%f16 36525c28e83SPiotr Jasiukajtis fmuld %f10,%f14,%f14 36625c28e83SPiotr Jasiukajtis ldd [%l1+16],%f32 36725c28e83SPiotr Jasiukajtis 36825c28e83SPiotr Jasiukajtis faddd %f26,%f22,%f26 36925c28e83SPiotr Jasiukajtis fmuld %f20,%f24,%f24 37025c28e83SPiotr Jasiukajtis ldd [%l2+16],%f34 37125c28e83SPiotr Jasiukajtis 37225c28e83SPiotr Jasiukajtis fmuld %f8,%f6,%f0 ! s * spoly 37325c28e83SPiotr Jasiukajtis 37425c28e83SPiotr Jasiukajtis fmuld %f18,%f16,%f10 37525c28e83SPiotr Jasiukajtis 37625c28e83SPiotr Jasiukajtis fmuld %f28,%f26,%f20 37725c28e83SPiotr Jasiukajtis 37825c28e83SPiotr Jasiukajtis fmuld %f30,%f4,%f2 ! c * cpoly 37925c28e83SPiotr Jasiukajtis 38025c28e83SPiotr Jasiukajtis fmuld %f32,%f14,%f12 38125c28e83SPiotr Jasiukajtis 38225c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f22 38325c28e83SPiotr Jasiukajtis 38425c28e83SPiotr Jasiukajtis fmuld %f30,%f6,%f6 ! c * spoly 38525c28e83SPiotr Jasiukajtis fsubd %f2,%f0,%f2 38625c28e83SPiotr Jasiukajtis 38725c28e83SPiotr Jasiukajtis fmuld %f32,%f16,%f16 38825c28e83SPiotr Jasiukajtis fsubd %f12,%f10,%f12 38925c28e83SPiotr Jasiukajtis 39025c28e83SPiotr Jasiukajtis fmuld %f34,%f26,%f26 39125c28e83SPiotr Jasiukajtis fsubd %f22,%f20,%f22 39225c28e83SPiotr Jasiukajtis 39325c28e83SPiotr Jasiukajtis fmuld %f8,%f4,%f4 ! s * cpoly 39425c28e83SPiotr Jasiukajtis faddd %f2,%f30,%f2 39525c28e83SPiotr Jasiukajtis st %f2,[%l4] 39625c28e83SPiotr Jasiukajtis 39725c28e83SPiotr Jasiukajtis fmuld %f18,%f14,%f14 39825c28e83SPiotr Jasiukajtis faddd %f12,%f32,%f12 39925c28e83SPiotr Jasiukajtis st %f3,[%l4+4] 40025c28e83SPiotr Jasiukajtis 40125c28e83SPiotr Jasiukajtis fmuld %f28,%f24,%f24 40225c28e83SPiotr Jasiukajtis faddd %f22,%f34,%f22 40325c28e83SPiotr Jasiukajtis st %f12,[%l5] 40425c28e83SPiotr Jasiukajtis 40525c28e83SPiotr Jasiukajtis faddd %f6,%f4,%f6 40625c28e83SPiotr Jasiukajtis st %f13,[%l5+4] 40725c28e83SPiotr Jasiukajtis 40825c28e83SPiotr Jasiukajtis faddd %f16,%f14,%f16 40925c28e83SPiotr Jasiukajtis st %f22,[%l6] 41025c28e83SPiotr Jasiukajtis 41125c28e83SPiotr Jasiukajtis faddd %f26,%f24,%f26 41225c28e83SPiotr Jasiukajtis st %f23,[%l6+4] 41325c28e83SPiotr Jasiukajtis 41425c28e83SPiotr Jasiukajtis faddd %f6,%f8,%f6 41525c28e83SPiotr Jasiukajtis 41625c28e83SPiotr Jasiukajtis faddd %f16,%f18,%f16 41725c28e83SPiotr Jasiukajtis 41825c28e83SPiotr Jasiukajtis faddd %f26,%f28,%f26 41925c28e83SPiotr Jasiukajtis 42025c28e83SPiotr Jasiukajtis fnegd %f6,%f4 42125c28e83SPiotr Jasiukajtis lda [%i1]%asi,%l0 ! preload next argument 42225c28e83SPiotr Jasiukajtis 42325c28e83SPiotr Jasiukajtis fnegd %f16,%f14 42425c28e83SPiotr Jasiukajtis lda [%i1]%asi,%f0 42525c28e83SPiotr Jasiukajtis 42625c28e83SPiotr Jasiukajtis fnegd %f26,%f24 42725c28e83SPiotr Jasiukajtis lda [%i1+4]%asi,%f3 42825c28e83SPiotr Jasiukajtis andn %l0,%i5,%l0 42925c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 43025c28e83SPiotr Jasiukajtis 43125c28e83SPiotr Jasiukajtis fmovdl %fcc0,%f4,%f6 ! (hx < -0)? -s : s 43225c28e83SPiotr Jasiukajtis st %f6,[%o0] 43325c28e83SPiotr Jasiukajtis 43425c28e83SPiotr Jasiukajtis fmovdl %fcc1,%f14,%f16 43525c28e83SPiotr Jasiukajtis st %f16,[%o1] 43625c28e83SPiotr Jasiukajtis 43725c28e83SPiotr Jasiukajtis fmovdl %fcc2,%f24,%f26 43825c28e83SPiotr Jasiukajtis st %f26,[%o2] 43925c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 44025c28e83SPiotr Jasiukajtis 44125c28e83SPiotr Jasiukajtis bg,pt %icc,.loop0 44225c28e83SPiotr Jasiukajtis! delay slot 44325c28e83SPiotr Jasiukajtis st %f7,[%o0+4] 44425c28e83SPiotr Jasiukajtis 44525c28e83SPiotr Jasiukajtis ba,pt %icc,.end 44625c28e83SPiotr Jasiukajtis! delay slot 44725c28e83SPiotr Jasiukajtis nop 44825c28e83SPiotr Jasiukajtis 44925c28e83SPiotr Jasiukajtis 45025c28e83SPiotr Jasiukajtis .align 16 45125c28e83SPiotr Jasiukajtis.medium: 45225c28e83SPiotr Jasiukajtis faddd %f6,c3two51,%f4 45325c28e83SPiotr Jasiukajtis st %f5,[%fp+nk0] 45425c28e83SPiotr Jasiukajtis 45525c28e83SPiotr Jasiukajtis faddd %f16,c3two51,%f14 45625c28e83SPiotr Jasiukajtis st %f15,[%fp+nk1] 45725c28e83SPiotr Jasiukajtis 45825c28e83SPiotr Jasiukajtis faddd %f26,c3two51,%f24 45925c28e83SPiotr Jasiukajtis st %f25,[%fp+nk2] 46025c28e83SPiotr Jasiukajtis 46125c28e83SPiotr Jasiukajtis fsubd %f4,c3two51,%f6 46225c28e83SPiotr Jasiukajtis 46325c28e83SPiotr Jasiukajtis fsubd %f14,c3two51,%f16 46425c28e83SPiotr Jasiukajtis 46525c28e83SPiotr Jasiukajtis fsubd %f24,c3two51,%f26 46625c28e83SPiotr Jasiukajtis 46725c28e83SPiotr Jasiukajtis fmuld %f6,pio2_1,%f2 46825c28e83SPiotr Jasiukajtis ld [%fp+nk0],%i5 ! n 46925c28e83SPiotr Jasiukajtis 47025c28e83SPiotr Jasiukajtis fmuld %f16,pio2_1,%f12 47125c28e83SPiotr Jasiukajtis ld [%fp+nk1],%g5 47225c28e83SPiotr Jasiukajtis 47325c28e83SPiotr Jasiukajtis fmuld %f26,pio2_1,%f22 47425c28e83SPiotr Jasiukajtis ld [%fp+nk2],%o7 47525c28e83SPiotr Jasiukajtis 47625c28e83SPiotr Jasiukajtis fsubd %f0,%f2,%f0 47725c28e83SPiotr Jasiukajtis fmuld %f6,pio2_2,%f4 47825c28e83SPiotr Jasiukajtis mov %o0,%o4 ! if (n & 1) swap ps, pc 47925c28e83SPiotr Jasiukajtis andcc %i5,1,%g0 48025c28e83SPiotr Jasiukajtis 48125c28e83SPiotr Jasiukajtis fsubd %f10,%f12,%f10 48225c28e83SPiotr Jasiukajtis fmuld %f16,pio2_2,%f14 48325c28e83SPiotr Jasiukajtis movnz %icc,%l4,%o0 48425c28e83SPiotr Jasiukajtis and %i5,3,%i5 48525c28e83SPiotr Jasiukajtis 48625c28e83SPiotr Jasiukajtis fsubd %f20,%f22,%f20 48725c28e83SPiotr Jasiukajtis fmuld %f26,pio2_2,%f24 48825c28e83SPiotr Jasiukajtis movnz %icc,%o4,%l4 48925c28e83SPiotr Jasiukajtis 49025c28e83SPiotr Jasiukajtis fsubd %f0,%f4,%f30 49125c28e83SPiotr Jasiukajtis mov %o1,%o4 49225c28e83SPiotr Jasiukajtis andcc %g5,1,%g0 49325c28e83SPiotr Jasiukajtis 49425c28e83SPiotr Jasiukajtis fsubd %f10,%f14,%f32 49525c28e83SPiotr Jasiukajtis movnz %icc,%l5,%o1 49625c28e83SPiotr Jasiukajtis and %g5,3,%g5 49725c28e83SPiotr Jasiukajtis 49825c28e83SPiotr Jasiukajtis fsubd %f20,%f24,%f34 49925c28e83SPiotr Jasiukajtis movnz %icc,%o4,%l5 50025c28e83SPiotr Jasiukajtis 50125c28e83SPiotr Jasiukajtis fsubd %f0,%f30,%f0 50225c28e83SPiotr Jasiukajtis fcmple32 %f30,pio2_3,%l0 ! x <= pio2_3 iff x < 0 50325c28e83SPiotr Jasiukajtis mov %o2,%o4 50425c28e83SPiotr Jasiukajtis andcc %o7,1,%g0 50525c28e83SPiotr Jasiukajtis 50625c28e83SPiotr Jasiukajtis fsubd %f10,%f32,%f10 50725c28e83SPiotr Jasiukajtis fcmple32 %f32,pio2_3,%l1 50825c28e83SPiotr Jasiukajtis movnz %icc,%l6,%o2 50925c28e83SPiotr Jasiukajtis and %o7,3,%o7 51025c28e83SPiotr Jasiukajtis 51125c28e83SPiotr Jasiukajtis fsubd %f20,%f34,%f20 51225c28e83SPiotr Jasiukajtis fcmple32 %f34,pio2_3,%l2 51325c28e83SPiotr Jasiukajtis movnz %icc,%o4,%l6 51425c28e83SPiotr Jasiukajtis 51525c28e83SPiotr Jasiukajtis fsubd %f0,%f4,%f0 51625c28e83SPiotr Jasiukajtis fmuld %f6,pio2_3,%f6 51725c28e83SPiotr Jasiukajtis add %i5,1,%o4 ! n = (n >> 1) | (((n + 1) ^ l) & 2) 51825c28e83SPiotr Jasiukajtis srl %i5,1,%i5 51925c28e83SPiotr Jasiukajtis 52025c28e83SPiotr Jasiukajtis fsubd %f10,%f14,%f10 52125c28e83SPiotr Jasiukajtis fmuld %f16,pio2_3,%f16 52225c28e83SPiotr Jasiukajtis xor %o4,%l0,%o4 52325c28e83SPiotr Jasiukajtis 52425c28e83SPiotr Jasiukajtis fsubd %f20,%f24,%f20 52525c28e83SPiotr Jasiukajtis fmuld %f26,pio2_3,%f26 52625c28e83SPiotr Jasiukajtis and %o4,2,%o4 52725c28e83SPiotr Jasiukajtis 52825c28e83SPiotr Jasiukajtis fsubd %f6,%f0,%f6 52925c28e83SPiotr Jasiukajtis or %i5,%o4,%i5 53025c28e83SPiotr Jasiukajtis 53125c28e83SPiotr Jasiukajtis fsubd %f16,%f10,%f16 53225c28e83SPiotr Jasiukajtis add %g5,1,%o4 53325c28e83SPiotr Jasiukajtis srl %g5,1,%g5 53425c28e83SPiotr Jasiukajtis 53525c28e83SPiotr Jasiukajtis fsubd %f26,%f20,%f26 53625c28e83SPiotr Jasiukajtis xor %o4,%l1,%o4 53725c28e83SPiotr Jasiukajtis 53825c28e83SPiotr Jasiukajtis fsubd %f30,%f6,%f0 ! reduced x 53925c28e83SPiotr Jasiukajtis and %o4,2,%o4 54025c28e83SPiotr Jasiukajtis 54125c28e83SPiotr Jasiukajtis fsubd %f32,%f16,%f10 54225c28e83SPiotr Jasiukajtis or %g5,%o4,%g5 54325c28e83SPiotr Jasiukajtis 54425c28e83SPiotr Jasiukajtis fsubd %f34,%f26,%f20 54525c28e83SPiotr Jasiukajtis add %o7,1,%o4 54625c28e83SPiotr Jasiukajtis srl %o7,1,%o7 54725c28e83SPiotr Jasiukajtis 54825c28e83SPiotr Jasiukajtis fzero %f38 54925c28e83SPiotr Jasiukajtis xor %o4,%l2,%o4 55025c28e83SPiotr Jasiukajtis 55125c28e83SPiotr Jasiukajtis fabsd %f0,%f2 55225c28e83SPiotr Jasiukajtis and %o4,2,%o4 55325c28e83SPiotr Jasiukajtis 55425c28e83SPiotr Jasiukajtis fabsd %f10,%f12 55525c28e83SPiotr Jasiukajtis or %o7,%o4,%o7 55625c28e83SPiotr Jasiukajtis 55725c28e83SPiotr Jasiukajtis fabsd %f20,%f22 55825c28e83SPiotr Jasiukajtis sethi %hi(0x3e400000),%o4 55925c28e83SPiotr Jasiukajtis 56025c28e83SPiotr Jasiukajtis fnegd %f38,%f38 56125c28e83SPiotr Jasiukajtis 56225c28e83SPiotr Jasiukajtis faddd %f2,c3two44,%f4 56325c28e83SPiotr Jasiukajtis st %f5,[%fp+nk0] 56425c28e83SPiotr Jasiukajtis 56525c28e83SPiotr Jasiukajtis faddd %f12,c3two44,%f14 56625c28e83SPiotr Jasiukajtis st %f15,[%fp+nk1] 56725c28e83SPiotr Jasiukajtis 56825c28e83SPiotr Jasiukajtis faddd %f22,c3two44,%f24 56925c28e83SPiotr Jasiukajtis st %f25,[%fp+nk2] 57025c28e83SPiotr Jasiukajtis 57125c28e83SPiotr Jasiukajtis fsubd %f30,%f0,%f4 57225c28e83SPiotr Jasiukajtis 57325c28e83SPiotr Jasiukajtis fsubd %f32,%f10,%f14 57425c28e83SPiotr Jasiukajtis 57525c28e83SPiotr Jasiukajtis fsubd %f34,%f20,%f24 57625c28e83SPiotr Jasiukajtis 57725c28e83SPiotr Jasiukajtis fsubd %f4,%f6,%f6 ! w 57825c28e83SPiotr Jasiukajtis ld [%fp+nk0],%l0 57925c28e83SPiotr Jasiukajtis 58025c28e83SPiotr Jasiukajtis fsubd %f14,%f16,%f16 58125c28e83SPiotr Jasiukajtis ld [%fp+nk1],%l1 58225c28e83SPiotr Jasiukajtis 58325c28e83SPiotr Jasiukajtis fsubd %f24,%f26,%f26 58425c28e83SPiotr Jasiukajtis ld [%fp+nk2],%l2 58525c28e83SPiotr Jasiukajtis sll %l0,5,%l0 ! k 58625c28e83SPiotr Jasiukajtis 58725c28e83SPiotr Jasiukajtis fand %f0,%f38,%f30 ! sign bit of x 58825c28e83SPiotr Jasiukajtis ldd [%l0+%g1],%f4 58925c28e83SPiotr Jasiukajtis sll %l1,5,%l1 59025c28e83SPiotr Jasiukajtis 59125c28e83SPiotr Jasiukajtis fand %f10,%f38,%f32 59225c28e83SPiotr Jasiukajtis ldd [%l1+%g1],%f14 59325c28e83SPiotr Jasiukajtis sll %l2,5,%l2 59425c28e83SPiotr Jasiukajtis 59525c28e83SPiotr Jasiukajtis fand %f20,%f38,%f34 59625c28e83SPiotr Jasiukajtis ldd [%l2+%g1],%f24 59725c28e83SPiotr Jasiukajtis 59825c28e83SPiotr Jasiukajtis fsubd %f2,%f4,%f2 ! x -= __vlibm_TBL_sincos2[k] 59925c28e83SPiotr Jasiukajtis 60025c28e83SPiotr Jasiukajtis fsubd %f12,%f14,%f12 60125c28e83SPiotr Jasiukajtis 60225c28e83SPiotr Jasiukajtis fsubd %f22,%f24,%f22 60325c28e83SPiotr Jasiukajtis 60425c28e83SPiotr Jasiukajtis fmuld %f2,%f2,%f0 ! z = x * x 60525c28e83SPiotr Jasiukajtis fxor %f6,%f30,%f30 60625c28e83SPiotr Jasiukajtis 60725c28e83SPiotr Jasiukajtis fmuld %f12,%f12,%f10 60825c28e83SPiotr Jasiukajtis fxor %f16,%f32,%f32 60925c28e83SPiotr Jasiukajtis 61025c28e83SPiotr Jasiukajtis fmuld %f22,%f22,%f20 61125c28e83SPiotr Jasiukajtis fxor %f26,%f34,%f34 61225c28e83SPiotr Jasiukajtis 61325c28e83SPiotr Jasiukajtis fmuld %f0,pp3,%f6 61425c28e83SPiotr Jasiukajtis 61525c28e83SPiotr Jasiukajtis fmuld %f10,pp3,%f16 61625c28e83SPiotr Jasiukajtis 61725c28e83SPiotr Jasiukajtis fmuld %f20,pp3,%f26 61825c28e83SPiotr Jasiukajtis 61925c28e83SPiotr Jasiukajtis faddd %f6,pp2,%f6 62025c28e83SPiotr Jasiukajtis fmuld %f0,qq3,%f4 62125c28e83SPiotr Jasiukajtis 62225c28e83SPiotr Jasiukajtis faddd %f16,pp2,%f16 62325c28e83SPiotr Jasiukajtis fmuld %f10,qq3,%f14 62425c28e83SPiotr Jasiukajtis 62525c28e83SPiotr Jasiukajtis faddd %f26,pp2,%f26 62625c28e83SPiotr Jasiukajtis fmuld %f20,qq3,%f24 62725c28e83SPiotr Jasiukajtis 62825c28e83SPiotr Jasiukajtis fmuld %f0,%f6,%f6 62925c28e83SPiotr Jasiukajtis faddd %f4,qq2,%f4 63025c28e83SPiotr Jasiukajtis 63125c28e83SPiotr Jasiukajtis fmuld %f10,%f16,%f16 63225c28e83SPiotr Jasiukajtis faddd %f14,qq2,%f14 63325c28e83SPiotr Jasiukajtis 63425c28e83SPiotr Jasiukajtis fmuld %f20,%f26,%f26 63525c28e83SPiotr Jasiukajtis faddd %f24,qq2,%f24 63625c28e83SPiotr Jasiukajtis 63725c28e83SPiotr Jasiukajtis faddd %f6,pp1,%f6 63825c28e83SPiotr Jasiukajtis fmuld %f0,%f4,%f4 63925c28e83SPiotr Jasiukajtis add %l0,%g1,%l0 64025c28e83SPiotr Jasiukajtis 64125c28e83SPiotr Jasiukajtis faddd %f16,pp1,%f16 64225c28e83SPiotr Jasiukajtis fmuld %f10,%f14,%f14 64325c28e83SPiotr Jasiukajtis add %l1,%g1,%l1 64425c28e83SPiotr Jasiukajtis 64525c28e83SPiotr Jasiukajtis faddd %f26,pp1,%f26 64625c28e83SPiotr Jasiukajtis fmuld %f20,%f24,%f24 64725c28e83SPiotr Jasiukajtis add %l2,%g1,%l2 64825c28e83SPiotr Jasiukajtis 64925c28e83SPiotr Jasiukajtis fmuld %f0,%f6,%f6 65025c28e83SPiotr Jasiukajtis faddd %f4,qq1,%f4 65125c28e83SPiotr Jasiukajtis 65225c28e83SPiotr Jasiukajtis fmuld %f10,%f16,%f16 65325c28e83SPiotr Jasiukajtis faddd %f14,qq1,%f14 65425c28e83SPiotr Jasiukajtis 65525c28e83SPiotr Jasiukajtis fmuld %f20,%f26,%f26 65625c28e83SPiotr Jasiukajtis faddd %f24,qq1,%f24 65725c28e83SPiotr Jasiukajtis 65825c28e83SPiotr Jasiukajtis fmuld %f2,%f6,%f6 65925c28e83SPiotr Jasiukajtis ldd [%l0+16],%f8 66025c28e83SPiotr Jasiukajtis 66125c28e83SPiotr Jasiukajtis fmuld %f12,%f16,%f16 66225c28e83SPiotr Jasiukajtis ldd [%l1+16],%f18 66325c28e83SPiotr Jasiukajtis 66425c28e83SPiotr Jasiukajtis fmuld %f22,%f26,%f26 66525c28e83SPiotr Jasiukajtis ldd [%l2+16],%f28 66625c28e83SPiotr Jasiukajtis 66725c28e83SPiotr Jasiukajtis faddd %f6,%f30,%f6 66825c28e83SPiotr Jasiukajtis fmuld %f0,%f4,%f4 66925c28e83SPiotr Jasiukajtis ldd [%l0+8],%f30 67025c28e83SPiotr Jasiukajtis 67125c28e83SPiotr Jasiukajtis faddd %f16,%f32,%f16 67225c28e83SPiotr Jasiukajtis fmuld %f10,%f14,%f14 67325c28e83SPiotr Jasiukajtis ldd [%l1+8],%f32 67425c28e83SPiotr Jasiukajtis 67525c28e83SPiotr Jasiukajtis faddd %f26,%f34,%f26 67625c28e83SPiotr Jasiukajtis fmuld %f20,%f24,%f24 67725c28e83SPiotr Jasiukajtis ldd [%l2+8],%f34 67825c28e83SPiotr Jasiukajtis 67925c28e83SPiotr Jasiukajtis fmuld %f8,%f4,%f0 ! c * cpoly 68025c28e83SPiotr Jasiukajtis faddd %f6,%f2,%f6 68125c28e83SPiotr Jasiukajtis 68225c28e83SPiotr Jasiukajtis fmuld %f18,%f14,%f10 68325c28e83SPiotr Jasiukajtis faddd %f16,%f12,%f16 68425c28e83SPiotr Jasiukajtis 68525c28e83SPiotr Jasiukajtis fmuld %f28,%f24,%f20 68625c28e83SPiotr Jasiukajtis faddd %f26,%f22,%f26 68725c28e83SPiotr Jasiukajtis 68825c28e83SPiotr Jasiukajtis fmuld %f30,%f6,%f2 ! s * spoly 68925c28e83SPiotr Jasiukajtis 69025c28e83SPiotr Jasiukajtis fmuld %f32,%f16,%f12 69125c28e83SPiotr Jasiukajtis 69225c28e83SPiotr Jasiukajtis fmuld %f34,%f26,%f22 69325c28e83SPiotr Jasiukajtis 69425c28e83SPiotr Jasiukajtis fmuld %f8,%f6,%f6 ! c * spoly 69525c28e83SPiotr Jasiukajtis fsubd %f0,%f2,%f2 69625c28e83SPiotr Jasiukajtis 69725c28e83SPiotr Jasiukajtis fmuld %f18,%f16,%f16 69825c28e83SPiotr Jasiukajtis fsubd %f10,%f12,%f12 69925c28e83SPiotr Jasiukajtis 70025c28e83SPiotr Jasiukajtis fmuld %f28,%f26,%f26 70125c28e83SPiotr Jasiukajtis fsubd %f20,%f22,%f22 70225c28e83SPiotr Jasiukajtis 70325c28e83SPiotr Jasiukajtis fmuld %f30,%f4,%f4 ! s * cpoly 70425c28e83SPiotr Jasiukajtis faddd %f8,%f2,%f8 70525c28e83SPiotr Jasiukajtis 70625c28e83SPiotr Jasiukajtis fmuld %f32,%f14,%f14 70725c28e83SPiotr Jasiukajtis faddd %f18,%f12,%f18 70825c28e83SPiotr Jasiukajtis 70925c28e83SPiotr Jasiukajtis fmuld %f34,%f24,%f24 71025c28e83SPiotr Jasiukajtis faddd %f28,%f22,%f28 71125c28e83SPiotr Jasiukajtis 71225c28e83SPiotr Jasiukajtis faddd %f4,%f6,%f6 71325c28e83SPiotr Jasiukajtis 71425c28e83SPiotr Jasiukajtis faddd %f14,%f16,%f16 71525c28e83SPiotr Jasiukajtis 71625c28e83SPiotr Jasiukajtis faddd %f24,%f26,%f26 71725c28e83SPiotr Jasiukajtis 71825c28e83SPiotr Jasiukajtis faddd %f30,%f6,%f6 ! now %f6 = sin |x|, %f8 = cos |x| 71925c28e83SPiotr Jasiukajtis 72025c28e83SPiotr Jasiukajtis faddd %f32,%f16,%f16 72125c28e83SPiotr Jasiukajtis 72225c28e83SPiotr Jasiukajtis faddd %f34,%f26,%f26 72325c28e83SPiotr Jasiukajtis 72425c28e83SPiotr Jasiukajtis fnegd %f8,%f4 ! if (n & 1) c = -c 72525c28e83SPiotr Jasiukajtis lda [%i1]%asi,%l0 ! preload next argument 72625c28e83SPiotr Jasiukajtis mov %i5,%l1 72725c28e83SPiotr Jasiukajtis 72825c28e83SPiotr Jasiukajtis fnegd %f18,%f14 72925c28e83SPiotr Jasiukajtis lda [%i1]%asi,%f0 73025c28e83SPiotr Jasiukajtis sethi %hi(0x80000000),%i5 73125c28e83SPiotr Jasiukajtis 73225c28e83SPiotr Jasiukajtis fnegd %f28,%f24 73325c28e83SPiotr Jasiukajtis lda [%i1+4]%asi,%f3 73425c28e83SPiotr Jasiukajtis 73525c28e83SPiotr Jasiukajtis andcc %l1,1,%g0 73625c28e83SPiotr Jasiukajtis fmovdnz %icc,%f4,%f8 73725c28e83SPiotr Jasiukajtis st %f8,[%l4] 73825c28e83SPiotr Jasiukajtis 73925c28e83SPiotr Jasiukajtis andcc %g5,1,%g0 74025c28e83SPiotr Jasiukajtis fmovdnz %icc,%f14,%f18 74125c28e83SPiotr Jasiukajtis st %f9,[%l4+4] 74225c28e83SPiotr Jasiukajtis 74325c28e83SPiotr Jasiukajtis andcc %o7,1,%g0 74425c28e83SPiotr Jasiukajtis fmovdnz %icc,%f24,%f28 74525c28e83SPiotr Jasiukajtis st %f18,[%l5] 74625c28e83SPiotr Jasiukajtis 74725c28e83SPiotr Jasiukajtis fnegd %f6,%f4 ! if (n & 2) s = -s 74825c28e83SPiotr Jasiukajtis st %f19,[%l5+4] 74925c28e83SPiotr Jasiukajtis andn %l0,%i5,%l0 75025c28e83SPiotr Jasiukajtis 75125c28e83SPiotr Jasiukajtis fnegd %f16,%f14 75225c28e83SPiotr Jasiukajtis st %f28,[%l6] 75325c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 75425c28e83SPiotr Jasiukajtis 75525c28e83SPiotr Jasiukajtis fnegd %f26,%f24 75625c28e83SPiotr Jasiukajtis st %f29,[%l6+4] 75725c28e83SPiotr Jasiukajtis 75825c28e83SPiotr Jasiukajtis andcc %l1,2,%g0 75925c28e83SPiotr Jasiukajtis fmovdnz %icc,%f4,%f6 76025c28e83SPiotr Jasiukajtis st %f6,[%o0] 76125c28e83SPiotr Jasiukajtis 76225c28e83SPiotr Jasiukajtis andcc %g5,2,%g0 76325c28e83SPiotr Jasiukajtis fmovdnz %icc,%f14,%f16 76425c28e83SPiotr Jasiukajtis st %f16,[%o1] 76525c28e83SPiotr Jasiukajtis 76625c28e83SPiotr Jasiukajtis andcc %o7,2,%g0 76725c28e83SPiotr Jasiukajtis fmovdnz %icc,%f24,%f26 76825c28e83SPiotr Jasiukajtis st %f26,[%o2] 76925c28e83SPiotr Jasiukajtis 77025c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 77125c28e83SPiotr Jasiukajtis bg,pt %icc,.loop0 77225c28e83SPiotr Jasiukajtis! delay slot 77325c28e83SPiotr Jasiukajtis st %f7,[%o0+4] 77425c28e83SPiotr Jasiukajtis 77525c28e83SPiotr Jasiukajtis ba,pt %icc,.end 77625c28e83SPiotr Jasiukajtis! delay slot 77725c28e83SPiotr Jasiukajtis nop 77825c28e83SPiotr Jasiukajtis 77925c28e83SPiotr Jasiukajtis 78025c28e83SPiotr Jasiukajtis .align 16 78125c28e83SPiotr Jasiukajtis.end: 78225c28e83SPiotr Jasiukajtis st %f17,[%o1+4] 78325c28e83SPiotr Jasiukajtis st %f27,[%o2+4] 78425c28e83SPiotr Jasiukajtis ld [%fp+biguns],%i5 78525c28e83SPiotr Jasiukajtis tst %i5 ! check for huge arguments remaining 78625c28e83SPiotr Jasiukajtis be,pt %icc,.exit 78725c28e83SPiotr Jasiukajtis! delay slot 78825c28e83SPiotr Jasiukajtis nop 78925c28e83SPiotr Jasiukajtis#ifdef __sparcv9 79025c28e83SPiotr Jasiukajtis stx %o5,[%sp+STACK_BIAS+0xb8] 79125c28e83SPiotr Jasiukajtis ldx [%fp+xsave],%o1 79225c28e83SPiotr Jasiukajtis ldx [%fp+ssave],%o3 79325c28e83SPiotr Jasiukajtis ldx [%fp+csave],%o5 79425c28e83SPiotr Jasiukajtis ldx [%fp+STACK_BIAS+0xb0],%i5 79525c28e83SPiotr Jasiukajtis stx %i5,[%sp+STACK_BIAS+0xb0] 79625c28e83SPiotr Jasiukajtis#else 79725c28e83SPiotr Jasiukajtis st %o5,[%sp+0x60] 79825c28e83SPiotr Jasiukajtis ld [%fp+xsave],%o1 79925c28e83SPiotr Jasiukajtis ld [%fp+ssave],%o3 80025c28e83SPiotr Jasiukajtis ld [%fp+csave],%o5 80125c28e83SPiotr Jasiukajtis ld [%fp+0x5c],%i5 80225c28e83SPiotr Jasiukajtis st %i5,[%sp+0x5c] 80325c28e83SPiotr Jasiukajtis#endif 80425c28e83SPiotr Jasiukajtis ld [%fp+nsave],%o0 80525c28e83SPiotr Jasiukajtis ld [%fp+sxsave],%o2 80625c28e83SPiotr Jasiukajtis ld [%fp+sssave],%o4 80725c28e83SPiotr Jasiukajtis sra %o2,0,%o2 ! sign-extend for V9 80825c28e83SPiotr Jasiukajtis call __vlibm_vsincos_big 80925c28e83SPiotr Jasiukajtis sra %o4,0,%o4 ! delay slot 81025c28e83SPiotr Jasiukajtis 81125c28e83SPiotr Jasiukajtis.exit: 81225c28e83SPiotr Jasiukajtis ret 81325c28e83SPiotr Jasiukajtis restore 81425c28e83SPiotr Jasiukajtis 81525c28e83SPiotr Jasiukajtis 81625c28e83SPiotr Jasiukajtis .align 16 81725c28e83SPiotr Jasiukajtis.last1: 81825c28e83SPiotr Jasiukajtis faddd %f2,c3two44,%f4 81925c28e83SPiotr Jasiukajtis st %f17,[%o1+4] 82025c28e83SPiotr Jasiukajtis.last1_from_range1: 82125c28e83SPiotr Jasiukajtis mov 0,%l1 82225c28e83SPiotr Jasiukajtis fzeros %f10 82325c28e83SPiotr Jasiukajtis fzero %f12 82425c28e83SPiotr Jasiukajtis add %fp,junk,%o1 82525c28e83SPiotr Jasiukajtis add %fp,junk,%l5 82625c28e83SPiotr Jasiukajtis.last2: 82725c28e83SPiotr Jasiukajtis faddd %f12,c3two44,%f14 82825c28e83SPiotr Jasiukajtis st %f27,[%o2+4] 82925c28e83SPiotr Jasiukajtis st %f5,[%fp+nk0] 83025c28e83SPiotr Jasiukajtis st %f15,[%fp+nk1] 83125c28e83SPiotr Jasiukajtis.last2_from_range2: 83225c28e83SPiotr Jasiukajtis mov 0,%l2 83325c28e83SPiotr Jasiukajtis fzeros %f20 83425c28e83SPiotr Jasiukajtis fzero %f22 83525c28e83SPiotr Jasiukajtis add %fp,junk,%o2 83625c28e83SPiotr Jasiukajtis ba,pt %icc,.cont 83725c28e83SPiotr Jasiukajtis! delay slot 83825c28e83SPiotr Jasiukajtis add %fp,junk,%l6 83925c28e83SPiotr Jasiukajtis 84025c28e83SPiotr Jasiukajtis 84125c28e83SPiotr Jasiukajtis .align 16 84225c28e83SPiotr Jasiukajtis.range0: 84325c28e83SPiotr Jasiukajtis cmp %l0,%o4 84425c28e83SPiotr Jasiukajtis bl,pt %icc,1f ! hx < 0x3e400000 84525c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 84625c28e83SPiotr Jasiukajtis sethi %hi(0x7ff00000),%o7 84725c28e83SPiotr Jasiukajtis cmp %l0,%o7 84825c28e83SPiotr Jasiukajtis bl,a,pt %icc,2f ! branch if finite 84925c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 85025c28e83SPiotr Jasiukajtis st %o4,[%fp+biguns] ! set biguns 85125c28e83SPiotr Jasiukajtis fzero %f0 85225c28e83SPiotr Jasiukajtis fmuld %f2,%f0,%f2 85325c28e83SPiotr Jasiukajtis st %f2,[%o0] 85425c28e83SPiotr Jasiukajtis st %f3,[%o0+4] 85525c28e83SPiotr Jasiukajtis st %f2,[%l3] 85625c28e83SPiotr Jasiukajtis ba,pt %icc,2f 85725c28e83SPiotr Jasiukajtis! delay slot 85825c28e83SPiotr Jasiukajtis st %f3,[%l3+4] 85925c28e83SPiotr Jasiukajtis1: 86025c28e83SPiotr Jasiukajtis fdtoi %f2,%f4 ! raise inexact if not zero 86125c28e83SPiotr Jasiukajtis st %f0,[%o0] 86225c28e83SPiotr Jasiukajtis st %f3,[%o0+4] 86325c28e83SPiotr Jasiukajtis sethi %hi(0x3ff00000),%g5 86425c28e83SPiotr Jasiukajtis st %g5,[%l3] 86525c28e83SPiotr Jasiukajtis st %g0,[%l3+4] 86625c28e83SPiotr Jasiukajtis2: 86725c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 86825c28e83SPiotr Jasiukajtis ble,pn %icc,.end 86925c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 87025c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 87125c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 87225c28e83SPiotr Jasiukajtis andn %l1,%i5,%l0 ! hx &= ~0x80000000 87325c28e83SPiotr Jasiukajtis fmovs %f10,%f0 87425c28e83SPiotr Jasiukajtis fmovs %f13,%f3 87525c28e83SPiotr Jasiukajtis ba,pt %icc,.loop0 87625c28e83SPiotr Jasiukajtis! delay slot 87725c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 87825c28e83SPiotr Jasiukajtis 87925c28e83SPiotr Jasiukajtis 88025c28e83SPiotr Jasiukajtis .align 16 88125c28e83SPiotr Jasiukajtis.range1: 88225c28e83SPiotr Jasiukajtis cmp %l1,%o4 88325c28e83SPiotr Jasiukajtis bl,pt %icc,1f ! hx < 0x3e400000 88425c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 88525c28e83SPiotr Jasiukajtis sethi %hi(0x7ff00000),%o7 88625c28e83SPiotr Jasiukajtis cmp %l1,%o7 88725c28e83SPiotr Jasiukajtis bl,a,pt %icc,2f ! branch if finite 88825c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 88925c28e83SPiotr Jasiukajtis st %o4,[%fp+biguns] ! set biguns 89025c28e83SPiotr Jasiukajtis fzero %f10 89125c28e83SPiotr Jasiukajtis fmuld %f12,%f10,%f12 89225c28e83SPiotr Jasiukajtis st %f12,[%o1] 89325c28e83SPiotr Jasiukajtis st %f13,[%o1+4] 89425c28e83SPiotr Jasiukajtis st %f12,[%l3] 89525c28e83SPiotr Jasiukajtis ba,pt %icc,2f 89625c28e83SPiotr Jasiukajtis! delay slot 89725c28e83SPiotr Jasiukajtis st %f13,[%l3+4] 89825c28e83SPiotr Jasiukajtis1: 89925c28e83SPiotr Jasiukajtis fdtoi %f12,%f14 ! raise inexact if not zero 90025c28e83SPiotr Jasiukajtis st %f10,[%o1] 90125c28e83SPiotr Jasiukajtis st %f13,[%o1+4] 90225c28e83SPiotr Jasiukajtis sethi %hi(0x3ff00000),%g5 90325c28e83SPiotr Jasiukajtis st %g5,[%l3] 90425c28e83SPiotr Jasiukajtis st %g0,[%l3+4] 90525c28e83SPiotr Jasiukajtis2: 90625c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 90725c28e83SPiotr Jasiukajtis ble,pn %icc,.last1_from_range1 90825c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 90925c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 91025c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 91125c28e83SPiotr Jasiukajtis andn %l2,%i5,%l1 ! hx &= ~0x80000000 91225c28e83SPiotr Jasiukajtis fmovs %f20,%f10 91325c28e83SPiotr Jasiukajtis fmovs %f23,%f13 91425c28e83SPiotr Jasiukajtis ba,pt %icc,.loop1 91525c28e83SPiotr Jasiukajtis! delay slot 91625c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 91725c28e83SPiotr Jasiukajtis 91825c28e83SPiotr Jasiukajtis 91925c28e83SPiotr Jasiukajtis .align 16 92025c28e83SPiotr Jasiukajtis.range2: 92125c28e83SPiotr Jasiukajtis cmp %l2,%o4 92225c28e83SPiotr Jasiukajtis bl,pt %icc,1f ! hx < 0x3e400000 92325c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 92425c28e83SPiotr Jasiukajtis sethi %hi(0x7ff00000),%o7 92525c28e83SPiotr Jasiukajtis cmp %l2,%o7 92625c28e83SPiotr Jasiukajtis bl,a,pt %icc,2f ! branch if finite 92725c28e83SPiotr Jasiukajtis! delay slot, squashed if branch not taken 92825c28e83SPiotr Jasiukajtis st %o4,[%fp+biguns] ! set biguns 92925c28e83SPiotr Jasiukajtis fzero %f20 93025c28e83SPiotr Jasiukajtis fmuld %f22,%f20,%f22 93125c28e83SPiotr Jasiukajtis st %f22,[%o2] 93225c28e83SPiotr Jasiukajtis st %f23,[%o2+4] 93325c28e83SPiotr Jasiukajtis st %f22,[%l3] 93425c28e83SPiotr Jasiukajtis ba,pt %icc,2f 93525c28e83SPiotr Jasiukajtis! delay slot 93625c28e83SPiotr Jasiukajtis st %f23,[%l3+4] 93725c28e83SPiotr Jasiukajtis1: 93825c28e83SPiotr Jasiukajtis fdtoi %f22,%f24 ! raise inexact if not zero 93925c28e83SPiotr Jasiukajtis st %f20,[%o2] 94025c28e83SPiotr Jasiukajtis st %f23,[%o2+4] 94125c28e83SPiotr Jasiukajtis sethi %hi(0x3ff00000),%g5 94225c28e83SPiotr Jasiukajtis st %g5,[%l3] 94325c28e83SPiotr Jasiukajtis st %g0,[%l3+4] 94425c28e83SPiotr Jasiukajtis2: 94525c28e83SPiotr Jasiukajtis addcc %i0,-1,%i0 94625c28e83SPiotr Jasiukajtis ble,pn %icc,.last2_from_range2 94725c28e83SPiotr Jasiukajtis! delay slot, harmless if branch taken 94825c28e83SPiotr Jasiukajtis add %i3,%i4,%i3 ! s += strides 94925c28e83SPiotr Jasiukajtis add %l3,%l7,%l3 ! c += stridec 95025c28e83SPiotr Jasiukajtis ld [%i1],%l2 95125c28e83SPiotr Jasiukajtis ld [%i1],%f20 95225c28e83SPiotr Jasiukajtis ld [%i1+4],%f23 95325c28e83SPiotr Jasiukajtis andn %l2,%i5,%l2 ! hx &= ~0x80000000 95425c28e83SPiotr Jasiukajtis ba,pt %icc,.loop2 95525c28e83SPiotr Jasiukajtis! delay slot 95625c28e83SPiotr Jasiukajtis add %i1,%i2,%i1 ! x += stridex 95725c28e83SPiotr Jasiukajtis 95825c28e83SPiotr Jasiukajtis SET_SIZE(__vsincos) 95925c28e83SPiotr Jasiukajtis 960