diff options
author | Martin Jambor <mjambor@suse.cz> | 2017-07-31 14:43:24 +0200 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2017-07-31 14:43:24 +0200 |
commit | b32f12dece884f1fa0f04c643a77105aff6ce8bc (patch) | |
tree | cdab5f10806561fc198f907299b0e55eb5701ef0 /gcc/doc | |
parent | 166bec868d991fdf71f9a66f994e5977fcab4aa2 (diff) | |
parent | a168a775e93ec31ae743ad282d8e60fa1c116891 (diff) | |
download | gcc-gcn.tar.gz |
Merge branch 'master' into gcngcn
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/extend.texi | 378 | ||||
-rw-r--r-- | gcc/doc/generic.texi | 17 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 261 | ||||
-rw-r--r-- | gcc/doc/rtl.texi | 7 | ||||
-rw-r--r-- | gcc/doc/sourcebuild.texi | 11 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 13 | ||||
-rw-r--r-- | gcc/doc/tm.texi.in | 2 |
7 files changed, 519 insertions, 170 deletions
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 43f9ecf2466..34cb7d3dd22 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 1988-2017 Free Software Foundation, Inc. +c Copyright (C) 1988-2017 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -2984,6 +2984,19 @@ asm (""); (@pxref{Extended Asm}) in the called function, to serve as a special side-effect. +@item noipa +@cindex @code{noipa} function attribute +Disable interprocedural optimizations between the function with this +attribute and its callers, as if the body of the function is not available +when optimizing callers and the callers are unavailable when optimizing +the body. This attribute implies @code{noinline}, @code{noclone} and +@code{no_icf} attributes. However, this attribute is not equivalent +to a combination of other attributes, because its purpose is to suppress +existing and future optimizations employing interprocedural analysis, +including those that do not have an attribute suitable for disabling +them individually. This attribute is supported mainly for the purpose +of testing the compiler. + @item nonnull (@var{arg-index}, @dots{}) @cindex @code{nonnull} function attribute @cindex functions with non-null pointer arguments @@ -3105,6 +3118,27 @@ that affect more than one function. This attribute should be used for debugging purposes only. It is not suitable in production code. +@item patchable_function_entry +@cindex @code{patchable_function_entry} function attribute +@cindex extra NOP instructions at the function entry point +In case the target's text segment can be made writable at run time by +any means, padding the function entry with a number of NOPs can be +used to provide a universal tool for instrumentation. + +The @code{patchable_function_entry} function attribute can be used to +change the number of NOPs to any desired value. The two-value syntax +is the same as for the command-line switch +@option{-fpatchable-function-entry=N,M}, generating @var{N} NOPs, with +the function entry point before the @var{M}th NOP instruction. +@var{M} defaults to 0 if omitted e.g. function entry point is before +the first NOP. + +If patchable function entries are enabled globally using the command-line +option @option{-fpatchable-function-entry=N,M}, then you must disable +instrumentation on all functions that are part of the instrumentation +framework with the attribute @code{patchable_function_entry (0)} +to prevent recursion. + @item pure @cindex @code{pure} function attribute @cindex functions that have no side effects @@ -3278,16 +3312,17 @@ are the same as for @code{target} attribute. For instance, on an x86, you could compile a function with @code{target_clones("sse4.1,avx")}. GCC creates two function clones, one compiled with @option{-msse4.1} and another with @option{-mavx}. -It also creates a resolver function (see the @code{ifunc} attribute -above) that dynamically selects a clone suitable for current -architecture. On a PowerPC, you can compile a function with @code{target_clones("cpu=power9,default")}. GCC will create two function clones, one compiled with @option{-mcpu=power9} and another -with the default options. It also creates a resolver function (see +with the default options. GCC must be configured to use GLIBC 2.23 or +newer in order to use the @code{target_clones} attribute. + +It also creates a resolver function (see the @code{ifunc} attribute above) that dynamically selects a clone -suitable for current architecture. +suitable for current architecture. The resolver is created only if there +is a usage of a function with @code{target_clones} attribute. @item unused @cindex @code{unused} function attribute @@ -3815,6 +3850,33 @@ prologue/epilogue sequences generated by the compiler. Only basic basic @code{asm} and C code may appear to work, they cannot be depended upon to work reliably and are not supported. +@item no_gccisr +@cindex @code{no_gccisr} function attribute, AVR +Do not use @code{__gcc_isr} pseudo instructions in a function with +the @code{interrupt} or @code{signal} attribute aka. interrupt +service routine (ISR). +Use this attribute if the preamble of the ISR prologue should always read +@example +push __zero_reg__ +push __tmp_reg__ +in __tmp_reg__, __SREG__ +push __tmp_reg__ +clr __zero_reg__ +@end example +and accordingly for the postamble of the epilogue --- no matter whether +the mentioned registers are actually used in the ISR or not. +Situations where you might want to use this attribute include: +@itemize @bullet +@item +Code that (effectively) clobbers bits of @code{SREG} other than the +@code{I}-flag by writing to the memory location of @code{SREG}. +@item +Code that uses inline assembler to jump to a different function which +expects (parts of) the prologue code as outlined above to be present. +@end itemize +To disable @code{__gcc_isr} generation for the whole compilation unit, +there is option @option{-mno-gas-isr-prologues}, @pxref{AVR Options}. + @item OS_main @itemx OS_task @cindex @code{OS_main} function attribute, AVR @@ -5308,6 +5370,17 @@ this function attribute to make GCC generate the ``hot-patching'' function prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2 and newer. +@item naked +@cindex @code{naked} function attribute, x86 +This attribute allows the compiler to construct the +requisite function declaration, while allowing the body of the +function to be assembly code. The specified function will not have +prologue/epilogue sequences generated by the compiler. Only basic +@code{asm} statements can safely be included in naked functions +(@pxref{Basic Asm}). While using extended @code{asm} or a mixture of +basic @code{asm} and C code may appear to work, they cannot be +depended upon to work reliably and are not supported. + @item regparm (@var{number}) @cindex @code{regparm} function attribute, x86 @cindex functions that are passed arguments in registers on x86-32 @@ -12720,54 +12793,37 @@ or if not a specific built-in is implemented or not. For example, if @code{__builtin_avr_nop} is available the macro @code{__BUILTIN_AVR_NOP} is defined to @code{1} and undefined otherwise. -The following built-in functions map to the respective machine +@table @code + +@item void __builtin_avr_nop (void) +@itemx void __builtin_avr_sei (void) +@itemx void __builtin_avr_cli (void) +@itemx void __builtin_avr_sleep (void) +@itemx void __builtin_avr_wdr (void) +@itemx unsigned char __builtin_avr_swap (unsigned char) +@itemx unsigned int __builtin_avr_fmul (unsigned char, unsigned char) +@itemx int __builtin_avr_fmuls (char, char) +@itemx int __builtin_avr_fmulsu (char, unsigned char) +These built-in functions map to the respective machine instruction, i.e.@: @code{nop}, @code{sei}, @code{cli}, @code{sleep}, @code{wdr}, @code{swap}, @code{fmul}, @code{fmuls} resp. @code{fmulsu}. The three @code{fmul*} built-ins are implemented as library call if no hardware multiplier is available. -@smallexample -void __builtin_avr_nop (void) -void __builtin_avr_sei (void) -void __builtin_avr_cli (void) -void __builtin_avr_sleep (void) -void __builtin_avr_wdr (void) -unsigned char __builtin_avr_swap (unsigned char) -unsigned int __builtin_avr_fmul (unsigned char, unsigned char) -int __builtin_avr_fmuls (char, char) -int __builtin_avr_fmulsu (char, unsigned char) -@end smallexample - -In order to delay execution for a specific number of cycles, GCC -implements -@smallexample -void __builtin_avr_delay_cycles (unsigned long ticks) -@end smallexample - -@noindent -@code{ticks} is the number of ticks to delay execution. Note that this +@item void __builtin_avr_delay_cycles (unsigned long ticks) +Delay execution for @var{ticks} cycles. Note that this built-in does not take into account the effect of interrupts that -might increase delay time. @code{ticks} must be a compile-time +might increase delay time. @var{ticks} must be a compile-time integer constant; delays with a variable number of cycles are not supported. -@smallexample -char __builtin_avr_flash_segment (const __memx void*) -@end smallexample - -@noindent +@item char __builtin_avr_flash_segment (const __memx void*) This built-in takes a byte address to the 24-bit @ref{AVR Named Address Spaces,address space} @code{__memx} and returns the number of the flash segment (the 64 KiB chunk) where the address points to. Counting starts at @code{0}. If the address does not point to flash memory, return @code{-1}. -@smallexample -unsigned char __builtin_avr_insert_bits (unsigned long map, - unsigned char bits, - unsigned char val) -@end smallexample - -@noindent +@item uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val) Insert bits from @var{bits} into @var{val} and return the resulting value. The nibbles of @var{map} determine how the insertion is performed: Let @var{X} be the @var{n}-th nibble of @var{map} @@ -12812,13 +12868,29 @@ __builtin_avr_insert_bits (0xffff3210, bits, val) __builtin_avr_insert_bits (0x01234567, bits, 0) @end smallexample -@smallexample -void __builtin_avr_nops (unsigned count) -@end smallexample +@item void __builtin_avr_nops (unsigned count) +Insert @var{count} @code{NOP} instructions. +The number of instructions must be a compile-time integer constant. + +@end table @noindent -Insert @code{count} @code{NOP} instructions. -The number of instructions must be a compile-time integer constant. +There are many more AVR-specific built-in functions that are used to +implement the ISO/IEC TR 18037 ``Embedded C'' fixed-point functions of +section 7.18a.6. You don't need to use these built-ins directly. +Instead, use the declarations as supplied by the @code{stdfix.h} header +with GNU-C99: + +@smallexample +#include <stdfix.h> + +// Re-interpret the bit representation of unsigned 16-bit +// integer @var{uval} as Q-format 0.16 value. +unsigned fract get_bits (uint_ur_t uval) +@{ + return urbits (uval); +@} +@end smallexample @node Blackfin Built-in Functions @subsection Blackfin Built-in Functions @@ -14918,8 +14990,18 @@ to maintain API compatibility with the x86 builtins. @deftypefn {Built-in Function} int __builtin_cpu_is (const char *@var{cpuname}) This function returns a value of @code{1} if the run-time CPU is of type -@var{cpuname} and returns @code{0} otherwise. The following CPU names can be -detected: +@var{cpuname} and returns @code{0} otherwise + +The @code{__builtin_cpu_is} function requires GLIBC 2.23 or newer +which exports the hardware capability bits. GCC defines the macro +@code{__BUILTIN_CPU_SUPPORTS__} if the @code{__builtin_cpu_supports} +built-in function is fully supported. + +If GCC was configured to use a GLIBC before 2.23, the built-in +function @code{__builtin_cpu_is} always returns a 0 and the compiler +issues a warning. + +The following CPU names can be detected: @table @samp @item power9 @@ -14956,20 +15038,33 @@ IBM PowerPC Cell Broadband Engine Architecture CPU. Here is an example: @smallexample -if (__builtin_cpu_is ("power8")) - @{ - do_power8 (); // POWER8 specific implementation. - @} -else - @{ - do_generic (); // Generic implementation. - @} +#ifdef __BUILTIN_CPU_SUPPORTS__ + if (__builtin_cpu_is ("power8")) + @{ + do_power8 (); // POWER8 specific implementation. + @} + else +#endif + @{ + do_generic (); // Generic implementation. + @} @end smallexample @end deftypefn @deftypefn {Built-in Function} int __builtin_cpu_supports (const char *@var{feature}) This function returns a value of @code{1} if the run-time CPU supports the HWCAP -feature @var{feature} and returns @code{0} otherwise. The following features can be +feature @var{feature} and returns @code{0} otherwise. + +The @code{__builtin_cpu_supports} function requires GLIBC 2.23 or +newer which exports the hardware capability bits. GCC defines the +macro @code{__BUILTIN_CPU_SUPPORTS__} if the +@code{__builtin_cpu_supports} built-in function is fully supported. + +If GCC was configured to use a GLIBC before 2.23, the built-in +function @code{__builtin_cpu_suports} always returns a 0 and the +compiler issues a warning. + +The following features can be detected: @table @samp @@ -15053,14 +15148,16 @@ CPU supports the vector-scalar extension. Here is an example: @smallexample -if (__builtin_cpu_supports ("fpu")) - @{ - asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2)); - @} -else - @{ - dst = __fadd (src1, src2); // Software FP addition function. - @} +#ifdef __BUILTIN_CPU_SUPPORTS__ + if (__builtin_cpu_supports ("fpu")) + @{ + asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2)); + @} + else +#endif + @{ + dst = __fadd (src1, src2); // Software FP addition function. + @} @end smallexample @end deftypefn @@ -15176,13 +15273,21 @@ long long __builtin_darn_raw (void); int __builtin_darn_32 (void); unsigned int scalar_extract_exp (double source); +unsigned long long int scalar_extract_exp (__ieee128 source); + unsigned long long int scalar_extract_sig (double source); +unsigned __int128 scalar_extract_sig (__ieee128 source); double scalar_insert_exp (unsigned long long int significand, unsigned long long int exponent); double scalar_insert_exp (double significand, unsigned long long int exponent); +ieee_128 +scalar_insert_exp (unsigned __int128 significand, unsigned long long int exponent); +ieee_128 +scalar_insert_exp (ieee_128 significand, unsigned long long int exponent); + int scalar_cmp_exp_gt (double arg1, double arg2); int scalar_cmp_exp_lt (double arg1, double arg2); int scalar_cmp_exp_eq (double arg1, double arg2); @@ -15190,9 +15295,11 @@ int scalar_cmp_exp_unordered (double arg1, double arg2); bool scalar_test_data_class (float source, const int condition); bool scalar_test_data_class (double source, const int condition); +bool scalar_test_data_class (__ieee128 source, const int condition); bool scalar_test_neg (float source); bool scalar_test_neg (double source); +bool scalar_test_neg (__ieee128 source); int __builtin_byte_in_set (unsigned char u, unsigned long long set); int __builtin_byte_in_range (unsigned char u, unsigned int range); @@ -15232,25 +15339,38 @@ functions require a 64-bit environment supporting ISA 3.0 or later. The @code{scalar_extract_exp} and @code{scalar_extract_sig} built-in functions return the significand and the biased exponent value respectively of their @code{source} arguments. -Within the result returned by @code{scalar_extract_sig}, -the @code{0x10000000000000} bit is set if the +When supplied with a 64-bit @code{source} argument, the +result returned by @code{scalar_extract_sig} has +the @code{0x0010000000000000} bit set if the function's @code{source} argument is in normalized form. Otherwise, this bit is set to 0. +When supplied with a 128-bit @code{source} argument, the +@code{0x00010000000000000000000000000000} bit of the result is +treated similarly. Note that the sign of the significand is not represented in the result returned from the @code{scalar_extract_sig} function. Use the @code{scalar_test_neg} function to test the sign of its @code{double} argument. -The @code{scalar_insert_exp} -function requires a 64-bit environment supporting ISA 3.0 or later. -The @code{scalar_insert_exp} built-in function returns a double-precision +The @code{scalar_insert_exp} +functions require a 64-bit environment supporting ISA 3.0 or later. +When supplied with a 64-bit first argument, the +@code{scalar_insert_exp} built-in function returns a double-precision floating point value that is constructed by assembling the values of its @code{significand} and @code{exponent} arguments. The sign of the result is copied from the most significant bit of the @code{significand} argument. The significand and exponent components of the result are composed of the least significant 11 bits of the @code{exponent} argument and the least significant 52 bits of the -@code{significand} argument. +@code{significand} argument respectively. + +When supplied with a 128-bit first argument, the +@code{scalar_insert_exp} built-in function returns a quad-precision +ieee floating point value. The sign bit of the result is copied from +the most significant bit of the @code{significand} argument. +The significand and exponent components of the result are composed of +the least significant 15 bits of the @code{exponent} argument and the +least significant 112 bits of the @code{significand} argument respectively. The @code{scalar_cmp_exp_gt}, @code{scalar_cmp_exp_lt}, @code{scalar_cmp_exp_eq}, and @code{scalar_cmp_exp_unordered} built-in @@ -15357,12 +15477,23 @@ vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2); vector bool int vec_cmpnez (vector unsigned int, vector unsigned int); +vector signed char vec_cnttz (vector signed char); +vector unsigned char vec_cnttz (vector unsigned char); +vector signed short vec_cnttz (vector signed short); +vector unsigned short vec_cnttz (vector unsigned short); +vector signed int vec_cnttz (vector signed int); +vector unsigned int vec_cnttz (vector unsigned int); +vector signed long long vec_cnttz (vector signed long long); +vector unsigned long long vec_cnttz (vector unsigned long long); + signed int vec_cntlz_lsbb (vector signed char); signed int vec_cntlz_lsbb (vector unsigned char); signed int vec_cnttz_lsbb (vector signed char); signed int vec_cnttz_lsbb (vector unsigned char); +vector unsigned short vec_pack_to_short_fp32 (vector float, vector float); + vector signed char vec_xl_len (signed char *addr, size_t len); vector unsigned char vec_xl_len (unsigned char *addr, size_t len); vector signed int vec_xl_len (signed int *addr, size_t len); @@ -16558,6 +16689,19 @@ vector bool char vec_perm (vector bool char, vector float vec_re (vector float); +vector bool char vec_reve (vector bool char); +vector signed char vec_reve (vector signed char); +vector unsigned char vec_reve (vector unsigned char); +vector bool int vec_reve (vector bool int); +vector signed int vec_reve (vector signed int); +vector unsigned int vec_reve (vector unsigned int); +vector bool long long vec_reve (vector bool long long); +vector signed long long vec_reve (vector signed long long); +vector unsigned long long vec_reve (vector unsigned long long); +vector bool short vec_reve (vector bool short); +vector signed short vec_reve (vector signed short); +vector unsigned short vec_reve (vector unsigned short); + vector signed char vec_rl (vector signed char, vector unsigned char); vector unsigned char vec_rl (vector unsigned char, @@ -16645,6 +16789,13 @@ vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char); +vector signed long long vec_signed (vector double); +vector signed int vec_signed (vector float); + +vector signed int vec_signede (vector double); +vector signed int vec_signedo (vector double); +vector signed int vec_signed2 (vector double, vector double); + vector signed char vec_sl (vector signed char, vector unsigned char); vector unsigned char vec_sl (vector unsigned char, @@ -17096,7 +17247,34 @@ vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char); +vector signed int vec_subc (vector signed int, vector signed int); vector unsigned int vec_subc (vector unsigned int, vector unsigned int); +vector signed __int128 vec_subc (vector signed __int128, + vector signed __int128); +vector unsigned __int128 vec_subc (vector unsigned __int128, + vector unsigned __int128); + +vector signed int vec_sube (vector signed int, vector signed int, + vector signed int); +vector unsigned int vec_sube (vector unsigned int, vector unsigned int, + vector unsigned int); +vector signed __int128 vec_sube (vector signed __int128, + vector signed __int128, + vector signed __int128); +vector unsigned __int128 vec_sube (vector unsigned __int128, + vector unsigned __int128, + vector unsigned __int128); + +vector signed int vec_subec (vector signed int, vector signed int, + vector signed int); +vector unsigned int vec_subec (vector unsigned int, vector unsigned int, + vector unsigned int); +vector signed __int128 vec_subec (vector signed __int128, + vector signed __int128, + vector signed __int128); +vector unsigned __int128 vec_subec (vector unsigned __int128, + vector unsigned __int128, + vector unsigned __int128); vector unsigned char vec_subs (vector bool char, vector unsigned char); vector unsigned char vec_subs (vector unsigned char, vector bool char); @@ -17173,6 +17351,13 @@ vector signed int vec_sums (vector signed int, vector signed int); vector float vec_trunc (vector float); +vector signed long long vec_unsigned (vector double); +vector signed int vec_unsigned (vector float); + +vector signed int vec_unsignede (vector double); +vector signed int vec_unsignedo (vector double); +vector signed int vec_unsigned2 (vector double, vector double); + vector signed short vec_unpackh (vector signed char); vector bool short vec_unpackh (vector bool char); vector signed int vec_unpackh (vector signed short); @@ -18175,6 +18360,9 @@ vector bool short vec_cmpne (vector bool short, vector bool short); vector bool int vec_cmpne (vector bool int, vector bool int); vector bool long long vec_cmpne (vector bool long long, vector bool long long); +vector float vec_extract_fp32_from_shorth (vector unsigned short); +vector float vec_extract_fp32_from_shortl (vector unsigned short); + vector long long vec_vctz (vector long long); vector unsigned long long vec_vctz (vector unsigned long long); vector int vec_vctz (vector int); @@ -18205,6 +18393,13 @@ vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char, vector signed char vec_insert4b (long long, vector signed char, const int); vector unsigned char vec_insert4b (long long, vector unsigned char, const int); +vector unsigned int vec_parity_lsbb (vector signed int); +vector unsigned int vec_parity_lsbb (vector unsigned int); +vector unsigned __int128 vec_parity_lsbb (vector signed __int128); +vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128); +vector unsigned long long vec_parity_lsbb (vector signed long long); +vector unsigned long long vec_parity_lsbb (vector unsigned long long); + vector int vec_vprtyb (vector int); vector unsigned int vec_vprtyb (vector unsigned int); vector long long vec_vprtyb (vector long long); @@ -18420,13 +18615,17 @@ of each element. If the ISA 3.0 instruction set additions (@option{-mcpu=power9}) are available: @smallexample +vector signed bool char vec_revb (vector signed char); vector signed char vec_revb (vector signed char); vector unsigned char vec_revb (vector unsigned char); +vector bool short vec_revb (vector bool short); vector short vec_revb (vector short); vector unsigned short vec_revb (vector unsigned short); +vector bool int vec_revb (vector bool int); vector int vec_revb (vector int); vector unsigned int vec_revb (vector unsigned int); vector float vec_revb (vector float); +vector bool long long vec_revb (vector bool long long); vector long long vec_revb (vector long long); vector unsigned long long vec_revb (vector unsigned long long); vector double vec_revb (vector double); @@ -19199,6 +19398,45 @@ v4hi __builtin_vis_fpminu16 (v4hi, v4hi); v2si __builtin_vis_fpminu32 (v2si, v2si); @end smallexample +When you use the @option{-mvis4b} switch, the VIS version 4.0B +built-in functions also become available: + +@smallexample +v8qi __builtin_vis_dictunpack8 (double, int); +v4hi __builtin_vis_dictunpack16 (double, int); +v2si __builtin_vis_dictunpack32 (double, int); + +long __builtin_vis_fpcmple8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int); + +long __builtin_vis_fpcmple16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int); + +long __builtin_vis_fpcmple32shl (v2si, v2si, int); +long __builtin_vis_fpcmpgt32shl (v2si, v2si, int); +long __builtin_vis_fpcmpeq32shl (v2si, v2si, int); +long __builtin_vis_fpcmpne32shl (v2si, v2si, int); + +long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpule32shl (v2si, v2si, int); +long __builtin_vis_fpcmpugt32shl (v2si, v2si, int); + +long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpde32shl (v2si, v2si, int); + +long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int); +long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int); +long __builtin_vis_fpcmpur32shl (v2si, v2si, int); +@end smallexample + @node SPU Built-in Functions @subsection SPU Built-in Functions diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi index 858521688b4..874d46440f4 100644 --- a/gcc/doc/generic.texi +++ b/gcc/doc/generic.texi @@ -2820,7 +2820,6 @@ This function cannot be used with namespaces that have @findex BINFO_TYPE @findex TYPE_FIELDS @findex TYPE_VFIELD -@findex TYPE_METHODS Besides namespaces, the other high-level scoping construct in C++ is the class. (Throughout this manual the term @dfn{class} is used to mean the @@ -2837,7 +2836,7 @@ macro to discern whether or not a particular type is a @code{class} as opposed to a @code{struct}. This macro will be true only for classes declared with the @code{class} tag. -Almost all non-function members are available on the @code{TYPE_FIELDS} +Almost all members are available on the @code{TYPE_FIELDS} list. Given one member, the next can be found by following the @code{TREE_CHAIN}. You should not depend in any way on the order in which fields appear on this list. All nodes on this list will be @@ -2849,7 +2848,11 @@ list, if the enumeration type was declared in the class. (Of course, the @code{TYPE_DECL} for the enumeration type will appear here as well.) There are no entries for base classes on this list. In particular, there is no @code{FIELD_DECL} for the ``base-class portion'' of an -object. +object. If a function member is overloaded, each of the overloaded +functions appears; no @code{OVERLOAD} nodes appear on the @code{TYPE_FIELDS} +list. Implicitly declared functions (including default constructors, +copy constructors, assignment operators, and destructors) will appear on +this list as well. The @code{TYPE_VFIELD} is a compiler-generated field used to point to virtual function tables. It may or may not appear on the @@ -2857,14 +2860,6 @@ virtual function tables. It may or may not appear on the @code{TYPE_VFIELD} just like all the entries on the @code{TYPE_FIELDS} list. -The function members are available on the @code{TYPE_METHODS} list. -Again, subsequent members are found by following the @code{TREE_CHAIN} -field. If a function is overloaded, each of the overloaded functions -appears; no @code{OVERLOAD} nodes appear on the @code{TYPE_METHODS} -list. Implicitly declared functions (including default constructors, -copy constructors, assignment operators, and destructors) will appear on -this list as well. - Every class has an associated @dfn{binfo}, which can be obtained with @code{TYPE_BINFO}. Binfos are used to represent base-classes. The binfo given by @code{TYPE_BINFO} is the degenerate case, whereby every diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e4ca1b4b4fc..5ae9dc4128d 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -294,7 +294,7 @@ Objective-C and Objective-C++ Dialects}. -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args @gol -Wmisleading-indentation -Wmissing-braces @gol -Wmissing-field-initializers -Wmissing-include-dirs @gol --Wno-multichar -Wnonnull -Wnonnull-compare @gol +-Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol -Wnull-dereference -Wodr -Wno-overflow -Wopenmp-simd @gol -Woverride-init-side-effects -Woverlength-strings @gol @@ -587,15 +587,14 @@ Objective-C and Objective-C++ Dialects}. -mgeneral-regs-only @gol -mcmodel=tiny -mcmodel=small -mcmodel=large @gol -mstrict-align @gol --momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol +-momit-leaf-frame-pointer @gol -mtls-dialect=desc -mtls-dialect=traditional @gol -mtls-size=@var{size} @gol --mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 @gol --mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 @gol --mlow-precision-recip-sqrt -mno-low-precision-recip-sqrt@gol --mlow-precision-sqrt -mno-low-precision-sqrt@gol --mlow-precision-div -mno-low-precision-div @gol --march=@var{name} -mcpu=@var{name} -mtune=@var{name}} +-mfix-cortex-a53-835769 -mfix-cortex-a53-843419 @gol +-mlow-precision-recip-sqrt -mlow-precision-sqrt -mlow-precision-div @gol +-mpc-relative-literal-loads @gol +-msign-return-address=@var{scope} @gol +-march=@var{name} -mcpu=@var{name} -mtune=@var{name} -moverride=@var{string}} @emph{Adapteva Epiphany Options} @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol @@ -632,6 +631,7 @@ Objective-C and Objective-C++ Dialects}. -mapcs-reentrant -mno-apcs-reentrant @gol -msched-prolog -mno-sched-prolog @gol -mlittle-endian -mbig-endian @gol +-mbe8 -mbe32 @gol -mfloat-abi=@var{name} @gol -mfp16-format=@var{name} -mthumb-interwork -mno-thumb-interwork @gol @@ -661,7 +661,8 @@ Objective-C and Objective-C++ Dialects}. @emph{AVR Options} @gccoptlist{-mmcu=@var{mcu} -mabsdata -maccumulate-args @gol -mbranch-cost=@var{cost} @gol --mcall-prologues -mint8 -mn_flash=@var{size} -mno-interrupts @gol +-mcall-prologues -mgas-isr-prologues -mint8 @gol +-mn_flash=@var{size} -mno-interrupts @gol -mrelax -mrmw -mstrict-X -mtiny-stack -mfract-convert-truncate @gol -mshort-calls -nodevicelib @gol -Waddr-space-convert -Wmisspelled-isr} @@ -1044,14 +1045,10 @@ See RS/6000 and PowerPC Options. -mquad-memory -mno-quad-memory @gol -mquad-memory-atomic -mno-quad-memory-atomic @gol -mcompat-align-parm -mno-compat-align-parm @gol --mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf @gol --mupper-regs-di -mno-upper-regs-di @gol --mupper-regs -mno-upper-regs @gol -mfloat128 -mno-float128 -mfloat128-hardware -mno-float128-hardware @gol -mgnu-attribute -mno-gnu-attribute @gol -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol --mstack-protector-guard-offset=@var{offset} @gol --mlra -mno-lra} +-mstack-protector-guard-offset=@var{offset}} @emph{RX Options} @gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol @@ -1125,9 +1122,10 @@ See RS/6000 and PowerPC Options. -muser-mode -mno-user-mode @gol -mv8plus -mno-v8plus -mvis -mno-vis @gol -mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol --mcbcond -mno-cbcond -mfmaf -mno-fmaf @gol --mpopc -mno-popc -msubxc -mno-subxc@gol --mfix-at697f -mfix-ut699 @gol +-mvis4 -mno-vis4 -mvis4b -mno-vis4b @gol +-mcbcond -mno-cbcond -mfmaf -mno-fmaf -mfsmuld -mno-fsmuld @gol +-mpopc -mno-popc -msubxc -mno-subxc @gol +-mfix-at697f -mfix-ut699 -mfix-ut700 -mfix-gr712rc @gol -mlra -mno-lra} @emph{SPU Options} @@ -3842,6 +3840,7 @@ Options} and @ref{Objective-C and Objective-C++ Dialect Options}. -Wmemset-transposed-args @gol -Wmisleading-indentation @r{(only for C/C++)} @gol -Wmissing-braces @r{(only for C/ObjC)} @gol +-Wmultistatement-macros @gol -Wnarrowing @r{(only for C++)} @gol -Wnonnull @gol -Wnonnull-compare @gol @@ -4514,6 +4513,32 @@ This warning is enabled by @option{-Wall}. @opindex Wno-missing-include-dirs Warn if a user-supplied include directory does not exist. +@item -Wmultistatement-macros +@opindex Wmultistatement-macros +@opindex Wno-multistatement-macros +Warn about unsafe multiple statement macros that appear to be guarded +by a clause such as @code{if}, @code{else}, @code{for}, @code{switch}, or +@code{while}, in which only the first statement is actually guarded after +the macro is expanded. + +For example: + +@smallexample +#define DOIT x++; y++ +if (c) + DOIT; +@end smallexample + +will increment @code{y} unconditionally, not just when @code{c} holds. +The can usually be fixed by wrapping the macro in a do-while loop: +@smallexample +#define DOIT do @{ x++; y++; @} while (0) +if (c) + DOIT; +@end smallexample + +This warning is enabled by @option{-Wall} in C and C++. + @item -Wparentheses @opindex Wparentheses @opindex Wno-parentheses @@ -8672,7 +8697,7 @@ into separate sections of the assembly and @file{.o} files, to improve paging and cache locality performance. This optimization is automatically turned off in the presence of -exception handling, for linkonce sections, for functions with a user-defined +exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined section attribute and on any architecture that does not support named sections. When @option{-fsplit-stack} is used this option is not enabled by default (to avoid linker errors), but may be enabled @@ -11493,6 +11518,34 @@ of the function name, it is considered to be a match. For C99 and C++ extended identifiers, the function name must be given in UTF-8, not using universal character names. +@item -fpatchable-function-entry=@var{N}[,@var{M}] +@opindex fpatchable-function-entry +Generate @var{N} NOPs right at the beginning +of each function, with the function entry point before the @var{M}th NOP. +If @var{M} is omitted, it defaults to @code{0} so the +function entry points to the address just at the first NOP. +The NOP instructions reserve extra space which can be used to patch in +any desired instrumentation at run time, provided that the code segment +is writable. The amount of space is controllable indirectly via +the number of NOPs; the NOP instruction used corresponds to the instruction +emitted by the internal GCC back-end interface @code{gen_nop}. This behavior +is target-specific and may also depend on the architecture variant and/or +other compilation options. + +For run-time identification, the starting addresses of these areas, +which correspond to their respective function entries minus @var{M}, +are additionally collected in the @code{__patchable_function_entries} +section of the resulting binary. + +Note that the value of @code{__attribute__ ((patchable_function_entry +(N,M)))} takes precedence over command-line option +@option{-fpatchable-function-entry=N,M}. This can be used to increase +the area size or to remove it completely on a single function. +If @code{N=0}, no pad location is recorded. + +The NOP instructions are inserted at---and maybe before, depending on +@var{M}---the function entry address, even before the prologue. + @end table @@ -14055,7 +14108,7 @@ support for the ARMv8.2-A architecture extensions. The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler support for the ARMv8.1-A architecture extension. In particular, it -enables the @samp{+crc} and @samp{+lse} features. +enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features. The value @samp{native} is available on native AArch64 GNU/Linux and causes the compiler to pick the architecture of the host system. This @@ -14131,8 +14184,10 @@ across releases. This option is only intended to be useful when developing GCC. @item -mpc-relative-literal-loads +@itemx -mno-pc-relative-literal-loads @opindex mpc-relative-literal-loads -Enable PC-relative literal loads. With this option literal pools are +@opindex mno-pc-relative-literal-loads +Enable or disable PC-relative literal loads. With this option literal pools are accessed using a single instruction and emitted after each function. This limits the maximum size of functions to 1MB. This is enabled by default for @option{-mcmodel=tiny}. @@ -14171,8 +14226,15 @@ instructions. This is on by default for all possible values for options @item lse Enable Large System Extension instructions. This is on by default for @option{-march=armv8.1-a}. +@item rdma +Enable Round Double Multiply Accumulate instructions. This is on by default +for @option{-march=armv8.1-a}. @item fp16 Enable FP16 extension. This also enables floating-point instructions. +@item rcpc +Enable the RcPc extension. This does not change code generation from GCC, +but is passed on to the assembler, enabling inline asm statements to use +instructions from the RcPc extension. @end table @@ -14871,7 +14933,7 @@ Enable pre-reload use of the @code{cbranchsi} pattern. @item -mexpand-adddi @opindex mexpand-adddi Expand @code{adddi3} and @code{subdi3} at RTL generation time into -@code{add.f}, @code{adc} etc. +@code{add.f}, @code{adc} etc. This option is deprecated. @item -mindexed-loads @opindex mindexed-loads @@ -15161,7 +15223,16 @@ the default for all standard configurations. Generate code for a processor running in big-endian mode; the default is to compile code for a little-endian processor. -@item -march=@var{name@r{[}+extension@dots{}@r{]}} +@item -mbe8 +@itemx -mbe32 +@opindex mbe8 +When linking a big-endian image select between BE8 and BE32 formats. +The option has no effect for little-endian images and is ignored. The +default is dependent on the selected target architecture. For ARMv6 +and later architectures the default is BE8, for older architectures +the default is BE32. BE32 format has been deprecated by ARM. + +@item -march=@var{name}@r{[}+extension@dots{}@r{]} @opindex march This specifies the name of the target ARM architecture. GCC uses this name to determine what kind of instructions it can emit when generating @@ -15176,6 +15247,7 @@ Permissible names are: @samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, @samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv7-r}, +@samp{armv8-r}, @samp{armv6-m}, @samp{armv6s-m}, @samp{armv7-m}, @samp{armv7e-m}, @samp{armv8-m.base}, @samp{armv8-m.main}, @@ -15442,7 +15514,22 @@ The single- and double-precision floating-point instructions. @item +nofp Disable the floating-point extension. +@end table +@item armv8-r +@table @samp +@item +crc +The Cyclic Redundancy Check (CRC) instructions. +@item +fp.sp +The single-precision FPv5 floating-point instructions. +@item +simd +The ARMv8 Advanced SIMD and floating-point instructions. +@item +crypto +The cryptographic instructions. +@item +nocrypto +Disable the cryptographic isntructions. +@item +nofp +Disable the floating-point, Advanced SIMD and cryptographic instructions. @end table @end table @@ -15477,9 +15564,10 @@ Permissible names are: @samp{arm2}, @samp{arm250}, @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s}, @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17}, -@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57}, -@samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-r4}, -@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8}, +@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, +@samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, +@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, +@samp{cortex-r8}, @samp{cortex-r52}, @samp{cortex-m33}, @samp{cortex-m23}, @samp{cortex-m7}, @@ -15502,7 +15590,8 @@ Additionally, this option can specify that GCC should tune the performance of the code for a big.LITTLE system. Permissible names are: @samp{cortex-a15.cortex-a7}, @samp{cortex-a17.cortex-a7}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53}, -@samp{cortex-a72.cortex-a35}, @samp{cortex-a73.cortex-a53}. +@samp{cortex-a72.cortex-a35}, @samp{cortex-a73.cortex-a53}, +@samp{cortex-a75.cortex-a55}. @option{-mtune=generic-@var{arch}} specifies that GCC should tune the performance for a blend of processors within architecture @var{arch}. @@ -15519,7 +15608,7 @@ of the build computer. At present, this feature is only supported on GNU/Linux, and not all architectures are recognized. If the auto-detect is unsuccessful the option has no effect. -@item -mcpu=@var{name@r{[}+extension@dots{}@r{]}} +@item -mcpu=@var{name}@r{[}+extension@dots{}@r{]} @opindex mcpu This specifies the name of the target ARM processor. GCC uses this name to derive the name of the target ARM architecture (as if specified @@ -15563,17 +15652,25 @@ Disables the floating-point and SIMD instructions on @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17}, @samp{cortex-a15.cortex-a7}, -@samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35} -and @samp{cortex-a53}. +@samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35}, +@samp{cortex-a53} and @samp{cortex-a55}. @item +nofp.dp Disables the double-precision component of the floating-point instructions -on @samp{cortex-r5} and @samp{cortex-m7}. +on @samp{cortex-r5}, @samp{cortex-r52} and @samp{cortex-m7}. @item +nosimd Disables the SIMD (but not floating-point) instructions on @samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7} and @samp{cortex-a9}. + +@item +crypto +Enables the cryptographic instructions on @samp{cortex-a32}, +@samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, @samp{cortex-a57}, +@samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, @samp{exynos-m1}, +@samp{xgene1}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53}, +@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53} and +@samp{cortex-a75.cortex-a55}. @end table Additionally the @samp{generic-armv7-a} pseudo target defaults to @@ -15641,6 +15738,8 @@ incompatible. Code compiled with one value cannot necessarily expect to work with code or libraries compiled with another value, if they exchange information using structures or unions. +This option is deprecated. + @item -mabort-on-noreturn @opindex mabort-on-noreturn Generate a call to the function @code{abort} at the end of a @@ -15918,6 +16017,16 @@ integers. The default branch cost is 0. Functions prologues/epilogues are expanded as calls to appropriate subroutines. Code size is smaller. +@item -mgas-isr-prologues +@opindex mgas-isr-prologues +Interrupt service routines (ISRs) may use the @code{__gcc_isr} pseudo +instruction supported by GNU Binutils. +If this option is on, the feature can still be disabled for individual +ISRs by means of the @ref{AVR Function Attributes,,@code{no_gccisr}} +function attribute. This feature is activated per default +if optimization is on (but not with @option{-Og}, @pxref{Optimize Options}), +and if GNU Binutils support @w{@uref{https://sourceware.org/PR21683,PR21683}}. + @item -mint8 @opindex mint8 Assume @code{int} to be 8-bit integer. This affects the sizes of all types: a @@ -21731,11 +21840,6 @@ This switch enables or disables the generation of ISEL instructions. This switch has been deprecated. Use @option{-misel} and @option{-mno-isel} instead. -@item -mlra -@opindex mlra -Enable Local Register Allocation. By default the port uses LRA. -(i.e. @option{-mno-lra}). - @item -mspe @itemx -mno-spe @opindex mspe @@ -21819,50 +21923,6 @@ Generate code that uses (does not use) the atomic quad word memory instructions. The @option{-mquad-memory-atomic} option requires use of 64-bit mode. -@item -mupper-regs-di -@itemx -mno-upper-regs-di -@opindex mupper-regs-di -@opindex mno-upper-regs-di -Generate code that uses (does not use) the scalar instructions that -target all 64 registers in the vector/scalar floating point register -set that were added in version 2.06 of the PowerPC ISA when processing -integers. @option{-mupper-regs-di} is turned on by default if you use -any of the @option{-mcpu=power7}, @option{-mcpu=power8}, -@option{-mcpu=power9}, or @option{-mvsx} options. - -@item -mupper-regs-df -@itemx -mno-upper-regs-df -@opindex mupper-regs-df -@opindex mno-upper-regs-df -Generate code that uses (does not use) the scalar double precision -instructions that target all 64 registers in the vector/scalar -floating point register set that were added in version 2.06 of the -PowerPC ISA. @option{-mupper-regs-df} is turned on by default if you -use any of the @option{-mcpu=power7}, @option{-mcpu=power8}, -@option{-mcpu=power9}, or @option{-mvsx} options. - -@item -mupper-regs-sf -@itemx -mno-upper-regs-sf -@opindex mupper-regs-sf -@opindex mno-upper-regs-sf -Generate code that uses (does not use) the scalar single precision -instructions that target all 64 registers in the vector/scalar -floating point register set that were added in version 2.07 of the -PowerPC ISA. @option{-mupper-regs-sf} is turned on by default if you -use either of the @option{-mcpu=power8}, @option{-mpower8-vector}, or -@option{-mcpu=power9} options. - -@item -mupper-regs -@itemx -mno-upper-regs -@opindex mupper-regs -@opindex mno-upper-regs -Generate code that uses (does not use) the scalar -instructions that target all 64 registers in the vector/scalar -floating point register set, depending on the model of the machine. - -If the @option{-mno-upper-regs} option is used, it turns off both -@option{-mupper-regs-sf} and @option{-mupper-regs-df} options. - @item -mfloat128 @itemx -mno-float128 @opindex mfloat128 @@ -23835,7 +23895,7 @@ for machine type @var{cpu_type}. Supported values for @var{cpu_type} are @samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, -@samp{niagara3}, @samp{niagara4} and @samp{niagara7}. +@samp{niagara3}, @samp{niagara4}, @samp{niagara7} and @samp{m8}. Native Solaris and GNU/Linux toolchains also support the value @samp{native}, which selects the best architecture option for the host processor. @@ -23863,7 +23923,8 @@ f930, f934, sparclite86x tsc701 @item v9 -ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 +ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4, +niagara7, m8 @end table By default (unless configured otherwise), GCC generates code for the V7 @@ -23907,7 +23968,8 @@ additionally optimizes it for Sun UltraSPARC T2 chips. With UltraSPARC T3 chips. With @option{-mcpu=niagara4}, the compiler additionally optimizes it for Sun UltraSPARC T4 chips. With @option{-mcpu=niagara7}, the compiler additionally optimizes it for -Oracle SPARC M7 chips. +Oracle SPARC M7 chips. With @option{-mcpu=m8}, the compiler +additionally optimizes it for Oracle M8 chips. @item -mtune=@var{cpu_type} @opindex mtune @@ -23922,8 +23984,8 @@ that select a particular CPU implementation. Those are @samp{leon3}, @samp{leon3v7}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3}, -@samp{niagara4} and @samp{niagara7}. With native Solaris and -GNU/Linux toolchains, @samp{native} can also be used. +@samp{niagara4}, @samp{niagara7} and @samp{m8}. With native Solaris +and GNU/Linux toolchains, @samp{native} can also be used. @item -mv8plus @itemx -mno-v8plus @@ -23971,6 +24033,18 @@ default is @option{-mvis4} when targeting a cpu that supports such instructions, such as niagara-7 and later. Setting @option{-mvis4} also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}. +@item -mvis4b +@itemx -mno-vis4b +@opindex mvis4b +@opindex mno-vis4b +With @option{-mvis4b}, GCC generates code that takes advantage of +version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus +the additional VIS instructions introduced in the Oracle SPARC +Architecture 2017. The default is @option{-mvis4b} when targeting a +cpu that supports such instructions, such as m8 and later. Setting +@option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3}, +@option{-mvis2} and @option{-mvis}. + @item -mcbcond @itemx -mno-cbcond @opindex mcbcond @@ -23989,6 +24063,15 @@ Fused Multiply-Add Floating-point instructions. The default is @option{-mfmaf} when targeting a CPU that supports such instructions, such as Niagara-3 and later. +@item -mfsmuld +@itemx -mno-fsmuld +@opindex mfsmuld +@opindex mno-fsmuld +With @option{-mfsmuld}, GCC generates code that takes advantage of the +Floating-point Multiply Single to Double (FsMULd) instruction. The default is +@option{-mfsmuld} when targeting a CPU supporting the architecture versions V8 +or V9 with FPU except @option{-mcpu=leon}. + @item -mpopc @itemx -mno-popc @opindex mpopc @@ -24016,6 +24099,16 @@ processor (which corresponds to erratum #13 of the AT697E processor). @opindex mfix-ut699 Enable the documented workarounds for the floating-point errata and the data cache nullify errata of the UT699 processor. + +@item -mfix-ut700 +@opindex mfix-ut700 +Enable the documented workaround for the back-to-back store errata of +the UT699E/UT700 processor. + +@item -mfix-gr712rc +@opindex mfix-gr712rc +Enable the documented workaround for the back-to-back store errata of +the GR712RC processor. @end table These @samp{-m} options are supported in addition to the above diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index b02e5a16bfe..6e2799a1ce9 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -4022,9 +4022,10 @@ are stored in the @code{REG_NOTES} field of an insn. @item REG_BR_PROB This is used to specify the ratio of branches to non-branches of a branch insn according to the profile data. The note is represented -as an @code{int_list} expression whose integer value is between 0 and -REG_BR_PROB_BASE. Larger values indicate a higher probability that -the branch will be taken. +as an @code{int_list} expression whose integer value is an encoding +of @code{profile_probability} type. @code{profile_probability} provide +member function @code{from_reg_br_prob_note} and @code{to_reg_br_prob_note} +to extract and store the probability into the RTL encoding. @findex REG_BR_PRED @item REG_BR_PRED diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 7f5c2cf58c4..85af8778167 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1582,6 +1582,12 @@ Test system supports executing NEON v2 instructions. ARM Target supports @code{-mfpu=neon -mfloat-abi=softfp} or compatible options. Some multilibs may be incompatible with these options. +@item arm_neon_ok_no_float_abi +@anchor{arm_neon_ok_no_float_abi} +ARM Target supports NEON with @code{-mfpu=neon}, but without any +-mfloat-abi= option. Some multilibs may be incompatible with this +option. + @item arm_neonv2_ok @anchor{arm_neonv2_ok} ARM Target supports @code{-mfpu=neon-vfpv4 -mfloat-abi=softfp} or compatible @@ -2305,6 +2311,11 @@ the codeset to convert to. Skip the test if the target does not support profiling with option @var{profopt}. +@item dg-require-stack-check @var{check} +Skip the test if the target does not support the @code{-fstack-check} +option. If @var{check} is @code{""}, support for @code{-fstack-check} +is checked, for @code{-fstack-check=("@var{check}")} otherwise. + @item dg-require-visibility @var{vis} Skip the test if the target does not support the @code{visibility} attribute. If @var{vis} is @code{""}, support for @code{visibility("hidden")} is diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 39302f3e883..23e85c7afea 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -4573,6 +4573,15 @@ will select the smallest suitable mode. This section describes the macros that output function entry (@dfn{prologue}) and exit (@dfn{epilogue}) code. +@deftypefn {Target Hook} void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE *@var{file}, unsigned HOST_WIDE_INT @var{patch_area_size}, bool @var{record_p}) +Generate a patchable area at the function start, consisting of +@var{patch_area_size} NOP instructions. If the target supports named +sections and if @var{record_p} is true, insert a pointer to the current +location in the table of patchable functions. The default implementation +of the hook places the table of pointers in the special section named +@code{__patchable_function_entries}. +@end deftypefn + @deftypefn {Target Hook} void TARGET_ASM_FUNCTION_PROLOGUE (FILE *@var{file}, HOST_WIDE_INT @var{size}) If defined, a function that outputs the assembler code for entry to a function. The prologue is responsible for setting up the stack frame, @@ -5172,7 +5181,7 @@ returns bounds for returned pointers. Arguments meaning is similar to @code{TARGET_FUNCTION_VALUE}. @end deftypefn -@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARG_BOUNDS (cumulative_args_t @var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int *@var{pretend_args_size}, int @var{second_time}) +@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARG_BOUNDS (cumulative_args_t @var{args_so_far}, machine_mode @var{mode}, tree @var{type}, int *@var{pretend_args_size}, int @var{second_time}) Use it to store bounds for anonymous register arguments stored into the stack. Arguments meaning is similar to @code{TARGET_SETUP_INCOMING_VARARGS}. @@ -11346,7 +11355,7 @@ returns upper bound of bounds @var{b}. @deftypefn {Target Hook} tree TARGET_CHKP_BOUND_TYPE (void) Return type to be used for bounds @end deftypefn -@deftypefn {Target Hook} {enum machine_mode} TARGET_CHKP_BOUND_MODE (void) +@deftypefn {Target Hook} machine_mode TARGET_CHKP_BOUND_MODE (void) Return mode to be used for bounds. @end deftypefn @deftypefn {Target Hook} tree TARGET_CHKP_MAKE_BOUNDS_CONSTANT (HOST_WIDE_INT @var{lb}, HOST_WIDE_INT @var{ub}) diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 98f2e6bce5f..6df08a2c477 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -3650,6 +3650,8 @@ will select the smallest suitable mode. This section describes the macros that output function entry (@dfn{prologue}) and exit (@dfn{epilogue}) code. +@hook TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY + @hook TARGET_ASM_FUNCTION_PROLOGUE @hook TARGET_ASM_FUNCTION_END_PROLOGUE |