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

📄 libm.il

📁 操作系统SunOS 4.1.3版本的源码
💻 IL
📖 第 1 页 / 共 2 页
字号:
	.end|/* Convert double to complex */| |void|_Fd_conv_c(c, x)|        complex        *c;|        double          x;|{|        c->real = (float) (x);|        c->imag = 0.0;|} 	.inline	__Fd_conv_c,8	movl    sp@+,d0   	movl    sp@+,d1   	| pick up argument	jsr     PREFIX/**/dtos	movl	sp@+,a0         | a0 points to result c.	movl	d0,a0@+		| Rc gets x.	clrl	a0@		| Ic gets 0.	.end|	Double Precision Complex libF77 routines|| void| d_cmplx(resp,dp1,dp2)|	register dcomplex *resp;|	register double *dp1, *dp2;| {| 	resp->real = *dp1;| 	resp->imag = *dp2;| }| 	.inline	_z_abs,4	movl	sp@+,a0	movl	a0@+,d0	movl	a0@+,d1	jsr	PREFIX/**/length2d	.end|| Fz_neg(c, a)| dcomplex *c, *a;| {| 	c->dreal = - a->dreal;| 	c->dimag = - a->dimag;| }|	.inline	__Fz_neg,8        movl    sp@+,a0         | a0 = c;        movl    sp@+,a1         | a1 = a;        movl    a1@+,a0@+       | c->dreal = - a->dreal;        eorb    #0x80,a0@(-4)        movl    a1@+,a0@+       | c->dreal = - a->dreal;        movl    a1@+,a0@+       | c->imag = - a->imag;        eorb    #0x80,a0@(-4)        movl    a1@,a0@         | c->imag = - a->imag;	.end|| _Ff_conv_z(dp,f)	|	dcomplex *dp;|	union {float f; int i;}f;| {|	dp->real = (double)f.f;|	dp->imag = 0.0;| }|	.inline	__Ff_conv_z,8	movl	sp@(4),d0	jsr	PREFIX/**/stod	movl	sp@+,a0	movl	d0,a0@+	movl	d1,a0@+	clrl    a0@+	clrl    a0@	movl	sp@+,d0			| Throw away second argument.	.end|| float| Fz_conv_f(dp)		|	dcomplex *dp;| {|	return (float)dp->dreal;| }|	.inline	__Fz_conv_f,4	movl    sp@+,a0   	movl	a0@+,d0	movl	a0@,d1	jsr	PREFIX/**/dtos	.end|| int| Fz_conv_i(dp)		|	dcomplex *dp;| {|	return (int)dp->dreal;| }|	.inline	__Fz_conv_i,4	movl    sp@+,a0   	movl	a0@+,d0	movl	a0@,d1	jsr     PREFIX/**/intd	.end|| Fi_conv_z(dp,i)	|	dcomplex *dp;|	int i;| {|	dp->dreal = (double)i;|	dp->dimag = 0.0;| }|	.inline	__Fi_conv_z,8	movl	sp@(4),d0	jsr     PREFIX/**/fltd	movl	sp@+,a0	movl	d0,a0@+	movl	sp@+,d0		| Trash.	movl	d1,a0@+	clrl    a0@+	clrl    a0@	.end|| double| Fz_conv_d(dp)		|	dcomplex *dp;| {|	return dp->dreal;| }|	.inline	__Fz_conv_d,4	movl    sp@+,a0	movl    a0@+,d0	movl    a0@,d1	.end|| Fd_conv_z(dp,d)	|	dcomplex *dp;|	double d;| {|	dp->dreal = d;|	dp->dimag = 0.0;| }|	.inline	__Fd_conv_z,12	movl    sp@+,a0   	movl    sp@+,a0@+	movl    sp@+,a0@+	clrl    a0@+	clrl    a0@	.end|| double| Fz_conv_c(dp)         |       dcomplex *dp;| {|       union { double d; complex c; } sleaze;|       sleaze.cval.real = (float)dp->dreal;|       sleaze.cval.imag = (float)dp->dimag;|       return sleaze.dval;| }|        .inline __Fz_conv_c,4	movl	sp@,a0		| pick up real part of argument	movl	a0@(8),d0	movl	a0@(12),d1	jsr	PREFIX/**/dtos	movl	sp@+,a0		| Restore a0.	movl	d0,sp@-		| Save second part of result.	movl	a0@+,d0	movl	a0@,d1	jsr	PREFIX/**/dtos	movl	sp@+,d1		| Restore second part of result.	.end		| 	convert complex to double complex 		|	arg1 is address of result; arg2 is complex as a double	.inline	__Fc_conv_z,12	movl	sp@(4),d0	| pick up real part of argument	jsr	PREFIX/**/stod	movl	sp@,a0		| get address of result	movl	d0,a0@+	movl	d1,a0@	movl	sp@(8),d0	| pick up imaginary part of argument	jsr	PREFIX/**/stod	movl	sp@+,a0		| get address of result	movl	d0,a0@(8)	movl	d1,a0@(12)	lea	sp@(8),sp	| Bypass second argument.	.end/*****	end from 3.2 fsoft.il *****/        .inline	_c_cmplx,12        movl    sp@+,a1        movl    sp@+,a0        movl    sp@+,d0        movl    a0@,a1@+        movl    d0,a0        movl    a0@,a1@        .end        .inline _d_atn2,8	| Implements ATAN2(DOUBLE).	movl	sp@+,a0		| a0 gets address of first argument.	movl	sp@+,a1		| a1 gets address of second argument.        movl	a1@+,d0		| Pop second argument.        movl	a1@,d1		| Pop second argument.	movl	d1,sp@-	movl	d0,sp@-        movl	a0@+,d0		| Pop first argument.        movl	a0@,d1		| Pop first argument.	movl	d1,sp@-	movl	d0,sp@-	jsr	_atan2	movl	sp@+,a0	movl	sp@+,a0	movl	sp@+,a0	movl	sp@+,a0	.end	|| void| d_cmplx(resp,dp1,dp2)|       register dcomplex *resp.|       register double *dp1, *dp2.| {|       resp->real = *dp1.|       resp->imag = *dp2.| }|        .inline	_d_cmplx,12        movl    sp@+,a1        movl    sp@+,a0        movl    sp@+,d0        movl    a0@+,a1@+        movl    a0@,a1@+        movl    d0,a0        movl    a0@+,a1@+        movl    a0@,a1@        .end         .inline	_d_cnjg,8        movl    sp@+,a0        movl    sp@+,a1        movl    a1@+,a0@+        movl    a1@+,a0@+        movl    a1@+,a0@+        movl    a1@,a0@        eorl    #0x80000000,a0@(-4)        .end         .inline	_d_imag,4        movl    sp@+,a0        movl   a0@(8),d0        movl   a0@(12),d1        .end         .inline	_d_sign,8        movl   sp@+,a0        movl   a0@+,d0	andl	#0x7fffffff,d0        movl   a0@,d1        movl   sp@+,a0        cmpl    #0x80000000,a0@        jhi     2f              | Branch if y < -0.        jcs     1f              | Branch if y >= +0.        tstl    a0@(4)        jeq     1f              | Branch if y is -0.2:	orl	#0x80000000,d01:        .end	.inline _i_nint,4	| Implements NINT(REAL).	movl	sp@+,a0		| a0 gets address of argument.	movl	a0@,d0		| d0 gets argument.	jsr	PREFIX/**/stod	movl	d1,sp@-	movl	d0,sp@-	jsr	_nint	movl	sp@+,d1		| pop junk.	movl	sp@+,d1		| pop junk.	.end		.inline _i_dnnt,4	| Implements NINT(DOUBLE).	movl	sp@+,a0		| a0 gets address of argument.	movl	a0@(4),sp@-	movl	a0@,sp@-	jsr	_nint	movl	sp@+,d1		| pop junk.	movl	sp@+,d1		| pop junk.	.end		.inline _d_pow_,8	| double _d_pow_ ( double *x, *y )	movl	sp@+,a0		| Load addresses of arguments.	movl	sp@+,a1	movl	a1@+,d0		| Pop argument.	movl	a1@,sp@-	| Push argument.	movl	d0,sp@-	movl	a0@+,d0	movl	a0@,sp@-	movl	d0,sp@-	jsr	_pow	movl	sp@+,a0		| Remove arguments.	movl	sp@+,a0	movl	sp@+,a0	movl	sp@+,a0	.end        .inline _pow_dd,8	| Implements DOUBLE**DOUBLE.	movl	sp@+,a0		| Load addresses of arguments.	movl	sp@+,a1	movl	a1@+,d0		| Pop argument.	movl	a1@,sp@-	| Push argument.	movl	d0,sp@-	movl	a0@+,d0	movl	a0@,sp@-	movl	d0,sp@-	jsr	_pow	movl	sp@+,a0		| Remove arguments.	movl	sp@+,a0	movl	sp@+,a0	movl	sp@+,a0	.end	        .inline _pow_rr,8	| Implements REAL**REAL.        jsr     _r_pow_        movl	sp@+,a0		| Pop junk.        movl	sp@+,a0		| Pop junk.	.end        .inline _r_atn2,8	| Implements ATAN2(REAL).	jsr	_r_atan2_        movl	sp@+,a0		| Pop junk.        movl	sp@+,a0		| Pop junk.	.end        .inline	_r_cnjg,8        movl    sp@+,a0        movl    sp@+,a1        movl    a1@+,a0@+        movl    a1@,a0@        eorb    #0x80,a0@        .end        .inline	_r_imag,4        movl    sp@+,a0        movl   a0@(4),d0        .end        .inline	_r_sign,8        movl   sp@+,a0        movl   a0@,d0	andl	#0x7fffffff,d0        movl   sp@+,a0        cmpl    #0x80000000,a0@        jls     1f              | Branch if y >= +0.	orl	#0x80000000,d01:        .end/*	Templates for libm "R" routines for single-precision Fortran, Pascal, Modula-2 	*//*	Templates for libm "D" routines for double-precision Fortran			*/#define D_F(X) /* double d_X_( double x ) */ \	.inline _d_/**/X/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@(4),sp@- ; \	movl	a0@,sp@- ; \	jsr	_/**/X ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	.end#define ID_F(X) /* int id_X_( double x ) */ \	.inline _id_/**/X/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@(4),sp@- ; \	movl	a0@,sp@- ; \	jsr	_/**/X ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	.end#define D_F2(X) /* double d_X_( double x,y ) */ \	.inline _d_/**/X/**/_,8 ; \	movl	sp@+,a0 ; \	movl	sp@+,a1 ; \	movl	a1@(4),sp@- ; \	movl	a1@,sp@- ; \	movl	a0@(4),sp@- ; \	movl	a0@,sp@- ; \	jsr	_/**/X ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	.end#define D_FIX(X) /* double d_X_( int n, double y ) */ \	.inline _d_/**/X/**/_,8 ; \	movl	sp@+,a0 ; \	movl	sp@+,a1 ; \	movl	a1@(4),sp@- ; \	movl	a1@,sp@- ; \	movl	a0@,sp@- ; \	jsr	_/**/X ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	.end#define D_FXI(X) /* double d_X_( double n, int y ) */ \	.inline _d_/**/X/**/_,8 ; \	movl	sp@+,a0 ; \	movl	sp@+,a1 ; \	movl	a1@,sp@- ; \	movl	a0@(4),sp@- ; \	movl	a0@,sp@- ; \	jsr	_/**/X ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \	.end	D_F(acos)	D_F(acosh)	D_F(cos)	D_F(cosh)	D_F(asin)	D_F(asinh)	D_F(sin)	D_F(sinh)	D_F(atan)	D_F(atanh)	D_F(tan)	D_F(tanh)	D_F(cbrt)	D_F(erf)	D_F(erfc)	D_F(exp)	D_F(exp2)	D_F(exp10)	D_F(expm1)	D_F(j0)	D_F(j1)	D_F(lgamma)	D_F(log)	D_F(log1p)	D_F(log2)	D_F(log10)	D_F(logb)	D_F(sqrt)	D_F(y0)	D_F(y1)		ID_F(fp_class)	ID_F(ilogb)	D_F2(atan2)	D_F2(nextafter)	D_F2(scalb)	D_FIX(jn)	D_FIX(yn)#ifdef FSKY#define CDRI(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     S/**/g/**/d ; \        .end ; \	.inline	_id_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	S/**/g/**/d ; \	.end ; \	.inline	_ir_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	S/**/g/**/s ; \	.end#define CDRX(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     S/**/g/**/d ; \        .end ; \	.inline	_d_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	S/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	S/**/g/**/s ; \	.end#define CDRXX(f,g) ; \	.inline	_/**/f,16 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     S/**/g/**/d ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	S/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	S/**/g/**/s ; \	.end#define CDRXI(f,g) ; \	.inline	_/**/f,12 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     S/**/g/**/d ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	S/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	S/**/g/**/s ; \	.end#endif#ifdef FSOFT#define CDRI(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     F/**/g/**/d ; \        .end ; \	.inline	_id_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	F/**/g/**/d ; \	.end ; \	.inline	_ir_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	F/**/g/**/s ; \	.end#define CDRX(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     F/**/g/**/d ; \        .end ; \	.inline	_d_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	F/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	F/**/g/**/s ; \	.end#define CDRXX(f,g) ; \	.inline	_/**/f,16 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     F/**/g/**/d ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	F/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	F/**/g/**/s ; \	.end#define CDRXI(f,g) ; \	.inline	_/**/f,12 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     F/**/g/**/d ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	F/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	F/**/g/**/s ; \	.end#endif#ifdef FSWITCH#define CDRI(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     V/**/g/**/d ; \        .end ; \	.inline	_id_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	V/**/g/**/d ; \	.end ; \	.inline	_ir_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	V/**/g/**/s ; \	.end#define CDRX(f,g) ; \	.inline	_/**/f,8 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	jsr     V/**/g/**/d ; \        .end ; \	.inline	_d_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	jsr	V/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,4 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	jsr	V/**/g/**/s ; \	.end#define CDRXX(f,g) ; \	.inline	_/**/f,16 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     V/**/g/**/d ; \	movl	sp@+,a0 ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	V/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	V/**/g/**/s ; \	.end#define CDRXI(f,g) ; \	.inline	_/**/f,12 ; \	movl	sp@+,d0 ; \	movl	sp@+,d1 ; \	lea	sp@,a0 ; \	jsr     V/**/g/**/d ; \	movl	sp@+,a0 ; \        .end ; \	.inline	_d_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@+,d0 ; \	movl	a0@,d1 ; \	movl	sp@+,a0 ; \	jsr	V/**/g/**/d ; \	.end ; \	.inline	_r_/**/f/**/_,8 ; \	movl	sp@+,a0 ; \	movl	a0@,d0 ; \	movl	sp@+,a0 ; \	movl	a0@,d1 ; \	jsr	V/**/g/**/s ; \	.end#endif#ifndef CDRI#define CDRI(f,g)#define CDRX(f,g)#define CDRXX(f,g)#define CDRXI(f,g)#endif	CDRI(nint,nint)	CDRI(irint,rint)	CDRX(aint,aint)	CDRX(anint,anint)	CDRX(rint,arint)	CDRX(ceil,ceil)	CDRX(floor,floor)	CDRX(sqrt,sqrt)	CDRXX(hypot,length2)	CDRXX(fmod,mod)	CDRXX(remainder,rem)	CDRXI(scalbn,scalei)

⌨️ 快捷键说明

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