diff options
Diffstat (limited to 'usr/src/lib/libm')
-rw-r--r-- | usr/src/lib/libm/Makefile.com | 4 | ||||
-rw-r--r-- | usr/src/lib/libm/Makefile.libm.com | 6 | ||||
-rw-r--r-- | usr/src/lib/libm/Makefile.targ | 12 | ||||
-rw-r--r-- | usr/src/lib/libm/amd64/src/libm_inlines.h | 2 | ||||
-rw-r--r-- | usr/src/lib/libm/amd64/src/locallibm.il | 178 | ||||
-rw-r--r-- | usr/src/lib/libm/common/m9x/__fenv_amd64.il | 349 | ||||
-rw-r--r-- | usr/src/lib/libm/common/m9x/__fenv_i386.il | 411 | ||||
-rw-r--r-- | usr/src/lib/libm/common/m9x/__fenv_sparc.il | 41 | ||||
-rw-r--r-- | usr/src/lib/libm/common/m9x/__fenv_sparcv9.il | 41 | ||||
-rw-r--r-- | usr/src/lib/libm/i386/src/libm_inlines.h | 7 | ||||
-rw-r--r-- | usr/src/lib/libm/i386/src/locallibm.il | 370 | ||||
-rw-r--r-- | usr/src/lib/libm/sparc/src/libm_inlines.h | 6 | ||||
-rw-r--r-- | usr/src/lib/libm/sparc/src/locallibm.il | 2034 | ||||
-rw-r--r-- | usr/src/lib/libm/sparcv9/src/libm_inlines.h | 2 | ||||
-rw-r--r-- | usr/src/lib/libm/sparcv9/src/locallibm.il | 1075 |
15 files changed, 15 insertions, 4523 deletions
diff --git a/usr/src/lib/libm/Makefile.com b/usr/src/lib/libm/Makefile.com index 217d7a360a..1d720b04b6 100644 --- a/usr/src/lib/libm/Makefile.com +++ b/usr/src/lib/libm/Makefile.com @@ -505,8 +505,6 @@ LIBS = $(DYNLIB) CFLAGS += $(C_BIGPICFLAGS) CFLAGS64 += $(C_BIGPICFLAGS) -m9x_IL = $(LIBMDIR)/common/m9x/__fenv_$(TARGET_ARCH).il - SRCS_LD_i386_amd64 = \ ../common/LD/finitel.c \ ../common/LD/isnanl.c \ @@ -1013,5 +1011,3 @@ SRCS = \ .KEEP_STATE: all: $(LIBS) - - diff --git a/usr/src/lib/libm/Makefile.libm.com b/usr/src/lib/libm/Makefile.libm.com index f282d4ee4d..f61ddb2557 100644 --- a/usr/src/lib/libm/Makefile.libm.com +++ b/usr/src/lib/libm/Makefile.libm.com @@ -44,10 +44,8 @@ LDBLDIR_sparc = Q LDBLDIR_i386 = LD LDBLDIR = $(LDBLDIR_$(MACH)) -LM_IL = $(LIBMDIR)/$(TARGET_ARCH)/src/locallibm.il - -CFLAGS += $(C_PICFLAGS) $(XSTRCONST) $(LM_IL) -CFLAGS64 += $(C_PICFLAGS) $(XSTRCONST) $(LM_IL) +CFLAGS += $(C_PICFLAGS) $(XSTRCONST) +CFLAGS64 += $(C_PICFLAGS) $(XSTRCONST) sparc_CFLAGS += -Wa,-xarch=v8plus CPPFLAGS += -I$(LIBMSRC)/C \ diff --git a/usr/src/lib/libm/Makefile.targ b/usr/src/lib/libm/Makefile.targ index e2d96834f8..5a656af8c8 100644 --- a/usr/src/lib/libm/Makefile.targ +++ b/usr/src/lib/libm/Makefile.targ @@ -19,24 +19,24 @@ pics/%.o: $(LIBMDIR)/$(TARGETMACH)/src/%.$(ASSUFFIX) $(COMPILE.s) -o $@ $< $(POST_PROCESS_S_O) -pics/%.o: $(SRCDIR)/C/%.c $(LM_IL) +pics/%.o: $(SRCDIR)/C/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) -pics/%.o: $(SRCDIR)/$(LDBLDIR)/%.c $(LM_IL) +pics/%.o: $(SRCDIR)/$(LDBLDIR)/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) -pics/%.o: $(SRCDIR)/R/%.c $(LM_IL) +pics/%.o: $(SRCDIR)/R/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) -pics/%.o: $(SRCDIR)/complex/%.c $(LM_IL) +pics/%.o: $(SRCDIR)/complex/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) -pics/%.o: $(SRCDIR)/m9x/%.c $(LM_IL) $(m9x_IL) - $(COMPILE.c) $(m9x_IL) -o $@ $< +pics/%.o: $(SRCDIR)/m9x/%.c + $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) $(ROOTLIBDIR): $(ROOTFS_LIBDIR) diff --git a/usr/src/lib/libm/amd64/src/libm_inlines.h b/usr/src/lib/libm/amd64/src/libm_inlines.h index b0dee03bdf..e8e692d4dd 100644 --- a/usr/src/lib/libm/amd64/src/libm_inlines.h +++ b/usr/src/lib/libm/amd64/src/libm_inlines.h @@ -31,8 +31,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 diff --git a/usr/src/lib/libm/amd64/src/locallibm.il b/usr/src/lib/libm/amd64/src/locallibm.il deleted file mode 100644 index 375720c84d..0000000000 --- a/usr/src/lib/libm/amd64/src/locallibm.il +++ /dev/null @@ -1,178 +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 __ieee754_sqrt,0 - sqrtsd %xmm0,%xmm0 - .end - - .inline __inline_sqrtf,0 - sqrtss %xmm0,%xmm0 - .end - - .inline __inline_sqrt,0 - sqrtsd %xmm0,%xmm0 - .end - -/ -/ 00 - 24 bits -/ 01 - reserved -/ 10 - 53 bits -/ 11 - 64 bits -/ - .inline __swapRP,0 - subq $16,%rsp - fstcw (%rsp) - movw (%rsp),%ax - movw %ax,%cx - andw $0xfcff,%cx - andl $0x3,%edi - shlw $8,%di - orw %di,%cx - movl %ecx,(%rsp) - fldcw (%rsp) - shrw $8,%ax - andq $0x3,%rax - addq $16,%rsp - .end - -/ -/ 00 - Round to nearest, with even preferred -/ 01 - Round down -/ 10 - Round up -/ 11 - Chop -/ - .inline __swap87RD,0 - subq $16,%rsp - fstcw (%rsp) - movw (%rsp),%ax - movw %ax,%cx - andw $0xf3ff,%cx - andl $0x3,%edi - shlw $10,%di - orw %di,%cx - movl %ecx,(%rsp) - fldcw (%rsp) - shrw $10,%ax - andq $0x3,%rax - addq $16,%rsp - .end - - .inline abs,0 - cmpl $0,%edi - jge 1f - negl %edi -1: movl %edi,%eax - .end - - .inline copysign,0 - movq $0x7fffffffffffffff,%rax - movdq %rax,%xmm2 - andpd %xmm2,%xmm0 - andnpd %xmm1,%xmm2 - orpd %xmm2,%xmm0 - .end - - .inline fabs,0 - movq $0x7fffffffffffffff,%rax - movdq %rax,%xmm1 - andpd %xmm1,%xmm0 - .end - - .inline fabsf,0 - movl $0x7fffffff,%eax - movdl %eax,%xmm1 - andps %xmm1,%xmm0 - .end - - .inline finite,0 - subq $16,%rsp - movlpd %xmm0,(%rsp) - movq (%rsp),%rcx - movq $0x7fffffffffffffff,%rax - andq %rcx,%rax - movq $0x7ff0000000000000,%rcx - subq %rcx,%rax - shrq $63,%rax - addq $16,%rsp - .end - - .inline signbit,0 - movmskpd %xmm0,%eax - andq $1,%rax - .end - - .inline sqrt,0 - sqrtsd %xmm0,%xmm0 - .end - - .inline sqrtf,0 - sqrtss %xmm0,%xmm0 - .end - - .inline __f95_signf,0 - movl (%rdi),%eax - movl (%rsi),%ecx - andl $0x7fffffff,%eax - andl $0x80000000,%ecx - orl %ecx,%eax - movdl %eax,%xmm0 - .end - - .inline __f95_sign,0 - movq (%rsi),%rax - movq $0x7fffffffffffffff,%rdx - shrq $63,%rax - shlq $63,%rax - andq (%rdi),%rdx - orq %rdx,%rax - movdq %rax,%xmm0 - .end - - .inline __r_sign,0 - movl $0x7fffffff,%eax - movl $0x80000000,%edx - andl (%rdi),%eax - cmpl (%rsi),%edx - cmovel %eax,%edx - andl (%rsi),%edx - orl %edx,%eax - movdl %eax,%xmm0 - .end - - .inline __d_sign,0 - movq $0x7fffffffffffffff,%rax - movq $0x8000000000000000,%rdx - andq (%rdi),%rax - cmpq (%rsi),%rdx - cmoveq %rax,%rdx - andq (%rsi),%rdx - orq %rdx,%rax - movdq %rax,%xmm0 - .end diff --git a/usr/src/lib/libm/common/m9x/__fenv_amd64.il b/usr/src/lib/libm/common/m9x/__fenv_amd64.il deleted file mode 100644 index f28fe47661..0000000000 --- a/usr/src/lib/libm/common/m9x/__fenv_amd64.il +++ /dev/null @@ -1,349 +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, 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. -/ - .inline __fenv_getcwsw,1 - fstsw (%rdi) - fstcw 2(%rdi) - .end - - .inline __fenv_setcwsw,1 - movw (%rdi),%dx - movw 2(%rdi),%cx - subq $32,%rsp - fstenv (%rsp) - movw %cx,(%rsp) - movw %dx,4(%rsp) - fldenv (%rsp) - fwait - addq $32,%rsp - .end - - .inline __fenv_getmxcsr,1 - stmxcsr (%rdi) - .end - - .inline __fenv_setmxcsr,1 - ldmxcsr (%rdi) - .end - - .inline f2xm1,1 - fldt (%rsp) - f2xm1 - .end - - .inline fyl2x,2 - fldt (%rsp) - fldt 16(%rsp) - fyl2x - .end - - .inline fptan,1 - fldt (%rsp) - fptan - fstpt (%rsp) - .end - - .inline fpatan,2 - fldt (%rsp) - fldt 16(%rsp) - fpatan - .end - - .inline fxtract,1 - fldt (%rsp) - fxtract - .end - - .inline fprem1,2 - fldt (%rsp) - fldt 16(%rsp) - fprem1 - fstp %st(1) - .end - - .inline fprem,2 - fldt (%rsp) - fldt 16(%rsp) - fprem - fstp %st(1) - .end - - .inline fyl2xp1,2 - fldt (%rsp) - fldt 16(%rsp) - fyl2xp1 - .end - - .inline fsqrt,1 - fldt (%rsp) - fsqrt - .end - - .inline fsincos,1 - fldt (%rsp) - fsincos - .end - - .inline frndint,1 - fldt (%rsp) - frndint - .end - - .inline fscale,2 - fldt (%rsp) - fldt 16(%rsp) - fscale - fstp %st(1) - .end - - .inline fsin,1 - fldt (%rsp) - fsin - .end - - .inline fcos,1 - fldt (%rsp) - fcos - .end - - .inline sse_cmpeqss,3 - movss (%rdi),%xmm0 - cmpeqss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_cmpltss,3 - movss (%rdi),%xmm0 - cmpltss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_cmpless,3 - movss (%rdi),%xmm0 - cmpless (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_cmpunordss,3 - movss (%rdi),%xmm0 - cmpunordss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_minss,3 - movss (%rdi),%xmm0 - minss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_maxss,3 - movss (%rdi),%xmm0 - maxss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_addss,3 - movss (%rdi),%xmm0 - addss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_subss,3 - movss (%rdi),%xmm0 - subss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_mulss,3 - movss (%rdi),%xmm0 - mulss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_divss,3 - movss (%rdi),%xmm0 - divss (%rsi),%xmm0 - movss %xmm0,(%rdx) - .end - - .inline sse_sqrtss,2 - sqrtss (%rdi),%xmm0 - movss %xmm0,(%rsi) - .end - - .inline sse_ucomiss,2 - movss (%rdi),%xmm0 - ucomiss (%rsi),%xmm0 - .end - - .inline sse_comiss,2 - movss (%rdi),%xmm0 - comiss (%rsi),%xmm0 - .end - - .inline sse_cvtss2sd,2 - cvtss2sd (%rdi),%xmm0 - movsd %xmm0,(%rsi) - .end - - .inline sse_cvtsi2ss,2 - cvtsi2ss (%rdi),%xmm0 - movss %xmm0,(%rsi) - .end - - .inline sse_cvttss2si,2 - cvttss2si (%rdi),%ecx - movl %ecx,(%rsi) - .end - - .inline sse_cvtss2si,2 - cvtss2si (%rdi),%ecx - movl %ecx,(%rsi) - .end - - .inline sse_cvtsi2ssq,2 - cvtsi2ssq (%rdi),%xmm0 - movss %xmm0,(%rsi) - .end - - .inline sse_cvttss2siq,2 - cvttss2siq (%rdi),%rcx - movq %rcx,(%rsi) - .end - - .inline sse_cvtss2siq,2 - cvtss2siq (%rdi),%rcx - movq %rcx,(%rsi) - .end - - .inline sse_cmpeqsd,3 - movsd (%rdi),%xmm0 - cmpeqsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_cmpltsd,3 - movsd (%rdi),%xmm0 - cmpltsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_cmplesd,3 - movsd (%rdi),%xmm0 - cmplesd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_cmpunordsd,3 - movsd (%rdi),%xmm0 - cmpunordsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_minsd,3 - movsd (%rdi),%xmm0 - minsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_maxsd,3 - movsd (%rdi),%xmm0 - maxsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_addsd,3 - movsd (%rdi),%xmm0 - addsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_subsd,3 - movsd (%rdi),%xmm0 - subsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_mulsd,3 - movsd (%rdi),%xmm0 - mulsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_divsd,3 - movsd (%rdi),%xmm0 - divsd (%rsi),%xmm0 - movsd %xmm0,(%rdx) - .end - - .inline sse_sqrtsd,2 - sqrtsd (%rdi),%xmm0 - movsd %xmm0,(%rsi) - .end - - .inline sse_ucomisd,2 - movsd (%rdi),%xmm0 - ucomisd (%rsi),%xmm0 - .end - - .inline sse_comisd,2 - movsd (%rdi),%xmm0 - comisd (%rsi),%xmm0 - .end - - .inline sse_cvtsd2ss,2 - cvtsd2ss (%rdi),%xmm0 - movss %xmm0,(%rsi) - .end - - .inline sse_cvtsi2sd,2 - cvtsi2sd (%rdi),%xmm0 - movsd %xmm0,(%rsi) - .end - - .inline sse_cvttsd2si,2 - cvttsd2si (%rdi),%ecx - movl %ecx,(%rsi) - .end - - .inline sse_cvtsd2si,2 - cvtsd2si (%rdi),%ecx - movl %ecx,(%rsi) - .end - - .inline sse_cvtsi2sdq,2 - cvtsi2sdq (%rdi),%xmm0 - movsd %xmm0,(%rsi) - .end - - .inline sse_cvttsd2siq,2 - cvttsd2siq (%rdi),%rcx - movq %rcx,(%rsi) - .end - - .inline sse_cvtsd2siq,2 - cvtsd2siq (%rdi),%rcx - movq %rcx,(%rsi) - .end diff --git a/usr/src/lib/libm/common/m9x/__fenv_i386.il b/usr/src/lib/libm/common/m9x/__fenv_i386.il deleted file mode 100644 index aabc3e6f99..0000000000 --- a/usr/src/lib/libm/common/m9x/__fenv_i386.il +++ /dev/null @@ -1,411 +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, 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. -/ - .inline __fenv_getcwsw,1 - movl (%esp),%eax - fstsw (%eax) - fstcw 2(%eax) - .end - - .inline __fenv_setcwsw,1 - movl (%esp),%eax - movw (%eax),%dx - movw 2(%eax),%cx - subl $28,%esp - fstenv (%esp) - movw %cx,(%esp) - movw %dx,4(%esp) - fldenv (%esp) - fwait - addl $28,%esp - .end - - .inline __fenv_getmxcsr,1 - movl (%esp),%eax - stmxcsr (%eax) - .end - - .inline __fenv_setmxcsr,1 - movl (%esp),%eax - ldmxcsr (%eax) - .end - - .inline f2xm1,1 - fldt (%esp) - f2xm1 - .end - - .inline fyl2x,2 - fldt (%esp) - fldt 12(%esp) - fyl2x - .end - - .inline fptan,1 - fldt (%esp) - fptan - fstpt (%esp) - .end - - .inline fpatan,2 - fldt (%esp) - fldt 12(%esp) - fpatan - .end - - .inline fxtract,1 - fldt (%esp) - fxtract - .end - - .inline fprem1,2 - fldt (%esp) - fldt 12(%esp) - fprem1 - fstp %st(1) - .end - - .inline fprem,2 - fldt (%esp) - fldt 12(%esp) - fprem - fstp %st(1) - .end - - .inline fyl2xp1,2 - fldt (%esp) - fldt 12(%esp) - fyl2xp1 - .end - - .inline fsqrt,1 - fldt (%esp) - fsqrt - .end - - .inline fsincos,1 - fldt (%esp) - fsincos - .end - - .inline frndint,1 - fldt (%esp) - frndint - .end - - .inline fscale,2 - fldt (%esp) - fldt 12(%esp) - fscale - fstp %st(1) - .end - - .inline fsin,1 - fldt (%esp) - fsin - .end - - .inline fcos,1 - fldt (%esp) - fcos - .end - - .inline sse_cmpeqss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - cmpeqss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_cmpltss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - cmpltss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_cmpless,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - cmpless (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_cmpunordss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - cmpunordss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_minss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - minss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_maxss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - maxss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_addss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - addss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_subss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - subss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_mulss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - mulss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_divss,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movss (%eax),%xmm0 - divss (%edx),%xmm0 - movss %xmm0,(%ecx) - .end - - .inline sse_sqrtss,2 - movl (%esp),%eax - movl 4(%esp),%edx - sqrtss (%eax),%xmm0 - movss %xmm0,(%edx) - .end - - .inline sse_ucomiss,2 - movl (%esp),%eax - movl 4(%esp),%edx - movss (%eax),%xmm0 - ucomiss (%edx),%xmm0 - .end - - .inline sse_comiss,2 - movl (%esp),%eax - movl 4(%esp),%edx - movss (%eax),%xmm0 - comiss (%edx),%xmm0 - .end - - .inline sse_cvtss2sd,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtss2sd (%eax),%xmm0 - movsd %xmm0,(%edx) - .end - - .inline sse_cvtsi2ss,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtsi2ss (%eax),%xmm0 - movss %xmm0,(%edx) - .end - - .inline sse_cvttss2si,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvttss2si (%eax),%ecx - movl %ecx,(%edx) - .end - - .inline sse_cvtss2si,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtss2si (%eax),%ecx - movl %ecx,(%edx) - .end - - .inline sse_cmpeqsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - cmpeqsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_cmpltsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - cmpltsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_cmplesd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - cmplesd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_cmpunordsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - cmpunordsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_minsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - minsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_maxsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - maxsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_addsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - addsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_subsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - subsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_mulsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - mulsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_divsd,3 - movl (%esp),%eax - movl 4(%esp),%edx - movl 8(%esp),%ecx - movsd (%eax),%xmm0 - divsd (%edx),%xmm0 - movsd %xmm0,(%ecx) - .end - - .inline sse_sqrtsd,2 - movl (%esp),%eax - movl 4(%esp),%edx - sqrtsd (%eax),%xmm0 - movsd %xmm0,(%edx) - .end - - .inline sse_ucomisd,2 - movl (%esp),%eax - movl 4(%esp),%edx - movsd (%eax),%xmm0 - ucomisd (%edx),%xmm0 - .end - - .inline sse_comisd,2 - movl (%esp),%eax - movl 4(%esp),%edx - movsd (%eax),%xmm0 - comisd (%edx),%xmm0 - .end - - .inline sse_cvtsd2ss,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtsd2ss (%eax),%xmm0 - movss %xmm0,(%edx) - .end - - .inline sse_cvtsi2sd,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtsi2sd (%eax),%xmm0 - movsd %xmm0,(%edx) - .end - - .inline sse_cvttsd2si,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvttsd2si (%eax),%ecx - movl %ecx,(%edx) - .end - - .inline sse_cvtsd2si,2 - movl (%esp),%eax - movl 4(%esp),%edx - cvtsd2si (%eax),%ecx - movl %ecx,(%edx) - .end diff --git a/usr/src/lib/libm/common/m9x/__fenv_sparc.il b/usr/src/lib/libm/common/m9x/__fenv_sparc.il deleted file mode 100644 index fd27dcf647..0000000000 --- a/usr/src/lib/libm/common/m9x/__fenv_sparc.il +++ /dev/null @@ -1,41 +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, 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. -! -! - .inline __fenv_getfsr,1 - st %fsr,[%o0] - .end - - .inline __fenv_setfsr,1 - ld [%o0],%fsr - .end - - .inline __fenv_getfsr32,1 - st %fsr,[%o0] - .end - - .inline __fenv_setfsr32,1 - ld [%o0],%fsr - .end diff --git a/usr/src/lib/libm/common/m9x/__fenv_sparcv9.il b/usr/src/lib/libm/common/m9x/__fenv_sparcv9.il deleted file mode 100644 index b460587a0a..0000000000 --- a/usr/src/lib/libm/common/m9x/__fenv_sparcv9.il +++ /dev/null @@ -1,41 +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, 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. -! -! - .inline __fenv_getfsr,1 - stx %fsr,[%o0] - .end - - .inline __fenv_setfsr,1 - ldx [%o0],%fsr - .end - - .inline __fenv_getfsr32,1 - st %fsr,[%o0] - .end - - .inline __fenv_setfsr32,1 - ld [%o0],%fsr - .end diff --git a/usr/src/lib/libm/i386/src/libm_inlines.h b/usr/src/lib/libm/i386/src/libm_inlines.h index 309d40460e..3569196f89 100644 --- a/usr/src/lib/libm/i386/src/libm_inlines.h +++ b/usr/src/lib/libm/i386/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 @@ -261,8 +259,9 @@ isnanf(float f) } extern __GNU_INLINE double -rint(double a) { - return (__inline_rint(a)); +rint(double a) +{ + return (__inline_rint(a)); } extern __GNU_INLINE double diff --git a/usr/src/lib/libm/i386/src/locallibm.il b/usr/src/lib/libm/i386/src/locallibm.il deleted file mode 100644 index bca43cb8e5..0000000000 --- a/usr/src/lib/libm/i386/src/locallibm.il +++ /dev/null @@ -1,370 +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 __ieee754_sqrt,0 - fldl (%esp) - fsqrt - .end - - .inline __inline_rint,0 - fldl (%esp) - movl 4(%esp),%eax - andl $0x7fffffff,%eax - cmpl $0x43300000,%eax - jae 1f - frndint -1: - fwait / in case we jumped around the frndint - .end - - .inline __inline_sqrtf,0 - flds (%esp) - fsqrt - .end - - .inline __inline_sqrt,0 - fldl (%esp) - fsqrt - .end - - .inline __inline_fstsw,0 - fstsw %ax - .end - -/ -/ 00 - 24 bits -/ 01 - reserved -/ 10 - 53 bits -/ 11 - 64 bits -/ - .inline __swapRP,0 - subl $4,%esp - fstcw (%esp) - movw (%esp),%ax - movw %ax,%cx - andw $0xfcff,%cx - movl 4(%esp),%edx /// - andl $0x3,%edx - shlw $8,%dx - orw %dx,%cx - movl %ecx,(%esp) - fldcw (%esp) - shrw $8,%ax - andl $0x3,%eax - addl $4,%esp - .end - -/ -/ 00 - Round to nearest, with even preferred -/ 01 - Round down -/ 10 - Round up -/ 11 - Chop -/ - .inline __swap87RD,0 - subl $4,%esp - fstcw (%esp) - movw (%esp),%ax - movw %ax,%cx - andw $0xf3ff,%cx - movl 4(%esp),%edx - andl $0x3,%edx - shlw $10,%dx - orw %dx,%cx - movl %ecx,(%esp) - fldcw (%esp) - shrw $10,%ax - andl $0x3,%eax - addl $4,%esp - .end - -/ -/ Convert Top-of-Stack to long -/ - .inline __xtol,0 - subl $8,%esp / 8 bytes of stack space - fstcw 2(%esp) / byte[2:3] = old_cw - movw 2(%esp),%ax - andw $0xf3ff,%ax - orw $0x0c00,%ax / RD set to Chop - movw %ax,(%esp) / byte[0:1] = new_cw - fldcw (%esp) / set new_cw - fistpl 4(%esp) / byte[4:7] = converted long - fstcw (%esp) / restore old RD - movw (%esp),%ax - andw $0xf3ff,%ax - movw 2(%esp),%dx - andw $0x0c00,%dx - orw %ax,%dx - movw %dx,2(%esp) - fldcw 2(%esp) - movl 4(%esp),%eax - addl $8,%esp - .end - - .inline ceil,0 - subl $8,%esp - fstcw (%esp) - fldl 8(%esp) /// - movw (%esp),%cx - orw $0x0c00,%cx - xorw $0x0400,%cx - movw %cx,4(%esp) - fldcw 4(%esp) / set RD = up - frndint - fstcw 4(%esp) / restore RD - movw 4(%esp),%dx - andw $0xf3ff,%dx - movw (%esp),%cx - andw $0x0c00,%cx - orw %dx,%cx - movw %cx,(%esp) - fldcw (%esp) - addl $8,%esp - .end - - .inline copysign,0 - movl 4(%esp),%eax /// eax <-- hi_32(x) - movl 12(%esp),%ecx /// ecx <-- hi_32(y) - andl $0x7fffffff,%eax / eax <-- hi_32(abs(x)) - andl $0x80000000,%ecx / ecx[31] <-- sign_bit(y) - orl %ecx,%eax / eax <-- hi_32(__copysign(x,y)) - movl (%esp),%ecx /// ecx <-- lo_32(x) - / = lo_32(__copysign(x,y)) - subl $8,%esp / set up loading dock for result - movl %ecx,(%esp) / copy lo_32(result) to loading dock - movl %eax,4(%esp) / copy hi_32(result) to loading dock - fldl (%esp) / load __copysign(x,y) - fwait / in case fldl causes exception - addl $8,%esp / restore stack-pointer - .end - - .inline __d_sqrt_,0 - movl (%esp),%eax - fldl (%eax) - fsqrt - .end - - .inline fabs,0 - fldl (%esp) /// - fabs - .end - - .inline fabsf,0 - flds (%esp) - fabs - .end - - .inline fabsl,0 - fldt (%esp) - fabs - .end - -/ -/ branchless _finite -/ - .inline finite,0 - movl 4(%esp),%eax /// eax <-- hi_32(x) - notl %eax / not(bexp) = 0 iff bexp = all 1's - andl $0x7ff00000,%eax - negl %eax - shrl $31,%eax - .end - - .inline floor,0 - subl $8,%esp - fstcw (%esp) - fldl 8(%esp) /// - movw (%esp),%cx - orw $0x0c00,%cx - xorw $0x0800,%cx - movw %cx,4(%esp) - fldcw 4(%esp) / set RD = down - frndint - fstcw 4(%esp) / restore RD - movw 4(%esp),%dx - andw $0xf3ff,%dx - movw (%esp),%cx - andw $0x0c00,%cx - orw %dx,%cx - movw %cx,(%esp) - fldcw (%esp) / restore RD - addl $8,%esp - .end - - .inline isnanf,0 - movl (%esp),%eax - andl $0x7fffffff,%eax - negl %eax - addl $0x7f800000,%eax - shrl $31,%eax - .end - - - .inline __isnormal,0 - / TRUE iff (x is _finite, but - / neither subnormal nor +/-0) - / iff (0 < bexp(x) < 0x7ff) - movl 4(%esp),%eax / eax <-- hi_32(x) - andl $0x7ff00000,%eax / eax[20..30] <-- bexp(x), - / rest_of(eax) <-- 0 - pushfl - popl %ecx / bit 6 of ecx <-- not bexp(x) - subl $0x7ff00000,%eax - pushfl - popl %eax / bit 6 of eax <-- not bexp(x) - orl %ecx,%eax - andl $0x40,%eax - xorl $0x40,%eax - shrl $6,%eax - .end - - .inline __issubnormal,0 - / TRUE iff (bexp(x) = 0 and - / frac(x) /= 0) - movl $0,%eax - movl 4(%esp),%ecx / ecx <-- hi_32(x) - andl $0x7fffffff,%ecx / ecx <-- hi_32(abs(x)) - cmpl $0x00100000,%ecx / is bexp(x) = 0? - adcl $0,%eax / jump if bexp(x) = 0 - orl (%esp),%ecx / = 0 iff sgnfcnd(x) = 0 - / iff x = +/- 0.0 here - pushfl - popl %ecx - andl $0x40,%ecx - xorl $0x40,%ecx - shrl $6,%ecx - andl %ecx,%eax - .end - - .inline __iszero,0 - movl 4(%esp),%eax / eax <-- hi_32(x) - andl $0x7fffffff,%eax / eax <-- hi_32(abs(x)) - orl (%esp),%eax / = 0 iff x = +/- 0.0 - pushfl - popl %eax - andl $0x40,%eax - shrl $6,%eax - .end - - .inline __r_sqrt_,0 - movl (%esp),%eax - flds (%eax) - fsqrt - .end - - .inline rint,0 - fldl (%esp) - movl 4(%esp),%eax - andl $0x7fffffff,%eax - cmpl $0x43300000,%eax - jae 1f - frndint -1: - fwait / in case we jumped around frndint - .end - - .inline scalbn,0 - fildl 8(%esp) /// convert N to extended - fldl (%esp) /// push x - fscale - fstp %st(1) - .end - - .inline signbit,0 - movl 4(%esp),%eax /// high part of x - shrl $31,%eax - .end - - .inline signbitf,0 - movl (%esp),%eax - shrl $31,%eax - .end - - .inline sqrt,0 - fldl (%esp) - fsqrt - .end - - .inline sqrtf,0 - flds (%esp) - fsqrt - .end - - .inline sqrtl,0 - fldt (%esp) - fsqrt - .end - - .inline isnanl,0 - movl 8(%esp),%eax / ax <-- sign bit and __exp - andl $0x00007fff,%eax - jz 1f / jump if __exp is all 0 - xorl $0x00007fff,%eax - jz 2f / jump if __exp is all 1 - testl $0x80000000,4(%esp) - jz 3f / jump if leading bit is 0 - movl $0,%eax - jmp 1f -2: / note that %eax = 0 from before - cmpl $0x80000000,4(%esp) / what is first half of __significand? - jnz 3f / jump if not equal to 0x80000000 - testl $0xffffffff,(%esp) / is second half of __significand 0? - jnz 3f / jump if not equal to 0 - jmp 1f -3: - movl $1,%eax -1: - .end - - .inline __f95_signf,0 - sub $4,%esp - mov 4(%esp),%edx - mov (%edx),%eax - and $0x7fffffff,%eax - mov 8(%esp),%edx - mov (%edx),%ecx - and $0x80000000,%ecx - or %ecx,%eax - mov %eax,(%esp) - flds (%esp) - add $4,%esp - .end - - .inline __f95_sign,0 - mov (%esp),%edx - fldl (%edx) - fabs - mov 4(%esp),%edx - mov 4(%edx),%eax - test %eax,%eax - jns 1f - fchs -1: - .end - 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 -! } diff --git a/usr/src/lib/libm/sparcv9/src/libm_inlines.h b/usr/src/lib/libm/sparcv9/src/libm_inlines.h index 74dba0b301..cd482e5ab2 100644 --- a/usr/src/lib/libm/sparcv9/src/libm_inlines.h +++ b/usr/src/lib/libm/sparcv9/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 diff --git a/usr/src/lib/libm/sparcv9/src/locallibm.il b/usr/src/lib/libm/sparcv9/src/locallibm.il deleted file mode 100644 index 2cd9e21470..0000000000 --- a/usr/src/lib/libm/sparcv9/src/locallibm.il +++ /dev/null @@ -1,1075 +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 __ieee754_sqrt,1 - fsqrtd %f0,%f0 - .end - - .inline __inline_sqrtf,1 - fsqrts %f1,%f0 - .end - - .inline __inline_sqrt,1 - fsqrtd %f0,%f0 - .end - - .inline sqrtf,1 - fsqrts %f1,%f0 - .end - - .inline sqrt,1 - fsqrtd %f0,%f0 - .end - - .inline __ceil,1 - sethi %hi(0x43300000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - fabsd %f0,%f4 - fsubd %f2,%f2,%f6 - fcmpd %fcc0,%f4,%f2 - fbl,pt %fcc0,1f - nop - sethi %hi(0x3ff00000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f6 - fmuld %f0,%f6,%f0 - ba 4f - nop -1: - fcmpd %fcc1,%f0,%f6 - fbg,pt %fcc1,2f - nop - fbe,pn %fcc1,4f - nop - fnegd %f2,%f2 -2: - faddd %f0,%f2,%f4 - fsubd %f4,%f2,%f4 - fcmpd %fcc0,%f4,%f0 - fbge,pt %fcc0,3f - nop - sethi %hi(0x3ff00000),%o0 - st %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - faddd %f4,%f2,%f4 -3: - fabsd %f4,%f0 - fbge,pt %fcc1,4f - nop - fnegd %f0,%f0 -4: - .end - - .inline __floor,1 - sethi %hi(0x43300000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - fabsd %f0,%f4 - fsubd %f2,%f2,%f6 - fcmpd %fcc0,%f4,%f2 - fbl,pt %fcc0,1f - nop - sethi %hi(0x3ff00000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f6 - fmuld %f0,%f6,%f0 - ba 4f - nop -1: - fcmpd %fcc1,%f0,%f6 - fbg,pt %fcc1,2f - nop - fbe,pn %fcc1,4f - nop - fnegd %f2,%f2 -2: - faddd %f0,%f2,%f4 - fsubd %f4,%f2,%f4 - fcmpd %fcc0,%f4,%f0 - fble,pt %fcc0,3f - nop - sethi %hi(0x3ff00000),%o0 - st %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - fsubd %f4,%f2,%f4 -3: - fabsd %f4,%f0 - fbge,pt %fcc1,4f - nop - fnegd %f0,%f0 -4: - .end - - .inline __ilogb,1 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7ff00000),%o1 - andcc %o0,%o1,%o0 - bne,pt %icc,2f - nop - sethi %hi(0x43500000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - fmuld %f0,%f2,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - andcc %o0,%o1,%o0 - bne,pt %icc,1f - nop - sethi %hi(0x80000001),%o0 - or %o0,%lo(0x80000001),%o0 - ba 4f - nop -1: - srl %o0,20,%o0 - sub %o0,0x435,%o0 - ba 4f - nop -2: - subcc %o1,%o0,%g0 - bne,pt %icc,3f - nop - sethi %hi(0x7fffffff),%o0 - or %o0,%lo(0x7fffffff),%o0 - ba 4f - nop -3: - srl %o0,20,%o0 - sub %o0,0x3ff,%o0 -4: - .end - - .inline __rint,1 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - sethi %hi(0x80000000),%o2 - sllx %o2,32,%o2 - andn %o0,%o2,%o2 - sethi %hi(0x43300000),%o3 - sllx %o3,32,%o3 - stx %g0,[%sp+0x887] - subcc %o2,%o3,%g0 - bl,pt %xcc,1f - nop - sethi %hi(0x3ff00000),%o2 - sllx %o2,32,%o2 - stx %o2,[%sp+0x887] - ldd [%sp+0x887],%f2 - fmuld %f0,%f2,%f0 - ba 3f - nop -1: - orcc %o0,0,%g0 - stx %o3,[%sp+0x87f] - ldd [%sp+0x87f],%f2 - bge,pt %xcc,2f - nop - fnegd %f2,%f2 -2: - faddd %f0,%f2,%f0 - fcmpd %f0,%f2 - fbne,pt %fcc0,0f - nop - ldd [%sp+0x887],%f0 - bge,pt %xcc,3f - nop - fnegd %f0,%f0 - ba 3f - nop -0: - fsubd %f0,%f2,%f0 -3: - .end - - .inline __rintf,1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x80000000),%o2 - andn %o0,%o2,%o2 - sethi %hi(0x4b000000),%o3 - st %g0,[%sp+0x887] - subcc %o2,%o3,%g0 - bl 1f - nop - sethi %hi(0x3f800000),%o2 - st %o2,[%sp+0x887] - ld [%sp+0x887],%f2 - fmuls %f1,%f2,%f0 - ba 3f - nop -1: - tst %o0 - st %o3,[%sp+0x87f] - ld [%sp+0x87f],%f2 - bge 2f - nop - fnegs %f2,%f2 -2: - fadds %f1,%f2,%f0 - fcmps %f0,%f2 - fbne 0f - nop - ld [%sp+0x887],%f0 - bge 3f - nop - fnegs %f0,%f0 - ba 3f - nop -0: - fsubs %f0,%f2,%f0 -3: - .end - - .inline __min_subnormal,1 - or %g0,1,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __min_subnormalf,1 - or %g0,1,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __max_subnormal,1 - xnor %g0,%g0,%o0 - srlx %o0,12,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __max_subnormalf,1 - xnor %g0,%g0,%o0 - srl %o0,9,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __min_normal,1 - sethi %hi(0x00100000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __min_normalf,1 - sethi %hi(0x00800000),%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __max_normal,1 - sethi %hi(0x80100000),%o1 - sllx %o1,32,%o1 - xnor %g0,%g0,%o0 - andn %o0,%o1,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __max_normalf,1 - sethi %hi(0x7f7ffc00),%o0 - or %o0,0x3ff,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __infinity,1 - sethi %hi(0x7ff00000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __infinity,1 - sethi %hi(0x7ff00000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __infinityf,1 - sethi %hi(0x7f800000),%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __signaling_nan,1 - sethi %hi(0x7ff00000),%o0 - sllx %o0,32,%o0 - or %o0,0x1,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __signaling_nanf,1 - sethi %hi(0x7f800000),%o0 - or %o0,1,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __quiet_nan,1 - xnor %g0,%g0,%o0 - srlx %o0,1,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __quiet_nanf,1 - xnor %g0,%g0,%o0 - srl %o0,1,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __swapEX,1 - and %o0,0x1f,%o1 - sll %o1,5,%o1 - .volatile - st %fsr,[%sp+0x87f] - ld [%sp+0x87f],%o0 - andn %o0,0x3e0,%o2 - or %o1,%o2,%o1 - st %o1,[%sp+0x87f] - ld [%sp+0x87f],%fsr - srl %o0,5,%o0 - and %o0,0x1f,%o0 - .nonvolatile - .end - - .inline _QgetRD,0 - st %fsr,[%sp+0x87f] - ld [%sp+0x87f],%o0 - srl %o0,30,%o0 - .end - - .inline _QgetRP,0 - or %g0,%g0,%o0 - .end - - .inline __swapRD,1 - and %o0,0x3,%o0 - sll %o0,30,%o1 - .volatile - st %fsr,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0xc0000000),%o4 - andn %o0,%o4,%o2 - or %o1,%o2,%o1 - st %o1,[%sp+0x87f] - ld [%sp+0x87f],%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 - .volatile - st %fsr,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x0f800000),%o4 - andn %o0,%o4,%o2 - or %o1,%o2,%o1 - st %o1,[%sp+0x87f] - ld [%sp+0x87f],%fsr - srl %o0,23,%o0 - and %o0,0x1f,%o0 - .nonvolatile - .end - - .inline fp_class,1 - fabsd %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - orcc %g0,%o0,%g0 - be,pn %xcc,2f - nop - sethi %hi(0x7ff00000),%o1 - sllx %o1,32,%o1 - andcc %o0,%o1,%g0 - bne,pt %xcc,1f - nop - or %g0,1,%o0 - ba 2f - nop -1: - subcc %o0,%o1,%g0 - bge,pn %xcc,1f - nop - or %g0,2,%o0 - ba 2f - nop -1: - andncc %o0,%o1,%o0 - bne,pn %xcc,1f - nop - or %g0,3,%o0 - ba 2f - nop -1: - sethi %hi(0x00080000),%o1 - sllx %o1,32,%o1 - andcc %o0,%o1,%g0 - or %g0,4,%o0 - bne,pt %xcc,2f - nop - or %g0,5,%o0 -2: - .end - - .inline fp_classf,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - orcc %g0,%o0,%g0 - be,pn %icc,2f - nop -1: - sethi %hi(0x7f800000),%o1 - andcc %o0,%o1,%g0 - bne,pt %icc,1f - nop - or %g0,1,%o0 - ba 2f - nop -1: - subcc %o0,%o1,%g0 - bge,pn %icc,1f - nop - or %g0,2,%o0 - ba 2f - nop -1: - bg,pn %icc,1f - nop - or %g0,3,%o0 - ba 2f - nop -1: - sethi %hi(0x00400000),%o1 - andcc %o0,%o1,%g0 - or %g0,4,%o0 - bne,pt %icc,2f - nop - or %g0,5,%o0 -2: - .end - - .inline __copysign,2 - fabsd %f0,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - st %f2,[%sp+0x887] - ld [%sp+0x887],%o1 - srl %o1,31,%o1 - sll %o1,31,%o1 - or %o0,%o1,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __copysignf,2 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - st %f3,[%sp+0x887] - ld [%sp+0x887],%o1 - srl %o1,31,%o1 - sll %o1,31,%o1 - or %o0,%o1,%o0 - st %o0,[%sp+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline _finite,1 - fabsd %f0,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7ff00000),%o1 - sub %o0,%o1,%o0 - srl %o0,31,%o0 - .end - - .inline __finitef,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7f800000),%o1 - sub %o0,%o1,%o0 - srl %o0,31,%o0 - .end - - .inline __signbit,1 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - srl %o0,31,%o0 - .end - - .inline __signbitf,1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - srl %o0,31,%o0 - .end - - .inline __isinf,1 - fabsd %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - sethi %hi(0x7ff00000),%o1 - sllx %o1,32,%o1 - sub %o0,%o1,%o0 - sub %g0,%o0,%o1 - or %o0,%o1,%o0 - xnor %o0,%g0,%o0 - srlx %o0,63,%o0 - .end - - .inline __isinff,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7f800000),%o1 - sub %o0,%o1,%o0 - sub %g0,%o0,%o1 - or %o0,%o1,%o0 - xnor %o0,%g0,%o0 - srl %o0,31,%o0 - .end - - .inline __isnan,1 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - sllx %o0,1,%o0 - srlx %o0,1,%o0 - sethi %hi(0x7ff00000),%o1 - sllx %o1,32,%o1 - sub %o1,%o0,%o0 - srlx %o0,63,%o0 - .end - - .inline __isnanf,1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x80000000),%o2 - andn %o0,%o2,%o0 - sethi %hi(0x7f800000),%o1 - sub %o1,%o0,%o0 - srl %o0,31,%o0 - .end - - .inline __isnormal,1 - fabsd %f0,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7ff00000),%o1 - sub %o0,%o1,%o2 - sethi %hi(0x00100000),%o1 - sub %o0,%o1,%o1 - andn %o2,%o1,%o0 - srl %o0,31,%o0 - .end - - .inline __isnormalf,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x7f800000),%o1 - sub %o0,%o1,%o2 - sethi %hi(0x00800000),%o1 - sub %o0,%o1,%o1 - andn %o2,%o1,%o0 - srl %o0,31,%o0 - .end - - .inline __issubnormal,1 - fabsd %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - sethi %hi(0x00100000),%o1 - sllx %o1,32,%o1 - sub %o0,%o1,%o1 - sub %g0,%o0,%o2 - or %o0,%o2,%o0 - and %o0,%o1,%o0 - srlx %o0,63,%o0 - .end - - .inline __issubnormalf,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sethi %hi(0x00800000),%o1 - sub %o0,%o1,%o1 - sub %g0,%o0,%o2 - or %o0,%o2,%o0 - and %o0,%o1,%o0 - srl %o0,31,%o0 - .end - - .inline __iszero,1 - fabsd %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - sub %g0,%o0,%o1 - or %o0,%o1,%o0 - xnor %o0,%g0,%o0 - srlx %o0,63,%o0 - .end - - .inline __iszerof,1 - fabss %f1,%f1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sub %g0,%o0,%o1 - or %o0,%o1,%o0 - xnor %o0,%g0,%o0 - srl %o0,31,%o0 - .end - - .inline abs,1 - sra %o0,31,%o1 - xor %o0,%o1,%o0 - sub %o0,%o1,%o0 - sra %o0,0,%o0 - .end - - .inline fabs,1 - fabsd %f0,%f0 - .end - - .inline fabsf,1 - fabss %f1,%f0 - .end -! -! __nintf - f77 NINT(REAL*4) -! - - .inline __nintf,1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - srl %o0,30-7,%g1 - sethi %hi(0x7fffff),%o2 - and %g1,0xff,%g1 - or %o2,%lo(0x7fffff),%o2 - sethi %hi(1<<22),%o4 - subcc %g1,127+31,%g0 - and %o0,%o2,%o3 - bl 1f - nop - sethi %hi(0xcf000000),%o2 - sethi %hi(0x80000000),%g1 - subcc %o0,%o2,%g0 - or %g1,%g0,%o0 - be 0f - nop - fstoi %f1,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 -0: - sra %o0,0,%o0 - ba 9f - nop -1: - 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 - sra %o0,0,%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+0x87f] - ld [%sp+0x87f],%f0 - fstox %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - 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,%o0 -9: - .end -! -! __i_dnnt - f77 NINT(REAL*8) -! - - .inline __i_dnnt,1 - ldx [%o0],%o0 - srlx %o0,63-11,%g1 - or %g0,1,%o2 - stx %o0,[%sp+0x87f] - sllx %o2,52-1,%o4 - and %g1,0x7ff,%g1 - sllx %o2,63-0,%o2 - subcc %g1,1023+32,%g0 - bl 0f - nop - ldd [%sp+0x87f],%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+0x87f] - ldd [%sp+0x87f],%f0 - fxtod %f0,%f0 -8: - fdtoi %f0,%f0 - st %f0,[%sp+0x87f] - ld [%sp+0x87f],%o0 - sra %o0,0,%o0 -9: - .end - - .inline __il_dnnt,1 - ldx [%o0],%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+0x87f] - ldd [%sp+0x87f],%f0 - fdtox %f0,%f0 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%o0 - 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,%o0 -9: - .end - - .inline __anintf,1 - st %f1,[%sp+0x87f] - ld [%sp+0x87f],%o0 - 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+0x87f] - ld [%sp+0x87f],%f0 - .end - - .inline __anint,1 - std %f0,[%sp+0x87f] - ldx [%sp+0x87f],%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+0x87f] - ldd [%sp+0x87f],%f0 - .end - - .inline __r_dim,2 - st %g0,[%sp+0x87f] - ld [%sp+0x87f],%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+0x87f] - ldd [%sp+0x87f],%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 __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 - ldd [%o0],%f0 - ldx [%o1],%o1 - fabsd %f0,%f0 - fnegd %f0,%f2 - sub %o1,1,%o0 - and %o1,%o0,%o1 - fmovrdlz %o1,%f2,%f0 - .end -! -! complex __Fc_div_f(complex a, complex b); -! - - .inline __Fc_div_f,0 - st %g0,[%sp+0x87f] - ld [%sp+0x87f],%f4 - fcmps %fcc0,%f3,%f4 - fbne,pn %fcc0,1f - nop - fdivs %f0,%f2,%f0 - fdivs %f1,%f2,%f1 - ba 2f - nop -1: - sethi %hi(0x3ff00000),%o0 - sllx %o0,32,%o0 - stx %o0,[%sp+0x87f] - ldd [%sp+0x87f],%f16 - fsmuld %f2,%f2,%f4 - fsmuld %f3,%f3,%f6 - fsmuld %f1,%f3,%f8 - fsmuld %f0,%f2,%f10 - faddd %f6,%f4,%f6 - fdivd %f16,%f6,%f6 - faddd %f10,%f8,%f10 - fsmuld %f1,%f2,%f12 - fmuld %f10,%f6,%f10 - fsmuld %f0,%f3,%f14 - fsubd %f12,%f14,%f14 - fmuld %f14,%f6,%f6 - fdtos %f10,%f0 - fdtos %f6,%f1 -2: - .end |