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

📄 balib.s

📁 vxworks source code, used for develop vxworks system.
💻 S
📖 第 1 页 / 共 2 页
字号:
	tst	#0x1,r0		/*     are we on a word boundary? */	bt	cBakLongWord	add	#-1,r4		/*     one-byte copy, force word alignment */	mov.b	@r4,r1;	add	#-1,r6	mov.b	r1,@-r5cBakLongWord:	mov	r5,r0	tst	#0x3,r0		/*     are we on a long boundary? */	bt	cBakLongAligned	add	#-2,r4		/*     one-word copy, force long alignment */	mov.w	@r4,r1;	add	#-2,r6	mov.w	r1,@-r5cBakLongAligned:	mova	cBakLongCopy,r0	mov	r0,r3	bra	cLong;	mov	r6,r0		/* r0: nbytes */	/* Word copy setup */cFwdWord:				mov	r5,r0	tst	#0x1,r0		/*     are we on a odd boundary? */	bt	cFwdWordAligned	mov.b	@r4+,r1;	/*     one-byte copy, force word alignment */	add	#-1,r6	mov.b	r1,@r5	add	#1,r5cFwdWordAligned:		/*     here we are on a word boundary */	mova	cFwdWordCopy,r0	mov	r0,r3	mov	r6,r0		/* r0: nbytes */cWord:	and	#0x1e,r0	/* if r0 = 2 */	neg	r0,r2		/* r2: -2 */	shll	r0		/* r0:  4 */	sub	r0,r2		/* r2: -6 */	add	r3,r2	mov	r6,r0		/* r0: nbytes */#if (CPU==SH7000 || CPU==SH7600)	shlr2	r6	shlr2	r6	shlr	r6#else	mov	#-5,r1	shld	r1,r6#endif	jmp	@r2;	add	#1,r6		/* r6: nbytes/32 + 1 */cBakWord:	mov	r5,r0	tst	#0x1,r0		/*     are we on a odd boundary? */	bt	cBakWordAligned	add	#-1,r4		/*     one-byte copy, force word alignment */	mov.b	@r4,r1;	add	#-1,r6	mov.b	r1,@-r5cBakWordAligned:		/*     here we are on a word boundary */	mova	cBakWordCopy,r0	mov	r0,r3	bra	cWord;	mov	r6,r0		/* r0: nbytes */	/* Byte copy setup */cFwdByte:	mova	cFwdByteCopy,r0	mov	r0,r3	mov	r6,r0		/* r0: nbytes */cByte:	and	#0xf,r0		/* if r0 = 1 */	shll	r0		/* r0:  2 */	neg	r0,r2		/* r2: -2 */	shll	r0		/* r0:  4 */	sub	r0,r2		/* r2: -6 */	add	r3,r2#if (CPU==SH7000 || CPU==SH7600)	shlr2	r6	shlr2	r6#else	mov	#-4,r1	shld	r1,r6#endif	jmp	@r2;	add	#1,r6		/* r6: nbytes/16 + 1 */cBakByte:	mova	cBakByteCopy,r0	mov	r0,r3	bra	cByte;	mov	r6,r0		/* r0: nbytes */	/* Forward copy section */	.align	_ALIGN_TEXTcFwdLongLoop:	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5	mov.l   @r4+,r1;    mov.l   r1,@r5;    add   #4,r5cFwdLongCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cFwdLongLoop	tst	#0x2,r0		/*     nbytes % 4 ? */	bt	cFwdLongLastByte	mov.w	@r4+,r1;	mov.w	r1,@r5	add	#2,r5cFwdLongLastByte:	tst	#0x1,r0		/*     nbytes % 2 ? */cFwdLastByte:	bt	cFwdDone	mov.b	@r4+,r1;	rts;	mov.b	r1,@r5	.align	_ALIGN_TEXTcFwdWordLoop:	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5	mov.w   @r4+,r1;    mov.w   r1,@r5;    add     #2,r5cFwdWordCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cFwdWordLoop	bra	cFwdLastByte;	tst	#0x1,r0		/*     nbytes % 2 ? */	.align	_ALIGN_TEXTcFwdByteLoop:	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5	mov.b   @r4+,r1;    mov.b   r1,@r5;    add     #1,r5cFwdByteCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cFwdByteLoopcFwdDone:	rts;	nop	/* Backward copy section */	.align	_ALIGN_TEXTcBakLongLoop:	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5	add	#-4,r4;    mov.l   @r4,r1;    mov.l   r1,@-r5cBakLongCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cBakLongLoop	tst	#0x2,r0		/*     nbytes % 4 ? */	bt	cBakLongLastByte	add	#-2,r4	mov.w	@r4,r1;	mov.w	r1,@-r5cBakLongLastByte:	tst	#0x1,r0		/*     nbytes % 2 ? */cBakLastByte:	bt	cBakDone	add	#-1,r4	mov.b	@r4,r1;	rts;	mov.b	r1,@-r5	.align	_ALIGN_TEXTcBakWordLoop:	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5	add     #-2,r4;    mov.w   @r4,r1;    mov.w   r1,@-r5cBakWordCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cBakWordLoop	bra	cBakLastByte;	tst	#0x1,r0		/*     nbytes % 2 ? */	.align	_ALIGN_TEXTcBakByteLoop:	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5	add     #-1,r4;    mov.b   @r4,r1;    mov.b   r1,@-r5cBakByteCopy:#if (CPU==SH7000)	add	#-1,r6	tst	r6,r6#else	dt	r6#endif	bf	cBakByteLoopcBakDone:	rts;	nop/********************************************************************************* bfill - fill buffer with character** This routine fills the first `nbytes' characters of the specified buffer* with the specified character.* The fill is optimized by filling 4 bytes at a time if possible,* (see bfillBytes (2) for filling a byte at a time only).** SEE ALSO: bfillBytes (2)** NOMANUAL - manual entry in bLib (1)* void bfill*     (*     char *buf,		/@ pointer to buffer              @/*     int   nbytes,		/@ number of bytes to fill        @/*     int   ch			/@ char with which to fill buffer @/*     )* NOTE:	This routine is USED at boot time.***   [usec]|*      25 |    o: bfill (16-longs loop)                                     x*      24 |    v: bfill ( 1-longs loop)                                  x*      23 |    x: bfillBytes                                          x  x*      22 |                                                        x  x*      21 |                                                        x*      20 |    DVE-SH7032  timexN                               x*      19 |    benchmarks                                    x*      18 |                                               x*      17 |                 :                          x*      16 |                 :                       x                       v*      15 |                 :                    x              v        v*      14 |                 :                 x  x  v        v        v*      13 |                 :           v  x  x  v        v        v        v*      12 |                 :           v  x           v        v  v*      11 |                 :        v  x     v        v        v       vo  o*      10 |                 :     v  x     v       vo  o  o vo  o  o vo  o  o*	9 |                 :  vo xo o vo  o  o vo  o  o  v*	8 |                 :  xo o  o  o     v*	7 |              o vxo           *	6 |             vxo :            *	5 |          vxo    :            *	4 |        vo       :            *	3 |     vo x        :            *	2 |  vo x           :            *	1 vo x              :            *	  x--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+*         0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22*                                                                     [nbytes]*/	.align	_ALIGN_TEXT	.type	_bfill,@function				/* r4: buf    */				/* r5: nbytes */_bfill:				/* r6: ch     */	mov	#6,r0	cmp/gt	r0,r5	bf	_bfillBytes	/* if (nbytes <= 6), do byte fill */	cmp/pl	r5	bf	fbDone		/* if (nbytes <= 0), then we are done */	mov	r4,r0	add	r5,r0		/* r0: buf + nbytes */	tst	#0x1,r0		/*     are we on an word boundary?        */	bt	fbWord	mov.b	r6,@-r0		/*     fill one-byte, force word boundary */	add	#-1,r5fbWord:				/*    byte3  byte2  byte1  byte0 */	extu.b	r6,r6		/* r6: 0x00 | 0x00 | 0x00 | (ch) */	swap.b	r6,r1		/* r1: 0x00 | 0x00 | (ch) | 0x00 */	or	r1,r6		/* r6: 0x00 | 0x00 | (ch) | (ch) */	tst	#0x3,r0		/*     are we on an long boundary?        */	bt	fbLong	mov.w	r6,@-r0		/*     fill one-word, force long boundary */	add	#-2,r5fbLong:				/*    byte3  byte2  byte1  byte0 */	swap.w	r6,r1		/* r1: (ch) | (ch) | 0x00 | 0x00 */	or	r1,r6		/* r6: (ch) | (ch) | (ch) | (ch) */	mov	r0,r7		/* r7: (end of buffer) + 1 */	mov	r5,r0		/* r0: nbytes */	and	#0x3c,r0	/* if (r0 == 4) */	neg	r0,r2		/* r2: -4 */	shar	r2		/* r2: -2 */	mova	fbStart,r0	add	r0,r2	mov	r5,r0		/* r0: nbytes */#if (CPU==SH7000 || CPU==SH7600)	shlr2	r5	shlr2	r5	shlr2	r5#else	mov	#-6,r1	shld	r1,r5#endif	jmp	@r2;	add	#1,r5		/* r5: nbytes/64 + 1 */	.align	_ALIGN_TEXTfbLoop:	mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7	mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7	mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7	mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7;  mov.l r6,@-r7fbStart:#if (CPU==SH7000)	add	#-1,r5	tst	r5,r5#else	dt	r5#endif	bf	fbLoop	tst	#0x2,r0		/*     nbytes % 4 ? */	bt	fbLastByte	mov.w	r6,@-r7fbLastByte:	tst	#0x1,r0		/*     nbytes % 2 ? */	bt	fbDone	mov.b	r6,@-r7fbDone:	rts;	nop#if		FALSE_bfill:		mov	#6,r0		/*** THIS BFILL IS SMALL, BUT SLOW. ***/		cmp/gt	r0,r5		bf	_bfillBytes	/* if (6 >= nbytes), do byte fill */		cmp/pl	r5		bf	fbDone		/* if (nbytes <= 0), then we are done */		mov	r4,r0		bra	fbTailChk;		add	r5,r0		/* r0: buf + nbytes */fbTailLoop:	mov.b	r6,@-r0fbTailChk:	tst	#3,r0		bf	fbTailLoop		mov	r0,r7		/* r7: end of buffer */		bra	fbHeadChk;		mov	r4,r0fbHeadLoop:	mov.b	r6,@r0		add	#1,r0fbHeadChk:	tst	#3,r0		/* r0: start of buffer */		bf	fbHeadLoop	/*    byte3  byte2  byte1  byte0 */fbBody:		extu.b	r6,r6		/* r6: 0x00 | 0x00 | 0x00 | (ch) */		swap.b	r6,r1		/* r1: 0x00 | 0x00 | (ch) | 0x00 */		or	r1,r6		/* r6: 0x00 | 0x00 | (ch) | (ch) */		swap.w	r6,r1		/* r1: (ch) | (ch) | 0x00 | 0x00 */		bra	fbBodyChk;		or	r1,r6		/* r6: (ch) | (ch) | (ch) | (ch) */fbBodyLoop:	mov.l	r6,@-r7fbBodyChk:	cmp/hi	r0,r7		bt	fbBodyLoopfbDone:		rts;		nop#endif		/* FALSE *//********************************************************************************* bfillBytes - fill buffer with character a byte at a time** This routine fills the first `nbytes' characters of the* specified buffer with the specified character.* It is identical to bfill (2) except that the fill is always performed* a byte at a time.  This may be desirable if the buffer* can only be accessed with byte instructions, as in certain byte-wide* memory-mapped peripherals.** SEE ALSO: bfill (2)** NOMANUAL - manual entry in bLib (1)* void bfillBytes*     (*     char *buf,	/@ pointer to buffer              @/*     int   nbytes,	/@ number of bytes to fill        @/*     int   ch		/@ char with which to fill buffer @/*     )* NOTE:  This routine is not used at boot time.  Be careful!*/	.align	_ALIGN_TEXT	.type	_bfillBytes,@function				/* r4: buf    */_bfillBytes:			/* r5: nbytes */	cmp/pl	r5	bf	fby2#if (CPU==SH7000)	add	r4,r5		/* r5: buf + nbytes */fby1:	mov.b	r6,@-r5		/* r6: ch           */	cmp/hi	r4,r5	bt	fby1#else	mov	r5,r0fby1:	dt	r0	bf.s	fby1	mov.b	r6,@(r0,r4)#endiffby2:	rts;	nop#endif	/* !PORTABLE */

⌨️ 快捷键说明

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