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

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

?? stxcpy.s

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? S
字號:
/* * arch/alpha/lib/stxcpy.S * Contributed by Richard Henderson (rth@tamu.edu) * * 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. */#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 3stxcpy_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		# 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, t1	# e0    :	bne	t8, $a_eos	# .. e1 :	/* On entry to this basic block:	   t0 == the first destination word for masking back in	   t1 == a source word not containing a null.  */$a_loop:	stq_u	t1, 0(a0)	# e0    :	addq	a0, 8, a0	# .. e1 :	ldq_u	t1, 0(a1)	# e0    :	addq	a1, 8, a1	# .. e1 :	cmpbge	zero, t1, t8	# e0 (stall)	beq	t8, $a_loop	# .. e1 (zdb)	/* 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		# e0    : find low bit set	and	t8, t6, 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	t0, 0(a0)	# e0    :	subq	t12, 1, t6	# .. e1 :	zapnot	t1, t6, t1	# e0    : clear src bytes >= null	or	t12, t6, t8	# .. e1 :	zap	t0, t8, t0	# e0    : clear dst bytes <= null	or	t0, t1, t1	# e1    :1:	stq_u	t1, 0(a0)	# e0    :	ret	(t9)		# .. e1 :	.end stxcpy_aligned	.align 3	.ent __stxcpy	.globl __stxcpy__stxcpy:	.frame sp, 0, t9	.prologue 0	/* Are source and destination co-aligned?  */	xor	a0, a1, t0	# e0    :	unop			#       :	and	t0, 7, t0	# e0    :	bne	t0, $unaligned	# .. e1 :	/* We are co-aligned; take care of a partial first word.  */	ldq_u	t1, 0(a1)	# e0    : load first src word	and	a0, 7, t0	# .. e1 : take care not to load a word ...	addq	a1, 8, a1		# e0    :	beq	t0, stxcpy_aligned	# .. e1 : ... if we wont need it	ldq_u	t0, 0(a0)	# e0    :	br	stxcpy_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, 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)	# e0    :	addq	a1, 8, a1	# .. e1 :	extql	t1, a1, t1	# e0    :	extqh	t2, a1, t4	# e0    :	mskql	t0, a0, t0	# e0    :	or	t1, t4, t1	# .. e1 :	mskqh	t1, a0, t1	# e0    :	or	t0, t1, t1	# e1    :	or	t1, t6, t6	# e0    :	cmpbge	zero, t6, t8	# .. e1 :	lda	t6, -1		# e0    : for masking just below	bne	t8, $u_final	# .. e1 :	mskql	t6, a1, t6		# e0    : mask out the bits we have	or	t6, t2, t2		# e1    :   already extracted before	cmpbge	zero, t2, t8		# e0    :   testing eos	bne	t8, $u_late_head_exit	# .. e1 (zdb)	/* 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)	# e0    : store first output word	addq	a0, 8, a0	# .. e1 :	extql	t2, a1, t0	# e0    : position ho-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 :	nop			# e0    :	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:	   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	# 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, t1	# e0    : current dst word now complete	ldq_u	t2, 0(a1)	# .. e1 : load high word for next time	stq_u	t1, -8(a0)	# e0    : save the current word	mov	t3, t0		# .. e1 :	cmpbge	zero, t2, t8	# e0    : test new word for eos	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:	   t0 == the shifted high-order bits from the previous source word	   t2 == the unshifted current source word.  */$u_eos:	extqh	t2, a1, t1	# e0    :	or	t0, t1, t1	# e1    : first (partial) source word complete	cmpbge	zero, t1, t8	# e0    : is the null in this first bit?	bne	t8, $u_final	# .. e1 (zdb)$u_late_head_exit:	stq_u	t1, 0(a0)	# e0    : the null was in the high-order bits	addq	a0, 8, a0	# .. e1 :	extql	t2, a1, t1	# e0    :	cmpbge	zero, t1, t8	# .. e1 :	/* 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		# 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	t0, 0(a0)	# e0    :	subq	t12, 1, t6	# .. e1 :	or	t6, t12, t8	# e0    :	zapnot	t1, t6, t1	# .. e1 : kill source bytes >= null	zap	t0, t8, t0	# e0    : kill dest bytes <= null	or	t0, t1, t1	# e1    :1:	stq_u	t1, 0(a0)	# e0    :	ret	(t9)		# .. e1 :	/* 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	# e0    :	beq	t12, $u_head	# .. e1 (zdb)	lda	t2, -1		# e1    : mask out leading garbage in source	mskqh	t2, t5, t2	# e0    :	nop			# e0    :	ornot	t1, t2, t3	# .. e1 :	cmpbge	zero, t3, t8	# e0    : is there a zero?	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	and	t6, t8, t12	# e0    :	and	a1, 7, t5	# .. e1 :	subq	t12, 1, t6	# e0    :	or	t6, t12, t8	# e1    :	srl	t12, t5, t12	# e0    : adjust final null return value	zapnot	t2, t8, t2	# .. e1 : prepare source word; mirror changes	and	t1, t2, t1	# e1    : to source validity mask	extql	t2, a1, t2	# .. e0 :	extql	t1, a1, t1	# e0    :	andnot	t0, t2, t0	# .. e1 : zero place for source to reside	or	t0, t1, t1	# e1    : and put it there	stq_u	t1, 0(a0)	# .. e0 :	ret	(t9)		# e1    :	.end __stxcpy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产日韩欧美精品| 中文字幕免费观看一区| 国产精品一二三区| 天堂va蜜桃一区二区三区| 中文字幕在线观看一区| 亚洲精品一区二区三区福利| 在线视频综合导航| 成人国产精品免费观看| 日韩二区三区在线观看| 一区二区三区四区不卡视频| 国产精品无遮挡| 欧美性videosxxxxx| 97se亚洲国产综合自在线观| 久久国内精品自在自线400部| 国产精品看片你懂得| 欧美综合一区二区三区| 色婷婷国产精品久久包臀| 成人av电影观看| 国产91综合网| 99精品国产99久久久久久白柏| 五月婷婷综合在线| 中文字幕制服丝袜一区二区三区| 2020国产精品久久精品美国| 精品国产一区久久| 欧美一级久久久久久久大片| 欧美一区二区三区不卡| 欧美日韩久久久一区| 欧美三级日韩在线| 91精品国产综合久久久久久久久久| 欧美性生交片4| 欧美一级电影网站| 久久久亚洲欧洲日产国码αv| 久久综合久久久久88| 久久精品亚洲精品国产欧美| 中文字幕精品一区二区精品绿巨人| 国产欧美一区二区三区在线看蜜臀| 精品精品欲导航| 久久久久久久免费视频了| 久久久久国产精品麻豆ai换脸| 国产午夜精品一区二区三区嫩草| 久久精品视频在线免费观看| 国产欧美精品区一区二区三区| 国产精品家庭影院| 亚洲第一会所有码转帖| 精东粉嫩av免费一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 欧美区视频在线观看| 日韩精品在线一区二区| 亚洲国产精品v| 欧美国产一区二区| 五月综合激情网| 国产成人综合在线| proumb性欧美在线观看| 色婷婷香蕉在线一区二区| 日韩一区二区三区电影在线观看 | www久久精品| 亚洲精品美国一| 日韩国产欧美在线视频| 国产91丝袜在线播放| 欧美在线视频日韩| 久久久高清一区二区三区| 一区二区在线观看免费| 亚洲第一综合色| 久色婷婷小香蕉久久| 国产在线不卡一卡二卡三卡四卡| 色一情一乱一乱一91av| 精品国产一区二区亚洲人成毛片| 国产精品拍天天在线| 综合久久综合久久| 午夜久久电影网| 风流少妇一区二区| 在线精品视频一区二区三四| 欧美精品成人一区二区三区四区| 精品国产第一区二区三区观看体验| 国产免费成人在线视频| 轻轻草成人在线| 欧洲精品一区二区三区在线观看| 久久婷婷综合激情| 男男视频亚洲欧美| 欧美美女一区二区| 亚洲欧美福利一区二区| 成人一道本在线| 久久久蜜桃精品| 另类小说图片综合网| 色哦色哦哦色天天综合| 中文字幕二三区不卡| 狠狠久久亚洲欧美| 精品日韩在线一区| 美女在线一区二区| 91麻豆精品91久久久久久清纯| 亚洲一区免费观看| 91香蕉视频mp4| 亚洲精品网站在线观看| 激情小说欧美图片| 91麻豆精品国产91久久久| 一二三区精品福利视频| 色综合色综合色综合色综合色综合| 日韩一区二区精品葵司在线| 午夜精品久久久| 欧美日韩精品一区二区三区四区 | 91精品1区2区| 一区二区三区免费网站| 91电影在线观看| 亚洲综合色婷婷| 欧美日韩国产首页| 青草av.久久免费一区| 精品三级在线看| 国产麻豆91精品| 国产精品久久久久精k8 | 久久久久国产一区二区三区四区 | 中文字幕日韩一区二区| 国产精品18久久久久久久网站| 国产欧美精品一区二区三区四区| 国产91精品久久久久久久网曝门| 国产欧美日韩在线| 91麻豆精品秘密| 亚洲v中文字幕| 欧美va在线播放| 成人精品视频一区二区三区| 亚洲色图在线播放| 欧美一区国产二区| 国产+成+人+亚洲欧洲自线| 亚洲人吸女人奶水| 欧美日韩中文字幕一区| 精品亚洲免费视频| ...xxx性欧美| 日韩视频在线一区二区| 国产成人av一区| 亚洲高清中文字幕| 国产午夜精品久久久久久久| 一道本成人在线| 久久精品国产一区二区| 亚洲少妇中出一区| 精品少妇一区二区三区免费观看 | 秋霞国产午夜精品免费视频| 国产欧美一区二区三区在线老狼| 欧美偷拍一区二区| 丁香激情综合五月| 日精品一区二区| 国产精品免费网站在线观看| 欧美乱妇一区二区三区不卡视频| 久久99国产精品尤物| 欧美国产日韩精品免费观看| 在线观看国产91| 国产二区国产一区在线观看| 婷婷成人综合网| 亚洲欧美日韩系列| 久久精品亚洲精品国产欧美 | 欧美性猛交xxxx乱大交退制版| 激情综合亚洲精品| 天天亚洲美女在线视频| 国产精品国产三级国产有无不卡| 日韩一区二区免费在线电影 | 久久九九久久九九| 欧美丰满高潮xxxx喷水动漫| 97久久精品人人做人人爽 | 日韩三级免费观看| 欧美色综合网站| 色偷偷一区二区三区| 国产99久久久国产精品潘金网站| 日本一区中文字幕| 国产精品美女久久久久高潮| 精品国产乱子伦一区| 91.成人天堂一区| 欧美日韩亚洲高清一区二区| 97国产精品videossex| www.亚洲国产| 91天堂素人约啪| 99r国产精品| 白白色亚洲国产精品| 成人av网站免费观看| 成人一级视频在线观看| 国产成人小视频| 不卡的电影网站| 91在线丨porny丨国产| 成人av在线播放网址| av影院午夜一区| 91浏览器在线视频| 91福利视频久久久久| 欧美性大战久久久| 欧美日韩免费观看一区三区| 91激情五月电影| 欧美日韩大陆一区二区| 欧美日韩视频一区二区| 欧美日精品一区视频| 日韩一区二区三区视频在线| 欧美电影免费观看高清完整版在线 | 8x福利精品第一导航| 日韩精品一区二区三区在线观看| 欧美一区二区精品| 国产婷婷精品av在线| 一区二区三区在线看| 久久99蜜桃精品| 成人午夜电影网站| 欧美精品99久久久**| 国产精品无人区| 蜜桃av一区二区在线观看| 96av麻豆蜜桃一区二区| 日韩三级在线观看| 一区二区高清视频在线观看|