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