Skip to content

Commit

Permalink
LoongArch Port: Add doc.
Browse files Browse the repository at this point in the history
	* contrib/config-list.mk: Add LoongArch triplet.
	* gcc/doc/install.texi: Add LoongArch options section.
	* gcc/doc/invoke.texi: Add LoongArch options section.
	* gcc/doc/md.texi: Add LoongArch options section.
  • Loading branch information
chenglulu326 committed Jan 28, 2022
1 parent 2da7a79 commit 4244eaa
Show file tree
Hide file tree
Showing 4 changed files with 302 additions and 6 deletions.
5 changes: 4 additions & 1 deletion contrib/config-list.mk
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ LIST = aarch64-elf aarch64-linux-gnu aarch64-rtems \
i686-wrs-vxworksae \
i686-cygwinOPT-enable-threads=yes i686-mingw32crt ia64-elf \
ia64-freebsd6 ia64-linux ia64-hpux ia64-hp-vms iq2000-elf lm32-elf \
lm32-rtems lm32-uclinux m32c-rtems m32c-elf m32r-elf m32rle-elf \
lm32-rtems lm32-uclinux \
loongarch64-linux-gnu loongarch64-linux-gnuf64 \
loongarch64-linux-gnuf32 loongarch64-linux-gnusf \
m32c-rtems m32c-elf m32r-elf m32rle-elf \
m68k-elf m68k-netbsdelf \
m68k-uclinux m68k-linux m68k-rtems \
mcore-elf microblaze-linux microblaze-elf \
Expand Down
47 changes: 42 additions & 5 deletions gcc/doc/install.texi
Original file line number Diff line number Diff line change
Expand Up @@ -752,9 +752,9 @@ Here are the possible CPU types:
@quotation
aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
bpf, cr16, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
hppa64, i486, i686, ia64, iq2000, lm32, m32c, m32r, m32rle, m68k, mcore,
microblaze, microblazeel, mips, mips64, mips64el, mips64octeon, mips64orion,
mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
mcore, microblaze, microblazeel, mips, mips64, mips64el, mips64octeon,
mips64orion, mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
msp430, nds32be, nds32le, nios2, nvptx, or1k, pdp11, powerpc, powerpc64,
powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
Expand Down Expand Up @@ -1171,8 +1171,9 @@ sysv, aix.
@itemx --without-multilib-list
Specify what multilibs to build. @var{list} is a comma separated list of
values, possibly consisting of a single value. Currently only implemented
for aarch64*-*-*, arm*-*-*, riscv*-*-*, sh*-*-* and x86-64-*-linux*. The
accepted values and meaning for each target is given below.
for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and
x86-64-*-linux*. The accepted values and meaning for each target is given
below.

@table @code
@item aarch64*-*-*
Expand Down Expand Up @@ -1259,6 +1260,14 @@ profile. The union of these options is considered when specifying both
@code{-mfloat-abi=hard}
@end multitable

@item loongarch*-*-*
@var{list} is a comma-separated list of the following ABI identifiers:
@code{lp64d[/base]} @code{lp64f[/base]} @code{lp64d[/base]}, where the
@code{/base} suffix may be omitted, to enable their respective run-time
libraries. If @var{list} is empty, @code{default}
or @option{--with-multilib-list} is not specified, then the default ABI
as specified by @option{--with-abi} or implied by @option{--target} is selected.

@item riscv*-*-*
@var{list} is a single ABI name. The target architecture must be either
@code{rv32gc} or @code{rv64gc}. This will build a single multilib for the
Expand Down Expand Up @@ -4430,6 +4439,34 @@ This configuration is intended for embedded systems.
Lattice Mico32 processor.
This configuration is intended for embedded systems running uClinux.

@html
<hr />
@end html
@anchor{loongarch}
@heading LoongArch
LoongArch processor.
The following LoongArch targets are available:
@table @code
@item loongarch64-linux-gnu*
LoongArch processor running GNU/Linux. This target triplet may be coupled
with a small set of possible suffixes to identify their default ABI type:
@table @code
@item f64
Uses @code{lp64d/base} ABI by default.
@item f32
Uses @code{lp64f/base} ABI by default.
@item sf
Uses @code{lp64s/base} ABI by default.
@end table

@item loongarch64-linux-gnu
Same as @code{loongarch64-linux-gnuf64}, but may be used with
@option{--with-abi=*} to configure the default ABI type.
@end table

More information about LoongArch can be found at
@uref{https://github.com/loongson/LoongArch-Documentation}.

@html
<hr />
@end html
Expand Down
201 changes: 201 additions & 0 deletions gcc/doc/invoke.texi
Original file line number Diff line number Diff line change
Expand Up @@ -995,6 +995,16 @@ Objective-C and Objective-C++ Dialects}.
@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
-msign-extend-enabled -muser-enabled}

@emph{LoongArch Options}
@gccoptlist{-march=@var{cpu-type} -mtune=@var{cpu-type} -mabi=@var{base-abi-type} @gol
-mfpu=@var{fpu-type} -msoft-float -msingle-float -mdouble-float @gol
-mbranch-cost=@var{n} -mcheck-zero-division -mno-check-zero-division @gol
-mcond-move-int -mno-cond-move-int @gol
-mcond-move-float -mno-cond-move-float @gol
-memcpy -mno-memcpy -mstrict-align @gol
-mmax-inline-memcpy-size=@var{n} @gol
-mlra -mcmodel=@var{code-model}}

@emph{M32R/D Options}
@gccoptlist{-m32r2 -m32rx -m32r @gol
-mdebug @gol
Expand Down Expand Up @@ -18805,6 +18815,7 @@ platform.
* HPPA Options::
* IA-64 Options::
* LM32 Options::
* LoongArch Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
Expand Down Expand Up @@ -24320,6 +24331,196 @@ Enable user-defined instructions.

@end table

@node LoongArch Options
@subsection LoongArch Options
@cindex LoongArch Options

These command-line options are defined for LoongArch targets:

@table @gcctabopt
@item -march=@var{cpu-type}
@opindex -march
Generate instructions for the machine type @var{cpu-type}. In contrast to
@option{-mtune=@var{cpu-type}}, which merely tunes the generated code
for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
to generate code that may not run at all on processors other than the one
indicated. Specifying @option{-march=@var{cpu-type}} implies
@option{-mtune=@var{cpu-type}}, except where noted otherwise.

The choices for @var{cpu-type} are:

@table @samp
@item native
This selects the CPU to generate code for at compilation time by determining
the processor type of the compiling machine. Using @option{-march=native}
enables all instruction subsets supported by the local machine (hence
the result might not run on different machines). Using @option{-mtune=native}
produces code optimized for the local machine under the constraints
of the selected instruction set.
@item loongarch64
A generic CPU with 64-bit extensions.
@item la464
LoongArch LA464 CPU with LBT, LSX, LASX, LVZ.
@end table


@item -mtune=@var{cpu-type}
@opindex mtune
Optimize the output for the given processor, specified by microarchitecture
name.

@item -mabi=@var{base-abi-type}
@opindex mabi
Generate code for the specified calling convention. @gol
Set base ABI to one of: @gol
@table @samp
@item lp64d
Uses 64-bit general purpose registers and 32/64-bit floating-point
registers for parameter passing. Data model is LP64, where int
is 32 bits, while long int and pointers are 64 bits.
@item lp64f
Uses 64-bit general purpose registers and 32-bit floating-point
registers for parameter passing. Data model is LP64, where int
is 32 bits, while long int and pointers are 64 bits.
@item lp64s
Uses 64-bit general purpose registers and no floating-point
registers for parameter passing. Data model is LP64, where int
is 32 bits, while long int and pointers are 64 bits.
@end table


@item -mfpu=@var{fpu-type}
@opindex mfpu
Generating code for the specified FPU type: @gol
@table @samp
@item 64
Allow the use of hardware floating-point instructions for 32-bit
and 64-bit operations.
@item 32
Allow the use of hardware floating-point instructions for 32-bit
operations.
@item none
@item 0
Prevent the use of hardware floating-point instructions.
@end table


@item -msoft-float
@opindex msoft-float
Force @option{-mfpu=none} and prevents the use of floating-point
registers for parameter passing. This option may change the target
ABI.

@item -msingle-float
@opindex -msingle-float
Force @option{-mfpu=32} and allow the use of 32-bit floating-point
registers for parameter passing. This option may change the target
ABI.

@item -mdouble-float
@opindex -mdouble-float
Force @option{-mfpu=64} and allow the use of 32/64-bit floating-point
registers for parameter passing. This option may change the target
ABI.


@item -mbranch-cost=@var{n}
@opindex -mbranch-cost
Set the cost of branches to roughly n instructions.

@item -mcheck-zero-division
@itemx -mno-check-zero-divison
@opindex -mcheck-zero-division
Trap (do not trap) on integer division by zero. The default is '-mcheck-zero-
division'.


@item -mcond-move-int
@itemx -mno-cond-move-int
@opindex -mcond-move-int
Conditional moves for floating point are enabled (disabled). The default is
'-mcond-move-float'.

@item -mmemcpy
@itemx -mno-memcpy
@opindex -mmemcpy
Force (do not force) the use of memcpy for non-trivial block moves. The default
is '-mno-memcpy', which allows GCC to inline most constant-sized copies.


@item -mlra
@opindex -mlra
Use the new LRA register allocator. By default, the LRA is used.

@item -mstrict-align
@itemx -mno-strict-align
@opindex -mstrict-align
Avoid or allow generating memory accesses that may not be aligned on a natural
object boundary as described in the architecture specification.

@item -msmall-data-limit=@var{number}
@opindex -msmall-data-limit
Put global and static data smaller than @code{number} bytes into a special section (on some targets).
Default value is 0.


@item -mmax-inline-memcpy-size=@var{n}
@opindex -mmax-inline-memcpy-size
Set the max size n of memcpy to inline, default n is 1024.

@item -mcmodel=@var{code-model}
Default code model is normal.
Set the code model to one of:
@table @samp
@item tiny-static
@itemize @bullet
@item
local symbol and global strong symbol: The data section must be within +/-2MiB addressing space.
The text section must be within +/-128MiB addressing space.
@item
global weak symbol: The got table must be within +/-2GiB addressing space.
@end itemize

@item tiny
@itemize @bullet
@item
local symbol: The data section must be within +/-2MiB addressing space.
The text section must be within +/-128MiB
addressing space.
@item
global symbol: The got table must be within +/-2GiB addressing space.
@end itemize

@item normal
@itemize @bullet
@item
local symbol: The data section must be within +/-2GiB addressing space.
The text section must be within +/-128MiB addressing space.
@item
global symbol: The got table must be within +/-2GiB addressing space.
@end itemize

@item large
@itemize @bullet
@item
local symbol: The data section must be within +/-2GiB addressing space.
The text section must be within +/-128GiB addressing space.
@item
global symbol: The got table must be within +/-2GiB addressing space.
@end itemize

@item extreme(Not implemented yet)
@itemize @bullet
@item
local symbol: The data and text section must be within +/-8EiB addressing space.
@item
global symbol: The data got table must be within +/-8EiB addressing space.
@end itemize
@end table
@end table



@node M32C Options
@subsection M32C Options
@cindex M32C options
Expand Down
55 changes: 55 additions & 0 deletions gcc/doc/md.texi
Original file line number Diff line number Diff line change
Expand Up @@ -2747,6 +2747,61 @@ Memory addressed using the small base register ($sb).
$r1h
@end table

@item LoongArch---@file{config/loongarch/constraints.md}
@table @code
@item a
A constant call global and noplt address.
@item c
A constant call local address.
@item e
A register that is used as function call.
@item f
A floating-point register (if available).
@item h
A constant call plt address.
@item j
A rester that is used as sibing call.
@item l
A signed 16-bit constant.
@item m
A memory operand whose address is formed by a base register and offset
that is suitable for use in instructions with the same addressing mode
as @code{st.w} and @code{ld.w}.
@item q
A general-purpose register except for $r0 and $r1 for csr instructions.
@item t
A constant call weak address.
@item u
A signed 52bit constant and low 32-bit is zero (for logic instructions).
@item v
A nsigned 64-bit constant and low 44-bit is zero (for logic instructions).
@item z
A floating-point condition code register.
@item G
Floating-point zero.
@item I
A signed 12-bit constant (for arithmetic instructions).
@item J
Integer zero.
@item K
An unsigned 12-bit constant (for logic instructions).
@item Q
A 12-bit constant used for logical operations.
@item W
A memory address based on a member of @code{BASE_REG_CLASS}. This is
true for allreferences.
@item Yd
A constant @code{move_operand} that can be safely loaded using
@code{la}.
@item ZB
An address that is held in a general-purpose register.
The offset is zero.
@item ZC
A memory operand whose address is formed by a base register and offset
that is suitable for use in instructions with the same addressing mode
as @code{ll.w} and @code{sc.w}.
@end table

@item MicroBlaze---@file{config/microblaze/constraints.md}
@table @code
@item d
Expand Down

0 comments on commit 4244eaa

Please sign in to comment.