From f04d18b76aed94c5df33c3d504299f84b5e7145d Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Fri, 25 Apr 2008 19:58:03 +0000 Subject: gas/ * config/tc-sparc.c: Accept 'softint_clear' and 'softint_set' %asr aliases. * doc/c-sparc.texi: Consistently refer to architecture 'versions', rather than occaisionally 'levels'. Consistently refer to Sun's UNIX variant as SunOS, every version of Solaris is also SunOS. Document new 'softint_clear' and 'softint_set' aliases. Clarify which architecture versions support '%dcr', '%cq', and '%gl'. Add section on 32-bit/64-bit opcode translations. opcodes/ * sparc-dis.c: Emit %stick instead of %sys_tick, and %stick_cmpr instead of %sys_tick_cmpr, as suggested in architecture manuals. --- gas/doc/c-sparc.texi | 94 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 12 deletions(-) (limited to 'gas/doc/c-sparc.texi') diff --git a/gas/doc/c-sparc.texi b/gas/doc/c-sparc.texi index 3e172fc..ba407d0 100644 --- a/gas/doc/c-sparc.texi +++ b/gas/doc/c-sparc.texi @@ -28,9 +28,9 @@ @cindex SPARC options @cindex architectures, SPARC @cindex SPARC architectures -The SPARC chip family includes several successive levels, using the same +The SPARC chip family includes several successive versions, using the same core instruction set, but including a few additional instructions at -each level. There are exceptions to this however. For details on what +each version. There are exceptions to this however. For details on what instructions each variant supports, please see the chip's architecture reference manual. @@ -40,7 +40,7 @@ successively higher architectures as it encounters instructions that only exist in the higher levels. If not configured for SPARC v9 (@code{sparc64-*-*}) GAS will not bump -passed sparclite by default, an option must be passed to enable the +past sparclite by default, an option must be passed to enable the v9 instructions. GAS treats sparclite as being compatible with v8, unless an architecture @@ -74,7 +74,7 @@ support. UltraSPARC extensions. @item -xarch=v8plus | -xarch=v8plusa -For compatibility with the Solaris v9 assembler. These options are +For compatibility with the SunOS v9 assembler. These options are equivalent to -Av8plus and -Av8plusa, respectively. @item -bump @@ -96,12 +96,12 @@ and require that the necessary BFD support has been included. @cindex SPARC data alignment SPARC GAS normally permits data to be misaligned. For example, it permits the @code{.long} pseudo-op to be used on a byte boundary. -However, the native SunOS and Solaris assemblers issue an error when -they see misaligned data. +However, the native SunOS assemblers issue an error when they see +misaligned data. @kindex --enforce-aligned-data You can use the @code{--enforce-aligned-data} option to make SPARC GAS -also issue an error about misaligned data, just as the SunOS and Solaris +also issue an error about misaligned data, just as the SunOS assemblers do. The @code{--enforce-aligned-data} option is not the default because gcc @@ -123,6 +123,7 @@ for their UltraSPARC and Niagara line of processors. * Sparc-Regs:: Register Names * Sparc-Constants:: Constant Names * Sparc-Relocs:: Relocations +* Sparc-Size-Translations:: Size Translations @end menu @node Sparc-Chars @@ -177,7 +178,7 @@ is a legal floating point register, but @samp{%f35} is not. Certain V9 instructions allow access to ancillary state registers. Most simply they can be referred to as @samp{%asr@var{n}} where -@var{n} can be from 16 to 31. However, there are some aliased +@var{n} can be from 16 to 31. However, there are some aliases defined to reference ASR registers defined for various UltraSPARC processors: @@ -200,10 +201,12 @@ The software interrupt register is referred to as @samp{%softint}. @item The set software interrupt register is referred to as @samp{%set_softint}. +The mnemonic @samp{%softint_set} is provided as an alias. @item The clear software interrupt register is referred to as -@samp{%clear_softint}. +@samp{%clear_softint}. The mnemonic @samp{%softint_clear} is provided +as an alias. @item The performance instrumentation counters register is referred to as @@ -216,7 +219,7 @@ The performance control register is referred to as @samp{%pcr}. The graphics status register is referred to as @samp{%gsr}. @item -The dispatch control register is referred to as @samp{%dcr}. +The V9 dispatch control register is referred to as @samp{%dcr}. @end itemize Various V9 branch and conditional move instructions allow @@ -249,7 +252,7 @@ The V9 current window pointer register is referred to as @samp{%cwp}. The floating-point queue register is referred to as @samp{%fq}. @item -The co-processor queue register is referred to as @samp{%cq}. +The V8 co-processor queue register is referred to as @samp{%cq}. @item The floating point status register is referred to as @samp{%fsr}. @@ -312,7 +315,7 @@ The V8 window invalid mask register is referred to as @samp{%wim}. The V8 processor state register is referred to as @samp{%psr}. @item -The global register level register is referred to as @samp{%gl}. +The V9 global register level register is referred to as @samp{%gl}. @end itemize Several special register names exist for hypervisor mode code: @@ -644,6 +647,73 @@ specified in an address expression that would normally generate an @code{R_SPARC_LO10} relocation, the assembler will emit an @code{R_SPARC_OLO10} instead. +@node Sparc-Size-Translations +@subsection Size Translations +@cindex Sparc size translations +@cindex size, translations, Sparc + +Often it is desirable to write code in an operand size agnostic +manner. @code{@value{AS}} provides support for this via +operand size opcode translations. Translations are supported +for loads, stores, shifts, compare-and-swap atomics, and the +@samp{clr} synthetic instruction. + +If generating 32-bit code, @code{@value{AS}} will generate the +32-bit opcode. Whereas if 64-bit code is being generated, +the 64-bit opcode will be emitted. For example @code{ldn} +will be transformed into @code{ld} for 32-bit code and +@code{ldx} for 64-bit code. + +Here is an example meant to demonstrate all the supported +opcode translations: + +@example +ldn [%o0], %o1 +ldna [%o0] %asi, %o2 +stn %o1, [%o0] +stna %o2, [%o0] %asi +slln %o3, 3, %o3 +srln %o4, 8, %o4 +sran %o5, 12, %o5 +casn [%o0], %o1, %o2 +casna [%o0] %asi, %o1, %o2 +clrn %g1 +@end example + +In 32-bit mode @code{@value{AS}} will emit: + +@example +ld [%o0], %o1 +lda [%o0] %asi, %o2 +st %o1, [%o0] +sta %o2, [%o0] %asi +sll %o3, 3, %o3 +srl %o4, 8, %o4 +sra %o5, 12, %o5 +cas [%o0], %o1, %o2 +casa [%o0] %asi, %o1, %o2 +clr %g1 +@end example + +And in 64-bit mode @code{@value{AS}} will emit: + +@example +ldx [%o0], %o1 +ldxa [%o0] %asi, %o2 +stx %o1, [%o0] +stxa %o2, [%o0] %asi +sllx %o3, 3, %o3 +srlx %o4, 8, %o4 +srax %o5, 12, %o5 +casx [%o0], %o1, %o2 +casxa [%o0] %asi, %o1, %o2 +clrx %g1 +@end example + +Finally, the @samp{.nword} translating directive is supported +as well. It is documented in the section on Sparc machine +directives. + @node Sparc-Float @section Floating Point -- cgit v1.1