diff options
Diffstat (limited to 'gcc/doc/tm.texi')
-rw-r--r-- | gcc/doc/tm.texi | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 2672485..e21f727 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -8749,6 +8749,31 @@ the implied truncation of the shift instructions. You need not define this macro if it would always have the value of zero. @end defmac +@anchor{TARGET_SHIFT_TRUNCATION_MASK} +@deftypefn {Target Hook} int TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode @var{mode}) +This function describes how the standard shift patterns for @var{mode} +deal with shifts by negative amounts or by more than the width of the mode. +@xref{shift patterns}. + +On many machines, the shift patterns will apply a mask @var{m} to the +shift count, meaning that a fixed-width shift of @var{x} by @var{y} is +equivalent to an arbitrary-width shift of @var{x} by @var{y & m}. If +this is true for mode @var{mode}, the function should return @var{m}, +otherwise it should return 0. A return value of 0 indicates that no +particular behavior is guaranteed. + +Note that, unlike @code{SHIFT_COUNT_TRUNCATED}, this function does +@emph{not} apply to general shift rtxes; it applies only to instructions +that are generated by the named shift patterns. + +The default implementation of this function returns +@code{GET_MODE_BITSIZE (@var{mode}) - 1} if @code{SHIFT_COUNT_TRUNCATED} +and 0 otherwise. This definition is always safe, but if +@code{SHIFT_COUNT_TRUNCATED} is false, and some shift patterns +nevertheless truncate the shift count, you may get better code +by overriding it. +@end deftypefn + @defmac TRULY_NOOP_TRUNCATION (@var{outprec}, @var{inprec}) A C expression which is nonzero if on this machine it is safe to ``convert'' an integer of @var{inprec} bits to one of @var{outprec} |