From 7dba8395e27f52d22aa11ff2fc147858e34f2a9d Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 5 Feb 2003 14:37:54 -0800 Subject: defaults.h (CLZ_DEFINED_VALUE_AT_ZERO): New. * defaults.h (CLZ_DEFINED_VALUE_AT_ZERO): New. (CTZ_DEFINED_VALUE_AT_ZERO): New. * doc/rtl.texi, doc/tm.texi: Document them. * combine.c (nonzero_bits) [CLZ, CTZ]: Handle the definedness of the value at zero properly. * fold-const.c (tree_expr_nonnegative_p): Likewise. * simplify-rtx.c (simplify_unary_operation): Likewise. * config/alpha/alpha.h (CLZ_DEFINED_VALUE_AT_ZERO): New. (CTZ_DEFINED_VALUE_AT_ZERO): New. * config/arm/arm.c (TARGET_INIT_BUILTINS): Remove. (TARGET_EXPAND_BUILTIN): Remove. (def_builtin, arm_init_builtins, arm_expand_builtin): Remove. * config/arm/arm.h (CLZ_DEFINED_VALUE_AT_ZERO): New. (enum arm_builtins): Remove. * config/arm/arm.md (UNSPEC_CLZ): Remove. (clzsi2): Rename from clz; use clz instead of unspec. (ctzsi2): New. * config/arm/arm-protos.h: Update. From-SVN: r62453 --- gcc/doc/rtl.texi | 6 ++++-- gcc/doc/tm.texi | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) (limited to 'gcc/doc') diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 1698517..7e696fa 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -1850,7 +1850,8 @@ valid. @item (clz:@var{m} @var{x}) Represents the number of leading 0-bits in @var{x}, represented as an integer of mode @var{m}, starting at the most significant bit position. -If @var{x} is zero, the value is undefined. Note that this is one of +If @var{x} is zero, the value is determined by +@code{CLZ_DEFINED_VALUE_AT_ZERO}. Note that this is one of the few expressions that is not invariant under widening. The mode of @var{x} will usually be an integer mode. @@ -1858,7 +1859,8 @@ the few expressions that is not invariant under widening. The mode of @item (ctz:@var{m} @var{x}) Represents the number of trailing 0-bits in @var{x}, represented as an integer of mode @var{m}, starting at the least significant bit position. -If @var{x} is zero, the value is undefined. Except for this case, +If @var{x} is zero, the value is determined by +@code{CTZ_DEFINED_VALUE_AT_ZERO}. Except for this case, @code{ctz(x)} is equivalent to @code{ffs(@var{x}) - 1}. The mode of @var{x} will usually be an integer mode. diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b5cb240..0abf394 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -8800,6 +8800,25 @@ Define this macro on machine that have comparison operations that return floating-point values. If there are no such operations, do not define this macro. +@findex CLZ_DEFINED_VALUE_AT_ZERO +@findex CTZ_DEFINED_VALUE_AT_ZERO +@item CLZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value}) +@itemx CTZ_DEFINED_VALUE_AT_ZERO (@var{mode}, @var{value}) +A C expression that evaluates to true if the architecture defines a value +for @code{clz} or @code{ctz} with a zero operand. If so, @var{value} +should be set to this value. If this macro is not defined, the value of +@code{clz} or @code{ctz} is assumed to be undefined. + +This macro must be defined if the target's expansion for @code{ffs} +relies on a particular value to get correct results. Otherwise it +is not necessary, though it may be used to optimize some corner cases. + +Note that regardless of this macro the ``definedness'' of @code{clz} +and @code{ctz} at zero do @emph{not} extend to the builtin functions +visible to the user. Thus one may be free to adjust the value at will +to match the target expansion of these operations without fear of +breaking the API. + @findex Pmode @item Pmode An alias for the machine mode for pointers. On most machines, define -- cgit v1.1