#################################################################
#								#
#	Copyright 2007 Fidelity Information Services, Inc	#
#								#
#	This source code contains the intellectual property	#
#	of its copyright holder(s), and is made available	#
#	under a license.  If you do not know the terms of	#
#	the license, please stop and do not read further.	#
#								#
#################################################################

#	PAGE	,132
	.title	compswap.s
	.sbttl	compswap
.include "g_msf.si"
.include "linkage.si"

#	.386
#	.MODEL	FLAT, C

	.text
ENTRY compswap
	# A(latch longword)	Arg0
	# comparison value	Arg1
	# replacement value	Arg2
	# cmpxchg will compare REG32_RET0 i.e EAX with 1st arg so copy
	# comparison value to EAX
	movl	REG32_ARG1,REG32_RET0
	lock
	cmpxchgl  REG32_ARG2,(REG64_ARG0)		# compare-n-swap
	jnz	fail
	movl	$1,REG32_RET0			# return TRUE
	ret

fail:
	xor	REG32_RET0,REG32_RET0		# return FALSE
	ret
