blkmove.c

来自「本测试程序是针对TMS320LF2407 EVM的性能测试而设计开发的。程序运行」· C语言 代码 · 共 144 行

C
144
字号
/*--------------------------------------------------------*/
/*  SPECTRUM DIGITAL INC.				                  */
/*--------------------------------------------------------*/
/*  Moves block of memory from program to data		      */
/*			   and data to program space	              */
/*--------------------------------------------------------*/
/*  file name:	 blkmove.c				                  */
/*  Started on:  02/11/1997    by mls			          */
/*  Last update: 02/18/2000    by rrp for 2407	     	  */
/*--------------------------------------------------------*/

unsigned int  blk_mv_p2d( unsigned int *pgm_src, unsigned int size, unsigned int *data_dest )
{


    /*--------------------------------------------------*/
    /* Save 3 Aux Registers to Stack bump past temp 1st */
    /* Use AR3 to point to parameters on the stack    	*/
    /*--------------------------------------------------*/

    asm("       MAR *+         ");
    asm("       SAR AR3,*+     ");

    /*--------------------------------------------------*/
    /* AR3 is Pointer to Parameters on the stack via	*/
    /* backing up stack pointer then restoring it	*/
    /*--------------------------------------------------*/
    asm("       MAR *-         ");
    asm("       MAR *-         ");
    asm("       MAR *-         ");
    asm("       LAR AR0,#3     ");
    asm("       LAR AR3,*0+    ");
    asm("       MAR *,AR3      ");
    asm("       SBRK  #3       ");

    /*--------------------------------------------------*/
    /* save off AR4 - AR6 onto stack, parameter vars	*/
    /*--------------------------------------------------*/
    asm("       MAR *,AR1      ");
    asm("       SAR AR4,*+     ");
    asm("       SAR AR5,*+     ");
    asm("       SAR AR6,*+     ");

    /*--------------------------------------------------*/
    /* Block move code					*/
    /* AR4 has start address pointer			*/
    /* AR5 has size needs to be decremented by 1	*/
    /* AR6 has data buffer pointer			*/
    /*--------------------------------------------------*/

    asm("       MAR  *,AR3     ");
    asm("       LAR  AR4,*-    ");
    asm("       LAR  AR5,*-    ");
    asm("       LAR  AR6,*-    ");

    asm("       MAR  *,AR4     ");

    asm("       LACL  *,AR5    ");
    asm("       SBRK  #1       ");

    asm("       MAR  *,AR6     ");
    asm("BMPLP: TBLR *+,AR5    ");
    asm("       ADD #1         ");
    asm("       BANZ BMPLP,AR6 ");

    /* Restore Aux Registers from Stack */
    asm("       MAR *,AR1      ");
    asm("       MAR *-         ");
    asm("       LAR AR6,*-     ");
    asm("       LAR AR5,*-     ");
    asm("       LAR AR4,*-     ");
    asm("       LAR AR3,*-     ");

    return( 0 );
}

/* This function has not been debugged */


unsigned int  blk_mv_d2p( unsigned int *data_src, unsigned int size, unsigned int *pgm_dest )
{


    /*--------------------------------------------------*/
    /* Save 3 Aux Registers to Stack bump past temp 1st */
    /* Use AR3 to point to parameters on the stack	*/
    /*--------------------------------------------------*/

    asm("       MAR *+         ");
    asm("       SAR AR3,*+     ");

    /*--------------------------------------------------*/
    /* AR3 is Pointer to Parameters on the stack via	*/
    /* backing up stack pointer then restoring it	*/
    /*--------------------------------------------------*/
    asm("       MAR *-         ");
    asm("       MAR *-         ");
    asm("       MAR *-         ");
    asm("       LAR AR0,#3     ");
    asm("       LAR AR3,*0+    ");
    asm("       MAR *,AR3      ");
    asm("       SBRK  #3       ");

    /*--------------------------------------------------*/
    /* save off AR4 - AR6 onto stack, parameter vars	*/
    /*--------------------------------------------------*/
    asm("       MAR *,AR1      ");
    asm("       SAR AR4,*+     ");
    asm("       SAR AR5,*+     ");
    asm("       SAR AR6,*+     ");

    /*--------------------------------------------------*/
    /* Block move code					*/
    /* AR4 has start data address pointer		*/
    /* AR5 has size needs to be decremented by 1	*/
    /* AR6 has program destination pointer		*/
    /*--------------------------------------------------*/

    asm("       MAR  *,AR3     ");
    asm("       LAR  AR4,*-    ");
    asm("       LAR  AR5,*-    ");
    asm("       LAR  AR6,*-    ");

    asm("       MAR  *,AR6     ");

    asm("       LACL  *,AR5    ");
    asm("       SBRK  #1       ");

    asm("       MAR  *,AR4     ");
    asm("BMDLP: TBLW *+,AR5    ");
    asm("       ADD #1         ");
    asm("       BANZ BMDLP,AR4 ");

    /* Restore Aux Registers from Stack */
    asm("       MAR *,AR1      ");
    asm("       MAR *-         ");
    asm("       LAR AR6,*-     ");
    asm("       LAR AR5,*-     ");
    asm("       LAR AR4,*-     ");
    asm("       LAR AR3,*-     ");

    return( 0 );
}

⌨️ 快捷键说明

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