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

📄 do_func.s

📁 VXWORKS源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.long	__x_smod_snan	|   10,11  inf,nan   = nan	.long	__x_smod_dnan	|   11,00  nan,norm  = nan	.long	__x_smod_dnan	|   11,01  nan,zero  = nan	.long	__x_smod_dnan	|   11,10  nan,inf   = nan	.long	__x_smod_dnan	|   11,11  nan,nan   = nan	.globl	__x_pmod__x_pmod:	clr.b	FPSR_QBYTE(a6)      | clear quotient field	bfextu	a6@(STAG){#0:#3},d0 | stag = d0	bfextu	a6@(DTAG){#0:#3},d1 | dtag = d1|| Alias extended denorms to norms for the jump table.|	bclr	#2,d0	bclr	#2,d1	lslb	#2,d1	orb	d0,d1		| d1{3:2} = dtag, d1{1:0} = stag|				| Tag values:|				| 00 = norm or denorm|				| 01 = zero|				| 10 = inf|				| 11 = nan	lea	__x_pmodt,a1	movel	a1@(d1:w:4),a1	jmp	a1@__x_smod_snan:	jra 	__x_src_nan__x_smod_dnan:	jra 	__x_dst_nan__x_smod_oper:	jra 	__x_t_operr__x_smod_zro:	moveb	a6@(ETEMP),d1	| get sign of src op	moveb	a6@(FPTEMP),d0	| get sign of dst op	eorb	d0,d1		| get exor of sign bits	btst	#7,d1		| test for sign	jeq 	__x_smod_zsn	| if clr, do not set sign big	bset	#q_sn_bit,a6@(FPSR_QBYTE) | set q-byte sign bit__x_smod_zsn:	btst	#7,d0		| test if + or -	jeq 	__x_ld_pzero	| if pos then load +0	jra 	__x_ld_mzero	| else neg load -0__x_smod_fpn:	moveb	a6@(ETEMP),d1	| get sign of src op	moveb	a6@(FPTEMP),d0	| get sign of dst op	eorb	d0,d1		| get exor of sign bits	btst	#7,d1		| test for sign	jeq 	__x_smod_fsn	| if clr, do not set sign big	bset	#q_sn_bit,a6@(FPSR_QBYTE) | set q-byte sign bit__x_smod_fsn:	tstb	a6@(DTAG)	| filter out denormal destination case	jpl 	__x_smod_nrm	|	lea	a6@(FPTEMP),a0	| a0<- addr(FPTEMP)	jra 	__x_t_resdnrm	| force UNFL(but exact) result__x_smod_nrm:	fmovel	a6@(USER_FPCR),fpcr /* | use user's rmode and precision */	fmovex	a6@(FPTEMP),fp0	| return dest to fp0	rts||	FREM|__x_premt:|				| 0x25 frem|				| dtag,stag	.long	__x_srem	|   00,00  norm,norm = normal	.long	__x_srem_oper	|   00,01  norm,zero = nan with operr	.long	__x_srem_fpn	|   00,10  norm,inf  = fpn	.long	__x_srem_snan	|   00,11  norm,nan  = nan	.long	__x_srem_zro	|   01,00  zero,norm = +-zero	.long	__x_srem_oper	|   01,01  zero,zero = nan with operr	.long	__x_srem_zro	|   01,10  zero,inf  = +-zero	.long	__x_srem_snan	|   01,11  zero,nan  = nan	.long	__x_srem_oper	|   10,00  inf,norm  = nan with operr	.long	__x_srem_oper	|   10,01  inf,zero  = nan with operr	.long	__x_srem_oper	|   10,10  inf,inf   = nan with operr	.long	__x_srem_snan	|   10,11  inf,nan   = nan	.long	__x_srem_dnan	|   11,00  nan,norm  = nan	.long	__x_srem_dnan	|   11,01  nan,zero  = nan	.long	__x_srem_dnan	|   11,10  nan,inf   = nan	.long	__x_srem_dnan	|   11,11  nan,nan   = nan	.globl	__x_prem__x_prem:	clr.b	FPSR_QBYTE(a6)      | clear quotient field	bfextu	a6@(STAG){#0:#3},d0 | stag = d0	bfextu	a6@(DTAG){#0:#3},d1 | dtag = d1|| Alias extended denorms to norms for the jump table.|	bclr	#2,d0	bclr	#2,d1	lslb	#2,d1	orb	d0,d1		| d1{3:2} = dtag, d1{1:0} = stag|				| Tag values:|				| 00 = norm or denorm|				| 01 = zero|				| 10 = inf|				| 11 = nan	lea	__x_premt,a1	movel	a1@(d1:w:4),a1	jmp	a1@__x_srem_snan:	jra 	__x_src_nan__x_srem_dnan:	jra 	__x_dst_nan__x_srem_oper:	jra 	__x_t_operr__x_srem_zro:	moveb	a6@(ETEMP),d1	| get sign of src op	moveb	a6@(FPTEMP),d0	| get sign of dst op	eorb	d0,d1		| get exor of sign bits	btst	#7,d1		| test for sign	jeq 	__x_srem_zsn	| if clr, do not set sign big	bset	#q_sn_bit,a6@(FPSR_QBYTE) | set q-byte sign bit__x_srem_zsn:	btst	#7,d0		| test if + or -	jeq 	__x_ld_pzero	| if pos then load +0	jra 	__x_ld_mzero	| else neg load -0__x_srem_fpn:	moveb	a6@(ETEMP),d1	| get sign of src op	moveb	a6@(FPTEMP),d0	| get sign of dst op	eorb	d0,d1		| get exor of sign bits	btst	#7,d1		| test for sign	jeq 	__x_srem_fsn	| if clr, do not set sign big	bset	#q_sn_bit,a6@(FPSR_QBYTE) | set q-byte sign bit__x_srem_fsn:	tstb	a6@(DTAG)	| filter out denormal destination case	jpl 	__x_srem_nrm	|	lea	a6@(FPTEMP),a0	| a0<- addr(FPTEMP)	jra 	__x_t_resdnrm	| force UNFL(but exact) result__x_srem_nrm:	fmovel	a6@(USER_FPCR),fpcr /* | use user's rmode and precision */	fmovex	a6@(FPTEMP),fp0	| return dest to fp0	rts||	FSCALE|__x_pscalet:|				| 0x26 fscale|				| dtag,stag	.long	__x_sscale	|   00,00  norm,norm = result	.long	__x_sscale	|   00,01  norm,zero = fpn	.long	scl_opr		|   00,10  norm,inf  = nan with operr	.long	scl_snan	|   00,11  norm,nan  = nan	.long	scl_zro		|   01,00  zero,norm = +-zero	.long	scl_zro		|   01,01  zero,zero = +-zero	.long	scl_opr		|   01,10  zero,inf  = nan with operr	.long	scl_snan	|   01,11  zero,nan  = nan	.long	scl_inf		|   10,00  inf,norm  = +-inf	.long	scl_inf		|   10,01  inf,zero  = +-inf	.long	scl_opr		|   10,10  inf,inf   = nan with operr 	.long	scl_snan	|   10,11  inf,nan   = nan 	.long	scl_dnan	|   11,00  nan,norm  = nan 	.long	scl_dnan	|   11,01  nan,zero  = nan 	.long	scl_dnan	|   11,10  nan,inf   = nan	.long	scl_dnan	|   11,11  nan,nan   = nan	.globl	__x_pscale__x_pscale:	bfextu	a6@(STAG){#0:#3},d0 | stag in d0	bfextu	a6@(DTAG){#0:#3},d1 | dtag in d1	bclr	#2,d0		| alias  denorm into norm	bclr	#2,d1		| alias  denorm into norm	lslb	#2,d1	orb	d0,d1		| d1{4:2} = dtag, d1{1:0} = stag|				| dtag values     stag values:|				| 000 = norm      00 = norm|				| 001 = zero	 01 = zero|				| 010 = inf	 10 = inf|				| 011 = nan	 11 = nan|				| 100 = dnrm||	lea	__x_pscalet,a1	| load start of jump table	movel	a1@(d1:w:4),a1	| load a1 with label depending on tag	jmp	a1@		| go to the routinescl_opr:	jra 	__x_t_operrscl_dnan:	jra 	__x_dst_nanscl_zro:	btst	#sign_bit,a6@(FPTEMP_EX)	| test if + or -	jeq 	__x_ld_pzero			| if pos then load +0	jra 	__x_ld_mzero			| if neg then load -0scl_inf:	btst	#sign_bit,a6@(FPTEMP_EX)	| test if + or -	jeq 	__x_ld_pinf			| if pos then load +inf	jra 	__x_ld_minf			| else neg load -infscl_snan:	jra 	__x_src_nan||	FSINCOS|	.globl	__x_ssincosz__x_ssincosz:	btst	#sign_bit,a6@(ETEMP)	| get sign	jeq 	sincosp	fmovex	MZERO,fp0	jra 	sincoscomsincosp:	fmovex PZERO,fp0sincoscom:  	fmovemx PONE,fp1-fp1		| do not allow FPSR to be affected	jra 	__x_sto_cos		| store cosine result	.globl	__x_ssincosi__x_ssincosi:	fmovex QNAN,fp1			| load NAN	bsrl	__x_sto_cos		| store cosine result	fmovex QNAN,fp0	| load NAN	jra 	__x_t_operr	.globl	__x_ssincosnan__x_ssincosnan:	movel	a6@(ETEMP_EX),a6@(FP_SCR1)	movel	a6@(ETEMP_HI),a6@(FP_SCR1+4)	movel	a6@(ETEMP_LO),a6@(FP_SCR1+8)	bset	#signan_bit,a6@(FP_SCR1+4)	fmovemx	a6@(FP_SCR1),fp1-fp1	bsrl	__x_sto_cos	jra 	__x_src_nan|| This code forces default values for the zero, inf, and nan cases| in the transcendentals code.  The CC bits must be set in the| stacked FPSR to be correctly reported.||**Returns +PI/2	.globl	__x_ld_ppi2__x_ld_ppi2:	fmovex PPIBY2,fp0			| load +pi/2	jra 	__x_t_inx2			| set inex2 exc|**Returns -PI/2	.globl	__x_ld_mpi2__x_ld_mpi2:	fmovex MPIBY2,fp0			| load -pi/2	orl	#neg_mask,a6@(USER_FPSR)	| set N bit	jra 	__x_t_inx2			| set inex2 exc|**Returns +inf	.globl	__x_ld_pinf__x_ld_pinf:	fmovex PINF,fp0				| load +inf	orl	#inf_mask,a6@(USER_FPSR)	| set I bit	rts|**Returns -inf	.globl	__x_ld_minf__x_ld_minf:	fmovex MINF,fp0				| load -inf	orl	#neg_mask+inf_mask,a6@(USER_FPSR)	| set N and I bits	rts|**Returns +1	.globl	__x_ld_pone__x_ld_pone:	fmovex PONE,fp0		| load +1	rts|**Returns -1	.globl	__x_ld_mone__x_ld_mone:	fmovex MONE,fp0		| load -1	orl	#neg_mask,a6@(USER_FPSR)	| set N bit	rts|**Returns +0	.globl	__x_ld_pzero__x_ld_pzero:	fmovex PZERO,fp0		| load +0	orl	#z_mask,a6@(USER_FPSR)	| set Z bit	rts|**Returns -0	.globl	__x_ld_mzero__x_ld_mzero:	fmovex MZERO,fp0		| load -0	orl	#neg_mask+z_mask,a6@(USER_FPSR)	| set N and Z bits	rts|	end

⌨️ 快捷键说明

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