Message ID | 20171026164507.2631-1-palmer@dabbelt.com |
---|---|
State | New |
Headers | show |
Series | RISC-V: Correct and improve the "-mabi" documentation | expand |
Committed. On Thu, 26 Oct 2017 09:45:07 PDT (-0700), Palmer Dabbelt wrote: > The documentation for the "-mabi" argument on RISC-V was incorrect. We > chose to treat this as a documentation bug rather than a code bug, and > to make the documentation match what GCC currently does. In the > process, I also improved the documentation a bit. > > Thanks to Alex Bradbury for finding the bug! > > PR target/82717: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82717 > > gcc/ChangeLog > > 2017-10-26 Palmer Dabbelt <palmer@dabbelt.com> > > PR target/82717 > * doc/invoke.texi (RISC-V) <-mabi>: Correct and improve. > --- > gcc/doc/invoke.texi | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 71b2445f70fd..d184e1d7b7d4 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -21669,9 +21669,26 @@ When generating PIC code, allow the use of PLTs. Ignored for non-PIC. > > @item -mabi=@var{ABI-string} > @opindex mabi > -Specify integer and floating-point calling convention. This defaults to the > -natural calling convention: e.g.@ LP64 for RV64I, ILP32 for RV32I, LP64D for > -RV64G. > +@item -mabi=@var{ABI-string} > +@opindex mabi > +Specify integer and floating-point calling convention. @var{ABI-string} > +contains two parts: the size of integer types and the registers used for > +floating-point types. For example @samp{-march=rv64ifd -mabi=lp64d} means that > +@samp{long} and pointers are 64-bit (implicitly defining @samp{int} to be > +32-bit), and that floating-point values up to 64 bits wide are passed in F > +registers. Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still > +allows the compiler to generate code that uses the F and D extensions but only > +allows floating-point values up to 32 bits long to be passed in registers; or > +@samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be > +passed in registers. > + > +The default for this argument is system dependent, users who want a specific > +calling convention should specify one explicitly. The valid calling > +conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64}, > +@samp{lp64f}, and @samp{lp64d}. Some calling conventions are impossible to > +implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is > +invalid because the ABI requires 64-bit values be passed in F registers, but F > +registers are only 32 bits wide. > > @item -mfdiv > @itemx -mno-fdiv
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 71b2445f70fd..d184e1d7b7d4 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21669,9 +21669,26 @@ When generating PIC code, allow the use of PLTs. Ignored for non-PIC. @item -mabi=@var{ABI-string} @opindex mabi -Specify integer and floating-point calling convention. This defaults to the -natural calling convention: e.g.@ LP64 for RV64I, ILP32 for RV32I, LP64D for -RV64G. +@item -mabi=@var{ABI-string} +@opindex mabi +Specify integer and floating-point calling convention. @var{ABI-string} +contains two parts: the size of integer types and the registers used for +floating-point types. For example @samp{-march=rv64ifd -mabi=lp64d} means that +@samp{long} and pointers are 64-bit (implicitly defining @samp{int} to be +32-bit), and that floating-point values up to 64 bits wide are passed in F +registers. Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still +allows the compiler to generate code that uses the F and D extensions but only +allows floating-point values up to 32 bits long to be passed in registers; or +@samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be +passed in registers. + +The default for this argument is system dependent, users who want a specific +calling convention should specify one explicitly. The valid calling +conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64}, +@samp{lp64f}, and @samp{lp64d}. Some calling conventions are impossible to +implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is +invalid because the ABI requires 64-bit values be passed in F registers, but F +registers are only 32 bits wide. @item -mfdiv @itemx -mno-fdiv