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

📄 l_slogn.s

📁 Vxworks OS source code
💻 S
📖 第 1 页 / 共 2 页
字号:
/* l_slogn.s - Motorola 68040 FP natural log routines (LIB) *//* Copyright 1991-1993 Wind River Systems, Inc. */	.data	.globl	_copyright_wind_river	.long	_copyright_wind_river/*modification history--------------------01e,21jul93,kdl  added .text (SPR #2372).01d,23aug92,jcf  changed bxxx to jxx.01c,26may92,rrr  the tree shuffle01b,10jan92,kdl  added modification history; general cleanup.01a,15aug91,kdl  original version, from Motorola FPSP v2.0.*//*DESCRIPTION	slognsa 3.1 12/10/90	__l_slogn computes the natural logarithm of an	input value. __l_slognd does the same except the input value is a	denormalized number. __l_slognp1 computes log(1+X), and __l_slognp1d	computes log(1+X) for denormalized X.	Input: Double-extended value in memory location pointed to by address		register a0.	Output:	log(X) or log(1+X) returned in floating-point register Fp0.	Accuracy and Monotonicity: The returned result is within 2 ulps in		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the		result is subsequently rounded to double precision. The		result is provably monotonic in double precision.	Speed: The program __l_slogn takes approximately 190 cycles for input		argument X such that |X-1| >= 1/16, which is the the usual		situation. For those arguments, __l_slognp1 takes approximately		 210 cycles. For the less common arguments, the program will		 run no worse than 10 slower.	Algorithm:	LOGN:	Step 1. If |X-1| < 1/16, approximate log(X) by an odd polynomial in		u, where u = 2(X-1)/(X+1). Otherwise, move on to Step 2.	Step 2. X = 2**k * Y where 1 <= Y < 2. Define F to be the first seven		significant bits of Y plus 2**(-7), i.e. F = 1xxxxxx1 in base		2 where the six "x" match those of Y. Note that |Y-F| <= 2**(-7).	Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a polynomial in u,		log(1+u) = poly.	Step 4. Reconstruct log(X) = log( 2**k * Y ) = k*log(2) + log(F) + log(1+u)		by k*log(2) + (log(F) + poly). The values of log(F) are calculated		beforehand and stored in the program.	lognp1:	Step 1: If |X| < 1/16, approximate log(1+X) by an odd polynomial in		u where u = 2X/(2+X). Otherwise, move on to Step 2.	Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done in Step 2		of the algorithm for LOGN and compute log(1+X) as		k*log(2) + log(F) + poly where poly approximates log(1+u),		u = (Y-F)/F.	Implementation Notes:	Note 1. There are 64 different possible values for F, thus 64 log(F)'s		need to be tabulated. Moreover, the values of 1/F are also		tabulated so that the division in (Y-F)/F can be performed by a		multiplication.	Note 2. In Step 2 of lognp1, in order to preserved accuracy, the value		Y-F has to be calculated carefully when 1/2 <= X < 3/2.	Note 3. To fully exploit the pipeline, polynomials are usually separated		into two parts evaluated independently before being added up.		Copyright (C) Motorola, Inc. 1990			All Rights Reserved	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA	The copyright notice above does not evidence any	actual or intended publication of such source code.__l_slogn	IDNT	2,1 Motorola 040 Floating Point Software Package	section	8NOMANUAL*/#include "fpsp040L.h"BOUNDS1:  .long 0x3FFEF07D,0x3FFF8841BOUNDS2:  .long 0x3FFE8000,0x3FFFC000LOGOF2:	.long 0x3FFE0000,0xB17217F7,0xD1CF79AC,0x00000000one:	.long 0x3F800000zero:	.long 0x00000000infty:	.long 0x7F800000negone:	.long 0xBF800000LOGA6:	.long 0x3FC2499A,0xB5E4040BLOGA5:	.long 0xBFC555B5,0x848CB7DBLOGA4:	.long 0x3FC99999,0x987D8730LOGA3:	.long 0xBFCFFFFF,0xFF6F7E97LOGA2:	.long 0x3FD55555,0x555555A4LOGA1:	.long 0xBFE00000,0x00000008LOGB5:	.long 0x3F175496,0xADD7DAD6LOGB4:	.long 0x3F3C71C2,0xFE80C7E0LOGB3:	.long 0x3F624924,0x928BCCFFLOGB2:	.long 0x3F899999,0x999995ECLOGB1:	.long 0x3FB55555,0x55555555TWO:	.long 0x40000000,0x00000000LTHOLD:	.long 0x3f990000,0x80000000,0x00000000,0x00000000LOGTBL:	.long  0x3FFE0000,0xFE03F80F,0xE03F80FE,0x00000000	.long  0x3FF70000,0xFF015358,0x833C47E2,0x00000000	.long  0x3FFE0000,0xFA232CF2,0x52138AC0,0x00000000	.long  0x3FF90000,0xBDC8D83E,0xAD88D549,0x00000000	.long  0x3FFE0000,0xF6603D98,0x0F6603DA,0x00000000	.long  0x3FFA0000,0x9CF43DCF,0xF5EAFD48,0x00000000	.long  0x3FFE0000,0xF2B9D648,0x0F2B9D65,0x00000000	.long  0x3FFA0000,0xDA16EB88,0xCB8DF614,0x00000000	.long  0x3FFE0000,0xEF2EB71F,0xC4345238,0x00000000	.long  0x3FFB0000,0x8B29B775,0x1BD70743,0x00000000	.long  0x3FFE0000,0xEBBDB2A5,0xC1619C8C,0x00000000	.long  0x3FFB0000,0xA8D839F8,0x30C1FB49,0x00000000	.long  0x3FFE0000,0xE865AC7B,0x7603A197,0x00000000	.long  0x3FFB0000,0xC61A2EB1,0x8CD907AD,0x00000000	.long  0x3FFE0000,0xE525982A,0xF70C880E,0x00000000	.long  0x3FFB0000,0xE2F2A47A,0xDE3A18AF,0x00000000	.long  0x3FFE0000,0xE1FC780E,0x1FC780E2,0x00000000	.long  0x3FFB0000,0xFF64898E,0xDF55D551,0x00000000	.long  0x3FFE0000,0xDEE95C4C,0xA037BA57,0x00000000	.long  0x3FFC0000,0x8DB956A9,0x7B3D0148,0x00000000	.long  0x3FFE0000,0xDBEB61EE,0xD19C5958,0x00000000	.long  0x3FFC0000,0x9B8FE100,0xF47BA1DE,0x00000000	.long  0x3FFE0000,0xD901B203,0x6406C80E,0x00000000	.long  0x3FFC0000,0xA9372F1D,0x0DA1BD17,0x00000000	.long  0x3FFE0000,0xD62B80D6,0x2B80D62C,0x00000000	.long  0x3FFC0000,0xB6B07F38,0xCE90E46B,0x00000000	.long  0x3FFE0000,0xD3680D36,0x80D3680D,0x00000000	.long  0x3FFC0000,0xC3FD0329,0x06488481,0x00000000	.long  0x3FFE0000,0xD0B69FCB,0xD2580D0B,0x00000000	.long  0x3FFC0000,0xD11DE0FF,0x15AB18CA,0x00000000	.long  0x3FFE0000,0xCE168A77,0x25080CE1,0x00000000	.long  0x3FFC0000,0xDE1433A1,0x6C66B150,0x00000000	.long  0x3FFE0000,0xCB8727C0,0x65C393E0,0x00000000	.long  0x3FFC0000,0xEAE10B5A,0x7DDC8ADD,0x00000000	.long  0x3FFE0000,0xC907DA4E,0x871146AD,0x00000000	.long  0x3FFC0000,0xF7856E5E,0xE2C9B291,0x00000000	.long  0x3FFE0000,0xC6980C69,0x80C6980C,0x00000000	.long  0x3FFD0000,0x82012CA5,0xA68206D7,0x00000000	.long  0x3FFE0000,0xC4372F85,0x5D824CA6,0x00000000	.long  0x3FFD0000,0x882C5FCD,0x7256A8C5,0x00000000	.long  0x3FFE0000,0xC1E4BBD5,0x95F6E947,0x00000000	.long  0x3FFD0000,0x8E44C60B,0x4CCFD7DE,0x00000000	.long  0x3FFE0000,0xBFA02FE8,0x0BFA02FF,0x00000000	.long  0x3FFD0000,0x944AD09E,0xF4351AF6,0x00000000	.long  0x3FFE0000,0xBD691047,0x07661AA3,0x00000000	.long  0x3FFD0000,0x9A3EECD4,0xC3EAA6B2,0x00000000	.long  0x3FFE0000,0xBB3EE721,0xA54D880C,0x00000000	.long  0x3FFD0000,0xA0218434,0x353F1DE8,0x00000000	.long  0x3FFE0000,0xB92143FA,0x36F5E02E,0x00000000	.long  0x3FFD0000,0xA5F2FCAB,0xBBC506DA,0x00000000	.long  0x3FFE0000,0xB70FBB5A,0x19BE3659,0x00000000	.long  0x3FFD0000,0xABB3B8BA,0x2AD362A5,0x00000000	.long  0x3FFE0000,0xB509E68A,0x9B94821F,0x00000000	.long  0x3FFD0000,0xB1641795,0xCE3CA97B,0x00000000	.long  0x3FFE0000,0xB30F6352,0x8917C80B,0x00000000	.long  0x3FFD0000,0xB7047551,0x5D0F1C61,0x00000000	.long  0x3FFE0000,0xB11FD3B8,0x0B11FD3C,0x00000000	.long  0x3FFD0000,0xBC952AFE,0xEA3D13E1,0x00000000	.long  0x3FFE0000,0xAF3ADDC6,0x80AF3ADE,0x00000000	.long  0x3FFD0000,0xC2168ED0,0xF458BA4A,0x00000000	.long  0x3FFE0000,0xAD602B58,0x0AD602B6,0x00000000	.long  0x3FFD0000,0xC788F439,0xB3163BF1,0x00000000	.long  0x3FFE0000,0xAB8F69E2,0x8359CD11,0x00000000	.long  0x3FFD0000,0xCCECAC08,0xBF04565D,0x00000000	.long  0x3FFE0000,0xA9C84A47,0xA07F5638,0x00000000	.long  0x3FFD0000,0xD2420487,0x2DD85160,0x00000000	.long  0x3FFE0000,0xA80A80A8,0x0A80A80B,0x00000000	.long  0x3FFD0000,0xD7894992,0x3BC3588A,0x00000000	.long  0x3FFE0000,0xA655C439,0x2D7B73A8,0x00000000	.long  0x3FFD0000,0xDCC2C4B4,0x9887DACC,0x00000000	.long  0x3FFE0000,0xA4A9CF1D,0x96833751,0x00000000	.long  0x3FFD0000,0xE1EEBD3E,0x6D6A6B9E,0x00000000	.long  0x3FFE0000,0xA3065E3F,0xAE7CD0E0,0x00000000	.long  0x3FFD0000,0xE70D785C,0x2F9F5BDC,0x00000000	.long  0x3FFE0000,0xA16B312E,0xA8FC377D,0x00000000	.long  0x3FFD0000,0xEC1F392C,0x5179F283,0x00000000	.long  0x3FFE0000,0x9FD809FD,0x809FD80A,0x00000000	.long  0x3FFD0000,0xF12440D3,0xE36130E6,0x00000000	.long  0x3FFE0000,0x9E4CAD23,0xDD5F3A20,0x00000000	.long  0x3FFD0000,0xF61CCE92,0x346600BB,0x00000000	.long  0x3FFE0000,0x9CC8E160,0xC3FB19B9,0x00000000	.long  0x3FFD0000,0xFB091FD3,0x8145630A,0x00000000	.long  0x3FFE0000,0x9B4C6F9E,0xF03A3CAA,0x00000000	.long  0x3FFD0000,0xFFE97042,0xBFA4C2AD,0x00000000	.long  0x3FFE0000,0x99D722DA,0xBDE58F06,0x00000000	.long  0x3FFE0000,0x825EFCED,0x49369330,0x00000000	.long  0x3FFE0000,0x9868C809,0x868C8098,0x00000000	.long  0x3FFE0000,0x84C37A7A,0xB9A905C9,0x00000000	.long  0x3FFE0000,0x97012E02,0x5C04B809,0x00000000	.long  0x3FFE0000,0x87224C2E,0x8E645FB7,0x00000000	.long  0x3FFE0000,0x95A02568,0x095A0257,0x00000000	.long  0x3FFE0000,0x897B8CAC,0x9F7DE298,0x00000000	.long  0x3FFE0000,0x94458094,0x45809446,0x00000000	.long  0x3FFE0000,0x8BCF55DE,0xC4CD05FE,0x00000000	.long  0x3FFE0000,0x92F11384,0x0497889C,0x00000000	.long  0x3FFE0000,0x8E1DC0FB,0x89E125E5,0x00000000	.long  0x3FFE0000,0x91A2B3C4,0xD5E6F809,0x00000000	.long  0x3FFE0000,0x9066E68C,0x955B6C9B,0x00000000	.long  0x3FFE0000,0x905A3863,0x3E06C43B,0x00000000	.long  0x3FFE0000,0x92AADE74,0xC7BE59E0,0x00000000	.long  0x3FFE0000,0x8F1779D9,0xFDC3A219,0x00000000	.long  0x3FFE0000,0x94E9BFF6,0x15845643,0x00000000	.long  0x3FFE0000,0x8DDA5202,0x37694809,0x00000000	.long  0x3FFE0000,0x9723A1B7,0x20134203,0x00000000	.long  0x3FFE0000,0x8CA29C04,0x6514E023,0x00000000	.long  0x3FFE0000,0x995899C8,0x90EB8990,0x00000000	.long  0x3FFE0000,0x8B70344A,0x139BC75A,0x00000000	.long  0x3FFE0000,0x9B88BDAA,0x3A3DAE2F,0x00000000	.long  0x3FFE0000,0x8A42F870,0x5669DB46,0x00000000	.long  0x3FFE0000,0x9DB4224F,0xFFE1157C,0x00000000	.long  0x3FFE0000,0x891AC73A,0xE9819B50,0x00000000	.long  0x3FFE0000,0x9FDADC26,0x8B7A12DA,0x00000000	.long  0x3FFE0000,0x87F78087,0xF78087F8,0x00000000	.long  0x3FFE0000,0xA1FCFF17,0xCE733BD4,0x00000000	.long  0x3FFE0000,0x86D90544,0x7A34ACC6,0x00000000	.long  0x3FFE0000,0xA41A9E8F,0x5446FB9F,0x00000000	.long  0x3FFE0000,0x85BF3761,0x2CEE3C9B,0x00000000	.long  0x3FFE0000,0xA633CD7E,0x6771CD8B,0x00000000	.long  0x3FFE0000,0x84A9F9C8,0x084A9F9D,0x00000000	.long  0x3FFE0000,0xA8489E60,0x0B435A5E,0x00000000	.long  0x3FFE0000,0x83993052,0x3FBE3368,0x00000000	.long  0x3FFE0000,0xAA59233C,0xCCA4BD49,0x00000000	.long  0x3FFE0000,0x828CBFBE,0xB9A020A3,0x00000000	.long  0x3FFE0000,0xAC656DAE,0x6BCC4985,0x00000000	.long  0x3FFE0000,0x81848DA8,0xFAF0D277,0x00000000	.long  0x3FFE0000,0xAE6D8EE3,0x60BB2468,0x00000000	.long  0x3FFE0000,0x80808080,0x80808081,0x00000000	.long  0x3FFE0000,0xB07197A2,0x3C46C654,0x00000000#define	ADJK		L_SCR1#define	X		FP_SCR1#define	XDCARE		X+2#define	XFRAC		X+4#define	F		FP_SCR2#define	FFRAC		F+4#define	KLOG2		FP_SCR3#define	SAVEU		FP_SCR4|	xref	__l_t_frcinx|	xref	__l_t_extdnrm|	xref	__l_t_operr|	xref	__l_t_dz	.text	.globl	__l_slognd__l_slognd:|--ENTRY POINT FOR LOG(X) FOR DENORMALIZED INPUT	movel		#-100,a6@(ADJK)	|...INPUT = 2^(ADJK) * fp0|----normalize the input value by left shifting k bits (k to be determined|----below), adjusting exponent and storing -k to  ADJK|----the value TWOTO100 is no longer needed.|----Note that this code assumes the denormalized input is NON-ZERO.     moveml	d2-d7,A7@-		|...save some registers     movel	#0x00000000,d3		|...D3 is exponent of smallest __l_norm. #     movel	A0@(4),d4     movel	A0@(8),d5		|...(D4,d5) is (Hi_X,Lo_X)     clrl	d2			|...D2 used for holding K     tstl	d4     jne 	HiX_not0HiX_0:     movel	d5,d4     clrl	d5     movel	#32,d2     clrl	d6     bfffo      d4{#0:#32},d6     lsll      d6,d4     addl	d6,d2			|...(D3,d4,d5) is normalized     movel	d3,a6@(X)     movel	d4,a6@(XFRAC)

⌨️ 快捷键说明

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