亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ev6-stxcpy.s

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? S
字號:
/* * arch/alpha/lib/ev6-stxcpy.S * 21264 version contributed by Rick Gorton <rick.gorton@alpha-processor.com> * * Copy a null-terminated string from SRC to DST. * * This is an internal routine used by strcpy, stpcpy, and strcat. * As such, it uses special linkage conventions to make implementation * of these public functions more efficient. * * On input: *	t9 = return address *	a0 = DST *	a1 = SRC * * On output: *	t12 = bitmask (with one bit set) indicating the last byte written *	a0  = unaligned address of the last *word* written * * Furthermore, v0, a3-a5, t11, and t12 are untouched. * * Much of the information about 21264 scheduling/coding comes from: *	Compiler Writer's Guide for the Alpha 21264 *	abbreviated as 'CWG' in other comments here *	ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html * Scheduling notation: *	E	- either cluster *	U	- upper subcluster; U0 - subcluster U0; U1 - subcluster U1 *	L	- lower subcluster; L0 - subcluster L0; L1 - subcluster L1 * Try not to change the actual algorithm if possible for consistency. */#include <alpha/regdef.h>	.set noat	.set noreorder	.text/* There is a problem with either gdb (as of 4.16) or gas (as of 2.7) that   doesn't like putting the entry point for a procedure somewhere in the   middle of the procedure descriptor.  Work around this by putting the   aligned copy in its own procedure descriptor */	.ent stxcpy_aligned	.align 4stxcpy_aligned:	.frame sp, 0, t9	.prologue 0	/* On entry to this basic block:	   t0 == the first destination word for masking back in	   t1 == the first source word.  */	/* Create the 1st output word and detect 0's in the 1st input word.  */	lda	t2, -1		# E : build a mask against false zero	mskqh	t2, a1, t2	# U :   detection in the src word (stall)	mskqh	t1, a1, t3	# U :	ornot	t1, t2, t2	# E : (stall)	mskql	t0, a1, t0	# U : assemble the first output word	cmpbge	zero, t2, t8	# E : bits set iff null found	or	t0, t3, t1	# E : (stall)	bne	t8, $a_eos	# U : (stall)	/* On entry to this basic block:	   t0 == the first destination word for masking back in	   t1 == a source word not containing a null.  */	/* Nops here to separate store quads from load quads */$a_loop:	stq_u	t1, 0(a0)	# L :	addq	a0, 8, a0	# E :	nop	nop	ldq_u	t1, 0(a1)	# L : Latency=3	addq	a1, 8, a1	# E :	cmpbge	zero, t1, t8	# E : (3 cycle stall)	beq	t8, $a_loop	# U : (stall for t8)	/* Take care of the final (partial) word store.	   On entry to this basic block we have:	   t1 == the source word containing the null	   t8 == the cmpbge mask that found it.  */$a_eos:	negq	t8, t6		# E : find low bit set	and	t8, t6, t12	# E : (stall)	/* For the sake of the cache, don't read a destination word	   if we're not going to need it.  */	and	t12, 0x80, t6	# E : (stall)	bne	t6, 1f		# U : (stall)	/* We're doing a partial word store and so need to combine	   our source and original destination words.  */	ldq_u	t0, 0(a0)	# L : Latency=3	subq	t12, 1, t6	# E :	zapnot	t1, t6, t1	# U : clear src bytes >= null (stall)	or	t12, t6, t8	# E : (stall)	zap	t0, t8, t0	# E : clear dst bytes <= null	or	t0, t1, t1	# E : (stall)	nop	nop1:	stq_u	t1, 0(a0)	# L :	ret	(t9)		# L0 : Latency=3	nop	nop	.end stxcpy_aligned	.align 4	.ent __stxcpy	.globl __stxcpy__stxcpy:	.frame sp, 0, t9	.prologue 0	/* Are source and destination co-aligned?  */	xor	a0, a1, t0	# E :	unop			# E :	and	t0, 7, t0	# E : (stall)	bne	t0, $unaligned	# U : (stall)	/* We are co-aligned; take care of a partial first word.  */	ldq_u	t1, 0(a1)		# L : load first src word	and	a0, 7, t0		# E : take care not to load a word ...	addq	a1, 8, a1		# E :	beq	t0, stxcpy_aligned	# U : ... if we wont need it (stall)	ldq_u	t0, 0(a0)	# L :	br	stxcpy_aligned	# L0 : Latency=3	nop	nop/* The source and destination are not co-aligned.  Align the destination   and cope.  We have to be very careful about not reading too much and   causing a SEGV.  */	.align 4$u_head:	/* We know just enough now to be able to assemble the first	   full source word.  We can still find a zero at the end of it	   that prevents us from outputting the whole thing.	   On entry to this basic block:	   t0 == the first dest word, for masking back in, if needed else 0	   t1 == the low bits of the first source word	   t6 == bytemask that is -1 in dest word bytes */	ldq_u	t2, 8(a1)	# L :	addq	a1, 8, a1	# E :	extql	t1, a1, t1	# U : (stall on a1)	extqh	t2, a1, t4	# U : (stall on a1)	mskql	t0, a0, t0	# U :	or	t1, t4, t1	# E :	mskqh	t1, a0, t1	# U : (stall on t1)	or	t0, t1, t1	# E : (stall on t1)	or	t1, t6, t6	# E :	cmpbge	zero, t6, t8	# E : (stall)	lda	t6, -1		# E : for masking just below	bne	t8, $u_final	# U : (stall)	mskql	t6, a1, t6		# U : mask out the bits we have	or	t6, t2, t2		# E :   already extracted before (stall)	cmpbge	zero, t2, t8		# E :   testing eos (stall)	bne	t8, $u_late_head_exit	# U : (stall)	/* Finally, we've got all the stupid leading edge cases taken care	   of and we can set up to enter the main loop.  */	stq_u	t1, 0(a0)	# L : store first output word	addq	a0, 8, a0	# E :	extql	t2, a1, t0	# U : position ho-bits of lo word	ldq_u	t2, 8(a1)	# U : read next high-order source word	addq	a1, 8, a1	# E :	cmpbge	zero, t2, t8	# E : (stall for t2)	nop			# E :	bne	t8, $u_eos	# U : (stall)	/* Unaligned copy main loop.  In order to avoid reading too much,	   the loop is structured to detect zeros in aligned source words.	   This has, unfortunately, effectively pulled half of a loop	   iteration out into the head and half into the tail, but it does	   prevent nastiness from accumulating in the very thing we want	   to run as fast as possible.	   On entry to this basic block:	   t0 == the shifted high-order bits from the previous source word	   t2 == the unshifted current source word	   We further know that t2 does not contain a null terminator.  */	.align 3$u_loop:	extqh	t2, a1, t1	# U : extract high bits for current word	addq	a1, 8, a1	# E : (stall)	extql	t2, a1, t3	# U : extract low bits for next time (stall)	addq	a0, 8, a0	# E :	or	t0, t1, t1	# E : current dst word now complete	ldq_u	t2, 0(a1)	# L : Latency=3 load high word for next time	stq_u	t1, -8(a0)	# L : save the current word (stall)	mov	t3, t0		# E :	cmpbge	zero, t2, t8	# E : test new word for eos	beq	t8, $u_loop	# U : (stall)	nop	nop	/* We've found a zero somewhere in the source word we just read.	   If it resides in the lower half, we have one (probably partial)	   word to write out, and if it resides in the upper half, we	   have one full and one partial word left to write out.	   On entry to this basic block:	   t0 == the shifted high-order bits from the previous source word	   t2 == the unshifted current source word.  */$u_eos:	extqh	t2, a1, t1	# U :	or	t0, t1, t1	# E : first (partial) source word complete (stall)	cmpbge	zero, t1, t8	# E : is the null in this first bit? (stall)	bne	t8, $u_final	# U : (stall)$u_late_head_exit:	stq_u	t1, 0(a0)	# L : the null was in the high-order bits	addq	a0, 8, a0	# E :	extql	t2, a1, t1	# U :	cmpbge	zero, t1, t8	# E : (stall)	/* Take care of a final (probably partial) result word.	   On entry to this basic block:	   t1 == assembled source word	   t8 == cmpbge mask that found the null.  */$u_final:	negq	t8, t6		# E : isolate low bit set	and	t6, t8, t12	# E : (stall)	and	t12, 0x80, t6	# E : avoid dest word load if we can (stall)	bne	t6, 1f		# U : (stall)	ldq_u	t0, 0(a0)	# E :	subq	t12, 1, t6	# E :	or	t6, t12, t8	# E : (stall)	zapnot	t1, t6, t1	# U : kill source bytes >= null (stall)	zap	t0, t8, t0	# U : kill dest bytes <= null (2 cycle data stall)	or	t0, t1, t1	# E : (stall)	nop	nop1:	stq_u	t1, 0(a0)	# L :	ret	(t9)		# L0 : Latency=3	nop	nop	/* Unaligned copy entry point.  */	.align 4$unaligned:	ldq_u	t1, 0(a1)	# L : load first source word	and	a0, 7, t4	# E : find dest misalignment	and	a1, 7, t5	# E : find src misalignment	/* Conditionally load the first destination word and a bytemask	   with 0xff indicating that the destination byte is sacrosanct.  */	mov	zero, t0	# E :	mov	zero, t6	# E :	beq	t4, 1f		# U :	ldq_u	t0, 0(a0)	# L :	lda	t6, -1		# E :	mskql	t6, a0, t6	# U :	nop	nop	nop1:	subq	a1, t4, a1	# E : sub dest misalignment from src addr	/* If source misalignment is larger than dest misalignment, we need	   extra startup checks to avoid SEGV.  */	cmplt	t4, t5, t12	# E :	beq	t12, $u_head	# U :	lda	t2, -1		# E : mask out leading garbage in source	mskqh	t2, t5, t2	# U :	ornot	t1, t2, t3	# E : (stall)	cmpbge	zero, t3, t8	# E : is there a zero? (stall)	beq	t8, $u_head	# U : (stall)	/* At this point we've found a zero in the first partial word of	   the source.  We need to isolate the valid source data and mask	   it into the original destination data.  (Incidentally, we know	   that we'll need at least one byte of that original dest word.) */	ldq_u	t0, 0(a0)	# L :	negq	t8, t6		# E : build bitmask of bytes <= zero	and	t6, t8, t12	# E : (stall)	and	a1, 7, t5	# E :	subq	t12, 1, t6	# E :	or	t6, t12, t8	# E : (stall)	srl	t12, t5, t12	# U : adjust final null return value	zapnot	t2, t8, t2	# U : prepare source word; mirror changes (stall)	and	t1, t2, t1	# E : to source validity mask	extql	t2, a1, t2	# U :	extql	t1, a1, t1	# U : (stall)	andnot	t0, t2, t0	# .. e1 : zero place for source to reside (stall)	or	t0, t1, t1	# e1    : and put it there	stq_u	t1, 0(a0)	# .. e0 : (stall)	ret	(t9)		# e1    :	nop	.end __stxcpy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲一区三区| 一本色道久久综合亚洲aⅴ蜜桃 | 国产日韩精品一区二区三区| 久久综合狠狠综合久久综合88| 精品久久久久久久人人人人传媒 | 亚洲精品大片www| 亚洲视频一区在线| 亚洲影院久久精品| 蜜桃精品视频在线| 成人网在线播放| 在线免费观看视频一区| 7799精品视频| 国产精品欧美久久久久无广告 | 亚洲蜜臀av乱码久久精品| 亚洲成人一区在线| 国产精品12区| 欧美久久婷婷综合色| 国产色爱av资源综合区| 亚洲影视资源网| 国产成a人亚洲| 日韩一二三区视频| 亚洲精品免费播放| 国产精品一线二线三线| 欧美区视频在线观看| 日韩一区有码在线| 国产精品一二三四五| 日韩一区二区免费电影| 樱桃视频在线观看一区| 蜜桃av一区二区在线观看| 色欧美乱欧美15图片| 国产精品网友自拍| 波多野结衣亚洲一区| 日本一区二区免费在线| 丁香六月久久综合狠狠色| 久久久亚洲午夜电影| 99这里只有久久精品视频| 国产精品电影院| 欧美午夜精品久久久久久超碰| 亚洲国产精品一区二区www在线| 欧美日韩另类一区| 麻豆国产精品官网| 国产日韩欧美在线一区| 国产一本一道久久香蕉| 国产午夜三级一区二区三| 大白屁股一区二区视频| 国产无遮挡一区二区三区毛片日本| 三级在线观看一区二区| 日韩一区和二区| 国产一区二区在线观看免费| 中文字幕巨乱亚洲| 欧美在线免费视屏| 国产一区日韩二区欧美三区| 91精品国产综合久久久久久久 | 日韩精品每日更新| 精品久久一区二区| 91麻豆国产在线观看| 五月综合激情婷婷六月色窝| 久久久久久99精品| 精品视频在线免费| 99视频精品全部免费在线| 免费黄网站欧美| 亚洲免费在线观看视频| 欧美精品一区二区三区一线天视频 | 国产精品88888| 五月婷婷欧美视频| 国产女主播在线一区二区| 欧美日韩第一区日日骚| 成人免费观看av| 国产91精品在线观看| 美女视频黄 久久| 午夜a成v人精品| 亚洲福利视频一区| 亚洲欧美日韩电影| 亚洲精品一二三区| 综合欧美一区二区三区| 国产精品美日韩| 国产精品视频免费| 中文字幕不卡的av| 亚洲国产高清在线观看视频| 久久久久久久综合| 欧美激情艳妇裸体舞| 97精品超碰一区二区三区| 韩国精品免费视频| 岛国精品在线观看| 福利视频网站一区二区三区| 成人高清伦理免费影院在线观看| 国产成人免费视频| 99精品国产视频| 91同城在线观看| 欧美日韩国产123区| 久久久久久久一区| 亚洲欧美日韩在线| 秋霞电影网一区二区| 国产精品亚洲人在线观看| 91麻豆国产在线观看| 欧美一区二区三区四区久久| 91精品国产91久久久久久一区二区| 538prom精品视频线放| 久久伊人中文字幕| 亚洲精品视频在线看| 久久精品国产精品亚洲综合| 国产成人免费视频一区| 欧美日本在线一区| 色www精品视频在线观看| 欧美一区二区三区思思人| 国产精品丝袜一区| 成人永久看片免费视频天堂| 欧美一区二区三区影视| 综合精品久久久| 久久99热狠狠色一区二区| 成a人片亚洲日本久久| 欧美一区二区三区思思人| 日韩美女视频一区| 国产91清纯白嫩初高中在线观看| 欧美精品色一区二区三区| 国产精品午夜春色av| 蓝色福利精品导航| 欧美日韩在线综合| 一区二区三区欧美激情| 成人美女在线视频| 久久女同性恋中文字幕| 美女mm1313爽爽久久久蜜臀| 欧美一区二区三区系列电影| 亚洲福利视频一区二区| 欧美精品日韩综合在线| 视频一区免费在线观看| 欧美日韩一区久久| 久色婷婷小香蕉久久| 国产欧美一区二区三区沐欲| 国产99精品视频| 亚洲美女视频一区| 欧美绝品在线观看成人午夜影视| 亚洲一区二区三区自拍| 91精品婷婷国产综合久久竹菊| 午夜国产不卡在线观看视频| 久久这里只精品最新地址| 国产成人免费9x9x人网站视频| 久久久久久久网| 色国产精品一区在线观看| 亚洲大片一区二区三区| 欧美xxxxx牲另类人与| 国产91丝袜在线18| 亚洲国产另类av| 亚洲国产精品精华液ab| 欧美一a一片一级一片| 国产精品香蕉一区二区三区| 一区二区成人在线视频| 精品久久免费看| 欧美一区二区啪啪| 国产精品色哟哟网站| 在线观看亚洲成人| 蜜臀久久99精品久久久久久9| 久久理论电影网| 欧美一级一区二区| 99精品国产视频| 国产麻豆9l精品三级站| 人人狠狠综合久久亚洲| 国产精品少妇自拍| 精品国产123| 日韩精品一区二区三区在线观看| 日本丶国产丶欧美色综合| 国产一区 二区 三区一级| 首页国产丝袜综合| 亚洲国产精品一区二区久久恐怖片| 中日韩免费视频中文字幕| 日韩欧美专区在线| 欧美一区午夜精品| 欧美精品18+| 这里只有精品视频在线观看| 欧洲视频一区二区| 在线这里只有精品| 欧美日产国产精品| 91 com成人网| 精品三级在线观看| 欧美一区二区三区在线观看| 欧美美女一区二区在线观看| 欧美日韩和欧美的一区二区| 欧美日韩久久一区二区| 在线成人午夜影院| 精品国产乱码久久久久久久| 日韩精品综合一本久道在线视频| 91精品国产aⅴ一区二区| 久久久久久久国产精品影院| 国产精品网站导航| 亚洲国产美国国产综合一区二区| 日韩激情av在线| 福利电影一区二区| 欧美视频日韩视频| 久久久久久夜精品精品免费| 亚洲四区在线观看| 免费人成在线不卡| 91女神在线视频| 日韩你懂的在线播放| 亚洲视频资源在线| 久久99久久99| 欧美日韩大陆在线| 综合久久久久久| 成人免费av在线| 久久亚洲一区二区三区明星换脸| 一区二区三区成人|