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

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

?? ev6-stxncpy.s

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? S
字號:
/* * arch/alpha/lib/ev6-stxncpy.S * 21264 version contributed by Rick Gorton <rick.gorton@api-networks.com> * * Copy no more than COUNT bytes of the null-terminated string from * SRC to DST. * * This is an internal routine used by strncpy, stpncpy, and strncat. * 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 *	a2 = COUNT * * Furthermore, COUNT may not be zero. * * On output: *	t0  = last word written *	t10 = bitmask (with one bit set) indicating the byte position of *	      the end of the range specified by COUNT *	t12 = bitmask (with one bit set) indicating the last byte written *	a0  = unaligned address of the last *word* written *	a2  = the number of full words left in COUNT * * Furthermore, v0, a3-a5, t11, t12, and $at 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 stxncpy_aligned	.align 4stxncpy_aligned:	.frame sp, 0, t9, 0	.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, t0	# E : (stall)	beq	a2, $a_eoc	# U :	bne	t8, $a_eos	# U :	nop	nop	nop	/* On entry to this basic block:	   t0 == a source word not containing a null.  */	/*	 * nops here to:	 *	separate store quads from load quads	 *	limit of 1 bcond/quad to permit training	 */$a_loop:	stq_u	t0, 0(a0)	# L :	addq	a0, 8, a0	# E :	subq	a2, 1, a2	# E :	nop	ldq_u	t0, 0(a1)	# L :	addq	a1, 8, a1	# E :	cmpbge	zero, t0, t8	# E :	beq	a2, $a_eoc      # U :	beq	t8, $a_loop	# U :	nop	nop	nop	/* Take care of the final (partial) word store.  At this point	   the end-of-count bit is set in t8 iff it applies.	   On entry to this basic block we have:	   t0 == the source word containing the null	   t8 == the cmpbge mask that found it.  */$a_eos:	negq	t8, t12		# E : find low bit set	and	t8, t12, 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	t1, 0(a0)	# L :	subq	t12, 1, t6	# E :	or	t12, t6, t8	# E : (stall)	zapnot	t0, t8, t0	# U : clear src bytes > null (stall)	zap	t1, t8, t1	# .. e1 : clear dst bytes <= null	or	t0, t1, t0	# e1    : (stall)	nop	nop1:	stq_u	t0, 0(a0)	# L :	ret	(t9)		# L0 : Latency=3	nop	nop	/* Add the end-of-count bit to the eos detection bitmask.  */$a_eoc:	or	t10, t8, t8	# E :	br	$a_eos		# L0 : Latency=3	nop	nop	.end stxncpy_aligned	.align 4	.ent __stxncpy	.globl __stxncpy__stxncpy:	.frame sp, 0, t9, 0	.prologue 0	/* Are source and destination co-aligned?  */	xor	a0, a1, t1	# E :	and	a0, 7, t0	# E : find dest misalignment	and	t1, 7, t1	# E : (stall)	addq	a2, t0, a2	# E : bias count by dest misalignment (stall)	subq	a2, 1, a2	# E :	and	a2, 7, t2	# E : (stall)	srl	a2, 3, a2	# U : a2 = loop counter = (count - 1)/8 (stall)	addq	zero, 1, t10	# E :	sll	t10, t2, t10	# U : t10 = bitmask of last count byte	bne	t1, $unaligned	# U :	/* We are co-aligned; take care of a partial first word.  */	ldq_u	t1, 0(a1)	# L : load first src word	addq	a1, 8, a1	# E :	beq	t0, stxncpy_aligned     # U : avoid loading dest word if not needed	ldq_u	t0, 0(a0)	# L :	nop	nop	br	stxncpy_aligned	# .. e1 :	nop	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, unmasked	   t1 == the shifted low bits of the first source word	   t6 == bytemask that is -1 in dest word bytes */	ldq_u	t2, 8(a1)	# L : Latency=3 load second src word	addq	a1, 8, a1	# E :	mskql	t0, a0, t0	# U : mask trailing garbage in dst	extqh	t2, a1, t4	# U : (3 cycle stall on t2)	or	t1, t4, t1	# E : first aligned src word complete (stall)	mskqh	t1, a0, t1	# U : mask leading garbage in src (stall)	or	t0, t1, t0	# E : first output word complete (stall)	or	t0, t6, t6	# E : mask original data for zero test (stall)	cmpbge	zero, t6, t8	# E :	beq	a2, $u_eocfin	# U :	nop	nop	bne	t8, $u_final	# U :	lda	t6, -1		# E : mask out the bits we have	mskql	t6, a1, t6	# U :   already seen (stall)	stq_u	t0, 0(a0)	# L : store first output word	or      t6, t2, t2		# E :	cmpbge	zero, t2, t8		# E : find nulls in second partial (stall)	addq	a0, 8, a0		# E :	subq	a2, 1, a2		# E :	bne	t8, $u_late_head_exit	# U :	/* Finally, we've got all the stupid leading edge cases taken care	   of and we can set up to enter the main loop.  */	extql	t2, a1, t1	# U : position hi-bits of lo word	ldq_u	t2, 8(a1)	# L : read next high-order source word	addq	a1, 8, a1	# E :	cmpbge	zero, t2, t8	# E : (stall)	beq	a2, $u_eoc	# U :	nop	nop	bne	t8, $u_eos	# e1    :	nop	nop	nop	/* 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:	   t1 == 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 4$u_loop:	extqh	t2, a1, t0	# U : extract high bits for current word	addq	a1, 8, a1	# E :	extql	t2, a1, t3	# U : extract low bits for next time	addq	a0, 8, a0	# E :	or	t0, t1, t0	# E : current dst word now complete	ldq_u	t2, 0(a1)	# U : Latency=3 load high word for next time	stq_u	t0, -8(a0)	# U : save the current word (stall)	mov	t3, t1		# E :	subq	a2, 1, a2	# E :	cmpbge	zero, t2, t8	# E : test new word for eos (2 cycle stall for data)	beq	a2, $u_eoc	# U : (stall)	nop	beq	t8, $u_loop	# U :	nop	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:	   t1 == the shifted high-order bits from the previous source word	   t2 == the unshifted current source word.  */$u_eos:	extqh	t2, a1, t0	# U :	or	t0, t1, t0	# E : first (partial) source word complete (stall)	cmpbge	zero, t0, t8	# E : is the null in this first bit? (stall)	bne	t8, $u_final	# U : (stall)	stq_u	t0, 0(a0)	# L : the null was in the high-order bits	addq	a0, 8, a0	# E :	subq	a2, 1, a2	# E :	nop$u_late_head_exit:	extql	t2, a1, t0	# U :	cmpbge	zero, t0, t8	# E :	or	t8, t10, t6	# E : (stall)	cmoveq	a2, t6, t8	# E : Latency=2, extra map slot (stall)	/* Take care of a final (probably partial) result word.	   On entry to this basic block:	   t0 == 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	t1, 0(a0)	# L :	subq	t12, 1, t6	# E :	or	t6, t12, t8	# E : (stall)	zapnot	t0, t8, t0	# U : kill source bytes > null	zap	t1, t8, t1	# U : kill dest bytes <= null	or	t0, t1, t0	# E : (stall)	nop	nop1:	stq_u	t0, 0(a0)	# L :	ret	(t9)		# L0 : Latency=3$u_eoc:				# end-of-count	extqh	t2, a1, t0	# U :	or	t0, t1, t0	# E : (stall)	cmpbge	zero, t0, t8	# E : (stall)	nop$u_eocfin:			# end-of-count, final word	or	t10, t8, t8	# E :	br	$u_final	# 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 :	extql	t1, a1, t1	# U : shift src into place	lda	t2, -1		# E : for creating masks later	beq	t12, $u_head	# U : (stall)	mskqh	t2, t5, t2	# U : begin src byte validity mask	cmpbge	zero, t1, t8	# E : is there a zero?	extql	t2, a1, t2	# U :	or	t8, t10, t5	# E : test for end-of-count too	cmpbge	zero, t2, t3	# E :	cmoveq	a2, t5, t8	# E : Latency=2, extra map slot	nop			# E : keep with cmoveq	andnot	t8, t3, t8	# E : (stall)	beq	t8, $u_head	# U :	/* 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	mskqh	t1, t4, t1	# U :	and	t6, t8, t12	# E :	subq	t12, 1, t6	# E : (stall)	or	t6, t12, t8	# E : (stall)	zapnot	t2, t8, t2	# U : prepare source word; mirror changes (stall)	zapnot	t1, t8, t1	# U : to source validity mask	andnot	t0, t2, t0	# E : zero place for source to reside	or	t0, t1, t0	# E : and put it there (stall both t0, t1)	stq_u	t0, 0(a0)	# L : (stall)	ret	(t9)		# L0 : Latency=3	nop	nop	nop	.end __stxncpy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影院午夜播放| 欧美电影影音先锋| 精品久久久久久久久久久久久久久久久| 亚洲视频中文字幕| av亚洲精华国产精华| 欧美激情一区二区| 色一情一伦一子一伦一区| 一区二区三区在线影院| 欧美日韩高清一区二区不卡| 三级精品在线观看| 欧美精品一区二| 成人免费毛片aaaaa**| 亚洲美女视频在线| 欧美一区二区性放荡片| 岛国精品在线观看| 午夜视频在线观看一区| 久久亚洲一区二区三区明星换脸 | 久久麻豆一区二区| 男女激情视频一区| 久久综合久久综合久久| 成人激情图片网| 亚洲午夜精品17c| 欧美成人福利视频| 91无套直看片红桃| 久久激情五月婷婷| 亚洲精品美腿丝袜| 精品日韩成人av| 欧美色图免费看| 国产精品资源网| 亚洲一区视频在线观看视频| 精品国产精品网麻豆系列| 91美女片黄在线观看| 韩国女主播一区二区三区| 亚洲乱码中文字幕| 精品国产免费人成在线观看| 日本乱码高清不卡字幕| 精品影院一区二区久久久| 国产精品网站在线观看| 在线观看日韩国产| 成人av在线播放网站| 精品一区中文字幕| 视频一区欧美精品| 国产欧美一区二区三区在线看蜜臀 | 福利一区二区在线| 天天爽夜夜爽夜夜爽精品视频| 日韩精品一区二区三区四区| 99免费精品在线观看| 久草在线在线精品观看| 亚洲一区二区免费视频| 中文字幕一区二区不卡 | 国产河南妇女毛片精品久久久| 亚洲最大成人综合| 中文字幕欧美三区| 久久九九全国免费| 欧美一级二级三级蜜桃| 欧美色手机在线观看| 91搞黄在线观看| 色爱区综合激月婷婷| 91在线云播放| gogogo免费视频观看亚洲一| 丁香激情综合国产| 波多野结衣中文字幕一区 | 成人app网站| 成人黄色在线网站| 成人免费视频免费观看| 成人免费高清视频在线观看| 成人免费毛片aaaaa**| 成人福利视频网站| 99视频一区二区| 91麻豆视频网站| 色呦呦网站一区| 在线视频一区二区免费| 欧美这里有精品| 欧美日韩国产在线观看| 欧美疯狂性受xxxxx喷水图片| 欧美日韩精品久久久| 国产视频一区在线播放| 中文字幕精品综合| 国产.欧美.日韩| 国产精品久久影院| 91啪亚洲精品| 欧美综合一区二区三区| 欧美视频日韩视频| 日韩欧美一区在线观看| 久久久久国产一区二区三区四区 | 久久久久久99久久久精品网站| 在线观看91av| 久久亚洲私人国产精品va媚药| 国产欧美日韩精品一区| 日韩毛片高清在线播放| 日韩高清国产一区在线| 国产不卡在线一区| 精品1区2区3区| 久久久久久久久久美女| 亚洲免费观看高清完整版在线观看熊| 亚洲不卡在线观看| 国产精品综合网| 欧美中文字幕一区二区三区| 精品国产亚洲在线| 亚洲裸体在线观看| 免费视频最近日韩| 91丨九色丨黑人外教| 欧美电影免费观看高清完整版| 国产精品久久二区二区| 青青草成人在线观看| 成人在线综合网站| 欧美老人xxxx18| 国产精品初高中害羞小美女文| 日韩国产在线一| 99久久99精品久久久久久| 欧美久久久久久久久中文字幕| 久久久精品免费观看| 亚洲男同性视频| 精品中文av资源站在线观看| 欧美丝袜丝nylons| 久久精品免费在线观看| 中文字幕一区二区在线播放| 日韩精品视频网站| 成人国产亚洲欧美成人综合网| 欧美三级中文字| 国产欧美日韩麻豆91| 久久精品二区亚洲w码| 欧美老人xxxx18| 亚洲欧洲综合另类| 狠狠色丁香婷综合久久| 91久久一区二区| 亚洲欧美激情小说另类| 国内精品不卡在线| 亚洲精品一区二区三区在线观看 | 精品女同一区二区| 一区二区三区不卡在线观看| 国产一区二区三区免费在线观看 | 丁香六月久久综合狠狠色| 欧美日韩在线三区| 亚洲欧美一区二区三区极速播放| 国产精品自拍av| 欧美日韩一本到| 精品伦理精品一区| 美脚の诱脚舐め脚责91 | 91精品福利视频| 自拍偷自拍亚洲精品播放| 成人激情免费视频| 欧美精品一区二区三区在线| 精品影视av免费| 亚洲国产高清不卡| 99精品视频中文字幕| 亚洲日本欧美天堂| 在线亚洲高清视频| 一区二区三区产品免费精品久久75| 国产成人午夜电影网| 精品日韩一区二区| 激情图区综合网| 久久精品男人天堂av| 99精品视频中文字幕| 亚洲一区二区三区中文字幕在线| 一本到不卡免费一区二区| 亚洲自拍偷拍图区| 日韩精品一区二区三区视频 | 欧美一区二区三区视频免费播放| 亚洲精品国产a| 99精品热视频| 亚洲精品欧美激情| 91精品国产欧美一区二区成人| 美女视频一区二区| 久久久久国产精品免费免费搜索| 国产精品一品二品| 亚洲欧美另类图片小说| 日本精品免费观看高清观看| 亚洲一区在线视频观看| 欧美刺激脚交jootjob| 美女性感视频久久| 日韩精品一区国产麻豆| 国产麻豆欧美日韩一区| 亚洲色图丝袜美腿| av成人动漫在线观看| 亚洲国产精品人人做人人爽| 欧美xingq一区二区| 91视频免费看| 久久精品国产精品亚洲精品| 中文字幕在线免费不卡| 在线播放日韩导航| 91麻豆文化传媒在线观看| 日韩和欧美一区二区三区| 欧美日韩电影在线| 国产二区国产一区在线观看| 午夜精品久久久久久| 国产精品进线69影院| 日韩一区二区精品葵司在线| 91丝袜美腿高跟国产极品老师| 久久99热国产| 五月天激情综合| 亚洲美女视频在线| 欧美极品aⅴ影院| 精品乱码亚洲一区二区不卡| 色噜噜狠狠色综合中国| 国产又黄又大久久| 亚洲男人的天堂一区二区| 国产色产综合色产在线视频| 欧美三级韩国三级日本三斤| 99精品视频一区|