Richard,
   The ___divdc3 symbol on Snow Leopard in libSystem is less accurate
than that in FSF libgcc (PR42333). We plan to use DECLARE_LIBRARY_RENAMES
to provide an alternative symbol ___ieee_divdc3 to access the FSF libgcc
___divdc3 symbol when libSystem.dylib is linked first and 
!flag_unsafe_math_optimization.
We originally planned to use a darwin_patch_divdc3() modelled directly on
darwin_patch_builtin() in gcc/config/darwin.c, however the absence of a listing
of divdc3 in gcc/builtins.def makes the syntax...

tree fn = built_in_decls[BUILT_IN_DIVDC3];

impossible. I noticed you did the original commit for the current complex
division functions...

2005-02-11  Richard Henderson  <r...@redhat.com>

        * tree-complex.c (expand_complex_libcall): New.
        (expand_complex_multiplication): Use it for c99 compliance.
        (expand_complex_division): Likewise.
        * fold-const.c (fold_complex_add, fold_complex_mult): New.
        (fold): Call them.
        * builtins.c (built_in_names): Remove const.
        * tree.c (build_common_builtin_nodes): Build complex arithmetic
        builtins.
        * tree.h (BUILT_IN_COMPLEX_MUL_MIN, BUILT_IN_COMPLEX_MUL_MAX): New.
        (BUILT_IN_COMPLEX_DIV_MIN, BUILT_IN_COMPLEX_DIV_MAX): New.
        (built_in_names): Remove const.
        * c-common.c (c_common_type_for_mode): Handle complex modes.
        * flags.h, toplev.c (flag_complex_method): Rename from
        flag_complex_divide_method.
        * libgcc2.c (__divsc3, __divdc3, __divxc3, __divtc3,
        __mulsc3, __muldc3, __mulxc3, __multc3): New.
        * libgcc2.h: Declare them.
        * libgcc-std.ver: Export them.
        * mklibgcc.in (lib2funcs): Build them.

I also noticed...

#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
enum built_in_function
{
#include "builtins.def"

  /* Complex division routines in libgcc.  These are done via builtins
     because emit_library_call_value can't handle complex values.  */
  BUILT_IN_COMPLEX_MUL_MIN,
  BUILT_IN_COMPLEX_MUL_MAX
    = BUILT_IN_COMPLEX_MUL_MIN
      + MAX_MODE_COMPLEX_FLOAT
      - MIN_MODE_COMPLEX_FLOAT,

  BUILT_IN_COMPLEX_DIV_MIN,
  BUILT_IN_COMPLEX_DIV_MAX
    = BUILT_IN_COMPLEX_DIV_MIN
      + MAX_MODE_COMPLEX_FLOAT
      - MIN_MODE_COMPLEX_FLOAT,

  /* Upper bound on non-language-specific builtins.  */
  END_BUILTINS
};
#undef DEF_BUILTIN

what is the correct value is use for the enum entry of the ___divdc3
symbol? Is it END_BUILTINS-1 or END_BUILTINS-2? Thanks in advance for
any clarifications.
            Jack

Reply via email to