SPARC Assembly Language Reference Manual
  Искать только в названиях книг
Загрузить это руководство в формате PDF

Instruction-Set Mapping

5

The tables in this chapter describe the relationship between hardware instructions of the SPARC architecture, as defined in the SPARC Processor Architecture Manual, and the assembly language instruction set recognized by the SunOS 5.x SPARC assembler.

Table Notation

Table 5-1 describes the notation used in the tables in this chapter to describe the instruction set of the assembler. The following notations are commonly suffixed to assembler mnemonics (uppercase letters refer to SPARC architecture instruction names):
Table 5-1
NotationsDescribesComment
addressregrs1 + regrs2 regrs1 + const13

reg - const13 rs1

const13 + regrs1 const13

Address formed from register contents, immediate constant, or both.
asiAlternate address space identifier; an unsigned 8-bit value. It can be the result of the evaluation of a symbol expression.
const13A signed constant which fits in 13 bits. It can be the result of the evaluation of a symbol expression.
const22A constant which fits in 22 bits. It can be the result
of the evaluation of a symbol expression.
creg%c0 ... %c31Coprocessor registers.
freg%f0 ... %f31Floating-point registers.
imm7A signed or unsigned constant that can be represented in 7 bits (it is in the range -64 ... 127). It can be the result of the evaluation of a symbol expression.
reg%r0 ... %r31General purpose registers.
%g0 ... %g7Same as %r0 ... %r7 (Globals)
%o0 ... %o7Same as %r8 ... %r15 (Outs)
%l0 ... %l7Same as %r16 ... %r23 (Locals)
%i0 ... %i7Same as %r24 ... %r31 (Ins)
regrdDestination register.
reg , reg rs1..rs2Source register 1, source register 2.
Table 5-1
NotationsDescribesComment
reg_or_immregrs2
const13
Value from either a single register, or an immediate
constant.
regaddrregrs1
reg + reg rs1...rs2
Address formed with register contents only.
Software_trap_numberregrs1 + regrs2 regrs1 + imm7

reg - imm7 rs1

uimm7

imm7 + regrs1

A value formed from register contents, immediate constant, or both. The resulting value must be in the range 0.....127, inclusive.
uimm7An unsigned constant that can be represented in 7 bits (it is in the range 0 ... 127). It can be the result of the evaluation of a symbol expression.

Integer Instructions

The notations described in Table 5-2 are commonly suffixed to assembler mnemonics (uppercase letters for architecture instruction names).
Table 5-2
NotationDescription
aInstructions that deal with alternate space
bByte instructions
cReference to coprocessor registers
dDoubleword instructions
fReference to floating-point registers
hHalfword instructions
qQuadword instructions
srStatus register
Table 5-3 outlines the correspondence between SPARC hardware integer instructions and SPARC assembly language instructions.
The syntax of individual instructions is designed so that a destination operand (if any), which may be either a register or a reference to a memory location, is always the last operand in a statement.

Note - In Table 5-3,
  • Braces ({ }) indicate optional arguments. Braces are not literally coded.
  • Brackets ([ ]) indicate indirection: the contents of the addressed memory location are being read from or written to.

    Brackets are coded literally in the assembly language. Note that the usage of brackets described in Chapter 2, "Assembler Syntax" differ from the usage of these brackets.

  • All Bicc and Bfcc instructions described may indicate that the annul bit is to be set by appending ",a" to the opcode mnemonic; for example,
     "bgeu,a label"



Table 5-3SPARC to Assembly Language Mapping


SPARCMnemonicArgument ListNameComments
ADDaddreg , reg_or_imm, regAdd
ADDccaddccrs1..........rd reg , reg_or_imm, regAdd and modify icc
ADDXaddxrs1..........rd reg , reg_or_imm, regAdd with carry

ADDXcc

addxcc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd
ANDandreg , reg_or_imm, regAnd
ANDccandccrs1..........rd reg , reg_or_imm, reg
ANDNandnrs1..........rd reg , reg_or_imm, reg

ANDNcc

andncc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
Biccbn{,a}labelBranch on integerbranch never
bne{,a}labelcondition codessynonym: bnz
be{,a}labelsynonym: bz
bg{,a}label
ble{,a}label
bge{,a}label
bl{,a}label
bgu{,a}label
bleu{,a}label
bcc{,a}labelsynonym: bgeu synonym: blu
bcs{,a}label
bpos{,a}label
bneg{,a}label
bvc{,a}label
bvs{,a}labelsynonym: b
ba{,a}label
CALLcalllabel
label{,n}
Call subprogramn = # of out
registers used
as arguments
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
CBccccbn{,a}
cb3{,a}
label
label
Branch on
coprocessor
branch never
cb2{,a}labelcondition codes
cb23{,a}label
cb1{,a}label
cb13{,eo
}
cb12{,a}
label
label
label
cb123{,a
}
cb0{,a}
cb03{,a}
cb02{,a}
label
label
label
label
label
cb023{,a
}
cb01{,a}
cb013{,a
}
cb012{,a
}
cba{,a}
label
label
label
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
FBfccfbn{,a}labelBranch onbranch never
fbu{,a}labelfloating-point
fbg{,a}labelcondition codes
fbug{,a}label
fbl{,a}label
fbul{,a}label
fblg{,a}label
fbne{,a}labelsynonym: fbnz
fbe{,a}labelsynonym: fbz
fbue{,a}label
fbge{,a}label
fbuge{,a
}
fble{,a}
label
label
label
fbule{,a
}
fbo{,a}
fba{,a}
label
label
FLUSHflushaddressInstruction cache flush
JMPLjmpladdress, regrdJump and link
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
LDSBldsb[address], regLoad signed byte

LDSH

ldsh
rd
[address], reg

Load signed halfword

LDSTUB

ldstub
rd
[address], reg

Load-store unsigned
rdbyte
Load unsigned byte
LDUBldub[address], reg

LDUH

lduh
rd
[address], regrd
Load unsigned
halfword
LDld[address], regrdLoad word
LDDldd[address], regrdLoad double wordreg must be rd
LDFld[address], fregeven

LDFSR

ld
rd
[address], %fsr
Load floating-point
register
LDDFldd[address], fregrd
Load double
floating-point
freg must be rd
even
LDCld[address], cregLoad coprocessor

LDCSR

ld
rd
[address], %csr
LDDCldd[address], cregrdLoad double coprocessor
LDSBAldsba[regaddr]asi, regLoad signed byte
LDSHAldshard

[regaddr]asi, reg

from alternate space
LDUBAldubard [regaddr]asi, reg
LDUHAlduhard [regaddr]asi, reg
LDAldard [regaddr]asi, reg
LDDAlddard [regaddr]asi, regreg must be
rdrd
even
LDSTUBAldstuba[regaddr]asi, regrd
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
MULSccmulsccreg , reg_or_imm, reg rs1..........rdMultiply step (and modify icc)
NOPnopNo operation
ORorreg , reg_or_imm, regInclusive or
ORccorccrs1..........rd reg , reg_or_imm, reg
ORNornrs1..........rd reg , reg_or_imm, reg

ORNcc

orncc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd
RDASRrd%asrn , reg1.n.31

RDY

rd
rs1..rd
%y, reg

See synthetic
rdinstructions
RDPSRrd%psr, regrdSee synthetic instructions
RDWIMrd%wim, regrdSee synthetic instructions
RDTBRrd%tbr, regrdSee synthetic instructions
RESTORErestorereg , reg_or_imm, reg rs1...........rdSee synthetic instructions
RETTrettaddressReturn from trap
SAVEsavereg , reg_or_imm, reg rs1..........rdSee synthetic instructions
SDIVsdivreg , reg_or_imm, regSigned divide

SDIVcc

sdivcc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd

Signed divide and
modify icc
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
SMULsmulreg , reg_or_imm, regSigned multiply

SMULcc

smulcc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd

Signed multiply and
modify icc
SETHIsethiconst22, regSet high 22 bits of


sethi
rd

%hi(value), reg
register

See synthetic
rdinstructions
SLLsllreg , reg_or_imm, regShift left logical
SRLsrlrs1..........rd reg , reg_or_imm, regShift right logical

SRA

sra
rs1..........rd
reg , reg_or_imm, reg rs1..........rd

Shift right arithmetic
STBstbreg , [address]Store byteSynonyms:


STH


sth
rd

reg , [address] rd


Store half-word
stub, stsb
Synonyms:
stuh, stsh
STstreg , [address] rd
STDstdreg , [address]reg Must be even
rdrd
STFstfreg , [address] rd
STDFstdfreg , [address]freg Must be even
rdrd
STFSRst%fsr, [address]Store floating-point status register
STDFQstd%fq, [address]Store double floating-point
STCstcreg , [address] rdStore coprocessor
STDCstdcreg , [address]creg Must be even

STCSR

st
rd
%csr, [address]
rd
STDCQstd%cq, [address]Store double coprocessor
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
STBAstbareg [regaddr]asiStore byte intoSynonyms:



STHA



stha
rd


reg [regaddr]asi rd
alternate spacestuba,
stsba
Synonyms:
stuha,
stsha
STAstareg , [regaddr]asi rd
STDAstdareg , [regaddr]asi rdreg Must be even rd
SUBsubreg , reg_or_imm, regSubtract
SUBccsubccrs1..........rd reg , reg_or_imm, regSubtract and modify
rs1..........rdicc
SUBXsubxreg , reg_or_imm, reg
rs1..........rdSubtract with carry
SUBXccsubxccreg , reg_or_imm, reg rs1..........rd
SWAPswap[address], regSwap memory word
SWAPAswapard [regaddr]asi, regrdwith register
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
Ticctnsoftware_trap_numberTrap on integerTrap never
tnesoftware_trap_numbercondition code Note: Trap numbersSynonym:
16-31 are reserved for the user. Currently-defined trap numbers are those defined in /usr/include/sys/trap.htnz

Synonym: tz

tesoftware_trap_number
tgsoftware_trap_number
tlesoftware_trap_number
tgesoftware_trap_number
tlsoftware_trap_number
tgusoftware_trap_number
tleusoftware_trap_number
tlusoftware_trap_numberSynonym: tcs
tgeusoftware_trap_numberSynonym: tcc
tpossoftware_trap_number
tnegsoftware_trap_number
tvcsoftware_trap_number
tvssoftware_trap_number
tasoftware_trap_numberSynonym: t
Table 5-3 (Continued)
SPARCMnemonicArgument ListNameComments
TADDcctaddccreg , reg_or_imm, regTagged add and
TSUBcctsubccrs1..........rd

reg , reg_or_imm, reg

modify icc

TADDccT

taddcctv
rs1..........rd
reg , reg_or_imm, reg rs1..........rd

Tagged add and
Vmodify icc and trap on overflow
TSUBccT Vtsubcctvreg , reg_or_imm, reg rs1..........rd
UDIVudivreg , reg_or_imm, regUnsigned divide

UDIVcc

udivcc
rs1..........rd
reg , reg_or_imm, reg rs1..........rd

Unsigned divide and
modify icc
UMULumulreg , reg_or_imm, reg rs1............rdUnsigned multiply
UMULccumulccreg , reg_or_imm, reg rs1............rdUnsigned multiply and modify icc
UNIMPunimpconst22Illegal instruction
WRASRwrreg_or_imm, %asrn1.n.31
WRYwrrs1 reg , reg_or_imm, %ySee synthetic
rs1instructions
WRPSRwrreg , reg_or_imm, %psr rs1See synthetic instructions
WRWIMwrreg , reg_or_imm, %wim rs1See synthetic instructions
WRTBRwrreg , reg_or_imm, %tbr rs1See synthetic instructions
XNORxnorreg , reg_or_imm, regExclusive nor

XNORcc

xnorcc
rs1............rd
reg , reg_or_imm, reg rs1............rd
XORxorreg , reg_or_imm, regExclusive or

XORcc

xorcc
rs1............rd
reg , reg_or_imm, reg rs1............rd

Floating-Point Instruction

Table 5-4 shows floating-point instructions. In cases where more than numeric type is involved, each instruction in a group is described; otherwise, only the first member of a group is described.
Table 5-4
SPARC* MnemonicArgument ListDescription
FiTOsfitosfreg , fregConvert integer to single
FiTOdrs2...rd
fitodfreg , fregConvert integer to double
FiTOqrs2...rd
fitoqfreg , freg rs2...rdConvert integer to quad
FsTOifstoifreg , fregConvert single to integer
FdTOirs2...rd
fdtoifreg , fregConvert double to integer
FqTOirs2...rd
fqtoifreg , freg rs2...rdConvert quad to integer
FsTOdfstodfreg , fregConvert single to double
FsTOqrs2...rd
fstoqfreg , freg rs2...rdConvert single to quad
FdTOsfdtosfreg , fregConvert double to single
FdTOqrs2...rd
fdtoqfreg , freg rs2...rdConvert double to quad
FqTOdfqtodfreg , fregConvert quad to double
FqTOsrs2...rd
fqtosfreg , freg rs2...rdConvert quad to single
FMOVsfmovsfreg , fregMove
FNEGsrs2...rd
fnegsfreg , fregNegate
FABSsrs2...rd
fabssfreg , freg rs2...rdAbsolute value
* Types of Operands are denoted by the following lower-case letters: i integer
ssingle
ddouble
qquad
Table 5-4 (Continued)
SPARC* MnemonicArgument ListDescription
FSQRTsfsqrtsfreg , fregSquare root
FSQRTdrs2...rd
fsqrtdfreg , freg
FSQRTqrs2...rd
fsqrtqfreg , freg rs2...rd
FADDsfaddsfreg , freg , fregAdd
FADDdrs1...rs2...rd
fadddfreg , freg , freg
FADDqrs1...rs2...rd
faddqfreg , freg , freg rs1...rs2...rd
FSUBsfsubsfreg , freg , fregSubtract
FSUBdrs1...rs2...rd
fsubdfreg , freg , freg
FSUBqrs1...rs2...rd
fsubxfreg , freg , freg rs1...rs2...rd
FMULsfmulsfreg , freg , fregMultiply
FMULdrs1...rs2...rd
fmuldfreg , freg , freg
FMULqrs1...rs2...rd
fmulqfreg , freg , freg rs1...rs2...rd
FdMULqfmulqfreg , freg , fregMultiply double to quad
FsMULdrs1...rs2...rd
fsmuldfreg , freg , freg rs1...rs2...rdMultiply single to double
FDIVsfdivsfreg , freg , fregDivide
FDIVdrs1...rs2...rd
fdivdfreg , freg , freg
FDIVqrs1...rs2...rd
fdivqfreg , freg , freg rs1...rs2...rd
* Types of Operands are denoted by the following lower-case letters: i integer
ssingle
ddouble
qquad
Table 5-4 (Continued)
SPARC* MnemonicArgument ListDescription
FCMPsfcmpsfreg , fregCompare
FCMPdrs1...rs2
fcmpdfreg , freg
FCMPqrs1...rs2
fcmpqfreg , freg
FCMPEsrs1...rs2
fcmpesfreg , fregCompare, generate exception
FCMPEdrs1...rs2if not ordered
fcmpedfreg , freg
FCMPEqrs1...rs2
fcmpeqfreg , freg rs1...rs2
* Types of Operands are denoted by the following lower-case letters: i integer
ssingle
ddouble
qquad

Coprocessor Instructions

All coprocessor-operate (cpopn) instructions take all operands from and return all results to coprocessor registers. The data types supported by the coprocessor are coprocessor-dependent. Operand alignment is also coprocessor-dependent. Coprocessor-operate instructions are described in Table 5-5.
If the EC (PSR_enable_coprocessor) field of the processor state register (PSR) is 0, or if a coprocessor is not present, a cpopn instruction causes a cp_disabled trap.
The conditions that cause a cp_exception trap are coprocessor-dependent.
Table 5-5
SPARCMnemonicArgument ListNameComments
CPop1cpop1opc, reg , rs1
reg , reg rs2..rd
Coprocessor operation
CPop2cpop2opc, reg , rs1
reg , reg rs2..rd
Coprocessor operationMay modify ccc

Synthetic Instructions

Table 5-6 describes the mapping of synthetic instructions to hardware instructions.
Table 5-6
Synthetic InstructionHardware Equivalent(s)Comment
btstreg_or_imm, regandccreg , reg_or_imm, %g0Bit test
bsetrs1 reg_or_imm, regorrs1

reg , reg_or_imm, reg rd.........rd

Bit set
bclrrd reg_or_imm, regandnreg , reg_or_imm, reg rd.........rdBit clear

rd
reg , reg_or_imm, reg rd.........rd
btogreg_or_imm, regrdxor
Bit toggle
callreg_or_immjmplreg_or_imm, %o7
clrregor%g0, %g0, regClear (zero)

clrb
rd
[address]

stb
rd
%g0, [address]
register
Clear byte
clrh[address]sth%g0, [address]Clear halfword
clr[address]st%g0, [address]Clear word
cmpreg, reg_or_immsubccreg , reg_or_imm, %g0 rs1Compare
Table 5-6 (Continued)
Synthetic InstructionHardware Equivalent(s)Comment
decregsubreg , 1, regDecrement by 1
decrd

const13, reg

subrd....rd reg , const13, regDecrement by

rd
rd.........rdconst13
decccregsubccreg , 1, reg

deccc
rd
const13, regrd

subcc
rd....rd
reg , const13, reg rd........rd
Decrement by 1
and set icc
Decrement by
const13 and
set icc
decregsubreg , 1, regDecrement by 1
decrd

const13, reg

subrd....rd reg , const13, regDecrement by

rd
rd.........rdconst13
decccregsubccreg , 1, reg

deccc
rd
const13, regrd

subcc
rd....rd
reg , const13, reg rd........rd
Decrement by 1
and set icc
Decrement by
const13 and
set icc
incregaddreg , 1, regIncrement by 1
incrd

const13, reg

addrd....rd reg , const13, regIncrement by

rd
rd........rdconst13
incccregaddccreg , 1, reg

inccc
rd
const13, regrd

addcc
rd....rd
reg , const13, reg rd........rd
Increment by 1
and set icc
Increment by
const13 and
set icc
jmpaddressjmpladdress, %g0
Table 5-6 (Continued)
Synthetic InstructionHardware Equivalent(s)Comment
movreg_or_imm,regor%g0, reg_or_imm, reg
movrd %y, regrdrd %y, reg

mov
rs1
%psr, reg

rd
rs1
%psr, reg


mov
rs1
%wim, reg

rd
rs1
%wim, reg


mov
rs1
%tbr, reg

rd
rs1
%tbr, reg

movrs1 reg_or_imm, %ywrrs1 %g0,reg_or_imm,%y
movreg_or_imm, %psrwr%g0,reg_or_imm,%psr
movreg_or_imm, %wimwr%g0,reg_or_imm,%wim
movreg_or_imm, %tbrwr%g0,reg_or_imm,%tbr
notreg , regxnorreg , %g0, regone's complement

not
rs1..rd
reg

xnor
rs1......rd
reg , %g0, reg

one's complement
negrd

reg , reg

subrd......rd %g0, reg , regtwo's complement

neg
rs1..rd
reg

sub
rs2..rd
%g0, reg , reg

two's complement

rd
rd..rd
restore
restore%g0, %g0, %g0trivial restore
ret
jmpl%i7+8, %g0return from
retl
jmpl%o7+8, %g0subroutine return from leaf subroutine
save
save%g0, %g0, %g0trivial save

Warning - trivial save should only be used in supervisor code!

Table 5-6 (Continued)
Synthetic InstructionHardware Equivalent(s)Comment
setvalue,regor%g0, value, regif -4096 . value . 4095

rd
rdif ((value & 0x3ff) == 0)
setvalue,regsethi%hi(value), reg

rd
rdotherwise
setvalue,regrdsethi%hi(value), reg ; rd


orreg , %lo(value), reg rd..........rdWarning - Do not use the set synthetic instruction in an instruction delay slot.
skipz
bnz,a .+8
if z is set, ignores
skipnz
bz,a .+8
next instruction if z is not set, ignores next instruction
tstregorccreg , %g0, %g0 rs1test