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

📄 fppalib.s

📁 vxworks source code, used for develop vxworks system.
💻 S
📖 第 1 页 / 共 2 页
字号:
/* fppALib.s - floating-point unit support assembly language routines *//* Copyright 1984-2001 Wind River Systems, Inc. */	.data	.global	_copyright_wind_river	.long	_copyright_wind_river/*modification history--------------------01p,11sep01,zl   replaced CPU conditionals with _WRS_HW_FP_SUPPORT.01o,02oct00,zl   made fppSave safe of non-default FPSCR value.01n,06sep00,zl   changed fppProbeSup to use fr12.01m,13jul00,hk   made .global _fppRegGet/_fppRegSet for SH7750 only.01l,12jul00,hk   added fppRegGet and fppRegSet. renamed fpulGet/fpulSet/fpscr-		 Get/fpscrSet to fppFpulGet/fppFpulSet/fppFpscrGet/fppFpscrSet,		 but also kept old names for backward compatibility.01k,20apr00,zl   fixed fppSave and fppRestore.01j,10apr00,hk   got rid of .ptext section for fppProbeTrap.01i,29mar00,hk   added .type directive to function names.01h,20mar00,zl   added extended floating point registers to the FP context01g,17mar00,zl   made use of alignment macro _ALIGN_TEXT01f,08jun99,zl   added .ptext attribute "ax"01e,08mar99,hk   added #if for FPU-less CPU types.01d,11may98,hk   paid some efforts for faster operation.01c,26nov97,hms  added fpp support logic. deleted stubs for fpcrGet/fpcrSet.01b,27apr97,hk   added stubs for fpcrGet/fpcrSet.01a,27sep96,hk   taken from mc68k/fppALib.s 01v. just stubs.*//*DESCRIPTIONThis library contains routines to support the SH7718(SH3e) floating-pointunit.  The routines fppSave() and fppRestore() save and restore all the task floating-point context information.  Higher-level access mechanisms are found in fppLib.SEE ALSO: fppLib, SH Floating-Point Unit User's Manual*/#define _ASMLANGUAGE#include "vxWorks.h"#include "fppLib.h"#include "asm.h"	.text	.global	_fppSave	.global	_fppRestore#if (CPU==SH7750)	.global	_fppRegGet		/* for fppExcHandle (SH7750 only) */	.global	_fppRegSet		/* for fppExcHandle (SH7750 only) */#endif#ifdef	_WRS_HW_FP_SUPPORT	.global	_fppFpulGet	.global	_fppFpulSet	.global	_fppFpscrGet	.global	_fppFpscrSet	.global	_fppProbeSup	.global	_fppProbeTrap	.global	_fpulGet		/* to be obsoleted */	.global	_fpulSet		/* to be obsoleted */	.global	_fpscrGet		/* to be obsoleted */	.global	_fpscrSet		/* to be obsoleted */#endif/********************************************************************************* fppSave - save the floating-pointing context** This routine saves the floating-point context.* The context saved is:**	- registers fpul, fpscr*	- registers fr0 - fr15*	- registers xf0 - xf15 (SH4 only)**	---------*	|  xf15 |    +132  <-- (r4 + 132)*	|  ...  |*	|  xf2  |    + 80*	|  xf1  |    + 76*	|  xf0  |    + 72*	|  fr15 |    + 68  <-- (r4 + 68)*	|  ...  |*	|  fr2  |    + 16*	|  fr1  |    + 12*	|  fr0  |    + 8*	| fpscr |    + 4*	| fpul  | <-- pFpContext ( = r4 )*	---------** RETURNS: N/A** SEE ALSO: fppRestore(), SH Programing Manual and SH Hardware Manual** void fppSave*    (*    FP_CONTEXT * pFpContext	/@ where to save context @/*    )*/	.align	_ALIGN_TEXT	.type	_fppSave,@function_fppSave:				/* r4 : *pFpContext    */#ifdef	_WRS_HW_FP_SUPPORT	add	#8,   r4		/* r4 : *pFpContext+8  */	sts.l	fpscr,@-r4		/* save FPSCR register */	mov.l	FpscrInit,r0		/* r0: FPSCR_INIT      */	sts.l	fpul, @-r4		/* save FPUL register  */	lds	r0,   fpscr		/* FPSCR: FPSCR_INIT   */	add	#72,  r4		/* r4 : *pFpContext+72 */#if (FP_NUM_DREGS == 32)	add	#64,  r4		/* extended registers  */	frchg	fmov.s	fr15, @-r4		/* save XF15 register  */	fmov.s	fr14, @-r4		/* save XF14 register  */	fmov.s	fr13, @-r4		/* save XF13 register  */	fmov.s	fr12, @-r4		/* save XF12 register  */	fmov.s	fr11, @-r4		/* save XF11 register  */	fmov.s	fr10, @-r4		/* save XF10 register  */	fmov.s	fr9,  @-r4		/* save XF9 register   */	fmov.s	fr8,  @-r4		/* save XF8 register   */	fmov.s	fr7,  @-r4		/* save XF7 register   */	fmov.s	fr6,  @-r4		/* save XF6 register   */	fmov.s	fr5,  @-r4		/* save XF5 register   */	fmov.s	fr4,  @-r4		/* save XF4 register   */	fmov.s	fr3,  @-r4		/* save XF3 register   */	fmov.s	fr2,  @-r4		/* save XF2 register   */	fmov.s	fr1,  @-r4		/* save XF1 register   */	fmov.s	fr0,  @-r4		/* save XF0 register   */	frchg#endif	fmov.s	fr15, @-r4		/* save FR15 register  */	fmov.s	fr14, @-r4		/* save FR14 register  */	fmov.s	fr13, @-r4		/* save FR13 register  */	fmov.s	fr12, @-r4		/* save FR12 register  */	fmov.s	fr11, @-r4		/* save FR11 register  */	fmov.s	fr10, @-r4		/* save FR10 register  */	fmov.s	fr9,  @-r4		/* save FR9 register   */	fmov.s	fr8,  @-r4		/* save FR8 register   */	fmov.s	fr7,  @-r4		/* save FR7 register   */	fmov.s	fr6,  @-r4		/* save FR6 register   */	fmov.s	fr5,  @-r4		/* save FR5 register   */	fmov.s	fr4,  @-r4		/* save FR4 register   */	fmov.s	fr3,  @-r4		/* save FR3 register   */	fmov.s	fr2,  @-r4		/* save FR2 register   */	fmov.s	fr1,  @-r4		/* save FR1 register   */	rts;	fmov.s	fr0,  @-r4		/* save FR0 register   */#else	rts	nop#endif/********************************************************************************* fppRestore - restore the floating-point coprocessor context** This routine restores the floating-point coprocessor context.* The context restored is:**	- registers fpul, fpscr*	- registers fr0 - fr15*	- registers xf0 - xf15 (SH4 only)** If the internal state frame is null, the other registers are not restored.** RETURNS: N/A** SEE ALSO: fppSave(), SH Programing Manual and SH Hardware Manual** void fppRestore*    (*    FP_CONTEXT * pFpContext	/@ from where to restore context @/*    )*/	.align	_ALIGN_TEXT	.type	_fppRestore,@function_fppRestore:				/* r4 : *pFpContext    */#ifdef	_WRS_HW_FP_SUPPORT	mov.l	FpscrInit,r0		/* r0: FPSCR_INIT      */	lds.l	@r4+,fpul		/* restore FPUL reg    */	lds	r0,  fpscr		/* FPSCR: FPSCR_INIT   */	add	#4,  r4			/* skip FPSCR          */	fmov.s	@r4+,fr0		/* restore FR0 reg     */	fmov.s	@r4+,fr1		/* restore FP1 reg     */	fmov.s	@r4+,fr2		/* restore FP2 reg     */	fmov.s	@r4+,fr3		/* restore FP3 reg     */	fmov.s	@r4+,fr4		/* restore FP4 reg     */	fmov.s	@r4+,fr5		/* restore FP5 reg     */	fmov.s	@r4+,fr6		/* restore FP6 reg     */	fmov.s	@r4+,fr7		/* restore FP7 reg     */	fmov.s	@r4+,fr8		/* restore FP8 reg     */	fmov.s	@r4+,fr9		/* restore FP9 reg     */	fmov.s	@r4+,fr10		/* restore FP10 reg    */	fmov.s	@r4+,fr11		/* restore FP11 reg    */	fmov.s	@r4+,fr12		/* restore FP12 reg    */	fmov.s	@r4+,fr13		/* restore FP13 reg    */	fmov.s	@r4+,fr14		/* restore FP14 reg    */	fmov.s	@r4+,fr15		/* restore FP15 reg    */#if (FP_NUM_DREGS == 32)	frchg	fmov.s	@r4+,fr0		/* restore XF0 reg     */	fmov.s	@r4+,fr1		/* restore XF1 reg     */	fmov.s	@r4+,fr2		/* restore XF2 reg     */	fmov.s	@r4+,fr3		/* restore XF3 reg     */	fmov.s	@r4+,fr4		/* restore XF4 reg     */	fmov.s	@r4+,fr5		/* restore XF5 reg     */	fmov.s	@r4+,fr6		/* restore XF6 reg     */	fmov.s	@r4+,fr7		/* restore XF7 reg     */	fmov.s	@r4+,fr8		/* restore XF8 reg     */	fmov.s	@r4+,fr9		/* restore XF9 reg     */	fmov.s	@r4+,fr10		/* restore XF10 reg    */	fmov.s	@r4+,fr11		/* restore XF11 reg    */	fmov.s	@r4+,fr12		/* restore XF12 reg    */	fmov.s	@r4+,fr13		/* restore XF13 reg    */	fmov.s	@r4+,fr14		/* restore XF14 reg    */	fmov.s	@r4+,fr15		/* restore XF15 reg    */	frchg	add	#-64,r4#endif  /* (CPU==SH7750) */	add	#-68,r4			/* r4: pFpContext+4    */	rts	lds.l	@r4+,fpscr		/* restore FPSCR reg   */		.align	2FpscrInit:	.long	FPSCR_INIT#else   /* !_WRS_HW_FP_SUPPORT */	rts	nop#endif  /* _WRS_HW_FP_SUPPORT */#if (CPU==SH7750)/******************************************************************************** fppRegGet - get the value of fpu register** STATUS fppRegGet (int regnum, UINT32 *p, int sz)** RETURNS: OK if successful, ERROR otherwise.** NOMANUAL*/ 	.align	_ALIGN_TEXT	.type	_fppRegGet,@function_fppRegGet:	sts	fpscr,r3	/* save original fpscr */	tst	r6,r6	movt	r6		/* 1: args.sz == 0,  0: args.sz == 1 */	bt.s	fppRegGetChkAlign	mov	#0x3,r0		/* fmov.s FRm,@r5 requires 4-bytes align */	mov	#0x7,r0		/* fmov   DRm,@r5 requires 8-bytes align */fppRegGetChkAlign:	tst	r5,r0		/* check destination address alignment */	bf.s	fppRegGetRtn;	mov	#-1,r0		/* set return value to ERROR */fppRegGetChkSz:	mov.l	FPSCR_SZ,r2;	/* check current fpscr.sz */	tst	r3,r2

⌨️ 快捷键说明

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