📄 c-i960.texi
字号:
@c Copyright 1991, 1992, 1993, 1994, 1995, 1996@c Free Software Foundation, Inc.@c This is part of the GAS manual.@c For copying conditions, see the file as.texinfo.@ifset GENERIC@page@node i960-Dependent@chapter Intel 80960 Dependent Features@end ifset@ifclear GENERIC@node Machine Dependencies@chapter Intel 80960 Dependent Features@end ifclear@cindex i960 support@menu* Options-i960:: i960 Command-line Options* Floating Point-i960:: Floating Point* Directives-i960:: i960 Machine Directives* Opcodes for i960:: i960 Opcodes@end menu@c FIXME! Add Syntax sec with discussion of bitfields here, at least so@c long as they're not turned on for other machines than 960.@node Options-i960@section i960 Command-line Options@cindex i960 options@cindex options, i960@table @code@cindex i960 architecture options@cindex architecture options, i960@cindex @code{-A} options, i960@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMCSelect the 80960 architecture. Instructions or features not supportedby the selected architecture cause fatal errors.@samp{-ACA} is equivalent to @samp{-ACA_A}; @samp{-AKC} is equivalent to@samp{-AMC}. Synonyms are provided for compatibility with other tools.If you do not specify any of these options, @code{@value{AS}} generates codefor any instruction or feature that is supported by @emph{some} version of the960 (even if this means mixing architectures!). In principle,@code{@value{AS}} attempts to deduce the minimal sufficient processor type ifnone is specified; depending on the object code format, the processor type maybe recorded in the object file. If it is critical that the @code{@value{AS}}output match a specific architecture, specify that architecture explicitly.@cindex @code{-b} option, i960@cindex branch recording, i960@cindex i960 branch recording@item -bAdd code to collect information about conditional branches taken, forlater optimization using branch prediction bits. (The conditional branchinstructions have branch prediction bits in the CA, CB, and CCarchitectures.) If @var{BR} represents a conditional branch instruction,the following represents the code generated by the assembler when@samp{-b} is specified:@smallexample call @var{increment routine} .word 0 # pre-counterLabel: @var{BR} call @var{increment routine} .word 0 # post-counter@end smallexampleThe counter following a branch records the number of times that branchwas @emph{not} taken; the differenc between the two counters is thenumber of times the branch @emph{was} taken.@cindex @code{gbr960}, i960 postprocessor@cindex branch statistics table, i960A table of every such @code{Label} is also generated, so that theexternal postprocessor @code{gbr960} (supplied by Intel) can locate allthe counters. This table is always labelled @samp{__BRANCH_TABLE__};this is a local symbol to permit collecting statistics for many separateobject files. The table is word aligned, and begins with a two-wordheader. The first word, initialized to 0, is used in maintaining linkedlists of branch tables. The second word is a count of the number ofentries in the table, which follow immediately: each is a word, pointingto one of the labels illustrated above.@c TEXI2ROFF-KILL@ifinfo@c END TEXI2ROFF-KILL@example +------------+------------+------------+ ... +------------+ | | | | | | | *NEXT | COUNT: N | *BRLAB 1 | | *BRLAB N | | | | | | | +------------+------------+------------+ ... +------------+ __BRANCH_TABLE__ layout@end example@c TEXI2ROFF-KILL@end ifinfo@need 2000@tex\vskip 1pc\line{\leftskip=0pt\hskip\tableindent\boxit{2cm}{\tt *NEXT}\boxit{2cm}{\tt COUNT: \it N}\boxit{2cm}{\tt*BRLAB 1}\ibox{1cm}{\quad\dots}\boxit{2cm}{\tt *BRLAB \it N}\hfil}\centerline{\it {\tt \_\_BRANCH\_TABLE\_\_} layout}@end tex@c END TEXI2ROFF-KILLThe first word of the header is used to locate multiple branch tables,since each object file may contain one. Normally the links aremaintained with a call to an initialization routine, placed at thebeginning of each function in the file. The @sc{gnu} C compilergenerates these calls automatically when you give it a @samp{-b} option.For further details, see the documentation of @samp{gbr960}.@cindex @code{-no-relax} option, i960@item -no-relaxNormally, Compare-and-Branch instructions with targets that requiredisplacements greater than 13 bits (or that have external targets) arereplaced with the corresponding compare (or @samp{chkbit}) and branchinstructions. You can use the @samp{-no-relax} option to specify that@code{@value{AS}} should generate errors instead, if the target displacementis larger than 13 bits.This option does not affect the Compare-and-Jump instructions; the codeemitted for them is @emph{always} adjusted when necessary (depending ondisplacement size), regardless of whether you use @samp{-no-relax}.@end table@node Floating Point-i960@section Floating Point@cindex floating point, i960 (@sc{ieee})@cindex i960 floating point (@sc{ieee})@code{@value{AS}} generates @sc{ieee} floating-point numbers for the directives@samp{.float}, @samp{.double}, @samp{.extended}, and @samp{.single}.@node Directives-i960@section i960 Machine Directives@cindex machine directives, i960@cindex i960 machine directives@table @code@cindex @code{bss} directive, i960@item .bss @var{symbol}, @var{length}, @var{align}Reserve @var{length} bytes in the bss section for a local @var{symbol},aligned to the power of two specified by @var{align}. @var{length} and@var{align} must be positive absolute expressions. This directivediffers from @samp{.lcomm} only in that it permits you to specifyan alignment. @xref{Lcomm,,@code{.lcomm}}.@end table@table @code@cindex @code{extended} directive, i960@item .extended @var{flonums}@code{.extended} expects zero or more flonums, separated by commas; foreach flonum, @samp{.extended} emits an @sc{ieee} extended-format (80-bit)floating-point number.@cindex @code{leafproc} directive, i960@item .leafproc @var{call-lab}, @var{bal-lab}You can use the @samp{.leafproc} directive in conjunction with theoptimized @code{callj} instruction to enable faster calls of leafprocedures. If a procedure is known to call no other procedures, youmay define an entry point that skips procedure prolog code (and that doesnot depend on system-supplied saved context), and declare it as the@var{bal-lab} using @samp{.leafproc}. If the procedure also has anentry point that goes through the normal prolog, you can specify thatentry point as @var{call-lab}.A @samp{.leafproc} declaration is meant for use in conjunction with theoptimized call instruction @samp{callj}; the directive records the dataneeded later to choose between converting the @samp{callj} into a@code{bal} or a @code{call}.@var{call-lab} is optional; if only one argument is present, or if thetwo arguments are identical, the single argument is assumed to be the@code{bal} entry point.@cindex @code{sysproc} directive, i960@item .sysproc @var{name}, @var{index}The @samp{.sysproc} directive defines a name for a system procedure.After you define it using @samp{.sysproc}, you can use @var{name} torefer to the system procedure identified by @var{index} when callingprocedures with the optimized call instruction @samp{callj}.Both arguments are required; @var{index} must be between 0 and 31(inclusive).@end table@node Opcodes for i960@section i960 Opcodes@cindex opcodes, i960@cindex i960 opcodesAll Intel 960 machine instructions are supported;@pxref{Options-i960,,i960 Command-line Options} for a discussion ofselecting the instruction subset for a particular 960architecture.@refillSome opcodes are processed beyond simply emitting a single correspondinginstruction: @samp{callj}, and Compare-and-Branch or Compare-and-Jumpinstructions with target displacements larger than 13 bits.@menu* callj-i960:: @code{callj}* Compare-and-branch-i960:: Compare-and-Branch@end menu@node callj-i960@subsection @code{callj}@cindex @code{callj}, i960 pseudo-opcode@cindex i960 @code{callj} pseudo-opcodeYou can write @code{callj} to have the assembler or the linker determinethe most appropriate form of subroutine call: @samp{call},@samp{bal}, or @samp{calls}. If the assembly source containsenough information---a @samp{.leafproc} or @samp{.sysproc} directivedefining the operand---then @code{@value{AS}} translates the@code{callj}; if not, it simply emits the @code{callj}, leaving itfor the linker to resolve.@node Compare-and-branch-i960@subsection Compare-and-Branch@cindex i960 compare/branch instructions@cindex compare/branch instructions, i960The 960 architectures provide combined Compare-and-Branch instructionsthat permit you to store the branch target in the lower 13 bits of theinstruction word itself. However, if you specify a branch target farenough away that its address won't fit in 13 bits, the assembler caneither issue an error, or convert your Compare-and-Branch instructioninto separate instructions to do the compare and the branch.@cindex compare and jump expansions, i960@cindex i960 compare and jump expansionsWhether @code{@value{AS}} gives an error or expands the instruction dependson two choices you can make: whether you use the @samp{-no-relax} option,and whether you use a ``Compare and Branch'' instruction or a ``Compareand Jump'' instruction. The ``Jump'' instructions are @emph{always}expanded if necessary; the ``Branch'' instructions are expanded whennecessary @emph{unless} you specify @code{-no-relax}---in which case@code{@value{AS}} gives an error instead.These are the Compare-and-Branch instructions, their ``Jump'' variants,and the instruction pairs they may expand into:@c TEXI2ROFF-KILL@ifinfo@c END TEXI2ROFF-KILL@example Compare and Branch Jump Expanded to ------ ------ ------------ bbc chkbit; bno bbs chkbit; bo cmpibe cmpije cmpi; be cmpibg cmpijg cmpi; bg cmpibge cmpijge cmpi; bge cmpibl cmpijl cmpi; bl cmpible cmpijle cmpi; ble cmpibno cmpijno cmpi; bno cmpibne cmpijne cmpi; bne cmpibo cmpijo cmpi; bo cmpobe cmpoje cmpo; be cmpobg cmpojg cmpo; bg cmpobge cmpojge cmpo; bge cmpobl cmpojl cmpo; bl cmpoble cmpojle cmpo; ble cmpobne cmpojne cmpo; bne@end example@c TEXI2ROFF-KILL@end ifinfo@tex\hskip\tableindent\halign{\hfil {\tt #}\quad&\hfil {\tt #}\qquad&{\tt #}\hfil\cr\omit{\hfil\it Compare and\hfil}\span\omit&\cr{\it Branch}&{\it Jump}&{\it Expanded to}\cr bbc& & chkbit; bno\cr bbs& & chkbit; bo\cr cmpibe& cmpije& cmpi; be\cr cmpibg& cmpijg& cmpi; bg\cr cmpibge& cmpijge& cmpi; bge\cr cmpibl& cmpijl& cmpi; bl\cr cmpible& cmpijle& cmpi; ble\cr cmpibno& cmpijno& cmpi; bno\cr cmpibne& cmpijne& cmpi; bne\cr cmpibo& cmpijo& cmpi; bo\cr cmpobe& cmpoje& cmpo; be\cr cmpobg& cmpojg& cmpo; bg\cr cmpobge& cmpojge& cmpo; bge\cr cmpobl& cmpojl& cmpo; bl\cr cmpoble& cmpojle& cmpo; ble\cr cmpobne& cmpojne& cmpo; bne\cr}@end tex@c END TEXI2ROFF-KILL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -