35.3.1.1. INTEGER ARITHMETICAL ON SPARC





SPARC format 3
+-----------------------+------------------------+
| 31..30	10      | 31..30	10	 |
| 29..25	rd	| 29..25	rd       |
| 24..19	op3	| 24..19	op3      | 
| 18..14	rs1	| 18..14	rs1      |
| 13		0	| 13		1        |
| 12..5		---	| 12..0		simm13   |
| 4..0		rs2	|	                 |
+-----------------------+------------------------+	

	Opcode		Op3		Operation		
	add		00 0000		Add	
	addcc		01 0000		Add and modify cc's
	addc		00 1000		Add with carry	
	addccc		01 1000		Add with carry and modify cc's


add/addcc/addc/addccc	reg(rs1),reg(rs2),reg(rd)
			reg(rs1),simm13,reg(rd)

r[d] <-  r[rs1] + r[rs2]
r[d] <-  r[rs1] + sign_extend(simm13)


Note: addc/addccc read 32-bit carry flag (CCR.icc.c), not 64-bit
carry flag (CCR.xcc.c)

(On SPARC V8 addc/addccc named ADDX and ADDXcc)


	
	Opcode		Op 3		Operation
	sub		00 0100		Subtract
	subcc		01 0100		Subtract and modify cc's
	subc		00 1100		Subtract with carry
	subccc		01 1100		Subtract with carry and modify cc's

(On SPARC V8 subc/subccc named SUBX and SUBXcc)

sub/subcc/subc/subccc	reg(rs1),reg(rs2),reg(rd)
			reg(rs1),simm13,reg(rd)

r[d] <-  r[rs1] - r[rs2]
r[d] <-  r[rs1] - sign_extend(simm13)


	Opcode		Op3		Operation
	umul		00 1010		Unsigned Integer Multiply (32bit)
	smul		00 1011		Signed Integer Multiply (32-bit)
	umulcc		01 1010		Unsigned Integer Multiply and
					modify cc's (32-bit)
	smulcc		01 1011		Signed Integer Multiply and 
					modify cc's (32-bit)
	mulx		00 1001		Multiply (Signed or Unsigned) (64-bit)
	
r[d] <-  r[rs1] * r[rs2]
r[d] <-  r[rs1] * sign_extend(simm13)


	Opcode		Op 3		Operation
	udiv		00 1110		Unsigned Integer Divide
	sdiv		00 1111		Signed Integer Divide
	udivcc		01 1110		Unsigned Integer Divide and modify cc's
	sdivcc		01 1111		Signed Integer Divide and modify cc's
	sdivx		10 1101		Signed Divide (64-bit)
	udivx		00 1101		Unsigned Divide(64-bit)


r[d] <-  r[rs1] / r[rs2]
r[d] <-  r[rs1] / sign_extend(simm13)



OTHER OPERATION IMPLEMENTATION

- Increment by 1
	add	rx,1,rx

- Decrement by 1
	sub	rx,1,rx

- Negate
	sub	r0,rx,rx



// ----------------------------------------------------------------------


Index Prev Next