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

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

?? ev6-stxcpy.s

?? 嵌入式系統設計與實例開發源碼
?? 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一区二区三区免费野_久草精品视频
国产日韩精品一区二区浪潮av| 欧美日韩高清一区二区不卡| 精品成a人在线观看| 国产精品综合二区| 亚洲天堂久久久久久久| 欧美一级一区二区| 波多野结衣在线一区| 亚洲国产毛片aaaaa无费看| 亚洲麻豆国产自偷在线| 欧美日韩一级视频| 国产精品1区二区.| 五月婷婷综合网| 欧美激情综合五月色丁香小说| 欧美日韩电影在线| 成人av网址在线观看| 日韩电影在线免费观看| 国产精品水嫩水嫩| 欧美草草影院在线视频| 日本高清不卡视频| 国产精品一级片在线观看| 亚洲午夜久久久久中文字幕久| 久久一区二区三区国产精品| 欧美性欧美巨大黑白大战| 国产91精品露脸国语对白| 伊人婷婷欧美激情| 国产精品久久网站| 91麻豆精品国产91| 色综合久久88色综合天天6| 久草在线在线精品观看| 亚洲午夜视频在线观看| 国产精品电影院| 国产亚洲人成网站| 日韩亚洲电影在线| 欧美三级日韩三级国产三级| 成人av网站在线| 国产一区二区在线视频| 日本人妖一区二区| 亚洲国产成人av网| 亚洲三级免费观看| 国产欧美日韩在线| 久久影院午夜论| 日韩一区二区三免费高清| 欧美色成人综合| 欧美无人高清视频在线观看| 91丨porny丨国产入口| 黄一区二区三区| 亚洲成人先锋电影| 国产精品久久久久久户外露出| 精品久久久久一区| 欧美一区二区三区啪啪| 欧美日韩的一区二区| 日本韩国精品在线| 色播五月激情综合网| 99视频精品全部免费在线| 盗摄精品av一区二区三区| 精品亚洲成a人在线观看| 免费欧美日韩国产三级电影| 亚洲mv在线观看| 免费人成精品欧美精品| 亚洲福利一区二区| 午夜精品久久一牛影视| 亚洲一区二区三区爽爽爽爽爽 | 麻豆一区二区在线| 蜜桃精品在线观看| 久久成人精品无人区| 久久99热这里只有精品| 国产在线不卡一卡二卡三卡四卡| 亚洲国产va精品久久久不卡综合| 成人欧美一区二区三区1314| 亚洲人精品一区| 亚洲国产综合人成综合网站| 视频一区二区欧美| 日本vs亚洲vs韩国一区三区| 久久精品国产免费| 国产乱码精品一品二品| 成人一级视频在线观看| jiyouzz国产精品久久| 91极品视觉盛宴| 欧美性猛交xxxx乱大交退制版| 精品视频一区三区九区| 日韩欧美国产不卡| 中文一区一区三区高中清不卡| 国产精品国产三级国产普通话99| 亚洲精品久久久久久国产精华液| 亚洲无线码一区二区三区| 亚洲午夜电影网| 日日夜夜免费精品| 免费亚洲电影在线| 国产不卡在线播放| 在线观看www91| 日韩一级片在线观看| 欧美激情艳妇裸体舞| 亚洲永久精品大片| 老司机精品视频一区二区三区| 国产一区二区久久| 在线免费观看不卡av| 欧美一级理论片| 中文字幕在线一区| 视频一区在线播放| 国产精品456露脸| 精品视频色一区| 国产欧美一区二区三区鸳鸯浴| 一区二区三区在线免费| 国产在线精品免费av| 99久久国产综合色|国产精品| 欧美一级xxx| 亚洲三级小视频| 国内精品视频666| 欧洲一区二区三区免费视频| 欧美mv日韩mv国产网站app| 亚洲欧洲性图库| 看电影不卡的网站| 成人永久看片免费视频天堂| 9191国产精品| 亚洲欧美另类图片小说| 捆绑调教美女网站视频一区| 97se狠狠狠综合亚洲狠狠| 在线播放亚洲一区| 亚洲精品成人悠悠色影视| 激情久久五月天| 欧美久久久久免费| 亚洲精品乱码久久久久久久久| 国产自产视频一区二区三区| 欧美视频一二三区| 国产精品蜜臀在线观看| 韩国精品久久久| 欧美老肥妇做.爰bbww视频| 亚洲欧美色综合| 国产成人av网站| 欧美videos大乳护士334| 亚洲资源在线观看| 国产传媒久久文化传媒| 日韩亚洲电影在线| 一区二区三区在线影院| 精品一区二区三区影院在线午夜| 欧美性受xxxx黑人xyx性爽| 国产精品国产成人国产三级 | 欧美一区二区私人影院日本| 夜夜嗨av一区二区三区 | 狠狠色丁香婷综合久久| 欧美老肥妇做.爰bbww| 一区二区成人在线视频| 日本久久精品电影| 亚洲少妇30p| 91在线视频观看| 国产精品毛片久久久久久久| 国产精品88888| 2023国产精品视频| 国产在线播放一区二区三区| 精品成人一区二区三区| 国产一区二区三区四区五区美女| 精品乱人伦小说| 麻豆成人久久精品二区三区小说| 91精品国产综合久久小美女| 五月婷婷色综合| 日韩欧美在线网站| 激情久久久久久久久久久久久久久久| 91精品国产手机| 美女精品一区二区| 久久综合九色综合97_久久久| 国模套图日韩精品一区二区| 欧美精品一区二区三区在线| 国模一区二区三区白浆| 久久精品欧美一区二区三区不卡| 黄色精品一二区| 欧美韩国一区二区| 99久久国产综合精品女不卡| 亚洲你懂的在线视频| 欧美视频自拍偷拍| 天天免费综合色| 精品久久久三级丝袜| 国产99精品国产| 亚洲欧美日韩电影| 正在播放一区二区| 国产麻豆成人精品| 亚洲欧美日韩一区| 欧美精品自拍偷拍| 国内久久精品视频| 中文字幕在线播放不卡一区| 日本精品一级二级| 日韩成人一级大片| 国产亚洲综合色| 色综合久久久久久久久| 天天亚洲美女在线视频| 精品国产一区二区亚洲人成毛片| 高清久久久久久| 一区二区三区91| 日韩美女一区二区三区四区| 国产乱码一区二区三区| 亚洲天堂精品视频| 91精品国产免费| 91麻豆高清视频| 国产精品自在在线| 日韩国产精品久久久| 一区二区中文视频| 久久一区二区三区四区| 欧美一区二区三区免费在线看| 97se狠狠狠综合亚洲狠狠| 国产一区二区三区电影在线观看| 亚洲国产毛片aaaaa无费看|