/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (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 * or http://www.opensolaris.org/os/licensing. * 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 2011 Nexenta Systems, Inc. All rights reserved. */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .file "__vsinf.S" #include "libm.h" RO_DATA .align 64 constants: .word 0xbfc55554,0x60000000 .word 0x3f811077,0xe0000000 .word 0xbf29956b,0x60000000 .word 0x3ff00000,0x00000000 .word 0xbfe00000,0x00000000 .word 0x3fa55554,0xa0000000 .word 0xbf56c0c1,0xe0000000 .word 0x3ef99e24,0xe0000000 .word 0x3fe45f30,0x6dc9c883 .word 0x43380000,0x00000000 .word 0x3ff921fb,0x54400000 .word 0x3dd0b461,0x1a626331 .word 0x3f490fdb,0 .word 0x49c90fdb,0 .word 0x7f800000,0 .word 0x80000000,0 #define S0 0x0 #define S1 0x08 #define S2 0x10 #define one 0x18 #define mhalf 0x20 #define C0 0x28 #define C1 0x30 #define C2 0x38 #define invpio2 0x40 #define round 0x48 #define pio2_1 0x50 #define pio2_t 0x58 #define thresh1 0x60 #define thresh2 0x68 #define inf 0x70 #define signbit 0x78 ! local storage indices #define xsave STACK_BIAS-0x8 #define ysave STACK_BIAS-0x10 #define nsave STACK_BIAS-0x14 #define sxsave STACK_BIAS-0x18 #define sysave STACK_BIAS-0x1c #define junk STACK_BIAS-0x20 #define n3 STACK_BIAS-0x24 #define n2 STACK_BIAS-0x28 #define n1 STACK_BIAS-0x2c #define n0 STACK_BIAS-0x30 ! sizeof temp storage - must be a multiple of 16 for V9 #define tmps 0x30 ! register use ! i0 n ! i1 x ! i2 stridex ! i3 y ! i4 stridey ! i5 biguns ! l0 n0 ! l1 n1 ! l2 n2 ! l3 n3 ! l4 ! l5 ! l6 ! l7 ! the following are 64-bit registers in both V8+ and V9 ! g1 ! g5 ! o0 py0 ! o1 py1 ! o2 py2 ! o3 py3 ! o4 ! o5 ! o7 ! f0 x0 ! f2 x1 ! f4 x2 ! f6 x3 ! f8 thresh1 (pi/4) ! f10 y0 ! f12 y1 ! f14 y2 ! f16 y3 ! f18 thresh2 (2^19 pi) ! f20 ! f22 ! f24 ! f26 ! f28 signbit ! f30 ! f32 ! f34 ! f36 ! f38 inf ! f40 S0 ! f42 S1 ! f44 S2 ! f46 one ! f48 mhalf ! f50 C0 ! f52 C1 ! f54 C2 ! f56 invpio2 ! f58 round ! f60 pio2_1 ! f62 pio2_t ENTRY(__vsinf) save %sp,-SA(MINFRAME)-tmps,%sp PIC_SETUP(l7) PIC_SET(l7,constants,l1) mov %l1,%g1 wr %g0,0x82,%asi ! set %asi for non-faulting loads #ifdef __sparcv9 stx %i1,[%fp+xsave] ! save arguments stx %i3,[%fp+ysave] #else st %i1,[%fp+xsave] ! save arguments st %i3,[%fp+ysave] #endif st %i0,[%fp+nsave] st %i2,[%fp+sxsave] st %i4,[%fp+sysave] mov 0,%i5 ! biguns = 0 ldd [%g1+S0],%f40 ! load constants ldd [%g1+S1],%f42 ldd [%g1+S2],%f44 ldd [%g1+one],%f46 ldd [%g1+mhalf],%f48 ldd [%g1+C0],%f50 ldd [%g1+C1],%f52 ldd [%g1+C2],%f54 ldd [%g1+invpio2],%f56 ldd [%g1+round],%f58 ldd [%g1+pio2_1],%f60 ldd [%g1+pio2_t],%f62 ldd [%g1+thresh1],%f8 ldd [%g1+thresh2],%f18 ldd [%g1+inf],%f38 ldd [%g1+signbit],%f28 sll %i2,2,%i2 ! scale strides sll %i4,2,%i4 fzero %f10 ! loop prologue add %fp,junk,%o0 fzero %f12 add %fp,junk,%o1 fzero %f14 add %fp,junk,%o2 fzero %f16 ba .start add %fp,junk,%o3 ! 16-byte aligned .align 16 .start: ld [%i1],%f0 ! *x add %i1,%i2,%i1 ! x += stridex addcc %i0,-1,%i0 fdtos %f10,%f10 st %f10,[%o0] mov %i3,%o0 ! py0 = y ble,pn %icc,.last1 ! delay slot add %i3,%i4,%i3 ! y += stridey ld [%i1],%f2 ! *x add %i1,%i2,%i1 ! x += stridex addcc %i0,-1,%i0 fdtos %f12,%f12 st %f12,[%o1] mov %i3,%o1 ! py1 = y ble,pn %icc,.last2 ! delay slot add %i3,%i4,%i3 ! y += stridey ld [%i1],%f4 ! *x add %i1,%i2,%i1 ! x += stridex addcc %i0,-1,%i0 fdtos %f14,%f14 st %f14,[%o2] mov %i3,%o2 ! py2 = y ble,pn %icc,.last3 ! delay slot add %i3,%i4,%i3 ! y += stridey ld [%i1],%f6 ! *x add %i1,%i2,%i1 ! x += stridex nop fdtos %f16,%f16 st %f16,[%o3] mov %i3,%o3 ! py3 = y add %i3,%i4,%i3 ! y += stridey .cont: fabsd %f0,%f30 fabsd %f2,%f32 fabsd %f4,%f34 fabsd %f6,%f36 fcmple32 %f30,%f18,%l0 fcmple32 %f32,%f18,%l1 fcmple32 %f34,%f18,%l2 fcmple32 %f36,%f18,%l3 nop ! 16-byte aligned andcc %l0,2,%g0 bz,pn %icc,.range0 ! branch if > 2^19 pi ! delay slot fcmple32 %f30,%f8,%l0 .check1: andcc %l1,2,%g0 bz,pn %icc,.range1 ! branch if > 2^19 pi ! delay slot fcmple32 %f32,%f8,%l1 .check2: andcc %l2,2,%g0 bz,pn %icc,.range2 ! branch if > 2^19 pi ! delay slot fcmple32 %f34,%f8,%l2 .check3: andcc %l3,2,%g0 bz,pn %icc,.range3 ! branch if > 2^19 pi ! delay slot fcmple32 %f36,%f8,%l3 .checkprimary: fsmuld %f0,%f0,%f30 fstod %f0,%f0 fsmuld %f2,%f2,%f32 fstod %f2,%f2 and %l0,%l1,%o4 fsmuld %f4,%f4,%f34 fstod %f4,%f4 fsmuld %f6,%f6,%f36 fstod %f6,%f6 and %l2,%l3,%o5 fmuld %f30,%f44,%f10 and %o4,%o5,%o5 fmuld %f32,%f44,%f12 andcc %o5,2,%g0 bz,pn %icc,.medium ! branch if any argument is > pi/4 ! delay slot nop fmuld %f34,%f44,%f14 fmuld %f36,%f44,%f16 fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fmuld %f32,%f12,%f12 fmuld %f34,%f14,%f14 fmuld %f36,%f16,%f16 faddd %f10,%f20,%f10 faddd %f12,%f22,%f12 faddd %f14,%f24,%f14 faddd %f16,%f26,%f16 fmuld %f0,%f10,%f10 fmuld %f2,%f12,%f12 fmuld %f4,%f14,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fmuld %f6,%f16,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .medium: fmuld %f0,%f56,%f10 fmuld %f2,%f56,%f12 fmuld %f4,%f56,%f14 fmuld %f6,%f56,%f16 faddd %f10,%f58,%f10 st %f11,[%fp+n0] faddd %f12,%f58,%f12 st %f13,[%fp+n1] faddd %f14,%f58,%f14 st %f15,[%fp+n2] faddd %f16,%f58,%f16 st %f17,[%fp+n3] fsubd %f10,%f58,%f10 fsubd %f12,%f58,%f12 fsubd %f14,%f58,%f14 fsubd %f16,%f58,%f16 fmuld %f10,%f60,%f20 ld [%fp+n0],%l0 fmuld %f12,%f60,%f22 ld [%fp+n1],%l1 fmuld %f14,%f60,%f24 ld [%fp+n2],%l2 fmuld %f16,%f60,%f26 ld [%fp+n3],%l3 fsubd %f0,%f20,%f0 fmuld %f10,%f62,%f30 fsubd %f2,%f22,%f2 fmuld %f12,%f62,%f32 fsubd %f4,%f24,%f4 fmuld %f14,%f62,%f34 fsubd %f6,%f26,%f6 fmuld %f16,%f62,%f36 fsubd %f0,%f30,%f0 fsubd %f2,%f32,%f2 fsubd %f4,%f34,%f4 fsubd %f6,%f36,%f6 andcc %l0,1,%g0 fmuld %f0,%f0,%f30 bz,pn %icc,.case8 ! delay slot andcc %l1,1,%g0 fmuld %f2,%f2,%f32 bz,pn %icc,.case4 ! delay slot andcc %l2,1,%g0 fmuld %f4,%f4,%f34 bz,pn %icc,.case2 ! delay slot andcc %l3,1,%g0 fmuld %f6,%f6,%f36 bz,pn %icc,.case1 ! delay slot nop !.case0: fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 faddd %f10,%f20,%f10 faddd %f12,%f22,%f12 faddd %f14,%f24,%f14 faddd %f16,%f26,%f16 fxor %f10,%f0,%f10 fxor %f12,%f2,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case1: fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fzero %f36 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 faddd %f16,%f26,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 faddd %f12,%f22,%f12 faddd %f14,%f24,%f14 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f0,%f10 fxor %f12,%f2,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case2: fmuld %f6,%f6,%f36 bz,pn %icc,.case3 ! delay slot nop fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 faddd %f14,%f24,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 faddd %f10,%f20,%f10 faddd %f12,%f22,%f12 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 faddd %f16,%f26,%f16 fxor %f10,%f0,%f10 fxor %f12,%f2,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case3: fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f16,%f16 fzero %f36 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 faddd %f14,%f24,%f14 and %l2,2,%o4 faddd %f16,%f26,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 faddd %f12,%f22,%f12 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f0,%f10 fxor %f12,%f2,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case4: fmuld %f4,%f4,%f34 bz,pn %icc,.case6 ! delay slot andcc %l3,1,%g0 fmuld %f6,%f6,%f36 bz,pn %icc,.case5 ! delay slot nop fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 faddd %f12,%f22,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 faddd %f10,%f20,%f10 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 faddd %f14,%f24,%f14 faddd %f16,%f26,%f16 fxor %f10,%f0,%f10 fxor %f12,%f32,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case5: fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fzero %f36 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 faddd %f12,%f22,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 faddd %f16,%f26,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 faddd %f14,%f24,%f14 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f0,%f10 fxor %f12,%f32,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case6: fmuld %f6,%f6,%f36 bz,pn %icc,.case7 ! delay slot nop fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 faddd %f12,%f22,%f12 and %l1,2,%g5 faddd %f14,%f24,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 faddd %f10,%f20,%f10 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 faddd %f16,%f26,%f16 fxor %f10,%f0,%f10 fxor %f12,%f32,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case7: fmuld %f30,%f54,%f10 ! cos(x0) fzero %f0 fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f48,%f20 faddd %f10,%f52,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f10,%f10 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f30,%f30 faddd %f10,%f50,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f16,%f16 fzero %f36 fmuld %f30,%f10,%f10 fmovrdnz %g1,%f28,%f0 faddd %f12,%f22,%f12 and %l1,2,%g5 faddd %f14,%f24,%f14 and %l2,2,%o4 faddd %f16,%f26,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f0,%f10 fxor %f12,%f32,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case8: fmuld %f2,%f2,%f32 bz,pn %icc,.case12 ! delay slot andcc %l2,1,%g0 fmuld %f4,%f4,%f34 bz,pn %icc,.case10 ! delay slot andcc %l3,1,%g0 fmuld %f6,%f6,%f36 bz,pn %icc,.case9 ! delay slot nop fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 faddd %f12,%f22,%f12 faddd %f14,%f24,%f14 faddd %f16,%f26,%f16 fxor %f10,%f30,%f10 fxor %f12,%f2,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case9: fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fzero %f36 faddd %f10,%f20,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 faddd %f16,%f26,%f16 and %l3,2,%o5 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 faddd %f12,%f22,%f12 faddd %f14,%f24,%f14 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f30,%f10 fxor %f12,%f2,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case10: fmuld %f6,%f6,%f36 bz,pn %icc,.case11 ! delay slot nop fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 faddd %f14,%f24,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 faddd %f12,%f22,%f12 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 faddd %f16,%f26,%f16 fxor %f10,%f30,%f10 fxor %f12,%f2,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case11: fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f54,%f12 ! cos(x1) fzero %f2 fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f48,%f22 faddd %f12,%f52,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f12,%f12 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f32,%f32 faddd %f12,%f50,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f16,%f16 fzero %f36 faddd %f10,%f20,%f10 and %l0,2,%g1 fmuld %f32,%f12,%f12 fmovrdnz %g5,%f28,%f2 faddd %f14,%f24,%f14 and %l2,2,%o4 faddd %f16,%f26,%f16 and %l3,2,%o5 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 faddd %f12,%f22,%f12 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f30,%f10 fxor %f12,%f2,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case12: fmuld %f4,%f4,%f34 bz,pn %icc,.case14 ! delay slot andcc %l3,1,%g0 fmuld %f6,%f6,%f36 bz,pn %icc,.case13 ! delay slot nop fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 and %l0,2,%g1 faddd %f12,%f22,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 faddd %f14,%f24,%f14 faddd %f16,%f26,%f16 fxor %f10,%f30,%f10 fxor %f12,%f32,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case13: fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f54,%f14 ! cos(x2) fzero %f4 fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f48,%f24 faddd %f14,%f52,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f14,%f14 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f34,%f34 faddd %f14,%f50,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fzero %f36 faddd %f10,%f20,%f10 and %l0,2,%g1 faddd %f12,%f22,%f12 and %l1,2,%g5 fmuld %f34,%f14,%f14 fmovrdnz %o4,%f28,%f4 faddd %f16,%f26,%f16 and %l3,2,%o5 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 faddd %f14,%f24,%f14 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f30,%f10 fxor %f12,%f32,%f12 fxor %f14,%f4,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case14: fmuld %f6,%f6,%f36 bz,pn %icc,.case15 ! delay slot nop fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f54,%f16 ! cos(x3) fzero %f6 fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f48,%f26 faddd %f16,%f52,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f16,%f16 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f36,%f36 faddd %f16,%f50,%f16 and %l3,2,%o5 faddd %f10,%f20,%f10 and %l0,2,%g1 faddd %f12,%f22,%f12 and %l1,2,%g5 faddd %f14,%f24,%f14 and %l2,2,%o4 fmuld %f36,%f16,%f16 fmovrdnz %o5,%f28,%f6 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 faddd %f16,%f26,%f16 fxor %f10,%f30,%f10 fxor %f12,%f32,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f6,%f16 ba,pt %icc,.end ! delay slot nop .align 16 .case15: fmuld %f30,%f44,%f10 ! sin(x0) fmuld %f32,%f44,%f12 ! sin(x1) fmuld %f34,%f44,%f14 ! sin(x2) fmuld %f36,%f44,%f16 ! sin(x3) fmuld %f30,%f40,%f20 faddd %f10,%f42,%f10 fmuld %f32,%f40,%f22 faddd %f12,%f42,%f12 fmuld %f34,%f40,%f24 faddd %f14,%f42,%f14 fmuld %f36,%f40,%f26 faddd %f16,%f42,%f16 fmuld %f30,%f30,%f30 faddd %f20,%f46,%f20 fmuld %f32,%f32,%f32 faddd %f22,%f46,%f22 fmuld %f34,%f34,%f34 faddd %f24,%f46,%f24 fmuld %f36,%f36,%f36 faddd %f26,%f46,%f26 fmuld %f30,%f10,%f10 fzero %f30 fmuld %f32,%f12,%f12 fzero %f32 fmuld %f34,%f14,%f14 fzero %f34 fmuld %f36,%f16,%f16 fzero %f36 faddd %f10,%f20,%f10 and %l0,2,%g1 faddd %f12,%f22,%f12 and %l1,2,%g5 faddd %f14,%f24,%f14 and %l2,2,%o4 faddd %f16,%f26,%f16 and %l3,2,%o5 fmuld %f0,%f10,%f10 fmovrdnz %g1,%f28,%f30 fmuld %f2,%f12,%f12 fmovrdnz %g5,%f28,%f32 fmuld %f4,%f14,%f14 fmovrdnz %o4,%f28,%f34 fmuld %f6,%f16,%f16 fmovrdnz %o5,%f28,%f36 fxor %f10,%f30,%f10 fxor %f12,%f32,%f12 fxor %f14,%f34,%f14 addcc %i0,-1,%i0 bg,pt %icc,.start ! delay slot fxor %f16,%f36,%f16 ba,pt %icc,.end ! delay slot nop .align 32 .end: fdtos %f10,%f10 st %f10,[%o0] fdtos %f12,%f12 st %f12,[%o1] fdtos %f14,%f14 st %f14,[%o2] fdtos %f16,%f16 tst %i5 ! check for huge arguments remaining be,pt %icc,.exit ! delay slot st %f16,[%o3] #ifdef __sparcv9 ldx [%fp+xsave],%o1 ldx [%fp+ysave],%o3 #else ld [%fp+xsave],%o1 ld [%fp+ysave],%o3 #endif ld [%fp+nsave],%o0 ld [%fp+sxsave],%o2 ld [%fp+sysave],%o4 sra %o2,0,%o2 ! sign-extend for V9 call __vlibm_vsin_bigf sra %o4,0,%o4 ! delay slot .exit: ret restore .align 32 .last1: fdtos %f12,%f12 st %f12,[%o1] fzeros %f2 add %fp,junk,%o1 .last2: fdtos %f14,%f14 st %f14,[%o2] fzeros %f4 add %fp,junk,%o2 .last3: fdtos %f16,%f16 st %f16,[%o3] fzeros %f6 ba,pt %icc,.cont ! delay slot add %fp,junk,%o3 .align 16 .range0: fcmpgt32 %f38,%f30,%l0 andcc %l0,2,%g0 bnz,a,pt %icc,1f ! branch if finite ! delay slot, squashed if branch not taken mov 1,%i5 ! set biguns fzeros %f1 fmuls %f0,%f1,%f0 st %f0,[%o0] 1: addcc %i0,-1,%i0 ble,pn %icc,1f ! delay slot nop ld [%i1],%f0 add %i1,%i2,%i1 mov %i3,%o0 add %i3,%i4,%i3 fabsd %f0,%f30 fcmple32 %f30,%f18,%l0 andcc %l0,2,%g0 bz,pn %icc,.range0 ! delay slot nop ba,pt %icc,.check1 ! delay slot fcmple32 %f30,%f8,%l0 1: fzero %f0 ! set up dummy argument add %fp,junk,%o0 mov 2,%l0 ba,pt %icc,.check1 ! delay slot fzero %f30 .align 16 .range1: fcmpgt32 %f38,%f32,%l1 andcc %l1,2,%g0 bnz,a,pt %icc,1f ! branch if finite ! delay slot, squashed if branch not taken mov 1,%i5 ! set biguns fzeros %f3 fmuls %f2,%f3,%f2 st %f2,[%o1] 1: addcc %i0,-1,%i0 ble,pn %icc,1f ! delay slot nop ld [%i1],%f2 add %i1,%i2,%i1 mov %i3,%o1 add %i3,%i4,%i3 fabsd %f2,%f32 fcmple32 %f32,%f18,%l1 andcc %l1,2,%g0 bz,pn %icc,.range1 ! delay slot nop ba,pt %icc,.check2 ! delay slot fcmple32 %f32,%f8,%l1 1: fzero %f2 ! set up dummy argument add %fp,junk,%o1 mov 2,%l1 ba,pt %icc,.check2 ! delay slot fzero %f32 .align 16 .range2: fcmpgt32 %f38,%f34,%l2 andcc %l2,2,%g0 bnz,a,pt %icc,1f ! branch if finite ! delay slot, squashed if branch not taken mov 1,%i5 ! set biguns fzeros %f5 fmuls %f4,%f5,%f4 st %f4,[%o2] 1: addcc %i0,-1,%i0 ble,pn %icc,1f ! delay slot nop ld [%i1],%f4 add %i1,%i2,%i1 mov %i3,%o2 add %i3,%i4,%i3 fabsd %f4,%f34 fcmple32 %f34,%f18,%l2 andcc %l2,2,%g0 bz,pn %icc,.range2 ! delay slot nop ba,pt %icc,.check3 ! delay slot fcmple32 %f34,%f8,%l2 1: fzero %f4 ! set up dummy argument add %fp,junk,%o2 mov 2,%l2 ba,pt %icc,.check3 ! delay slot fzero %f34 .align 16 .range3: fcmpgt32 %f38,%f36,%l3 andcc %l3,2,%g0 bnz,a,pt %icc,1f ! branch if finite ! delay slot, squashed if branch not taken mov 1,%i5 ! set biguns fzeros %f7 fmuls %f6,%f7,%f6 st %f6,[%o3] 1: addcc %i0,-1,%i0 ble,pn %icc,1f ! delay slot nop ld [%i1],%f6 add %i1,%i2,%i1 mov %i3,%o3 add %i3,%i4,%i3 fabsd %f6,%f36 fcmple32 %f36,%f18,%l3 andcc %l3,2,%g0 bz,pn %icc,.range3 ! delay slot nop ba,pt %icc,.checkprimary ! delay slot fcmple32 %f36,%f8,%l3 1: fzero %f6 ! set up dummy argument add %fp,junk,%o3 mov 2,%l3 ba,pt %icc,.checkprimary ! delay slot fzero %f36 SET_SIZE(__vsinf)