Compare And Swap (two-operand)

NAME
	CAS2 --Compare and swap (two-operand)	(68020+)

SYNOPSIS
	CAS2	Dc1:Dc2,Du1:Du2,(Rn1):(Rn2)

	Size = (Word, Long)

FUNCTION
	This instruction is a read-modify-write instruction and should
	NEVER be used on Amiga because of conflicts with customs chips
	Destination operand 1, which is in memory to specified address by
	(Rn1), is compared to data register Dc1. If there's equality (Z=1),
	destination operand 2, which is in memory to specified address by
	(Rn2), is compared to data register Dc2.

	If there's equality (Z=1), destination operand 1 can be updated, i.e.
	new operand Du1 (Data Update) is moved in destination (Rn1).

	And also, destination operand 2 can be updated, i.e. new operand Du2
	(Data Update) is moved in destination (Rn2).

	If there's no equality (Z=0), reference registers Dc1 and Dc2 have to
	be updated. So there's move from destination operand (Rn1) in Dc1, and
	from (Rn2) in Dc2.

FORMAT
                                                          <ea>
	----------------------------------------=========================
	|15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
	|---|---|---|---|---|-------|---|---|---|-----------|-----------|
	| 0 | 0 | 0 | 0 | 1 | SIZE  | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
	|---|-----------|-----------|-----------|-----------|-----------|
	|D/A|    Rn1    | 0 | 0 | 0 |  Du1 Reg. | 0 | 0 | 0 |  Dc1 Reg. |
	|---|-----------|-----------|-----------|-----------|-----------|
	|D/A|    Rn2    | 0 | 0 | 0 |  Du2 Reg. | 0 | 0 | 0 |  Dc2 Reg. |
	-----------------------------------------------------------------

SIZE
	10->one Word operation
	11->one Long operation

REGISTER
	D/A fields - Specify whether Rn1 and Rn2 reference data or address 
	registers, respectively.
	0 - The corresponding register is a data register.
	1 - The corresponding register is an address register.
	
	Rn1, Rn2 fields - Specify the number of the registers that contain
	the addresses of the first and the second memory operand,
	respectively. If the operands overlap in memory, the results of
	any memory update are undefined.
	
	Du1, Du2 fields - Specify the data registers that contain the update
	vaules to be written to the first and second memory operand locations 
	if the comparison is successful.

	Dc1, Dc2 fields - Specify the data registers that contain the test
	vaules to be compared to the first and second memory operands,
	respectively. If Dc1 and Dc2 specify the same register and the
	comparison fails, memory operand 1 is stored in the data register.


	<ea> is always destination, addressing modes are the followings:
	--------------------------------- -------------------------------
	|Addressing Mode|Mode| Register | |Addressing Mode|Mode|Register|
	|-------------------------------| |-----------------------------|
	|      Dn       | -  |     -    | |    Abs.W      |111 |  000   |
	|-------------------------------| |-----------------------------|
	|      An       | -  |     -    | |    Abs.L      |111 |  001   |
	|-------------------------------| |-----------------------------|
	|     (An)      |010 |N reg. An| |   (d16,PC)    | -  |   -    |
	|-------------------------------| |-----------------------------|
	|     (An)+     |011 |N reg. An| |   (d8,PC,Xi)  | -  |   -    |
	|-------------------------------| |-----------------------------|
	|    -(An)      |100 |N reg. An| |   (bd,PC,Xi)  | -  |   -    |
	|-------------------------------| |-----------------------------|
	|    (d16,An)   |101 |N reg. An| |([bd,PC,Xi],od)| -  |   -    |
	|-------------------------------| |-----------------------------|
	|   (d8,An,Xi)  |110 |N reg. An| |([bd,PC],Xi,od)| -  |   -    |
	|-------------------------------| |-----------------------------|
	|   (bd,An,Xi)  |110 |N reg. An| |    #data      | -  |   -    |
	|-------------------------------| -------------------------------
	|([bd,An,Xi]od) |110 |N reg. An|
	|-------------------------------|
	|([bd,An],Xi,od)|110 |N reg. An|
	---------------------------------

RESULT
	X - Not affected
	N - Set if the result of the comparison is negative. Cleared otherwise.
	Z - Set if the result of the comparison is zero. Cleared otherwise.
	V - Set if an overflow occours. Cleared otherwise.
	C - Set if a borrow occours. Cleared otherwise.

SEE ALSO
	CAS

HTML Conversion by AG2HTML.pl V2.941126c, perl $RCSfile: cas2.HTML,v $$Revision: 1.1 $$Date: 1999/09/14 21:14:07 $ Patch level: 36 & witbrock@cs.cmu.edu