⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rwlock.s

📁 优龙2410linux2.6.8内核源代码
💻 S
字号:
/* $Id: rwlock.S,v 1.4 2000/09/09 00:00:34 davem Exp $ * rwlocks.S: These things are too big to do inline. * * Copyright (C) 1999 David S. Miller (davem@redhat.com) */	.text	.align	64	/* The non-contention read lock usage is 2 cache lines. */	.globl	__read_lock, __read_unlock__read_lock: /* %o0 = lock_ptr */	ldsw		[%o0], %g5	brlz,pn		%g5, __read_wait_for_writer4:	 add		%g5, 1, %g7	cas		[%o0], %g5, %g7	cmp		%g5, %g7	bne,pn		%icc, __read_lock	 membar		#StoreLoad | #StoreStore99:	retl	 nop__read_unlock: /* %o0 = lock_ptr */	lduw		[%o0], %g5	sub		%g5, 1, %g7	cas		[%o0], %g5, %g7	cmp		%g5, %g7	be,pt		%xcc, 99b	 membar		#StoreLoad | #StoreStore	ba,a,pt		%xcc, __read_unlock__read_wait_for_writer:	ldsw		[%o0], %g5	brlz,pt		%g5, __read_wait_for_writer	 membar		#LoadLoad	ba,a,pt		%xcc, 4b__write_wait_for_any:	lduw		[%o0], %g5	brnz,pt		%g5, __write_wait_for_any	 membar		#LoadLoad	ba,a,pt		%xcc, 4f	.align		64	.globl		__write_unlock__write_unlock: /* %o0 = lock_ptr */	membar		#LoadStore | #StoreStore	retl	 stw		%g0, [%o0]	.globl		__write_lock__write_lock: /* %o0 = lock_ptr */	sethi		%hi(0x80000000), %g21:	lduw		[%o0], %g5	brnz,pn		%g5, __write_wait_for_any4:	 or		%g5, %g2, %g7	cas		[%o0], %g5, %g7	cmp		%g5, %g7	be,pt		%icc, 99b	 membar		#StoreLoad | #StoreStore	ba,a,pt		%xcc, 1b	.globl		__write_trylock__write_trylock: /* %o0 = lock_ptr */	sethi		%hi(0x80000000), %g21:	lduw		[%o0], %g5	brnz,pn		%g5, __write_trylock_fail4:	 or		%g5, %g2, %g7	cas		[%o0], %g5, %g7	cmp		%g5, %g7	be,pt		%icc, __write_trylock_succeed	 membar		#StoreLoad | #StoreStore	ba,pt		%xcc, 1b	 nop__write_trylock_succeed:	retl	 mov		1, %o0__write_trylock_fail:	retl	 mov		0, %o0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -