擬似命令
| fhalf(101100) rd(26-21) rs(20-16) |
rd=rs/2 |
3/06追加命令
| [111110](31-26) |
andi rd rt Imm |
rd = rt & Imm |
| [011001](31-26) |
in rd |
外部からの入力 |
| [011010](31-26) |
outb rs |
出力(Byte) 下位1Byteをcharで出力 |
| [011100](31-26) |
outw rs |
出力(4Byte)下位4Byteをintで出力 |
| [111101](31-26) |
floor rd rs |
rd = rs切捨て |
| move rd rs |
add rd rs r0 |
| neg rd rs |
sub rd r0 rs |
以下3/03廃止
| li rd Imm |
llo rd Lo(Imm) |
|
lhi rd Hi(Imm) |
| ll label |
llo rd Lo(Address[label]) |
|
lhi rd Hi(Address[label]) |
命令
| fabs(111010) $rd,$rs |
rd = abs(rs) |
| fiszero(111001) $rd(25-21), $rs(20-16) |
if rs = 0 then $rd = 1(0x1) else $rd = 0(0x0) |
| fispos(111000) $rd(25-21), $rs(20-16) |
if rs >= 0 then $rd = 1(0x1) else $rd = 0(0x0) |
| fisneg(111011) $rd(25-21), $rs(20-16) |
if rs < 0 then $rd = 1(0x1) else $rd = 0(0x0) |
| fless(111100) $rd(25-21), $rs(20-16), $rt(15-11) |
if rs < rt then $rd = 1(0x1) else $rd = 0(0x0) |
| setl $rd(31-26), label(25-0) (000011) |
$rd = label |
3/03追加(lhi,llo)
| [011110](31-26) |
lhi rd Imm |
Hi(rd) = Imm |
| [011111](31-26) |
llo rd Imm |
Lo(rd) = Imm |
3/03追加
| [101111] |
fneg rd rs |
rd = -.rs |
| 000001(31-26) rs(25-21) rt(20-16) rd(15-11) |
add rd rs rt |
rd = rs + rt |
| 000010(31-26) rs(25-21) rt(20-16) Imm(15-0) |
addi rt rs Imm |
rt = rs + Imm |
| [001110] |
sub rd rs rt |
rd = rs - rt |
| [001111] |
subi rd rs Imm |
rd = rs - Imm |
|
mov |
rd = rs(addi) |
| [010000](31-26) rs(25-21) rd(20-16) Imm(15-0) |
slli rd rs Imm |
rd = rs << Imm |
| [010001](31-26) rs(25-21) rd(20-21) Imm(15-0) |
lw rs Imm(rd) |
rs = mem[rd + Imm](修正しました) |
| [010010](31-26) rs(25-21) rd(20-16) Imm(15-0) |
sw rs Imm(rd) |
mem[rd + Imm] = rs |
| [100001](31-26) rs(25-21) rt(20-16) rd(15-11) |
fadd rd rs rt |
rd = rs + rt |
| [100010] [100011] [100100] |
fsub fmul fdiv |
|
|
fmov rd rs |
rd = rs(結局movと同じ?) |
| 001101(31-26) |
jr |
pc = ra |
|001100(31-26) target(19-0)|jall target|ra = [pc+1]; pc = target|(jalとjallを入れ替えた!?)
| [010011](31-26) (25-21) |
jal rs |
pc = rs |
| 000111(31-26) rs(25-21) rt(20-16) |
cmp rs rt |
cr = cond[rs - rt] |
| [010100](31-26) rs(25-21) Imm(15-0) |
cmpi rs Imm |
cr = cond[rs - Imm] |
| 000100(31-26) target(19-0) |
jl target |
pc = target |
| [010101](31-26) rs(25-21) |
j rs |
pc = rs |
| 001000(31-26) target(19-0) |
be target |
(if [cr = Equal]) pc = target |
| 001011(31-26) target(19-0) |
bne target |
... |
| 001001(31-26) target(19-0) |
bg target |
... |
| 001010(31-26) target(19-0) |
bl target |
... |
| [010110](31-26) target(19-0) |
ble target |
... |
| [010111](31-26) target(19-0) |
bge target |
... |
| [100101](31-26) rs(25-21) rt(20-16) |
fcmp rs rt |
cr = cond[rs - rt] |
| [100110](31-26) target(19-0) |
fble target |
|
| [100111] [101000] [101001] |
fbg fbe fbne |
|
|
nop |
イラネ |
| 000101(31-26) rd(25-21) |
led rd |
ピカーソ |
| 000110(31-26) |
STOP |
|
2/27追加
| jmp(31-26) rd(25-21) |
jmp rd |
pc = [rd] レジスタを引数に取るジャンプ |
ライブラリ用命令
| [011000](31-26) rd(25-21) |
dec rd |
rd-- |
| [101010](31-26) rd(25-21) rs(20-16) |
ftoi rd rs |
|
| [101011](31-26) rd(25-21) rs(20-16) |
itof rd rs |
|
sparcだとプリミティブな命令
putchar
printf
fprintf
fputc
scanf
cos
sin
atan
floor
最終更新:2007年03月14日 17:37