On 25.11.20 23:02, Maciej W. Rozycki wrote:
Well, it does not link, for the somewhat unsurprising reason of a missing libgfortran runtime. I have modified the program with whatever little Fortran skills I gained a while ago to get something that can be parseable for a human being in the assembly form:
You could also try -fdump-tree-original or -fdump-parse-tree which might be a bit more readable than assembler – at least it avoids the problem of D-floating format.
real(8) :: h = HUGE(1.0) real(8) :: e = EPSILON(1.0) print *,h print *,e end
huge and epsilon are defined as: huge(x) = (1 - b**(-p)) * b**(emax-1) * b epsilon(x) = b**(1-p) with b = radix = REAL_MODE_FORMAT (mode)->b p = digits = REAL_MODE_FORMAT (mode)->p emax = max_exponent = REAL_MODE_FORMAT (mode)->emax For C/C++, it is defined with %s = FLT, DBL, LDBL + FLT%d%s with %d e.g. 128 and %s = "" or "X" if extended as __%s_MAX__ = builtin_define_with_hex_fp_value (... decimal_dig ...) with decimal_dig = 1 + fmt->p * log10_b and __%s_EPSILON__ as if (fmt->pnan < fmt->p) /* This is an IBM extended double format, so 1.0 + any double is representable precisely. */ sprintf (buf, "0x1p%d", fmt->emin - fmt->p); else sprintf (buf, "0x1p%d", 1 - fmt->p); Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter