⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r_log_.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
	.data	.asciz	"@(#)r_log_.S 1.1 92/07/30 SMI"#define LOCORE#include <machine/asm_linkage.h>! Copyright (c) 1989 by Sun Microsystems, Inc.!! single log(x) float *x;! Code by K.C. Ng (based on libm/R/r_log_.c)! April 8, 1987! Revised on May 9, 1988! Rewritten on Jan 12, 1989!! use l5 for n	.global	__tbl_r_log_hi,__tbl_r_log_lo	.seg	"text"	ENTRY(r_log_)	save	%sp,-128,%sp	set	constant,%l0	ld	[%i0],%f0		! f0 = x	mov	0,%l5			! l5 = n <- 0	ld	[%i0],%i0		! i0 = ix	sethi	%hi(0x3f6c0000),%l1	cmp	%i0,%l1	bge,a	1f	sethi	%hi(0x3f8a0000),%l2	sethi	%hi(0x3dc00000),%l1	cmp	%i0,%l1	bge	SMALL_N	sethi	%hi(0x00800000),%l1	cmp	%i0,%l1	bge	LARGE_N	sethi	%hi(0x80000000),%l1	andncc	%i0,%l1,%g0	be	RLOG_0	tst	%i0	bl	RLOG_NEG	ld	[%l0+two24],%f4    ! subnormal x	fmuls	%f0,%f4,%f0	mov	-24,%l5	st	%f0,[%fp-4]	ba	LARGE_N	ld	[%fp-4],%i0RLOG_0:	ld	[%l0+one],%f2	ld	[%l0+zero],%f4	fnegs	%f2,%f2	ba	exit	fdivs	%f2,%f4,%f0RLOG_NEG:	sethi	%hi(0xff800000),%l1	cmp	%i0,%l1	bge,a	exit	fsubs	%f0,%f0,%f0	! return x-x if x is -inf of NaN	ld	[%l0+zero],%f2	! log(-ve)	ba	exit	fdivs	%f2,%f2,%f01:	cmp	%i0,%l2	bl,a	near1	ld	[%l0+one],%f2	sethi	%hi(0x41bc0000),%l1	cmp	%i0,%l1	bl	SMALL_N	sethi	%hi(0x7f800000),%l1	cmp	%i0,%l1	bl	LARGE_N	nop	ba	exit	fadds	%f0,%f0,%f0	! x now is +Inf or NaNnear1:! Now |1-x|<0.078125 ( 0x3f6c0000 <= x < 0x3f8a0000 )	fsubs	%f0,%f2,%f4	! f4 = f = x - 1.0	sethi	%hi(0x3f800000),%l1	cmp	%i0,%l1	be,a	exit	ld	[%l0+zero],%f0	fmuls	%f4,%f4,%f6	! f6 = z = f*f	bl,a	less_1	sethi	%hi(0x3f7f8000),%l1    ! x > 1	sethi	%hi(0x3f804000),%l1	cmp	%i0,%l1	bge,a	psmall	ld	[%l0+Bp4],%f8	sethi	%hi(0x3f800400),%l1	cmp	%i0,%l1	bge,a	ptiny	ld	[%l0+Bp2],%f8	ba	pvtiny	ld	[%l0+Bp1],%f8psmall:				! for 0 <= x < 1+0.078125	fmuls	%f4,%f8,%f8	ld	[%l0+Bp3],%f10	fadds	%f10,%f8,%f8	fmuls	%f4,%f8,%f8	ld	[%l0+Bp2],%f12	fadds	%f12,%f8,%f8ptiny:				! for 0 <= x < 2**-9	fmuls	%f4,%f8,%f8	ld	[%l0+Bp1],%f10	fadds	%f10,%f8,%f8pvtiny: 			! for 0 <= x < 2**-13	fmuls	%f6,%f8,%f8	ba	exit	fadds	%f4,%f8,%f0less_1:	cmp	%i0,%l1	ble,a	nsmall	ld	[%l0+Bn4],%f8	sethi	%hi(0x3f7ff800),%l1	cmp	%i0,%l1	ble,a	ntiny	ld	[%l0+Bn2],%f8	ba	nvtiny	ld	[%l0+Bn1],%f8nsmall:				! for 1-0.078125 < x <= 0	fmuls	%f4,%f8,%f8	ld	[%l0+Bn3],%f10	fadds	%f10,%f8,%f8	fmuls	%f4,%f8,%f8	ld	[%l0+Bn2],%f12	fadds	%f12,%f8,%f8ntiny:				! for -2**-9 < x <= 0	fmuls	%f4,%f8,%f8	ld	[%l0+Bn1],%f10	fadds	%f10,%f8,%f8nvtiny: 			! for -2**-13 < x <= 0	fmuls	%f6,%f8,%f8	ba	exit	fadds	%f4,%f8,%f0LARGE_N:	! recall %l5 is n	sethi	%hi(0x20000),%l3! l3 = 0x20000	add	%i0,%l3,%l2	! l2 = ix+0x20000	srl	%l2,23,%o0	sub	%o0,0x7f,%o0	add	%l5,%o0,%l5	! n += ((ix+0x20000)>>23)-0x7f	sethi	%hi(0x8f000000),%l1	andn	%i0,%l1,%i0	sethi	%hi(0x04000000),%l1	or	%i0,%l1,%i0	! ix = (ix&0x70ffffff)|0x04000000	st	%i0,[%fp-8]	add	%i0,%l3,%l2	! l2 = ix+0x20000	sethi	%hi(0xfffc0000),%l1	ld	[%fp-8],%f0	! f0 = x	and	%l2,%l1,%o0	st	%o0,[%fp-16]	ld	[%fp-16],%f2	fsubs	%f0,%f2,%f4		! f4 = x-z	st	%l5,[%fp-24]	fadds	%f0,%f2,%f6		! f6 = x+z	srl	%l2,16,%l2	fdivs	%f4,%f6,%f6		! f6 = s = (x-z)/(x+z)	ld	[%fp-24],%f16	and	%l2,0x7c,%l2	set	TBL,%o0	fmuls	%f6,%f6,%f8		! f8 = z = s*s	fitos	%f16,%f16		! f16 = (float)n;	ld	[%l0+A1],%f10	fmuls	%f10,%f8,%f10	ld	[%l0+two],%f12	fadds	%f12,%f10,%f10	fmuls	%f6,%f10,%f10	ld	[%l0+ln2lo],%f14	fmuls	%f16,%f14,%f14	fadds	%f10,%f14,%f14	ld	[%o0+%l2],%f12	fadds	%f12,%f14,%f14	ld	[%l0+ln2hi],%f10	fmuls	%f16,%f10,%f10	ba	exit	fadds	%f14,%f10,%f0SMALL_N:	sethi	%hi(0x20000),%o0	sethi	%hi(0xfffc0000),%o1	add	%i0,%o0,%o2	and	%o2,%o1,%o2	st	%o2,[%fp-8]	ld	[%fp-8],%f2	fsubs	%f0,%f2,%f4	sethi	%hi(0x3dbe0000),%o0	fadds	%f0,%f2,%f6	sub	%i0,%o0,%o0	fdivs	%f4,%f6,%f6		! f6 = s = (x-z)/(x+z)	srl	%o0,16,%o0	andn	%o0,0x3,%o0	set	__tbl_r_log_lo,%o1	set	__tbl_r_log_hi,%o2	fmuls	%f6,%f6,%f8		! f8 = z = s*s	ld	[%l0+A1],%f10	fmuls	%f8,%f10,%f10	ld	[%l0+two],%f12	fadds	%f12,%f10,%f10	fmuls	%f6,%f10,%f10	ld	[%o1+%o0],%f4	fadds	%f4,%f10,%f10	ld	[%o2+%o0],%f2	fadds	%f2,%f10,%f0exit:	ret	restore	.seg	"data"        .align 8constant:zero	= 0x0	.word	0one	= 0x4	.word	0x3f800000two	= 0x8	.word	0x40000000two24	= 0xc	.word	0x4b800000	! 16777216 = 2^24ln2hi	= 0x10	.word	0x3f317200	!  6.931457519531250e-1ln2lo	= 0x14	.word	0x35bfbe8e	!  1.428606820286227e-6Bp1	= 0x18	.word	0xBEFFFFF4	! -4.999996375804686e-1Bp2	= 0x1c	.word	0x3EAAA4AC	!  3.332876052778868e-1Bp3	= 0x20	.word	0xBE7E2702	! -2.481956765240821e-1Bp4	= 0x24	.word	0x3E2F921D	!  1.714558145040048e-1Bn1	= 0x28	.word	0xBEFFFFEE	! -4.999994759413435e-1Bn2	= 0x2c	.word	0x3EAAB315	!  3.333975294998483e-1Bn3	= 0x30	.word	0xBE7D8329	! -2.475706542840484e-1Bn4	= 0x34	.word	0x3E7140AD	!  2.355982881354680e-1A1	= 0x38	.word	0x3F2AB03B	!  6.667515563167809e-1TBL:	.word	0x00000000,0x3cfc14d8,0x3d785186,0x3db78694,0x3df1383b	.word	0x3e14aa98,0x3e2ff984,0x3e4a92d5,0x3e647fbe,0x3e7dc8c3	.word	0x3e8b3ae5,0x3e974716,0x3ea30c5e,0x3eae8dee,0x3eb9cec0	.word	0x3ec4d19c,0x3ecf991f,0x3eda27bc,0x3ee47fbe,0x3eeea350	.word	0x3ef8947b,0x3f012a95,0x3f05f397,0x3f0aa61f,0x3f0f42fb	.word	0x3f13caf1,0x3f183eba,0x3f1c9f07,0x3f20ec7f,0x3f2527c3	.word	0x3f295169,0x3f2d6a02

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -