summaryrefslogtreecommitdiff
path: root/usr/src/lib/libm/sparc/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libm/sparc/src')
-rw-r--r--usr/src/lib/libm/sparc/src/libm_inlines.h6
-rw-r--r--usr/src/lib/libm/sparc/src/locallibm.il2034
2 files changed, 4 insertions, 2036 deletions
diff --git a/usr/src/lib/libm/sparc/src/libm_inlines.h b/usr/src/lib/libm/sparc/src/libm_inlines.h
index 964bf3d88a..bd4a463e7a 100644
--- a/usr/src/lib/libm/sparc/src/libm_inlines.h
+++ b/usr/src/lib/libm/sparc/src/libm_inlines.h
@@ -28,8 +28,6 @@
* Copyright 2011, Richard Lowe.
*/
-/* Functions in this file are duplicated in locallibm.il. Keep them in sync */
-
#ifndef _LIBM_INLINES_H
#define _LIBM_INLINES_H
@@ -119,6 +117,7 @@ fp_class(double d)
enum fp_class_type ret;
uint32_t tmp;
+ /* BEGIN CSTYLED */
__asm__ __volatile__(
"sethi %%hi(0x80000000),%1\n\t" /* %1 gets 80000000 */
"andn %2,%1,%0\n\t" /* %2-%0 gets abs(x) */
@@ -165,6 +164,7 @@ fp_class(double d)
: "=&r" (ret), "=&r" (tmp)
: "r" (_HI_WORD(d)), "r" (_LO_WORD(d))
: "cc");
+ /* END CSTYLED */
return (ret);
}
@@ -241,6 +241,7 @@ __swapTE(int i)
int ret;
uint32_t fsr, tmp1, tmp2;
+ /* BEGIN CSTYLED */
__asm__ __volatile__(
"and %4,0x1f,%0\n\t"
"sll %0,23,%2\n\t" /* shift input to TEM bit location */
@@ -258,6 +259,7 @@ __swapTE(int i)
: "=r" (ret), "=m" (fsr), "=r" (tmp1), "=r" (tmp2)
: "r" (i)
: "cc");
+ /* END CSTYLED */
return (ret);
}
diff --git a/usr/src/lib/libm/sparc/src/locallibm.il b/usr/src/lib/libm/sparc/src/locallibm.il
deleted file mode 100644
index b6fa0adfc5..0000000000
--- a/usr/src/lib/libm/sparc/src/locallibm.il
+++ /dev/null
@@ -1,2034 +0,0 @@
-!
-! 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, this CDDL HEADER in each
-! file and 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.
-!
-
-! Portions of this file are duplicated as GCC inline assembly in
-! libm_inlines.h. Keep them in sync.
-
- .inline __r_hypot_,2
- ld [%o0],%o4
- sethi 0x1fffff,%o5
- or %o5,1023,%o5
- and %o4,%o5,%o4
- sethi 0x1fe000,%o3
- cmp %o4,%o3
- ld [%o0],%f0 ! load result with first argument
- bne 2f
- nop
- fabss %f0,%f0
- ld [%o1],%f1
- .volatile
- fcmps %f0,%f1 ! generate invalid for Snan
- .nonvolatile
- nop
- fba 5f
- nop
-2:
- ld [%o1],%o4
- sethi 0x1fffff,%o5
- or %o5,1023,%o5
- and %o4,%o5,%o4
- sethi 0x1fe000,%o3
- cmp %o4,%o3
- bne 4f
- nop
- ld [%o1],%f0 ! second argument inf
- fabss %f0,%f0
- ld [%o0],%f1
- .volatile
- fcmps %f0,%f1 ! generate invalid for Snan
- .nonvolatile
- nop
- fba 5f
- nop
-4:
- ld [%o1],%f3
- fsmuld %f0,%f0,%f0
- fsmuld %f3,%f3,%f2
- faddd %f2,%f0,%f0
- fsqrtd %f0,%f0
- fdtos %f0,%f0
-5:
- .end
-
- .inline __c_abs,1
- ld [%o0],%o4
- sethi 0x1fffff,%o5
- or %o5,1023,%o5
- and %o4,%o5,%o4
- sethi 0x1fe000,%o3
- cmp %o4,%o3
- ld [%o0],%f0
- bne 2f
- nop
- fabss %f0,%f0
- ld [%o0+4],%f1
- .volatile
- fcmps %f0,%f1 ! generate invalid for Snan
- .nonvolatile
- nop
- fba 5f
- nop
-2:
- ld [%o0+4],%o4
- sethi 0x1fffff,%o5
- or %o5,1023,%o5
- and %o4,%o5,%o4
- sethi 0x1fe000,%o3
- cmp %o4,%o3
- bne 4f
- nop
- ld [%o0+4],%f0
- fabss %f0,%f0
- ld [%o0],%f1
- .volatile
- fcmps %f0,%f1 ! generate invalid for Snan
- .nonvolatile
- nop
- fba 5f
- nop
-! store to 8-aligned address
-4:
- ld [%o0+4],%f3
- fsmuld %f0,%f0,%f0
- fsmuld %f3,%f3,%f2
- faddd %f2,%f0,%f0
- fsqrtd %f0,%f0
- fdtos %f0,%f0
-5:
- .end
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_mult(c, a, b)
-! complex *c, *a, *b;
-! {
-
- .inline __Fc_mult,3
-! 21 c->real = (a->real * b->real) - (a->imag * b->imag)
- ld [%o1+4],%f0 ! f0 = a->imag
- ld [%o2+4],%f1 ! f1 = b->imag
- ld [%o1],%f2 ! f2 = a->real
- fsmuld %f0,%f1,%f4 ! f4 = (a->imag * b->imag)
- ld [%o2],%f3 ! f3 = b->real
- fsmuld %f2,%f1,%f6 ! f6 = a->real * b->imag
- fsmuld %f2,%f3,%f8 ! f8 = a->real * b->real
- fsmuld %f0,%f3,%f10 ! f10 = a->imag * b->real
- fsubd %f8,%f4,%f0 ! f0 = ar*br - ai*bi
- faddd %f6,%f10,%f2 ! f2 = ai*br + ar*bi
- fdtos %f0,%f4
- fdtos %f2,%f6
- st %f4,[%o0]
- st %f6,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_div(c, a, b)
-! complex *c, *a, *b;
-! {
- .inline __Fc_div,3
- ld [%o2+4],%o3
- sethi %hi(0x7fffffff),%o4
- or %o4,%lo(0x7fffffff),%o4 ! [internal]
- andcc %o3,%o4,%g0
- ld [%o2],%f6 ! f6 gets reb
- bne 1f
- nop
- ld [%o1],%f0
- ld [%o2],%f1
- fdivs %f0,%f1,%f0
- st %f0,[%o0]
- ld [%o1+4],%f3
- fdivs %f3,%f1,%f3
- st %f3,[%o0+4]
- ba 2f
- nop
-1: ! [internal]
- sethi %hi(0x3ff00000),%o4
- or %g0,0,%o5
- std %o4,[%sp+0x48]
- ldd [%sp+0x48],%f8
- ld [%o2+4],%f10 ! f10 gets imb
- fsmuld %f6,%f6,%f16 ! f16/17 gets reb**2
- ld [%o1+4],%f4 ! f4 gets ima
- fsmuld %f10,%f10,%f12 ! f12/13 gets imb**2
- ld [%o1],%f19 ! f19 gets rea
- fsmuld %f4,%f10,%f0 ! f0/f1 gets ima*imb
- fsmuld %f19,%f6,%f2 ! f2/3 gets rea*reb
- faddd %f12,%f16,%f12 ! f12/13 gets reb**2+imb**2
- fdivd %f8,%f12,%f12 ! f12/13 gets 1/(reb**2+imb**2)
- faddd %f2,%f0,%f2 ! f2/3 gets rea*reb+ima*imb
- fsmuld %f4,%f6,%f24 ! f24/5 gets ima*reb
- fmuld %f2,%f12,%f2 ! f2/3 gets rec
- fsmuld %f19,%f10,%f10 ! f10/11 gets rea*imb
- fsubd %f24,%f10,%f10 ! f10/11 gets ima*reb-rea*imb
- fmuld %f10,%f12,%f12 ! f12 gets imc
- fdtos %f2,%f7 ! f7 gets rec
- fdtos %f12,%f15 ! f15 gets imc
- st %f7,[%o0]
- st %f15,[%o0+4]
-2:
- .end
-! }
-
- .inline .mul,2
- .volatile
- smul %o0,%o1,%o0
- rd %y,%o1
- sra %o0,31,%o2
- cmp %o1,%o2
- .nonvolatile
- .end
-
- .inline .umul,2
- .volatile
- umul %o0,%o1,%o0
- rd %y,%o1
- tst %o1
- .nonvolatile
- .end
-
- .inline .div,2
- sra %o0,31,%o4 ! extend sign
- .volatile
- wr %o4,%g0,%y
- cmp %o1,0xffffffff ! is divisor -1?
- be,a 1f ! if yes
- .volatile
- subcc %g0,%o0,%o0 ! simply negate dividend
- nop ! RT620 FABs A.0/A.1
- sdiv %o0,%o1,%o0 ! o0 contains quotient a/b
- .nonvolatile
-1:
- .end
-
- .inline .udiv,2
- .volatile
- wr %g0,%g0,%y
- nop
- nop
- nop
- udiv %o0,%o1,%o0 ! o0 contains quotient a/b
- .nonvolatile
- .end
-
- .inline .rem,2
- sra %o0,31,%o4 ! extend sign
- .volatile
- wr %o4,%g0,%y
- cmp %o1,0xffffffff ! is divisor -1?
- be,a 1f ! if yes
- .volatile
- or %g0,%g0,%o0 ! simply return 0
- nop ! RT620 FABs A.0/A.1
- sdiv %o0,%o1,%o2 ! o2 contains quotient a/b
- .nonvolatile
- smul %o2,%o1,%o4 ! o4 contains q*b
- sub %o0,%o4,%o0 ! o0 gets a-q*b
-1:
- .end
-
- .inline .urem,2
- .volatile
- wr %g0,%g0,%y
- nop
- nop
- nop
- udiv %o0,%o1,%o2 ! o2 contains quotient a/b
- .nonvolatile
- umul %o2,%o1,%o4 ! o4 contains q*b
- sub %o0,%o4,%o0 ! o0 gets a-q*b
- .end
-
- .inline .div_o3,2
- sra %o0,31,%o4 ! extend sign
- .volatile
- wr %o4,%g0,%y
- cmp %o1,0xffffffff ! is divisor -1?
- be,a 1f ! if yes
- .volatile
- subcc %g0,%o0,%o0 ! simply negate dividend
- mov %o0,%o3 ! o3 gets __remainder
- sdiv %o0,%o1,%o0 ! o0 contains quotient a/b
- .nonvolatile
- smul %o0,%o1,%o4 ! o4 contains q*b
- ba 2f
- sub %o3,%o4,%o3 ! o3 gets a-q*b
-1:
- mov %g0,%o3 ! __remainder is 0
-2:
- .end
-
- .inline .udiv_o3,2
- .volatile
- wr %g0,%g0,%y
- mov %o0,%o3 ! o3 gets __remainder
- nop
- nop
- udiv %o0,%o1,%o0 ! o0 contains quotient a/b
- .nonvolatile
- umul %o0,%o1,%o4 ! o4 contains q*b
- sub %o3,%o4,%o3 ! o3 gets a-q*b
- .end
-
- .inline __ieee754_sqrt,2
- std %o0,[%sp+0x48] ! store to 8-aligned address
- ldd [%sp+0x48],%f0
- fsqrtd %f0,%f0
- .end
-
- .inline __inline_sqrtf,1
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- fsqrts %f0,%f0
- .end
-
- .inline __inline_sqrt,2
- std %o0,[%sp+0x48] ! store to 8-aligned address
- ldd [%sp+0x48],%f0
- fsqrtd %f0,%f0
- .end
-
- .inline sqrtf,1
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- fsqrts %f0,%f0
- .end
-
- .inline sqrt,2
- std %o0,[%sp+0x48] ! store to 8-aligned address
- ldd [%sp+0x48],%f0
- fsqrtd %f0,%f0
- .end
-
- .inline __r_sqrt_,1
- ld [%o0],%f0
- fsqrts %f0,%f0
- .end
-
- .inline __d_sqrt_,1
- ld [%o0],%f0
- ld [%o0+4],%f1
- fsqrtd %f0,%f0
- .end
-
- .inline __ceil,2
- std %o0,[%sp+0x48]
- sethi %hi(0x80000000),%o5
- andn %o0,%o5,%o2
- sethi %hi(0x43300000),%o3
- st %g0,[%sp+0x54]
- subcc %o2,%o3,%g0
- bl 1f
- nop
- sethi %hi(0x3ff00000),%o2
- st %o2,[%sp+0x50]
- ldd [%sp+0x48],%f0
- ldd [%sp+0x50],%f2
- fmuld %f0,%f2,%f0
- ba 4f
- nop
-1:
- tst %o0
- st %o3,[%sp+0x50]
- ldd [%sp+0x50],%f2
- bge 2f
- nop
- fnegs %f2,%f2
-2:
- ldd [%sp+0x48],%f4
- faddd %f4,%f2,%f0
- fsubd %f0,%f2,%f0
- fcmpd %f0,%f4
- sethi %hi(0x3ff00000),%o2
- st %o2,[%sp+0x50]
- and %o0,%o5,%o4
- fbge 3f
- nop
- ldd [%sp+0x50],%f4
- faddd %f0,%f4,%f0
-3:
- st %f0,[%sp+0x48]
- ld [%sp+0x48],%o3
- andn %o3,%o5,%o3
- or %o4,%o3,%o3
- st %o3,[%sp+0x48]
- ld [%sp+0x48],%f0
-4:
- .end
-
- .inline __floor,2
- std %o0,[%sp+0x48]
- sethi %hi(0x80000000),%o5
- andn %o0,%o5,%o2
- sethi %hi(0x43300000),%o3
- st %g0,[%sp+0x54]
- subcc %o2,%o3,%g0
- bl 1f
- nop
- sethi %hi(0x3ff00000),%o2
- st %o2,[%sp+0x50]
- ldd [%sp+0x48],%f0
- ldd [%sp+0x50],%f2
- fmuld %f0,%f2,%f0
- ba 4f
- nop
-1:
- tst %o0
- st %o3,[%sp+0x50]
- ldd [%sp+0x50],%f2
- bge 2f
- nop
- fnegs %f2,%f2
-2:
- ldd [%sp+0x48],%f4
- faddd %f4,%f2,%f0
- fsubd %f0,%f2,%f0
- fcmpd %f0,%f4
- sethi %hi(0x3ff00000),%o2
- st %o2,[%sp+0x50]
- ldd [%sp+0x50],%f4
- and %o0,%o5,%o4
- fble 3f
- nop
- fsubd %f0,%f4,%f0
-3:
- st %f0,[%sp+0x48]
- ld [%sp+0x48],%o3
- andn %o3,%o5,%o3
- or %o4,%o3,%o3
- st %o3,[%sp+0x48]
- ld [%sp+0x48],%f0
-4:
- .end
-
- .inline __ilogb,2
- sethi %hi(0x7ff00000),%o4
- andcc %o4,%o0,%o2
- bne 1f
- nop
- sethi %hi(0x43500000),%o3
- std %o0,[%sp+0x48]
- st %o3,[%sp+0x50]
- st %g0,[%sp+0x54]
- ldd [%sp+0x48],%f0
- ldd [%sp+0x50],%f2
- fmuld %f0,%f2,%f0
- sethi %hi(0x80000001),%o0
- or %o0,%lo(0x80000001),%o0
- st %f0,[%sp+0x48]
- ld [%sp+0x48],%o2
- andcc %o2,%o4,%o2
- srl %o2,20,%o2
- be 2f
- nop
- sub %o2,0x435,%o0
- ba 2f
- nop
-1:
- subcc %o4,%o2,%g0
- srl %o2,20,%o3
- bne 0f
- nop
- sethi %hi(0x7fffffff),%o0
- or %o0,%lo(0x7fffffff),%o0
- ba 2f
- nop
-0:
- sub %o3,0x3ff,%o0
-2:
- .end
-
- .inline __rint,2
- std %o0,[%sp+0x48]
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o2
- ldd [%sp+0x48],%f0
- sethi %hi(0x43300000),%o3
- st %g0,[%sp+0x50]
- st %g0,[%sp+0x54]
- subcc %o2,%o3,%g0
- bl 1f
- nop
- sethi %hi(0x3ff00000),%o2
- st %o2,[%sp+0x50]
- ldd [%sp+0x50],%f2
- fmuld %f0,%f2,%f0
- ba 3f
- nop
-1:
- tst %o0
- st %o3,[%sp+0x48]
- st %g0,[%sp+0x4c]
- ldd [%sp+0x48],%f2
- bge 2f
- nop
- fnegs %f2,%f2
-2:
- faddd %f0,%f2,%f0
- fcmpd %f0,%f2
- fbne 0f
- nop
- ldd [%sp+0x50],%f0
- bge 3f
- nop
- fnegs %f0,%f0
- ba 3f
- nop
-0:
- fsubd %f0,%f2,%f0
-3:
- .end
-
- .inline __rintf,1
- st %o0,[%sp+0x48]
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o2
- ld [%sp+0x48],%f0
- sethi %hi(0x4b000000),%o3
- st %g0,[%sp+0x50]
- subcc %o2,%o3,%g0
- bl 1f
- nop
- sethi %hi(0x3f800000),%o2
- st %o2,[%sp+0x50]
- ld [%sp+0x50],%f2
- fmuls %f0,%f2,%f0
- ba 3f
- nop
-1:
- tst %o0
- st %o3,[%sp+0x48]
- ld [%sp+0x48],%f2
- bge 2f
- nop
- fnegs %f2,%f2
-2:
- fadds %f0,%f2,%f0
- fcmps %f0,%f2
- fbne 0f
- nop
- ld [%sp+0x50],%f0
- bge 3f
- nop
- fnegs %f0,%f0
- ba 3f
- nop
-0:
- fsubs %f0,%f2,%f0
-3:
- .end
-
- .inline __min_subnormal,0
- set 0x0,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0x1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __d_min_subnormal_,0
- set 0x0,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0x1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __min_subnormalf,0
- set 0x1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_min_subnormal_,0
- set 0x1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __max_subnormal,0
- set 0x000fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0xffffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __d_max_subnormal_,0
- set 0x000fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0xffffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __max_subnormalf,0
- set 0x007fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_max_subnormal_,0
- set 0x007fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __min_normal,0
- set 0x00100000,%o0
- set 0x0,%o1
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __d_min_normal_,0
- set 0x00100000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0x0,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __min_normalf,0
- set 0x00800000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_min_normal_,0
- set 0x00800000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __max_normal,0
- set 0x7fefffff,%o0
- set 0xffffffff,%o1
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __d_max_normal_,0
- set 0x7fefffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0xffffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __max_normalf,0
- set 0x7f7fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_max_normal_,0
- set 0x7f7fffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __infinity,0
- set 0x7ff00000,%o0
- set 0x0,%o1
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __infinity,0
- set 0x7ff00000,%o0
- set 0x0,%o1
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __d_infinity_,0
- set 0x7ff00000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0x0,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __infinityf,0
- set 0x7f800000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_infinity_,0
- set 0x7f800000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __signaling_nan,0
- set 0x7ff00000,%o0
- set 0x1,%o1
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __d_signaling_nan_,0
- set 0x7ff00000,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0x1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __signaling_nanf,0
- set 0x7f800001,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_signaling_nan_,0
- set 0x7f800001,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __quiet_nan,0
- set 0x7fffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0xffffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __d_quiet_nan_,0
- set 0x7fffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- set 0xffffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f1
- .end
-
- .inline __quiet_nanf,0
- set 0x7fffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_quiet_nan_,0
- set 0x7fffffff,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __swapEX,1
- and %o0,0x1f,%o1
- sll %o1,5,%o1 ! shift input to aexc bit location
- .volatile
- st %fsr,[%sp+0x44]
- ld [%sp+0x44],%o0 ! o0 = fsr
- andn %o0,0x3e0,%o2
- or %o1,%o2,%o1 ! o1 = new fsr
- st %o1,[%sp+0x44]
- ld [%sp+0x44],%fsr
- srl %o0,5,%o0
- and %o0,0x1f,%o0
- .nonvolatile
- .end
-
- .inline _QgetRD,0
- st %fsr,[%sp+0x44]
- ld [%sp+0x44],%o0 ! o0 = fsr
- srl %o0,30,%o0 ! return __round control value
- .end
-
- .inline _QgetRP,0
- or %g0,%g0,%o0
- .end
-
- .inline __swapRD,1
- and %o0,0x3,%o0
- sll %o0,30,%o1 ! shift input to RD bit location
- .volatile
- st %fsr,[%sp+0x44]
- ld [%sp+0x44],%o0 ! o0 = fsr
- set 0xc0000000,%o4 ! mask of rounding direction bits
- andn %o0,%o4,%o2
- or %o1,%o2,%o1 ! o1 = new fsr
- st %o1,[%sp+0x44]
- ld [%sp+0x44],%fsr
- srl %o0,30,%o0
- and %o0,0x3,%o0
- .nonvolatile
- .end
-!
-! On the SPARC, __swapRP is a no-op; always return 0 for backward compatibility
-!
-
- .inline __swapRP,1
- or %g0,%g0,%o0
- .end
-
- .inline __swapTE,1
- and %o0,0x1f,%o0
- sll %o0,23,%o1 ! shift input to TEM bit location
- .volatile
- st %fsr,[%sp+0x44]
- ld [%sp+0x44],%o0 ! o0 = fsr
- set 0x0f800000,%o4 ! mask of TEM (Trap Enable Mode bits)
- andn %o0,%o4,%o2
- or %o1,%o2,%o1 ! o1 = new fsr
- st %o1,[%sp+0x48]
- ld [%sp+0x48],%fsr
- srl %o0,23,%o0
- and %o0,0x1f,%o0
- .nonvolatile
- .end
-
- .inline fp_class,2
- sethi %hi(0x80000000),%o2 ! o2 gets 80000000
- andn %o0,%o2,%o0 ! o0-o1 gets abs(x)
- orcc %o0,%o1,%g0 ! set cc as x is zero/nonzero
- bne 1f ! branch if x is nonzero
- nop
- mov 0,%o0
- ba 2f ! x is 0
- nop
-1:
- sethi %hi(0x7ff00000),%o2 ! o2 gets 7ff00000
- andcc %o0,%o2,%g0 ! cc set by __exp field of x
- bne 1f ! branch if normal or max __exp
- nop
- mov 1,%o0
- ba 2f ! x is subnormal
- nop
-1:
- cmp %o0,%o2
- bge 1f ! branch if x is max __exp
- nop
- mov 2,%o0
- ba 2f ! x is normal
- nop
-1:
- andn %o0,%o2,%o0 ! o0 gets msw __significand field
- orcc %o0,%o1,%g0 ! set cc by OR __significand
- bne 1f ! Branch if __nan
- nop
- mov 3,%o0
- ba 2f ! x is __infinity
- nop
-1:
- sethi %hi(0x00080000),%o2
- andcc %o0,%o2,%g0 ! set cc by quiet/sig bit
- be 1f ! Branch if signaling
- nop
- mov 4,%o0 ! x is quiet NaN
- ba 2f
- nop
-1:
- mov 5,%o0 ! x is signaling NaN
-2:
- .end
-
- .inline fp_classf,1
- sethi %hi(0x80000000),%o2
- andncc %o0,%o2,%o0
- bne 1f
- nop
- mov 0,%o0
- ba 2f ! x is 0
- nop
-1:
- sethi %hi(0x7f800000),%o2
- andcc %o0,%o2,%g0
- bne 1f
- nop
- mov 1,%o0
- ba 2f ! x is subnormal
- nop
-1:
- cmp %o0,%o2
- bge 1f
- nop
- mov 2,%o0
- ba 2f ! x is normal
- nop
-1:
- bg 1f
- nop
- mov 3,%o0
- ba 2f ! x is __infinity
- nop
-1:
- sethi %hi(0x00400000),%o2
- andcc %o0,%o2,%g0
- mov 4,%o0 ! x is quiet NaN
- bne 2f
- nop
- mov 5,%o0 ! x is signaling NaN
-2:
- .end
-
- .inline __ir_fp_class_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2
- andncc %o0,%o2,%o0
- bne 1f
- nop
- mov 0,%o0
- ba 2f ! x is 0
- nop
-1:
- sethi %hi(0x7f800000),%o2
- andcc %o0,%o2,%g0
- bne 1f
- nop
- mov 1,%o0
- ba 2f ! x is subnormal
- nop
-1:
- cmp %o0,%o2
- bge 1f
- nop
- mov 2,%o0
- ba 2f ! x is normal
- nop
-1:
- bg 1f
- nop
- mov 3,%o0
- ba 2f ! x is __infinity
- nop
-1:
- sethi %hi(0x00400000),%o2
- andcc %o0,%o2,%g0
- mov 4,%o0 ! x is quiet NaN
- bne 2f
- nop
- mov 5,%o0 ! x is signaling NaN
-2:
- .end
-
- .inline __copysign,4
- set 0x80000000,%o3
- and %o2,%o3,%o2
- andn %o0,%o3,%o0
- or %o0,%o2,%o0
- std %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __copysignf,2
- set 0x80000000,%o2
- andn %o0,%o2,%o0
- and %o1,%o2,%o1
- or %o0,%o1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline __r_copysign_,2
- ld [%o0],%o0
- ld [%o1],%o1
- set 0x80000000,%o2
- andn %o0,%o2,%o0
- and %o1,%o2,%o1
- or %o0,%o1,%o0
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- .end
-
- .inline _finite,2
- set 0x7ff00000,%o1
- and %o0,%o1,%o0
- cmp %o0,%o1
- mov 1,%o0
- bne 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __finitef,2
- set 0x7f800000,%o1
- and %o0,%o1,%o0
- cmp %o0,%o1
- mov 1,%o0
- bne 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __ir_finite_,1
- ld [%o0],%o0
- set 0x7f800000,%o1
- and %o0,%o1,%o0
- cmp %o0,%o1
- mov 1,%o0
- bne 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __signbit,1
- srl %o0,31,%o0
- .end
-
- .inline __signbitf,1
- srl %o0,31,%o0
- .end
-
- .inline __ir_signbit_,1
- ld [%o0],%o0
- srl %o0,31,%o0
- .end
-
- .inline __isinf,2
- tst %o1
- sethi %hi(0x80000000),%o2
- bne 1f
- nop
- andn %o0,%o2,%o0
- sethi %hi(0x7ff00000),%o2
- cmp %o0,%o2
- mov 1,%o0
- be 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __isinff,1
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0 ! o0 gets abs(x)
- sethi %hi(0x7f800000),%o2
- cmp %o0,%o2
- mov 0,%o0
- bne 1f ! Branch if not inf.
- nop
- mov 1,%o0
-1:
- .end
-
- .inline __ir_isinf_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0 ! o0 gets abs(x)
- sethi %hi(0x7f800000),%o2
- cmp %o0,%o2
- mov 0,%o0
- bne 1f ! Branch if not inf.
- nop
- mov 1,%o0
-1:
- .end
-
- .inline __isnan,2
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sub %g0,%o1,%o3
- or %o1,%o3,%o1
- srl %o1,31,%o1
- or %o0,%o1,%o0
- sethi %hi(0x7ff00000),%o4
- sub %o4,%o0,%o0
- srl %o0,31,%o0
- .end
-
- .inline __isnanf,1
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sethi %hi(0x7f800000),%o1
- sub %o1,%o0,%o0
- srl %o0,31,%o0
- .end
-
- .inline __ir_isnan_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sethi %hi(0x7f800000),%o1
- sub %o1,%o0,%o0
- srl %o0,31,%o0
- .end
-
- .inline __isnormal,2
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sethi %hi(0x7ff00000),%o2
- cmp %o0,%o2
- sethi %hi(0x00100000),%o2
- bge 1f
- nop
- cmp %o0,%o2
- mov 1,%o0
- bge 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __isnormalf,1
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sethi %hi(0x7f800000),%o2
- cmp %o0,%o2
- sethi %hi(0x00800000),%o2
- bge 1f
- nop
- cmp %o0,%o2
- mov 1,%o0
- bge 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __ir_isnormal_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- sethi %hi(0x7f800000),%o2
- cmp %o0,%o2
- sethi %hi(0x00800000),%o2
- bge 1f
- nop
- cmp %o0,%o2
- mov 1,%o0
- bge 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __issubnormal,2
- sethi %hi(0x80000000),%o2 ! o2 gets 80000000
- andn %o0,%o2,%o0 ! o0/o1 gets abs(x)
- sethi %hi(0x00100000),%o2 ! o2 gets 00100000
- cmp %o0,%o2
- bge 1f ! branch if x norm or max __exp
- nop
- orcc %o0,%o1,%g0
- be 1f ! Branch if x zero
- nop
- mov 1,%o0 ! x is subnormal
- ba 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __issubnormalf,1
- sethi %hi(0x80000000),%o2 ! o2 gets 80000000
- andn %o0,%o2,%o0 ! o0 gets abs(x)
- sethi %hi(0x00800000),%o2 ! o2 gets 00800000
- cmp %o0,%o2
- bge 1f ! branch if x norm or max __exp
- nop
- orcc %o0,%g0,%g0
- be 1f ! Branch if x zero
- nop
- mov 1,%o0 ! x is subnormal
- ba 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __ir_issubnormal_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2 ! o2 gets 80000000
- andn %o0,%o2,%o0 ! o0 gets abs(x)
- sethi %hi(0x00800000),%o2 ! o2 gets 00800000
- cmp %o0,%o2
- bge 1f ! branch if x norm or max __exp
- nop
- orcc %o0,%g0,%g0
- be 1f ! Branch if x zero
- nop
- mov 1,%o0 ! x is subnormal
- ba 2f
- nop
-1:
- mov 0,%o0
-2:
- .end
-
- .inline __iszero,2
- sethi %hi(0x80000000),%o2
- andn %o0,%o2,%o0
- orcc %o0,%o1,%g0
- mov 1,%o0
- be 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __iszerof,1
- sethi %hi(0x80000000),%o2
- andncc %o0,%o2,%o0
- mov 1,%o0
- be 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __ir_iszero_,1
- ld [%o0],%o0
- sethi %hi(0x80000000),%o2
- andncc %o0,%o2,%o0
- mov 1,%o0
- be 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline abs,1
- sra %o0,31,%o1
- xor %o0,%o1,%o0
- sub %o0,%o1,%o0
- .end
-
- .inline fabs,2
- st %o0,[%sp+0x48]
- st %o1,[%sp+0x4c]
- ldd [%sp+0x48],%f0
- fabsd %f0,%f0
- .end
-
- .inline fabsf,1
- st %o0,[%sp+0x44]
- ld [%sp+0x44],%f0
- fabss %f0,%f0
- .end
-
- .inline __r_fabs_,1
- ld [%o0],%f0
- fabss %f0,%f0
- .end
-!
-! __nintf - f77 NINT(REAL*4)
-!
-
- .inline __nintf,1
- srl %o0,30-7,%g1
- sethi %hi(0x7fffff),%o2
- st %o0,[%sp+0x44]
- and %g1,0xff,%g1
- or %o2,%lo(0x7fffff),%o2
- sethi %hi(1<<22),%o4
- subcc %g1,127+31,%g0
- and %o0,%o2,%o3
- bl 0f
- nop
- sethi %hi(0xcf000000),%o2
- sethi %hi(0x80000000),%g1
- subcc %o0,%o2,%g0
- or %g1,%g0,%o0
- be 9f
- nop
- ld [%sp+0x44],%f0
- fstoi %f0,%f0
- st %f0,[%sp+0x44]
- ld [%sp+0x44],%o0
- ba 9f
- nop
-0:
- add %o4,%o4,%o5
- or %o3,%o5,%o3
- sra %o0,31-0,%o2
- subcc %g1,127,%g1
- srl %o4,%g1,%o4
- bge 1f
- nop
- subcc %g1,-1,%g0
- or %g0,0,%o0
- bne 2f
- nop
- or %g0,1,%o0
- ba 2f
- nop
-1:
- add %o3,%o4,%o3
- or %g0,23,%o0
- subcc %o0,%g1,%o0
- bl 1f
- nop
- srl %o3,%o0,%o0
- ba 2f
- nop
-1:
- sub %g0,%o0,%o0
- sll %o3,%o0,%o0
-2:
- xor %o0,%o2,%o0
- and %o2,1,%o2
- add %o0,%o2,%o0
-9:
- .end
-
- .inline __il_nint,1
- ld [%o0],%o0
- sra %o0,0,%o0
- srlx %o0,31-8,%g1
- or %g0,1,%o2
- sllx %o2,23-1,%o4
- and %g1,0xff,%g1
- sllx %o2,63-0,%o2
- subcc %g1,127+63,%g0
- bl 0f
- nop
- st %o0,[%sp+0x48]
- ld [%sp+0x48],%f0
- fstox %f0,%f0
- std %f0,[%sp+0x48]
- ldx [%sp+0x48],%o1
- ba 9f
- nop
-0:
- add %o4,%o4,%o5
- srax %o2,63-23,%o2
- sub %g1,127+23,%o1
- xnor %o2,%g0,%o2
- and %o0,%o2,%o3
- or %o3,%o5,%o3
- srax %o0,63-0,%o2
- subcc %g1,127,%g1
- bge 1f
- nop
- subcc %g1,-1,%g0
- or %g0,0,%o0
- bne 2f
- nop
- or %g0,1,%o0
- ba 2f
- nop
-1:
- brlz,pt %o1,3f
- nop
- sub %g1,23,%o0
- sllx %o3,%o0,%o0
- ba 2f
- nop
-3:
- srlx %o4,%g1,%o4
- add %o3,%o4,%o3
- or %g0,23,%o0
- sub %o0,%g1,%o0
- srlx %o3,%o0,%o0
-2:
- xor %o0,%o2,%o0
- sub %o0,%o2,%o1
-9:
- srlx %o1,32,%o0
- .end
-!
-! __i_dnnt - f77 NINT(REAL*8)
-!
-
- .inline __i_dnnt,1
- ld [%o0],%o1
- sllx %o1,32,%o1
- ld [%o0+4],%o0
- or %o0,%o1,%o0
- srlx %o0,63-11,%g1
- or %g0,1,%o2
- stx %o0,[%sp+0x48]
- sllx %o2,52-1,%o4
- and %g1,0x7ff,%g1
- sllx %o2,63-0,%o2
- subcc %g1,1023+32,%g0
- bl 0f
- nop
- ldd [%sp+0x48],%f0
- ba 8f
- nop
-0:
- add %o4,%o4,%o5
- srax %o2,63-52,%o2
- sub %g1,1023+30,%o1
- xnor %o2,%g0,%o2
- and %o0,%o2,%o3
- or %o3,%o5,%o3
- srax %o0,63-0,%o2
- subcc %g1,1023,%g1
- bge 1f
- nop
- subcc %g1,-1,%g0
- or %g0,0,%o0
- bne 2f
- nop
- or %g0,1,%o0
- ba 2f
- nop
-1:
- srlx %o4,%g1,%o4
- add %o3,%o4,%o3
- or %g0,52,%o0
- sub %o0,%g1,%o0
- srlx %o3,%o0,%o0
-2:
- xor %o0,%o2,%o0
- sub %o0,%o2,%o0
- brlz,pt %o1,9f
- nop
- stx %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- fxtod %f0,%f0
-8:
- fdtoi %f0,%f0
- st %f0,[%sp+0x44]
- ld [%sp+0x44],%o0
-9:
- .end
-
- .inline __il_dnnt,1
- ld [%o0],%o1
- sllx %o1,32,%o1
- ld [%o0+4],%o0
- or %o0,%o1,%o0
- srlx %o0,63-11,%g1
- or %g0,1,%o2
- sllx %o2,52-1,%o4
- and %g1,0x7ff,%g1
- sllx %o2,63-0,%o2
- subcc %g1,1023+63,%g0
- bl 0f
- nop
- stx %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- fdtox %f0,%f0
- std %f0,[%sp+0x48]
- ldx [%sp+0x48],%o1
- ba 9f
- nop
-0:
- add %o4,%o4,%o5
- srax %o2,63-52,%o2
- sub %g1,1023+52,%o1
- xnor %o2,%g0,%o2
- and %o0,%o2,%o3
- or %o3,%o5,%o3
- srax %o0,63-0,%o2
- subcc %g1,1023,%g1
- bge 1f
- nop
- subcc %g1,-1,%g0
- or %g0,0,%o0
- bne 2f
- nop
- or %g0,1,%o0
- ba 2f
- nop
-1:
- brlz,pt %o1,3f
- nop
- sub %g1,52,%o0
- sllx %o3,%o0,%o0
- ba 2f
- nop
-3:
- srlx %o4,%g1,%o4
- add %o3,%o4,%o3
- or %g0,52,%o0
- sub %o0,%g1,%o0
- srlx %o3,%o0,%o0
-2:
- xor %o0,%o2,%o0
- sub %o0,%o2,%o1
-9:
- srlx %o1,32,%o0
- .end
-
- .inline __anintf,1
- or %g0,1,%o1
- srl %o0,23,%g1
- and %g1,0xff,%g1
- sub %g0,%g1,%g1
- add %g1,0x95,%g1
- subcc %g1,23,%g0
- sll %o1,%g1,%o1
- sub %o1,1,%o2
- bcs 1f
- nop
- be 2f
- nop
- bl 3f
- nop
- sethi %hi(0x80000000),%o1
- and %o0,%o1,%o0
- ba 3f
- nop
-1:
- and %o0,%o1,%o1
-2:
- add %o0,%o1,%o0
- andn %o0,%o2,%o0
-3:
- st %o0,[%sp+0x48]
- ld [%sp+0x48],%f0
- .end
-
- .inline __anint,2
- sllx %o0,32,%o0
- or %o0,%o1,%o0
- or %g0,1,%o1
- srlx %o0,52,%g1
- and %g1,0x7ff,%g1
- sub %g0,%g1,%g1
- add %g1,0x432,%g1
- subcc %g1,52,%g0
- sllx %o1,%g1,%o1
- sub %o1,1,%o2
- bcs,pt %icc,1f
- nop
- be,pt %icc,2f
- nop
- bl,pt %icc,3f
- nop
- srlx %o0,63,%o0
- sllx %o0,63,%o0
- ba 3f
- nop
-1:
- and %o0,%o1,%o1
-2:
- add %o0,%o1,%o0
- andn %o0,%o2,%o0
-3:
- stx %o0,[%sp+0x48]
- ldd [%sp+0x48],%f0
- .end
-
- .inline __Fz_minus,3
- ld [%o1],%f0
- ld [%o1+0x4],%f1
- ld [%o2],%f4
- ld [%o2+0x4],%f5
- fsubd %f0,%f4,%f0
- ld [%o1+8],%f2
- ld [%o1+0xc],%f3
- ld [%o2+8],%f6
- ld [%o2+0xc],%f7
- fsubd %f2,%f6,%f2
- st %f0,[%o0+0x0]
- st %f1,[%o0+0x4]
- st %f2,[%o0+0x8]
- st %f3,[%o0+0xc]
- .end
-
- .inline __Fz_add,3
- ld [%o1],%f0
- ld [%o1+0x4],%f1
- ld [%o2],%f4
- ld [%o2+0x4],%f5
- faddd %f0,%f4,%f0
- ld [%o1+8],%f2
- ld [%o1+0xc],%f3
- ld [%o2+8],%f6
- ld [%o2+0xc],%f7
- faddd %f2,%f6,%f2
- st %f0,[%o0+0x0]
- st %f1,[%o0+0x4]
- st %f2,[%o0+0x8]
- st %f3,[%o0+0xc]
- .end
-
- .inline __Fz_neg,2
- ld [%o1],%f0
- fnegs %f0,%f0
- ld [%o1+0x4],%f1
- st %f1,[%o0+0x4]
- ld [%o1+8],%f2
- fnegs %f2,%f2
- ld [%o1+0xc],%f3
- st %f3,[%o0+0xc]
- st %f0,[%o0]
- st %f2,[%o0+0x8]
- .end
-
- .inline __Ff_conv_z,2
- st %o1,[%sp+0x44]
- ld [%sp+0x44],%f0
- fstod %f0,%f0
- st %g0,[%o0+0x8]
- st %g0,[%o0+0xc]
- st %f1,[%o0+0x4]
- st %f0,[%o0]
- .end
-
- .inline __Fz_conv_f,1
- ld [%o0],%f0
- ld [%o0+4],%f1
- fdtos %f0,%f0
- .end
-
- .inline __Fz_conv_i,1
- ld [%o0],%f0
- ld [%o0+4],%f1
- fdtoi %f0,%f0
- st %f0,[%sp+0x44]
- ld [%sp+0x44],%o0
- .end
-
- .inline __Fi_conv_z,2
- st %o1,[%sp+0x44]
- ld [%sp+0x44],%f0
- fitod %f0,%f0
- st %g0,[%o0+0x8]
- st %g0,[%o0+0xc]
- st %f1,[%o0+0x4]
- st %f0,[%o0]
- .end
-
- .inline __Fz_conv_d,1
- ld [%o0],%f0
- ld [%o0+4],%f1
- .end
-
- .inline __Fd_conv_z,3
- st %o1,[%o0]
- st %o2,[%o0+0x4]
- st %g0,[%o0+0x8]
- st %g0,[%o0+0xc]
- .end
-
- .inline __Fz_conv_c,2
- ldd [%o1],%f0
- fdtos %f0,%f0
- st %f0,[%o0]
- ldd [%o1+0x8],%f2
- fdtos %f2,%f1
- st %f1,[%o0+0x4]
- .end
-
- .inline __Fz_eq,2
- ld [%o0],%f0
- ld [%o0+4],%f1
- ld [%o1],%f2
- ld [%o1+4],%f3
- fcmpd %f0,%f2
- mov %o0,%o2
- mov 0,%o0
- fbne 1f
- nop
- ld [%o2+8],%f0
- ld [%o2+12],%f1
- ld [%o1+8],%f2
- ld [%o1+12],%f3
- fcmpd %f0,%f2
- nop
- fbne 1f
- nop
- mov 1,%o0
-1:
- .end
-
- .inline __Fz_ne,2
- ld [%o0],%f0
- ld [%o0+4],%f1
- ld [%o1],%f2
- ld [%o1+4],%f3
- fcmpd %f0,%f2
- mov %o0,%o2
- mov 1,%o0
- fbne 1f
- nop
- ld [%o2+8],%f0
- ld [%o2+12],%f1
- ld [%o1+8],%f2
- ld [%o1+12],%f3
- fcmpd %f0,%f2
- nop
- fbne 1f
- nop
- mov 0,%o0
-1:
- .end
-
- .inline __c_cmplx,3
- ld [%o1],%o1
- st %o1,[%o0]
- ld [%o2],%o2
- st %o2,[%o0+4]
- .end
-
- .inline __d_cmplx,3
- ld [%o1],%f0
- st %f0,[%o0]
- ld [%o1+4],%f1
- st %f1,[%o0+4]
- ld [%o2],%f0
- st %f0,[%o0+0x8]
- ld [%o2+4],%f1
- st %f1,[%o0+0xc]
- .end
-
- .inline __r_cnjg,2
- ld [%o1+0x4],%f1
- fnegs %f1,%f1
- ld [%o1],%f0
- st %f0,[%o0]
- st %f1,[%o0+4]
- .end
-
- .inline __d_cnjg,2
- ld [%o1+0x8],%f0
- fnegs %f0,%f0
- ld [%o1+0xc],%f1
- st %f1,[%o0+0xc]
- ld [%o1+0x0],%f1
- st %f1,[%o0+0x0]
- ld [%o1+0x4],%f1
- st %f1,[%o0+0x4]
- st %f0,[%o0+0x8]
- .end
-
- .inline __r_dim,2
- st %g0,[%sp+0x48]
- ld [%sp+0x48],%f4
- ld [%o0],%f0
- ld [%o1],%f2
- fcmps %fcc0,%f0,%f2
- fmovsule %fcc0,%f4,%f2
- fsubs %f0,%f2,%f0
- fmovsule %fcc0,%f4,%f0
- .end
-
- .inline __d_dim,2
- stx %g0,[%sp+0x48]
- ldd [%sp+0x48],%f4
- ld [%o0],%f0
- ld [%o0+4],%f1
- ld [%o1],%f2
- ld [%o1+4],%f3
- fcmpd %fcc0,%f0,%f2
- fmovdule %fcc0,%f4,%f2
- fsubd %f0,%f2,%f0
- fmovdule %fcc0,%f4,%f0
- .end
-
- .inline __r_imag,1
- ld [%o0+4],%f0
- .end
-
- .inline __d_imag,1
- ld [%o0+8],%f0
- ld [%o0+0xc],%f1
- .end
-
- .inline __f95_signf,2
- ld [%o0],%f0
- ld [%o1],%o1
- fabss %f0,%f0
- fnegs %f0,%f1
- sra %o1,0,%o1
- fmovrslz %o1,%f1,%f0
- .end
-
- .inline __f95_sign,2
- ld [%o0],%f0
- ld [%o0+4],%f1
- ld [%o1],%o1
- fabsd %f0,%f0
- fnegd %f0,%f2
- sra %o1,0,%o1
- fmovrdlz %o1,%f2,%f0
- .end
-
- .inline __r_sign,2
- ld [%o0],%f0
- ld [%o1],%o1
- fabss %f0,%f0
- fnegs %f0,%f1
- sub %o1,1,%o0
- and %o1,%o0,%o1
- sra %o1,0,%o1
- fmovrslz %o1,%f1,%f0
- .end
-
- .inline __d_sign,2
- ld [%o0],%f0
- ld [%o0+4],%f1
- ld [%o1],%o0
- sllx %o0,32,%o0
- ld [%o1+4],%o1
- or %o1,%o0,%o1
- fabsd %f0,%f0
- fnegd %f0,%f2
- sub %o1,1,%o0
- and %o1,%o0,%o1
- fmovrdlz %o1,%f2,%f0
- .end
-
- .inline __Fz_mult,3
- ld [%o1],%f0
- ld [%o1+0x4],%f1
- ld [%o2],%f4
- ld [%o2+0x4],%f5
- fmuld %f0,%f4,%f8 ! f8 = r1*r2
- ld [%o1+0x8],%f2
- ld [%o1+0xc],%f3
- ld [%o2+0x8],%f6
- ld [%o2+0xc],%f7
- fmuld %f2,%f6,%f10 ! f10= i1*i2
- fsubd %f8,%f10,%f12 ! f12= r1*r2-i1*i2
- st %f12,[%o0]
- st %f13,[%o0+4]
- fmuld %f0,%f6,%f14 ! f14= r1*i2
- fmuld %f2,%f4,%f16 ! f16= r2*i1
- faddd %f14,%f16,%f2 ! f2 = r1*i2+r2*i1
- st %f2,[%o0+8]
- st %f3,[%o0+12]
- .end
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_minus(c, a, b)
-! complex *c, *a, *b;
-! {
-
- .inline __Fc_minus,3
-! 30 c->real = a->real - b->real
- ld [%o1],%f0
- ld [%o2],%f1
- fsubs %f0,%f1,%f2
-! 31 c->imag = a->imag - b->imag
- ld [%o1+4],%f3
- ld [%o2+4],%f4
- fsubs %f3,%f4,%f5
- st %f2,[%o0]
- st %f5,[%o0+4]
- .end
- }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_add(c, a, b)
-! complex *c, *a, *b;
-! {
-
- .inline __Fc_add,3
-! 39 c->real = a->real + b->real
- ld [%o1],%f0
- ld [%o2],%f1
- fadds %f0,%f1,%f2
-! 40 c->imag = a->imag + b->imag
- ld [%o1+4],%f3
- ld [%o2+4],%f4
- fadds %f3,%f4,%f5
- st %f2,[%o0]
- st %f5,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_neg(c, a)
-! complex *c, *a;
-! {
-
- .inline __Fc_neg,2
-! 48 c->real = - a->real
- ld [%o1],%f0
- fnegs %f0,%f1
-! 49 c->imag = - a->imag
- ld [%o1+4],%f2
- fnegs %f2,%f3
- st %f1,[%o0]
- st %f3,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Ff_conv_c(c, x)
-! complex *c;
-! FLOATPARAMETER x;
-! {
-
- .inline __Ff_conv_c,2
-! 59 c->real = x
- st %o1,[%o0]
-! 60 c->imag = 0.0
- st %g0,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! FLOATFUNCTIONTYPE
-! __Fc_conv_f(c)
-! complex *c;
-! {
-
- .inline __Fc_conv_f,1
-! 69 RETURNFLOAT(c->real)
- ld [%o0],%f0
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! int
-! __Fc_conv_i(c)
-! complex *c;
-! {
-
- .inline __Fc_conv_i,1
-! 78 return (int)c->real
- ld [%o0],%f0
- fstoi %f0,%f1
- st %f1,[%sp+68]
- ld [%sp+68],%o0
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fi_conv_c(c, i)
-! complex *c;
-! int i;
-! {
-
- .inline __Fi_conv_c,2
-! 88 c->real = (float)i
- st %o1,[%sp+68]
- ld [%sp+68],%f0
- fitos %f0,%f1
- st %f1,[%o0]
-! 89 c->imag = 0.0
- st %g0,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! double
-! __Fc_conv_d(c)
-! complex *c;
-! {
-
- .inline __Fc_conv_d,1
-! 98 return (double)c->real
- ld [%o0],%f2
- fstod %f2,%f0
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fd_conv_c(c, x)
-! complex *c;
-! double x;
-! {
-
- .inline __Fd_conv_c,2
- st %o1,[%sp+72]
- st %o2,[%sp+76]
-! 109 c->real = (float)(x)
- ldd [%sp+72],%f0
- fdtos %f0,%f1
- st %f1,[%o0]
-! 110 c->imag = 0.0
- st %g0,[%o0+4]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! void
-! __Fc_conv_z(result, c)
-! dcomplex *result;
-! complex *c;
-! {
-
- .inline __Fc_conv_z,2
-! 120 result->dreal = (double)c->real
- ld [%o1],%f0
- fstod %f0,%f2
- st %f2,[%o0]
- st %f3,[%o0+4]
-! 121 result->dimag = (double)c->imag
- ld [%o1+4],%f3
- fstod %f3,%f4
- st %f4,[%o0+8]
- st %f5,[%o0+12]
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! int
-! __Fc_eq(x, y)
-! complex *x, *y;
-! {
-
- .inline __Fc_eq,2
-! return (x->real == y->real) && (x->imag == y->imag);
- ld [%o0],%f0
- ld [%o1],%f2
- mov %o0,%o2
- fcmps %f0,%f2
- mov 0,%o0
- fbne 1f
- nop
- ld [%o2+4],%f0
- ld [%o1+4],%f2
- fcmps %f0,%f2
- nop
- fbne 1f
- nop
- mov 1,%o0
-1:
- .end
-! }
-!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-! int
-! __Fc_ne(x, y)
-! complex *x, *y;
-! {
-
- .inline __Fc_ne,2
-! return (x->real != y->real) || (x->imag != y->imag);
- ld [%o0],%f0
- ld [%o1],%f2
- mov %o0,%o2
- fcmps %f0,%f2
- mov 1,%o0
- fbne 1f
- nop
- ld [%o2+4],%f0
- ld [%o1+4],%f2
- fcmps %f0,%f2
- nop
- fbne 1f
- nop
- mov 0,%o0
-1:
- .end
-! }