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

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

?? stxncpy.s

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? S
字號:
/* * arch/alpha/lib/stxncpy.S * Contributed by Richard Henderson (rth@tamu.edu) * * 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. */#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 3stxncpy_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		# e1    : build a mask against false zero	mskqh	t2, a1, t2	# e0    :   detection in the src word	mskqh	t1, a1, t3	# e0    :	ornot	t1, t2, t2	# .. e1 :	mskql	t0, a1, t0	# e0    : assemble the first output word	cmpbge	zero, t2, t8	# .. e1 : bits set iff null found	or	t0, t3, t0	# e0    :	beq	a2, $a_eoc	# .. e1 :	bne	t8, $a_eos	# .. e1 :	/* On entry to this basic block:	   t0 == a source word not containing a null.  */$a_loop:	stq_u	t0, 0(a0)	# e0    :	addq	a0, 8, a0	# .. e1 :	ldq_u	t0, 0(a1)	# e0    :	addq	a1, 8, a1	# .. e1 :	subq	a2, 1, a2	# e0    :	cmpbge	zero, t0, t8	# .. e1 (stall)	beq	a2, $a_eoc      # e1    :	beq	t8, $a_loop	# e1    :	/* 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		# e0    : find low bit set	and	t8, t12, t12	# e1 (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	# e0    :	bne	t6, 1f		# .. e1 (zdb)	/* We're doing a partial word store and so need to combine	   our source and original destination words.  */	ldq_u	t1, 0(a0)	# e0    :	subq	t12, 1, t6	# .. e1 :	or	t12, t6, t8	# e0    :	unop			#	zapnot	t0, t8, t0	# e0    : clear src bytes > null	zap	t1, t8, t1	# .. e1 : clear dst bytes <= null	or	t0, t1, t0	# e1    :1:	stq_u	t0, 0(a0)	# e0    :	ret	(t9)		# e1    :	/* Add the end-of-count bit to the eos detection bitmask.  */$a_eoc:	or	t10, t8, t8	br	$a_eos	.end stxncpy_aligned	.align 3	.ent __stxncpy	.globl __stxncpy__stxncpy:	.frame sp, 0, t9, 0	.prologue 0	/* Are source and destination co-aligned?  */	xor	a0, a1, t1	# e0    :	and	a0, 7, t0	# .. e1 : find dest misalignment	and	t1, 7, t1	# e0    :	addq	a2, t0, a2	# .. e1 : bias count by dest misalignment	subq	a2, 1, a2	# e0    :	and	a2, 7, t2	# e1    :	srl	a2, 3, a2	# e0    : a2 = loop counter = (count - 1)/8	addq	zero, 1, t10	# .. e1 :	sll	t10, t2, t10	# e0    : t10 = bitmask of last count byte	bne	t1, $unaligned	# .. e1 :	/* We are co-aligned; take care of a partial first word.  */	ldq_u	t1, 0(a1)	# e0    : load first src word	addq	a1, 8, a1	# .. e1 :	beq	t0, stxncpy_aligned     # avoid loading dest word if not needed	ldq_u	t0, 0(a0)	# e0    :	br	stxncpy_aligned	# .. e1 :/* 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 3$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)	# e0    : load second src word	addq	a1, 8, a1	# .. e1 :	mskql	t0, a0, t0	# e0    : mask trailing garbage in dst	extqh	t2, a1, t4	# e0    :	or	t1, t4, t1	# e1    : first aligned src word complete	mskqh	t1, a0, t1	# e0    : mask leading garbage in src	or	t0, t1, t0	# e0    : first output word complete	or	t0, t6, t6	# e1    : mask original data for zero test	cmpbge	zero, t6, t8	# e0    :	beq	a2, $u_eocfin	# .. e1 :	bne	t8, $u_final	# e1    :	lda	t6, -1			# e1    : mask out the bits we have	mskql	t6, a1, t6		# e0    :   already seen	stq_u	t0, 0(a0)		# e0    : store first output word	or      t6, t2, t2		# .. e1 :	cmpbge	zero, t2, t8		# e0    : find nulls in second partial	addq	a0, 8, a0		# .. e1 :	subq	a2, 1, a2		# e0    :	bne	t8, $u_late_head_exit	# .. e1 :	/* 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	# e0    : position hi-bits of lo word	ldq_u	t2, 8(a1)	# .. e1 : read next high-order source word	addq	a1, 8, a1	# e0    :	cmpbge	zero, t2, t8	# e1 (stall)	beq	a2, $u_eoc	# e1    :	bne	t8, $u_eos	# e1    :	/* 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 3$u_loop:	extqh	t2, a1, t0	# e0    : extract high bits for current word	addq	a1, 8, a1	# .. e1 :	extql	t2, a1, t3	# e0    : extract low bits for next time	addq	a0, 8, a0	# .. e1 :	or	t0, t1, t0	# e0    : current dst word now complete	ldq_u	t2, 0(a1)	# .. e1 : load high word for next time	stq_u	t0, -8(a0)	# e0    : save the current word	mov	t3, t1		# .. e1 :	subq	a2, 1, a2	# e0    :	cmpbge	zero, t2, t8	# .. e1 : test new word for eos	beq	a2, $u_eoc	# e1    :	beq	t8, $u_loop	# e1    :	/* 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	# e0    :	or	t0, t1, t0	# e1    : first (partial) source word complete	cmpbge	zero, t0, t8	# e0    : is the null in this first bit?	bne	t8, $u_final	# .. e1 (zdb)	stq_u	t0, 0(a0)	# e0    : the null was in the high-order bits	addq	a0, 8, a0	# .. e1 :	subq	a2, 1, a2	# e1    :$u_late_head_exit:	extql	t2, a1, t0	# .. e0 :	cmpbge	zero, t0, t8	# e0    :	or	t8, t10, t6	# e1    :	cmoveq	a2, t6, t8	# e0    :	nop			# .. e1 :	/* 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		# e0    : isolate low bit set	and	t6, t8, t12	# e1    :	and	t12, 0x80, t6	# e0    : avoid dest word load if we can	bne	t6, 1f		# .. e1 (zdb)	ldq_u	t1, 0(a0)	# e0    :	subq	t12, 1, t6	# .. e1 :	or	t6, t12, t8	# e0    :	zapnot	t0, t8, t0	# .. e1 : kill source bytes > null	zap	t1, t8, t1	# e0    : kill dest bytes <= null	or	t0, t1, t0	# e1    :1:	stq_u	t0, 0(a0)	# e0    :	ret	(t9)		# .. e1 :$u_eoc:				# end-of-count	extqh	t2, a1, t0	or	t0, t1, t0	cmpbge	zero, t0, t8$u_eocfin:			# end-of-count, final word	or	t10, t8, t8	br	$u_final	/* Unaligned copy entry point.  */	.align 3$unaligned:	ldq_u	t1, 0(a1)	# e0    : load first source word	and	a0, 7, t4	# .. e1 : find dest misalignment	and	a1, 7, t5	# e0    : find src misalignment	/* Conditionally load the first destination word and a bytemask	   with 0xff indicating that the destination byte is sacrosanct.  */	mov	zero, t0	# .. e1 :	mov	zero, t6	# e0    :	beq	t4, 1f		# .. e1 :	ldq_u	t0, 0(a0)	# e0    :	lda	t6, -1		# .. e1 :	mskql	t6, a0, t6	# e0    :1:	subq	a1, t4, a1	# .. e1 : 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	# e1    :	extql	t1, a1, t1	# .. e0 : shift src into place	lda	t2, -1		# e0    : for creating masks later	beq	t12, $u_head	# e1    :	mskqh	t2, t5, t2	# e0    : begin src byte validity mask	cmpbge	zero, t1, t8	# .. e1 : is there a zero?	extql	t2, a1, t2	# e0    :	or	t8, t10, t5	# .. e1 : test for end-of-count too	cmpbge	zero, t2, t3	# e0    :	cmoveq	a2, t5, t8	# .. e1 :	andnot	t8, t3, t8	# e0    :	beq	t8, $u_head	# .. e1 (zdb)	/* 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)	# e0    :	negq	t8, t6		# .. e1 : build bitmask of bytes <= zero	mskqh	t1, t4, t1	# e0    :	and	t6, t8, t12	# .. e1 :	subq	t12, 1, t6	# e0    :	or	t6, t12, t8	# e1    :	zapnot	t2, t8, t2	# e0    : prepare source word; mirror changes	zapnot	t1, t8, t1	# .. e1 : to source validity mask	andnot	t0, t2, t0	# e0    : zero place for source to reside	or	t0, t1, t0	# e1    : and put it there	stq_u	t0, 0(a0)	# e0    :	ret	(t9)		# .. e1 :	.end __stxncpy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情一区在线| 日韩欧美在线123| 91精品国产综合久久久久久久 | 亚洲资源在线观看| 久久精品国产秦先生| 91色porny蝌蚪| 精品电影一区二区三区| 一区二区三区电影在线播| 国产一级精品在线| 91精品国产91久久综合桃花 | 亚洲成a人v欧美综合天堂| 国产麻豆精品视频| 欧美人妇做爰xxxⅹ性高电影| 国产精品久久久久永久免费观看 | 欧美xxxxxxxxx| 婷婷六月综合亚洲| 日本韩国欧美一区二区三区| 久久综合国产精品| 卡一卡二国产精品| 欧美一区二区大片| 午夜精品久久久久久久| 91行情网站电视在线观看高清版| 国产欧美1区2区3区| 国内精品国产成人国产三级粉色| 91精品在线麻豆| 亚洲高清中文字幕| 91国偷自产一区二区开放时间| 国产精品日产欧美久久久久| 精久久久久久久久久久| 日韩精品一区二区三区在线播放| 亚洲无线码一区二区三区| 色乱码一区二区三区88| 亚洲日本va午夜在线电影| av日韩在线网站| 国产精品免费av| 91伊人久久大香线蕉| 一区在线观看免费| 99久久久久免费精品国产| 自拍偷拍欧美精品| 91在线免费视频观看| 亚洲人xxxx| 欧美亚洲日本国产| 日韩精品亚洲专区| 精品久久久网站| 东方欧美亚洲色图在线| 中文字幕亚洲不卡| 色狠狠一区二区| 午夜精品久久久久久久久久久| 91精品欧美久久久久久动漫| 蜜桃久久av一区| 国产人伦精品一区二区| 色婷婷av一区| 日日夜夜一区二区| 久久综合资源网| 不卡影院免费观看| 亚洲国产精品一区二区尤物区| 欧美日韩www| 精品影视av免费| 国产精品久久久久久久久免费丝袜| 成人一二三区视频| 亚洲一区二区三区四区在线观看| 777奇米四色成人影色区| 国产乱码字幕精品高清av| 国产精品网站在线| 欧美视频在线一区| 国产在线精品一区二区夜色 | 337p粉嫩大胆噜噜噜噜噜91av| 国产成人综合在线观看| 亚洲欧美日本在线| 日韩一级片在线观看| 国产成人精品免费看| 亚洲在线一区二区三区| 精品人在线二区三区| 91视频.com| 美女一区二区在线观看| 国产精品网曝门| 国产精品丝袜一区| 欧美日韩中文国产| 国产精品456| 日韩成人午夜电影| 中文字幕一区二区三区视频| 91精品国产黑色紧身裤美女| 99免费精品视频| 日本视频在线一区| 亚洲丝袜另类动漫二区| 精品国产91九色蝌蚪| 欧美性受极品xxxx喷水| 国产成人av一区| 蜜桃av噜噜一区| 亚洲综合无码一区二区| 国产亚洲精品超碰| 欧美一区日本一区韩国一区| eeuss国产一区二区三区| 日本特黄久久久高潮| 亚洲在线观看免费| 中文无字幕一区二区三区 | 国产精品午夜电影| 精品国产一区二区三区av性色| 97久久精品人人做人人爽| 国产乱码精品一区二区三| 六月婷婷色综合| 丝袜美腿成人在线| 亚洲一区二区三区激情| 亚洲欧美怡红院| 欧美—级在线免费片| 国产亚洲精品资源在线26u| 欧美一区二区在线免费观看| 在线视频你懂得一区| heyzo一本久久综合| 国产成人在线视频网址| 韩国精品主播一区二区在线观看 | 欧美视频第二页| 色老汉一区二区三区| 91香蕉国产在线观看软件| 国产a久久麻豆| 国产电影精品久久禁18| 成熟亚洲日本毛茸茸凸凹| 国产精品18久久久久久vr| 欧美日韩精品免费观看视频| 日本韩国欧美三级| 欧美三级在线看| 欧美日韩小视频| 91精品国产品国语在线不卡| 91精品国产综合久久久蜜臀图片| 欧美高清激情brazzers| 7777女厕盗摄久久久| 日韩精品一区二区三区四区视频| 日韩欧美另类在线| 久久婷婷国产综合国色天香| 久久精品欧美日韩精品| 亚洲国产高清aⅴ视频| 国产精品国产三级国产有无不卡 | 国产清纯白嫩初高生在线观看91| 久久久国产精品不卡| 国产精品美女久久久久aⅴ| 亚洲欧美激情视频在线观看一区二区三区 | 色婷婷亚洲精品| 欧美日韩亚洲综合在线| 日韩三级视频在线观看| 久久久精品影视| 中文字幕一区av| 日韩国产精品久久久久久亚洲| 精品一区二区三区免费| 成人少妇影院yyyy| 欧美色倩网站大全免费| 久久看人人爽人人| 一区二区在线观看免费| 久久福利资源站| 91麻豆国产精品久久| 精品少妇一区二区三区日产乱码| 国产欧美一区二区精品久导航 | 精品国产一二三区| 亚洲欧洲日韩在线| 蜜桃视频在线观看一区二区| 成人高清在线视频| 91麻豆精品国产91久久久更新时间| 国产亚洲女人久久久久毛片| 亚洲高清一区二区三区| 91福利视频在线| 国产三级欧美三级| 美女国产一区二区| 136国产福利精品导航| 中文字幕亚洲电影| 免费三级欧美电影| 97久久精品人人爽人人爽蜜臀| 欧美一级高清片| 综合久久久久综合| 国产一区二区美女诱惑| 欧美日韩一区精品| 国产精品视频看| 免费人成网站在线观看欧美高清| 成人sese在线| 欧美一级理论片| 一区二区三区在线视频观看58| 乱一区二区av| 欧美福利一区二区| 一区二区三区自拍| 成人av在线播放网址| 精品国产伦一区二区三区免费| 亚洲影院在线观看| 91香蕉视频mp4| 国产精品嫩草99a| 国产精品羞羞答答xxdd| 日韩美女在线视频| 欧美a一区二区| 在线电影欧美成精品| 一二三四区精品视频| 日韩一级成人av| 一区二区三区在线观看网站| 国产高清成人在线| 久久伊99综合婷婷久久伊| 日本sm残虐另类| 欧美日韩国产成人在线91| 伊人婷婷欧美激情| 在线看国产一区| 亚洲综合成人网| 欧美午夜寂寞影院| 夜夜精品视频一区二区| 欧美亚洲精品一区| 午夜精品久久久久久不卡8050|