OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [gas/] [doc/] [c-d30v.texi] - Diff between revs 156 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 156 Rev 816
@c Copyright (C) 1997 Free Software Foundation, Inc.
@c Copyright (C) 1997 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@ifset GENERIC
@page
@page
@node D30V-Dependent
@node D30V-Dependent
@chapter D30V Dependent Features
@chapter D30V Dependent Features
@end ifset
@end ifset
@ifclear GENERIC
@ifclear GENERIC
@node Machine Dependencies
@node Machine Dependencies
@chapter D30V Dependent Features
@chapter D30V Dependent Features
@end ifclear
@end ifclear
 
 
@cindex D30V support
@cindex D30V support
@menu
@menu
* D30V-Opts::                   D30V Options
* D30V-Opts::                   D30V Options
* D30V-Syntax::                 Syntax
* D30V-Syntax::                 Syntax
* D30V-Float::                  Floating Point
* D30V-Float::                  Floating Point
* D30V-Opcodes::                Opcodes
* D30V-Opcodes::                Opcodes
@end menu
@end menu
 
 
@node D30V-Opts
@node D30V-Opts
@section D30V Options
@section D30V Options
@cindex options, D30V
@cindex options, D30V
@cindex D30V options
@cindex D30V options
The Mitsubishi D30V version of @code{@value{AS}} has a few machine
The Mitsubishi D30V version of @code{@value{AS}} has a few machine
dependent options.
dependent options.
 
 
@table @samp
@table @samp
@item -O
@item -O
The D30V can often execute two sub-instructions in parallel. When this option
The D30V can often execute two sub-instructions in parallel. When this option
is used, @code{@value{AS}} will attempt to optimize its output by detecting when
is used, @code{@value{AS}} will attempt to optimize its output by detecting when
instructions can be executed in parallel.
instructions can be executed in parallel.
 
 
@item -n
@item -n
When this option is used, @code{@value{AS}} will issue a warning every
When this option is used, @code{@value{AS}} will issue a warning every
time it adds a nop instruction.
time it adds a nop instruction.
 
 
@item -N
@item -N
When this option is used, @code{@value{AS}} will issue a warning if it
When this option is used, @code{@value{AS}} will issue a warning if it
needs to insert a nop after a 32-bit multiply before a load or 16-bit
needs to insert a nop after a 32-bit multiply before a load or 16-bit
multiply instruction.
multiply instruction.
@end table
@end table
 
 
@node D30V-Syntax
@node D30V-Syntax
@section Syntax
@section Syntax
@cindex D30V syntax
@cindex D30V syntax
@cindex syntax, D30V
@cindex syntax, D30V
 
 
The D30V syntax is based on the syntax in Mitsubishi's D30V architecture manual.
The D30V syntax is based on the syntax in Mitsubishi's D30V architecture manual.
The differences are detailed below.
The differences are detailed below.
 
 
@menu
@menu
* D30V-Size::                 Size Modifiers
* D30V-Size::                 Size Modifiers
* D30V-Subs::                 Sub-Instructions
* D30V-Subs::                 Sub-Instructions
* D30V-Chars::                Special Characters
* D30V-Chars::                Special Characters
* D30V-Guarded::              Guarded Execution
* D30V-Guarded::              Guarded Execution
* D30V-Regs::                 Register Names
* D30V-Regs::                 Register Names
* D30V-Addressing::           Addressing Modes
* D30V-Addressing::           Addressing Modes
@end menu
@end menu
 
 
 
 
@node D30V-Size
@node D30V-Size
@subsection Size Modifiers
@subsection Size Modifiers
@cindex D30V size modifiers
@cindex D30V size modifiers
@cindex size modifiers, D30V
@cindex size modifiers, D30V
The D30V version of @code{@value{AS}} uses the instruction names in the D30V
The D30V version of @code{@value{AS}} uses the instruction names in the D30V
Architecture Manual.  However, the names in the manual are sometimes ambiguous.
Architecture Manual.  However, the names in the manual are sometimes ambiguous.
There are instruction names that can assemble to a short or long form opcode.
There are instruction names that can assemble to a short or long form opcode.
How does the assembler pick the correct form?  @code{@value{AS}} will always pick the
How does the assembler pick the correct form?  @code{@value{AS}} will always pick the
smallest form if it can.  When dealing with a symbol that is not defined yet when a
smallest form if it can.  When dealing with a symbol that is not defined yet when a
line is being assembled, it will always use the long form.  If you need to force the
line is being assembled, it will always use the long form.  If you need to force the
assembler to use either the short or long form of the instruction, you can append
assembler to use either the short or long form of the instruction, you can append
either @samp{.s} (short) or @samp{.l} (long) to it.  For example, if you are writing
either @samp{.s} (short) or @samp{.l} (long) to it.  For example, if you are writing
an assembly program and you want to do a branch to a symbol that is defined later
an assembly program and you want to do a branch to a symbol that is defined later
in your program, you can write @samp{bra.s foo}.
in your program, you can write @samp{bra.s foo}.
Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which
Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which
have both short and long forms.
have both short and long forms.
 
 
@node D30V-Subs
@node D30V-Subs
@subsection Sub-Instructions
@subsection Sub-Instructions
@cindex D30V sub-instructions
@cindex D30V sub-instructions
@cindex sub-instructions, D30V
@cindex sub-instructions, D30V
The D30V assembler takes as input a series of instructions, either one-per-line,
The D30V assembler takes as input a series of instructions, either one-per-line,
or in the special two-per-line format described in the next section.  Some of these
or in the special two-per-line format described in the next section.  Some of these
instructions will be short-form or sub-instructions.  These sub-instructions can be packed
instructions will be short-form or sub-instructions.  These sub-instructions can be packed
into a single instruction.  The assembler will do this automatically.  It will also detect
into a single instruction.  The assembler will do this automatically.  It will also detect
when it should not pack instructions.  For example, when a label is defined, the next
when it should not pack instructions.  For example, when a label is defined, the next
instruction will never be packaged with the previous one.  Whenever a branch and link
instruction will never be packaged with the previous one.  Whenever a branch and link
instruction is called, it will not be packaged with the next instruction so the return
instruction is called, it will not be packaged with the next instruction so the return
address will be valid.  Nops are automatically inserted when necessary.
address will be valid.  Nops are automatically inserted when necessary.
 
 
If you do not want the assembler automatically making these decisions, you can control
If you do not want the assembler automatically making these decisions, you can control
the packaging and execution type (parallel or sequential) with the special execution
the packaging and execution type (parallel or sequential) with the special execution
symbols described in the next section.
symbols described in the next section.
 
 
@node D30V-Chars
@node D30V-Chars
@subsection Special Characters
@subsection Special Characters
@cindex line comment character, D30V
@cindex line comment character, D30V
@cindex D30V line comment character
@cindex D30V line comment character
@samp{;} and @samp{#} are the line comment characters.
@samp{;} and @samp{#} are the line comment characters.
@cindex sub-instruction ordering, D30V
@cindex sub-instruction ordering, D30V
@cindex D30V sub-instruction ordering
@cindex D30V sub-instruction ordering
Sub-instructions may be executed in order, in reverse-order, or in parallel.
Sub-instructions may be executed in order, in reverse-order, or in parallel.
Instructions listed in the standard one-per-line format will be executed
Instructions listed in the standard one-per-line format will be executed
sequentially unless you use the @samp{-O} option.
sequentially unless you use the @samp{-O} option.
 
 
To specify the executing order, use the following symbols:
To specify the executing order, use the following symbols:
@table @samp
@table @samp
@item ->
@item ->
Sequential with instruction on the left first.
Sequential with instruction on the left first.
 
 
@item <-
@item <-
Sequential with instruction on the right first.
Sequential with instruction on the right first.
 
 
@item ||
@item ||
Parallel
Parallel
@end table
@end table
 
 
The D30V syntax allows either one instruction per line, one instruction per line with
The D30V syntax allows either one instruction per line, one instruction per line with
the execution symbol, or two instructions per line.  For example
the execution symbol, or two instructions per line.  For example
@table @code
@table @code
@item abs r2,r3 -> abs r4,r5
@item abs r2,r3 -> abs r4,r5
Execute these sequentially.  The instruction on the right is in the right
Execute these sequentially.  The instruction on the right is in the right
container and is executed second.
container and is executed second.
 
 
@item abs r2,r3 <- abs r4,r5
@item abs r2,r3 <- abs r4,r5
Execute these reverse-sequentially.  The instruction on the right is in the right
Execute these reverse-sequentially.  The instruction on the right is in the right
container, and is executed first.
container, and is executed first.
 
 
@item abs r2,r3 || abs r4,r5
@item abs r2,r3 || abs r4,r5
Execute these in parallel.
Execute these in parallel.
 
 
@item ldw r2,@@(r3,r4) ||
@item ldw r2,@@(r3,r4) ||
@itemx mulx r6,r8,r9
@itemx mulx r6,r8,r9
Two-line format. Execute these in parallel.
Two-line format. Execute these in parallel.
 
 
@item mulx a0,r8,r9
@item mulx a0,r8,r9
@itemx stw r2,@@(r3,r4)
@itemx stw r2,@@(r3,r4)
Two-line format. Execute these sequentially unless @samp{-O} option is
Two-line format. Execute these sequentially unless @samp{-O} option is
used.  If the @samp{-O} option is used, the assembler will determine if
used.  If the @samp{-O} option is used, the assembler will determine if
the instructions could be done in parallel (the above two instructions
the instructions could be done in parallel (the above two instructions
can be done in parallel), and if so, emit them as parallel instructions.
can be done in parallel), and if so, emit them as parallel instructions.
The assembler will put them in the proper containers.  In the above
The assembler will put them in the proper containers.  In the above
example, the assembler will put the @samp{stw} instruction in left
example, the assembler will put the @samp{stw} instruction in left
container and the @samp{mulx} instruction in the right container.
container and the @samp{mulx} instruction in the right container.
 
 
@item stw r2,@@(r3,r4) ->
@item stw r2,@@(r3,r4) ->
@itemx mulx a0,r8,r9
@itemx mulx a0,r8,r9
Two-line format.  Execute the @samp{stw} instruction followed by the
Two-line format.  Execute the @samp{stw} instruction followed by the
@samp{mulx} instruction sequentially.  The first instruction goes in the
@samp{mulx} instruction sequentially.  The first instruction goes in the
left container and the second instruction goes into right container.
left container and the second instruction goes into right container.
The assembler will give an error if the machine ordering constraints are
The assembler will give an error if the machine ordering constraints are
violated.
violated.
 
 
@item stw r2,@@(r3,r4) <-
@item stw r2,@@(r3,r4) <-
@itemx mulx a0,r8,r9
@itemx mulx a0,r8,r9
Same as previous example, except that the @samp{mulx} instruction is
Same as previous example, except that the @samp{mulx} instruction is
executed before the @samp{stw} instruction.
executed before the @samp{stw} instruction.
@end table
@end table
 
 
@cindex symbol names, @samp{$} in
@cindex symbol names, @samp{$} in
@cindex @code{$} in symbol names
@cindex @code{$} in symbol names
Since @samp{$} has no special meaning, you may use it in symbol names.
Since @samp{$} has no special meaning, you may use it in symbol names.
 
 
@node D30V-Guarded
@node D30V-Guarded
@subsection Guarded Execution
@subsection Guarded Execution
@cindex D30V Guarded Execution
@cindex D30V Guarded Execution
@code{@value{AS}} supports the full range of guarded execution
@code{@value{AS}} supports the full range of guarded execution
directives for each instruction.  Just append the directive after the
directives for each instruction.  Just append the directive after the
instruction proper.  The directives are:
instruction proper.  The directives are:
 
 
@table @samp
@table @samp
@item /tx
@item /tx
Execute the instruction if flag f0 is true.
Execute the instruction if flag f0 is true.
@item /fx
@item /fx
Execute the instruction if flag f0 is false.
Execute the instruction if flag f0 is false.
@item /xt
@item /xt
Execute the instruction if flag f1 is true.
Execute the instruction if flag f1 is true.
@item /xf
@item /xf
Execute the instruction if flag f1 is false.
Execute the instruction if flag f1 is false.
@item /tt
@item /tt
Execute the instruction if both flags f0 and f1 are true.
Execute the instruction if both flags f0 and f1 are true.
@item /tf
@item /tf
Execute the instruction if flag f0 is true and flag f1 is false.
Execute the instruction if flag f0 is true and flag f1 is false.
@end table
@end table
 
 
@node D30V-Regs
@node D30V-Regs
@subsection Register Names
@subsection Register Names
@cindex D30V registers
@cindex D30V registers
@cindex registers, D30V
@cindex registers, D30V
You can use the predefined symbols @samp{r0} through @samp{r63} to refer
You can use the predefined symbols @samp{r0} through @samp{r63} to refer
to the D30V registers.  You can also use @samp{sp} as an alias for
to the D30V registers.  You can also use @samp{sp} as an alias for
@samp{r63} and @samp{link} as an alias for @samp{r62}.  The accumulators
@samp{r63} and @samp{link} as an alias for @samp{r62}.  The accumulators
are @samp{a0} and @samp{a1}.
are @samp{a0} and @samp{a1}.
 
 
The D30V also has predefined symbols for these control registers and status bits:
The D30V also has predefined symbols for these control registers and status bits:
@table @code
@table @code
@item psw
@item psw
Processor Status Word
Processor Status Word
@item bpsw
@item bpsw
Backup Processor Status Word
Backup Processor Status Word
@item pc
@item pc
Program Counter
Program Counter
@item bpc
@item bpc
Backup Program Counter
Backup Program Counter
@item rpt_c
@item rpt_c
Repeat Count
Repeat Count
@item rpt_s
@item rpt_s
Repeat Start address
Repeat Start address
@item rpt_e
@item rpt_e
Repeat End address
Repeat End address
@item mod_s
@item mod_s
Modulo Start address
Modulo Start address
@item mod_e
@item mod_e
Modulo End address
Modulo End address
@item iba
@item iba
Instruction Break Address
Instruction Break Address
@item f0
@item f0
Flag 0
Flag 0
@item f1
@item f1
Flag 1
Flag 1
@item f2
@item f2
Flag 2
Flag 2
@item f3
@item f3
Flag 3
Flag 3
@item f4
@item f4
Flag 4
Flag 4
@item f5
@item f5
Flag 5
Flag 5
@item f6
@item f6
Flag 6
Flag 6
@item f7
@item f7
Flag 7
Flag 7
@item s
@item s
Same as flag 4 (saturation flag)
Same as flag 4 (saturation flag)
@item v
@item v
Same as flag 5 (overflow flag)
Same as flag 5 (overflow flag)
@item va
@item va
Same as flag 6 (sticky overflow flag)
Same as flag 6 (sticky overflow flag)
@item c
@item c
Same as flag 7 (carry/borrow flag)
Same as flag 7 (carry/borrow flag)
@item b
@item b
Same as flag 7 (carry/borrow flag)
Same as flag 7 (carry/borrow flag)
@end table
@end table
 
 
@node D30V-Addressing
@node D30V-Addressing
@subsection Addressing Modes
@subsection Addressing Modes
@cindex addressing modes, D30V
@cindex addressing modes, D30V
@cindex D30V addressing modes
@cindex D30V addressing modes
@code{@value{AS}} understands the following addressing modes for the D30V.
@code{@value{AS}} understands the following addressing modes for the D30V.
@code{R@var{n}} in the following refers to any of the numbered
@code{R@var{n}} in the following refers to any of the numbered
registers, but @emph{not} the control registers.
registers, but @emph{not} the control registers.
@table @code
@table @code
@item R@var{n}
@item R@var{n}
Register direct
Register direct
@item @@R@var{n}
@item @@R@var{n}
Register indirect
Register indirect
@item @@R@var{n}+
@item @@R@var{n}+
Register indirect with post-increment
Register indirect with post-increment
@item @@R@var{n}-
@item @@R@var{n}-
Register indirect with post-decrement
Register indirect with post-decrement
@item @@-SP
@item @@-SP
Register indirect with pre-decrement
Register indirect with pre-decrement
@item @@(@var{disp}, R@var{n})
@item @@(@var{disp}, R@var{n})
Register indirect with displacement
Register indirect with displacement
@item @var{addr}
@item @var{addr}
PC relative address (for branch or rep).
PC relative address (for branch or rep).
@item #@var{imm}
@item #@var{imm}
Immediate data (the @samp{#} is optional and ignored)
Immediate data (the @samp{#} is optional and ignored)
@end table
@end table
 
 
@node D30V-Float
@node D30V-Float
@section Floating Point
@section Floating Point
@cindex floating point, D30V
@cindex floating point, D30V
@cindex D30V floating point
@cindex D30V floating point
The D30V has no hardware floating point, but the @code{.float} and @code{.double}
The D30V has no hardware floating point, but the @code{.float} and @code{.double}
directives generates @sc{ieee} floating-point numbers for compatibility
directives generates @sc{ieee} floating-point numbers for compatibility
with other development tools.
with other development tools.
 
 
@node D30V-Opcodes
@node D30V-Opcodes
@section Opcodes
@section Opcodes
@cindex D30V opcode summary
@cindex D30V opcode summary
@cindex opcode summary, D30V
@cindex opcode summary, D30V
@cindex mnemonics, D30V
@cindex mnemonics, D30V
@cindex instruction summary, D30V
@cindex instruction summary, D30V
For detailed information on the D30V machine instruction set, see
For detailed information on the D30V machine instruction set, see
@cite{D30V Architecture: A VLIW Microprocessor for Multimedia Applications}
@cite{D30V Architecture: A VLIW Microprocessor for Multimedia Applications}
(Mitsubishi Electric Corp.).
(Mitsubishi Electric Corp.).
@code{@value{AS}} implements all the standard D30V opcodes.  The only changes are those
@code{@value{AS}} implements all the standard D30V opcodes.  The only changes are those
described in the section on size modifiers
described in the section on size modifiers
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.