This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: simple minded mapping on darwin?


Andrew,
   Is this the only case that fails for c or c++?
As far as I can tell all the other library routines
accessed through the standard calls seemed to
get the correct symbol (which I don't think is
surprising looking at the contents of 
/usr/include/architecture/ppc/math.h). This compares
with long doubles in gfortran which is broken
pretty much across the board.
   Can you explain where in the fortran front-end
the preset values from your patch are supposed to
be used? I ask because when I had printf's
inserted in the section...

darwin_patch_builtin (int fncode)
{
  tree fn = built_in_decls[fncode];
  char *newname;
  tree sym;
  tree fn1;
  
  if (fn)
    {
      sym = DECL_ASSEMBLER_NAME (fn);
      newname = ACONCAT ((IDENTIFIER_POINTER (sym),"$LDBL128", NULL));
      sym = get_identifier (newname);
      SET_DECL_ASSEMBLER_NAME (fn, sym);
      printf("patched sym = %s\n",IDENTIFIER_POINTER (sym));
    }
  
  fn1 = implicit_built_in_decls[fncode];
  if (fn1 && fn1 != fn)
    {
      sym = DECL_ASSEMBLER_NAME (fn1);
      newname = ACONCAT ((IDENTIFIER_POINTER (sym),"$LDBL128", NULL));
      sym = get_identifier (newname);
      SET_DECL_ASSEMBLER_NAME (fn1, sym);
      printf("patched sym = %s\n", IDENTIFIER_POINTER (sym));
    }
}

I saw something interesting when I used the patch I am suggesting at
the same time. When building say _exp_r16.f90 in the generated fortran
intrinsics, I saw...

patched sym = acoshl$LDBL128
patched sym = acosl$LDBL128
patched sym = asinhl$LDBL128
patched sym = asinl$LDBL128
patched sym = atan2l$LDBL128
patched sym = atanhl$LDBL128
patched sym = atanl$LDBL128
patched sym = cbrtl$LDBL128
patched sym = ceill$LDBL128
patched sym = copysignl$LDBL128
patched sym = coshl$LDBL128
patched sym = cosl$LDBL128
patched sym = erfcl$LDBL128
patched sym = erfl$LDBL128
patched sym = exp2l$LDBL128
patched sym = expl$LDBL128
patched sym = expm1l$LDBL128
patched sym = fabsl$LDBL128
patched sym = fdiml$LDBL128
patched sym = floorl$LDBL128
patched sym = fmal$LDBL128
patched sym = fmaxl$LDBL128
patched sym = fminl$LDBL128
patched sym = fmodl$LDBL128
patched sym = frexpl$LDBL128
patched sym = hypotl$LDBL128
patched sym = ilogbl$LDBL128
patched sym = ldexpl$LDBL128
patched sym = lgammal$LDBL128
patched sym = llrintl$LDBL128
patched sym = llroundl$LDBL128
patched sym = log10l$LDBL128
patched sym = log1pl$LDBL128
patched sym = log2l$LDBL128
patched sym = logbl$LDBL128
patched sym = logl$LDBL128
patched sym = lrintl$LDBL128
patched sym = lroundl$LDBL128
patched sym = modfl$LDBL128
patched sym = nearbyintl$LDBL128
patched sym = nextafterl$LDBL128
patched sym = nexttowardl$LDBL128
patched sym = powl$LDBL128
patched sym = remainderl$LDBL128
patched sym = remquol$LDBL128
patched sym = rintl$LDBL128
patched sym = roundl$LDBL128
patched sym = scalblnl$LDBL128
patched sym = scalbnl$LDBL128
patched sym = sinhl$LDBL128
patched sym = sinl$LDBL128
patched sym = sqrtl$LDBL128
patched sym = tanhl$LDBL128
patched sym = tanl$LDBL128
patched sym = tgammal$LDBL128
patched sym = truncl$LDBL128
patched sym = cabsl$LDBL128
patched sym = cacoshl$LDBL128
patched sym = cacosl$LDBL128
patched sym = cargl$LDBL128
patched sym = casinhl$LDBL128
patched sym = casinl$LDBL128
patched sym = catanhl$LDBL128
patched sym = catanl$LDBL128
patched sym = ccoshl$LDBL128
patched sym = ccosl$LDBL128
patched sym = cexpl$LDBL128
patched sym = cimagl$LDBL128
patched sym = clogl$LDBL128
patched sym = cpowl$LDBL128
patched sym = conjl$LDBL128
patched sym = cprojl$LDBL128
patched sym = creall$LDBL128
patched sym = csinhl$LDBL128
patched sym = csinl$LDBL128
patched sym = csqrtl$LDBL128
patched sym = ctanhl$LDBL128
patched sym = ctanl$LDBL128
patched sym = acoshl$LDBL128$LDBL128
patched sym = acosl$LDBL128$LDBL128
patched sym = asinhl$LDBL128$LDBL128
patched sym = asinl$LDBL128$LDBL128
patched sym = atan2l$LDBL128$LDBL128
patched sym = atanhl$LDBL128$LDBL128
patched sym = atanl$LDBL128$LDBL128
patched sym = copysignl$LDBL128
patched sym = coshl$LDBL128$LDBL128
patched sym = cosl$LDBL128$LDBL128
patched sym = erfcl$LDBL128$LDBL128
patched sym = erfl$LDBL128$LDBL128
patched sym = expl$LDBL128$LDBL128
patched sym = fmodl$LDBL128
patched sym = log10l$LDBL128$LDBL128
patched sym = logl$LDBL128$LDBL128
patched sym = powl$LDBL128
patched sym = roundl$LDBL128
patched sym = sinhl$LDBL128$LDBL128
patched sym = sinl$LDBL128$LDBL128
patched sym = sqrtl$LDBL128$LDBL128
patched sym = tanhl$LDBL128$LDBL128
patched sym = tanl$LDBL128$LDBL128
patched sym = truncl$LDBL128
patched sym = cabsl$LDBL128
patched sym = cacosl$LDBL128$LDBL128
patched sym = casinl$LDBL128$LDBL128
patched sym = catanl$LDBL128$LDBL128
patched sym = ccoshl$LDBL128$LDBL128
patched sym = ccosl$LDBL128$LDBL128
patched sym = cexpl$LDBL128$LDBL128
patched sym = clogl$LDBL128$LDBL128
patched sym = csinhl$LDBL128$LDBL128
patched sym = csinl$LDBL128$LDBL128
patched sym = csqrtl$LDBL128$LDBL128
patched sym = ctanhl$LDBL128$LDBL128
patched sym = ctanl$LDBL128$LDBL128

This compares to without the change to gcc/fortran/f95-lang.c which
produced no double instances of $LDBL128$LDBL128. I'm not sure
what to make of this yet but it might be a clue as to why the
original patch doesn't work anymore.
              Jack
ps I don't believe your original patch works for the c testcase
you showed either. So it seems broken across the board.




On Tue, May 29, 2007 at 09:55:41PM -0700, Andrew Pinski wrote:
> 
> This is a bad idea.  My patch actually worked at one point.  Anyways
> your patch does not work for the C (or C++) case of:
> int main(void)
> {
>  long double a =10.0L;
>  __builtin_printf("%Lf\t%Lf\n", a,a);
> }
> 
> Thanks,
> Andrew Pinski


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]