Skip to content

Commit

Permalink
LoongArch: Add asm modifiers to the LSX and LASX directives in the doc.
Browse files Browse the repository at this point in the history
gcc/ChangeLog:

	* doc/extend.texi:Add modifiers to the vector of asm in the doc.
	* doc/md.texi:Refine the description of the modifier 'f' in the doc.
  • Loading branch information
chenxiaolong authored and chenglulu326 committed Dec 22, 2023
1 parent 2488771 commit 5bd5ef9
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
47 changes: 47 additions & 0 deletions gcc/doc/extend.texi
Original file line number Diff line number Diff line change
Expand Up @@ -12116,10 +12116,57 @@ The list below describes the supported modifiers and their effects for LoongArch
@item @code{d} @tab Same as @code{c}.
@item @code{i} @tab Print the character ''@code{i}'' if the operand is not a register.
@item @code{m} @tab Same as @code{c}, but the printed value is @code{operand - 1}.
@item @code{u} @tab Print a LASX register.
@item @code{w} @tab Print a LSX register.
@item @code{X} @tab Print a constant integer operand in hexadecimal.
@item @code{z} @tab Print the operand in its unmodified form, followed by a comma.
@end multitable

References to input and output operands in the assembler template of extended
asm statements can use modifiers to affect the way the operands are formatted
in the code output to the assembler. For example, the following code uses the
'w' modifier for LoongArch:

@example
test-asm.c:

#include <lsxintrin.h>

__m128i foo (void)
@{
__m128i a,b,c;
__asm__ ("vadd.d %w0,%w1,%w2\n\t"
:"=f" (c)
:"f" (a),"f" (b));

return c;
@}

@end example

@noindent
The compile command for the test case is as follows:

@example
gcc test-asm.c -mlsx -S -o test-asm.s
@end example

@noindent
The assembly statement produces the following assembly code:

@example
vadd.d $vr0,$vr0,$vr1
@end example

This is a 128-bit vector addition instruction, @code{c} (referred to in the
template string as %0) is the output, and @code{a} (%1) and @code{b} (%2) are
the inputs. @code{__m128i} is a vector data type defined in the file
@code{lsxintrin.h} (@xref{LoongArch SX Vector Intrinsics}). The symbol '=f'
represents a constraint using a floating-point register as an output type, and
the 'f' in the input operand represents a constraint using a floating-point
register operand, which can refer to the definition of a constraint
(@xref{Constraints}) in gcc.

@anchor{riscvOperandmodifiers}
@subsubsection RISC-V Operand Modifiers

Expand Down
2 changes: 1 addition & 1 deletion gcc/doc/md.texi
Original file line number Diff line number Diff line change
Expand Up @@ -2881,7 +2881,7 @@ $r1h
@item LoongArch---@file{config/loongarch/constraints.md}
@table @code
@item f
A floating-point register (if available).
A floating-point or vector register (if available).
@item k
A memory operand whose address is formed by a base register and
(optionally scaled) index register.
Expand Down

0 comments on commit 5bd5ef9

Please sign in to comment.