diff options
author | No Author <no-author@gcc.gnu.org> | 1998-03-22 09:42:52 +0000 |
---|---|---|
committer | No Author <no-author@gcc.gnu.org> | 1998-03-22 09:42:52 +0000 |
commit | a015f0328193666b8c8e79cbd4f2e0370ca76974 (patch) | |
tree | 856efc13c6c3ca9aef68a1116fd8b6666a610408 | |
parent | 5aff8e796871e8cf53bded3a439b4fcec810a6f4 (diff) |
This commit was manufactured by cvs2svn to create tag 'g77_0_5_22'.releases/g77-0.5.22
From-SVN: r18752
247 files changed, 0 insertions, 37063 deletions
diff --git a/gcc/f/gbe/2.7.2.2.diff b/gcc/f/gbe/2.7.2.2.diff deleted file mode 100644 index e99ba671741..00000000000 --- a/gcc/f/gbe/2.7.2.2.diff +++ /dev/null @@ -1,11296 +0,0 @@ -IMPORTANT: After applying this patch, you must rebuild the -Info documentation derived from the Texinfo files in the -gcc distribution, as this patch does not include patches -to any derived files (due to differences in the way gcc -version 2.7.2.2 is obtained by users). Use the following -command sequence after applying this patch: - - cd gcc-2.7.2.2; make -f Makefile.in gcc.info - -If that fails due to `makeinfo' not being installed, obtain -texinfo-3.11.tar.gz from a GNU distribution site, unpack, -build, and install it, and try the above command sequence -again. - - -diff -rcp2N gcc-2.7.2.2/ChangeLog g77-new/ChangeLog -*** gcc-2.7.2.2/ChangeLog Thu Feb 20 19:24:10 1997 ---- g77-new/ChangeLog Mon Aug 11 06:48:02 1997 -*************** -*** 1,2 **** ---- 1,244 ---- -+ Sun Aug 10 18:14:24 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ Integrate C front end part of patch for better alias -+ handling from John Carr <jfc@mit.edu>: -+ * c-decl.c (grokdeclarator): Check for RID_RESTRICT -+ flag; diagnose certain misuses; set DECL_RESTRICT as -+ appropriate. -+ * c-lex.c (init_lex): Set up RID_RESTRICT pointer. -+ Unset `restrict' as reserved word. -+ * c-lex.h: Replace RID_NOALIAS with RID_RESTRICT. -+ * c-parse.gperf: Add `restrict' and `__restrict' -+ keywords. -+ * tree.h: Add DECL_RESTRICT flag. -+ -+ Sun Aug 10 14:50:30 1997 Jim Wilson <wilson@cygnus.com> -+ -+ * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN -+ has integer TYPE_{MAX,MIN}_VALUE before using them. -+ -+ Mon Jul 28 15:35:38 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * combine.c (num_sign_bit_copies): Speed up the 961126-1.c -+ case of repeated (neg (neg (neg ...))) so c-torture runs -+ in less time. -+ -+ * reload.c (find_reloads_toplev, find_reloads_address): -+ These now return whether replacement by a constant, so -+ caller can know to do other replacements. Currently if -+ caller doesn't want that info and such replacement would -+ happen, we crash so as to investigate the problem and -+ learn more about it. All callers updated. -+ (find_reloads): If pseudo replaced by constant, always -+ update duplicates of it. -+ -+ Mon Jul 21 00:00:24 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (size_binop): Make sure overflows -+ are flagged properly, so as to avoid silently generating -+ bad code for, e.g., a too-large array. -+ -+ Sun Jul 13 22:23:14 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * stmt.c (expand_expr_stmt): Must generate code for -+ statements within an expression (gcc's `({ ... )}') -+ even if -fsyntax-only. -+ -+ Mon Jun 30 17:23:07 1997 Michael Meissner <meissner@cygnus.com> -+ -+ * gcc.c (process_command): If -save-temps and -pipe were specified -+ together, don't do -pipe. -+ -+ Thu Jun 26 05:40:46 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * stor-layout.c (get_best_mode): Handle negative bitpos -+ correctly, so caller doesn't get into infinite recursion -+ trying to cope with a spurious VOIDmode. -+ -+ Tue Jun 24 19:46:31 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * varasm.c (assemble_variable): If low part of size -+ doesn't fit in an int, variable is too large. -+ -+ Sat Jun 21 12:09:00 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * toplev.c (rest_of_compilation): Also temporarily set -+ flag_unroll_all_loops to 0 during first of two calls -+ to loop_optimize, and clean up code a bit to make it -+ easier to read. -+ -+ * expr.c (safe_from_p_1, safe_from_p): Fix these to use -+ TREE_SET_CODE instead of TREE_CODE. -+ -+ Thu Jun 19 19:30:47 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * config/alpha/alpha.c: Don't include <stamp.h> on -+ GNU Linux machines. -+ -+ * config/alpha/elf.c: New file for ELF systems. -+ -+ * config/alpha/xm-alpha.h: Don't declare alloca() -+ if it's already a macro (probably defined in stdlib.h). -+ -+ * config/alpha/xm-linux.h (HAVE_STRERROR): #define -+ this, according to what various people suggest. -+ -+ * config.guess, configure: Make some (hopefully safe) -+ changes, based mostly on gcc-2.8.0-in-development, -+ in the hopes that these make some systems configure -+ "out of the box" more easily, especially Alpha systems. -+ -+ Mon Jun 9 04:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * expr.c (safe_from_p): Don't examine a given SAVE_EXPR -+ node more than once, to avoid combinatorial explosion -+ in complex expressions. Fortran case that triggered -+ this had a complicated *and* complex expression with -+ 293 unique nodes, resulting in 28 minutes of compile -+ time mostly spent in a single top-level safe_from_p() -+ call due to all the redundant SAVE_EXPR traversals. -+ This change reduced the time to around 2 seconds. -+ (safe_from_p_1): New helper function that does almost -+ exactly what the old safe_from_p() did. -+ -+ Sun May 18 21:18:48 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (fold): Clarify why TRUNC_DIV_EXPR -+ and FLOOR_DIV_EXPR aren't rewritten to EXACT_DIV_EXPR, -+ clean up related code. -+ -+ Sat May 3 13:53:00 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * config.sub: Change all `i[345]' to `i[3456]' to -+ support Pentium Pro (this change was already made -+ in configure for gcc-2.7.2.2). -+ -+ From Toon Moene <toon@moene.indiv.nluug.nl>: -+ * toplev.c (rest_of_compilation): Unroll loops -+ only the final time through loop optimization. -+ -+ Sun Apr 20 10:45:35 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> -+ -+ * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP} -+ if defined. -+ -+ Wed Apr 16 22:26:16 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * alias.c, cse.c, loop.c, rtl.c, rtl.h, sched.c: -+ Make changes submitted by <jfc@mit.edu>. -+ -+ Sun Apr 13 19:32:53 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (fold): If extra warnings enabled, -+ warn about integer division by zero. -+ -+ Sun Apr 13 08:15:31 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE> -+ -+ * final.c (profile_function): Save the static chain register -+ around the call to the profiler function. -+ -+ Sat Apr 12 14:56:42 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * unroll.c (find_splittable_givs): Permit more cases -+ of mult_val/add_val to agree by using rtx_equal_p -+ to compare them instead of requiring them to be -+ integers with the same value. Also don't bother -+ checking if ADDRESS_COST not defined (they will be -+ equal in that case). -+ -+ Fri Apr 11 03:30:04 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * unroll.c (find_splittable_givs): Must create a new -+ register if the mult_val and add_val fields don't -+ agree. -+ -+ Fri Apr 4 23:00:55 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (fold): Don't call multiple_of_p if -+ arg1 is constant zero, to avoid crashing; simplify -+ code accordingly. -+ -+ Wed Feb 26 13:09:33 1997 Michael Meissner <meissner@cygnus.com> -+ -+ * reload.c (debug_reload): Fix format string to print -+ reload_nocombine[r]. -+ -+ Sun Feb 23 15:26:53 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (multiple_of_p): Clean up and improve. -+ (fold): Clean up invocation of multiple_of_p. -+ -+ Sat Feb 8 04:53:27 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ From <jfc@jfc.tiac.net> Fri, 07 Feb 1997 22:02:21 -0500: -+ * alias.c (init_alias_analysis): Reduce amount of time -+ needed to simplify the reg_base_value array in the -+ typical case (especially involving function inlining). -+ -+ Fri Jan 10 17:22:17 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ Minor improvements/fixes to better alias handling: -+ * Makefile.in (alias.o): Fix typo in rule (was RLT_H). -+ * cse.c, sched.c: Fix up some indenting. -+ * toplev.c: Add -fargument-alias flag, so Fortran users -+ can turn C-style aliasing on once g77 defaults to -+ -fargument-noalias-global. -+ -+ Integrate patch for better alias handling from -+ John Carr <jfc@mit.edu>: -+ * Makefile.in (OBJS, alias.o): New module and rule. -+ * alias.c: New source module. -+ * calls.c (expand_call): Recognize alias status of calls -+ to malloc(). -+ * combine.c (distribute_notes): New REG_NOALIAS note. -+ * rtl.h (REG_NOALIAS): Ditto. -+ Many other changes for new alias.c module. -+ * cse.c: Many changes, and much code moved into alias.c. -+ * flags.h (flag_alias_check, flag_argument_noalias): -+ New flags. -+ * toplev.c: New flags and related options. -+ * local-alloc.c (validate_equiv_mem_from_store): -+ Caller of true_dependence changed. -+ * loop.c (NUM_STORES): Increase to 50 from 20. -+ (prescan_loop): "const" functions don't alter unknown addresses. -+ (invariant_p): Caller of true_dependence changed. -+ (record_giv): Zero new unrolled and shared flags. -+ (emit_iv_add_mult): Record base value for register. -+ * sched.c: Many changes, mostly moving code to alias.c. -+ (sched_note_set): SCHED_SORT macro def form, but not function, -+ inexplicably changed. -+ * unroll.c: Record base values for registers, etc. -+ -+ Fri Jan 3 04:01:00 1997 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * loop.c (check_final_value): Handle insns with no luid's -+ appropriately, instead of crashing on INSN_LUID macro -+ invocations. -+ -+ Mon Dec 23 00:49:19 1996 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * config/alpha/alpha.md: Fix pattern that matches if_then_else -+ involving DF target, DF comparison, SF source. -+ -+ Fri Dec 20 15:42:52 1996 Craig Burley <burley@gnu.ai.mit.edu> -+ -+ * fold-const.c (multiple_of_p): New function. -+ (fold): Use new function to turn *_DIV_EXPR into EXACT_DIV_EXPR. -+ -+ Tue Oct 22 18:32:20 1996 Jim Wilson <wilson@cygnus.com> -+ -+ * unroll.c (unroll_loop): Always reject loops with unbalanced blocks. -+ -+ Tue Sep 24 19:37:00 1996 Jim Wilson <wilson@cygnus.com> -+ -+ * reload.c (push_secondary_reload): Do strip paradoxical SUBREG -+ even if reload_class is CLASS_CANNOT_CHANGE_SIZE. Change reload_mode -+ to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls. -+ -+ Mon Aug 5 16:53:36 1996 Doug Evans <dje@fallis.cygnus.com> -+ -+ * stor-layout.c (layout_record): Correct overflow test for 0 sized -+ fields. -+ - Sat Jun 29 12:33:39 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> - -*************** Tue Jun 11 20:18:03 1996 Per Bothner <b -*** 8,11 **** ---- 250,259 ---- - * alpha.h (FIXPROTO_INIT): Define new macro. - -+ Sat May 18 20:17:27 1996 Jim Wilson <wilson@cygnus.com> -+ -+ * unroll.c (copy_loop_body): When update split DEST_ADDR giv, -+ check to make sure it was split. -+ (find_splittable_givs): Fix reversed test of verify_addresses result. -+ - Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) - -*************** Mon Feb 19 07:35:07 1996 Torbjorn Granl -*** 66,69 **** ---- 314,322 ---- - * rs6000.md (not:SI with assign and compare): Fix typo. - -+ Tue Feb 13 17:43:46 1996 Jim Wilson <wilson@cygnus.com> -+ -+ * integrate.c (save_constants_in_decl_trees): New function. -+ (save_for_inline_copying, save_for_inline_nocopy): Call it. -+ - Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com> - -*************** Tue Jan 16 06:01:28 1996 Thomas Graiche -*** 81,88 **** ---- 334,357 ---- - * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported. - -+ Mon Jan 15 07:22:59 1996 Michel Delval (mfd@ccv.fr) -+ -+ * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE. -+ - Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu> - - * collect2.c (scan_libraries): Correct Import File ID interpretation. - -+ Mon Jan 1 09:05:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) -+ -+ * local-alloc.c (reg_equiv_replacement): New variable. -+ (memref_referenced_p, case REG): Check for reg_equiv_replacement. -+ (update_equiv_regs): reg_equiv_replacement now file-scope. -+ -+ Fri Dec 22 17:29:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) -+ -+ * reload.c (find_valid_class): New function. -+ (push_reload): Use it in cases where a SUBREG and its contents -+ both need to be reloaded. -+ - Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com> - -*************** Mon Dec 18 18:40:34 1995 Jim Wilson <w -*** 99,102 **** ---- 368,376 ---- - above. - -+ Sun Dec 17 06:37:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) -+ -+ * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG -+ if reload_class is CLASS_CANNOT_CHANGE_SIZE. -+ - Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be) - -*************** Sat Dec 9 18:05:03 1995 Jim Wilson <w -*** 113,116 **** ---- 387,395 ---- - * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8 - change. -+ -+ Fri Dec 8 19:17:30 1995 Mike Meissner <meissner@beauty.cygnus.com> -+ -+ * rs6000/rs6000.c (input_operand): Allow any integer constant, not -+ just integers that fit in 1 instruction. - - Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu> -diff -rcp2N gcc-2.7.2.2/Makefile.in g77-new/Makefile.in -*** gcc-2.7.2.2/Makefile.in Sun Nov 26 14:44:25 1995 ---- g77-new/Makefile.in Sun Aug 10 18:46:06 1997 -*************** OBJS = toplev.o version.o tree.o print-t -*** 519,523 **** - integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \ - regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \ -! insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \ - insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \ - insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS) ---- 519,523 ---- - integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \ - regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \ -! insn-peep.o reorg.o alias.o sched.o final.o recog.o reg-stack.o \ - insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \ - insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS) -*************** LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udi -*** 570,574 **** - _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \ - _fixtfdi _fixunstfdi _floatditf \ -! __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \ - _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \ - _pure ---- 570,575 ---- - _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \ - _fixtfdi _fixunstfdi _floatditf \ -! __gcc_bcmp _varargs __dummy _eprintf \ -! _op_new _op_vnew _new_handler _op_delete \ - _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \ - _pure -*************** expr.o : expr.c $(CONFIG_H) $(RTL_H) $(T -*** 1179,1183 **** - insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \ - typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \ -! bc-emit.h modemap.def - calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \ - insn-flags.h ---- 1180,1184 ---- - insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \ - typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \ -! bc-emit.h modemap.def hard-reg-set.h - calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \ - insn-flags.h -*************** reorg.o : reorg.c $(CONFIG_H) $(RTL_H) c -*** 1238,1241 **** ---- 1239,1243 ---- - basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \ - flags.h output.h -+ alias.o : $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h - sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \ - flags.h insn-config.h insn-attr.h -diff -rcp2N gcc-2.7.2.2/alias.c g77-new/alias.c -*** gcc-2.7.2.2/alias.c Wed Dec 31 19:00:00 1969 ---- g77-new/alias.c Thu Jul 10 20:08:43 1997 -*************** -*** 0 **** ---- 1,996 ---- -+ /* Alias analysis for GNU C, by John Carr (jfc@mit.edu). -+ Derived in part from sched.c */ -+ #include "config.h" -+ #include "rtl.h" -+ #include "expr.h" -+ #include "regs.h" -+ #include "hard-reg-set.h" -+ #include "flags.h" -+ -+ static rtx canon_rtx PROTO((rtx)); -+ static int rtx_equal_for_memref_p PROTO((rtx, rtx)); -+ static rtx find_symbolic_term PROTO((rtx)); -+ static int memrefs_conflict_p PROTO((int, rtx, int, rtx, -+ HOST_WIDE_INT)); -+ -+ /* Set up all info needed to perform alias analysis on memory references. */ -+ -+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X))) -+ -+ /* reg_base_value[N] gives an address to which register N is related. -+ If all sets after the first add or subtract to the current value -+ or otherwise modify it so it does not point to a different top level -+ object, reg_base_value[N] is equal to the address part of the source -+ of the first set. The value will be a SYMBOL_REF, a LABEL_REF, or -+ (address (reg)) to indicate that the address is derived from an -+ argument or fixed register. */ -+ rtx *reg_base_value; -+ unsigned int reg_base_value_size; /* size of reg_base_value array */ -+ #define REG_BASE_VALUE(X) \ -+ (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0) -+ -+ /* Vector indexed by N giving the initial (unchanging) value known -+ for pseudo-register N. */ -+ rtx *reg_known_value; -+ -+ /* Indicates number of valid entries in reg_known_value. */ -+ static int reg_known_value_size; -+ -+ /* Vector recording for each reg_known_value whether it is due to a -+ REG_EQUIV note. Future passes (viz., reload) may replace the -+ pseudo with the equivalent expression and so we account for the -+ dependences that would be introduced if that happens. */ -+ /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in -+ assign_parms mention the arg pointer, and there are explicit insns in the -+ RTL that modify the arg pointer. Thus we must ensure that such insns don't -+ get scheduled across each other because that would invalidate the REG_EQUIV -+ notes. One could argue that the REG_EQUIV notes are wrong, but solving -+ the problem in the scheduler will likely give better code, so we do it -+ here. */ -+ char *reg_known_equiv_p; -+ -+ /* Inside SRC, the source of a SET, find a base address. */ -+ -+ /* When copying arguments into pseudo-registers, record the (ADDRESS) -+ expression for the argument directly so that even if the argument -+ register is changed later (e.g. for a function call) the original -+ value is noted. */ -+ static int copying_arguments; -+ -+ static rtx -+ find_base_value (src) -+ register rtx src; -+ { -+ switch (GET_CODE (src)) -+ { -+ case SYMBOL_REF: -+ case LABEL_REF: -+ return src; -+ -+ case REG: -+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER) -+ return reg_base_value[REGNO (src)]; -+ return src; -+ -+ case MEM: -+ /* Check for an argument passed in memory. Only record in the -+ copying-arguments block; it is too hard to track changes -+ otherwise. */ -+ if (copying_arguments -+ && (XEXP (src, 0) == arg_pointer_rtx -+ || (GET_CODE (XEXP (src, 0)) == PLUS -+ && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx))) -+ return gen_rtx (ADDRESS, VOIDmode, src); -+ return 0; -+ -+ case CONST: -+ src = XEXP (src, 0); -+ if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS) -+ break; -+ /* fall through */ -+ case PLUS: -+ case MINUS: -+ /* Guess which operand to set the register equivalent to. */ -+ /* If the first operand is a symbol or the second operand is -+ an integer, the first operand is the base address. */ -+ if (GET_CODE (XEXP (src, 0)) == SYMBOL_REF -+ || GET_CODE (XEXP (src, 0)) == LABEL_REF -+ || GET_CODE (XEXP (src, 1)) == CONST_INT) -+ return XEXP (src, 0); -+ /* If an operand is a register marked as a pointer, it is the base. */ -+ if (GET_CODE (XEXP (src, 0)) == REG -+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 0)))) -+ src = XEXP (src, 0); -+ else if (GET_CODE (XEXP (src, 1)) == REG -+ && REGNO_POINTER_FLAG (REGNO (XEXP (src, 1)))) -+ src = XEXP (src, 1); -+ else -+ return 0; -+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER) -+ return reg_base_value[REGNO (src)]; -+ return src; -+ -+ case AND: -+ /* If the second operand is constant set the base -+ address to the first operand. */ -+ if (GET_CODE (XEXP (src, 1)) == CONST_INT -+ && GET_CODE (XEXP (src, 0)) == REG) -+ { -+ src = XEXP (src, 0); -+ if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER) -+ return reg_base_value[REGNO (src)]; -+ return src; -+ } -+ return 0; -+ -+ case HIGH: -+ return XEXP (src, 0); -+ } -+ -+ return 0; -+ } -+ -+ /* Called from init_alias_analysis indirectly through note_stores. */ -+ -+ /* while scanning insns to find base values, reg_seen[N] is nonzero if -+ register N has been set in this function. */ -+ static char *reg_seen; -+ -+ static -+ void record_set (dest, set) -+ rtx dest, set; -+ { -+ register int regno; -+ rtx src; -+ -+ if (GET_CODE (dest) != REG) -+ return; -+ -+ regno = REGNO (dest); -+ -+ if (set) -+ { -+ /* A CLOBBER wipes out any old value but does not prevent a previously -+ unset register from acquiring a base address (i.e. reg_seen is not -+ set). */ -+ if (GET_CODE (set) == CLOBBER) -+ { -+ reg_base_value[regno] = 0; -+ return; -+ } -+ src = SET_SRC (set); -+ } -+ else -+ { -+ static int unique_id; -+ if (reg_seen[regno]) -+ { -+ reg_base_value[regno] = 0; -+ return; -+ } -+ reg_seen[regno] = 1; -+ reg_base_value[regno] = gen_rtx (ADDRESS, Pmode, -+ GEN_INT (unique_id++)); -+ return; -+ } -+ -+ /* This is not the first set. If the new value is not related to the -+ old value, forget the base value. Note that the following code is -+ not detected: -+ extern int x, y; int *p = &x; p += (&y-&x); -+ ANSI C does not allow computing the difference of addresses -+ of distinct top level objects. */ -+ if (reg_base_value[regno]) -+ switch (GET_CODE (src)) -+ { -+ case PLUS: -+ case MINUS: -+ if (XEXP (src, 0) != dest && XEXP (src, 1) != dest) -+ reg_base_value[regno] = 0; -+ break; -+ case AND: -+ if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT) -+ reg_base_value[regno] = 0; -+ break; -+ case LO_SUM: -+ if (XEXP (src, 0) != dest) -+ reg_base_value[regno] = 0; -+ break; -+ default: -+ reg_base_value[regno] = 0; -+ break; -+ } -+ /* If this is the first set of a register, record the value. */ -+ else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno]) -+ && ! reg_seen[regno] && reg_base_value[regno] == 0) -+ reg_base_value[regno] = find_base_value (src); -+ -+ reg_seen[regno] = 1; -+ } -+ -+ /* Called from loop optimization when a new pseudo-register is created. */ -+ void -+ record_base_value (regno, val) -+ int regno; -+ rtx val; -+ { -+ if (!flag_alias_check || regno >= reg_base_value_size) -+ return; -+ if (GET_CODE (val) == REG) -+ { -+ if (REGNO (val) < reg_base_value_size) -+ reg_base_value[regno] = reg_base_value[REGNO (val)]; -+ return; -+ } -+ reg_base_value[regno] = find_base_value (val); -+ } -+ -+ static rtx -+ canon_rtx (x) -+ rtx x; -+ { -+ /* Recursively look for equivalences. */ -+ if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER -+ && REGNO (x) < reg_known_value_size) -+ return reg_known_value[REGNO (x)] == x -+ ? x : canon_rtx (reg_known_value[REGNO (x)]); -+ else if (GET_CODE (x) == PLUS) -+ { -+ rtx x0 = canon_rtx (XEXP (x, 0)); -+ rtx x1 = canon_rtx (XEXP (x, 1)); -+ -+ if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1)) -+ { -+ /* We can tolerate LO_SUMs being offset here; these -+ rtl are used for nothing other than comparisons. */ -+ if (GET_CODE (x0) == CONST_INT) -+ return plus_constant_for_output (x1, INTVAL (x0)); -+ else if (GET_CODE (x1) == CONST_INT) -+ return plus_constant_for_output (x0, INTVAL (x1)); -+ return gen_rtx (PLUS, GET_MODE (x), x0, x1); -+ } -+ } -+ /* This gives us much better alias analysis when called from -+ the loop optimizer. Note we want to leave the original -+ MEM alone, but need to return the canonicalized MEM with -+ all the flags with their original values. */ -+ else if (GET_CODE (x) == MEM) -+ { -+ rtx addr = canon_rtx (XEXP (x, 0)); -+ if (addr != XEXP (x, 0)) -+ { -+ rtx new = gen_rtx (MEM, GET_MODE (x), addr); -+ MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x); -+ RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x); -+ MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x); -+ x = new; -+ } -+ } -+ return x; -+ } -+ -+ /* Return 1 if X and Y are identical-looking rtx's. -+ -+ We use the data in reg_known_value above to see if two registers with -+ different numbers are, in fact, equivalent. */ -+ -+ static int -+ rtx_equal_for_memref_p (x, y) -+ rtx x, y; -+ { -+ register int i; -+ register int j; -+ register enum rtx_code code; -+ register char *fmt; -+ -+ if (x == 0 && y == 0) -+ return 1; -+ if (x == 0 || y == 0) -+ return 0; -+ x = canon_rtx (x); -+ y = canon_rtx (y); -+ -+ if (x == y) -+ return 1; -+ -+ code = GET_CODE (x); -+ /* Rtx's of different codes cannot be equal. */ -+ if (code != GET_CODE (y)) -+ return 0; -+ -+ /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. -+ (REG:SI x) and (REG:HI x) are NOT equivalent. */ -+ -+ if (GET_MODE (x) != GET_MODE (y)) -+ return 0; -+ -+ /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */ -+ -+ if (code == REG) -+ return REGNO (x) == REGNO (y); -+ if (code == LABEL_REF) -+ return XEXP (x, 0) == XEXP (y, 0); -+ if (code == SYMBOL_REF) -+ return XSTR (x, 0) == XSTR (y, 0); -+ -+ /* For commutative operations, the RTX match if the operand match in any -+ order. Also handle the simple binary and unary cases without a loop. */ -+ if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c') -+ return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)) -+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1))) -+ || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1)) -+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0)))); -+ else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2') -+ return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)) -+ && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1))); -+ else if (GET_RTX_CLASS (code) == '1') -+ return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)); -+ -+ /* Compare the elements. If any pair of corresponding elements -+ fail to match, return 0 for the whole things. */ -+ -+ fmt = GET_RTX_FORMAT (code); -+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) -+ { -+ switch (fmt[i]) -+ { -+ case 'w': -+ if (XWINT (x, i) != XWINT (y, i)) -+ return 0; -+ break; -+ -+ case 'n': -+ case 'i': -+ if (XINT (x, i) != XINT (y, i)) -+ return 0; -+ break; -+ -+ case 'V': -+ case 'E': -+ /* Two vectors must have the same length. */ -+ if (XVECLEN (x, i) != XVECLEN (y, i)) -+ return 0; -+ -+ /* And the corresponding elements must match. */ -+ for (j = 0; j < XVECLEN (x, i); j++) -+ if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0) -+ return 0; -+ break; -+ -+ case 'e': -+ if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0) -+ return 0; -+ break; -+ -+ case 'S': -+ case 's': -+ if (strcmp (XSTR (x, i), XSTR (y, i))) -+ return 0; -+ break; -+ -+ case 'u': -+ /* These are just backpointers, so they don't matter. */ -+ break; -+ -+ case '0': -+ break; -+ -+ /* It is believed that rtx's at this level will never -+ contain anything but integers and other rtx's, -+ except for within LABEL_REFs and SYMBOL_REFs. */ -+ default: -+ abort (); -+ } -+ } -+ return 1; -+ } -+ -+ /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within -+ X and return it, or return 0 if none found. */ -+ -+ static rtx -+ find_symbolic_term (x) -+ rtx x; -+ { -+ register int i; -+ register enum rtx_code code; -+ register char *fmt; -+ -+ code = GET_CODE (x); -+ if (code == SYMBOL_REF || code == LABEL_REF) -+ return x; -+ if (GET_RTX_CLASS (code) == 'o') -+ return 0; -+ -+ fmt = GET_RTX_FORMAT (code); -+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) -+ { -+ rtx t; -+ -+ if (fmt[i] == 'e') -+ { -+ t = find_symbolic_term (XEXP (x, i)); -+ if (t != 0) -+ return t; -+ } -+ else if (fmt[i] == 'E') -+ break; -+ } -+ return 0; -+ } -+ -+ static rtx -+ find_base_term (x) -+ register rtx x; -+ { -+ switch (GET_CODE (x)) -+ { -+ case REG: -+ return REG_BASE_VALUE (x); -+ -+ case HIGH: -+ return find_base_term (XEXP (x, 0)); -+ -+ case CONST: -+ x = XEXP (x, 0); -+ if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS) -+ return 0; -+ /* fall through */ -+ case LO_SUM: -+ case PLUS: -+ case MINUS: -+ { -+ rtx tmp = find_base_term (XEXP (x, 0)); -+ if (tmp) -+ return tmp; -+ return find_base_term (XEXP (x, 1)); -+ } -+ -+ case AND: -+ if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT) -+ return REG_BASE_VALUE (XEXP (x, 0)); -+ return 0; -+ -+ case SYMBOL_REF: -+ case LABEL_REF: -+ return x; -+ -+ default: -+ return 0; -+ } -+ } -+ -+ /* Return 0 if the addresses X and Y are known to point to different -+ objects, 1 if they might be pointers to the same object. */ -+ -+ static int -+ base_alias_check (x, y) -+ rtx x, y; -+ { -+ rtx x_base = find_base_term (x); -+ rtx y_base = find_base_term (y); -+ -+ /* If either base address is unknown or the base addresses are equal, -+ nothing is known about aliasing. */ -+ -+ if (x_base == 0 || y_base == 0 || rtx_equal_p (x_base, y_base)) -+ return 1; -+ -+ /* The base addresses of the read and write are different -+ expressions. If they are both symbols there is no -+ conflict. */ -+ if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS) -+ return 0; -+ -+ /* If one address is a stack reference there can be no alias: -+ stack references using different base registers do not alias, -+ a stack reference can not alias a parameter, and a stack reference -+ can not alias a global. */ -+ if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode) -+ || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode)) -+ return 0; -+ -+ if (! flag_argument_noalias) -+ return 1; -+ -+ if (flag_argument_noalias > 1) -+ return 0; -+ -+ /* Weak noalias assertion (arguments are distinct, but may match globals). */ -+ return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode); -+ } -+ -+ /* Return nonzero if X and Y (memory addresses) could reference the -+ same location in memory. C is an offset accumulator. When -+ C is nonzero, we are testing aliases between X and Y + C. -+ XSIZE is the size in bytes of the X reference, -+ similarly YSIZE is the size in bytes for Y. -+ -+ If XSIZE or YSIZE is zero, we do not know the amount of memory being -+ referenced (the reference was BLKmode), so make the most pessimistic -+ assumptions. -+ -+ We recognize the following cases of non-conflicting memory: -+ -+ (1) addresses involving the frame pointer cannot conflict -+ with addresses involving static variables. -+ (2) static variables with different addresses cannot conflict. -+ -+ Nice to notice that varying addresses cannot conflict with fp if no -+ local variables had their addresses taken, but that's too hard now. */ -+ -+ -+ static int -+ memrefs_conflict_p (xsize, x, ysize, y, c) -+ register rtx x, y; -+ int xsize, ysize; -+ HOST_WIDE_INT c; -+ { -+ if (GET_CODE (x) == HIGH) -+ x = XEXP (x, 0); -+ else if (GET_CODE (x) == LO_SUM) -+ x = XEXP (x, 1); -+ else -+ x = canon_rtx (x); -+ if (GET_CODE (y) == HIGH) -+ y = XEXP (y, 0); -+ else if (GET_CODE (y) == LO_SUM) -+ y = XEXP (y, 1); -+ else -+ y = canon_rtx (y); -+ -+ if (rtx_equal_for_memref_p (x, y)) -+ { -+ if (xsize == 0 || ysize == 0) -+ return 1; -+ if (c >= 0 && xsize > c) -+ return 1; -+ if (c < 0 && ysize+c > 0) -+ return 1; -+ return 0; -+ } -+ -+ if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx -+ || y == stack_pointer_rtx) -+ { -+ rtx t = y; -+ int tsize = ysize; -+ y = x; ysize = xsize; -+ x = t; xsize = tsize; -+ } -+ -+ if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx -+ || x == stack_pointer_rtx) -+ { -+ rtx y1; -+ -+ if (CONSTANT_P (y)) -+ return 0; -+ -+ if (GET_CODE (y) == PLUS -+ && canon_rtx (XEXP (y, 0)) == x -+ && (y1 = canon_rtx (XEXP (y, 1))) -+ && GET_CODE (y1) == CONST_INT) -+ { -+ c += INTVAL (y1); -+ return (xsize == 0 || ysize == 0 -+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -+ } -+ -+ if (GET_CODE (y) == PLUS -+ && (y1 = canon_rtx (XEXP (y, 0))) -+ && CONSTANT_P (y1)) -+ return 0; -+ -+ return 1; -+ } -+ -+ if (GET_CODE (x) == PLUS) -+ { -+ /* The fact that X is canonicalized means that this -+ PLUS rtx is canonicalized. */ -+ rtx x0 = XEXP (x, 0); -+ rtx x1 = XEXP (x, 1); -+ -+ if (GET_CODE (y) == PLUS) -+ { -+ /* The fact that Y is canonicalized means that this -+ PLUS rtx is canonicalized. */ -+ rtx y0 = XEXP (y, 0); -+ rtx y1 = XEXP (y, 1); -+ -+ if (rtx_equal_for_memref_p (x1, y1)) -+ return memrefs_conflict_p (xsize, x0, ysize, y0, c); -+ if (rtx_equal_for_memref_p (x0, y0)) -+ return memrefs_conflict_p (xsize, x1, ysize, y1, c); -+ if (GET_CODE (x1) == CONST_INT) -+ if (GET_CODE (y1) == CONST_INT) -+ return memrefs_conflict_p (xsize, x0, ysize, y0, -+ c - INTVAL (x1) + INTVAL (y1)); -+ else -+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1)); -+ else if (GET_CODE (y1) == CONST_INT) -+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1)); -+ -+ /* Handle case where we cannot understand iteration operators, -+ but we notice that the base addresses are distinct objects. */ -+ /* ??? Is this still necessary? */ -+ x = find_symbolic_term (x); -+ if (x == 0) -+ return 1; -+ y = find_symbolic_term (y); -+ if (y == 0) -+ return 1; -+ return rtx_equal_for_memref_p (x, y); -+ } -+ else if (GET_CODE (x1) == CONST_INT) -+ return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1)); -+ } -+ else if (GET_CODE (y) == PLUS) -+ { -+ /* The fact that Y is canonicalized means that this -+ PLUS rtx is canonicalized. */ -+ rtx y0 = XEXP (y, 0); -+ rtx y1 = XEXP (y, 1); -+ -+ if (GET_CODE (y1) == CONST_INT) -+ return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1)); -+ else -+ return 1; -+ } -+ -+ if (GET_CODE (x) == GET_CODE (y)) -+ switch (GET_CODE (x)) -+ { -+ case MULT: -+ { -+ /* Handle cases where we expect the second operands to be the -+ same, and check only whether the first operand would conflict -+ or not. */ -+ rtx x0, y0; -+ rtx x1 = canon_rtx (XEXP (x, 1)); -+ rtx y1 = canon_rtx (XEXP (y, 1)); -+ if (! rtx_equal_for_memref_p (x1, y1)) -+ return 1; -+ x0 = canon_rtx (XEXP (x, 0)); -+ y0 = canon_rtx (XEXP (y, 0)); -+ if (rtx_equal_for_memref_p (x0, y0)) -+ return (xsize == 0 || ysize == 0 -+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -+ -+ /* Can't properly adjust our sizes. */ -+ if (GET_CODE (x1) != CONST_INT) -+ return 1; -+ xsize /= INTVAL (x1); -+ ysize /= INTVAL (x1); -+ c /= INTVAL (x1); -+ return memrefs_conflict_p (xsize, x0, ysize, y0, c); -+ } -+ } -+ -+ /* Treat an access through an AND (e.g. a subword access on an Alpha) -+ as an access with indeterminate size. */ -+ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT) -+ return memrefs_conflict_p (0, XEXP (x, 0), ysize, y, c); -+ if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT) -+ return memrefs_conflict_p (xsize, x, 0, XEXP (y, 0), c); -+ -+ if (CONSTANT_P (x)) -+ { -+ if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT) -+ { -+ c += (INTVAL (y) - INTVAL (x)); -+ return (xsize == 0 || ysize == 0 -+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -+ } -+ -+ if (GET_CODE (x) == CONST) -+ { -+ if (GET_CODE (y) == CONST) -+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), -+ ysize, canon_rtx (XEXP (y, 0)), c); -+ else -+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), -+ ysize, y, c); -+ } -+ if (GET_CODE (y) == CONST) -+ return memrefs_conflict_p (xsize, x, ysize, -+ canon_rtx (XEXP (y, 0)), c); -+ -+ if (CONSTANT_P (y)) -+ return (rtx_equal_for_memref_p (x, y) -+ && (xsize == 0 || ysize == 0 -+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))); -+ -+ return 1; -+ } -+ return 1; -+ } -+ -+ /* Functions to compute memory dependencies. -+ -+ Since we process the insns in execution order, we can build tables -+ to keep track of what registers are fixed (and not aliased), what registers -+ are varying in known ways, and what registers are varying in unknown -+ ways. -+ -+ If both memory references are volatile, then there must always be a -+ dependence between the two references, since their order can not be -+ changed. A volatile and non-volatile reference can be interchanged -+ though. -+ -+ A MEM_IN_STRUCT reference at a non-QImode varying address can never -+ conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must -+ allow QImode aliasing because the ANSI C standard allows character -+ pointers to alias anything. We are assuming that characters are -+ always QImode here. */ -+ -+ /* Read dependence: X is read after read in MEM takes place. There can -+ only be a dependence here if both reads are volatile. */ -+ -+ int -+ read_dependence (mem, x) -+ rtx mem; -+ rtx x; -+ { -+ return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem); -+ } -+ -+ /* True dependence: X is read after store in MEM takes place. */ -+ -+ int -+ true_dependence (mem, mem_mode, x, varies) -+ rtx mem; -+ enum machine_mode mem_mode; -+ rtx x; -+ int (*varies)(); -+ { -+ rtx x_addr, mem_addr; -+ -+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -+ return 1; -+ -+ x_addr = XEXP (x, 0); -+ mem_addr = XEXP (mem, 0); -+ -+ if (flag_alias_check && ! base_alias_check (x_addr, mem_addr)) -+ return 0; -+ -+ /* If X is an unchanging read, then it can't possibly conflict with any -+ non-unchanging store. It may conflict with an unchanging write though, -+ because there may be a single store to this address to initialize it. -+ Just fall through to the code below to resolve the case where we have -+ both an unchanging read and an unchanging write. This won't handle all -+ cases optimally, but the possible performance loss should be -+ negligible. */ -+ if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem)) -+ return 0; -+ -+ x_addr = canon_rtx (x_addr); -+ mem_addr = canon_rtx (mem_addr); -+ if (mem_mode == VOIDmode) -+ mem_mode = GET_MODE (mem); -+ -+ if (! memrefs_conflict_p (mem_mode, mem_addr, SIZE_FOR_MODE (x), x_addr, 0)) -+ return 0; -+ -+ /* If both references are struct references, or both are not, nothing -+ is known about aliasing. -+ -+ If either reference is QImode or BLKmode, ANSI C permits aliasing. -+ -+ If both addresses are constant, or both are not, nothing is known -+ about aliasing. */ -+ if (MEM_IN_STRUCT_P (x) == MEM_IN_STRUCT_P (mem) -+ || mem_mode == QImode || mem_mode == BLKmode -+ || GET_MODE (x) == QImode || GET_MODE (mem) == BLKmode -+ || varies (x_addr) == varies (mem_addr)) -+ return 1; -+ -+ /* One memory reference is to a constant address, one is not. -+ One is to a structure, the other is not. -+ -+ If either memory reference is a variable structure the other is a -+ fixed scalar and there is no aliasing. */ -+ if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr)) -+ || (MEM_IN_STRUCT_P (x) && varies (x))) -+ return 0; -+ -+ return 1; -+ } -+ -+ /* Anti dependence: X is written after read in MEM takes place. */ -+ -+ int -+ anti_dependence (mem, x) -+ rtx mem; -+ rtx x; -+ { -+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -+ return 1; -+ -+ if (flag_alias_check && ! base_alias_check (XEXP (x, 0), XEXP (mem, 0))) -+ return 0; -+ -+ /* If MEM is an unchanging read, then it can't possibly conflict with -+ the store to X, because there is at most one store to MEM, and it must -+ have occurred somewhere before MEM. */ -+ x = canon_rtx (x); -+ mem = canon_rtx (mem); -+ if (RTX_UNCHANGING_P (mem)) -+ return 0; -+ -+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0), -+ SIZE_FOR_MODE (x), XEXP (x, 0), 0) -+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) -+ && GET_MODE (mem) != QImode -+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) -+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) -+ && GET_MODE (x) != QImode -+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))); -+ } -+ -+ /* Output dependence: X is written after store in MEM takes place. */ -+ -+ int -+ output_dependence (mem, x) -+ register rtx mem; -+ register rtx x; -+ { -+ if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -+ return 1; -+ -+ if (flag_alias_check && !base_alias_check (XEXP (x, 0), XEXP (mem, 0))) -+ return 0; -+ -+ x = canon_rtx (x); -+ mem = canon_rtx (mem); -+ return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0), -+ SIZE_FOR_MODE (x), XEXP (x, 0), 0) -+ && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) -+ && GET_MODE (mem) != QImode -+ && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) -+ && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) -+ && GET_MODE (x) != QImode -+ && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))); -+ } -+ -+ void -+ init_alias_analysis () -+ { -+ int maxreg = max_reg_num (); -+ int changed; -+ register int i; -+ register rtx insn; -+ rtx note; -+ rtx set; -+ -+ reg_known_value_size = maxreg; -+ -+ reg_known_value -+ = (rtx *) oballoc ((maxreg - FIRST_PSEUDO_REGISTER) * sizeof (rtx)) -+ - FIRST_PSEUDO_REGISTER; -+ reg_known_equiv_p = -+ oballoc (maxreg - FIRST_PSEUDO_REGISTER) - FIRST_PSEUDO_REGISTER; -+ bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER), -+ (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx)); -+ bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER, -+ (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char)); -+ -+ if (flag_alias_check) -+ { -+ /* Overallocate reg_base_value to allow some growth during loop -+ optimization. Loop unrolling can create a large number of -+ registers. */ -+ reg_base_value_size = maxreg * 2; -+ reg_base_value = (rtx *)oballoc (reg_base_value_size * sizeof (rtx)); -+ reg_seen = (char *)alloca (reg_base_value_size); -+ bzero (reg_base_value, reg_base_value_size * sizeof (rtx)); -+ bzero (reg_seen, reg_base_value_size); -+ -+ /* Mark all hard registers which may contain an address. -+ The stack, frame and argument pointers may contain an address. -+ An argument register which can hold a Pmode value may contain -+ an address even if it is not in BASE_REGS. -+ -+ The address expression is VOIDmode for an argument and -+ Pmode for other registers. */ -+ #ifndef OUTGOING_REGNO -+ #define OUTGOING_REGNO(N) N -+ #endif -+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -+ /* Check whether this register can hold an incoming pointer -+ argument. FUNCTION_ARG_REGNO_P tests outgoing register -+ numbers, so translate if necessary due to register windows. */ -+ if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode)) -+ reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode, -+ gen_rtx (REG, Pmode, i)); -+ -+ reg_base_value[STACK_POINTER_REGNUM] -+ = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx); -+ reg_base_value[ARG_POINTER_REGNUM] -+ = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx); -+ reg_base_value[FRAME_POINTER_REGNUM] -+ = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx); -+ reg_base_value[HARD_FRAME_POINTER_REGNUM] -+ = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx); -+ } -+ -+ copying_arguments = 1; -+ /* Fill in the entries with known constant values. */ -+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) -+ { -+ if (flag_alias_check && GET_RTX_CLASS (GET_CODE (insn)) == 'i') -+ { -+ /* If this insn has a noalias note, process it, Otherwise, -+ scan for sets. A simple set will have no side effects -+ which could change the base value of any other register. */ -+ rtx noalias_note; -+ if (GET_CODE (PATTERN (insn)) == SET -+ && (noalias_note = find_reg_note (insn, REG_NOALIAS, NULL_RTX))) -+ record_set (SET_DEST (PATTERN (insn)), 0); -+ else -+ note_stores (PATTERN (insn), record_set); -+ } -+ else if (GET_CODE (insn) == NOTE -+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG) -+ copying_arguments = 0; -+ -+ if ((set = single_set (insn)) != 0 -+ && GET_CODE (SET_DEST (set)) == REG -+ && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER -+ && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0 -+ && reg_n_sets[REGNO (SET_DEST (set))] == 1) -+ || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0) -+ && GET_CODE (XEXP (note, 0)) != EXPR_LIST) -+ { -+ int regno = REGNO (SET_DEST (set)); -+ reg_known_value[regno] = XEXP (note, 0); -+ reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV; -+ } -+ } -+ -+ /* Fill in the remaining entries. */ -+ for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++) -+ if (reg_known_value[i] == 0) -+ reg_known_value[i] = regno_reg_rtx[i]; -+ -+ if (! flag_alias_check) -+ return; -+ -+ /* Simplify the reg_base_value array so that no register refers to -+ another register, except to special registers indirectly through -+ ADDRESS expressions. -+ -+ In theory this loop can take as long as O(registers^2), but unless -+ there are very long dependency chains it will run in close to linear -+ time. */ -+ do -+ { -+ changed = 0; -+ for (i = FIRST_PSEUDO_REGISTER; i < reg_base_value_size; i++) -+ { -+ rtx base = reg_base_value[i]; -+ if (base && GET_CODE (base) == REG) -+ { -+ int base_regno = REGNO (base); -+ if (base_regno == i) /* register set from itself */ -+ reg_base_value[i] = 0; -+ else -+ reg_base_value[i] = reg_base_value[base_regno]; -+ changed = 1; -+ } -+ } -+ } -+ while (changed); -+ -+ reg_seen = 0; -+ } -+ -+ void -+ end_alias_analysis () -+ { -+ reg_known_value = 0; -+ reg_base_value = 0; -+ reg_base_value_size = 0; -+ } -diff -rcp2N gcc-2.7.2.2/c-decl.c g77-new/c-decl.c -*** gcc-2.7.2.2/c-decl.c Fri Oct 27 05:44:43 1995 ---- g77-new/c-decl.c Sun Aug 10 18:46:24 1997 -*************** init_decl_processing () -*** 3207,3210 **** ---- 3207,3223 ---- - builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, - BUILT_IN_COS, "cosl"); -+ builtin_function ("__builtin_setjmp", -+ build_function_type (integer_type_node, -+ tree_cons (NULL_TREE, -+ ptr_type_node, endlink)), -+ BUILT_IN_SETJMP, NULL_PTR); -+ builtin_function ("__builtin_longjmp", -+ build_function_type -+ (void_type_node, -+ tree_cons (NULL, ptr_type_node, -+ tree_cons (NULL_TREE, -+ integer_type_node, -+ endlink))), -+ BUILT_IN_LONGJMP, NULL_PTR); - - /* In an ANSI C program, it is okay to supply built-in meanings -*************** grokdeclarator (declarator, declspecs, d -*** 4049,4052 **** ---- 4062,4066 ---- - int volatilep; - int inlinep; -+ int restrictp; - int explicit_int = 0; - int explicit_char = 0; -*************** grokdeclarator (declarator, declspecs, d -*** 4342,4349 **** ---- 4356,4366 ---- - volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type); - inlinep = !! (specbits & (1 << (int) RID_INLINE)); -+ restrictp = !! (specbits & (1 << (int) RID_RESTRICT)); - if (constp > 1) - pedwarn ("duplicate `const'"); - if (volatilep > 1) - pedwarn ("duplicate `volatile'"); -+ if (restrictp) -+ error ("`restrict' used in non-parameter or non-pointer type declaration"); - if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type))) - type = TYPE_MAIN_VARIANT (type); -*************** grokdeclarator (declarator, declspecs, d -*** 4693,4696 **** ---- 4710,4715 ---- - else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE]) - volatilep++; -+ else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_RESTRICT]) -+ restrictp++; - else if (!erred) - { -*************** grokdeclarator (declarator, declspecs, d -*** 4703,4706 **** ---- 4722,4727 ---- - if (volatilep > 1) - pedwarn ("duplicate `volatile'"); -+ if (restrictp > 1) -+ pedwarn ("duplicate `restrict'"); - } - -*************** grokdeclarator (declarator, declspecs, d -*** 4844,4847 **** ---- 4865,4875 ---- - } - -+ if (restrictp) -+ { -+ if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE) -+ error ("`restrict' applied to non-pointer"); -+ DECL_RESTRICT (decl) = 1; -+ } -+ - DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written; - } -*************** start_struct (code, name) -*** 5365,5368 **** ---- 5393,5397 ---- - pushtag (name, ref); - C_TYPE_BEING_DEFINED (ref) = 1; -+ TYPE_PACKED (ref) = flag_pack_struct; - return ref; - } -*************** start_enum (name) -*** 5806,5809 **** ---- 5835,5841 ---- - enum_overflow = 0; - -+ if (flag_short_enums) -+ TYPE_PACKED (enumtype) = 1; -+ - return enumtype; - } -*************** finish_enum (enumtype, values, attribute -*** 5862,5867 **** - precision = MAX (lowprec, highprec); - -! if (flag_short_enums || TYPE_PACKED (enumtype) -! || precision > TYPE_PRECISION (integer_type_node)) - /* Use the width of the narrowest normal C type which is wide enough. */ - TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1)); ---- 5894,5898 ---- - precision = MAX (lowprec, highprec); - -! if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node)) - /* Use the width of the narrowest normal C type which is wide enough. */ - TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1)); -diff -rcp2N gcc-2.7.2.2/c-gperf.h g77-new/c-gperf.h -*** gcc-2.7.2.2/c-gperf.h Fri Mar 4 14:15:53 1994 ---- g77-new/c-gperf.h Mon Aug 11 02:58:47 1997 -*************** -*** 1,15 **** - /* C code produced by gperf version 2.5 (GNU C++ version) */ -! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf */ - struct resword { char *name; short token; enum rid rid; }; - -! #define TOTAL_KEYWORDS 79 - #define MIN_WORD_LENGTH 2 - #define MAX_WORD_LENGTH 20 -! #define MIN_HASH_VALUE 10 -! #define MAX_HASH_VALUE 144 -! /* maximum key range = 135, duplicates = 0 */ - - #ifdef __GNUC__ -! __inline - #endif - static unsigned int ---- 1,16 ---- - /* C code produced by gperf version 2.5 (GNU C++ version) */ -! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ../g77-new/c-parse.gperf */ -! /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */ - struct resword { char *name; short token; enum rid rid; }; - -! #define TOTAL_KEYWORDS 81 - #define MIN_WORD_LENGTH 2 - #define MAX_WORD_LENGTH 20 -! #define MIN_HASH_VALUE 11 -! #define MAX_HASH_VALUE 157 -! /* maximum key range = 147, duplicates = 0 */ - - #ifdef __GNUC__ -! inline - #endif - static unsigned int -*************** hash (str, len) -*** 20,36 **** - static unsigned char asso_values[] = - { -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 25, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, -! 145, 145, 145, 145, 145, 1, 145, 46, 8, 15, -! 61, 6, 36, 48, 3, 5, 145, 18, 63, 25, -! 29, 76, 1, 145, 13, 2, 1, 51, 37, 9, -! 9, 1, 3, 145, 145, 145, 145, 145, - }; - register int hval = len; ---- 21,37 ---- - static unsigned char asso_values[] = - { -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 2, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, -! 158, 158, 158, 158, 158, 1, 158, 18, 1, 58, -! 56, 6, 44, 64, 13, 45, 158, 4, 26, 68, -! 2, 74, 1, 158, 2, 13, 1, 33, 48, 5, -! 5, 3, 12, 158, 158, 158, 158, 158, - }; - register int hval = len; -*************** hash (str, len) -*** 44,47 **** ---- 45,49 ---- - case 1: - hval += asso_values[str[0]]; -+ break; - } - return hval + asso_values[str[len - 1]]; -*************** hash (str, len) -*** 50,166 **** - static struct resword wordlist[] = - { -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"",}, -! {"int", TYPESPEC, RID_INT}, -! {"",}, {"",}, -! {"__typeof__", TYPEOF, NORID}, -! {"__signed__", TYPESPEC, RID_SIGNED}, -! {"__imag__", IMAGPART, NORID}, -! {"switch", SWITCH, NORID}, -! {"__inline__", SCSPEC, RID_INLINE}, -! {"else", ELSE, NORID}, -! {"__iterator__", SCSPEC, RID_ITERATOR}, -! {"__inline", SCSPEC, RID_INLINE}, -! {"__extension__", EXTENSION, NORID}, -! {"struct", STRUCT, NORID}, -! {"__real__", REALPART, NORID}, -! {"__const", TYPE_QUAL, RID_CONST}, -! {"while", WHILE, NORID}, -! {"__const__", TYPE_QUAL, RID_CONST}, -! {"case", CASE, NORID}, -! {"__complex__", TYPESPEC, RID_COMPLEX}, -! {"__iterator", SCSPEC, RID_ITERATOR}, -! {"bycopy", TYPE_QUAL, RID_BYCOPY}, -! {"",}, {"",}, {"",}, -! {"__complex", TYPESPEC, RID_COMPLEX}, -! {"",}, -! {"in", TYPE_QUAL, RID_IN}, -! {"break", BREAK, NORID}, -! {"@defs", DEFS, NORID}, -! {"",}, {"",}, {"",}, -! {"extern", SCSPEC, RID_EXTERN}, -! {"if", IF, NORID}, -! {"typeof", TYPEOF, NORID}, -! {"typedef", SCSPEC, RID_TYPEDEF}, -! {"__typeof", TYPEOF, NORID}, -! {"sizeof", SIZEOF, NORID}, -! {"",}, -! {"return", RETURN, NORID}, -! {"const", TYPE_QUAL, RID_CONST}, -! {"__volatile__", TYPE_QUAL, RID_VOLATILE}, -! {"@private", PRIVATE, NORID}, -! {"@selector", SELECTOR, NORID}, -! {"__volatile", TYPE_QUAL, RID_VOLATILE}, -! {"__asm__", ASM_KEYWORD, NORID}, -! {"",}, {"",}, -! {"continue", CONTINUE, NORID}, -! {"__alignof__", ALIGNOF, NORID}, -! {"__imag", IMAGPART, NORID}, -! {"__attribute__", ATTRIBUTE, NORID}, -! {"",}, {"",}, -! {"__attribute", ATTRIBUTE, NORID}, -! {"for", FOR, NORID}, -! {"",}, -! {"@encode", ENCODE, NORID}, -! {"id", OBJECTNAME, RID_ID}, -! {"static", SCSPEC, RID_STATIC}, -! {"@interface", INTERFACE, NORID}, -! {"",}, -! {"__signed", TYPESPEC, RID_SIGNED}, -! {"",}, -! {"__label__", LABEL, NORID}, -! {"",}, {"",}, -! {"__asm", ASM_KEYWORD, NORID}, -! {"char", TYPESPEC, RID_CHAR}, -! {"",}, -! {"inline", SCSPEC, RID_INLINE}, -! {"out", TYPE_QUAL, RID_OUT}, -! {"register", SCSPEC, RID_REGISTER}, -! {"__real", REALPART, NORID}, -! {"short", TYPESPEC, RID_SHORT}, -! {"",}, -! {"enum", ENUM, NORID}, -! {"inout", TYPE_QUAL, RID_INOUT}, -! {"",}, -! {"oneway", TYPE_QUAL, RID_ONEWAY}, -! {"union", UNION, NORID}, -! {"",}, -! {"__alignof", ALIGNOF, NORID}, -! {"",}, -! {"@implementation", IMPLEMENTATION, NORID}, -! {"",}, -! {"@class", CLASS, NORID}, -! {"",}, -! {"@public", PUBLIC, NORID}, -! {"asm", ASM_KEYWORD, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, -! {"default", DEFAULT, NORID}, -! {"",}, -! {"void", TYPESPEC, RID_VOID}, -! {"",}, -! {"@protected", PROTECTED, NORID}, -! {"@protocol", PROTOCOL, NORID}, -! {"",}, {"",}, {"",}, -! {"volatile", TYPE_QUAL, RID_VOLATILE}, -! {"",}, {"",}, -! {"signed", TYPESPEC, RID_SIGNED}, -! {"float", TYPESPEC, RID_FLOAT}, -! {"@end", END, NORID}, -! {"",}, {"",}, -! {"unsigned", TYPESPEC, RID_UNSIGNED}, -! {"@compatibility_alias", ALIAS, NORID}, -! {"double", TYPESPEC, RID_DOUBLE}, -! {"",}, {"",}, -! {"auto", SCSPEC, RID_AUTO}, -! {"",}, -! {"goto", GOTO, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"do", DO, NORID}, -! {"",}, {"",}, {"",}, {"",}, -! {"long", TYPESPEC, RID_LONG}, - }; - - #ifdef __GNUC__ -! __inline - #endif - struct resword * ---- 52,167 ---- - static struct resword wordlist[] = - { -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"",}, {"",}, -! {"return", RETURN, NORID}, -! {"__real__", REALPART, NORID}, -! {"__typeof__", TYPEOF, NORID}, -! {"__restrict", TYPE_QUAL, RID_RESTRICT}, -! {"extern", SCSPEC, RID_EXTERN}, -! {"break", BREAK, NORID}, -! {"@encode", ENCODE, NORID}, -! {"@private", PRIVATE, NORID}, -! {"@selector", SELECTOR, NORID}, -! {"@interface", INTERFACE, NORID}, -! {"__extension__", EXTENSION, NORID}, -! {"struct", STRUCT, NORID}, -! {"",}, -! {"restrict", TYPE_QUAL, RID_RESTRICT}, -! {"__signed__", TYPESPEC, RID_SIGNED}, -! {"@defs", DEFS, NORID}, -! {"__asm__", ASM_KEYWORD, NORID}, -! {"",}, -! {"else", ELSE, NORID}, -! {"",}, -! {"__alignof__", ALIGNOF, NORID}, -! {"",}, -! {"__attribute__", ATTRIBUTE, NORID}, -! {"",}, -! {"__real", REALPART, NORID}, -! {"__attribute", ATTRIBUTE, NORID}, -! {"__label__", LABEL, NORID}, -! {"",}, -! {"@protocol", PROTOCOL, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"@class", CLASS, NORID}, -! {"",}, -! {"in", TYPE_QUAL, RID_IN}, -! {"int", TYPESPEC, RID_INT}, -! {"for", FOR, NORID}, -! {"typeof", TYPEOF, NORID}, -! {"typedef", SCSPEC, RID_TYPEDEF}, -! {"__typeof", TYPEOF, NORID}, -! {"__imag__", IMAGPART, NORID}, -! {"",}, -! {"__inline__", SCSPEC, RID_INLINE}, -! {"__iterator", SCSPEC, RID_ITERATOR}, -! {"__iterator__", SCSPEC, RID_ITERATOR}, -! {"__inline", SCSPEC, RID_INLINE}, -! {"while", WHILE, NORID}, -! {"__volatile__", TYPE_QUAL, RID_VOLATILE}, -! {"",}, -! {"@end", END, NORID}, -! {"__volatile", TYPE_QUAL, RID_VOLATILE}, -! {"const", TYPE_QUAL, RID_CONST}, -! {"__const", TYPE_QUAL, RID_CONST}, -! {"bycopy", TYPE_QUAL, RID_BYCOPY}, -! {"__const__", TYPE_QUAL, RID_CONST}, -! {"@protected", PROTECTED, NORID}, -! {"__complex__", TYPESPEC, RID_COMPLEX}, -! {"__alignof", ALIGNOF, NORID}, -! {"__complex", TYPESPEC, RID_COMPLEX}, -! {"continue", CONTINUE, NORID}, -! {"sizeof", SIZEOF, NORID}, -! {"register", SCSPEC, RID_REGISTER}, -! {"switch", SWITCH, NORID}, -! {"__signed", TYPESPEC, RID_SIGNED}, -! {"out", TYPE_QUAL, RID_OUT}, -! {"",}, -! {"case", CASE, NORID}, -! {"char", TYPESPEC, RID_CHAR}, -! {"inline", SCSPEC, RID_INLINE}, -! {"",}, -! {"union", UNION, NORID}, -! {"",}, -! {"@implementation", IMPLEMENTATION, NORID}, -! {"volatile", TYPE_QUAL, RID_VOLATILE}, -! {"oneway", TYPE_QUAL, RID_ONEWAY}, -! {"",}, -! {"if", IF, NORID}, -! {"__asm", ASM_KEYWORD, NORID}, -! {"short", TYPESPEC, RID_SHORT}, -! {"",}, -! {"static", SCSPEC, RID_STATIC}, -! {"long", TYPESPEC, RID_LONG}, -! {"auto", SCSPEC, RID_AUTO}, -! {"",}, {"",}, -! {"@public", PUBLIC, NORID}, -! {"double", TYPESPEC, RID_DOUBLE}, -! {"",}, -! {"id", OBJECTNAME, RID_ID}, -! {"",}, {"",}, {"",}, {"",}, -! {"default", DEFAULT, NORID}, -! {"@compatibility_alias", ALIAS, NORID}, -! {"unsigned", TYPESPEC, RID_UNSIGNED}, -! {"enum", ENUM, NORID}, -! {"",}, {"",}, {"",}, {"",}, -! {"__imag", IMAGPART, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"float", TYPESPEC, RID_FLOAT}, -! {"inout", TYPE_QUAL, RID_INOUT}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"do", DO, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"signed", TYPESPEC, RID_SIGNED}, -! {"",}, {"",}, {"",}, -! {"goto", GOTO, NORID}, -! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, -! {"void", TYPESPEC, RID_VOID}, -! {"",}, {"",}, {"",}, -! {"asm", ASM_KEYWORD, NORID}, - }; - - #ifdef __GNUC__ -! inline - #endif - struct resword * -diff -rcp2N gcc-2.7.2.2/c-lex.c g77-new/c-lex.c -*** gcc-2.7.2.2/c-lex.c Thu Jun 15 07:11:39 1995 ---- g77-new/c-lex.c Sun Aug 10 18:46:49 1997 -*************** init_lex () -*** 173,176 **** ---- 173,177 ---- - ridpointers[(int) RID_CONST] = get_identifier ("const"); - ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile"); -+ ridpointers[(int) RID_RESTRICT] = get_identifier ("restrict"); - ridpointers[(int) RID_AUTO] = get_identifier ("auto"); - ridpointers[(int) RID_STATIC] = get_identifier ("static"); -*************** init_lex () -*** 206,209 **** ---- 207,211 ---- - UNSET_RESERVED_WORD ("iterator"); - UNSET_RESERVED_WORD ("complex"); -+ UNSET_RESERVED_WORD ("restrict"); - } - if (flag_no_asm) -*************** init_lex () -*** 214,217 **** ---- 216,220 ---- - UNSET_RESERVED_WORD ("iterator"); - UNSET_RESERVED_WORD ("complex"); -+ UNSET_RESERVED_WORD ("restrict"); - } - } -*************** yylex () -*** 1433,1437 **** - /* Create a node with determined type and value. */ - if (imag) -! yylval.ttype = build_complex (convert (type, integer_zero_node), - build_real (type, value)); - else ---- 1436,1441 ---- - /* Create a node with determined type and value. */ - if (imag) -! yylval.ttype = build_complex (NULL_TREE, -! convert (type, integer_zero_node), - build_real (type, value)); - else -*************** yylex () -*** 1624,1629 **** - <= TYPE_PRECISION (integer_type_node)) - yylval.ttype -! = build_complex (integer_zero_node, -! convert (integer_type_node, yylval.ttype)); - else - error ("complex integer constant is too wide for `complex int'"); ---- 1628,1634 ---- - <= TYPE_PRECISION (integer_type_node)) - yylval.ttype -! = build_complex (NULL_TREE, integer_zero_node, -! convert (integer_type_node, -! yylval.ttype)); - else - error ("complex integer constant is too wide for `complex int'"); -diff -rcp2N gcc-2.7.2.2/c-lex.h g77-new/c-lex.h -*** gcc-2.7.2.2/c-lex.h Thu Jun 15 07:12:22 1995 ---- g77-new/c-lex.h Sun Aug 10 18:10:55 1997 -*************** enum rid -*** 43,47 **** - RID_VOLATILE, - RID_INLINE, -! RID_NOALIAS, - RID_ITERATOR, - RID_COMPLEX, ---- 43,47 ---- - RID_VOLATILE, - RID_INLINE, -! RID_RESTRICT, - RID_ITERATOR, - RID_COMPLEX, -diff -rcp2N gcc-2.7.2.2/c-parse.gperf g77-new/c-parse.gperf -*** gcc-2.7.2.2/c-parse.gperf Fri Apr 9 19:00:44 1993 ---- g77-new/c-parse.gperf Sun Aug 10 18:10:55 1997 -*************** __label__, LABEL, NORID -*** 36,39 **** ---- 36,40 ---- - __real, REALPART, NORID - __real__, REALPART, NORID -+ __restrict, TYPE_QUAL, RID_RESTRICT - __signed, TYPESPEC, RID_SIGNED - __signed__, TYPESPEC, RID_SIGNED -*************** oneway, TYPE_QUAL, RID_ONEWAY -*** 69,72 **** ---- 70,74 ---- - out, TYPE_QUAL, RID_OUT - register, SCSPEC, RID_REGISTER -+ restrict, TYPE_QUAL, RID_RESTRICT - return, RETURN, NORID - short, TYPESPEC, RID_SHORT -diff -rcp2N gcc-2.7.2.2/c-typeck.c g77-new/c-typeck.c -*** gcc-2.7.2.2/c-typeck.c Thu Feb 20 19:24:11 1997 ---- g77-new/c-typeck.c Sun Aug 10 18:46:29 1997 -*************** pointer_int_sum (resultcode, ptrop, into -*** 2681,2686 **** - so the multiply won't overflow spuriously. */ - -! if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE) -! intop = convert (type_for_size (POINTER_SIZE, 0), intop); - - /* Replace the integer argument with a suitable product by the object size. ---- 2681,2688 ---- - so the multiply won't overflow spuriously. */ - -! if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype) -! || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype)) -! intop = convert (type_for_size (TYPE_PRECISION (sizetype), -! TREE_UNSIGNED (sizetype)), intop); - - /* Replace the integer argument with a suitable product by the object size. -diff -rcp2N gcc-2.7.2.2/calls.c g77-new/calls.c -*** gcc-2.7.2.2/calls.c Thu Oct 26 21:53:43 1995 ---- g77-new/calls.c Sun Aug 10 18:46:16 1997 -*************** expand_call (exp, target, ignore) -*** 564,567 **** ---- 564,569 ---- - /* Nonzero if it is plausible that this is a call to alloca. */ - int may_be_alloca; -+ /* Nonzero if this is a call to malloc or a related function. */ -+ int is_malloc; - /* Nonzero if this is a call to setjmp or a related function. */ - int returns_twice; -*************** expand_call (exp, target, ignore) -*** 741,745 **** - if (stack_arg_under_construction || i >= 0) - { -! rtx insn = NEXT_INSN (before_call), seq; - - /* Look for a call in the inline function code. ---- 743,749 ---- - if (stack_arg_under_construction || i >= 0) - { -! rtx first_insn -! = before_call ? NEXT_INSN (before_call) : get_insns (); -! rtx insn, seq; - - /* Look for a call in the inline function code. -*************** expand_call (exp, target, ignore) -*** 749,753 **** - - if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0) -! for (; insn; insn = NEXT_INSN (insn)) - if (GET_CODE (insn) == CALL_INSN) - break; ---- 753,757 ---- - - if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0) -! for (insn = first_insn; insn; insn = NEXT_INSN (insn)) - if (GET_CODE (insn) == CALL_INSN) - break; -*************** expand_call (exp, target, ignore) -*** 781,785 **** - seq = get_insns (); - end_sequence (); -! emit_insns_before (seq, NEXT_INSN (before_call)); - emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX); - } ---- 785,789 ---- - seq = get_insns (); - end_sequence (); -! emit_insns_before (seq, first_insn); - emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX); - } -*************** expand_call (exp, target, ignore) -*** 852,855 **** ---- 856,860 ---- - returns_twice = 0; - is_longjmp = 0; -+ is_malloc = 0; - - if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15) -*************** expand_call (exp, target, ignore) -*** 891,894 **** ---- 896,903 ---- - && ! strcmp (tname, "longjmp")) - is_longjmp = 1; -+ /* Only recognize malloc when alias analysis is enabled. */ -+ else if (tname[0] == 'm' && flag_alias_check -+ && ! strcmp(tname, "malloc")) -+ is_malloc = 1; - } - -*************** expand_call (exp, target, ignore) -*** 1087,1090 **** ---- 1096,1100 ---- - - store_expr (args[i].tree_value, copy, 0); -+ is_const = 0; - - args[i].tree_value = build1 (ADDR_EXPR, -*************** expand_call (exp, target, ignore) -*** 1363,1367 **** - /* Now we are about to start emitting insns that can be deleted - if a libcall is deleted. */ -! if (is_const) - start_sequence (); - ---- 1373,1377 ---- - /* Now we are about to start emitting insns that can be deleted - if a libcall is deleted. */ -! if (is_const || is_malloc) - start_sequence (); - -*************** expand_call (exp, target, ignore) -*** 1951,1954 **** ---- 1961,1978 ---- - end_sequence (); - emit_insns (insns); -+ } -+ else if (is_malloc) -+ { -+ rtx temp = gen_reg_rtx (GET_MODE (valreg)); -+ rtx last, insns; -+ -+ emit_move_insn (temp, valreg); -+ last = get_last_insn (); -+ REG_NOTES (last) = -+ gen_rtx (EXPR_LIST, REG_NOALIAS, temp, REG_NOTES (last)); -+ insns = get_insns (); -+ end_sequence (); -+ emit_insns (insns); -+ valreg = temp; - } - -diff -rcp2N gcc-2.7.2.2/cccp.c g77-new/cccp.c -*** gcc-2.7.2.2/cccp.c Thu Oct 26 18:07:26 1995 ---- g77-new/cccp.c Sun Aug 10 18:45:53 1997 -*************** initialize_builtins (inp, outp) -*** 9626,9629 **** ---- 9626,9630 ---- - so that it is present only when truly compiling with GNU C. */ - /* install ((U_CHAR *) "__GNUC__", -1, T_CONST, "2", -1); */ -+ install ((U_CHAR *) "__HAVE_BUILTIN_SETJMP__", -1, T_CONST, "1", -1); - - if (debug_output) -diff -rcp2N gcc-2.7.2.2/combine.c g77-new/combine.c -*** gcc-2.7.2.2/combine.c Sun Nov 26 14:32:07 1995 ---- g77-new/combine.c Mon Jul 28 21:44:17 1997 -*************** num_sign_bit_copies (x, mode) -*** 7326,7329 **** ---- 7326,7335 ---- - - case NEG: -+ while (GET_MODE (XEXP (x, 0)) == GET_MODE (x) -+ && GET_CODE (XEXP (x, 0)) == NEG -+ && GET_MODE (XEXP (XEXP (x, 0), 0)) == GET_MODE (x) -+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG) -+ x = XEXP (XEXP (x, 0), 0); /* Speed up 961126-1.c */ -+ - /* In general, this subtracts one sign bit copy. But if the value - is known to be positive, the number of sign bit copies is the -*************** distribute_notes (notes, from_insn, i3, -*** 10648,10651 **** ---- 10654,10658 ---- - case REG_EQUIV: - case REG_NONNEG: -+ case REG_NOALIAS: - /* These notes say something about results of an insn. We can - only support them if they used to be on I3 in which case they -diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.c g77-new/config/alpha/alpha.c -*** gcc-2.7.2.2/config/alpha/alpha.c Thu Feb 20 19:24:11 1997 ---- g77-new/config/alpha/alpha.c Thu Jul 10 20:08:47 1997 -*************** direct_return () -*** 1239,1243 **** - cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */ - -! #if !defined(CROSS_COMPILE) && !defined(_WIN32) - #include <stamp.h> - #endif ---- 1239,1243 ---- - cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */ - -! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__) - #include <stamp.h> - #endif -*************** output_prolog (file, size) -*** 1370,1373 **** ---- 1370,1378 ---- - - alpha_function_needs_gp = 0; -+ #ifdef __linux__ -+ if(profile_flag) { -+ alpha_function_needs_gp = 1; -+ } -+ #endif - for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) - if ((GET_CODE (insn) == CALL_INSN) -diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.h g77-new/config/alpha/alpha.h -*** gcc-2.7.2.2/config/alpha/alpha.h Thu Feb 20 19:24:12 1997 ---- g77-new/config/alpha/alpha.h Sun Aug 10 19:21:39 1997 -*************** extern int target_flags; -*** 112,116 **** ---- 112,118 ---- - {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} } - -+ #ifndef TARGET_DEFAULT - #define TARGET_DEFAULT 3 -+ #endif - - #ifndef TARGET_CPU_DEFAULT -*************** extern int target_flags; -*** 252,255 **** ---- 254,260 ---- - /* No data type wants to be aligned rounder than this. */ - #define BIGGEST_ALIGNMENT 64 -+ -+ /* For atomic access to objects, must have at least 32-bit alignment. */ -+ #define MINIMUM_ATOMIC_ALIGNMENT 32 - - /* Make strings word-aligned so strcpy from constants will be faster. */ -diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.md g77-new/config/alpha/alpha.md -*** gcc-2.7.2.2/config/alpha/alpha.md Fri Oct 27 06:49:59 1995 ---- g77-new/config/alpha/alpha.md Thu Jul 10 20:08:48 1997 -*************** -*** 1746,1752 **** - (if_then_else:DF - (match_operator 3 "signed_comparison_operator" -! [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG") - (match_operand:DF 2 "fp0_operand" "G,G")]) -! (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0")) - (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))] - "TARGET_FP" ---- 1746,1752 ---- - (if_then_else:DF - (match_operator 3 "signed_comparison_operator" -! [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") - (match_operand:DF 2 "fp0_operand" "G,G")]) -! (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0")) - (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))] - "TARGET_FP" -diff -rcp2N gcc-2.7.2.2/config/alpha/elf.h g77-new/config/alpha/elf.h -*** gcc-2.7.2.2/config/alpha/elf.h Wed Dec 31 19:00:00 1969 ---- g77-new/config/alpha/elf.h Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1,522 ---- -+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. -+ Copyright (C) 1996 Free Software Foundation, Inc. -+ Contributed by Richard Henderson (rth@tamu.edu). -+ -+ This file is part of GNU CC. -+ -+ GNU CC is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GNU CC is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GNU CC; see the file COPYING. If not, write to -+ the Free Software Foundation, 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+ /* This is used on Alpha platforms that use the ELF format. -+ Currently only Linux uses this. */ -+ -+ #include "alpha/linux.h" -+ -+ #undef TARGET_VERSION -+ #define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)"); -+ -+ #undef OBJECT_FORMAT_COFF -+ #undef EXTENDED_COFF -+ #define OBJECT_FORMAT_ELF -+ -+ #define SDB_DEBUGGING_INFO -+ -+ #undef ASM_FINAL_SPEC -+ -+ #undef CPP_PREDEFINES -+ #define CPP_PREDEFINES "\ -+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \ -+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__" -+ -+ #undef LINK_SPEC -+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \ -+ %{shared:-shared} \ -+ %{!shared: \ -+ %{!static: \ -+ %{rdynamic:-export-dynamic} \ -+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ -+ %{static:-static}}" -+ -+ /* Output at beginning of assembler file. */ -+ -+ #undef ASM_FILE_START -+ #define ASM_FILE_START(FILE) \ -+ { \ -+ alpha_write_verstamp (FILE); \ -+ output_file_directive (FILE, main_input_filename); \ -+ fprintf (FILE, "\t.version\t\"01.01\"\n"); \ -+ fprintf (FILE, "\t.set noat\n"); \ -+ } -+ -+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \ -+ alpha_output_lineno (STREAM, LINE) -+ extern void alpha_output_lineno (); -+ -+ extern void output_file_directive (); -+ -+ /* Attach a special .ident directive to the end of the file to identify -+ the version of GCC which compiled this code. The format of the -+ .ident string is patterned after the ones produced by native svr4 -+ C compilers. */ -+ -+ #define IDENT_ASM_OP ".ident" -+ -+ #ifdef IDENTIFY_WITH_IDENT -+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */ -+ #define ASM_IDENTIFY_LANGUAGE(FILE) \ -+ fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP, \ -+ lang_identify(), version_string) -+ #else -+ #define ASM_FILE_END(FILE) \ -+ do { \ -+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \ -+ IDENT_ASM_OP, version_string); \ -+ } while (0) -+ #endif -+ -+ /* Allow #sccs in preprocessor. */ -+ -+ #define SCCS_DIRECTIVE -+ -+ /* Output #ident as a .ident. */ -+ -+ #define ASM_OUTPUT_IDENT(FILE, NAME) \ -+ fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME); -+ -+ /* This is how to allocate empty space in some section. The .zero -+ pseudo-op is used for this on most svr4 assemblers. */ -+ -+ #define SKIP_ASM_OP ".zero" -+ -+ #undef ASM_OUTPUT_SKIP -+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \ -+ fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE)) -+ -+ /* Output the label which precedes a jumptable. Note that for all svr4 -+ systems where we actually generate jumptables (which is to say every -+ svr4 target except i386, where we use casesi instead) we put the jump- -+ tables into the .rodata section and since other stuff could have been -+ put into the .rodata section prior to any given jumptable, we have to -+ make sure that the location counter for the .rodata section gets pro- -+ perly re-aligned prior to the actual beginning of the jump table. */ -+ -+ #define ALIGN_ASM_OP ".align" -+ -+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL -+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ -+ ASM_OUTPUT_ALIGN ((FILE), 2); -+ #endif -+ -+ #undef ASM_OUTPUT_CASE_LABEL -+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \ -+ do { \ -+ ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \ -+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \ -+ } while (0) -+ -+ /* The standard SVR4 assembler seems to require that certain builtin -+ library routines (e.g. .udiv) be explicitly declared as .globl -+ in each assembly file where they are referenced. */ -+ -+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ -+ ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0)) -+ -+ /* This says how to output assembler code to declare an -+ uninitialized external linkage data object. Under SVR4, -+ the linker seems to want the alignment of data objects -+ to depend on their types. We do exactly that here. */ -+ -+ #define COMMON_ASM_OP ".comm" -+ -+ #undef ASM_OUTPUT_ALIGNED_COMMON -+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ -+ do { \ -+ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \ -+ assemble_name ((FILE), (NAME)); \ -+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \ -+ } while (0) -+ -+ /* This says how to output assembler code to declare an -+ uninitialized internal linkage data object. Under SVR4, -+ the linker seems to want the alignment of data objects -+ to depend on their types. We do exactly that here. */ -+ -+ #define LOCAL_ASM_OP ".local" -+ -+ #undef ASM_OUTPUT_ALIGNED_LOCAL -+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ -+ do { \ -+ fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \ -+ assemble_name ((FILE), (NAME)); \ -+ fprintf ((FILE), "\n"); \ -+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \ -+ } while (0) -+ -+ /* This is the pseudo-op used to generate a 64-bit word of data with a -+ specific value in some section. */ -+ -+ #define INT_ASM_OP ".quad" -+ -+ /* This is the pseudo-op used to generate a contiguous sequence of byte -+ values from a double-quoted string WITHOUT HAVING A TERMINATING NUL -+ AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */ -+ -+ #undef ASCII_DATA_ASM_OP -+ #define ASCII_DATA_ASM_OP ".ascii" -+ -+ /* Support const sections and the ctors and dtors sections for g++. -+ Note that there appears to be two different ways to support const -+ sections at the moment. You can either #define the symbol -+ READONLY_DATA_SECTION (giving it some code which switches to the -+ readonly data section) or else you can #define the symbols -+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and -+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */ -+ -+ #define USE_CONST_SECTION 1 -+ -+ #define CONST_SECTION_ASM_OP ".section\t.rodata" -+ -+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. -+ -+ Note that we want to give these sections the SHF_WRITE attribute -+ because these sections will actually contain data (i.e. tables of -+ addresses of functions in the current root executable or shared library -+ file) and, in the case of a shared library, the relocatable addresses -+ will have to be properly resolved/relocated (and then written into) by -+ the dynamic linker when it actually attaches the given shared library -+ to the executing process. (Note that on SVR4, you may wish to use the -+ `-z text' option to the ELF linker, when building a shared library, as -+ an additional check that you are doing everything right. But if you do -+ use the `-z text' option when building a shared library, you will get -+ errors unless the .ctors and .dtors sections are marked as writable -+ via the SHF_WRITE attribute.) */ -+ -+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\"" -+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\"" -+ -+ /* On svr4, we *do* have support for the .init and .fini sections, and we -+ can put stuff in there to be executed before and after `main'. We let -+ crtstuff.c and other files know this by defining the following symbols. -+ The definitions say how to change sections to the .init and .fini -+ sections. This is the same for all known svr4 assemblers. */ -+ -+ #define INIT_SECTION_ASM_OP ".section\t.init" -+ #define FINI_SECTION_ASM_OP ".section\t.fini" -+ -+ /* Support non-common, uninitialized data in the .bss section. */ -+ -+ #define BSS_SECTION_ASM_OP ".section\t.bss" -+ -+ /* A default list of other sections which we might be "in" at any given -+ time. For targets that use additional sections (e.g. .tdesc) you -+ should override this definition in the target-specific file which -+ includes this file. */ -+ -+ #undef EXTRA_SECTIONS -+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_bss -+ -+ /* A default list of extra section function definitions. For targets -+ that use additional sections (e.g. .tdesc) you should override this -+ definition in the target-specific file which includes this file. */ -+ -+ #undef EXTRA_SECTION_FUNCTIONS -+ #define EXTRA_SECTION_FUNCTIONS \ -+ CONST_SECTION_FUNCTION \ -+ CTORS_SECTION_FUNCTION \ -+ DTORS_SECTION_FUNCTION \ -+ BSS_SECTION_FUNCTION -+ -+ #undef READONLY_DATA_SECTION -+ #define READONLY_DATA_SECTION() const_section () -+ -+ extern void text_section (); -+ -+ #define CONST_SECTION_FUNCTION \ -+ void \ -+ const_section () \ -+ { \ -+ if (!USE_CONST_SECTION) \ -+ text_section(); \ -+ else if (in_section != in_const) \ -+ { \ -+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \ -+ in_section = in_const; \ -+ } \ -+ } -+ -+ #define CTORS_SECTION_FUNCTION \ -+ void \ -+ ctors_section () \ -+ { \ -+ if (in_section != in_ctors) \ -+ { \ -+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ -+ in_section = in_ctors; \ -+ } \ -+ } -+ -+ #define DTORS_SECTION_FUNCTION \ -+ void \ -+ dtors_section () \ -+ { \ -+ if (in_section != in_dtors) \ -+ { \ -+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ -+ in_section = in_dtors; \ -+ } \ -+ } -+ -+ #define BSS_SECTION_FUNCTION \ -+ void \ -+ bss_section () \ -+ { \ -+ if (in_section != in_bss) \ -+ { \ -+ fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP); \ -+ in_section = in_bss; \ -+ } \ -+ } -+ -+ -+ /* Switch into a generic section. -+ This is currently only used to support section attributes. -+ -+ We make the section read-only and executable for a function decl, -+ read-only for a const data decl, and writable for a non-const data decl. */ -+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \ -+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \ -+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \ -+ (DECL) && TREE_READONLY (DECL) ? "a" : "aw") -+ -+ -+ /* A C statement (sans semicolon) to output an element in the table of -+ global constructors. */ -+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ -+ do { \ -+ ctors_section (); \ -+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ -+ assemble_name (FILE, NAME); \ -+ fprintf (FILE, "\n"); \ -+ } while (0) -+ -+ /* A C statement (sans semicolon) to output an element in the table of -+ global destructors. */ -+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ -+ do { \ -+ dtors_section (); \ -+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ -+ assemble_name (FILE, NAME); \ -+ fprintf (FILE, "\n"); \ -+ } while (0) -+ -+ /* A C statement or statements to switch to the appropriate -+ section for output of DECL. DECL is either a `VAR_DECL' node -+ or a constant of some sort. RELOC indicates whether forming -+ the initial value of DECL requires link-time relocations. */ -+ -+ #define SELECT_SECTION(DECL,RELOC) \ -+ { \ -+ if (TREE_CODE (DECL) == STRING_CST) \ -+ { \ -+ if (! flag_writable_strings) \ -+ const_section (); \ -+ else \ -+ data_section (); \ -+ } \ -+ else if (TREE_CODE (DECL) == VAR_DECL) \ -+ { \ -+ if ((flag_pic && RELOC) \ -+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \ -+ || !DECL_INITIAL (DECL) \ -+ || (DECL_INITIAL (DECL) != error_mark_node \ -+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \ -+ { \ -+ if (DECL_COMMON (DECL) \ -+ && !DECL_INITIAL (DECL)) \ -+ /* || DECL_INITIAL (DECL) == error_mark_node)) */ \ -+ bss_section(); \ -+ else \ -+ data_section (); \ -+ } \ -+ else \ -+ const_section (); \ -+ } \ -+ else \ -+ const_section (); \ -+ } -+ -+ /* A C statement or statements to switch to the appropriate -+ section for output of RTX in mode MODE. RTX is some kind -+ of constant in RTL. The argument MODE is redundant except -+ in the case of a `const_int' rtx. Currently, these always -+ go into the const section. */ -+ -+ #undef SELECT_RTX_SECTION -+ #define SELECT_RTX_SECTION(MODE,RTX) const_section() -+ -+ /* Define the strings used for the special svr4 .type and .size directives. -+ These strings generally do not vary from one system running svr4 to -+ another, but if a given system (e.g. m88k running svr) needs to use -+ different pseudo-op names for these, they may be overridden in the -+ file which includes this one. */ -+ -+ #define TYPE_ASM_OP ".type" -+ #define SIZE_ASM_OP ".size" -+ -+ /* This is how we tell the assembler that a symbol is weak. */ -+ -+ #define ASM_WEAKEN_LABEL(FILE,NAME) \ -+ do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ -+ fputc ('\n', FILE); } while (0) -+ -+ /* This is how we tell the assembler that two symbols have the same value. */ -+ -+ #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \ -+ do { assemble_name(FILE, NAME1); \ -+ fputs(" = ", FILE); \ -+ assemble_name(FILE, NAME2); \ -+ fputc('\n', FILE); } while (0) -+ -+ /* The following macro defines the format used to output the second -+ operand of the .type assembler directive. Different svr4 assemblers -+ expect various different forms for this operand. The one given here -+ is just a default. You may need to override it in your machine- -+ specific tm.h file (depending upon the particulars of your assembler). */ -+ -+ #define TYPE_OPERAND_FMT "@%s" -+ -+ /* Write the extra assembler code needed to declare a function's result. -+ Most svr4 assemblers don't require any special declaration of the -+ result value, but there are exceptions. */ -+ -+ #ifndef ASM_DECLARE_RESULT -+ #define ASM_DECLARE_RESULT(FILE, RESULT) -+ #endif -+ -+ /* These macros generate the special .type and .size directives which -+ are used to set the corresponding fields of the linker symbol table -+ entries in an ELF object file under SVR4. These macros also output -+ the starting labels for the relevant functions/objects. */ -+ -+ /* Write the extra assembler code needed to declare an object properly. */ -+ -+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ -+ do { \ -+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ -+ assemble_name (FILE, NAME); \ -+ putc (',', FILE); \ -+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ -+ putc ('\n', FILE); \ -+ size_directive_output = 0; \ -+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ -+ { \ -+ size_directive_output = 1; \ -+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ -+ assemble_name (FILE, NAME); \ -+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ -+ } \ -+ ASM_OUTPUT_LABEL(FILE, NAME); \ -+ } while (0) -+ -+ /* Output the size directive for a decl in rest_of_decl_compilation -+ in the case where we did not do so before the initializer. -+ Once we find the error_mark_node, we know that the value of -+ size_directive_output was set -+ by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */ -+ -+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ -+ do { \ -+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ -+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ -+ && ! AT_END && TOP_LEVEL \ -+ && DECL_INITIAL (DECL) == error_mark_node \ -+ && !size_directive_output) \ -+ { \ -+ size_directive_output = 1; \ -+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ -+ assemble_name (FILE, name); \ -+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ -+ } \ -+ } while (0) -+ -+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and -+ ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table -+ corresponds to a particular byte value [0..255]. For any -+ given byte value, if the value in the corresponding table -+ position is zero, the given character can be output directly. -+ If the table value is 1, the byte must be output as a \ooo -+ octal escape. If the tables value is anything else, then the -+ byte value should be output as a \ followed by the value -+ in the table. Note that we can use standard UN*X escape -+ sequences for many control characters, but we don't use -+ \a to represent BEL because some svr4 assemblers (e.g. on -+ the i386) don't know about that. Also, we don't use \v -+ since some versions of gas, such as 2.2 did not accept it. */ -+ -+ #define ESCAPES \ -+ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -+ \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\ -+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\ -+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" -+ -+ /* Some svr4 assemblers have a limit on the number of characters which -+ can appear in the operand of a .string directive. If your assembler -+ has such a limitation, you should define STRING_LIMIT to reflect that -+ limit. Note that at least some svr4 assemblers have a limit on the -+ actual number of bytes in the double-quoted string, and that they -+ count each character in an escape sequence as one byte. Thus, an -+ escape sequence like \377 would count as four bytes. -+ -+ If your target assembler doesn't support the .string directive, you -+ should define this to zero. -+ */ -+ -+ #define STRING_LIMIT ((unsigned) 256) -+ -+ #define STRING_ASM_OP ".string" -+ -+ /* -+ * We always use gas here, so we don't worry about ECOFF assembler problems. -+ */ -+ #undef TARGET_GAS -+ #define TARGET_GAS (1) -+ -+ #undef PREFERRED_DEBUGGING_TYPE -+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG -+ -+ /* Provide a STARTFILE_SPEC appropriate for Linux. Here we add -+ the Linux magical crtbegin.o file (see crtstuff.c) which -+ provides part of the support for getting C++ file-scope static -+ object constructed before entering `main'. */ -+ -+ #undef STARTFILE_SPEC -+ #define STARTFILE_SPEC \ -+ "%{!shared: \ -+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ -+ crti.o%s crtbegin.o%s" -+ -+ /* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on -+ the Linux magical crtend.o file (see crtstuff.c) which -+ provides part of the support for getting C++ file-scope static -+ object constructed before entering `main', followed by a normal -+ Linux "finalizer" file, `crtn.o'. */ -+ -+ #undef ENDFILE_SPEC -+ #define ENDFILE_SPEC \ -+ "crtend.o%s crtn.o%s" -diff -rcp2N gcc-2.7.2.2/config/alpha/linux.h g77-new/config/alpha/linux.h -*** gcc-2.7.2.2/config/alpha/linux.h Wed Dec 31 19:00:00 1969 ---- g77-new/config/alpha/linux.h Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1,72 ---- -+ /* Definitions of target machine for GNU compiler, for Alpha Linux, -+ using ECOFF. -+ Copyright (C) 1995 Free Software Foundation, Inc. -+ Contributed by Bob Manson. -+ Derived from work contributed by Cygnus Support, -+ (c) 1993 Free Software Foundation. -+ -+ This file is part of GNU CC. -+ -+ GNU CC is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GNU CC is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GNU CC; see the file COPYING. If not, write to -+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -+ -+ #define TARGET_DEFAULT (3 | MASK_GAS) -+ -+ #include "alpha/alpha.h" -+ -+ #undef TARGET_VERSION -+ #define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)"); -+ -+ #undef CPP_PREDEFINES -+ #define CPP_PREDEFINES "\ -+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \ -+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha)" -+ -+ /* We don't actually need any of these; the MD_ vars are ignored -+ anyway for cross-compilers, and the other specs won't get picked up -+ 'coz the user is supposed to do ld -r (hmm, perhaps that should be -+ the default). In any case, setting them thus will catch some -+ common user errors. */ -+ -+ #undef MD_EXEC_PREFIX -+ #undef MD_STARTFILE_PREFIX -+ -+ #undef LIB_SPEC -+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}" -+ -+ #undef LINK_SPEC -+ #define LINK_SPEC \ -+ "-G 8 %{O*:-O3} %{!O*:-O1}" -+ -+ #undef ASM_SPEC -+ #define ASM_SPEC "-nocpp" -+ -+ /* Can't do stabs */ -+ #undef SDB_DEBUGGING_INFO -+ -+ /* Prefer dbx. */ -+ #undef PREFERRED_DEBUGGING_TYPE -+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG -+ -+ #undef FUNCTION_PROFILER -+ -+ #define FUNCTION_PROFILER(FILE, LABELNO) \ -+ do { \ -+ fputs ("\tlda $27,_mcount\n", (FILE)); \ -+ fputs ("\tjsr $26,($27),_mcount\n", (FILE)); \ -+ fputs ("\tldgp $29,0($26)\n", (FILE)); \ -+ } while (0); -+ -+ /* Generate calls to memcpy, etc., not bcopy, etc. */ -+ #define TARGET_MEM_FUNCTIONS -diff -rcp2N gcc-2.7.2.2/config/alpha/t-linux g77-new/config/alpha/t-linux -*** gcc-2.7.2.2/config/alpha/t-linux Wed Dec 31 19:00:00 1969 ---- g77-new/config/alpha/t-linux Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1,3 ---- -+ # Our header files are supposed to be correct, nein? -+ FIXINCLUDES = -+ STMP_FIXPROTO = -diff -rcp2N gcc-2.7.2.2/config/alpha/x-linux g77-new/config/alpha/x-linux -*** gcc-2.7.2.2/config/alpha/x-linux Wed Dec 31 19:00:00 1969 ---- g77-new/config/alpha/x-linux Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1 ---- -+ CLIB=-lbfd -liberty -diff -rcp2N gcc-2.7.2.2/config/alpha/xm-alpha.h g77-new/config/alpha/xm-alpha.h -*** gcc-2.7.2.2/config/alpha/xm-alpha.h Thu Aug 31 17:52:27 1995 ---- g77-new/config/alpha/xm-alpha.h Thu Jul 10 20:08:49 1997 -*************** Boston, MA 02111-1307, USA. */ -*** 46,51 **** ---- 46,53 ---- - #include <alloca.h> - #else -+ #ifndef alloca - extern void *alloca (); - #endif -+ #endif - - /* The host compiler has problems with enum bitfields since it makes -*************** extern void *malloc (), *realloc (), *ca -*** 68,72 **** ---- 70,76 ---- - /* OSF/1 has vprintf. */ - -+ #ifndef linux /* 1996/02/22 mauro@craftwork.com -- unreliable with Linux */ - #define HAVE_VPRINTF -+ #endif - - /* OSF/1 has putenv. */ -diff -rcp2N gcc-2.7.2.2/config/alpha/xm-linux.h g77-new/config/alpha/xm-linux.h -*** gcc-2.7.2.2/config/alpha/xm-linux.h Wed Dec 31 19:00:00 1969 ---- g77-new/config/alpha/xm-linux.h Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1,10 ---- -+ #ifndef _XM_LINUX_H -+ #define _XM_LINUX_H -+ -+ #include "xm-alpha.h" -+ -+ #define HAVE_STRERROR -+ -+ #define DONT_DECLARE_SYS_SIGLIST -+ #define USE_BFD -+ #endif -diff -rcp2N gcc-2.7.2.2/config/i386/i386.c g77-new/config/i386/i386.c -*** gcc-2.7.2.2/config/i386/i386.c Sun Oct 22 07:13:21 1995 ---- g77-new/config/i386/i386.c Sun Aug 10 18:46:09 1997 -*************** standard_80387_constant_p (x) -*** 1290,1294 **** - set_float_handler (handler); - REAL_VALUE_FROM_CONST_DOUBLE (d, x); -! is0 = REAL_VALUES_EQUAL (d, dconst0); - is1 = REAL_VALUES_EQUAL (d, dconst1); - set_float_handler (NULL_PTR); ---- 1290,1294 ---- - set_float_handler (handler); - REAL_VALUE_FROM_CONST_DOUBLE (d, x); -! is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d); - is1 = REAL_VALUES_EQUAL (d, dconst1); - set_float_handler (NULL_PTR); -diff -rcp2N gcc-2.7.2.2/config/mips/mips.c g77-new/config/mips/mips.c -*** gcc-2.7.2.2/config/mips/mips.c Thu Feb 20 19:24:13 1997 ---- g77-new/config/mips/mips.c Sun Aug 10 18:45:43 1997 -*************** expand_block_move (operands) -*** 2360,2365 **** - - else if (constp && bytes <= 2*MAX_MOVE_BYTES) -! emit_insn (gen_movstrsi_internal (gen_rtx (MEM, BLKmode, dest_reg), -! gen_rtx (MEM, BLKmode, src_reg), - bytes_rtx, align_rtx)); - ---- 2360,2367 ---- - - else if (constp && bytes <= 2*MAX_MOVE_BYTES) -! emit_insn (gen_movstrsi_internal (change_address (operands[0], -! BLKmode, dest_reg), -! change_address (orig_src, BLKmode, -! src_reg), - bytes_rtx, align_rtx)); - -diff -rcp2N gcc-2.7.2.2/config/mips/mips.h g77-new/config/mips/mips.h -*** gcc-2.7.2.2/config/mips/mips.h Thu Nov 9 11:23:09 1995 ---- g77-new/config/mips/mips.h Sun Aug 10 18:46:44 1997 -*************** typedef struct mips_args { -*** 2160,2170 **** - } \ - \ -! /* Flush the instruction cache. */ \ -! /* ??? Are the modes right? Maybe they should depend on -mint64/-mlong64? */\ - /* ??? Should check the return value for errors. */ \ -! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "cacheflush"), \ - 0, VOIDmode, 3, addr, Pmode, \ - GEN_INT (TRAMPOLINE_SIZE), SImode, \ -! GEN_INT (1), SImode); \ - } - ---- 2160,2170 ---- - } \ - \ -! /* Flush both caches. We need to flush the data cache in case \ -! the system has a write-back cache. */ \ - /* ??? Should check the return value for errors. */ \ -! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"), \ - 0, VOIDmode, 3, addr, Pmode, \ - GEN_INT (TRAMPOLINE_SIZE), SImode, \ -! GEN_INT (3), TYPE_MODE (integer_type_node)); \ - } - -*************** typedef struct mips_args { -*** 2388,2392 **** - ((GET_CODE (X) != CONST_DOUBLE \ - || mips_const_double_ok (X, GET_MODE (X))) \ -! && ! (GET_CODE (X) == CONST && ABI_64BIT)) - - /* A C compound statement that attempts to replace X with a valid ---- 2388,2393 ---- - ((GET_CODE (X) != CONST_DOUBLE \ - || mips_const_double_ok (X, GET_MODE (X))) \ -! && ! (GET_CODE (X) == CONST \ -! && (ABI_64BIT || GET_CODE (XEXP (X, 0)) == MINUS))) - - /* A C compound statement that attempts to replace X with a valid -diff -rcp2N gcc-2.7.2.2/config/mips/sni-gas.h g77-new/config/mips/sni-gas.h -*** gcc-2.7.2.2/config/mips/sni-gas.h Wed Dec 31 19:00:00 1969 ---- g77-new/config/mips/sni-gas.h Sun Aug 10 18:46:33 1997 -*************** -*** 0 **** ---- 1,43 ---- -+ #include "mips/sni-svr4.h" -+ -+ /* Enable debugging. */ -+ #define DBX_DEBUGGING_INFO -+ #define SDB_DEBUGGING_INFO -+ #define MIPS_DEBUGGING_INFO -+ -+ #define DWARF_DEBUGGING_INFO -+ #undef PREFERRED_DEBUGGING_TYPE -+ #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG -+ -+ /* We need to use .esize and .etype instead of .size and .type to -+ avoid conflicting with ELF directives. These are only recognized -+ by gas, anyhow, not the native assembler. */ -+ #undef PUT_SDB_SIZE -+ #define PUT_SDB_SIZE(a) \ -+ do { \ -+ extern FILE *asm_out_text_file; \ -+ fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \ -+ } while (0) -+ -+ #undef PUT_SDB_TYPE -+ #define PUT_SDB_TYPE(a) \ -+ do { \ -+ extern FILE *asm_out_text_file; \ -+ fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \ -+ } while (0) -+ -+ -+ /* This is how to equate one symbol to another symbol. The syntax used is -+ `SYM1=SYM2'. Note that this is different from the way equates are done -+ with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'. */ -+ -+ #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ -+ do { fprintf ((FILE), "\t"); \ -+ assemble_name (FILE, LABEL1); \ -+ fprintf (FILE, " = "); \ -+ assemble_name (FILE, LABEL2); \ -+ fprintf (FILE, "\n"); \ -+ } while (0) -+ -+ -+ -diff -rcp2N gcc-2.7.2.2/config/mips/sni-svr4.h g77-new/config/mips/sni-svr4.h -*** gcc-2.7.2.2/config/mips/sni-svr4.h Wed Dec 31 19:00:00 1969 ---- g77-new/config/mips/sni-svr4.h Sun Aug 10 18:46:33 1997 -*************** -*** 0 **** ---- 1,103 ---- -+ /* Definitions of target machine for GNU compiler. SNI SINIX version. -+ Copyright (C) 1996 Free Software Foundation, Inc. -+ Contributed by Marco Walther (Marco.Walther@mch.sni.de). -+ -+ This file is part of GNU CC. -+ -+ GNU CC is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GNU CC is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GNU CC; see the file COPYING. If not, write to -+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -+ -+ #define MIPS_SVR4 -+ -+ #define CPP_PREDEFINES "\ -+ -Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \ -+ -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \ -+ -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(mips)" -+ -+ #define CPP_SPEC "\ -+ %{.cc: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \ -+ %{.cxx: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \ -+ %{.C: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \ -+ %{.m: -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C} \ -+ %{.S: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ -+ %{.s: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ -+ %{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \ -+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int" -+ -+ #define LINK_SPEC "\ -+ %{G*} \ -+ %{!mgas: \ -+ %{dy} %{dn}}" -+ -+ #define LIB_SPEC "\ -+ %{p:-lprof1} \ -+ %{!p:%{pg:-lprof1} \ -+ %{!pg:-L/usr/ccs/lib/ -lc /usr/ccs/lib/crtn.o%s}}" -+ -+ #define STARTFILE_SPEC "\ -+ %{pg:gcrt0.o%s} \ -+ %{!pg:%{p:mcrt0.o%s} \ -+ %{!p:/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xt.o%s}}" -+ -+ /* Mips System V.4 doesn't have a getpagesize() function needed by the -+ trampoline code, so use the POSIX sysconf function to get it. -+ This is only done when compiling the trampoline code. */ -+ -+ #ifdef L_trampoline -+ #include <unistd.h> -+ -+ #define getpagesize() sysconf(_SC_PAGE_SIZE) -+ #endif /* L_trampoline */ -+ -+ /* Use atexit for static constructors/destructors, instead of defining -+ our own exit function. */ -+ #define HAVE_ATEXIT -+ -+ /* Generate calls to memcpy, etc., not bcopy, etc. */ -+ #define TARGET_MEM_FUNCTIONS -+ -+ #define OBJECT_FORMAT_ELF -+ -+ #define TARGET_DEFAULT MASK_ABICALLS -+ #define ABICALLS_ASM_OP ".option pic2" -+ -+ #define MACHINE_TYPE "SNI running SINIX 5.42" -+ -+ #define MIPS_DEFAULT_GVALUE 0 -+ -+ #define NM_FLAGS "-p" -+ -+ /* wir haben ein Problem, wenn in einem Assembler-File keine .text-section -+ erzeugt wird. Dann landen diese Pseudo-Labels in irgendeiner anderen -+ section, z.B. .reginfo. Das macht den ld sehr ungluecklich. */ -+ -+ #define ASM_IDENTIFY_GCC(mw_stream) \ -+ fprintf(mw_stream, "\t.ident \"gcc2_compiled.\"\n"); -+ -+ #define ASM_IDENTIFY_LANGUAGE(STREAM) -+ -+ #define ASM_LONG ".word\t" -+ #define ASM_GLOBAL ".rdata\n\t\t.globl\t" -+ -+ #include "mips/mips.h" -+ -+ /* We do not want to run mips-tfile! */ -+ #undef ASM_FINAL_SPEC -+ -+ #undef OBJECT_FORMAT_COFF -+ -+ /* We don't support debugging info for now. */ -+ #undef DBX_DEBUGGING_INFO -+ #undef SDB_DEBUGGING_INFO -+ #undef MIPS_DEBUGGING_INFO -diff -rcp2N gcc-2.7.2.2/config/mips/x-sni-svr4 g77-new/config/mips/x-sni-svr4 -*** gcc-2.7.2.2/config/mips/x-sni-svr4 Wed Dec 31 19:00:00 1969 ---- g77-new/config/mips/x-sni-svr4 Sun Aug 10 18:46:33 1997 -*************** -*** 0 **** ---- 1,18 ---- -+ # Define CC and OLDCC as the same, so that the tests: -+ # if [ x"$(OLDCC)" = x"$(CC)" ] ... -+ # -+ # will succeed (if OLDCC != CC, it is assumed that GCC is -+ # being used in secondary stage builds). -+ # -Olimit is so the user can use -O2. Down with fixed -+ # size tables! -+ -+ CC = $(OLDCC) -+ OPT = -+ OLDCC = cc -Olimit 3000 $(OPT) -+ -+ X_CFLAGS = -DNO_SYS_SIGLIST -+ -+ # Show we need to use the C version of ALLOCA -+ # The SVR3 configurations have it, but the SVR4 configurations don't. -+ # For now, just try using it for all SVR* configurations. -+ ALLOCA = alloca.o -diff -rcp2N gcc-2.7.2.2/config/msdos/configur.bat g77-new/config/msdos/configur.bat -*** gcc-2.7.2.2/config/msdos/configur.bat Mon Aug 28 05:55:47 1995 ---- g77-new/config/msdos/configur.bat Sun Aug 10 19:08:05 1997 -*************** sed -f config/msdos/top.sed Makefile.in -*** 18,21 **** ---- 18,27 ---- - set LANG=
-
-+ if not exist ada\make-lang.in goto no_ada
-+ sed -f config/msdos/top.sed ada\make-lang.in >> Makefile
-+ sed -f config/msdos/top.sed ada\makefile.in > ada\Makefile
-+ set LANG=%LANG% ada.&
-+ :no_ada
-+
- if not exist cp\make-lang.in goto no_cp
- sed -f config/msdos/top.sed cp\make-lang.in >> Makefile
-diff -rcp2N gcc-2.7.2.2/config/pa/pa.c g77-new/config/pa/pa.c -*** gcc-2.7.2.2/config/pa/pa.c Sun Oct 22 07:45:20 1995 ---- g77-new/config/pa/pa.c Sun Aug 10 18:45:44 1997 -*************** output_move_double (operands) -*** 1344,1369 **** - do them in the other order. - -! RMS says "This happens only for registers; -! such overlap can't happen in memory unless the user explicitly -! sets it up, and that is an undefined circumstance." -! -! but it happens on the HP-PA when loading parameter registers, -! so I am going to define that circumstance, and make it work -! as expected. */ - -! if (optype0 == REGOP && (optype1 == MEMOP || optype1 == OFFSOP) -! && reg_overlap_mentioned_p (operands[0], XEXP (operands[1], 0))) - { -- /* XXX THIS PROBABLY DOESN'T WORK. */ - /* Do the late half first. */ - if (addreg1) - output_asm_insn ("ldo 4(%0),%0", &addreg1); - output_asm_insn (singlemove_string (latehalf), latehalf); - if (addreg1) - output_asm_insn ("ldo -4(%0),%0", &addreg1); -- /* Then clobber. */ - return singlemove_string (operands); - } - - if (optype0 == REGOP && optype1 == REGOP - && REGNO (operands[0]) == REGNO (operands[1]) + 1) ---- 1344,1377 ---- - do them in the other order. - -! This can happen in two cases: - -! mem -> register where the first half of the destination register -! is the same register used in the memory's address. Reload -! can create such insns. -! -! mem in this case will be either register indirect or register -! indirect plus a valid offset. -! -! register -> register move where REGNO(dst) == REGNO(src + 1) -! someone (Tim/Tege?) claimed this can happen for parameter loads. -! -! Handle mem -> register case first. */ -! if (optype0 == REGOP -! && (optype1 == MEMOP || optype1 == OFFSOP) -! && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1, -! operands[1], 0)) - { - /* Do the late half first. */ - if (addreg1) - output_asm_insn ("ldo 4(%0),%0", &addreg1); - output_asm_insn (singlemove_string (latehalf), latehalf); -+ -+ /* Then clobber. */ - if (addreg1) - output_asm_insn ("ldo -4(%0),%0", &addreg1); - return singlemove_string (operands); - } - -+ /* Now handle register -> register case. */ - if (optype0 == REGOP && optype1 == REGOP - && REGNO (operands[0]) == REGNO (operands[1]) + 1) -diff -rcp2N gcc-2.7.2.2/config/pa/pa.md g77-new/config/pa/pa.md -*** gcc-2.7.2.2/config/pa/pa.md Mon Aug 14 09:00:49 1995 ---- g77-new/config/pa/pa.md Sun Aug 10 18:45:45 1997 -*************** -*** 1828,1832 **** - (define_insn "" - [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand" -! "=f,*r,Q,?o,?Q,f,*&r,*&r") - (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand" - "fG,*rG,f,*r,*r,Q,o,Q"))] ---- 1828,1832 ---- - (define_insn "" - [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand" -! "=f,*r,Q,?o,?Q,f,*r,*r") - (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand" - "fG,*rG,f,*r,*r,Q,o,Q"))] -*************** -*** 1846,1850 **** - (define_insn "" - [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand" -! "=r,?o,?Q,&r,&r") - (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand" - "rG,r,r,o,Q"))] ---- 1846,1850 ---- - (define_insn "" - [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand" -! "=r,?o,?Q,r,r") - (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand" - "rG,r,r,o,Q"))] -*************** -*** 2019,2023 **** - (define_insn "" - [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand" -! "=r,o,Q,&r,&r,&r,f,f,*T") - (match_operand:DI 1 "general_operand" - "rM,r,r,o,Q,i,fM,*T,f"))] ---- 2019,2023 ---- - (define_insn "" - [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand" -! "=r,o,Q,r,r,r,f,f,*T") - (match_operand:DI 1 "general_operand" - "rM,r,r,o,Q,i,fM,*T,f"))] -*************** -*** 2037,2041 **** - (define_insn "" - [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand" -! "=r,o,Q,&r,&r,&r") - (match_operand:DI 1 "general_operand" - "rM,r,r,o,Q,i"))] ---- 2037,2041 ---- - (define_insn "" - [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand" -! "=r,o,Q,r,r,r") - (match_operand:DI 1 "general_operand" - "rM,r,r,o,Q,i"))] -diff -rcp2N gcc-2.7.2.2/config/rs6000/rs6000.c g77-new/config/rs6000/rs6000.c -*** gcc-2.7.2.2/config/rs6000/rs6000.c Thu Feb 20 19:24:14 1997 ---- g77-new/config/rs6000/rs6000.c Sun Aug 10 04:44:05 1997 -*************** input_operand (op, mode) -*** 724,730 **** - return 1; - -! /* For HImode and QImode, any constant is valid. */ -! if ((mode == HImode || mode == QImode) -! && GET_CODE (op) == CONST_INT) - return 1; - ---- 724,729 ---- - return 1; - -! /* For integer modes, any constant is ok. */ -! if (GET_CODE (op) == CONST_INT) - return 1; - -diff -rcp2N gcc-2.7.2.2/config/sparc/sol2.h g77-new/config/sparc/sol2.h -*** gcc-2.7.2.2/config/sparc/sol2.h Sat Aug 19 17:36:45 1995 ---- g77-new/config/sparc/sol2.h Sun Aug 10 18:45:53 1997 -*************** do { \ -*** 166,168 **** - /* Define for support of TFmode long double and REAL_ARITHMETIC. - Sparc ABI says that long double is 4 words. */ -! #define LONG_DOUBLE_TYPE_SIZE 128 ---- 166,168 ---- - /* Define for support of TFmode long double and REAL_ARITHMETIC. - Sparc ABI says that long double is 4 words. */ -! #define LONG_DOUBLE_TYPE_SIZE 64 -diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.c g77-new/config/sparc/sparc.c -*** gcc-2.7.2.2/config/sparc/sparc.c Tue Sep 12 18:32:24 1995 ---- g77-new/config/sparc/sparc.c Sun Aug 10 18:46:03 1997 -*************** Boston, MA 02111-1307, USA. */ -*** 40,46 **** - /* 1 if the caller has placed an "unimp" insn immediately after the call. - This is used in v8 code when calling a function that returns a structure. -! v9 doesn't have this. */ - -! #define SKIP_CALLERS_UNIMP_P (!TARGET_V9 && current_function_returns_struct) - - /* Global variables for machine-dependent things. */ ---- 40,51 ---- - /* 1 if the caller has placed an "unimp" insn immediately after the call. - This is used in v8 code when calling a function that returns a structure. -! v9 doesn't have this. Be careful to have this test be the same as that -! used on the call. */ - -! #define SKIP_CALLERS_UNIMP_P \ -! (!TARGET_V9 && current_function_returns_struct \ -! && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl))) \ -! && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl))) \ -! == INTEGER_CST)) - - /* Global variables for machine-dependent things. */ -diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.h g77-new/config/sparc/sparc.h -*** gcc-2.7.2.2/config/sparc/sparc.h Thu Feb 20 19:24:15 1997 ---- g77-new/config/sparc/sparc.h Sun Aug 10 18:46:13 1997 -*************** extern int leaf_function; -*** 1526,1533 **** - - /* Output assembler code to FILE to increment profiler label # LABELNO -! for profiling a function entry. */ - - #define FUNCTION_PROFILER(FILE, LABELNO) \ - do { \ - fputs ("\tsethi %hi(", (FILE)); \ - ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \ ---- 1526,1540 ---- - - /* Output assembler code to FILE to increment profiler label # LABELNO -! for profiling a function entry. -! -! 32 bit sparc uses %g2 as the STATIC_CHAIN_REGNUM which gets clobbered -! during profiling so we need to save/restore it around the call to mcount. -! We're guaranteed that a save has just been done, and we use the space -! allocated for intreg/fpreg value passing. */ - - #define FUNCTION_PROFILER(FILE, LABELNO) \ - do { \ -+ if (! TARGET_V9) \ -+ fputs ("\tst %g2,[%fp-4]\n", FILE); \ - fputs ("\tsethi %hi(", (FILE)); \ - ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \ -*************** extern int leaf_function; -*** 1539,1542 **** ---- 1546,1551 ---- - ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO); \ - fputs ("),%o0,%o0\n", (FILE)); \ -+ if (! TARGET_V9) \ -+ fputs ("\tld [%fp-4],%g2\n", FILE); \ - } while (0) - -diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.md g77-new/config/sparc/sparc.md -*** gcc-2.7.2.2/config/sparc/sparc.md Tue Sep 12 18:57:35 1995 ---- g77-new/config/sparc/sparc.md Sun Aug 10 18:46:27 1997 -*************** -*** 4799,4803 **** - abort (); - -! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF) - { - /* This is really a PIC sequence. We want to represent ---- 4799,4803 ---- - abort (); - -! if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF) - { - /* This is really a PIC sequence. We want to represent -*************** -*** 4809,4824 **** - - if (! TARGET_V9 && INTVAL (operands[3]) != 0) -! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3, -! gen_rtx (SET, VOIDmode, pc_rtx, -! XEXP (operands[0], 0)), -! operands[3], -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - else -! emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, -! gen_rtx (SET, VOIDmode, pc_rtx, -! XEXP (operands[0], 0)), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - goto finish_call; - } ---- 4809,4828 ---- - - if (! TARGET_V9 && INTVAL (operands[3]) != 0) -! emit_jump_insn -! (gen_rtx (PARALLEL, VOIDmode, -! gen_rtvec (3, -! gen_rtx (SET, VOIDmode, pc_rtx, -! XEXP (operands[0], 0)), -! GEN_INT (INTVAL (operands[3]) & 0xfff), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - else -! emit_jump_insn -! (gen_rtx (PARALLEL, VOIDmode, -! gen_rtvec (2, -! gen_rtx (SET, VOIDmode, pc_rtx, -! XEXP (operands[0], 0)), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - goto finish_call; - } -*************** -*** 4839,4852 **** - - if (! TARGET_V9 && INTVAL (operands[3]) != 0) -! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3, -! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), -! operands[3], -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - else -! emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, -! gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - - finish_call: ---- 4843,4858 ---- - - if (! TARGET_V9 && INTVAL (operands[3]) != 0) -! emit_call_insn -! (gen_rtx (PARALLEL, VOIDmode, -! gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), -! GEN_INT (INTVAL (operands[3]) & 0xfff), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - else -! emit_call_insn -! (gen_rtx (PARALLEL, VOIDmode, -! gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx), -! gen_rtx (CLOBBER, VOIDmode, -! gen_rtx (REG, Pmode, 15))))); - - finish_call: -*************** -*** 4911,4915 **** - (clobber (reg:SI 15))] - ;;- Do not use operand 1 for most machines. -! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0" - "call %a0,%1\;nop\;unimp %2" - [(set_attr "type" "call_no_delay_slot")]) ---- 4917,4921 ---- - (clobber (reg:SI 15))] - ;;- Do not use operand 1 for most machines. -! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0" - "call %a0,%1\;nop\;unimp %2" - [(set_attr "type" "call_no_delay_slot")]) -*************** -*** 4923,4927 **** - (clobber (reg:SI 15))] - ;;- Do not use operand 1 for most machines. -! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0" - "call %a0,%1\;nop\;unimp %2" - [(set_attr "type" "call_no_delay_slot")]) ---- 4929,4933 ---- - (clobber (reg:SI 15))] - ;;- Do not use operand 1 for most machines. -! "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0" - "call %a0,%1\;nop\;unimp %2" - [(set_attr "type" "call_no_delay_slot")]) -*************** -*** 5178,5184 **** - emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx)); - emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx)); -- emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, Pmode, 8))); - /* Return, restoring reg window and jumping to goto handler. */ - emit_insn (gen_goto_handler_and_restore ()); - DONE; - }") ---- 5184,5190 ---- - emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx)); - emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx)); - /* Return, restoring reg window and jumping to goto handler. */ - emit_insn (gen_goto_handler_and_restore ()); -+ emit_barrier (); - DONE; - }") -*************** -*** 5192,5200 **** - - (define_insn "goto_handler_and_restore" -! [(unspec_volatile [(const_int 0)] 2)] - "" - "jmp %%o0+0\;restore" - [(set_attr "type" "misc") - (set_attr "length" "2")]) - - ;; Special pattern for the FLUSH instruction. ---- 5198,5237 ---- - - (define_insn "goto_handler_and_restore" -! [(unspec_volatile [(const_int 0)] 2) -! (use (reg:SI 8))] - "" - "jmp %%o0+0\;restore" - [(set_attr "type" "misc") - (set_attr "length" "2")]) -+ -+ ;; Pattern for use after a setjmp to store FP and the return register -+ ;; into the stack area. -+ -+ (define_expand "setjmp" -+ [(const_int 0)] -+ "" -+ " -+ { -+ if (TARGET_V9) -+ emit_insn (gen_setjmp_64 ()); -+ else -+ emit_insn (gen_setjmp_32 ()); -+ -+ DONE; -+ }") -+ -+ (define_expand "setjmp_32" -+ [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0)) -+ (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))] -+ "" -+ " -+ { operands[0] = frame_pointer_rtx; }") -+ -+ (define_expand "setjmp_64" -+ [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0)) -+ (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))] -+ "" -+ " -+ { operands[0] = frame_pointer_rtx; }") - - ;; Special pattern for the FLUSH instruction. -diff -rcp2N gcc-2.7.2.2/config/x-linux g77-new/config/x-linux -*** gcc-2.7.2.2/config/x-linux Tue Mar 28 07:43:37 1995 ---- g77-new/config/x-linux Thu Jul 10 20:08:49 1997 -*************** BOOT_CFLAGS = -O $(CFLAGS) -Iinclude -*** 13,14 **** ---- 13,17 ---- - # Don't run fixproto - STMP_FIXPROTO = -+ -+ # Don't install "assert.h" in gcc. We use the one in glibc. -+ INSTALL_ASSERT_H = -diff -rcp2N gcc-2.7.2.2/config/x-linux-aout g77-new/config/x-linux-aout -*** gcc-2.7.2.2/config/x-linux-aout Wed Dec 31 19:00:00 1969 ---- g77-new/config/x-linux-aout Thu Jul 10 20:08:49 1997 -*************** -*** 0 **** ---- 1,14 ---- -+ # It is defined in config/xm-linux.h. -+ # X_CFLAGS = -DPOSIX -+ -+ # The following is needed when compiling stages 2 and 3 because gcc's -+ # limits.h must be picked up before /usr/include/limits.h. This is because -+ # each does an #include_next of the other if the other hasn't been included. -+ # /usr/include/limits.h loses if it gets found first because /usr/include is -+ # at the end of the search order. When a new version of gcc is released, -+ # gcc's limits.h hasn't been installed yet and hence isn't found. -+ -+ BOOT_CFLAGS = -O $(CFLAGS) -Iinclude -+ -+ # Don't run fixproto -+ STMP_FIXPROTO = -diff -rcp2N gcc-2.7.2.2/config.guess g77-new/config.guess -*** gcc-2.7.2.2/config.guess Thu Feb 20 19:24:32 1997 ---- g77-new/config.guess Thu Jul 10 20:08:50 1997 -*************** trap 'rm -f dummy.c dummy.o dummy; exit -*** 52,63 **** - - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -- alpha:OSF1:V*:*) -- # After 1.2, OSF1 uses "V1.3" for uname -r. -- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` -- exit 0 ;; - alpha:OSF1:*:*) - # 1.2 uses "1.2" for uname -r. -! echo alpha-dec-osf${UNAME_RELEASE} -! exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 ---- 52,62 ---- - - case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - alpha:OSF1:*:*) -+ # A Vn.n version is a released version. -+ # A Tn.n version is a released field test version. -+ # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. -! echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` -! exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 -*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ -*** 154,161 **** - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; -! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' -! i[34]86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; ---- 153,160 ---- - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; -! ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' -! i?86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; -*************** EOF -*** 220,224 **** - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; -! 9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; - esac ---- 219,223 ---- - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; -! 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; - esac -*************** EOF -*** 304,308 **** - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; -! i[34]86:BSD/386:*:* | *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; ---- 303,307 ---- - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; -! i?86:BSD/386:*:* | *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; -*************** EOF -*** 314,318 **** - exit 0 ;; - *:GNU:*:*) -! echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) ---- 313,317 ---- - exit 0 ;; - *:GNU:*:*) -! echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) -*************** EOF -*** 320,330 **** - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` -! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then - # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 -! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then - echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 -! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then - echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0 - elif test "${UNAME_MACHINE}" = "alpha" ; then - echo alpha-unknown-linux ; exit 0 - else ---- 319,333 ---- - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` -! # if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then - # echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 -! if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then - echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 -! elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then - echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0 - elif test "${UNAME_MACHINE}" = "alpha" ; then -+ as_version_string=`as --version 2>&1` -+ if echo $as_version_string | grep >/dev/null 2>&1 " version 2.6 "; then -+ echo alpha-unknown-linuxoldas ; exit 0 -+ fi - echo alpha-unknown-linux ; exit 0 - else -*************** EOF -*** 363,370 **** - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions - # are messed up and put the nodename in both sysname and nodename. -! i[34]86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; -! i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*) - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} ---- 366,373 ---- - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions - # are messed up and put the nodename in both sysname and nodename. -! i?86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; -! i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} -*************** EOF -*** 373,377 **** - fi - exit 0 ;; -! i[34]86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` ---- 376,380 ---- - fi - exit 0 ;; -! i?86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` -*************** EOF -*** 380,383 **** ---- 383,388 ---- - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 -+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ -+ && UNAME_MACHINE=i586 - echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL - else -*************** EOF -*** 402,406 **** - echo m68010-convergent-sysv - exit 0 ;; -! M680[234]0:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) ---- 407,411 ---- - echo m68010-convergent-sysv - exit 0 ;; -! M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) -*************** EOF -*** 410,414 **** - uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; -! m680[234]0:LynxOS:2.[23]*:*) - echo m68k-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; ---- 415,419 ---- - uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; -! m68*:LynxOS:2.*:*) - echo m68k-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -*************** EOF -*** 416,426 **** - echo m68k-atari-sysv4 - exit 0 ;; -! i[34]86:LynxOS:2.[23]*:*) - echo i386-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -! TSUNAMI:LynxOS:2.[23]*:*) - echo sparc-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -! rs6000:LynxOS:2.[23]*:*) - echo rs6000-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; ---- 421,431 ---- - echo m68k-atari-sysv4 - exit 0 ;; -! i?86:LynxOS:2.*:*) - echo i386-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -! TSUNAMI:LynxOS:2.*:*) - echo sparc-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -! rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) - echo rs6000-lynx-lynxos${UNAME_RELEASE} - exit 0 ;; -*************** main () -*** 479,483 **** - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; -! printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); - exit (0); - #endif ---- 484,488 ---- - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; -! printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - exit (0); - #endif -diff -rcp2N gcc-2.7.2.2/config.sub g77-new/config.sub -*** gcc-2.7.2.2/config.sub Thu Jun 15 17:01:49 1995 ---- g77-new/config.sub Thu Jul 10 20:08:50 1997 -*************** case $basic_machine in -*** 130,134 **** - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. -! tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \ - | arme[lb] | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ ---- 130,134 ---- - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. -! tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \ - | arme[lb] | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ -*************** case $basic_machine in -*** 145,149 **** - ;; - # Recognize the basic CPU types with company name. -! vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ ---- 145,149 ---- - ;; - # Recognize the basic CPU types with company name. -! vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ -*************** case $basic_machine in -*** 309,325 **** - ;; - # I'm not sure what "Sysv32" means. Should this be sysv3.2? -! i[345]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv32 - ;; -! i[345]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv4 - ;; -! i[345]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv - ;; -! i[345]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-solaris2 ---- 309,325 ---- - ;; - # I'm not sure what "Sysv32" means. Should this be sysv3.2? -! i[3456]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv32 - ;; -! i[3456]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv4 - ;; -! i[3456]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-sysv - ;; -! i[3456]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` - os=-solaris2 -diff -rcp2N gcc-2.7.2.2/configure g77-new/configure -*** gcc-2.7.2.2/configure Thu Feb 20 19:24:33 1997 ---- g77-new/configure Sun Aug 10 18:46:31 1997 -*************** exec_prefix='$(prefix)' -*** 82,85 **** ---- 82,86 ---- - # The default g++ include directory is $(libdir)/g++-include. - gxx_include_dir='$(libdir)/g++-include' -+ #gxx_include_dir='$(exec_prefix)/include/g++' - - # Default --program-transform-name to nothing. -*************** for machine in $canon_build $canon_host -*** 548,551 **** ---- 549,578 ---- - use_collect2=yes - ;; -+ alpha-*-linux*oldas*) -+ tm_file=alpha/linux.h -+ tmake_file=alpha/t-linux -+ xmake_file=alpha/x-linux -+ fixincludes=Makefile.in -+ xm_file=alpha/xm-linux.h -+ gas=yes gnu_ld=yes -+ ;; -+ alpha-*-linux*ecoff*) -+ tm_file=alpha/linux.h -+ tmake_file=alpha/t-linux -+ xmake_file=alpha/x-linux -+ fixincludes=Makefile.in -+ xm_file=alpha/xm-linux.h -+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" -+ gas=yes gnu_ld=yes -+ ;; -+ alpha-*-linux*) -+ tm_file=alpha/elf.h -+ tmake_file=alpha/t-linux -+ xmake_file=alpha/x-linux -+ fixincludes=Makefile.in -+ xm_file=alpha/xm-linux.h -+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" -+ gas=yes gnu_ld=yes -+ ;; - alpha-dec-osf[23456789]*) - tm_file=alpha/osf2.h -*************** for machine in $canon_build $canon_host -*** 985,989 **** - cpu_type=i386 # with a.out format using pre BFD linkers - xm_file=i386/xm-linux.h -! xmake_file=x-linux - tm_file=i386/linux-oldld.h - fixincludes=Makefile.in # The headers are ok already. ---- 1012,1016 ---- - cpu_type=i386 # with a.out format using pre BFD linkers - xm_file=i386/xm-linux.h -! xmake_file=x-linux-aout - tm_file=i386/linux-oldld.h - fixincludes=Makefile.in # The headers are ok already. -*************** for machine in $canon_build $canon_host -*** 994,998 **** - cpu_type=i386 # with a.out format - xm_file=i386/xm-linux.h -! xmake_file=x-linux - tm_file=i386/linux-aout.h - fixincludes=Makefile.in # The headers are ok already. ---- 1021,1025 ---- - cpu_type=i386 # with a.out format - xm_file=i386/xm-linux.h -! xmake_file=x-linux-aout - tm_file=i386/linux-aout.h - fixincludes=Makefile.in # The headers are ok already. -*************** for machine in $canon_build $canon_host -*** 1003,1007 **** - cpu_type=i386 # with ELF format, using GNU libc v1. - xm_file=i386/xm-linux.h -! xmake_file=x-linux - tmake_file=t-linux-libc1 - tm_file=i386/linux.h ---- 1030,1034 ---- - cpu_type=i386 # with ELF format, using GNU libc v1. - xm_file=i386/xm-linux.h -! xmake_file=x-linux-aout - tmake_file=t-linux-libc1 - tm_file=i386/linux.h -*************** for machine in $canon_build $canon_host -*** 1651,1654 **** ---- 1678,1702 ---- - use_collect2=yes - ;; -+ mips-sni-sysv4) -+ if [ x$gas = xyes ] -+ then -+ if [ x$stabs = xyes ] -+ then -+ tm_file=mips/iris5gdb.h -+ else -+ tm_file=mips/sni-gas.h -+ fi -+ else -+ tm_file=mips/sni-svr4.h -+ fi -+ xm_file=mips/xm-sysv.h -+ xmake_file=mips/x-sni-svr4 -+ tmake_file=mips/t-mips-gas -+ if [ x$gnu_ld != xyes ] -+ then -+ use_collect2=yes -+ fi -+ broken_install=yes -+ ;; - mips-sgi-irix5*) # SGI System V.4., IRIX 5 - if [ x$gas = xyes ] -*************** MAYBE_TARGET_DEFAULT = -DTARGET_CPU_DEFA -*** 2980,2984 **** - rm Makefile.sed - echo 's|||' > Makefile.sed -! echo "s|^target=.*$|target=${target}|" >> Makefile.sed - echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed - echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed ---- 3028,3032 ---- - rm Makefile.sed - echo 's|||' > Makefile.sed -! echo "s|^target=.*$|target=${canon_target}|" >> Makefile.sed - echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed - echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed -diff -rcp2N gcc-2.7.2.2/cse.c g77-new/cse.c -*** gcc-2.7.2.2/cse.c Sun Nov 26 14:47:05 1995 ---- g77-new/cse.c Sun Aug 10 18:46:37 1997 -*************** static struct table_elt *last_jump_equiv -*** 520,544 **** - static int constant_pool_entries_cost; - -- /* Bits describing what kind of values in memory must be invalidated -- for a particular instruction. If all three bits are zero, -- no memory refs need to be invalidated. Each bit is more powerful -- than the preceding ones, and if a bit is set then the preceding -- bits are also set. -- -- Here is how the bits are set: -- Pushing onto the stack invalidates only the stack pointer, -- writing at a fixed address invalidates only variable addresses, -- writing in a structure element at variable address -- invalidates all but scalar variables, -- and writing in anything else at variable address invalidates everything. */ -- -- struct write_data -- { -- int sp : 1; /* Invalidate stack pointer. */ -- int var : 1; /* Invalidate variable addresses. */ -- int nonscalar : 1; /* Invalidate all but scalar variables. */ -- int all : 1; /* Invalidate all memory refs. */ -- }; -- - /* Define maximum length of a branch path. */ - ---- 520,523 ---- -*************** static void merge_equiv_classes PROTO((s -*** 626,632 **** - struct table_elt *)); - static void invalidate PROTO((rtx, enum machine_mode)); - static void remove_invalid_refs PROTO((int)); - static void rehash_using_reg PROTO((rtx)); -! static void invalidate_memory PROTO((struct write_data *)); - static void invalidate_for_call PROTO((void)); - static rtx use_related_value PROTO((rtx, struct table_elt *)); ---- 605,612 ---- - struct table_elt *)); - static void invalidate PROTO((rtx, enum machine_mode)); -+ static int cse_rtx_varies_p PROTO((rtx)); - static void remove_invalid_refs PROTO((int)); - static void rehash_using_reg PROTO((rtx)); -! static void invalidate_memory PROTO((void)); - static void invalidate_for_call PROTO((void)); - static rtx use_related_value PROTO((rtx, struct table_elt *)); -*************** static void set_nonvarying_address_compo -*** 638,644 **** - HOST_WIDE_INT *)); - static int refers_to_p PROTO((rtx, rtx)); -- static int refers_to_mem_p PROTO((rtx, rtx, HOST_WIDE_INT, -- HOST_WIDE_INT)); -- static int cse_rtx_addr_varies_p PROTO((rtx)); - static rtx canon_reg PROTO((rtx, rtx)); - static void find_best_addr PROTO((rtx, rtx *)); ---- 618,621 ---- -*************** static void record_jump_cond PROTO((enum -*** 656,661 **** - rtx, rtx, int)); - static void cse_insn PROTO((rtx, int)); -! static void note_mem_written PROTO((rtx, struct write_data *)); -! static void invalidate_from_clobbers PROTO((struct write_data *, rtx)); - static rtx cse_process_notes PROTO((rtx, rtx)); - static void cse_around_loop PROTO((rtx)); ---- 633,638 ---- - rtx, rtx, int)); - static void cse_insn PROTO((rtx, int)); -! static int note_mem_written PROTO((rtx)); -! static void invalidate_from_clobbers PROTO((rtx)); - static rtx cse_process_notes PROTO((rtx, rtx)); - static void cse_around_loop PROTO((rtx)); -*************** invalidate (x, full_mode) -*** 1512,1517 **** - register int i; - register struct table_elt *p; -- rtx base; -- HOST_WIDE_INT start, end; - - /* If X is a register, dependencies on its contents ---- 1489,1492 ---- -*************** invalidate (x, full_mode) -*** 1605,1611 **** - full_mode = GET_MODE (x); - -- set_nonvarying_address_components (XEXP (x, 0), GET_MODE_SIZE (full_mode), -- &base, &start, &end); -- - for (i = 0; i < NBUCKETS; i++) - { ---- 1580,1583 ---- -*************** invalidate (x, full_mode) -*** 1614,1618 **** - { - next = p->next_same_hash; -! if (refers_to_mem_p (p->exp, base, start, end)) - remove_from_table (p, i); - } ---- 1586,1594 ---- - { - next = p->next_same_hash; -! /* Invalidate ASM_OPERANDS which reference memory (this is easier -! than checking all the aliases). */ -! if (p->in_memory -! && (GET_CODE (p->exp) != MEM -! || true_dependence (x, full_mode, p->exp, cse_rtx_varies_p))) - remove_from_table (p, i); - } -*************** rehash_using_reg (x) -*** 1695,1722 **** - } - -- /* Remove from the hash table all expressions that reference memory, -- or some of them as specified by *WRITES. */ -- -- static void -- invalidate_memory (writes) -- struct write_data *writes; -- { -- register int i; -- register struct table_elt *p, *next; -- int all = writes->all; -- int nonscalar = writes->nonscalar; -- -- for (i = 0; i < NBUCKETS; i++) -- for (p = table[i]; p; p = next) -- { -- next = p->next_same_hash; -- if (p->in_memory -- && (all -- || (nonscalar && p->in_struct) -- || cse_rtx_addr_varies_p (p->exp))) -- remove_from_table (p, i); -- } -- } -- - /* Remove from the hash table any expression that is a call-clobbered - register. Also update their TICK values. */ ---- 1671,1674 ---- -*************** invalidate_for_call () -*** 1756,1759 **** ---- 1708,1717 ---- - next = p->next_same_hash; - -+ if (p->in_memory) -+ { -+ remove_from_table (p, hash); -+ continue; -+ } -+ - if (GET_CODE (p->exp) != REG - || REGNO (p->exp) >= FIRST_PSEUDO_REGISTER) -*************** canon_hash (x, mode) -*** 1946,1950 **** - return 0; - } -! if (! RTX_UNCHANGING_P (x)) - { - hash_arg_in_memory = 1; ---- 1904,1908 ---- - return 0; - } -! if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0))) - { - hash_arg_in_memory = 1; -*************** set_nonvarying_address_components (addr, -*** 2395,2477 **** - } - -! /* Return 1 iff any subexpression of X refers to memory -! at an address of BASE plus some offset -! such that any of the bytes' offsets fall between START (inclusive) -! and END (exclusive). -! -! The value is undefined if X is a varying address (as determined by -! cse_rtx_addr_varies_p). This function is not used in such cases. -! -! When used in the cse pass, `qty_const' is nonzero, and it is used -! to treat an address that is a register with a known constant value -! as if it were that constant value. -! In the loop pass, `qty_const' is zero, so this is not done. */ -! -! static int -! refers_to_mem_p (x, base, start, end) -! rtx x, base; -! HOST_WIDE_INT start, end; -! { -! register HOST_WIDE_INT i; -! register enum rtx_code code; -! register char *fmt; -! -! repeat: -! if (x == 0) -! return 0; -! -! code = GET_CODE (x); -! if (code == MEM) -! { -! register rtx addr = XEXP (x, 0); /* Get the address. */ -! rtx mybase; -! HOST_WIDE_INT mystart, myend; -! -! set_nonvarying_address_components (addr, GET_MODE_SIZE (GET_MODE (x)), -! &mybase, &mystart, &myend); -! -! -! /* refers_to_mem_p is never called with varying addresses. -! If the base addresses are not equal, there is no chance -! of the memory addresses conflicting. */ -! if (! rtx_equal_p (mybase, base)) -! return 0; -! -! return myend > start && mystart < end; -! } -! -! /* X does not match, so try its subexpressions. */ -! -! fmt = GET_RTX_FORMAT (code); -! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) -! if (fmt[i] == 'e') -! { -! if (i == 0) -! { -! x = XEXP (x, 0); -! goto repeat; -! } -! else -! if (refers_to_mem_p (XEXP (x, i), base, start, end)) -! return 1; -! } -! else if (fmt[i] == 'E') -! { -! int j; -! for (j = 0; j < XVECLEN (x, i); j++) -! if (refers_to_mem_p (XVECEXP (x, i, j), base, start, end)) -! return 1; -! } -! -! return 0; -! } -! -! /* Nonzero if X refers to memory at a varying address; - except that a register which has at the moment a known constant value - isn't considered variable. */ - - static int -! cse_rtx_addr_varies_p (x) -! rtx x; - { - /* We need not check for X and the equivalence class being of the same ---- 2353,2363 ---- - } - -! /* Nonzero if X, a memory address, refers to a varying address; - except that a register which has at the moment a known constant value - isn't considered variable. */ - - static int -! cse_rtx_varies_p (x) -! register rtx x; - { - /* We need not check for X and the equivalence class being of the same -*************** cse_rtx_addr_varies_p (x) -*** 2479,2497 **** - doesn't vary in any mode. */ - -! if (GET_CODE (x) == MEM -! && GET_CODE (XEXP (x, 0)) == REG -! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0))) -! && GET_MODE (XEXP (x, 0)) == qty_mode[reg_qty[REGNO (XEXP (x, 0))]] -! && qty_const[reg_qty[REGNO (XEXP (x, 0))]] != 0) - return 0; - -! if (GET_CODE (x) == MEM -! && GET_CODE (XEXP (x, 0)) == PLUS -! && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT -! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG -! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0))) -! && (GET_MODE (XEXP (XEXP (x, 0), 0)) -! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]) -! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]) - return 0; - ---- 2365,2381 ---- - doesn't vary in any mode. */ - -! if (GET_CODE (x) == REG -! && REGNO_QTY_VALID_P (REGNO (x)) -! && GET_MODE (x) == qty_mode[reg_qty[REGNO (x)]] -! && qty_const[reg_qty[REGNO (x)]] != 0) - return 0; - -! if (GET_CODE (x) == PLUS -! && GET_CODE (XEXP (x, 1)) == CONST_INT -! && GET_CODE (XEXP (x, 0)) == REG -! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0))) -! && (GET_MODE (XEXP (x, 0)) -! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]) -! && qty_const[reg_qty[REGNO (XEXP (x, 0))]]) - return 0; - -*************** cse_rtx_addr_varies_p (x) -*** 2501,2519 **** - load fp minus a constant into a register, then a MEM which is the - sum of the two `constant' registers. */ -! if (GET_CODE (x) == MEM -! && GET_CODE (XEXP (x, 0)) == PLUS -! && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG -! && GET_CODE (XEXP (XEXP (x, 0), 1)) == REG -! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0))) -! && (GET_MODE (XEXP (XEXP (x, 0), 0)) -! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]) -! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]] -! && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 1))) -! && (GET_MODE (XEXP (XEXP (x, 0), 1)) -! == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]]) -! && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]]) - return 0; - -! return rtx_addr_varies_p (x); - } - ---- 2385,2402 ---- - load fp minus a constant into a register, then a MEM which is the - sum of the two `constant' registers. */ -! if (GET_CODE (x) == PLUS -! && GET_CODE (XEXP (x, 0)) == REG -! && GET_CODE (XEXP (x, 1)) == REG -! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0))) -! && (GET_MODE (XEXP (x, 0)) -! == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]) -! && qty_const[reg_qty[REGNO (XEXP (x, 0))]] -! && REGNO_QTY_VALID_P (REGNO (XEXP (x, 1))) -! && (GET_MODE (XEXP (x, 1)) -! == qty_mode[reg_qty[REGNO (XEXP (x, 1))]]) -! && qty_const[reg_qty[REGNO (XEXP (x, 1))]]) - return 0; - -! return rtx_varies_p (x); - } - -*************** cse_insn (insn, in_libcall_block) -*** 6105,6110 **** - rtx this_insn_cc0 = 0; - enum machine_mode this_insn_cc0_mode; -- struct write_data writes_memory; -- static struct write_data init = {0, 0, 0, 0}; - - rtx src_eqv = 0; ---- 5988,5991 ---- -*************** cse_insn (insn, in_libcall_block) -*** 6118,6122 **** - - this_insn = insn; -- writes_memory = init; - - /* Find all the SETs and CLOBBERs in this instruction. ---- 5999,6002 ---- -*************** cse_insn (insn, in_libcall_block) -*** 6220,6232 **** - else if (GET_CODE (y) == CLOBBER) - { -! /* If we clobber memory, take note of that, -! and canon the address. - This does nothing when a register is clobbered - because we have already invalidated the reg. */ - if (GET_CODE (XEXP (y, 0)) == MEM) -! { -! canon_reg (XEXP (y, 0), NULL_RTX); -! note_mem_written (XEXP (y, 0), &writes_memory); -! } - } - else if (GET_CODE (y) == USE ---- 6100,6108 ---- - else if (GET_CODE (y) == CLOBBER) - { -! /* If we clobber memory, canon the address. - This does nothing when a register is clobbered - because we have already invalidated the reg. */ - if (GET_CODE (XEXP (y, 0)) == MEM) -! canon_reg (XEXP (y, 0), NULL_RTX); - } - else if (GET_CODE (y) == USE -*************** cse_insn (insn, in_libcall_block) -*** 6247,6254 **** - { - if (GET_CODE (XEXP (x, 0)) == MEM) -! { -! canon_reg (XEXP (x, 0), NULL_RTX); -! note_mem_written (XEXP (x, 0), &writes_memory); -! } - } - ---- 6123,6127 ---- - { - if (GET_CODE (XEXP (x, 0)) == MEM) -! canon_reg (XEXP (x, 0), NULL_RTX); - } - -*************** cse_insn (insn, in_libcall_block) -*** 6674,6678 **** - } - #endif /* LOAD_EXTEND_OP */ -! - if (src == src_folded) - src_folded = 0; ---- 6547,6551 ---- - } - #endif /* LOAD_EXTEND_OP */ -! - if (src == src_folded) - src_folded = 0; -*************** cse_insn (insn, in_libcall_block) -*** 6860,6864 **** - || (GET_CODE (src_folded) != MEM - && ! src_folded_force_flag)) -! && GET_MODE_CLASS (mode) != MODE_CC) - { - src_folded_force_flag = 1; ---- 6733,6738 ---- - || (GET_CODE (src_folded) != MEM - && ! src_folded_force_flag)) -! && GET_MODE_CLASS (mode) != MODE_CC -! && mode != VOIDmode) - { - src_folded_force_flag = 1; -*************** cse_insn (insn, in_libcall_block) -*** 6983,6993 **** - if (GET_CODE (dest) == MEM) - { - dest = fold_rtx (dest, insn); -- -- /* Decide whether we invalidate everything in memory, -- or just things at non-fixed places. -- Writing a large aggregate must invalidate everything -- because we don't know how long it is. */ -- note_mem_written (dest, &writes_memory); - } - ---- 6857,6869 ---- - if (GET_CODE (dest) == MEM) - { -+ #ifdef PUSH_ROUNDING -+ /* Stack pushes invalidate the stack pointer. */ -+ rtx addr = XEXP (dest, 0); -+ if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC -+ || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC) -+ && XEXP (addr, 0) == stack_pointer_rtx) -+ invalidate (stack_pointer_rtx, Pmode); -+ #endif - dest = fold_rtx (dest, insn); - } - -*************** cse_insn (insn, in_libcall_block) -*** 7234,7238 **** - sets[i].src_elt = src_eqv_elt; - -! invalidate_from_clobbers (&writes_memory, x); - - /* Some registers are invalidated by subroutine calls. Memory is ---- 7110,7114 ---- - sets[i].src_elt = src_eqv_elt; - -! invalidate_from_clobbers (x); - - /* Some registers are invalidated by subroutine calls. Memory is -*************** cse_insn (insn, in_libcall_block) -*** 7241,7248 **** - if (GET_CODE (insn) == CALL_INSN) - { -- static struct write_data everything = {0, 1, 1, 1}; -- - if (! CONST_CALL_P (insn)) -! invalidate_memory (&everything); - invalidate_for_call (); - } ---- 7117,7122 ---- - if (GET_CODE (insn) == CALL_INSN) - { - if (! CONST_CALL_P (insn)) -! invalidate_memory (); - invalidate_for_call (); - } -*************** cse_insn (insn, in_libcall_block) -*** 7265,7270 **** - we have just done an invalidate_memory that covers even those. */ - if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG -! || (GET_CODE (dest) == MEM && ! writes_memory.all -! && ! cse_rtx_addr_varies_p (dest))) - invalidate (dest, VOIDmode); - else if (GET_CODE (dest) == STRICT_LOW_PART ---- 7139,7143 ---- - we have just done an invalidate_memory that covers even those. */ - if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG -! || GET_CODE (dest) == MEM) - invalidate (dest, VOIDmode); - else if (GET_CODE (dest) == STRICT_LOW_PART -*************** cse_insn (insn, in_libcall_block) -*** 7359,7363 **** - sets[i].dest_hash, GET_MODE (dest)); - elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM -! && ! RTX_UNCHANGING_P (sets[i].inner_dest)); - - if (elt->in_memory) ---- 7232,7238 ---- - sets[i].dest_hash, GET_MODE (dest)); - elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM -! && (! RTX_UNCHANGING_P (sets[i].inner_dest) -! || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest, -! 0)))); - - if (elt->in_memory) -*************** cse_insn (insn, in_libcall_block) -*** 7532,7580 **** - } - -- /* Store 1 in *WRITES_PTR for those categories of memory ref -- that must be invalidated when the expression WRITTEN is stored in. -- If WRITTEN is null, say everything must be invalidated. */ -- - static void -! note_mem_written (written, writes_ptr) -! rtx written; -! struct write_data *writes_ptr; -! { -! static struct write_data everything = {0, 1, 1, 1}; -! -! if (written == 0) -! *writes_ptr = everything; -! else if (GET_CODE (written) == MEM) -! { -! /* Pushing or popping the stack invalidates just the stack pointer. */ -! rtx addr = XEXP (written, 0); -! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC -! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC) -! && GET_CODE (XEXP (addr, 0)) == REG -! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM) -! { -! writes_ptr->sp = 1; -! return; -! } -! else if (GET_MODE (written) == BLKmode) -! *writes_ptr = everything; -! /* (mem (scratch)) means clobber everything. */ -! else if (GET_CODE (addr) == SCRATCH) -! *writes_ptr = everything; -! else if (cse_rtx_addr_varies_p (written)) -! { -! /* A varying address that is a sum indicates an array element, -! and that's just as good as a structure element -! in implying that we need not invalidate scalar variables. -! However, we must allow QImode aliasing of scalars, because the -! ANSI C standard allows character pointers to alias anything. */ -! if (! ((MEM_IN_STRUCT_P (written) -! || GET_CODE (XEXP (written, 0)) == PLUS) -! && GET_MODE (written) != QImode)) -! writes_ptr->all = 1; -! writes_ptr->nonscalar = 1; -! } -! writes_ptr->var = 1; - } - } - ---- 7407,7450 ---- - } - - static void -! invalidate_memory () -! { -! register int i; -! register struct table_elt *p, *next; -! -! for (i = 0; i < NBUCKETS; i++) -! for (p = table[i]; p; p = next) -! { -! next = p->next_same_hash; -! if (p->in_memory) -! remove_from_table (p, i); -! } -! } -! -! static int -! note_mem_written (mem) -! register rtx mem; -! { -! if (mem == 0 || GET_CODE(mem) != MEM ) -! return 0; -! else -! { -! register rtx addr = XEXP (mem, 0); -! /* Pushing or popping the stack invalidates just the stack pointer. */ -! if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC -! || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC) -! && GET_CODE (XEXP (addr, 0)) == REG -! && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM) -! { -! if (reg_tick[STACK_POINTER_REGNUM] >= 0) -! reg_tick[STACK_POINTER_REGNUM]++; -! -! /* This should be *very* rare. */ -! if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM)) -! invalidate (stack_pointer_rtx, VOIDmode); -! return 1; - } -+ return 0; -+ } - } - -*************** note_mem_written (written, writes_ptr) -*** 7584,7612 **** - alias with something that is SET or CLOBBERed. - -- W points to the writes_memory for this insn, a struct write_data -- saying which kinds of memory references must be invalidated. - X is the pattern of the insn. */ - - static void -! invalidate_from_clobbers (w, x) -! struct write_data *w; - rtx x; - { -- /* If W->var is not set, W specifies no action. -- If W->all is set, this step gets all memory refs -- so they can be ignored in the rest of this function. */ -- if (w->var) -- invalidate_memory (w); -- -- if (w->sp) -- { -- if (reg_tick[STACK_POINTER_REGNUM] >= 0) -- reg_tick[STACK_POINTER_REGNUM]++; -- -- /* This should be *very* rare. */ -- if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM)) -- invalidate (stack_pointer_rtx, VOIDmode); -- } -- - if (GET_CODE (x) == CLOBBER) - { ---- 7454,7463 ---- - alias with something that is SET or CLOBBERed. - - X is the pattern of the insn. */ - - static void -! invalidate_from_clobbers (x) - rtx x; - { - if (GET_CODE (x) == CLOBBER) - { -*************** invalidate_from_clobbers (w, x) -*** 7615,7619 **** - { - if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG -! || (GET_CODE (ref) == MEM && ! w->all)) - invalidate (ref, VOIDmode); - else if (GET_CODE (ref) == STRICT_LOW_PART ---- 7466,7470 ---- - { - if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG -! || GET_CODE (ref) == MEM) - invalidate (ref, VOIDmode); - else if (GET_CODE (ref) == STRICT_LOW_PART -*************** invalidate_from_clobbers (w, x) -*** 7631,7643 **** - { - rtx ref = XEXP (y, 0); -! if (ref) -! { -! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG -! || (GET_CODE (ref) == MEM && !w->all)) -! invalidate (ref, VOIDmode); -! else if (GET_CODE (ref) == STRICT_LOW_PART -! || GET_CODE (ref) == ZERO_EXTRACT) -! invalidate (XEXP (ref, 0), GET_MODE (ref)); -! } - } - } ---- 7482,7491 ---- - { - rtx ref = XEXP (y, 0); -! if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG -! || GET_CODE (ref) == MEM) -! invalidate (ref, VOIDmode); -! else if (GET_CODE (ref) == STRICT_LOW_PART -! || GET_CODE (ref) == ZERO_EXTRACT) -! invalidate (XEXP (ref, 0), GET_MODE (ref)); - } - } -*************** cse_around_loop (loop_start) -*** 7800,7807 **** - } - -- /* Variable used for communications between the next two routines. */ -- -- static struct write_data skipped_writes_memory; -- - /* Process one SET of an insn that was skipped. We ignore CLOBBERs - since they are done elsewhere. This function is called via note_stores. */ ---- 7648,7651 ---- -*************** invalidate_skipped_set (dest, set) -*** 7812,7815 **** ---- 7656,7675 ---- - rtx dest; - { -+ enum rtx_code code = GET_CODE (dest); -+ -+ if (code == MEM -+ && ! note_mem_written (dest) /* If this is not a stack push ... */ -+ /* There are times when an address can appear varying and be a PLUS -+ during this scan when it would be a fixed address were we to know -+ the proper equivalences. So invalidate all memory if there is -+ a BLKmode or nonscalar memory reference or a reference to a -+ variable address. */ -+ && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode -+ || cse_rtx_varies_p (XEXP (dest, 0)))) -+ { -+ invalidate_memory (); -+ return; -+ } -+ - if (GET_CODE (set) == CLOBBER - #ifdef HAVE_cc0 -*************** invalidate_skipped_set (dest, set) -*** 7819,7837 **** - return; - -! if (GET_CODE (dest) == MEM) -! note_mem_written (dest, &skipped_writes_memory); -! -! /* There are times when an address can appear varying and be a PLUS -! during this scan when it would be a fixed address were we to know -! the proper equivalences. So promote "nonscalar" to be "all". */ -! if (skipped_writes_memory.nonscalar) -! skipped_writes_memory.all = 1; -! -! if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG -! || (! skipped_writes_memory.all && ! cse_rtx_addr_varies_p (dest))) -! invalidate (dest, VOIDmode); -! else if (GET_CODE (dest) == STRICT_LOW_PART -! || GET_CODE (dest) == ZERO_EXTRACT) - invalidate (XEXP (dest, 0), GET_MODE (dest)); - } - ---- 7679,7686 ---- - return; - -! if (code == STRICT_LOW_PART || code == ZERO_EXTRACT) - invalidate (XEXP (dest, 0), GET_MODE (dest)); -+ else if (code == REG || code == SUBREG || code == MEM) -+ invalidate (dest, VOIDmode); - } - -*************** invalidate_skipped_block (start) -*** 7845,7850 **** - { - rtx insn; -- static struct write_data init = {0, 0, 0, 0}; -- static struct write_data everything = {0, 1, 1, 1}; - - for (insn = start; insn && GET_CODE (insn) != CODE_LABEL; ---- 7694,7697 ---- -*************** invalidate_skipped_block (start) -*** 7854,7867 **** - continue; - -- skipped_writes_memory = init; -- - if (GET_CODE (insn) == CALL_INSN) - { - invalidate_for_call (); -- skipped_writes_memory = everything; - } - - note_stores (PATTERN (insn), invalidate_skipped_set); -- invalidate_from_clobbers (&skipped_writes_memory, PATTERN (insn)); - } - } ---- 7701,7712 ---- - continue; - - if (GET_CODE (insn) == CALL_INSN) - { -+ if (! CONST_CALL_P (insn)) -+ invalidate_memory (); - invalidate_for_call (); - } - - note_stores (PATTERN (insn), invalidate_skipped_set); - } - } -*************** cse_set_around_loop (x, insn, loop_start -*** 7913,7920 **** - { - struct table_elt *src_elt; -- static struct write_data init = {0, 0, 0, 0}; -- struct write_data writes_memory; -- -- writes_memory = init; - - /* If this is a SET, see if we can replace SET_SRC, but ignore SETs that ---- 7758,7761 ---- -*************** cse_set_around_loop (x, insn, loop_start -*** 7976,7991 **** - - /* Now invalidate anything modified by X. */ -! note_mem_written (SET_DEST (x), &writes_memory); -! -! if (writes_memory.var) -! invalidate_memory (&writes_memory); -! -! /* See comment on similar code in cse_insn for explanation of these tests. */ - if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG -! || (GET_CODE (SET_DEST (x)) == MEM && ! writes_memory.all -! && ! cse_rtx_addr_varies_p (SET_DEST (x)))) - invalidate (SET_DEST (x), VOIDmode); - else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART -! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT) - invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x))); - } ---- 7817,7828 ---- - - /* Now invalidate anything modified by X. */ -! note_mem_written (SET_DEST (x)); -! -! /* See comment on similar code in cse_insn for explanation of these tests. */ - if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG -! || GET_CODE (SET_DEST (x)) == MEM) - invalidate (SET_DEST (x), VOIDmode); - else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART -! || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT) - invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x))); - } -*************** cse_main (f, nregs, after_loop, file) -*** 8234,8237 **** ---- 8071,8075 ---- - - init_recog (); -+ init_alias_analysis (); - - max_reg = nregs; -*************** cse_basic_block (from, to, next_branch, -*** 8405,8408 **** ---- 8243,8247 ---- - int to_usage = 0; - int in_libcall_block = 0; -+ int num_insns = 0; - - /* Each of these arrays is undefined before max_reg, so only allocate -*************** cse_basic_block (from, to, next_branch, -*** 8437,8440 **** ---- 8276,8299 ---- - { - register enum rtx_code code; -+ int i; -+ struct table_elt *p, *next; -+ -+ /* If we have processed 1,000 insns, flush the hash table to avoid -+ extreme quadratic behavior. */ -+ if (num_insns++ > 1000) -+ { -+ for (i = 0; i < NBUCKETS; i++) -+ for (p = table[i]; p; p = next) -+ { -+ next = p->next_same_hash; -+ -+ if (GET_CODE (p->exp) == REG) -+ invalidate (p->exp, p->mode); -+ else -+ remove_from_table (p, i); -+ } -+ -+ num_insns = 0; -+ } - - /* See if this is a branch that is part of the path. If so, and it is -diff -rcp2N gcc-2.7.2.2/dwarfout.c g77-new/dwarfout.c -*** gcc-2.7.2.2/dwarfout.c Thu Oct 26 21:40:07 1995 ---- g77-new/dwarfout.c Sun Aug 10 18:47:19 1997 -*************** output_bound_representation (bound, dim_ -*** 1629,1705 **** - { - -! case ERROR_MARK: -! return; - - /* All fixed-bounds are represented by INTEGER_CST nodes. */ - -! case INTEGER_CST: -! ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -! (unsigned) TREE_INT_CST_LOW (bound)); -! break; -! -! /* Dynamic bounds may be represented by NOP_EXPR nodes containing -! SAVE_EXPR nodes. */ -! -! case NOP_EXPR: -! bound = TREE_OPERAND (bound, 0); -! /* ... fall thru... */ -! -! case SAVE_EXPR: -! { -! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; -! char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; -! -! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT, -! current_dienum, dim_num, u_or_l); - -! sprintf (end_label, BOUND_END_LABEL_FMT, -! current_dienum, dim_num, u_or_l); - -! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label); -! ASM_OUTPUT_LABEL (asm_out_file, begin_label); - -! /* If we are working on a bound for a dynamic dimension in C, -! the dynamic dimension in question had better have a static -! (zero) lower bound and a dynamic *upper* bound. */ - -! if (u_or_l != 'u') -! abort (); - -! /* If optimization is turned on, the SAVE_EXPRs that describe -! how to access the upper bound values are essentially bogus. -! They only describe (at best) how to get at these values at -! the points in the generated code right after they have just -! been computed. Worse yet, in the typical case, the upper -! bound values will not even *be* computed in the optimized -! code, so these SAVE_EXPRs are entirely bogus. -! -! In order to compensate for this fact, we check here to see -! if optimization is enabled, and if so, we effectively create -! an empty location description for the (unknown and unknowable) -! upper bound. -! -! This should not cause too much trouble for existing (stupid?) -! debuggers because they have to deal with empty upper bounds -! location descriptions anyway in order to be able to deal with -! incomplete array types. -! -! Of course an intelligent debugger (GDB?) should be able to -! comprehend that a missing upper bound specification in a -! array type used for a storage class `auto' local array variable -! indicates that the upper bound is both unknown (at compile- -! time) and unknowable (at run-time) due to optimization. -! */ -! -! if (! optimize) -! output_loc_descriptor -! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX)); - -! ASM_OUTPUT_LABEL (asm_out_file, end_label); -! } -! break; - -- default: -- abort (); - } - } ---- 1629,1699 ---- - { - -! case ERROR_MARK: -! return; - - /* All fixed-bounds are represented by INTEGER_CST nodes. */ - -! case INTEGER_CST: -! ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -! (unsigned) TREE_INT_CST_LOW (bound)); -! break; - -! default: - -! /* Dynamic bounds may be represented by NOP_EXPR nodes containing -! SAVE_EXPR nodes, in which case we can do something, or as -! an expression, which we cannot represent. */ -! { -! char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; -! char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; - -! sprintf (begin_label, BOUND_BEGIN_LABEL_FMT, -! current_dienum, dim_num, u_or_l); - -! sprintf (end_label, BOUND_END_LABEL_FMT, -! current_dienum, dim_num, u_or_l); - -! ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label); -! ASM_OUTPUT_LABEL (asm_out_file, begin_label); -! -! /* If optimization is turned on, the SAVE_EXPRs that describe -! how to access the upper bound values are essentially bogus. -! They only describe (at best) how to get at these values at -! the points in the generated code right after they have just -! been computed. Worse yet, in the typical case, the upper -! bound values will not even *be* computed in the optimized -! code, so these SAVE_EXPRs are entirely bogus. -! -! In order to compensate for this fact, we check here to see -! if optimization is enabled, and if so, we effectively create -! an empty location description for the (unknown and unknowable) -! upper bound. -! -! This should not cause too much trouble for existing (stupid?) -! debuggers because they have to deal with empty upper bounds -! location descriptions anyway in order to be able to deal with -! incomplete array types. -! -! Of course an intelligent debugger (GDB?) should be able to -! comprehend that a missing upper bound specification in a -! array type used for a storage class `auto' local array variable -! indicates that the upper bound is both unknown (at compile- -! time) and unknowable (at run-time) due to optimization. */ -! -! if (! optimize) -! { -! while (TREE_CODE (bound) == NOP_EXPR -! || TREE_CODE (bound) == CONVERT_EXPR) -! bound = TREE_OPERAND (bound, 0); -! -! if (TREE_CODE (bound) == SAVE_EXPR) -! output_loc_descriptor -! (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX)); -! } - -! ASM_OUTPUT_LABEL (asm_out_file, end_label); -! } -! break; - - } - } -*************** type_attribute (type, decl_const, decl_v -*** 2857,2861 **** - register int root_type_modified; - -! if (TREE_CODE (type) == ERROR_MARK) - return; - ---- 2851,2855 ---- - register int root_type_modified; - -! if (code == ERROR_MARK) - return; - -*************** type_attribute (type, decl_const, decl_v -*** 2864,2869 **** - type `void', so this only applies to function return types. */ - -! if (TREE_CODE (type) == VOID_TYPE) - return; - - root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE ---- 2858,2869 ---- - type `void', so this only applies to function return types. */ - -! if (code == VOID_TYPE) - return; -+ -+ /* If this is a subtype, find the underlying type. Eventually, -+ this should write out the appropriate subtype info. */ -+ while ((code == INTEGER_TYPE || code == REAL_TYPE) -+ && TREE_TYPE (type) != 0) -+ type = TREE_TYPE (type), code = TREE_CODE (type); - - root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE -diff -rcp2N gcc-2.7.2.2/emit-rtl.c g77-new/emit-rtl.c -*** gcc-2.7.2.2/emit-rtl.c Thu Sep 14 16:09:30 1995 ---- g77-new/emit-rtl.c Sun Aug 10 18:47:08 1997 -*************** max_label_num () -*** 545,548 **** ---- 545,565 ---- - } - -+ /* Identify REG (which may be a CONCAT) as a user register. */ -+ -+ void -+ mark_user_reg (reg) -+ rtx reg; -+ { -+ if (GET_CODE (reg) == CONCAT) -+ { -+ REG_USERVAR_P (XEXP (reg, 0)) = 1; -+ REG_USERVAR_P (XEXP (reg, 1)) = 1; -+ } -+ else if (GET_CODE (reg) == REG) -+ REG_USERVAR_P (reg) = 1; -+ else -+ abort (); -+ } -+ - /* Return first label number used in this function (if any were used). */ - -*************** change_address (memref, mode, addr) -*** 1315,1318 **** ---- 1332,1338 ---- - addr = memory_address (mode, addr); - -+ if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref)) -+ return memref; -+ - new = gen_rtx (MEM, mode, addr); - MEM_VOLATILE_P (new) = MEM_VOLATILE_P (memref); -diff -rcp2N gcc-2.7.2.2/explow.c g77-new/explow.c -*** gcc-2.7.2.2/explow.c Thu Jun 15 07:30:10 1995 ---- g77-new/explow.c Sun Aug 10 18:46:30 1997 -*************** convert_memory_address (to_mode, x) -*** 305,310 **** ---- 305,313 ---- - rtx x; - { -+ enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode; - rtx temp; - -+ /* Here we handle some special cases. If none of them apply, fall through -+ to the default case. */ - switch (GET_CODE (x)) - { -*************** convert_memory_address (to_mode, x) -*** 321,339 **** - return temp; - -- case PLUS: -- case MULT: -- return gen_rtx (GET_CODE (x), to_mode, -- convert_memory_address (to_mode, XEXP (x, 0)), -- convert_memory_address (to_mode, XEXP (x, 1))); -- - case CONST: - return gen_rtx (CONST, to_mode, - convert_memory_address (to_mode, XEXP (x, 0))); - -! default: -! return convert_modes (to_mode, -! to_mode == ptr_mode ? Pmode : ptr_mode, -! x, POINTERS_EXTEND_UNSIGNED); - } - } - #endif ---- 324,348 ---- - return temp; - - case CONST: - return gen_rtx (CONST, to_mode, - convert_memory_address (to_mode, XEXP (x, 0))); - -! case PLUS: -! case MULT: -! /* For addition the second operand is a small constant, we can safely -! permute the converstion and addition operation. We can always safely -! permute them if we are making the address narrower. In addition, -! always permute the operations if this is a constant. */ -! if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) -! || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT -! && (INTVAL (XEXP (x, 1)) + 20000 < 40000 -! || CONSTANT_P (XEXP (x, 0))))) -! return gen_rtx (GET_CODE (x), to_mode, -! convert_memory_address (to_mode, XEXP (x, 0)), -! convert_memory_address (to_mode, XEXP (x, 1))); - } -+ -+ return convert_modes (to_mode, from_mode, -+ x, POINTERS_EXTEND_UNSIGNED); - } - #endif -diff -rcp2N gcc-2.7.2.2/expmed.c g77-new/expmed.c -*** gcc-2.7.2.2/expmed.c Thu Jul 13 19:25:37 1995 ---- g77-new/expmed.c Sun Aug 10 18:46:23 1997 -*************** store_bit_field (str_rtx, bitsize, bitnu -*** 399,402 **** ---- 399,403 ---- - #ifdef HAVE_insv - if (HAVE_insv -+ && GET_MODE (value) != BLKmode - && !(bitsize == 1 && GET_CODE (value) == CONST_INT) - /* Ensure insv's size is wide enough for this field. */ -*************** store_split_bit_field (op0, bitsize, bit -*** 777,781 **** - done in extract_bit_field, so that the two calls to - extract_fixed_bit_field will have comparable arguments. */ -! if (GET_CODE (value) != MEM) - total_bits = BITS_PER_WORD; - else ---- 778,782 ---- - done in extract_bit_field, so that the two calls to - extract_fixed_bit_field will have comparable arguments. */ -! if (GET_CODE (value) != MEM || GET_MODE (value) == BLKmode) - total_bits = BITS_PER_WORD; - else -*************** store_split_bit_field (op0, bitsize, bit -*** 790,797 **** - /* The args are chosen so that the last part includes the - lsb. Give extract_bit_field the value it needs (with -! endianness compensation) to fetch the piece we want. */ -! part = extract_fixed_bit_field (word_mode, value, 0, thissize, -! total_bits - bitsize + bitsdone, -! NULL_RTX, 1, align); - } - else ---- 791,807 ---- - /* The args are chosen so that the last part includes the - lsb. Give extract_bit_field the value it needs (with -! endianness compensation) to fetch the piece we want. -! -! ??? We have no idea what the alignment of VALUE is, so -! we have to use a guess. */ -! part -! = extract_fixed_bit_field -! (word_mode, value, 0, thissize, -! total_bits - bitsize + bitsdone, NULL_RTX, 1, -! GET_MODE (value) == VOIDmode -! ? UNITS_PER_WORD -! : (GET_MODE (value) == BLKmode -! ? 1 -! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT)); - } - else -*************** store_split_bit_field (op0, bitsize, bit -*** 803,808 **** - & (((HOST_WIDE_INT) 1 << thissize) - 1)); - else -! part = extract_fixed_bit_field (word_mode, value, 0, thissize, -! bitsdone, NULL_RTX, 1, align); - } - ---- 813,824 ---- - & (((HOST_WIDE_INT) 1 << thissize) - 1)); - else -! part -! = extract_fixed_bit_field -! (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1, -! GET_MODE (value) == VOIDmode -! ? UNITS_PER_WORD -! : (GET_MODE (value) == BLKmode -! ? 1 -! : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT)); - } - -*************** extract_bit_field (str_rtx, bitsize, bit -*** 876,882 **** - rtx spec_target_subreg = 0; - -- if (GET_CODE (str_rtx) == MEM && ! MEM_IN_STRUCT_P (str_rtx)) -- abort (); -- - /* Discount the part of the structure before the desired byte. - We need to know how many bytes are safe to reference after it. */ ---- 892,895 ---- -*************** expand_divmod (rem_flag, code, mode, op0 -*** 3189,3193 **** - Notice that we compute also the final remainder value here, - and return the result right away. */ -! if (target == 0) - target = gen_reg_rtx (compute_mode); - ---- 3202,3206 ---- - Notice that we compute also the final remainder value here, - and return the result right away. */ -! if (target == 0 || GET_MODE (target) != compute_mode) - target = gen_reg_rtx (compute_mode); - -*************** expand_divmod (rem_flag, code, mode, op0 -*** 3316,3320 **** - remainder. Notice that we compute also the final remainder - value here, and return the result right away. */ -! if (target == 0) - target = gen_reg_rtx (compute_mode); - ---- 3329,3333 ---- - remainder. Notice that we compute also the final remainder - value here, and return the result right away. */ -! if (target == 0 || GET_MODE (target) != compute_mode) - target = gen_reg_rtx (compute_mode); - -*************** expand_divmod (rem_flag, code, mode, op0 -*** 3418,3422 **** - remainder. Notice that we compute also the final remainder - value here, and return the result right away. */ -! if (target == 0) - target = gen_reg_rtx (compute_mode); - if (rem_flag) ---- 3431,3435 ---- - remainder. Notice that we compute also the final remainder - value here, and return the result right away. */ -! if (target == 0 || GET_MODE (target) != compute_mode) - target = gen_reg_rtx (compute_mode); - if (rem_flag) -*************** expand_divmod (rem_flag, code, mode, op0 -*** 3602,3605 **** ---- 3615,3621 ---- - if (quotient == 0) - { -+ if (target && GET_MODE (target) != compute_mode) -+ target = 0; -+ - if (rem_flag) - { -*************** expand_divmod (rem_flag, code, mode, op0 -*** 3653,3656 **** ---- 3669,3675 ---- - if (rem_flag) - { -+ if (target && GET_MODE (target) != compute_mode) -+ target = 0; -+ - if (quotient == 0) - /* No divide instruction either. Use library for remainder. */ -diff -rcp2N gcc-2.7.2.2/expr.c g77-new/expr.c -*** gcc-2.7.2.2/expr.c Thu Feb 20 19:24:17 1997 ---- g77-new/expr.c Sun Aug 10 18:47:21 1997 -*************** Boston, MA 02111-1307, USA. */ -*** 27,30 **** ---- 27,31 ---- - #include "flags.h" - #include "regs.h" -+ #include "hard-reg-set.h" - #include "function.h" - #include "insn-flags.h" -*************** extern int stack_depth; -*** 139,143 **** - extern int max_stack_depth; - extern struct obstack permanent_obstack; -! - - static rtx enqueue_insn PROTO((rtx, rtx)); ---- 140,144 ---- - extern int max_stack_depth; - extern struct obstack permanent_obstack; -! extern rtx arg_pointer_save_area; - - static rtx enqueue_insn PROTO((rtx, rtx)); -*************** expand_assignment (to, from, want_value, -*** 2498,2503 **** - - push_temp_slots (); -! tem = get_inner_reference (to, &bitsize, &bitpos, &offset, -! &mode1, &unsignedp, &volatilep); - - /* If we are going to use store_bit_field and extract_bit_field, ---- 2499,2504 ---- - - push_temp_slots (); -! tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, -! &unsignedp, &volatilep, &alignment); - - /* If we are going to use store_bit_field and extract_bit_field, -*************** expand_assignment (to, from, want_value, -*** 2507,2511 **** - tem = stabilize_reference (tem); - -- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT; - to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0); - if (offset != 0) ---- 2508,2511 ---- -*************** expand_assignment (to, from, want_value, -*** 2518,2529 **** - gen_rtx (PLUS, ptr_mode, XEXP (to_rtx, 0), - force_reg (ptr_mode, offset_rtx))); -- /* If we have a variable offset, the known alignment -- is only that of the innermost structure containing the field. -- (Actually, we could sometimes do better by using the -- align of an element of the innermost array, but no need.) */ -- if (TREE_CODE (to) == COMPONENT_REF -- || TREE_CODE (to) == BIT_FIELD_REF) -- alignment -- = TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (to, 0))) / BITS_PER_UNIT; - } - if (volatilep) ---- 2518,2521 ---- -*************** store_expr (exp, target, want_value) -*** 2775,2780 **** - which will often result in some optimizations. Do the conversion - in two steps: first change the signedness, if needed, then -! the extend. */ -! if (! want_value) - { - if (TREE_UNSIGNED (TREE_TYPE (exp)) ---- 2767,2775 ---- - which will often result in some optimizations. Do the conversion - in two steps: first change the signedness, if needed, then -! the extend. But don't do this if the type of EXP is a subtype -! of something else since then the conversion might involve -! more than just converting modes. */ -! if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp)) -! && TREE_TYPE (TREE_TYPE (exp)) == 0) - { - if (TREE_UNSIGNED (TREE_TYPE (exp)) -*************** store_constructor (exp, target) -*** 3071,3074 **** ---- 3066,3077 ---- - } - -+ if (TREE_READONLY (field)) -+ { -+ if (GET_CODE (to_rtx) == MEM) -+ to_rtx = change_address (to_rtx, GET_MODE (to_rtx), -+ XEXP (to_rtx, 0)); -+ RTX_UNCHANGING_P (to_rtx) = 1; -+ } -+ - store_field (to_rtx, bitsize, bitpos, mode, TREE_VALUE (elt), - /* The alignment of TARGET is -*************** store_field (target, bitsize, bitpos, mo -*** 3414,3417 **** ---- 3417,3432 ---- - rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); - -+ /* If BITSIZE is narrower than the size of the type of EXP -+ we will be narrowing TEMP. Normally, what's wanted are the -+ low-order bits. However, if EXP's type is a record and this is -+ big-endian machine, we want the upper BITSIZE bits. */ -+ if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT -+ && bitsize < GET_MODE_BITSIZE (GET_MODE (temp)) -+ && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) -+ temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp, -+ size_int (GET_MODE_BITSIZE (GET_MODE (temp)) -+ - bitsize), -+ temp, 1); -+ - /* Unless MODE is VOIDmode or BLKmode, convert TEMP to - MODE. */ -*************** store_field (target, bitsize, bitpos, mo -*** 3420,3423 **** ---- 3435,3459 ---- - temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1); - -+ /* If the modes of TARGET and TEMP are both BLKmode, both -+ must be in memory and BITPOS must be aligned on a byte -+ boundary. If so, we simply do a block copy. */ -+ if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode) -+ { -+ if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM -+ || bitpos % BITS_PER_UNIT != 0) -+ abort (); -+ -+ target = change_address (target, VOIDmode, -+ plus_constant (XEXP (target, 0), -+ bitpos / BITS_PER_UNIT)); -+ -+ emit_block_move (target, temp, -+ GEN_INT ((bitsize + BITS_PER_UNIT - 1) -+ / BITS_PER_UNIT), -+ 1); -+ -+ return value_mode == VOIDmode ? const0_rtx : target; -+ } -+ - /* Store the value in the bitfield. */ - store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size); -*************** get_inner_unaligned_p (exp) -*** 3515,3518 **** ---- 3551,3557 ---- - This offset is in addition to the bit position. - If the position is not variable, we store 0 in *POFFSET. -+ We set *PALIGNMENT to the alignment in bytes of the address that will be -+ computed. This is the alignment of the thing we return if *POFFSET -+ is zero, but can be more less strictly aligned if *POFFSET is nonzero. - - If any of the extraction expressions is volatile, -*************** get_inner_unaligned_p (exp) -*** 3525,3533 **** - If the field describes a variable-sized object, *PMODE is set to - VOIDmode and *PBITSIZE is set to -1. An access cannot be made in -! this case, but the address of the object can be found. */ - - tree - get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, -! punsignedp, pvolatilep) - tree exp; - int *pbitsize; ---- 3564,3572 ---- - If the field describes a variable-sized object, *PMODE is set to - VOIDmode and *PBITSIZE is set to -1. An access cannot be made in -! this case, but the address of the object can be found. */ - - tree - get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, -! punsignedp, pvolatilep, palignment) - tree exp; - int *pbitsize; -*************** get_inner_reference (exp, pbitsize, pbit -*** 3537,3540 **** ---- 3576,3580 ---- - int *punsignedp; - int *pvolatilep; -+ int *palignment; - { - tree orig_exp = exp; -*************** get_inner_reference (exp, pbitsize, pbit -*** 3542,3545 **** ---- 3582,3586 ---- - enum machine_mode mode = VOIDmode; - tree offset = integer_zero_node; -+ int alignment = BIGGEST_ALIGNMENT; - - if (TREE_CODE (exp) == COMPONENT_REF) -*************** get_inner_reference (exp, pbitsize, pbit -*** 3599,3607 **** - - *pbitpos += TREE_INT_CST_LOW (constant); -! -! if (var) -! offset = size_binop (PLUS_EXPR, offset, -! size_binop (EXACT_DIV_EXPR, var, -! size_int (BITS_PER_UNIT))); - } - ---- 3640,3646 ---- - - *pbitpos += TREE_INT_CST_LOW (constant); -! offset = size_binop (PLUS_EXPR, offset, -! size_binop (EXACT_DIV_EXPR, var, -! size_int (BITS_PER_UNIT))); - } - -*************** get_inner_reference (exp, pbitsize, pbit -*** 3629,3633 **** - - index = fold (build (MULT_EXPR, index_type, index, -! TYPE_SIZE (TREE_TYPE (exp)))); - - if (TREE_CODE (index) == INTEGER_CST ---- 3668,3673 ---- - - index = fold (build (MULT_EXPR, index_type, index, -! convert (index_type, -! TYPE_SIZE (TREE_TYPE (exp))))); - - if (TREE_CODE (index) == INTEGER_CST -*************** get_inner_reference (exp, pbitsize, pbit -*** 3652,3666 **** - if (TREE_THIS_VOLATILE (exp)) - *pvolatilep = 1; - exp = TREE_OPERAND (exp, 0); - } - -! /* If this was a bit-field, see if there is a mode that allows direct -! access in case EXP is in memory. */ -! if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0) -! { -! mode = mode_for_size (*pbitsize, MODE_INT, 0); -! if (mode == BLKmode) -! mode = VOIDmode; -! } - - if (integer_zerop (offset)) ---- 3692,3708 ---- - if (TREE_THIS_VOLATILE (exp)) - *pvolatilep = 1; -+ -+ /* If the offset is non-constant already, then we can't assume any -+ alignment more than the alignment here. */ -+ if (! integer_zerop (offset)) -+ alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp))); -+ - exp = TREE_OPERAND (exp, 0); - } - -! if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd') -! alignment = MIN (alignment, DECL_ALIGN (exp)); -! else if (TREE_TYPE (exp) != 0) -! alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp))); - - if (integer_zerop (offset)) -*************** get_inner_reference (exp, pbitsize, pbit -*** 3672,3675 **** ---- 3714,3718 ---- - *pmode = mode; - *poffset = offset; -+ *palignment = alignment / BITS_PER_UNIT; - return exp; - } -*************** init_noncopied_parts (lhs, list) -*** 3812,3820 **** - } - -! /* Subroutine of expand_expr: return nonzero iff there is no way that - EXP can reference X, which is being modified. */ - - static int -! safe_from_p (x, exp) - rtx x; - tree exp; ---- 3855,3867 ---- - } - -! static int safe_from_p_count; -! static int safe_from_p_size; -! static tree *safe_from_p_rewritten; -! -! /* Subroutine of safe_from_p: return nonzero iff there is no way that - EXP can reference X, which is being modified. */ - - static int -! safe_from_p_1 (x, exp) - rtx x; - tree exp; -*************** safe_from_p (x, exp) -*** 3822,3825 **** ---- 3869,3873 ---- - rtx exp_rtl = 0; - int i, nops; -+ int is_save_expr = 0; - - if (x == 0 -*************** safe_from_p (x, exp) -*** 3860,3878 **** - - case 'x': -! if (TREE_CODE (exp) == TREE_LIST) -! return ((TREE_VALUE (exp) == 0 -! || safe_from_p (x, TREE_VALUE (exp))) -! && (TREE_CHAIN (exp) == 0 -! || safe_from_p (x, TREE_CHAIN (exp)))); -! else -! return 0; - - case '1': -! return safe_from_p (x, TREE_OPERAND (exp, 0)); - - case '2': - case '<': -! return (safe_from_p (x, TREE_OPERAND (exp, 0)) -! && safe_from_p (x, TREE_OPERAND (exp, 1))); - - case 'e': ---- 3908,3933 ---- - - case 'x': -! switch (TREE_CODE (exp)) -! { -! case TREE_LIST: -! return ((TREE_VALUE (exp) == 0 -! || safe_from_p_1 (x, TREE_VALUE (exp))) -! && (TREE_CHAIN (exp) == 0 -! || safe_from_p_1 (x, TREE_CHAIN (exp)))); -! -! case ERROR_MARK: -! return 1; -! -! default: -! return 0; -! } - - case '1': -! return safe_from_p_1 (x, TREE_OPERAND (exp, 0)); - - case '2': - case '<': -! return (safe_from_p_1 (x, TREE_OPERAND (exp, 0)) -! && safe_from_p_1 (x, TREE_OPERAND (exp, 1))); - - case 'e': -*************** safe_from_p (x, exp) -*** 3887,3891 **** - case ADDR_EXPR: - return (staticp (TREE_OPERAND (exp, 0)) -! || safe_from_p (x, TREE_OPERAND (exp, 0))); - - case INDIRECT_REF: ---- 3942,3946 ---- - case ADDR_EXPR: - return (staticp (TREE_OPERAND (exp, 0)) -! || safe_from_p_1 (x, TREE_OPERAND (exp, 0))); - - case INDIRECT_REF: -*************** safe_from_p (x, exp) -*** 3922,3928 **** - - case CLEANUP_POINT_EXPR: -! return safe_from_p (x, TREE_OPERAND (exp, 0)); - - case SAVE_EXPR: - exp_rtl = SAVE_EXPR_RTL (exp); - break; ---- 3977,3984 ---- - - case CLEANUP_POINT_EXPR: -! return safe_from_p_1 (x, TREE_OPERAND (exp, 0)); - - case SAVE_EXPR: -+ is_save_expr = 1; - exp_rtl = SAVE_EXPR_RTL (exp); - break; -*************** safe_from_p (x, exp) -*** 3931,3935 **** - /* The only operand we look at is operand 1. The rest aren't - part of the expression. */ -! return safe_from_p (x, TREE_OPERAND (exp, 1)); - - case METHOD_CALL_EXPR: ---- 3987,3991 ---- - /* The only operand we look at is operand 1. The rest aren't - part of the expression. */ -! return safe_from_p_1 (x, TREE_OPERAND (exp, 1)); - - case METHOD_CALL_EXPR: -*************** safe_from_p (x, exp) -*** 3945,3949 **** - for (i = 0; i < nops; i++) - if (TREE_OPERAND (exp, i) != 0 -! && ! safe_from_p (x, TREE_OPERAND (exp, i))) - return 0; - } ---- 4001,4005 ---- - for (i = 0; i < nops; i++) - if (TREE_OPERAND (exp, i) != 0 -! && ! safe_from_p_1 (x, TREE_OPERAND (exp, i))) - return 0; - } -*************** safe_from_p (x, exp) -*** 3969,3975 **** ---- 4025,4087 ---- - - /* If we reach here, it is safe. */ -+ if (is_save_expr) -+ { -+ /* This SAVE_EXPR might appear many times in the top-level -+ safe_from_p() expression, and if it has a complex -+ subexpression, examining it multiple times could result -+ in a combinatorial explosion. E.g. on an Alpha Cabriolet -+ running at least 200MHz, a Fortran test case compiled with -+ optimization took about 28 minutes to compile -- even though -+ it was only a few lines long, and the complicated line causing -+ so much time to be spent in the earlier version of safe_from_p() -+ had only 293 or so unique nodes. -+ -+ So, turn this SAVE_EXPR into an ERROR_MARK for now, but remember -+ where it is so we can turn it back in the top-level safe_from_p() -+ when we're done. */ -+ -+ if (safe_from_p_count > safe_from_p_size) -+ return 0; /* For now, don't bother re-sizing the array. */ -+ safe_from_p_rewritten[safe_from_p_count++] = exp; -+ TREE_SET_CODE (exp, ERROR_MARK); -+ } -+ - return 1; - } - -+ /* Subroutine of expand_expr: return nonzero iff there is no way that -+ EXP can reference X, which is being modified. */ -+ -+ static int -+ safe_from_p (x, exp) -+ rtx x; -+ tree exp; -+ { -+ int rtn; -+ int i; -+ tree trees[128]; -+ -+ safe_from_p_count = 0; -+ safe_from_p_size = sizeof (trees) / sizeof (trees[0]); -+ safe_from_p_rewritten = &trees[0]; -+ -+ rtn = safe_from_p_1 (x, exp); -+ -+ #if 0 -+ if (safe_from_p_count != 0) -+ fprintf (stderr, "%s:%d: safe_from_p_count = %d\n", -+ input_filename, lineno, safe_from_p_count); -+ #endif -+ -+ for (i = 0; i < safe_from_p_count; ++i) -+ { -+ if (TREE_CODE (trees [i]) != ERROR_MARK) -+ abort (); -+ TREE_SET_CODE (trees[i], SAVE_EXPR); -+ } -+ -+ return rtn; -+ } -+ - /* Subroutine of expand_expr: return nonzero iff EXP is an - expression whose type is statically determinable. */ -*************** expand_expr (exp, target, tmode, modifie -*** 4534,4537 **** ---- 4646,4658 ---- - } - } -+ -+ if (TREE_READONLY (exp)) -+ { -+ if (GET_CODE (target) == MEM) -+ target = change_address (target, GET_MODE (target), -+ XEXP (target, 0)); -+ RTX_UNCHANGING_P (target) = 1; -+ } -+ - store_constructor (exp, target); - return target; -*************** expand_expr (exp, target, tmode, modifie -*** 4543,4567 **** - tree exp2; - -! /* A SAVE_EXPR as the address in an INDIRECT_EXPR is generated -! for *PTR += ANYTHING where PTR is put inside the SAVE_EXPR. -! This code has the same general effect as simply doing -! expand_expr on the save expr, except that the expression PTR -! is computed for use as a memory address. This means different -! code, suitable for indexing, may be generated. */ -! if (TREE_CODE (exp1) == SAVE_EXPR -! && SAVE_EXPR_RTL (exp1) == 0 -! && TYPE_MODE (TREE_TYPE (exp1)) == ptr_mode) -! { -! temp = expand_expr (TREE_OPERAND (exp1, 0), NULL_RTX, -! VOIDmode, EXPAND_SUM); -! op0 = memory_address (mode, temp); -! op0 = copy_all_regs (op0); -! SAVE_EXPR_RTL (exp1) = op0; -! } -! else -! { -! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); -! op0 = memory_address (mode, op0); -! } - - temp = gen_rtx (MEM, mode, op0); ---- 4664,4669 ---- - tree exp2; - -! op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); -! op0 = memory_address (mode, op0); - - temp = gen_rtx (MEM, mode, op0); -*************** expand_expr (exp, target, tmode, modifie -*** 4770,4776 **** - tree offset; - int volatilep = 0; -- tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, -- &mode1, &unsignedp, &volatilep); - int alignment; - - /* If we got back the original object, something is wrong. Perhaps ---- 4872,4879 ---- - tree offset; - int volatilep = 0; - int alignment; -+ tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, -+ &mode1, &unsignedp, &volatilep, -+ &alignment); - - /* If we got back the original object, something is wrong. Perhaps -*************** expand_expr (exp, target, tmode, modifie -*** 4793,4797 **** - != INTEGER_CST) - ? target : NULL_RTX), -! VOIDmode, EXPAND_SUM); - - /* If this is a constant, put it into a register if it is a ---- 4896,4901 ---- - != INTEGER_CST) - ? target : NULL_RTX), -! VOIDmode, -! modifier == EXPAND_INITIALIZER ? modifier : 0); - - /* If this is a constant, put it into a register if it is a -*************** expand_expr (exp, target, tmode, modifie -*** 4806,4810 **** - } - -- alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT; - if (offset != 0) - { ---- 4910,4913 ---- -*************** expand_expr (exp, target, tmode, modifie -*** 4816,4827 **** - gen_rtx (PLUS, ptr_mode, XEXP (op0, 0), - force_reg (ptr_mode, offset_rtx))); -- /* If we have a variable offset, the known alignment -- is only that of the innermost structure containing the field. -- (Actually, we could sometimes do better by using the -- size of an element of the innermost array, but no need.) */ -- if (TREE_CODE (exp) == COMPONENT_REF -- || TREE_CODE (exp) == BIT_FIELD_REF) -- alignment = (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0))) -- / BITS_PER_UNIT); - } - ---- 4919,4922 ---- -*************** expand_expr (exp, target, tmode, modifie -*** 4844,4848 **** - && modifier != EXPAND_SUM - && modifier != EXPAND_INITIALIZER -! && ((mode1 != BLKmode && ! direct_load[(int) mode1]) - /* If the field isn't aligned enough to fetch as a memref, - fetch it as a bit field. */ ---- 4939,4945 ---- - && modifier != EXPAND_SUM - && modifier != EXPAND_INITIALIZER -! && ((mode1 != BLKmode && ! direct_load[(int) mode1] -! && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT -! && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT) - /* If the field isn't aligned enough to fetch as a memref, - fetch it as a bit field. */ -*************** expand_expr (exp, target, tmode, modifie -*** 4857,4861 **** - - if (ext_mode == BLKmode) -! abort (); - - op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos, ---- 4954,4982 ---- - - if (ext_mode == BLKmode) -! { -! /* In this case, BITPOS must start at a byte boundary and -! TARGET, if specified, must be a MEM. */ -! if (GET_CODE (op0) != MEM -! || (target != 0 && GET_CODE (target) != MEM) -! || bitpos % BITS_PER_UNIT != 0) -! abort (); -! -! op0 = change_address (op0, VOIDmode, -! plus_constant (XEXP (op0, 0), -! bitpos / BITS_PER_UNIT)); -! if (target == 0) -! { -! target -! = assign_stack_temp (mode, int_size_in_bytes (type), 0); -! MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type); -! } -! -! emit_block_move (target, op0, -! GEN_INT ((bitsize + BITS_PER_UNIT - 1) -! / BITS_PER_UNIT), -! 1); -! -! return target; -! } - - op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos, -*************** expand_expr (exp, target, tmode, modifie -*** 4863,4866 **** ---- 4984,4999 ---- - alignment, - int_size_in_bytes (TREE_TYPE (tem))); -+ -+ /* If the result is a record type and BITSIZE is narrower than -+ the mode of OP0, an integral mode, and this is a big endian -+ machine, we must put the field into the high-order bits. */ -+ if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN -+ && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT -+ && bitsize < GET_MODE_BITSIZE (GET_MODE (op0))) -+ op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0, -+ size_int (GET_MODE_BITSIZE (GET_MODE (op0)) -+ - bitsize), -+ op0, 1); -+ - if (mode == BLKmode) - { -*************** expand_expr (exp, target, tmode, modifie -*** 4877,4880 **** ---- 5010,5018 ---- - } - -+ /* If the result is BLKmode, use that to access the object -+ now as well. */ -+ if (mode == BLKmode) -+ mode1 = BLKmode; -+ - /* Get a reference to just this component. */ - if (modifier == EXPAND_CONST_ADDRESS -*************** expand_expr (exp, target, tmode, modifie -*** 4888,4895 **** - MEM_IN_STRUCT_P (op0) = 1; - MEM_VOLATILE_P (op0) |= volatilep; -! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode) - return op0; -! if (target == 0) - target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode); - convert_move (target, op0, unsignedp); - return target; ---- 5026,5036 ---- - MEM_IN_STRUCT_P (op0) = 1; - MEM_VOLATILE_P (op0) |= volatilep; -! if (mode == mode1 || mode1 == BLKmode || mode1 == tmode -! || modifier == EXPAND_CONST_ADDRESS -! || modifier == EXPAND_INITIALIZER) - return op0; -! else if (target == 0) - target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode); -+ - convert_move (target, op0, unsignedp); - return target; -*************** expand_builtin (exp, target, subtarget, -*** 7986,7989 **** ---- 8127,8365 ---- - #endif - -+ /* __builtin_setjmp is passed a pointer to an array of five words -+ (not all will be used on all machines). It operates similarly to -+ the C library function of the same name, but is more efficient. -+ Much of the code below (and for longjmp) is copied from the handling -+ of non-local gotos. -+ -+ NOTE: This is intended for use by GNAT and will only work in -+ the method used by it. This code will likely NOT survive to -+ the GCC 2.8.0 release. */ -+ case BUILT_IN_SETJMP: -+ if (arglist == 0 -+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) -+ break; -+ -+ { -+ rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget, -+ VOIDmode, 0); -+ rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx (); -+ enum machine_mode sa_mode = Pmode; -+ rtx stack_save; -+ int old_inhibit_defer_pop = inhibit_defer_pop; -+ int return_pops = RETURN_POPS_ARGS (get_identifier ("__dummy"), -+ get_identifier ("__dummy"), 0); -+ rtx next_arg_reg; -+ CUMULATIVE_ARGS args_so_far; -+ int current_call_is_indirect = 1; -+ int i; -+ -+ #ifdef POINTERS_EXTEND_UNSIGNED -+ buf_addr = convert_memory_address (Pmode, buf_addr); -+ #endif -+ -+ buf_addr = force_reg (Pmode, buf_addr); -+ -+ if (target == 0 || GET_CODE (target) != REG -+ || REGNO (target) < FIRST_PSEUDO_REGISTER) -+ target = gen_reg_rtx (value_mode); -+ -+ emit_queue (); -+ -+ CONST_CALL_P (emit_note (NULL_PTR, NOTE_INSN_SETJMP)) = 1; -+ current_function_calls_setjmp = 1; -+ -+ /* We store the frame pointer and the address of lab1 in the buffer -+ and use the rest of it for the stack save area, which is -+ machine-dependent. */ -+ emit_move_insn (gen_rtx (MEM, Pmode, buf_addr), -+ virtual_stack_vars_rtx); -+ emit_move_insn -+ (validize_mem (gen_rtx (MEM, Pmode, -+ plus_constant (buf_addr, -+ GET_MODE_SIZE (Pmode)))), -+ gen_rtx (LABEL_REF, Pmode, lab1)); -+ -+ #ifdef HAVE_save_stack_nonlocal -+ if (HAVE_save_stack_nonlocal) -+ sa_mode = insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0]; -+ #endif -+ -+ current_function_has_nonlocal_goto = 1; -+ -+ stack_save = gen_rtx (MEM, sa_mode, -+ plus_constant (buf_addr, -+ 2 * GET_MODE_SIZE (Pmode))); -+ emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX); -+ -+ #ifdef HAVE_setjmp -+ if (HAVE_setjmp) -+ emit_insn (gen_setjmp ()); -+ #endif -+ -+ /* Set TARGET to zero and branch around the other case. */ -+ emit_move_insn (target, const0_rtx); -+ emit_jump_insn (gen_jump (lab2)); -+ emit_barrier (); -+ emit_label (lab1); -+ -+ /* Note that setjmp clobbers FP when we get here, so we have to -+ make sure it's marked as used by this function. */ -+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx)); -+ -+ /* Mark the static chain as clobbered here so life information -+ doesn't get messed up for it. */ -+ emit_insn (gen_rtx (CLOBBER, VOIDmode, static_chain_rtx)); -+ -+ /* Now put in the code to restore the frame pointer, and argument -+ pointer, if needed. The code below is from expand_end_bindings -+ in stmt.c; see detailed documentation there. */ -+ #ifdef HAVE_nonlocal_goto -+ if (! HAVE_nonlocal_goto) -+ #endif -+ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx); -+ -+ #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM -+ if (fixed_regs[ARG_POINTER_REGNUM]) -+ { -+ #ifdef ELIMINABLE_REGS -+ static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS; -+ -+ for (i = 0; i < sizeof elim_regs / sizeof elim_regs[0]; i++) -+ if (elim_regs[i].from == ARG_POINTER_REGNUM -+ && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM) -+ break; -+ -+ if (i == sizeof elim_regs / sizeof elim_regs [0]) -+ #endif -+ { -+ /* Now restore our arg pointer from the address at which it -+ was saved in our stack frame. -+ If there hasn't be space allocated for it yet, make -+ some now. */ -+ if (arg_pointer_save_area == 0) -+ arg_pointer_save_area -+ = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0); -+ emit_move_insn (virtual_incoming_args_rtx, -+ copy_to_reg (arg_pointer_save_area)); -+ } -+ } -+ #endif -+ -+ #ifdef HAVE_nonlocal_goto_receiver -+ if (HAVE_nonlocal_goto_receiver) -+ emit_insn (gen_nonlocal_goto_receiver ()); -+ #endif -+ /* The static chain pointer contains the address of dummy function. -+ We need to call it here to handle some PIC cases of restoring -+ a global pointer. Then return 1. */ -+ op0 = copy_to_mode_reg (Pmode, static_chain_rtx); -+ -+ /* We can't actually call emit_library_call here, so do everything -+ it does, which isn't much for a libfunc with no args. */ -+ op0 = memory_address (FUNCTION_MODE, op0); -+ -+ INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, -+ gen_rtx (SYMBOL_REF, Pmode, "__dummy")); -+ next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1); -+ -+ #ifndef ACCUMULATE_OUTGOING_ARGS -+ #ifdef HAVE_call_pop -+ if (HAVE_call_pop) -+ emit_call_insn (gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, op0), -+ const0_rtx, next_arg_reg, -+ GEN_INT (return_pops))); -+ else -+ #endif -+ #endif -+ -+ #ifdef HAVE_call -+ if (HAVE_call) -+ emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, op0), -+ const0_rtx, next_arg_reg, const0_rtx)); -+ else -+ #endif -+ abort (); -+ -+ emit_move_insn (target, const1_rtx); -+ emit_label (lab2); -+ return target; -+ } -+ -+ /* __builtin_longjmp is passed a pointer to an array of five words -+ and a value, which is a dummy. It's similar to the C library longjmp -+ function but works with __builtin_setjmp above. */ -+ case BUILT_IN_LONGJMP: -+ if (arglist == 0 || TREE_CHAIN (arglist) == 0 -+ || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) -+ break; -+ -+ { -+ tree dummy_id = get_identifier ("__dummy"); -+ tree dummy_type = build_function_type (void_type_node, NULL_TREE); -+ tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type); -+ #ifdef POINTERS_EXTEND_UNSIGNED -+ rtx buf_addr -+ = force_reg (Pmode, -+ convert_memory_address -+ (Pmode, -+ expand_expr (TREE_VALUE (arglist), -+ NULL_RTX, VOIDmode, 0))); -+ #else -+ rtx buf_addr -+ = force_reg (Pmode, expand_expr (TREE_VALUE (arglist), -+ NULL_RTX, -+ VOIDmode, 0)); -+ #endif -+ rtx fp = gen_rtx (MEM, Pmode, buf_addr); -+ rtx lab = gen_rtx (MEM, Pmode, -+ plus_constant (buf_addr, GET_MODE_SIZE (Pmode))); -+ enum machine_mode sa_mode -+ #ifdef HAVE_save_stack_nonlocal -+ = (HAVE_save_stack_nonlocal -+ ? insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0] -+ : Pmode); -+ #else -+ = Pmode; -+ #endif -+ rtx stack = gen_rtx (MEM, sa_mode, -+ plus_constant (buf_addr, -+ 2 * GET_MODE_SIZE (Pmode))); -+ -+ DECL_EXTERNAL (dummy_decl) = 1; -+ TREE_PUBLIC (dummy_decl) = 1; -+ make_decl_rtl (dummy_decl, NULL_PTR, 1); -+ -+ /* Expand the second expression just for side-effects. */ -+ expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), -+ const0_rtx, VOIDmode, 0); -+ -+ assemble_external (dummy_decl); -+ -+ /* Pick up FP, label, and SP from the block and jump. This code is -+ from expand_goto in stmt.c; see there for detailed comments. */ -+ #if HAVE_nonlocal_goto -+ if (HAVE_nonlocal_goto) -+ emit_insn (gen_nonlocal_goto (fp, lab, stack, -+ XEXP (DECL_RTL (dummy_decl), 0))); -+ else -+ #endif -+ { -+ lab = copy_to_reg (lab); -+ emit_move_insn (hard_frame_pointer_rtx, fp); -+ emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX); -+ -+ /* Put in the static chain register the address of the dummy -+ function. */ -+ emit_move_insn (static_chain_rtx, XEXP (DECL_RTL (dummy_decl), 0)); -+ emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx)); -+ emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx)); -+ emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx)); -+ emit_indirect_jump (lab); -+ } -+ -+ return const0_rtx; -+ } -+ - default: /* just do library call, if unknown builtin */ - error ("built-in function `%s' not currently supported", -*************** preexpand_calls (exp) -*** 8688,8701 **** - case CALL_EXPR: - /* Do nothing if already expanded. */ -! if (CALL_EXPR_RTL (exp) != 0) - return; - -! /* Do nothing to built-in functions. */ -! if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR -! || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL -! || ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) -! /* Do nothing if the call returns a variable-sized object. */ -! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST) -! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0); - return; - ---- 9064,9078 ---- - case CALL_EXPR: - /* Do nothing if already expanded. */ -! if (CALL_EXPR_RTL (exp) != 0 -! /* Do nothing if the call returns a variable-sized object. */ -! || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST -! /* Do nothing to built-in functions. */ -! || (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR -! && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) -! == FUNCTION_DECL) -! && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)))) - return; - -! CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0); - return; - -*************** do_jump (exp, if_false_label, if_true_la -*** 9087,9090 **** ---- 9464,9468 ---- - push_temp_slots (); - expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0); -+ preserve_temp_slots (NULL_RTX); - free_temp_slots (); - pop_temp_slots (); -*************** do_jump (exp, if_false_label, if_true_la -*** 9103,9111 **** - tree offset; - int volatilep = 0; - - /* Get description of this reference. We don't actually care - about the underlying object here. */ - get_inner_reference (exp, &bitsize, &bitpos, &offset, -! &mode, &unsignedp, &volatilep); - - type = type_for_size (bitsize, unsignedp); ---- 9481,9491 ---- - tree offset; - int volatilep = 0; -+ int alignment; - - /* Get description of this reference. We don't actually care - about the underlying object here. */ - get_inner_reference (exp, &bitsize, &bitpos, &offset, -! &mode, &unsignedp, &volatilep, -! &alignment); - - type = type_for_size (bitsize, unsignedp); -diff -rcp2N gcc-2.7.2.2/final.c g77-new/final.c -*** gcc-2.7.2.2/final.c Sun Nov 26 13:50:00 1995 ---- g77-new/final.c Thu Jul 10 20:11:16 1997 -*************** profile_function (file) -*** 983,991 **** - text_section (); - -! #ifdef STRUCT_VALUE_INCOMING_REGNUM - if (sval) - ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM); - #else -! #ifdef STRUCT_VALUE_REGNUM - if (sval) - ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM); ---- 983,991 ---- - text_section (); - -! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (sval) - ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM); - #else -! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (sval) - ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM); -*************** profile_function (file) -*** 993,1027 **** - #endif - -! #if 0 -! #ifdef STATIC_CHAIN_INCOMING_REGNUM - if (cxt) - ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM); - #else -! #ifdef STATIC_CHAIN_REGNUM - if (cxt) - ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM); - #endif - #endif -- #endif /* 0 */ - - FUNCTION_PROFILER (file, profile_label_no); - -! #if 0 -! #ifdef STATIC_CHAIN_INCOMING_REGNUM - if (cxt) - ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM); - #else -! #ifdef STATIC_CHAIN_REGNUM - if (cxt) - ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM); - #endif - #endif -- #endif /* 0 */ - -! #ifdef STRUCT_VALUE_INCOMING_REGNUM - if (sval) - ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM); - #else -! #ifdef STRUCT_VALUE_REGNUM - if (sval) - ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM); ---- 993,1023 ---- - #endif - -! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (cxt) - ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM); - #else -! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (cxt) - ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM); - #endif - #endif - - FUNCTION_PROFILER (file, profile_label_no); - -! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (cxt) - ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM); - #else -! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (cxt) - ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM); - #endif - #endif - -! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (sval) - ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM); - #else -! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) - if (sval) - ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM); -diff -rcp2N gcc-2.7.2.2/flags.h g77-new/flags.h -*** gcc-2.7.2.2/flags.h Thu Jun 15 07:34:11 1995 ---- g77-new/flags.h Thu Jul 10 20:08:56 1997 -*************** extern int flag_unroll_loops; -*** 204,207 **** ---- 204,221 ---- - extern int flag_unroll_all_loops; - -+ /* Nonzero forces all invariant computations in loops to be moved -+ outside the loop. */ -+ -+ extern int flag_move_all_movables; -+ -+ /* Nonzero forces all general induction variables in loops to be -+ strength reduced. */ -+ -+ extern int flag_reduce_all_givs; -+ -+ /* Nonzero gets another run of loop_optimize performed. */ -+ -+ extern int flag_rerun_loop_opt; -+ - /* Nonzero for -fcse-follow-jumps: - have cse follow jumps to do a more extensive job. */ -*************** extern int flag_gnu_linker; -*** 339,342 **** ---- 353,369 ---- - /* Tag all structures with __attribute__(packed) */ - extern int flag_pack_struct; -+ -+ /* 1 if alias checking is enabled: symbols do not alias each other -+ and parameters do not alias the current stack frame. */ -+ extern int flag_alias_check; -+ -+ /* This flag is only tested if alias checking is enabled. -+ 0 if pointer arguments may alias each other. True in C. -+ 1 if pointer arguments may not alias each other but may alias -+ global variables. -+ 2 if pointer arguments may not alias each other and may not -+ alias global variables. True in Fortran. -+ The value is ignored if flag_alias_check is 0. */ -+ extern int flag_argument_noalias; - - /* Other basic status info about current function. */ -diff -rcp2N gcc-2.7.2.2/flow.c g77-new/flow.c -*** gcc-2.7.2.2/flow.c Mon Aug 28 06:23:34 1995 ---- g77-new/flow.c Sun Aug 10 18:46:11 1997 -*************** static HARD_REG_SET elim_reg_set; -*** 288,292 **** - /* Forward declarations */ - static void find_basic_blocks PROTO((rtx, rtx)); -! static int uses_reg_or_mem PROTO((rtx)); - static void mark_label_ref PROTO((rtx, rtx, int)); - static void life_analysis PROTO((rtx, int)); ---- 288,292 ---- - /* Forward declarations */ - static void find_basic_blocks PROTO((rtx, rtx)); -! static int jmp_uses_reg_or_mem PROTO((rtx)); - static void mark_label_ref PROTO((rtx, rtx, int)); - static void life_analysis PROTO((rtx, int)); -*************** find_basic_blocks (f, nonlocal_label_lis -*** 554,563 **** - if (GET_CODE (XVECEXP (pat, 0, i)) == SET - && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx -! && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i)))) - computed_jump = 1; - } - else if (GET_CODE (pat) == SET - && SET_DEST (pat) == pc_rtx -! && uses_reg_or_mem (SET_SRC (pat))) - computed_jump = 1; - ---- 554,563 ---- - if (GET_CODE (XVECEXP (pat, 0, i)) == SET - && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx -! && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i)))) - computed_jump = 1; - } - else if (GET_CODE (pat) == SET - && SET_DEST (pat) == pc_rtx -! && jmp_uses_reg_or_mem (SET_SRC (pat))) - computed_jump = 1; - -*************** find_basic_blocks (f, nonlocal_label_lis -*** 760,767 **** - /* Subroutines of find_basic_blocks. */ - -! /* Return 1 if X contain a REG or MEM that is not in the constant pool. */ - - static int -! uses_reg_or_mem (x) - rtx x; - { ---- 760,768 ---- - /* Subroutines of find_basic_blocks. */ - -! /* Return 1 if X, the SRC_SRC of SET of (pc) contain a REG or MEM that is -! not in the constant pool and not in the condition of an IF_THEN_ELSE. */ - - static int -! jmp_uses_reg_or_mem (x) - rtx x; - { -*************** uses_reg_or_mem (x) -*** 770,778 **** - char *fmt; - -! if (code == REG -! || (code == MEM -! && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF -! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0))))) -! return 1; - - fmt = GET_RTX_FORMAT (code); ---- 771,796 ---- - char *fmt; - -! switch (code) -! { -! case CONST: -! case LABEL_REF: -! case PC: -! return 0; -! -! case REG: -! return 1; -! -! case MEM: -! return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF -! && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0))); -! -! case IF_THEN_ELSE: -! return (jmp_uses_reg_or_mem (XEXP (x, 1)) -! || jmp_uses_reg_or_mem (XEXP (x, 2))); -! -! case PLUS: case MINUS: case MULT: -! return (jmp_uses_reg_or_mem (XEXP (x, 0)) -! || jmp_uses_reg_or_mem (XEXP (x, 1))); -! } - - fmt = GET_RTX_FORMAT (code); -*************** uses_reg_or_mem (x) -*** 780,789 **** - { - if (fmt[i] == 'e' -! && uses_reg_or_mem (XEXP (x, i))) - return 1; - - if (fmt[i] == 'E') - for (j = 0; j < XVECLEN (x, i); j++) -! if (uses_reg_or_mem (XVECEXP (x, i, j))) - return 1; - } ---- 798,807 ---- - { - if (fmt[i] == 'e' -! && jmp_uses_reg_or_mem (XEXP (x, i))) - return 1; - - if (fmt[i] == 'E') - for (j = 0; j < XVECLEN (x, i); j++) -! if (jmp_uses_reg_or_mem (XVECEXP (x, i, j))) - return 1; - } -*************** propagate_block (old, first, last, final -*** 1605,1614 **** - - /* Each call clobbers all call-clobbered regs that are not -! global. Note that the function-value reg is a - call-clobbered reg, and mark_set_regs has already had - a chance to handle it. */ - - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -! if (call_used_regs[i] && ! global_regs[i]) - dead[i / REGSET_ELT_BITS] - |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)); ---- 1623,1633 ---- - - /* Each call clobbers all call-clobbered regs that are not -! global or fixed. Note that the function-value reg is a - call-clobbered reg, and mark_set_regs has already had - a chance to handle it. */ - - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -! if (call_used_regs[i] && ! global_regs[i] -! && ! fixed_regs[i]) - dead[i / REGSET_ELT_BITS] - |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS)); -diff -rcp2N gcc-2.7.2.2/fold-const.c g77-new/fold-const.c -*** gcc-2.7.2.2/fold-const.c Fri Sep 15 18:26:12 1995 ---- g77-new/fold-const.c Sun Aug 10 18:47:18 1997 -*************** static tree unextend PROTO((tree, int, i -*** 80,83 **** ---- 80,84 ---- - static tree fold_truthop PROTO((enum tree_code, tree, tree, tree)); - static tree strip_compound_expr PROTO((tree, tree)); -+ static int multiple_of_p PROTO((tree, tree, tree)); - - #ifndef BRANCH_COST -*************** const_binop (code, arg1, arg2, notrunc) -*** 1077,1080 **** ---- 1078,1083 ---- - if (int2h == 0 && int2l > 0 - && TREE_TYPE (arg1) == sizetype -+ && ! TREE_CONSTANT_OVERFLOW (arg1) -+ && ! TREE_CONSTANT_OVERFLOW (arg2) - && int1h == 0 && int1l >= 0) - { -*************** const_binop (code, arg1, arg2, notrunc) -*** 1230,1233 **** ---- 1233,1237 ---- - if (TREE_CODE (arg1) == COMPLEX_CST) - { -+ register tree type = TREE_TYPE (arg1); - register tree r1 = TREE_REALPART (arg1); - register tree i1 = TREE_IMAGPART (arg1); -*************** const_binop (code, arg1, arg2, notrunc) -*** 1239,1253 **** - { - case PLUS_EXPR: -! t = build_complex (const_binop (PLUS_EXPR, r1, r2, notrunc), - const_binop (PLUS_EXPR, i1, i2, notrunc)); - break; - - case MINUS_EXPR: -! t = build_complex (const_binop (MINUS_EXPR, r1, r2, notrunc), - const_binop (MINUS_EXPR, i1, i2, notrunc)); - break; - - case MULT_EXPR: -! t = build_complex (const_binop (MINUS_EXPR, - const_binop (MULT_EXPR, - r1, r2, notrunc), ---- 1243,1260 ---- - { - case PLUS_EXPR: -! t = build_complex (type, -! const_binop (PLUS_EXPR, r1, r2, notrunc), - const_binop (PLUS_EXPR, i1, i2, notrunc)); - break; - - case MINUS_EXPR: -! t = build_complex (type, -! const_binop (MINUS_EXPR, r1, r2, notrunc), - const_binop (MINUS_EXPR, i1, i2, notrunc)); - break; - - case MULT_EXPR: -! t = build_complex (type, -! const_binop (MINUS_EXPR, - const_binop (MULT_EXPR, - r1, r2, notrunc), -*************** const_binop (code, arg1, arg2, notrunc) -*** 1271,1293 **** - notrunc); - -! t = build_complex -! (const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1)) -! ? TRUNC_DIV_EXPR : RDIV_EXPR, -! const_binop (PLUS_EXPR, -! const_binop (MULT_EXPR, r1, r2, -! notrunc), -! const_binop (MULT_EXPR, i1, i2, -! notrunc), -! notrunc), -! magsquared, notrunc), -! const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1)) -! ? TRUNC_DIV_EXPR : RDIV_EXPR, -! const_binop (MINUS_EXPR, -! const_binop (MULT_EXPR, i1, r2, -! notrunc), -! const_binop (MULT_EXPR, r1, i2, -! notrunc), -! notrunc), -! magsquared, notrunc)); - } - break; ---- 1278,1302 ---- - notrunc); - -! t = build_complex (type, -! const_binop -! (INTEGRAL_TYPE_P (TREE_TYPE (r1)) -! ? TRUNC_DIV_EXPR : RDIV_EXPR, -! const_binop (PLUS_EXPR, -! const_binop (MULT_EXPR, r1, r2, -! notrunc), -! const_binop (MULT_EXPR, i1, i2, -! notrunc), -! notrunc), -! magsquared, notrunc), -! const_binop -! (INTEGRAL_TYPE_P (TREE_TYPE (r1)) -! ? TRUNC_DIV_EXPR : RDIV_EXPR, -! const_binop (MINUS_EXPR, -! const_binop (MULT_EXPR, i1, r2, -! notrunc), -! const_binop (MULT_EXPR, r1, i2, -! notrunc), -! notrunc), -! magsquared, notrunc)); - } - break; -*************** const_binop (code, arg1, arg2, notrunc) -*** 1296,1300 **** - abort (); - } -- TREE_TYPE (t) = TREE_TYPE (arg1); - return t; - } ---- 1305,1308 ---- -*************** size_binop (code, arg0, arg1) -*** 1346,1363 **** - { - /* And some specific cases even faster than that. */ -! if (code == PLUS_EXPR -! && TREE_INT_CST_LOW (arg0) == 0 -! && TREE_INT_CST_HIGH (arg0) == 0) - return arg1; -! if (code == MINUS_EXPR -! && TREE_INT_CST_LOW (arg1) == 0 -! && TREE_INT_CST_HIGH (arg1) == 0) - return arg0; -! if (code == MULT_EXPR -! && TREE_INT_CST_LOW (arg0) == 1 -! && TREE_INT_CST_HIGH (arg0) == 0) - return arg1; - /* Handle general case of two integer constants. */ -! return const_binop (code, arg0, arg1, 0); - } - ---- 1354,1367 ---- - { - /* And some specific cases even faster than that. */ -! if (code == PLUS_EXPR && integer_zerop (arg0)) - return arg1; -! else if ((code == MINUS_EXPR || code == PLUS_EXPR) -! && integer_zerop (arg1)) - return arg0; -! else if (code == MULT_EXPR && integer_onep (arg0)) - return arg1; -+ - /* Handle general case of two integer constants. */ -! return const_binop (code, arg0, arg1, 1); - } - -*************** fold_convert (t, arg1) -*** 1482,1486 **** - { - if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1))) -! return arg1; - else if (setjmp (float_error)) - { ---- 1486,1494 ---- - { - if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1))) -! { -! t = arg1; -! TREE_TYPE (arg1) = type; -! return t; -! } - else if (setjmp (float_error)) - { -*************** operand_equal_p (arg0, arg1, only_const) -*** 1644,1687 **** - STRIP_NOPS (arg1); - -! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal. -! We don't care about side effects in that case because the SAVE_EXPR -! takes care of that for us. */ -! if (TREE_CODE (arg0) == SAVE_EXPR && arg0 == arg1) -! return ! only_const; -! -! if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1)) - return 0; - -! if (TREE_CODE (arg0) == TREE_CODE (arg1) -! && TREE_CODE (arg0) == ADDR_EXPR -! && TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0)) -! return 1; -! -! if (TREE_CODE (arg0) == TREE_CODE (arg1) -! && TREE_CODE (arg0) == INTEGER_CST -! && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1) -! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1)) - return 1; - -! /* Detect when real constants are equal. */ -! if (TREE_CODE (arg0) == TREE_CODE (arg1) -! && TREE_CODE (arg0) == REAL_CST) -! return !bcmp ((char *) &TREE_REAL_CST (arg0), -! (char *) &TREE_REAL_CST (arg1), -! sizeof (REAL_VALUE_TYPE)); - - if (only_const) - return 0; - -- if (arg0 == arg1) -- return 1; -- -- if (TREE_CODE (arg0) != TREE_CODE (arg1)) -- return 0; -- /* This is needed for conversions and for COMPONENT_REF. -- Might as well play it safe and always test this. */ -- if (TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1))) -- return 0; -- - switch (TREE_CODE_CLASS (TREE_CODE (arg0))) - { ---- 1652,1705 ---- - STRIP_NOPS (arg1); - -! if (TREE_CODE (arg0) != TREE_CODE (arg1) -! /* This is needed for conversions and for COMPONENT_REF. -! Might as well play it safe and always test this. */ -! || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1))) - return 0; - -! /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal. -! We don't care about side effects in that case because the SAVE_EXPR -! takes care of that for us. In all other cases, two expressions are -! equal if they have no side effects. If we have two identical -! expressions with side effects that should be treated the same due -! to the only side effects being identical SAVE_EXPR's, that will -! be detected in the recursive calls below. */ -! if (arg0 == arg1 && ! only_const -! && (TREE_CODE (arg0) == SAVE_EXPR -! || (! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg1)))) - return 1; - -! /* Next handle constant cases, those for which we can return 1 even -! if ONLY_CONST is set. */ -! if (TREE_CONSTANT (arg0) && TREE_CONSTANT (arg1)) -! switch (TREE_CODE (arg0)) -! { -! case INTEGER_CST: -! return (TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1) -! && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1)); -! -! case REAL_CST: -! return REAL_VALUES_EQUAL (TREE_REAL_CST (arg0), TREE_REAL_CST (arg1)); -! -! case COMPLEX_CST: -! return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1), -! only_const) -! && operand_equal_p (TREE_IMAGPART (arg0), TREE_IMAGPART (arg1), -! only_const)); -! -! case STRING_CST: -! return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1) -! && ! strncmp (TREE_STRING_POINTER (arg0), -! TREE_STRING_POINTER (arg1), -! TREE_STRING_LENGTH (arg0))); -! -! case ADDR_EXPR: -! return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), -! 0); -! } - - if (only_const) - return 0; - - switch (TREE_CODE_CLASS (TREE_CODE (arg0))) - { -*************** operand_equal_p (arg0, arg1, only_const) -*** 1698,1705 **** - case '<': - case '2': -! return (operand_equal_p (TREE_OPERAND (arg0, 0), -! TREE_OPERAND (arg1, 0), 0) - && operand_equal_p (TREE_OPERAND (arg0, 1), -! TREE_OPERAND (arg1, 1), 0)); - - case 'r': ---- 1716,1735 ---- - case '<': - case '2': -! if (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0) -! && operand_equal_p (TREE_OPERAND (arg0, 1), TREE_OPERAND (arg1, 1), -! 0)) -! return 1; -! -! /* For commutative ops, allow the other order. */ -! return ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MULT_EXPR -! || TREE_CODE (arg0) == MIN_EXPR || TREE_CODE (arg0) == MAX_EXPR -! || TREE_CODE (arg0) == BIT_IOR_EXPR -! || TREE_CODE (arg0) == BIT_XOR_EXPR -! || TREE_CODE (arg0) == BIT_AND_EXPR -! || TREE_CODE (arg0) == NE_EXPR || TREE_CODE (arg0) == EQ_EXPR) -! && operand_equal_p (TREE_OPERAND (arg0, 0), -! TREE_OPERAND (arg1, 1), 0) - && operand_equal_p (TREE_OPERAND (arg0, 1), -! TREE_OPERAND (arg1, 0), 0)); - - case 'r': -*************** optimize_bit_field_compare (code, compar -*** 2212,2215 **** ---- 2242,2246 ---- - int lunsignedp, runsignedp; - int lvolatilep = 0, rvolatilep = 0; -+ int alignment; - tree linner, rinner; - tree mask; -*************** optimize_bit_field_compare (code, compar -*** 2220,2224 **** - extraction at all and so can do nothing. */ - linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode, -! &lunsignedp, &lvolatilep); - if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0 - || offset != 0) ---- 2251,2255 ---- - extraction at all and so can do nothing. */ - linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode, -! &lunsignedp, &lvolatilep, &alignment); - if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0 - || offset != 0) -*************** optimize_bit_field_compare (code, compar -*** 2229,2234 **** - /* If this is not a constant, we can only do something if bit positions, - sizes, and signedness are the same. */ -! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, -! &rmode, &runsignedp, &rvolatilep); - - if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize ---- 2260,2265 ---- - /* If this is not a constant, we can only do something if bit positions, - sizes, and signedness are the same. */ -! rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode, -! &runsignedp, &rvolatilep, &alignment); - - if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize -*************** decode_field_reference (exp, pbitsize, p -*** 2403,2406 **** ---- 2434,2438 ---- - tree unsigned_type; - int precision; -+ int alignment; - - /* All the optimizations using this function assume integer fields. -*************** decode_field_reference (exp, pbitsize, p -*** 2423,2427 **** - - inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode, -! punsignedp, pvolatilep); - if ((inner == exp && and_mask == 0) - || *pbitsize < 0 || offset != 0) ---- 2455,2459 ---- - - inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode, -! punsignedp, pvolatilep, &alignment); - if ((inner == exp && and_mask == 0) - || *pbitsize < 0 || offset != 0) -*************** strip_compound_expr (t, s) -*** 3065,3068 **** ---- 3097,3200 ---- - } - -+ /* Determine if first argument is a multiple of second argument. -+ Return 0 if it is not, or is not easily determined to so be. -+ -+ An example of the sort of thing we care about (at this point -- -+ this routine could surely be made more general, and expanded -+ to do what the *_DIV_EXPR's fold() cases do now) is discovering -+ that -+ -+ SAVE_EXPR (I) * SAVE_EXPR (J * 8) -+ -+ is a multiple of -+ -+ SAVE_EXPR (J * 8) -+ -+ when we know that the two `SAVE_EXPR (J * 8)' nodes are the -+ same node (which means they will have the same value at run -+ time, even though we don't know when they'll be assigned). -+ -+ This code also handles discovering that -+ -+ SAVE_EXPR (I) * SAVE_EXPR (J * 8) -+ -+ is a multiple of -+ -+ 8 -+ -+ (of course) so we don't have to worry about dealing with a -+ possible remainder. -+ -+ Note that we _look_ inside a SAVE_EXPR only to determine -+ how it was calculated; it is not safe for fold() to do much -+ of anything else with the internals of a SAVE_EXPR, since -+ fold() cannot know when it will be evaluated at run time. -+ For example, the latter example above _cannot_ be implemented -+ as -+ -+ SAVE_EXPR (I) * J -+ -+ or any variant thereof, since the value of J at evaluation time -+ of the original SAVE_EXPR is not necessarily the same at the time -+ the new expression is evaluated. The only optimization of this -+ sort that would be valid is changing -+ -+ SAVE_EXPR (I) * SAVE_EXPR (SAVE_EXPR (J) * 8) -+ divided by -+ 8 -+ -+ to -+ -+ SAVE_EXPR (I) * SAVE_EXPR (J) -+ -+ (where the same SAVE_EXPR (J) is used in the original and the -+ transformed version). */ -+ -+ static int -+ multiple_of_p (type, top, bottom) -+ tree type; -+ tree top; -+ tree bottom; -+ { -+ if (operand_equal_p (top, bottom, 0)) -+ return 1; -+ -+ if (TREE_CODE (type) != INTEGER_TYPE) -+ return 0; -+ -+ switch (TREE_CODE (top)) -+ { -+ case MULT_EXPR: -+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom) -+ || multiple_of_p (type, TREE_OPERAND (top, 1), bottom)); -+ -+ case PLUS_EXPR: -+ case MINUS_EXPR: -+ return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom) -+ && multiple_of_p (type, TREE_OPERAND (top, 1), bottom)); -+ -+ case NOP_EXPR: -+ /* Punt if conversion from non-integral or wider integral type. */ -+ if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE) -+ || (TYPE_PRECISION (type) -+ < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0))))) -+ return 0; -+ /* Fall through. */ -+ case SAVE_EXPR: -+ return multiple_of_p (type, TREE_OPERAND (top, 0), bottom); -+ -+ case INTEGER_CST: -+ if ((TREE_CODE (bottom) != INTEGER_CST) -+ || (tree_int_cst_sgn (top) < 0) -+ || (tree_int_cst_sgn (bottom) < 0)) -+ return 0; -+ return integer_zerop (const_binop (TRUNC_MOD_EXPR, -+ top, bottom, 0)); -+ -+ default: -+ return 0; -+ } -+ } -+ - /* Perform constant folding and related simplification of EXPR. - The related simplifications include x*1 => x, x*0 => 0, etc., -*************** fold (expr) -*** 3611,3615 **** - TREE_OPERAND (arg0, 1)))); - else if (TREE_CODE (arg0) == COMPLEX_CST) -! return build_complex (TREE_OPERAND (arg0, 0), - fold (build1 (NEGATE_EXPR, - TREE_TYPE (TREE_TYPE (arg0)), ---- 3743,3747 ---- - TREE_OPERAND (arg0, 1)))); - else if (TREE_CODE (arg0) == COMPLEX_CST) -! return build_complex (type, TREE_OPERAND (arg0, 0), - fold (build1 (NEGATE_EXPR, - TREE_TYPE (TREE_TYPE (arg0)), -*************** fold (expr) -*** 4014,4018 **** - return non_lvalue (convert (type, arg0)); - if (integer_zerop (arg1)) -! return t; - - /* If we have ((a / C1) / C2) where both division are the same type, try ---- 4146,4166 ---- - return non_lvalue (convert (type, arg0)); - if (integer_zerop (arg1)) -! { -! if (extra_warnings) -! warning ("integer division by zero"); -! return t; -! } -! -! /* If arg0 is a multiple of arg1, then rewrite to the fastest div -! operation, EXACT_DIV_EXPR. Otherwise, handle folding of -! general divide. Note that only CEIL_DIV_EXPR is rewritten now, -! only because the others seem to be faster in some cases, e.g. the -! nonoptimized TRUNC_DIV_EXPR or FLOOR_DIV_EXPR on DEC Alpha. This -! is probably just due to more work being done on it in expmed.c than -! on EXACT_DIV_EXPR, and could presumably be fixed, since -! EXACT_DIV_EXPR should _never_ be slower than *_DIV_EXPR. */ -! if ((code == CEIL_DIV_EXPR) -! && multiple_of_p (type, arg0, arg1)) -! return fold (build (EXACT_DIV_EXPR, type, arg0, arg1)); - - /* If we have ((a / C1) / C2) where both division are the same type, try -*************** fold (expr) -*** 4049,4053 **** - tree xarg0 = arg0; - -! if (TREE_CODE (xarg0) == SAVE_EXPR) - have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0); - ---- 4197,4201 ---- - tree xarg0 = arg0; - -! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0) - have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0); - -*************** fold (expr) -*** 4067,4071 **** - } - -! if (TREE_CODE (xarg0) == SAVE_EXPR) - have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0); - ---- 4215,4219 ---- - } - -! if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0) - have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0); - -*************** fold (expr) -*** 5050,5054 **** - case COMPLEX_EXPR: - if (wins) -! return build_complex (arg0, arg1); - return t; - ---- 5198,5202 ---- - case COMPLEX_EXPR: - if (wins) -! return build_complex (type, arg0, arg1); - return t; - -diff -rcp2N gcc-2.7.2.2/function.c g77-new/function.c -*** gcc-2.7.2.2/function.c Sun Nov 26 14:50:26 1995 ---- g77-new/function.c Sun Aug 10 18:47:24 1997 -*************** free_temps_for_rtl_expr (t) -*** 1184,1187 **** ---- 1184,1202 ---- - } - -+ /* Mark all temporaries ever allocated in this functon as not suitable -+ for reuse until the current level is exited. */ -+ -+ void -+ mark_all_temps_used () -+ { -+ struct temp_slot *p; -+ -+ for (p = temp_slots; p; p = p->next) -+ { -+ p->in_use = 1; -+ p->level = MIN (p->level, temp_slot_level); -+ } -+ } -+ - /* Push deeper into the nesting level for stack temporaries. */ - -*************** pop_temp_slots () -*** 1208,1211 **** ---- 1223,1237 ---- - temp_slot_level--; - } -+ -+ /* Initialize temporary slots. */ -+ -+ void -+ init_temp_slots () -+ { -+ /* We have not allocated any temporaries yet. */ -+ temp_slots = 0; -+ temp_slot_level = 0; -+ target_temp_slot_level = 0; -+ } - - /* Retroactively move an auto variable from a register to a stack slot. -*************** instantiate_virtual_regs_1 (loc, object, -*** 2838,2842 **** - case MEM: - /* Most cases of MEM that convert to valid addresses have already been -! handled by our scan of regno_reg_rtx. The only special handling we - need here is to make a copy of the rtx to ensure it isn't being - shared if we have to change it to a pseudo. ---- 2864,2868 ---- - case MEM: - /* Most cases of MEM that convert to valid addresses have already been -! handled by our scan of decls. The only special handling we - need here is to make a copy of the rtx to ensure it isn't being - shared if we have to change it to a pseudo. -*************** instantiate_virtual_regs_1 (loc, object, -*** 2896,2900 **** - has less restrictions on an address that some other insn. - In that case, we will modify the shared address. This case -! doesn't seem very likely, though. */ - - if (instantiate_virtual_regs_1 (&XEXP (x, 0), ---- 2922,2928 ---- - has less restrictions on an address that some other insn. - In that case, we will modify the shared address. This case -! doesn't seem very likely, though. One case where this could -! happen is in the case of a USE or CLOBBER reference, but we -! take care of that below. */ - - if (instantiate_virtual_regs_1 (&XEXP (x, 0), -*************** instantiate_virtual_regs_1 (loc, object, -*** 2909,2914 **** - - /* Fall through to generic unary operation case. */ -- case USE: -- case CLOBBER: - case SUBREG: - case STRICT_LOW_PART: ---- 2937,2940 ---- -*************** instantiate_virtual_regs_1 (loc, object, -*** 2927,2930 **** ---- 2953,2973 ---- - goto restart; - -+ case USE: -+ case CLOBBER: -+ /* If the operand is a MEM, see if the change is a valid MEM. If not, -+ go ahead and make the invalid one, but do it to a copy. For a REG, -+ just make the recursive call, since there's no chance of a problem. */ -+ -+ if ((GET_CODE (XEXP (x, 0)) == MEM -+ && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0), -+ 0)) -+ || (GET_CODE (XEXP (x, 0)) == REG -+ && instantiate_virtual_regs_1 (&XEXP (x, 0), 0, 0))) -+ return 1; -+ -+ XEXP (x, 0) = copy_rtx (XEXP (x, 0)); -+ loc = &XEXP (x, 0); -+ goto restart; -+ - case REG: - /* Try to replace with a PLUS. If that doesn't work, compute the sum -*************** assign_parms (fndecl, second_time) -*** 3404,3409 **** - - /* If this is a memory ref that contains aggregate components, -! mark it as such for cse and loop optimize. */ - MEM_IN_STRUCT_P (stack_parm) = aggregate; - } - ---- 3447,3454 ---- - - /* If this is a memory ref that contains aggregate components, -! mark it as such for cse and loop optimize. Likewise if it -! is readonly. */ - MEM_IN_STRUCT_P (stack_parm) = aggregate; -+ RTX_UNCHANGING_P (stack_parm) = TREE_READONLY (parm); - } - -*************** assign_parms (fndecl, second_time) -*** 3627,3631 **** - - parmreg = gen_reg_rtx (promoted_nominal_mode); -! REG_USERVAR_P (parmreg) = 1; - - /* If this was an item that we received a pointer to, set DECL_RTL ---- 3672,3676 ---- - - parmreg = gen_reg_rtx (promoted_nominal_mode); -! mark_user_reg (parmreg); - - /* If this was an item that we received a pointer to, set DECL_RTL -*************** assign_parms (fndecl, second_time) -*** 3695,3699 **** - Pmode above. We must use the actual mode of the parm. */ - parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm))); -! REG_USERVAR_P (parmreg) = 1; - emit_move_insn (parmreg, DECL_RTL (parm)); - DECL_RTL (parm) = parmreg; ---- 3740,3744 ---- - Pmode above. We must use the actual mode of the parm. */ - parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm))); -! mark_user_reg (parmreg); - emit_move_insn (parmreg, DECL_RTL (parm)); - DECL_RTL (parm) = parmreg; -*************** init_function_start (subr, filename, lin -*** 4814,4821 **** - rtl_expr_chain = 0; - -! /* We have not allocated any temporaries yet. */ -! temp_slots = 0; -! temp_slot_level = 0; -! target_temp_slot_level = 0; - - /* Within function body, compute a type's size as soon it is laid out. */ ---- 4859,4864 ---- - rtl_expr_chain = 0; - -! /* Set up to allocate temporaries. */ -! init_temp_slots (); - - /* Within function body, compute a type's size as soon it is laid out. */ -diff -rcp2N gcc-2.7.2.2/gcc.c g77-new/gcc.c -*** gcc-2.7.2.2/gcc.c Tue Sep 12 17:15:11 1995 ---- g77-new/gcc.c Sun Aug 10 18:47:14 1997 -*************** static int is_directory PROTO((char *, -*** 296,300 **** - static void validate_switches PROTO((char *)); - static void validate_all_switches PROTO((void)); -! static void give_switch PROTO((int, int)); - static int used_arg PROTO((char *, int)); - static int default_arg PROTO((char *, int)); ---- 296,300 ---- - static void validate_switches PROTO((char *)); - static void validate_all_switches PROTO((void)); -! static void give_switch PROTO((int, int, int)); - static int used_arg PROTO((char *, int)); - static int default_arg PROTO((char *, int)); -*************** or with constant text in a single argume -*** 405,408 **** ---- 405,409 ---- - name starts with `o'. %{o*} would substitute this text, - including the space; thus, two arguments would be generated. -+ %{^S*} likewise, but don't put a blank between a switch and any args. - %{S*:X} substitutes X if one or more switches whose names start with -S are - specified to CC. Note that the tail part of the -S option -*************** process_command (argc, argv) -*** 2828,2831 **** ---- 2829,2835 ---- - infiles[n_infiles++].name = argv[i]; - } -+ /* -save-temps overrides -pipe, so that temp files are produced */ -+ else if (save_temps_flag && strcmp (argv[i], "-pipe") == 0) -+ ; - else if (argv[i][0] == '-' && argv[i][1] != 0) - { -*************** handle_braces (p) -*** 3832,3835 **** ---- 3836,3844 ---- - int negate = 0; - int suffix = 0; -+ int include_blanks = 1; -+ -+ if (*p == '^') -+ /* A '^' after the open-brace means to not give blanks before args. */ -+ include_blanks = 0, ++p; - - if (*p == '|') -*************** handle_braces (p) -*** 3897,3901 **** - if (!strncmp (switches[i].part1, filter, p - filter) - && check_live_switch (i, p - filter)) -! give_switch (i, 0); - } - else ---- 3906,3910 ---- - if (!strncmp (switches[i].part1, filter, p - filter) - && check_live_switch (i, p - filter)) -! give_switch (i, 0, include_blanks); - } - else -*************** handle_braces (p) -*** 3936,3940 **** - do_spec_1 (string, 0, &switches[i].part1[hard_match_len]); - /* Pass any arguments this switch has. */ -! give_switch (i, 1); - } - ---- 3945,3949 ---- - do_spec_1 (string, 0, &switches[i].part1[hard_match_len]); - /* Pass any arguments this switch has. */ -! give_switch (i, 1, 1); - } - -*************** handle_braces (p) -*** 3980,3984 **** - if (*p == '}') - { -! give_switch (i, 0); - } - else ---- 3989,3993 ---- - if (*p == '}') - { -! give_switch (i, 0, include_blanks); - } - else -*************** check_live_switch (switchnum, prefix_len -*** 4081,4090 **** - This cannot fail since it never finishes a command line. - -! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. */ - - static void -! give_switch (switchnum, omit_first_word) - int switchnum; - int omit_first_word; - { - if (!omit_first_word) ---- 4090,4103 ---- - This cannot fail since it never finishes a command line. - -! If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. -! -! If INCLUDE_BLANKS is nonzero, then we include blanks before each argument -! of the switch. */ - - static void -! give_switch (switchnum, omit_first_word, include_blanks) - int switchnum; - int omit_first_word; -+ int include_blanks; - { - if (!omit_first_word) -*************** give_switch (switchnum, omit_first_word) -*** 4093,4097 **** - do_spec_1 (switches[switchnum].part1, 1, NULL_PTR); - } -! do_spec_1 (" ", 0, NULL_PTR); - if (switches[switchnum].args != 0) - { ---- 4106,4110 ---- - do_spec_1 (switches[switchnum].part1, 1, NULL_PTR); - } -! - if (switches[switchnum].args != 0) - { -*************** give_switch (switchnum, omit_first_word) -*** 4099,4106 **** - for (p = switches[switchnum].args; *p; p++) - { - do_spec_1 (*p, 1, NULL_PTR); -- do_spec_1 (" ", 0, NULL_PTR); - } - } - switches[switchnum].valid = 1; - } ---- 4112,4122 ---- - for (p = switches[switchnum].args; *p; p++) - { -+ if (include_blanks) -+ do_spec_1 (" ", 0, NULL_PTR); - do_spec_1 (*p, 1, NULL_PTR); - } - } -+ -+ do_spec_1 (" ", 0, NULL_PTR); - switches[switchnum].valid = 1; - } -diff -rcp2N gcc-2.7.2.2/gcc.texi g77-new/gcc.texi -*** gcc-2.7.2.2/gcc.texi Thu Feb 20 19:24:19 1997 ---- g77-new/gcc.texi Thu Jul 10 20:08:58 1997 -*************** original English. -*** 149,152 **** ---- 149,153 ---- - @sp 3 - @center Last updated 29 June 1996 -+ @center (Revised for GNU Fortran 1997-01-10) - @sp 1 - @c The version number appears twice more in this file. -diff -rcp2N gcc-2.7.2.2/glimits.h g77-new/glimits.h -*** gcc-2.7.2.2/glimits.h Wed Sep 29 17:30:54 1993 ---- g77-new/glimits.h Thu Jul 10 20:08:58 1997 -*************** -*** 64,68 **** - (Same as `int'). */ - #ifndef __LONG_MAX__ -! #define __LONG_MAX__ 2147483647L - #endif - #undef LONG_MIN ---- 64,72 ---- - (Same as `int'). */ - #ifndef __LONG_MAX__ -! # ifndef __alpha__ -! # define __LONG_MAX__ 2147483647L -! # else -! # define __LONG_MAX__ 9223372036854775807LL -! # endif /* __alpha__ */ - #endif - #undef LONG_MIN -diff -rcp2N gcc-2.7.2.2/integrate.c g77-new/integrate.c -*** gcc-2.7.2.2/integrate.c Fri Oct 20 18:48:13 1995 ---- g77-new/integrate.c Sun Aug 10 18:46:31 1997 -*************** static rtx copy_for_inline PROTO((rtx)); -*** 67,70 **** ---- 67,71 ---- - static void integrate_parm_decls PROTO((tree, struct inline_remap *, rtvec)); - static void integrate_decl_tree PROTO((tree, int, struct inline_remap *)); -+ static void save_constants_in_decl_trees PROTO ((tree)); - static void subst_constants PROTO((rtx *, rtx, struct inline_remap *)); - static void restore_constants PROTO((rtx *)); -*************** save_for_inline_copying (fndecl) -*** 435,438 **** ---- 436,443 ---- - } - -+ /* Also scan all decls, and replace any constant pool references with the -+ actual constant. */ -+ save_constants_in_decl_trees (DECL_INITIAL (fndecl)); -+ - /* Clear out the constant pool so that we can recreate it with the - copied constants below. */ -*************** save_for_inline_nocopy (fndecl) -*** 781,784 **** ---- 786,793 ---- - } - -+ /* Also scan all decls, and replace any constant pool references with the -+ actual constant. */ -+ save_constants_in_decl_trees (DECL_INITIAL (fndecl)); -+ - /* We have now allocated all that needs to be allocated permanently - on the rtx obstack. Set our high-water mark, so that we -*************** expand_inline_function (fndecl, parms, t -*** 1571,1575 **** - if (GET_CODE (XEXP (loc, 0)) == REG) - { -! temp = force_reg (Pmode, structure_value_addr); - map->reg_map[REGNO (XEXP (loc, 0))] = temp; - if ((CONSTANT_P (structure_value_addr) ---- 1580,1585 ---- - if (GET_CODE (XEXP (loc, 0)) == REG) - { -! temp = force_reg (Pmode, -! force_operand (structure_value_addr, NULL_RTX)); - map->reg_map[REGNO (XEXP (loc, 0))] = temp; - if ((CONSTANT_P (structure_value_addr) -*************** integrate_decl_tree (let, level, map) -*** 2029,2032 **** ---- 2039,2059 ---- - } - } -+ } -+ -+ /* Given a BLOCK node LET, search for all DECL_RTL fields, and pass them -+ through save_constants. */ -+ -+ static void -+ save_constants_in_decl_trees (let) -+ tree let; -+ { -+ tree t; -+ -+ for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t)) -+ if (DECL_RTL (t) != 0) -+ save_constants (&DECL_RTL (t)); -+ -+ for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t)) -+ save_constants_in_decl_trees (t); - } - -diff -rcp2N gcc-2.7.2.2/invoke.texi g77-new/invoke.texi -*** gcc-2.7.2.2/invoke.texi Tue Oct 3 11:40:43 1995 ---- g77-new/invoke.texi Thu Jul 10 20:09:00 1997 -*************** -*** 1,3 **** -! @c Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc. - @c This is part of the GCC manual. - @c For copying conditions, see the file gcc.texi. ---- 1,3 ---- -! @c Copyright (C) 1988, 89, 92-95, 1997 Free Software Foundation, Inc. - @c This is part of the GCC manual. - @c For copying conditions, see the file gcc.texi. -*************** in the following sections. -*** 149,152 **** ---- 149,153 ---- - -fschedule-insns2 -fstrength-reduce -fthread-jumps - -funroll-all-loops -funroll-loops -+ -fmove-all-movables -freduce-all-givs -frerun-loop-opt - -O -O0 -O1 -O2 -O3 - @end smallexample -*************** in addition to the above: -*** 331,334 **** ---- 332,337 ---- - -fshort-double -fvolatile -fvolatile-global - -fverbose-asm -fpack-struct +e0 +e1 -+ -fargument-alias -fargument-noalias -+ -fargument-noalias-global - @end smallexample - @end table -*************** Print extra warning messages for these e -*** 1253,1256 **** ---- 1256,1304 ---- - - @itemize @bullet -+ @cindex division by zero -+ @cindex zero, division by -+ @item -+ An integer division by zero is detected. -+ -+ Some cases of division by zero might occur as the result -+ of using so-called ``safe'' macros. -+ For example: -+ -+ @smallexample -+ #define BUCKETS(b) (((b) != NULL) ? (b)->buckets : 0) -+ @dots{...} -+ i = j / BUCKETS(b); -+ @end smallexample -+ -+ Although analysis of the context of the above code could -+ prove that @samp{b} is never null when it is executed, -+ the division-by-zero warning is still useful, because -+ @code{gcc} generates code to do the division by zero at -+ run time so as to generate a run-time fault, -+ and tidy programmers will want to find ways to prevent -+ this needless code from being generated. -+ -+ Note that @code{gcc} transforms expressions so as to find -+ opportunities for performing expensive operations -+ (such as division) at compile time instead of generating -+ code to perform them at run time. -+ For example, @code{gcc} transforms: -+ -+ @smallexample -+ 2 / (i == 0) -+ @end smallexample -+ -+ into: -+ -+ @smallexample -+ (i == 0) ? (2 / 1) : (2 / 0) -+ @end smallexample -+ -+ As a result, the division-by-zero warning might occur -+ in contexts where the divisor seems to be a non-constant. -+ It is useful in this case as well, because programmers might want -+ to clean up the code so the compiled code does not include -+ dead code to divide by zero. -+ - @cindex @code{longjmp} warnings - @item -*************** and usually makes programs run more slow -*** 1941,1944 **** ---- 1989,2037 ---- - implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}. - -+ @item -fmove-all-movables -+ Forces all invariant computations in loops to be moved -+ outside the loop. -+ This option is provided primarily to improve performance -+ for some Fortran code, though it might improve code written -+ in other languages. -+ -+ @emph{Note:} When compiling programs written in Fortran, -+ this option is enabled by default. -+ -+ Analysis of Fortran code optimization and the resulting -+ optimizations triggered by this option, and the -+ @samp{-freduce-all-givs} and @samp{-frerun-loop-opt} -+ options as well, were -+ contributed by Toon Moene (@code{toon@@moene.indiv.nluug.nl}). -+ -+ These three options are intended to be removed someday, once -+ they have helped determine the efficacy of various -+ approaches to improving the performance of Fortran code. -+ -+ Please let us (@code{fortran@@gnu.ai.mit.edu}) -+ know how use of these options affects -+ the performance of your production code. -+ We're very interested in code that runs @emph{slower} -+ when these options are @emph{enabled}. -+ -+ @item -freduce-all-givs -+ Forces all general-induction variables in loops to be -+ strength-reduced. -+ This option is provided primarily to improve performance -+ for some Fortran code, though it might improve code written -+ in other languages. -+ -+ @emph{Note:} When compiling programs written in Fortran, -+ this option is enabled by default. -+ -+ @item -frerun-loop-opt -+ Runs loop optimizations a second time. -+ This option is provided primarily to improve performance -+ for some Fortran code, though it might improve code written -+ in other languages. -+ -+ @emph{Note:} When compiling programs written in Fortran, -+ this option is enabled by default. -+ - @item -fno-peephole - Disable any machine-specific peephole optimizations. -*************** compilation). -*** 4229,4232 **** ---- 4322,4397 ---- - With @samp{+e1}, G++ actually generates the code implementing virtual - functions defined in the code, and makes them publicly visible. -+ -+ @cindex aliasing of parameters -+ @cindex parameters, aliased -+ @item -fargument-alias -+ @item -fargument-noalias -+ @item -fargument-noalias-global -+ Specify the possible relationships among parameters and between -+ parameters and global data. -+ -+ @samp{-fargument-alias} specifies that arguments (parameters) may -+ alias each other and may alias global storage. -+ @samp{-fargument-noalias} specifies that arguments do not alias -+ each other, but may alias global storage. -+ @samp{-fargument-noalias-global} specifies that arguments do not -+ alias each other and do not alias global storage. -+ -+ For code written in C, C++, and Objective-C, @samp{-fargument-alias} -+ is the default. -+ For code written in Fortran, @samp{-fargument-noalias-global} is -+ the default, though this is pertinent only on systems where -+ @code{g77} is installed. -+ (See the documentation for other compilers for information on the -+ defaults for their respective languages.) -+ -+ Normally, @code{gcc} assumes that a write through a pointer -+ passed as a parameter to the current function might modify a -+ value pointed to by another pointer passed as a parameter, or -+ in global storage. -+ -+ For example, consider this code: -+ -+ @example -+ void x(int *i, int *j) -+ @{ -+ extern int k; -+ -+ ++*i; -+ ++*j; -+ ++k; -+ @} -+ @end example -+ -+ When compiling the above function, @code{gcc} assumes that @samp{i} might -+ be a pointer to the same variable as @samp{j}, and that either @samp{i}, -+ @samp{j}, or both might be a pointer to @samp{k}. -+ -+ Therefore, @code{gcc} does not assume it can generate code to read -+ @samp{*i}, @samp{*j}, and @samp{k} into separate registers, increment -+ each register, then write the incremented values back out. -+ -+ Instead, @code{gcc} must generate code that reads @samp{*i}, -+ increments it, and writes it back before reading @samp{*j}, -+ in case @samp{i} and @samp{j} are aliased, and, similarly, -+ that writes @samp{*j} before reading @samp{k}. -+ The result is code that, on many systems, takes longer to execute, -+ due to the way many processors schedule instruction execution. -+ -+ Compiling the above code with the @samp{-fargument-noalias} option -+ allows @code{gcc} to assume that @samp{i} and @samp{j} do not alias -+ each other, but either might alias @samp{k}. -+ -+ Compiling the above code with the @samp{-fargument-noalias-global} -+ option allows @code{gcc} to assume that no combination of @samp{i}, -+ @samp{j}, and @samp{k} are aliases for each other. -+ -+ @emph{Note:} Use the @samp{-fargument-noalias} and -+ @samp{-fargument-noalias-global} options with care. -+ While they can result in faster executables, they can -+ also result in executables with subtle bugs, bugs that -+ show up only when compiled for specific target systems, -+ or bugs that show up only when compiled by specific versions -+ of @code{g77}. - @end table - -diff -rcp2N gcc-2.7.2.2/libgcc2.c g77-new/libgcc2.c -*** gcc-2.7.2.2/libgcc2.c Sun Nov 26 14:39:21 1995 ---- g77-new/libgcc2.c Sun Aug 10 18:46:07 1997 -*************** __gcc_bcmp (s1, s2, size) -*** 1193,1196 **** ---- 1193,1201 ---- - #endif - -+ #ifdef L__dummy -+ void -+ __dummy () {} -+ #endif -+ - #ifdef L_varargs - #ifdef __i860__ -diff -rcp2N gcc-2.7.2.2/local-alloc.c g77-new/local-alloc.c -*** gcc-2.7.2.2/local-alloc.c Mon Aug 21 13:15:44 1995 ---- g77-new/local-alloc.c Sun Aug 10 18:46:10 1997 -*************** static int this_insn_number; -*** 243,246 **** ---- 243,250 ---- - static rtx this_insn; - -+ /* Used to communicate changes made by update_equiv_regs to -+ memref_referenced_p. */ -+ static rtx *reg_equiv_replacement; -+ - static void alloc_qty PROTO((int, enum machine_mode, int, int)); - static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int)); -*************** validate_equiv_mem_from_store (dest, set -*** 545,549 **** - && reg_overlap_mentioned_p (dest, equiv_mem)) - || (GET_CODE (dest) == MEM -! && true_dependence (dest, equiv_mem))) - equiv_mem_modified = 1; - } ---- 549,553 ---- - && reg_overlap_mentioned_p (dest, equiv_mem)) - || (GET_CODE (dest) == MEM -! && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p))) - equiv_mem_modified = 1; - } -*************** memref_referenced_p (memref, x) -*** 617,621 **** - switch (code) - { -- case REG: - case CONST_INT: - case CONST: ---- 621,624 ---- -*************** memref_referenced_p (memref, x) -*** 629,634 **** - return 0; - - case MEM: -! if (true_dependence (memref, x)) - return 1; - break; ---- 632,642 ---- - return 0; - -+ case REG: -+ return (reg_equiv_replacement[REGNO (x)] == 0 -+ || memref_referenced_p (memref, -+ reg_equiv_replacement[REGNO (x)])); -+ - case MEM: -! if (true_dependence (memref, VOIDmode, x, rtx_varies_p)) - return 1; - break; -*************** optimize_reg_copy_1 (insn, dest, src) -*** 818,827 **** - if (sregno >= FIRST_PSEUDO_REGISTER) - { -! reg_live_length[sregno] -= length; -! /* reg_live_length is only an approximation after combine -! if sched is not run, so make sure that we still have -! a reasonable value. */ -! if (reg_live_length[sregno] < 2) -! reg_live_length[sregno] = 2; - reg_n_calls_crossed[sregno] -= n_calls; - } ---- 826,839 ---- - if (sregno >= FIRST_PSEUDO_REGISTER) - { -! if (reg_live_length[sregno] >= 0) -! { -! reg_live_length[sregno] -= length; -! /* reg_live_length is only an approximation after -! combine if sched is not run, so make sure that we -! still have a reasonable value. */ -! if (reg_live_length[sregno] < 2) -! reg_live_length[sregno] = 2; -! } -! - reg_n_calls_crossed[sregno] -= n_calls; - } -*************** optimize_reg_copy_1 (insn, dest, src) -*** 829,833 **** - if (dregno >= FIRST_PSEUDO_REGISTER) - { -! reg_live_length[dregno] += d_length; - reg_n_calls_crossed[dregno] += d_n_calls; - } ---- 841,847 ---- - if (dregno >= FIRST_PSEUDO_REGISTER) - { -! if (reg_live_length[dregno] >= 0) -! reg_live_length[dregno] += d_length; -! - reg_n_calls_crossed[dregno] += d_n_calls; - } -*************** update_equiv_regs () -*** 948,953 **** - { - rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *)); -- rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *)); - rtx insn; - - bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *)); ---- 962,968 ---- - { - rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *)); - rtx insn; -+ -+ reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *)); - - bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *)); -diff -rcp2N gcc-2.7.2.2/loop.c g77-new/loop.c -*** gcc-2.7.2.2/loop.c Thu Feb 20 19:24:20 1997 ---- g77-new/loop.c Sun Aug 10 18:46:43 1997 -*************** int *loop_number_exit_count; -*** 111,116 **** - unsigned HOST_WIDE_INT loop_n_iterations; - -! /* Nonzero if there is a subroutine call in the current loop. -! (unknown_address_altered is also nonzero in this case.) */ - - static int loop_has_call; ---- 111,115 ---- - unsigned HOST_WIDE_INT loop_n_iterations; - -! /* Nonzero if there is a subroutine call in the current loop. */ - - static int loop_has_call; -*************** static char *moved_once; -*** 160,164 **** - here, we just turn on unknown_address_altered. */ - -! #define NUM_STORES 20 - static rtx loop_store_mems[NUM_STORES]; - ---- 159,163 ---- - here, we just turn on unknown_address_altered. */ - -! #define NUM_STORES 30 - static rtx loop_store_mems[NUM_STORES]; - -*************** scan_loop (loop_start, end, nregs) -*** 669,673 **** - { - temp = find_reg_note (p, REG_EQUAL, NULL_RTX); -! if (temp && CONSTANT_P (XEXP (temp, 0))) - src = XEXP (temp, 0), move_insn = 1; - if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX)) ---- 668,673 ---- - { - temp = find_reg_note (p, REG_EQUAL, NULL_RTX); -! if (temp && CONSTANT_P (XEXP (temp, 0)) -! && LEGITIMATE_CONSTANT_P (XEXP (temp, 0))) - src = XEXP (temp, 0), move_insn = 1; - if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX)) -*************** move_movables (movables, threshold, insn -*** 1629,1632 **** ---- 1629,1633 ---- - - if (already_moved[regno] -+ || flag_move_all_movables - || (threshold * savings * m->lifetime) >= insn_count - || (m->forces && m->forces->done -*************** prescan_loop (start, end) -*** 2199,2203 **** - else if (GET_CODE (insn) == CALL_INSN) - { -! unknown_address_altered = 1; - loop_has_call = 1; - } ---- 2200,2205 ---- - else if (GET_CODE (insn) == CALL_INSN) - { -! if (! CONST_CALL_P (insn)) -! unknown_address_altered = 1; - loop_has_call = 1; - } -*************** invariant_p (x) -*** 2777,2781 **** - /* See if there is any dependence between a store and this load. */ - for (i = loop_store_mems_idx - 1; i >= 0; i--) -! if (true_dependence (loop_store_mems[i], x)) - return 0; - ---- 2779,2783 ---- - /* See if there is any dependence between a store and this load. */ - for (i = loop_store_mems_idx - 1; i >= 0; i--) -! if (true_dependence (loop_store_mems[i], VOIDmode, x, rtx_varies_p)) - return 0; - -*************** strength_reduce (scan_start, end, loop_t -*** 3821,3826 **** - exit. */ - -! if (v->lifetime * threshold * benefit < insn_count -! && ! bl->reversed) - { - if (loop_dump_stream) ---- 3823,3828 ---- - exit. */ - -! if ( ! flag_reduce_all_givs && v->lifetime * threshold * benefit < insn_count -! && ! bl->reversed ) - { - if (loop_dump_stream) -*************** record_giv (v, insn, src_reg, dest_reg, -*** 4375,4378 **** ---- 4377,4382 ---- - v->final_value = 0; - v->same_insn = 0; -+ v->unrolled = 0; -+ v->shared = 0; - - /* The v->always_computable field is used in update_giv_derive, to -*************** check_final_value (v, loop_start, loop_e -*** 4652,4657 **** - if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) - && LABEL_NAME (JUMP_LABEL (p)) -! && ((INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn) -! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start)) - || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use) - && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end)))) ---- 4656,4664 ---- - if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) - && LABEL_NAME (JUMP_LABEL (p)) -! && ((INSN_UID (JUMP_LABEL (p)) >= max_uid_for_loop) -! || (INSN_UID (v->insn) >= max_uid_for_loop) -! || (INSN_UID (last_giv_use) >= max_uid_for_loop) -! || (INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn) -! && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start)) - || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use) - && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end)))) -*************** emit_iv_add_mult (b, m, a, reg, insert_b -*** 5560,5563 **** ---- 5567,5572 ---- - - emit_insn_before (seq, insert_before); -+ -+ record_base_value (REGNO (reg), b); - } - -diff -rcp2N gcc-2.7.2.2/loop.h g77-new/loop.h -*** gcc-2.7.2.2/loop.h Fri Jul 14 08:23:28 1995 ---- g77-new/loop.h Thu Jul 10 20:09:03 1997 -*************** struct induction -*** 89,92 **** ---- 89,95 ---- - we won't use it to eliminate a biv, it - would probably lose. */ -+ unsigned unrolled : 1; /* 1 if new register has been allocated in -+ unrolled loop. */ -+ unsigned shared : 1; - int lifetime; /* Length of life of this giv */ - int times_used; /* # times this giv is used. */ -diff -rcp2N gcc-2.7.2.2/real.c g77-new/real.c -*** gcc-2.7.2.2/real.c Tue Aug 15 17:57:18 1995 ---- g77-new/real.c Thu Jul 10 20:09:04 1997 -*************** make_nan (nan, sign, mode) -*** 5625,5633 **** - } - -! /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE. -! This is the inverse of the function `etarsingle' invoked by - REAL_VALUE_TO_TARGET_SINGLE. */ - - REAL_VALUE_TYPE - ereal_from_float (f) - HOST_WIDE_INT f; ---- 5625,5699 ---- - } - -! /* This is the inverse of the function `etarsingle' invoked by - REAL_VALUE_TO_TARGET_SINGLE. */ - - REAL_VALUE_TYPE -+ ereal_unto_float (f) -+ long f; -+ { -+ REAL_VALUE_TYPE r; -+ unsigned EMUSHORT s[2]; -+ unsigned EMUSHORT e[NE]; -+ -+ /* Convert 32 bit integer to array of 16 bit pieces in target machine order. -+ This is the inverse operation to what the function `endian' does. */ -+ if (REAL_WORDS_BIG_ENDIAN) -+ { -+ s[0] = (unsigned EMUSHORT) (f >> 16); -+ s[1] = (unsigned EMUSHORT) f; -+ } -+ else -+ { -+ s[0] = (unsigned EMUSHORT) f; -+ s[1] = (unsigned EMUSHORT) (f >> 16); -+ } -+ /* Convert and promote the target float to E-type. */ -+ e24toe (s, e); -+ /* Output E-type to REAL_VALUE_TYPE. */ -+ PUT_REAL (e, &r); -+ return r; -+ } -+ -+ -+ /* This is the inverse of the function `etardouble' invoked by -+ REAL_VALUE_TO_TARGET_DOUBLE. */ -+ -+ REAL_VALUE_TYPE -+ ereal_unto_double (d) -+ long d[]; -+ { -+ REAL_VALUE_TYPE r; -+ unsigned EMUSHORT s[4]; -+ unsigned EMUSHORT e[NE]; -+ -+ /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */ -+ if (REAL_WORDS_BIG_ENDIAN) -+ { -+ s[0] = (unsigned EMUSHORT) (d[0] >> 16); -+ s[1] = (unsigned EMUSHORT) d[0]; -+ s[2] = (unsigned EMUSHORT) (d[1] >> 16); -+ s[3] = (unsigned EMUSHORT) d[1]; -+ } -+ else -+ { -+ /* Target float words are little-endian. */ -+ s[0] = (unsigned EMUSHORT) d[0]; -+ s[1] = (unsigned EMUSHORT) (d[0] >> 16); -+ s[2] = (unsigned EMUSHORT) d[1]; -+ s[3] = (unsigned EMUSHORT) (d[1] >> 16); -+ } -+ /* Convert target double to E-type. */ -+ e53toe (s, e); -+ /* Output E-type to REAL_VALUE_TYPE. */ -+ PUT_REAL (e, &r); -+ return r; -+ } -+ -+ -+ /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE. -+ This is somewhat like ereal_unto_float, but the input types -+ for these are different. */ -+ -+ REAL_VALUE_TYPE - ereal_from_float (f) - HOST_WIDE_INT f; -*************** ereal_from_float (f) -*** 5658,5663 **** - - /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE. -! This is the inverse of the function `etardouble' invoked by -! REAL_VALUE_TO_TARGET_DOUBLE. - - The DFmode is stored as an array of HOST_WIDE_INT in the target's ---- 5724,5729 ---- - - /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE. -! This is somewhat like ereal_unto_double, but the input types -! for these are different. - - The DFmode is stored as an array of HOST_WIDE_INT in the target's -diff -rcp2N gcc-2.7.2.2/real.h g77-new/real.h -*** gcc-2.7.2.2/real.h Thu Jun 15 07:57:56 1995 ---- g77-new/real.h Thu Jul 10 20:09:05 1997 -*************** extern void ereal_to_decimal PROTO((REAL -*** 152,155 **** ---- 152,157 ---- - extern int ereal_cmp PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE)); - extern int ereal_isneg PROTO((REAL_VALUE_TYPE)); -+ extern REAL_VALUE_TYPE ereal_unto_float PROTO((long)); -+ extern REAL_VALUE_TYPE ereal_unto_double PROTO((long *)); - extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT)); - extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *)); -*************** extern REAL_VALUE_TYPE real_value_trunca -*** 197,200 **** ---- 199,208 ---- - /* IN is a REAL_VALUE_TYPE. OUT is a long. */ - #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN))) -+ -+ /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */ -+ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d) (ereal_unto_double (d)) -+ -+ /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */ -+ #define REAL_VALUE_UNTO_TARGET_SINGLE(f) (ereal_unto_float (f)) - - /* d is an array of HOST_WIDE_INT that holds a double precision -diff -rcp2N gcc-2.7.2.2/recog.c g77-new/recog.c -*** gcc-2.7.2.2/recog.c Sat Jul 1 06:52:35 1995 ---- g77-new/recog.c Sun Aug 10 18:46:55 1997 -*************** register_operand (op, mode) -*** 872,876 **** - REGNO (SUBREG_REG (op))) - && (GET_MODE_SIZE (mode) -! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))) - return 0; - #endif ---- 872,878 ---- - REGNO (SUBREG_REG (op))) - && (GET_MODE_SIZE (mode) -! != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))) -! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_INT -! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_FLOAT) - return 0; - #endif -diff -rcp2N gcc-2.7.2.2/reload.c g77-new/reload.c -*** gcc-2.7.2.2/reload.c Sat Nov 11 08:23:54 1995 ---- g77-new/reload.c Sun Aug 10 04:58:03 1997 -*************** -*** 1,4 **** - /* Search an insn for pseudo regs that must be in hard regs and are not. -! Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc. - - This file is part of GNU CC. ---- 1,4 ---- - /* Search an insn for pseudo regs that must be in hard regs and are not. -! Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc. - - This file is part of GNU CC. -*************** static int push_secondary_reload PROTO(( -*** 292,295 **** ---- 292,296 ---- - enum machine_mode, enum reload_type, - enum insn_code *)); -+ static enum reg_class find_valid_class PROTO((enum machine_mode, int)); - static int push_reload PROTO((rtx, rtx, rtx *, rtx *, enum reg_class, - enum machine_mode, enum machine_mode, -*************** static struct decomposition decompose PR -*** 305,312 **** - static int immune_p PROTO((rtx, rtx, struct decomposition)); - static int alternative_allows_memconst PROTO((char *, int)); -! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int)); - static rtx make_memloc PROTO((rtx, int)); - static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *, -! int, enum reload_type, int)); - static rtx subst_reg_equivs PROTO((rtx)); - static rtx subst_indexed_address PROTO((rtx)); ---- 306,313 ---- - static int immune_p PROTO((rtx, rtx, struct decomposition)); - static int alternative_allows_memconst PROTO((char *, int)); -! static rtx find_reloads_toplev PROTO((rtx, int, enum reload_type, int, int, short *)); - static rtx make_memloc PROTO((rtx, int)); - static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *, -! int, enum reload_type, int, short *)); - static rtx subst_reg_equivs PROTO((rtx)); - static rtx subst_indexed_address PROTO((rtx)); -*************** push_secondary_reload (in_p, x, opnum, o -*** 590,599 **** - - if (in_p && icode == CODE_FOR_nothing -! && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode)) -! get_secondary_mem (x, reload_mode, opnum, type); - - if (! in_p && icode == CODE_FOR_nothing -! && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode)) -! get_secondary_mem (x, reload_mode, opnum, type); - #endif - } ---- 591,600 ---- - - if (in_p && icode == CODE_FOR_nothing -! && SECONDARY_MEMORY_NEEDED (class, reload_class, mode)) -! get_secondary_mem (x, mode, opnum, type); - - if (! in_p && icode == CODE_FOR_nothing -! && SECONDARY_MEMORY_NEEDED (reload_class, class, mode)) -! get_secondary_mem (x, mode, opnum, type); - #endif - } -*************** get_secondary_mem (x, mode, opnum, type) -*** 673,677 **** - - find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0), -! opnum, type, 0); - } - ---- 674,678 ---- - - find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0), -! opnum, type, 0, NULL); - } - -*************** clear_secondary_mem () -*** 689,692 **** ---- 690,725 ---- - #endif /* SECONDARY_MEMORY_NEEDED */ - -+ /* Find the largest class for which every register number plus N is valid in -+ M1 (if in range). Abort if no such class exists. */ -+ -+ static enum reg_class -+ find_valid_class (m1, n) -+ enum machine_mode m1; -+ int n; -+ { -+ int class; -+ int regno; -+ enum reg_class best_class; -+ int best_size = 0; -+ -+ for (class = 1; class < N_REG_CLASSES; class++) -+ { -+ int bad = 0; -+ for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++) -+ if (TEST_HARD_REG_BIT (reg_class_contents[class], regno) -+ && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n) -+ && ! HARD_REGNO_MODE_OK (regno + n, m1)) -+ bad = 1; -+ -+ if (! bad && reg_class_size[class] > best_size) -+ best_class = class, best_size = reg_class_size[class]; -+ } -+ -+ if (best_size == 0) -+ abort (); -+ -+ return best_class; -+ } -+ - /* Record one reload that needs to be performed. - IN is an rtx saying where the data are to be found before this instruction. -*************** push_reload (in, out, inloc, outloc, cla -*** 894,898 **** - && GET_CODE (SUBREG_REG (in)) == REG - && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER -! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode) - || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD - && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) ---- 927,932 ---- - && GET_CODE (SUBREG_REG (in)) == REG - && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER -! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)) + SUBREG_WORD (in), -! inmode) - || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD - && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) -*************** push_reload (in, out, inloc, outloc, cla -*** 909,913 **** - output before the outer reload. */ - push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR, -! GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type); - dont_remove_subreg = 1; - } ---- 943,948 ---- - output before the outer reload. */ - push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR, -! find_valid_class (inmode, SUBREG_WORD (in)), -! VOIDmode, VOIDmode, 0, 0, opnum, type); - dont_remove_subreg = 1; - } -*************** push_reload (in, out, inloc, outloc, cla -*** 982,986 **** - && GET_CODE (SUBREG_REG (out)) == REG - && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER -! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode) - || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD - && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))) ---- 1017,1022 ---- - && GET_CODE (SUBREG_REG (out)) == REG - && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER -! && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)) + SUBREG_WORD (out), -! outmode) - || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD - && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))) -*************** push_reload (in, out, inloc, outloc, cla -*** 998,1002 **** - dont_remove_subreg = 1; - push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out), -! &SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0, - opnum, RELOAD_OTHER); - } ---- 1034,1040 ---- - dont_remove_subreg = 1; - push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out), -! &SUBREG_REG (out), -! find_valid_class (outmode, SUBREG_WORD (out)), -! VOIDmode, VOIDmode, 0, 0, - opnum, RELOAD_OTHER); - } -*************** find_reloads (insn, replace, ind_levels, -*** 2241,2244 **** ---- 2279,2283 ---- - int goal_earlyclobber, this_earlyclobber; - enum machine_mode operand_mode[MAX_RECOG_OPERANDS]; -+ short force_update[MAX_RECOG_OPERANDS]; - - this_insn = insn; -*************** find_reloads (insn, replace, ind_levels, -*** 2272,2275 **** ---- 2311,2316 ---- - #endif - -+ bzero ((char *) force_update, sizeof force_update); -+ - /* Find what kind of insn this is. NOPERANDS gets number of operands. - Make OPERANDS point to a vector of operand values. -*************** find_reloads (insn, replace, ind_levels, -*** 2469,2473 **** - find_reloads_address (VOIDmode, NULL_PTR, - recog_operand[i], recog_operand_loc[i], -! i, operand_type[i], ind_levels); - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; - } ---- 2510,2515 ---- - find_reloads_address (VOIDmode, NULL_PTR, - recog_operand[i], recog_operand_loc[i], -! i, operand_type[i], ind_levels, -! &force_update[i]); - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; - } -*************** find_reloads (insn, replace, ind_levels, -*** 2478,2482 **** - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, address_type[i], ind_levels)) - address_reloaded[i] = 1; - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; ---- 2520,2525 ---- - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, address_type[i], ind_levels, -! &force_update[i])) - address_reloaded[i] = 1; - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; -*************** find_reloads (insn, replace, ind_levels, -*** 2487,2491 **** - ind_levels, - set != 0 -! && &SET_DEST (set) == recog_operand_loc[i]); - else if (code == PLUS) - /* We can get a PLUS as an "operand" as a result of ---- 2530,2535 ---- - ind_levels, - set != 0 -! && &SET_DEST (set) == recog_operand_loc[i], -! &force_update[i]); - else if (code == PLUS) - /* We can get a PLUS as an "operand" as a result of -*************** find_reloads (insn, replace, ind_levels, -*** 2493,2497 **** - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i] - = find_reloads_toplev (recog_operand[i], i, address_type[i], -! ind_levels, 0); - else if (code == REG) - { ---- 2537,2541 ---- - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i] - = find_reloads_toplev (recog_operand[i], i, address_type[i], -! ind_levels, 0, &force_update[i]); - else if (code == REG) - { -*************** find_reloads (insn, replace, ind_levels, -*** 2505,2510 **** - if (reg_equiv_constant[regno] != 0 - && (set == 0 || &SET_DEST (set) != recog_operand_loc[i])) -! substed_operand[i] = recog_operand[i] -! = reg_equiv_constant[regno]; - #if 0 /* This might screw code in reload1.c to delete prior output-reload - that feeds this insn. */ ---- 2549,2557 ---- - if (reg_equiv_constant[regno] != 0 - && (set == 0 || &SET_DEST (set) != recog_operand_loc[i])) -! { -! substed_operand[i] = recog_operand[i] -! = reg_equiv_constant[regno]; -! force_update[i] = 1; -! } - #if 0 /* This might screw code in reload1.c to delete prior output-reload - that feeds this insn. */ -*************** find_reloads (insn, replace, ind_levels, -*** 2545,2549 **** - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, address_type[i], ind_levels); - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; - } ---- 2592,2597 ---- - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, address_type[i], ind_levels, -! &force_update[i]); - substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]; - } -*************** find_reloads (insn, replace, ind_levels, -*** 3415,3419 **** - = find_reloads_toplev (force_const_mem (operand_mode[i], - recog_operand[i]), -! i, address_type[i], ind_levels, 0); - if (alternative_allows_memconst (constraints1[i], - goal_alternative_number)) ---- 3463,3467 ---- - = find_reloads_toplev (force_const_mem (operand_mode[i], - recog_operand[i]), -! i, address_type[i], ind_levels, 0, NULL); - if (alternative_allows_memconst (constraints1[i], - goal_alternative_number)) -*************** find_reloads (insn, replace, ind_levels, -*** 3595,3609 **** - Don't do this if we aren't making replacements because we might be - propagating things allocated by frame pointer elimination into places -! it doesn't expect. */ - -! if (insn_code_number >= 0 && replace) -! for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--) -! { -! int opno = recog_dup_num[i]; -! *recog_dup_loc[i] = *recog_operand_loc[opno]; -! if (operand_reloadnum[opno] >= 0) -! push_replacement (recog_dup_loc[i], operand_reloadnum[opno], -! insn_operand_mode[insn_code_number][opno]); -! } - - #if 0 ---- 3643,3664 ---- - Don't do this if we aren't making replacements because we might be - propagating things allocated by frame pointer elimination into places -! it doesn't expect. However, always do it for replaces of pseudos -! by constants. */ - -! for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--) -! { -! int opno = recog_dup_num[i]; -! -! if (! (insn_code_number >= 0 && replace)) -! { -! if (! force_update[opno]) -! continue; -! } -! -! *recog_dup_loc[i] = *recog_operand_loc[opno]; -! if (operand_reloadnum[opno] >= 0) -! push_replacement (recog_dup_loc[i], operand_reloadnum[opno], -! insn_operand_mode[insn_code_number][opno]); -! } - - #if 0 -*************** find_reloads (insn, replace, ind_levels, -*** 3829,3832 **** ---- 3884,3888 ---- - register RTX_CODE code = GET_CODE (recog_operand[i]); - int is_set_dest = GET_CODE (body) == SET && (i == 0); -+ short ign; - - if (insn_code_number >= 0) -*************** find_reloads (insn, replace, ind_levels, -*** 3834,3838 **** - find_reloads_address (VOIDmode, NULL_PTR, - recog_operand[i], recog_operand_loc[i], -! i, RELOAD_FOR_INPUT, ind_levels); - - /* In these cases, we can't tell if the operand is an input ---- 3890,3894 ---- - find_reloads_address (VOIDmode, NULL_PTR, - recog_operand[i], recog_operand_loc[i], -! i, RELOAD_FOR_INPUT, ind_levels, &ign); - - /* In these cases, we can't tell if the operand is an input -*************** find_reloads (insn, replace, ind_levels, -*** 3845,3853 **** - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, RELOAD_OTHER, ind_levels); - if (code == SUBREG) - recog_operand[i] = *recog_operand_loc[i] - = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER, -! ind_levels, is_set_dest); - if (code == REG) - { ---- 3901,3909 ---- - XEXP (recog_operand[i], 0), - &XEXP (recog_operand[i], 0), -! i, RELOAD_OTHER, ind_levels, &ign); - if (code == SUBREG) - recog_operand[i] = *recog_operand_loc[i] - = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER, -! ind_levels, is_set_dest, &ign); - if (code == REG) - { -*************** alternative_allows_memconst (constraint, -*** 3908,3915 **** - - IS_SET_DEST is true if X is the destination of a SET, which is not -! appropriate to be replaced by a constant. */ - - static rtx -! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest) - rtx x; - int opnum; ---- 3964,3974 ---- - - IS_SET_DEST is true if X is the destination of a SET, which is not -! appropriate to be replaced by a constant. -! -! FORCE_UPDATE, if non-NULL, is the address of a SHORT that is set to -! 1 if X is replaced with something based on reg_equiv_constant. */ - - static rtx -! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, force_update) - rtx x; - int opnum; -*************** find_reloads_toplev (x, opnum, type, ind -*** 3917,3920 **** ---- 3976,3980 ---- - int ind_levels; - int is_set_dest; -+ short *force_update; - { - register RTX_CODE code = GET_CODE (x); -*************** find_reloads_toplev (x, opnum, type, ind -*** 3928,3932 **** - register int regno = REGNO (x); - if (reg_equiv_constant[regno] != 0 && !is_set_dest) -! x = reg_equiv_constant[regno]; - #if 0 - /* This creates (subreg (mem...)) which would cause an unnecessary ---- 3988,3998 ---- - register int regno = REGNO (x); - if (reg_equiv_constant[regno] != 0 && !is_set_dest) -! { -! x = reg_equiv_constant[regno]; -! if (force_update) -! *force_update = 1; -! else -! abort (); /* Learn why this happens. */ -! } - #if 0 - /* This creates (subreg (mem...)) which would cause an unnecessary -*************** find_reloads_toplev (x, opnum, type, ind -*** 3951,3955 **** - find_reloads_address (GET_MODE (x), NULL_PTR, - XEXP (x, 0), -! &XEXP (x, 0), opnum, type, ind_levels); - } - return x; ---- 4017,4022 ---- - find_reloads_address (GET_MODE (x), NULL_PTR, - XEXP (x, 0), -! &XEXP (x, 0), opnum, type, ind_levels, -! force_update); - } - return x; -*************** find_reloads_toplev (x, opnum, type, ind -*** 3959,3963 **** - rtx tem = x; - find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels); - return tem; - } ---- 4026,4030 ---- - rtx tem = x; - find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels, force_update); - return tem; - } -*************** find_reloads_toplev (x, opnum, type, ind -*** 3982,3986 **** - && (tem = gen_lowpart_common (GET_MODE (x), - reg_equiv_constant[regno])) != 0) -! return tem; - - if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD ---- 4049,4059 ---- - && (tem = gen_lowpart_common (GET_MODE (x), - reg_equiv_constant[regno])) != 0) -! { -! if (force_update) -! *force_update = 1; -! else -! abort (); /* Learn why this happens. */ -! return tem; -! } - - if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD -*************** find_reloads_toplev (x, opnum, type, ind -*** 3990,3994 **** - SUBREG_WORD (x), 0, - GET_MODE (SUBREG_REG (x)))) != 0) -! return tem; - - if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 ---- 4063,4073 ---- - SUBREG_WORD (x), 0, - GET_MODE (SUBREG_REG (x)))) != 0) -! { -! if (force_update) -! *force_update = 1; -! else -! abort (); /* Learn why this happens. */ -! return tem; -! } - - if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 -*************** find_reloads_toplev (x, opnum, type, ind -*** 4040,4044 **** - find_reloads_address (GET_MODE (x), NULL_PTR, - XEXP (x, 0), -! &XEXP (x, 0), opnum, type, ind_levels); - } - ---- 4119,4124 ---- - find_reloads_address (GET_MODE (x), NULL_PTR, - XEXP (x, 0), -! &XEXP (x, 0), opnum, type, ind_levels, -! force_update); - } - -*************** find_reloads_toplev (x, opnum, type, ind -*** 4049,4053 **** - if (fmt[i] == 'e') - XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type, -! ind_levels, is_set_dest); - } - return x; ---- 4129,4133 ---- - if (fmt[i] == 'e') - XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type, -! ind_levels, is_set_dest, NULL); - } - return x; -*************** make_memloc (ad, regno) -*** 4110,4114 **** - - static int -! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels) - enum machine_mode mode; - rtx *memrefloc; ---- 4190,4195 ---- - - static int -! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels, -! force_update) - enum machine_mode mode; - rtx *memrefloc; -*************** find_reloads_address (mode, memrefloc, a -*** 4118,4121 **** ---- 4199,4203 ---- - enum reload_type type; - int ind_levels; -+ short *force_update; - { - register int regno; -*************** find_reloads_address (mode, memrefloc, a -*** 4134,4137 **** ---- 4216,4223 ---- - { - *loc = ad = reg_equiv_constant[regno]; -+ if (force_update) -+ *force_update = 1; -+ else -+ abort (); /* Learn why this happens. */ - return 1; - } -*************** find_reloads_address (mode, memrefloc, a -*** 4141,4145 **** - tem = make_memloc (ad, regno); - find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0), -! &XEXP (tem, 0), opnum, type, ind_levels); - push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS, - GET_MODE (ad), VOIDmode, 0, 0, ---- 4227,4231 ---- - tem = make_memloc (ad, regno); - find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0), -! &XEXP (tem, 0), opnum, type, ind_levels, NULL); - push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS, - GET_MODE (ad), VOIDmode, 0, 0, -*************** find_reloads_address (mode, memrefloc, a -*** 4214,4218 **** - tem = ad; - find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0), -! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1); - - /* If tem was changed, then we must create a new memory reference to ---- 4300,4305 ---- - tem = ad; - find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0), -! opnum, type, ind_levels == 0 ? 0 : ind_levels - 1, -! NULL); - - /* If tem was changed, then we must create a new memory reference to -*************** find_reloads_address_1 (x, context, loc, -*** 4722,4726 **** - /* First reload the memory location's address. */ - find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0), -! &XEXP (tem, 0), opnum, type, ind_levels); - /* Put this inside a new increment-expression. */ - x = gen_rtx (GET_CODE (x), GET_MODE (x), tem); ---- 4809,4814 ---- - /* First reload the memory location's address. */ - find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0), -! &XEXP (tem, 0), opnum, type, ind_levels, -! NULL); - /* Put this inside a new increment-expression. */ - x = gen_rtx (GET_CODE (x), GET_MODE (x), tem); -*************** find_reloads_address_1 (x, context, loc, -*** 4788,4792 **** - find_reloads_address (GET_MODE (x), &XEXP (x, 0), - XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0), -! opnum, type, ind_levels); - - reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR, ---- 4876,4880 ---- - find_reloads_address (GET_MODE (x), &XEXP (x, 0), - XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0), -! opnum, type, ind_levels, NULL); - - reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR, -*************** find_reloads_address_1 (x, context, loc, -*** 4818,4822 **** - - find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels); - push_reload (*loc, NULL_RTX, loc, NULL_PTR, - context ? INDEX_REG_CLASS : BASE_REG_CLASS, ---- 4906,4910 ---- - - find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels, NULL); - push_reload (*loc, NULL_RTX, loc, NULL_PTR, - context ? INDEX_REG_CLASS : BASE_REG_CLASS, -*************** find_reloads_address_1 (x, context, loc, -*** 4852,4856 **** - x = make_memloc (x, regno); - find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels); - } - ---- 4940,4944 ---- - x = make_memloc (x, regno); - find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0), -! opnum, type, ind_levels, NULL); - } - -*************** find_reloads_address_part (x, loc, class -*** 4965,4969 **** - rtx tem = x = force_const_mem (mode, x); - find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0), -! opnum, type, ind_levels); - } - ---- 5053,5057 ---- - rtx tem = x = force_const_mem (mode, x); - find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0), -! opnum, type, ind_levels, NULL); - } - -*************** find_reloads_address_part (x, loc, class -*** 4977,4981 **** - x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem); - find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0), -! opnum, type, ind_levels); - } - ---- 5065,5069 ---- - x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem); - find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0), -! opnum, type, ind_levels, NULL); - } - -*************** find_equiv_reg (goal, insn, class, other -*** 5518,5522 **** - and is also a register that appears in the address of GOAL. */ - -! if (goal_mem && value == SET_DEST (PATTERN (where)) - && refers_to_regno_for_reload_p (valueno, - (valueno ---- 5606,5610 ---- - and is also a register that appears in the address of GOAL. */ - -! if (goal_mem && value == SET_DEST (single_set (where)) - && refers_to_regno_for_reload_p (valueno, - (valueno -*************** debug_reload() -*** 5900,5904 **** - - if (reload_nocombine[r]) -! fprintf (stderr, ", can combine", reload_nocombine[r]); - - if (reload_secondary_p[r]) ---- 5988,5992 ---- - - if (reload_nocombine[r]) -! fprintf (stderr, ", can't combine %d", reload_nocombine[r]); - - if (reload_secondary_p[r]) -diff -rcp2N gcc-2.7.2.2/reload1.c g77-new/reload1.c -*** gcc-2.7.2.2/reload1.c Sun Nov 5 11:22:22 1995 ---- g77-new/reload1.c Sun Aug 10 18:47:00 1997 -*************** reload (first, global, dumpfile) -*** 542,546 **** - Also find all paradoxical subregs and find largest such for each pseudo. - On machines with small register classes, record hard registers that -! are used for user variables. These can never be used for spills. */ - - for (insn = first; insn; insn = NEXT_INSN (insn)) ---- 542,548 ---- - Also find all paradoxical subregs and find largest such for each pseudo. - On machines with small register classes, record hard registers that -! are used for user variables. These can never be used for spills. -! Also look for a "constant" NOTE_INSN_SETJMP. This means that all -! caller-saved registers must be marked live. */ - - for (insn = first; insn; insn = NEXT_INSN (insn)) -*************** reload (first, global, dumpfile) -*** 548,551 **** ---- 550,559 ---- - rtx set = single_set (insn); - -+ if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn) -+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) -+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -+ if (! call_used_regs[i]) -+ regs_ever_live[i] = 1; -+ - if (set != 0 && GET_CODE (SET_DEST (set)) == REG) - { -*************** reload (first, global, dumpfile) -*** 564,568 **** - if (GET_CODE (x) == MEM) - reg_equiv_memory_loc[i] = x; -! else if (CONSTANT_P (x)) - { - if (LEGITIMATE_CONSTANT_P (x)) ---- 572,578 ---- - if (GET_CODE (x) == MEM) - reg_equiv_memory_loc[i] = x; -! else if (CONSTANT_P (x) -! && ! (GET_CODE (x) == CONST -! && GET_CODE (XEXP (x, 0)) == MINUS)) - { - if (LEGITIMATE_CONSTANT_P (x)) -*************** eliminate_regs (x, mem_mode, insn) -*** 2886,2890 **** - - /* Fall through to generic unary operation case. */ -- case USE: - case STRICT_LOW_PART: - case NEG: case NOT: ---- 2896,2899 ---- -*************** eliminate_regs (x, mem_mode, insn) -*** 2975,2978 **** ---- 2984,3000 ---- - return x; - -+ case USE: -+ /* If using a register that is the source of an eliminate we still -+ think can be performed, note it cannot be performed since we don't -+ know how this register is used. */ -+ for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) -+ if (ep->from_rtx == XEXP (x, 0)) -+ ep->can_eliminate = 0; -+ -+ new = eliminate_regs (XEXP (x, 0), mem_mode, insn); -+ if (new != XEXP (x, 0)) -+ return gen_rtx (code, GET_MODE (x), new); -+ return x; -+ - case CLOBBER: - /* If clobbering a register that is the replacement register for an -*************** gen_reload (out, in, opnum, type) -*** 6736,6741 **** ---- 6758,6765 ---- - if (GET_CODE (in) == PLUS - && (GET_CODE (XEXP (in, 0)) == REG -+ || GET_CODE (XEXP (in, 0)) == SUBREG - || GET_CODE (XEXP (in, 0)) == MEM) - && (GET_CODE (XEXP (in, 1)) == REG -+ || GET_CODE (XEXP (in, 1)) == SUBREG - || CONSTANT_P (XEXP (in, 1)) - || GET_CODE (XEXP (in, 1)) == MEM)) -*************** gen_reload (out, in, opnum, type) -*** 6798,6807 **** - we emit below. */ - -! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM - || (GET_CODE (op1) == REG - && REGNO (op1) >= FIRST_PSEUDO_REGISTER)) - tem = op0, op0 = op1, op1 = tem; - -! emit_insn (gen_move_insn (out, op0)); - - /* If OP0 and OP1 are the same, we can use OUT for OP1. ---- 6822,6831 ---- - we emit below. */ - -! if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG - || (GET_CODE (op1) == REG - && REGNO (op1) >= FIRST_PSEUDO_REGISTER)) - tem = op0, op0 = op1, op1 = tem; - -! gen_reload (out, op0, opnum, type); - - /* If OP0 and OP1 are the same, we can use OUT for OP1. -*************** gen_reload (out, in, opnum, type) -*** 6831,6835 **** - delete_insns_since (last); - -! emit_insn (gen_move_insn (out, op1)); - emit_insn (gen_add2_insn (out, op0)); - } ---- 6855,6859 ---- - delete_insns_since (last); - -! gen_reload (out, op1, opnum, type); - emit_insn (gen_add2_insn (out, op0)); - } -*************** gen_reload (out, in, opnum, type) -*** 6852,6857 **** - in = gen_rtx (REG, GET_MODE (loc), REGNO (in)); - -! emit_insn (gen_move_insn (loc, in)); -! emit_insn (gen_move_insn (out, loc)); - } - #endif ---- 6876,6881 ---- - in = gen_rtx (REG, GET_MODE (loc), REGNO (in)); - -! gen_reload (loc, in, opnum, type); -! gen_reload (out, loc, opnum, type); - } - #endif -diff -rcp2N gcc-2.7.2.2/rtl.c g77-new/rtl.c -*** gcc-2.7.2.2/rtl.c Thu Jun 15 08:02:59 1995 ---- g77-new/rtl.c Thu Jul 10 20:09:06 1997 -*************** char *reg_note_name[] = { "", "REG_DEAD" -*** 179,183 **** - "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", - "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL", -! "REG_DEP_ANTI", "REG_DEP_OUTPUT" }; - - /* Allocate an rtx vector of N elements. ---- 179,183 ---- - "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", - "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL", -! "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_NOALIAS" }; - - /* Allocate an rtx vector of N elements. -diff -rcp2N gcc-2.7.2.2/rtl.h g77-new/rtl.h -*** gcc-2.7.2.2/rtl.h Thu Jun 15 08:03:16 1995 ---- g77-new/rtl.h Thu Jul 10 20:09:07 1997 -*************** enum reg_note { REG_DEAD = 1, REG_INC = -*** 349,353 **** - REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10, - REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13, -! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 }; - - /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */ ---- 349,353 ---- - REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10, - REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13, -! REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_NOALIAS = 16 }; - - /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */ -*************** extern char *reg_note_name[]; -*** 432,436 **** - #define NOTE_INSN_FUNCTION_BEG -13 - -- - #if 0 /* These are not used, and I don't know what they were for. --rms. */ - #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr) ---- 432,435 ---- -*************** extern char *note_insn_name[]; -*** 576,579 **** ---- 575,579 ---- - /* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */ - #define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx) -+ #define TRAP_CODE(RTX) ((RTX)->fld[1].rtint) - - /* 1 in a SYMBOL_REF if it addresses this function's constants pool. */ -*************** extern rtx eliminate_constant_term PROTO -*** 817,820 **** ---- 817,830 ---- - extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int)); - extern enum machine_mode choose_hard_reg_mode PROTO((int, int)); -+ extern int rtx_varies_p PROTO((rtx)); -+ extern int may_trap_p PROTO((rtx)); -+ extern int side_effects_p PROTO((rtx)); -+ extern int volatile_refs_p PROTO((rtx)); -+ extern int volatile_insn_p PROTO((rtx)); -+ extern void remove_note PROTO((rtx, rtx)); -+ extern void note_stores PROTO((rtx, void (*)())); -+ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *)); -+ extern int reg_overlap_mentioned_p PROTO((rtx, rtx)); -+ - - /* Maximum number of parallel sets and clobbers in any insn in this fn. -*************** extern rtx *regno_reg_rtx; -*** 967,968 **** ---- 977,987 ---- - - extern int rtx_to_tree_code PROTO((enum rtx_code)); -+ -+ extern int true_dependence PROTO((rtx, enum machine_mode, rtx, int (*)())); -+ extern int read_dependence PROTO((rtx, rtx)); -+ extern int anti_dependence PROTO((rtx, rtx)); -+ extern int output_dependence PROTO((rtx, rtx)); -+ extern void init_alias_analysis PROTO((void)); -+ extern void end_alias_analysis PROTO((void)); -+ extern void mark_user_reg PROTO((rtx)); -+ extern void mark_reg_pointer PROTO((rtx)); -diff -rcp2N gcc-2.7.2.2/sched.c g77-new/sched.c -*** gcc-2.7.2.2/sched.c Thu Jun 15 08:06:39 1995 ---- g77-new/sched.c Sun Aug 10 18:46:13 1997 -*************** Boston, MA 02111-1307, USA. */ -*** 126,129 **** ---- 126,132 ---- - #include "insn-attr.h" - -+ extern char *reg_known_equiv_p; -+ extern rtx *reg_known_value; -+ - #ifdef INSN_SCHEDULING - /* Arrays set up by scheduling for the same respective purposes as -*************** static int *sched_reg_live_length; -*** 143,146 **** ---- 146,150 ---- - by splitting insns. */ - static rtx *reg_last_uses; -+ static int reg_last_uses_size; - static rtx *reg_last_sets; - static regset reg_pending_sets; -*************** struct sometimes -*** 294,302 **** - - /* Forward declarations. */ -- static rtx canon_rtx PROTO((rtx)); -- static int rtx_equal_for_memref_p PROTO((rtx, rtx)); -- static rtx find_symbolic_term PROTO((rtx)); -- static int memrefs_conflict_p PROTO((int, rtx, int, rtx, -- HOST_WIDE_INT)); - static void add_dependence PROTO((rtx, rtx, enum reg_note)); - static void remove_dependence PROTO((rtx, rtx)); ---- 298,301 ---- -*************** static int priority PROTO((rtx)); -*** 314,318 **** - static void free_pending_lists PROTO((void)); - static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx)); -! static void flush_pending_lists PROTO((rtx)); - static void sched_analyze_1 PROTO((rtx, rtx)); - static void sched_analyze_2 PROTO((rtx, rtx)); ---- 313,317 ---- - static void free_pending_lists PROTO((void)); - static void add_insn_mem_dependence PROTO((rtx *, rtx *, rtx, rtx)); -! static void flush_pending_lists PROTO((rtx, int)); - static void sched_analyze_1 PROTO((rtx, rtx)); - static void sched_analyze_2 PROTO((rtx, rtx)); -*************** void schedule_insns PROTO((FILE *)); -*** 346,885 **** - #endif /* INSN_SCHEDULING */ - -- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X))) -- -- /* Vector indexed by N giving the initial (unchanging) value known -- for pseudo-register N. */ -- static rtx *reg_known_value; -- -- /* Vector recording for each reg_known_value whether it is due to a -- REG_EQUIV note. Future passes (viz., reload) may replace the -- pseudo with the equivalent expression and so we account for the -- dependences that would be introduced if that happens. */ -- /* ??? This is a problem only on the Convex. The REG_EQUIV notes created in -- assign_parms mention the arg pointer, and there are explicit insns in the -- RTL that modify the arg pointer. Thus we must ensure that such insns don't -- get scheduled across each other because that would invalidate the REG_EQUIV -- notes. One could argue that the REG_EQUIV notes are wrong, but solving -- the problem in the scheduler will likely give better code, so we do it -- here. */ -- static char *reg_known_equiv_p; -- -- /* Indicates number of valid entries in reg_known_value. */ -- static int reg_known_value_size; -- -- static rtx -- canon_rtx (x) -- rtx x; -- { -- if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER -- && REGNO (x) <= reg_known_value_size) -- return reg_known_value[REGNO (x)]; -- else if (GET_CODE (x) == PLUS) -- { -- rtx x0 = canon_rtx (XEXP (x, 0)); -- rtx x1 = canon_rtx (XEXP (x, 1)); -- -- if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1)) -- { -- /* We can tolerate LO_SUMs being offset here; these -- rtl are used for nothing other than comparisons. */ -- if (GET_CODE (x0) == CONST_INT) -- return plus_constant_for_output (x1, INTVAL (x0)); -- else if (GET_CODE (x1) == CONST_INT) -- return plus_constant_for_output (x0, INTVAL (x1)); -- return gen_rtx (PLUS, GET_MODE (x), x0, x1); -- } -- } -- return x; -- } -- -- /* Set up all info needed to perform alias analysis on memory references. */ -- -- void -- init_alias_analysis () -- { -- int maxreg = max_reg_num (); -- rtx insn; -- rtx note; -- rtx set; -- -- reg_known_value_size = maxreg; -- -- reg_known_value -- = (rtx *) oballoc ((maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx)) -- - FIRST_PSEUDO_REGISTER; -- bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER), -- (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx)); -- -- reg_known_equiv_p -- = (char *) oballoc ((maxreg -FIRST_PSEUDO_REGISTER) * sizeof (char)) -- - FIRST_PSEUDO_REGISTER; -- bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER, -- (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char)); -- -- /* Fill in the entries with known constant values. */ -- for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) -- if ((set = single_set (insn)) != 0 -- && GET_CODE (SET_DEST (set)) == REG -- && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER -- && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0 -- && reg_n_sets[REGNO (SET_DEST (set))] == 1) -- || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0) -- && GET_CODE (XEXP (note, 0)) != EXPR_LIST) -- { -- int regno = REGNO (SET_DEST (set)); -- reg_known_value[regno] = XEXP (note, 0); -- reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV; -- } -- -- /* Fill in the remaining entries. */ -- while (--maxreg >= FIRST_PSEUDO_REGISTER) -- if (reg_known_value[maxreg] == 0) -- reg_known_value[maxreg] = regno_reg_rtx[maxreg]; -- } -- -- /* Return 1 if X and Y are identical-looking rtx's. -- -- We use the data in reg_known_value above to see if two registers with -- different numbers are, in fact, equivalent. */ -- -- static int -- rtx_equal_for_memref_p (x, y) -- rtx x, y; -- { -- register int i; -- register int j; -- register enum rtx_code code; -- register char *fmt; -- -- if (x == 0 && y == 0) -- return 1; -- if (x == 0 || y == 0) -- return 0; -- x = canon_rtx (x); -- y = canon_rtx (y); -- -- if (x == y) -- return 1; -- -- code = GET_CODE (x); -- /* Rtx's of different codes cannot be equal. */ -- if (code != GET_CODE (y)) -- return 0; -- -- /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. -- (REG:SI x) and (REG:HI x) are NOT equivalent. */ -- -- if (GET_MODE (x) != GET_MODE (y)) -- return 0; -- -- /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */ -- -- if (code == REG) -- return REGNO (x) == REGNO (y); -- if (code == LABEL_REF) -- return XEXP (x, 0) == XEXP (y, 0); -- if (code == SYMBOL_REF) -- return XSTR (x, 0) == XSTR (y, 0); -- -- /* For commutative operations, the RTX match if the operand match in any -- order. Also handle the simple binary and unary cases without a loop. */ -- if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c') -- return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)) -- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1))) -- || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1)) -- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0)))); -- else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2') -- return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)) -- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1))); -- else if (GET_RTX_CLASS (code) == '1') -- return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)); -- -- /* Compare the elements. If any pair of corresponding elements -- fail to match, return 0 for the whole things. */ -- -- fmt = GET_RTX_FORMAT (code); -- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) -- { -- switch (fmt[i]) -- { -- case 'w': -- if (XWINT (x, i) != XWINT (y, i)) -- return 0; -- break; -- -- case 'n': -- case 'i': -- if (XINT (x, i) != XINT (y, i)) -- return 0; -- break; -- -- case 'V': -- case 'E': -- /* Two vectors must have the same length. */ -- if (XVECLEN (x, i) != XVECLEN (y, i)) -- return 0; -- -- /* And the corresponding elements must match. */ -- for (j = 0; j < XVECLEN (x, i); j++) -- if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0) -- return 0; -- break; -- -- case 'e': -- if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0) -- return 0; -- break; -- -- case 'S': -- case 's': -- if (strcmp (XSTR (x, i), XSTR (y, i))) -- return 0; -- break; -- -- case 'u': -- /* These are just backpointers, so they don't matter. */ -- break; -- -- case '0': -- break; -- -- /* It is believed that rtx's at this level will never -- contain anything but integers and other rtx's, -- except for within LABEL_REFs and SYMBOL_REFs. */ -- default: -- abort (); -- } -- } -- return 1; -- } -- -- /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within -- X and return it, or return 0 if none found. */ -- -- static rtx -- find_symbolic_term (x) -- rtx x; -- { -- register int i; -- register enum rtx_code code; -- register char *fmt; -- -- code = GET_CODE (x); -- if (code == SYMBOL_REF || code == LABEL_REF) -- return x; -- if (GET_RTX_CLASS (code) == 'o') -- return 0; -- -- fmt = GET_RTX_FORMAT (code); -- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) -- { -- rtx t; -- -- if (fmt[i] == 'e') -- { -- t = find_symbolic_term (XEXP (x, i)); -- if (t != 0) -- return t; -- } -- else if (fmt[i] == 'E') -- break; -- } -- return 0; -- } -- -- /* Return nonzero if X and Y (memory addresses) could reference the -- same location in memory. C is an offset accumulator. When -- C is nonzero, we are testing aliases between X and Y + C. -- XSIZE is the size in bytes of the X reference, -- similarly YSIZE is the size in bytes for Y. -- -- If XSIZE or YSIZE is zero, we do not know the amount of memory being -- referenced (the reference was BLKmode), so make the most pessimistic -- assumptions. -- -- We recognize the following cases of non-conflicting memory: -- -- (1) addresses involving the frame pointer cannot conflict -- with addresses involving static variables. -- (2) static variables with different addresses cannot conflict. -- -- Nice to notice that varying addresses cannot conflict with fp if no -- local variables had their addresses taken, but that's too hard now. */ -- -- /* ??? In Fortran, references to a array parameter can never conflict with -- another array parameter. */ -- -- static int -- memrefs_conflict_p (xsize, x, ysize, y, c) -- rtx x, y; -- int xsize, ysize; -- HOST_WIDE_INT c; -- { -- if (GET_CODE (x) == HIGH) -- x = XEXP (x, 0); -- else if (GET_CODE (x) == LO_SUM) -- x = XEXP (x, 1); -- else -- x = canon_rtx (x); -- if (GET_CODE (y) == HIGH) -- y = XEXP (y, 0); -- else if (GET_CODE (y) == LO_SUM) -- y = XEXP (y, 1); -- else -- y = canon_rtx (y); -- -- if (rtx_equal_for_memref_p (x, y)) -- return (xsize == 0 || ysize == 0 || -- (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -- -- if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx -- || y == stack_pointer_rtx) -- { -- rtx t = y; -- int tsize = ysize; -- y = x; ysize = xsize; -- x = t; xsize = tsize; -- } -- -- if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx -- || x == stack_pointer_rtx) -- { -- rtx y1; -- -- if (CONSTANT_P (y)) -- return 0; -- -- if (GET_CODE (y) == PLUS -- && canon_rtx (XEXP (y, 0)) == x -- && (y1 = canon_rtx (XEXP (y, 1))) -- && GET_CODE (y1) == CONST_INT) -- { -- c += INTVAL (y1); -- return (xsize == 0 || ysize == 0 -- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -- } -- -- if (GET_CODE (y) == PLUS -- && (y1 = canon_rtx (XEXP (y, 0))) -- && CONSTANT_P (y1)) -- return 0; -- -- return 1; -- } -- -- if (GET_CODE (x) == PLUS) -- { -- /* The fact that X is canonicalized means that this -- PLUS rtx is canonicalized. */ -- rtx x0 = XEXP (x, 0); -- rtx x1 = XEXP (x, 1); -- -- if (GET_CODE (y) == PLUS) -- { -- /* The fact that Y is canonicalized means that this -- PLUS rtx is canonicalized. */ -- rtx y0 = XEXP (y, 0); -- rtx y1 = XEXP (y, 1); -- -- if (rtx_equal_for_memref_p (x1, y1)) -- return memrefs_conflict_p (xsize, x0, ysize, y0, c); -- if (rtx_equal_for_memref_p (x0, y0)) -- return memrefs_conflict_p (xsize, x1, ysize, y1, c); -- if (GET_CODE (x1) == CONST_INT) -- if (GET_CODE (y1) == CONST_INT) -- return memrefs_conflict_p (xsize, x0, ysize, y0, -- c - INTVAL (x1) + INTVAL (y1)); -- else -- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1)); -- else if (GET_CODE (y1) == CONST_INT) -- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1)); -- -- /* Handle case where we cannot understand iteration operators, -- but we notice that the base addresses are distinct objects. */ -- x = find_symbolic_term (x); -- if (x == 0) -- return 1; -- y = find_symbolic_term (y); -- if (y == 0) -- return 1; -- return rtx_equal_for_memref_p (x, y); -- } -- else if (GET_CODE (x1) == CONST_INT) -- return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1)); -- } -- else if (GET_CODE (y) == PLUS) -- { -- /* The fact that Y is canonicalized means that this -- PLUS rtx is canonicalized. */ -- rtx y0 = XEXP (y, 0); -- rtx y1 = XEXP (y, 1); -- -- if (GET_CODE (y1) == CONST_INT) -- return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1)); -- else -- return 1; -- } -- -- if (GET_CODE (x) == GET_CODE (y)) -- switch (GET_CODE (x)) -- { -- case MULT: -- { -- /* Handle cases where we expect the second operands to be the -- same, and check only whether the first operand would conflict -- or not. */ -- rtx x0, y0; -- rtx x1 = canon_rtx (XEXP (x, 1)); -- rtx y1 = canon_rtx (XEXP (y, 1)); -- if (! rtx_equal_for_memref_p (x1, y1)) -- return 1; -- x0 = canon_rtx (XEXP (x, 0)); -- y0 = canon_rtx (XEXP (y, 0)); -- if (rtx_equal_for_memref_p (x0, y0)) -- return (xsize == 0 || ysize == 0 -- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -- -- /* Can't properly adjust our sizes. */ -- if (GET_CODE (x1) != CONST_INT) -- return 1; -- xsize /= INTVAL (x1); -- ysize /= INTVAL (x1); -- c /= INTVAL (x1); -- return memrefs_conflict_p (xsize, x0, ysize, y0, c); -- } -- } -- -- if (CONSTANT_P (x)) -- { -- if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT) -- { -- c += (INTVAL (y) - INTVAL (x)); -- return (xsize == 0 || ysize == 0 -- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)); -- } -- -- if (GET_CODE (x) == CONST) -- { -- if (GET_CODE (y) == CONST) -- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), -- ysize, canon_rtx (XEXP (y, 0)), c); -- else -- return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), -- ysize, y, c); -- } -- if (GET_CODE (y) == CONST) -- return memrefs_conflict_p (xsize, x, ysize, -- canon_rtx (XEXP (y, 0)), c); -- -- if (CONSTANT_P (y)) -- return (rtx_equal_for_memref_p (x, y) -- && (xsize == 0 || ysize == 0 -- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))); -- -- return 1; -- } -- return 1; -- } -- -- /* Functions to compute memory dependencies. -- -- Since we process the insns in execution order, we can build tables -- to keep track of what registers are fixed (and not aliased), what registers -- are varying in known ways, and what registers are varying in unknown -- ways. -- -- If both memory references are volatile, then there must always be a -- dependence between the two references, since their order can not be -- changed. A volatile and non-volatile reference can be interchanged -- though. -- -- A MEM_IN_STRUCT reference at a non-QImode varying address can never -- conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must -- allow QImode aliasing because the ANSI C standard allows character -- pointers to alias anything. We are assuming that characters are -- always QImode here. */ -- -- /* Read dependence: X is read after read in MEM takes place. There can -- only be a dependence here if both reads are volatile. */ -- -- int -- read_dependence (mem, x) -- rtx mem; -- rtx x; -- { -- return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem); -- } -- -- /* True dependence: X is read after store in MEM takes place. */ -- -- int -- true_dependence (mem, x) -- rtx mem; -- rtx x; -- { -- /* If X is an unchanging read, then it can't possibly conflict with any -- non-unchanging store. It may conflict with an unchanging write though, -- because there may be a single store to this address to initialize it. -- Just fall through to the code below to resolve the case where we have -- both an unchanging read and an unchanging write. This won't handle all -- cases optimally, but the possible performance loss should be -- negligible. */ -- if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem)) -- return 0; -- -- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0), -- SIZE_FOR_MODE (x), XEXP (x, 0), 0) -- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) -- && GET_MODE (mem) != QImode -- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) -- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) -- && GET_MODE (x) != QImode -- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); -- } -- -- /* Anti dependence: X is written after read in MEM takes place. */ -- -- int -- anti_dependence (mem, x) -- rtx mem; -- rtx x; -- { -- /* If MEM is an unchanging read, then it can't possibly conflict with -- the store to X, because there is at most one store to MEM, and it must -- have occurred somewhere before MEM. */ -- if (RTX_UNCHANGING_P (mem)) -- return 0; -- -- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0), -- SIZE_FOR_MODE (x), XEXP (x, 0), 0) -- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) -- && GET_MODE (mem) != QImode -- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) -- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) -- && GET_MODE (x) != QImode -- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); -- } -- -- /* Output dependence: X is written after store in MEM takes place. */ -- -- int -- output_dependence (mem, x) -- rtx mem; -- rtx x; -- { -- return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) -- || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0), -- SIZE_FOR_MODE (x), XEXP (x, 0), 0) -- && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) -- && GET_MODE (mem) != QImode -- && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) -- && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) -- && GET_MODE (x) != QImode -- && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); -- } -- - /* Helper functions for instruction scheduling. */ - ---- 345,348 ---- -*************** add_insn_mem_dependence (insn_list, mem_ -*** 1609,1621 **** - - /* Make a dependency between every memory reference on the pending lists -! and INSN, thus flushing the pending lists. */ - - static void -! flush_pending_lists (insn) - rtx insn; - { - rtx link; - -! while (pending_read_insns) - { - add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI); ---- 1072,1086 ---- - - /* Make a dependency between every memory reference on the pending lists -! and INSN, thus flushing the pending lists. If ONLY_WRITE, don't flush -! the read list. */ - - static void -! flush_pending_lists (insn, only_write) - rtx insn; -+ int only_write; - { - rtx link; - -! while (pending_read_insns && ! only_write) - { - add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI); -*************** sched_analyze_1 (x, insn) -*** 1746,1750 **** - this flush occurs 8 times for sparc, and 10 times for m88k using - the number 32. */ -! flush_pending_lists (insn); - } - else ---- 1211,1215 ---- - this flush occurs 8 times for sparc, and 10 times for m88k using - the number 32. */ -! flush_pending_lists (insn, 0); - } - else -*************** sched_analyze_2 (x, insn) -*** 1922,1926 **** - /* If a dependency already exists, don't create a new one. */ - if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn))) -! if (true_dependence (XEXP (pending_mem, 0), x)) - add_dependence (insn, XEXP (pending, 0), 0); - ---- 1387,1392 ---- - /* If a dependency already exists, don't create a new one. */ - if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn))) -! if (true_dependence (XEXP (pending_mem, 0), VOIDmode, -! x, rtx_varies_p)) - add_dependence (insn, XEXP (pending, 0), 0); - -*************** sched_analyze_2 (x, insn) -*** 1968,1972 **** - reg_pending_sets_all = 1; - -! flush_pending_lists (insn); - } - ---- 1434,1438 ---- - reg_pending_sets_all = 1; - -! flush_pending_lists (insn, 0); - } - -*************** sched_analyze_insn (x, insn, loop_notes) -*** 2021,2025 **** - register RTX_CODE code = GET_CODE (x); - rtx link; -! int maxreg = max_reg_num (); - int i; - ---- 1487,1491 ---- - register RTX_CODE code = GET_CODE (x); - rtx link; -! int maxreg = reg_last_uses_size; - int i; - -*************** sched_analyze_insn (x, insn, loop_notes) -*** 2058,2062 **** - if (loop_notes) - { -! int max_reg = max_reg_num (); - rtx link; - ---- 1524,1528 ---- - if (loop_notes) - { -! int max_reg = reg_last_uses_size; - rtx link; - -*************** sched_analyze_insn (x, insn, loop_notes) -*** 2072,2076 **** - reg_pending_sets_all = 1; - -! flush_pending_lists (insn); - - link = loop_notes; ---- 1538,1542 ---- - reg_pending_sets_all = 1; - -! flush_pending_lists (insn, 0); - - link = loop_notes; -*************** sched_analyze (head, tail) -*** 2202,2207 **** - && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP) - { -! int max_reg = max_reg_num (); -! for (i = 0; i < max_reg; i++) - { - for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) ---- 1668,1672 ---- - && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP) - { -! for (i = 0; i < reg_last_uses_size; i++) - { - for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) -*************** sched_analyze (head, tail) -*** 2247,2259 **** - loop_notes = 0; - -! /* We don't need to flush memory for a function call which does -! not involve memory. */ -! if (! CONST_CALL_P (insn)) -! { -! /* In the absence of interprocedural alias analysis, -! we must flush all pending reads and writes, and -! start new dependencies starting from here. */ -! flush_pending_lists (insn); -! } - - /* Depend this function call (actually, the user of this ---- 1712,1720 ---- - loop_notes = 0; - -! /* In the absence of interprocedural alias analysis, we must flush -! all pending reads and writes, and start new dependencies starting -! from here. But only flush writes for constant calls (which may -! be passed a pointer to something we haven't written yet). */ -! flush_pending_lists (insn, CONST_CALL_P (insn)); - - /* Depend this function call (actually, the user of this -*************** sched_analyze (head, tail) -*** 2264,2270 **** - else if (GET_CODE (insn) == NOTE - && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG -! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)) -! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD, -! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes); - - if (insn == tail) ---- 1725,1736 ---- - else if (GET_CODE (insn) == NOTE - && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG -! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END -! || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP -! && GET_CODE (PREV_INSN (insn)) != CALL_INSN))) -! { -! loop_notes = gen_rtx (EXPR_LIST, REG_DEAD, -! GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes); -! CONST_CALL_P (loop_notes) = CONST_CALL_P (insn); -! } - - if (insn == tail) -*************** sched_note_set (b, x, death) -*** 2372,2380 **** - - #define SCHED_SORT(READY, NEW_READY, OLD_READY) \ -! do { if ((NEW_READY) - (OLD_READY) == 1) \ -! swap_sort (READY, NEW_READY); \ -! else if ((NEW_READY) - (OLD_READY) > 1) \ -! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); } \ -! while (0) - - /* Returns a positive value if y is preferred; returns a negative value if ---- 1838,1845 ---- - - #define SCHED_SORT(READY, NEW_READY, OLD_READY) \ -! if ((NEW_READY) - (OLD_READY) == 1) \ -! swap_sort (READY, NEW_READY); \ -! else if ((NEW_READY) - (OLD_READY) > 1) \ -! qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); else \ - - /* Returns a positive value if y is preferred; returns a negative value if -*************** reemit_notes (insn, last) -*** 3128,3132 **** - { - if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP) -! emit_note_after (INTVAL (XEXP (note, 0)), insn); - else - last = emit_note_before (INTVAL (XEXP (note, 0)), last); ---- 2593,2598 ---- - { - if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP) -! CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn)) -! = CONST_CALL_P (note); - else - last = emit_note_before (INTVAL (XEXP (note, 0)), last); -*************** schedule_block (b, file) -*** 3174,3178 **** - b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b])); - -! i = max_reg_num (); - reg_last_uses = (rtx *) alloca (i * sizeof (rtx)); - bzero ((char *) reg_last_uses, i * sizeof (rtx)); ---- 2640,2644 ---- - b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b])); - -! reg_last_uses_size = i = max_reg_num (); - reg_last_uses = (rtx *) alloca (i * sizeof (rtx)); - bzero ((char *) reg_last_uses, i * sizeof (rtx)); -*************** schedule_block (b, file) -*** 3800,3804 **** - made live again later. */ - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -! if (call_used_regs[i] || global_regs[i]) - { - register int offset = i / REGSET_ELT_BITS; ---- 3266,3271 ---- - made live again later. */ - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -! if ((call_used_regs[i] && ! fixed_regs[i]) -! || global_regs[i]) - { - register int offset = i / REGSET_ELT_BITS; -*************** schedule_insns (dump_file) -*** 4717,4721 **** - bcopy ((char *) reg_n_deaths, (char *) sched_reg_n_deaths, - max_regno * sizeof (short)); -- init_alias_analysis (); - } - else ---- 4184,4187 ---- -*************** schedule_insns (dump_file) -*** 4726,4732 **** - bb_dead_regs = 0; - bb_live_regs = 0; -- if (! flag_schedule_insns) -- init_alias_analysis (); - } - - if (write_symbols != NO_DEBUG) ---- 4192,4213 ---- - bb_dead_regs = 0; - bb_live_regs = 0; - } -+ init_alias_analysis (); -+ #if 0 -+ if (dump_file) -+ { -+ extern rtx *reg_base_value; -+ extern int reg_base_value_size; -+ int i; -+ for (i = 0; i < reg_base_value_size; i++) -+ if (reg_base_value[i]) -+ { -+ fprintf (dump_file, ";; reg_base_value[%d] = ", i); -+ print_rtl (dump_file, reg_base_value[i]); -+ fputc ('\n', dump_file); -+ } -+ } -+ #endif -+ - - if (write_symbols != NO_DEBUG) -diff -rcp2N gcc-2.7.2.2/sdbout.c g77-new/sdbout.c -*** gcc-2.7.2.2/sdbout.c Thu Jun 15 08:07:11 1995 ---- g77-new/sdbout.c Mon Aug 11 01:42:22 1997 -*************** plain_type_1 (type, level) -*** 539,543 **** - sdb_dims[sdb_n_dims++] - = (TYPE_DOMAIN (type) -! ? TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1 - : 0); - return PUSH_DERIVED_LEVEL (DT_ARY, m); ---- 539,546 ---- - sdb_dims[sdb_n_dims++] - = (TYPE_DOMAIN (type) -! && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST -! && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST -! ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) -! - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1) - : 0); - return PUSH_DERIVED_LEVEL (DT_ARY, m); -diff -rcp2N gcc-2.7.2.2/stmt.c g77-new/stmt.c -*** gcc-2.7.2.2/stmt.c Tue Sep 12 19:01:54 1995 ---- g77-new/stmt.c Sun Aug 10 18:46:56 1997 -*************** fixup_gotos (thisblock, stack_level, cle -*** 1244,1249 **** - poplevel (1, 0, 0); - end_sequence (); -! f->before_jump -! = emit_insns_after (cleanup_insns, f->before_jump); - - f->cleanup_list_list = TREE_CHAIN (lists); ---- 1244,1250 ---- - poplevel (1, 0, 0); - end_sequence (); -! if (cleanup_insns != 0) -! f->before_jump -! = emit_insns_after (cleanup_insns, f->before_jump); - - f->cleanup_list_list = TREE_CHAIN (lists); -*************** expand_expr_stmt (exp) -*** 1721,1725 **** - - last_expr_type = TREE_TYPE (exp); -! if (! flag_syntax_only) - last_expr_value = expand_expr (exp, - (expr_stmts_for_value ---- 1722,1726 ---- - - last_expr_type = TREE_TYPE (exp); -! if (! flag_syntax_only || expr_stmts_for_value) - last_expr_value = expand_expr (exp, - (expr_stmts_for_value -*************** expand_end_bindings (vars, mark_ends, do -*** 3160,3163 **** ---- 3161,3169 ---- - #endif - -+ #ifdef HAVE_nonlocal_goto_receiver -+ if (HAVE_nonlocal_goto_receiver) -+ emit_insn (gen_nonlocal_goto_receiver ()); -+ #endif -+ - /* The handler expects the desired label address in the static chain - register. It tests the address and does an appropriate jump -*************** expand_decl (decl) -*** 3369,3393 **** - = promote_mode (type, DECL_MODE (decl), &unsignedp, 0); - -! if (TREE_CODE (type) == COMPLEX_TYPE) -! { -! rtx realpart, imagpart; -! enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type)); - -! /* For a complex type variable, make a CONCAT of two pseudos -! so that the real and imaginary parts -! can be allocated separately. */ -! realpart = gen_reg_rtx (partmode); -! REG_USERVAR_P (realpart) = 1; -! imagpart = gen_reg_rtx (partmode); -! REG_USERVAR_P (imagpart) = 1; -! DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart); -! } -! else -! { -! DECL_RTL (decl) = gen_reg_rtx (reg_mode); -! if (TREE_CODE (type) == POINTER_TYPE) -! mark_reg_pointer (DECL_RTL (decl)); -! REG_USERVAR_P (DECL_RTL (decl)) = 1; -! } - } - else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST) ---- 3375,3383 ---- - = promote_mode (type, DECL_MODE (decl), &unsignedp, 0); - -! DECL_RTL (decl) = gen_reg_rtx (reg_mode); -! mark_user_reg (DECL_RTL (decl)); - -! if (TREE_CODE (type) == POINTER_TYPE) -! mark_reg_pointer (DECL_RTL (decl)); - } - else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST) -*************** expand_decl (decl) -*** 3462,3468 **** - free_temp_slots (); - -! /* Allocate space on the stack for the variable. */ - address = allocate_dynamic_stack_space (size, NULL_RTX, -! DECL_ALIGN (decl)); - - /* Reference the variable indirect through that rtx. */ ---- 3452,3461 ---- - free_temp_slots (); - -! /* Allocate space on the stack for the variable. Note that -! DECL_ALIGN says how the variable is to be aligned and we -! cannot use it to conclude anything about the alignment of -! the size. */ - address = allocate_dynamic_stack_space (size, NULL_RTX, -! TYPE_ALIGN (TREE_TYPE (decl))); - - /* Reference the variable indirect through that rtx. */ -diff -rcp2N gcc-2.7.2.2/stor-layout.c g77-new/stor-layout.c -*** gcc-2.7.2.2/stor-layout.c Thu Feb 20 19:24:20 1997 ---- g77-new/stor-layout.c Mon Aug 11 06:47:50 1997 -*************** layout_decl (decl, known_align) -*** 255,259 **** - if (maximum_field_alignment != 0) - DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment); -! else if (flag_pack_struct) - DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT); - } ---- 255,259 ---- - if (maximum_field_alignment != 0) - DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment); -! else if (DECL_PACKED (decl)) - DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT); - } -*************** layout_decl (decl, known_align) -*** 261,265 **** - if (DECL_BIT_FIELD (decl) - && TYPE_SIZE (type) != 0 -! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST) - { - register enum machine_mode xmode ---- 261,266 ---- - if (DECL_BIT_FIELD (decl) - && TYPE_SIZE (type) != 0 -! && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST -! && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT) - { - register enum machine_mode xmode -*************** layout_decl (decl, known_align) -*** 278,281 **** ---- 279,291 ---- - } - -+ /* Turn off DECL_BIT_FIELD if we won't need it set. */ -+ if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode -+ && known_align % TYPE_ALIGN (type) == 0 -+ && DECL_SIZE (decl) != 0 -+ && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST -+ || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0) -+ && DECL_ALIGN (decl) >= TYPE_ALIGN (type)) -+ DECL_BIT_FIELD (decl) = 0; -+ - /* Evaluate nonconstant size only once, either now or as soon as safe. */ - if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST) -*************** layout_record (rec) -*** 380,384 **** - if (maximum_field_alignment != 0) - type_align = MIN (type_align, maximum_field_alignment); -! else if (flag_pack_struct) - type_align = MIN (type_align, BITS_PER_UNIT); - ---- 390,394 ---- - if (maximum_field_alignment != 0) - type_align = MIN (type_align, maximum_field_alignment); -! else if (TYPE_PACKED (rec)) - type_align = MIN (type_align, BITS_PER_UNIT); - -*************** layout_record (rec) -*** 422,428 **** - && DECL_BIT_FIELD_TYPE (field) - && !DECL_PACKED (field) -- /* If #pragma pack is in effect, turn off this feature. */ - && maximum_field_alignment == 0 -- && !flag_pack_struct - && !integer_zerop (DECL_SIZE (field))) - { ---- 432,436 ---- -*************** layout_record (rec) -*** 459,463 **** - if (maximum_field_alignment != 0) - type_align = MIN (type_align, maximum_field_alignment); -! else if (flag_pack_struct) - type_align = MIN (type_align, BITS_PER_UNIT); - ---- 467,471 ---- - if (maximum_field_alignment != 0) - type_align = MIN (type_align, maximum_field_alignment); -! else if (TYPE_PACKED (rec)) - type_align = MIN (type_align, BITS_PER_UNIT); - -*************** layout_record (rec) -*** 500,505 **** - /* Do nothing. */; - else if (TREE_CODE (dsize) == INTEGER_CST - && TREE_INT_CST_HIGH (dsize) == 0 -! && TREE_INT_CST_LOW (dsize) + const_size > const_size) - /* Use const_size if there's no overflow. */ - const_size += TREE_INT_CST_LOW (dsize); ---- 508,514 ---- - /* Do nothing. */; - else if (TREE_CODE (dsize) == INTEGER_CST -+ && ! TREE_CONSTANT_OVERFLOW (dsize) - && TREE_INT_CST_HIGH (dsize) == 0 -! && TREE_INT_CST_LOW (dsize) + const_size >= const_size) - /* Use const_size if there's no overflow. */ - const_size += TREE_INT_CST_LOW (dsize); -*************** get_best_mode (bitsize, bitpos, align, l -*** 1172,1175 **** ---- 1181,1192 ---- - enum machine_mode mode; - int unit; -+ -+ if (bitpos < 0) -+ { -+ /* For correct calculations and convenience, bias negative bitpos -+ to become a non-negative value that is [1,bitsize], such that -+ the relative bit offset to a multiple of bitsize is preserved. */ -+ bitpos = bitsize - ((-bitpos) % bitsize); -+ } - - /* Find the narrowest integer mode that contains the bit field. */ -diff -rcp2N gcc-2.7.2.2/stupid.c g77-new/stupid.c -*** gcc-2.7.2.2/stupid.c Sun Oct 29 07:45:22 1995 ---- g77-new/stupid.c Sun Aug 10 18:46:01 1997 -*************** static int *uid_suid; -*** 66,69 **** ---- 66,74 ---- - static int last_call_suid; - -+ /* Record the suid of the last NOTE_INSN_SETJMP -+ so we can tell whether a pseudo reg crosses any setjmp. */ -+ -+ static int last_setjmp_suid; -+ - /* Element N is suid of insn where life span of pseudo reg N ends. - Element is 0 if register N has not been seen yet on backward scan. */ -*************** static char *regs_live; -*** 89,92 **** ---- 94,101 ---- - static char *regs_change_size; - -+ /* Indexed by reg number, nonzero if reg crosses a setjmp. */ -+ -+ static char *regs_crosses_setjmp; -+ - /* Indexed by insn's suid, the set of hard regs live after that insn. */ - -*************** stupid_life_analysis (f, nregs, file) -*** 149,152 **** ---- 158,162 ---- - - last_call_suid = i + 1; -+ last_setjmp_suid = i + 1; - max_suid = i + 1; - -*************** stupid_life_analysis (f, nregs, file) -*** 167,170 **** ---- 177,183 ---- - bzero ((char *) regs_change_size, nregs * sizeof (char)); - -+ regs_crosses_setjmp = (char *) alloca (nregs * sizeof (char)); -+ bzero ((char *) regs_crosses_setjmp, nregs * sizeof (char)); -+ - reg_renumber = (short *) oballoc (nregs * sizeof (short)); - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) -*************** stupid_life_analysis (f, nregs, file) -*** 216,219 **** ---- 229,236 ---- - stupid_mark_refs (PATTERN (insn), insn); - -+ if (GET_CODE (insn) == NOTE -+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) -+ last_setjmp_suid = INSN_SUID (insn); -+ - /* Mark all call-clobbered regs as live after each call insn - so that a pseudo whose life span includes this insn -*************** stupid_life_analysis (f, nregs, file) -*** 254,259 **** - register int r = reg_order[i]; - -! /* Some regnos disappear from the rtl. Ignore them to avoid crash. */ -! if (regno_reg_rtx[r] == 0) - continue; - ---- 271,277 ---- - register int r = reg_order[i]; - -! /* Some regnos disappear from the rtl. Ignore them to avoid crash. -! Also don't allocate registers that cross a setjmp. */ -! if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r]) - continue; - -*************** stupid_reg_compare (r1p, r2p) -*** 309,314 **** - that can hold a value of machine-mode MODE - (but actually we test only the first of the block for holding MODE) -! currently free from after insn whose suid is BIRTH -! through the insn whose suid is DEATH, - and return the number of the first of them. - Return -1 if such a block cannot be found. ---- 327,332 ---- - that can hold a value of machine-mode MODE - (but actually we test only the first of the block for holding MODE) -! currently free from after insn whose suid is BORN_INSN -! through the insn whose suid is DEAD_INSN, - and return the number of the first of them. - Return -1 if such a block cannot be found. -*************** stupid_find_reg (call_preserved, class, -*** 338,341 **** ---- 356,366 ---- - #endif - -+ /* If this register's life is more than 5,000 insns, we probably -+ can't allocate it, so don't waste the time trying. This avoid -+ quadratic behavior on programs that have regularly-occurring -+ SAVE_EXPRs. */ -+ if (dead_insn > born_insn + 5000) -+ return -1; -+ - COPY_HARD_REG_SET (used, - call_preserved ? call_used_reg_set : fixed_reg_set); -*************** stupid_mark_refs (x, insn) -*** 488,491 **** ---- 513,519 ---- - if (last_call_suid < reg_where_dead[regno]) - reg_n_calls_crossed[regno] += 1; -+ -+ if (last_setjmp_suid < reg_where_dead[regno]) -+ regs_crosses_setjmp[regno] = 1; - } - } -diff -rcp2N gcc-2.7.2.2/toplev.c g77-new/toplev.c -*** gcc-2.7.2.2/toplev.c Fri Oct 20 17:56:35 1995 ---- g77-new/toplev.c Sun Aug 10 18:43:36 1997 -*************** int flag_unroll_loops; -*** 388,391 **** ---- 388,405 ---- - int flag_unroll_all_loops; - -+ /* Nonzero forces all invariant computations in loops to be moved -+ outside the loop. */ -+ -+ int flag_move_all_movables = 0; -+ -+ /* Nonzero forces all general induction variables in loops to be -+ strength reduced. */ -+ -+ int flag_reduce_all_givs = 0; -+ -+ /* Nonzero gets another run of loop_optimize performed. */ -+ -+ int flag_rerun_loop_opt = 0; -+ - /* Nonzero for -fwritable-strings: - store string constants in data segment and don't uniquize them. */ -*************** int flag_gnu_linker = 1; -*** 522,525 **** ---- 536,550 ---- - int flag_pack_struct = 0; - -+ /* 1 if alias checking is on (by default, when -O). */ -+ int flag_alias_check = 0; -+ -+ /* 0 if pointer arguments may alias each other. True in C. -+ 1 if pointer arguments may not alias each other but may alias -+ global variables. -+ 2 if pointer arguments may not alias each other and may not -+ alias global variables. True in Fortran. -+ This defaults to 0 for C. */ -+ int flag_argument_noalias = 0; -+ - /* Table of language-independent -f options. - STRING is the option name. VARIABLE is the address of the variable. -*************** struct { char *string; int *variable; in -*** 542,545 **** ---- 567,573 ---- - {"unroll-loops", &flag_unroll_loops, 1}, - {"unroll-all-loops", &flag_unroll_all_loops, 1}, -+ {"move-all-movables", &flag_move_all_movables, 1}, -+ {"reduce-all-givs", &flag_reduce_all_givs, 1}, -+ {"rerun-loop-opt", &flag_rerun_loop_opt, 1}, - {"writable-strings", &flag_writable_strings, 1}, - {"peephole", &flag_no_peephole, 0}, -*************** struct { char *string; int *variable; in -*** 568,572 **** - {"gnu-linker", &flag_gnu_linker, 1}, - {"pack-struct", &flag_pack_struct, 1}, -! {"bytecode", &output_bytecode, 1} - }; - ---- 596,604 ---- - {"gnu-linker", &flag_gnu_linker, 1}, - {"pack-struct", &flag_pack_struct, 1}, -! {"bytecode", &output_bytecode, 1}, -! {"alias-check", &flag_alias_check, 1}, -! {"argument-alias", &flag_argument_noalias, 0}, -! {"argument-noalias", &flag_argument_noalias, 1}, -! {"argument-noalias-global", &flag_argument_noalias, 2} - }; - -*************** rest_of_compilation (decl) -*** 2715,2725 **** - finish_compilation will call rest_of_compilation again - for those functions that need to be output. Also defer those -! functions that we are supposed to defer. */ -! -! if (DECL_DEFER_OUTPUT (decl) -! || ((specd || DECL_INLINE (decl)) -! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl) -! && ! flag_keep_inline_functions) -! || DECL_EXTERNAL (decl)))) - { - DECL_DEFER_OUTPUT (decl) = 1; ---- 2747,2760 ---- - finish_compilation will call rest_of_compilation again - for those functions that need to be output. Also defer those -! functions that we are supposed to defer. We cannot defer -! functions containing nested functions since the nested function -! data is in our non-saved obstack. */ -! -! if (! current_function_contains_functions -! && (DECL_DEFER_OUTPUT (decl) -! || ((specd || DECL_INLINE (decl)) -! && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl) -! && ! flag_keep_inline_functions) -! || DECL_EXTERNAL (decl))))) - { - DECL_DEFER_OUTPUT (decl) = 1; -*************** rest_of_compilation (decl) -*** 2893,2897 **** ---- 2928,2951 ---- - TIMEVAR (loop_time, - { -+ int save_unroll_flag; -+ int save_unroll_all_flag; -+ -+ if (flag_rerun_loop_opt) -+ { -+ save_unroll_flag = flag_unroll_loops; -+ save_unroll_all_flag = flag_unroll_all_loops; -+ flag_unroll_loops = 0; -+ flag_unroll_all_loops = 0; -+ } -+ - loop_optimize (insns, loop_dump_file); -+ -+ if (flag_rerun_loop_opt) -+ { -+ flag_unroll_loops = save_unroll_flag; -+ flag_unroll_all_loops = save_unroll_all_flag; -+ -+ loop_optimize (insns, loop_dump_file); -+ } - }); - } -*************** rest_of_compilation (decl) -*** 3280,3283 **** ---- 3334,3341 ---- - resume_temporary_allocation (); - -+ /* Show no temporary slots allocated. */ -+ -+ init_temp_slots (); -+ - /* The parsing time is all the time spent in yyparse - *except* what is spent in this function. */ -*************** main (argc, argv, envp) -*** 3383,3386 **** ---- 3441,3445 ---- - flag_omit_frame_pointer = 1; - #endif -+ flag_alias_check = 1; - } - -diff -rcp2N gcc-2.7.2.2/tree.c g77-new/tree.c -*** gcc-2.7.2.2/tree.c Sun Oct 1 21:26:56 1995 ---- g77-new/tree.c Sun Aug 10 18:47:23 1997 -*************** build_string (len, str) -*** 1428,1436 **** - /* Return a newly constructed COMPLEX_CST node whose value is - specified by the real and imaginary parts REAL and IMAG. -! Both REAL and IMAG should be constant nodes. -! The TREE_TYPE is not initialized. */ - - tree -! build_complex (real, imag) - tree real, imag; - { ---- 1428,1437 ---- - /* Return a newly constructed COMPLEX_CST node whose value is - specified by the real and imaginary parts REAL and IMAG. -! Both REAL and IMAG should be constant nodes. TYPE, if specified, -! will be the type of the COMPLEX_CST; otherwise a new type will be made. */ - - tree -! build_complex (type, real, imag) -! tree type; - tree real, imag; - { -*************** build_complex (real, imag) -*** 1439,1443 **** - TREE_REALPART (t) = real; - TREE_IMAGPART (t) = imag; -! TREE_TYPE (t) = build_complex_type (TREE_TYPE (real)); - TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag); - TREE_CONSTANT_OVERFLOW (t) ---- 1440,1444 ---- - TREE_REALPART (t) = real; - TREE_IMAGPART (t) = imag; -! TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real)); - TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag); - TREE_CONSTANT_OVERFLOW (t) -*************** integer_zerop (expr) -*** 1484,1487 **** ---- 1485,1489 ---- - - return ((TREE_CODE (expr) == INTEGER_CST -+ && ! TREE_CONSTANT_OVERFLOW (expr) - && TREE_INT_CST_LOW (expr) == 0 - && TREE_INT_CST_HIGH (expr) == 0) -*************** integer_onep (expr) -*** 1501,1504 **** ---- 1503,1507 ---- - - return ((TREE_CODE (expr) == INTEGER_CST -+ && ! TREE_CONSTANT_OVERFLOW (expr) - && TREE_INT_CST_LOW (expr) == 1 - && TREE_INT_CST_HIGH (expr) == 0) -*************** integer_all_onesp (expr) -*** 1525,1529 **** - return 1; - -! else if (TREE_CODE (expr) != INTEGER_CST) - return 0; - ---- 1528,1533 ---- - return 1; - -! else if (TREE_CODE (expr) != INTEGER_CST -! || TREE_CONSTANT_OVERFLOW (expr)) - return 0; - -*************** integer_pow2p (expr) -*** 1574,1578 **** - return 1; - -! if (TREE_CODE (expr) != INTEGER_CST) - return 0; - ---- 1578,1582 ---- - return 1; - -! if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr)) - return 0; - -*************** real_zerop (expr) -*** 1596,1599 **** ---- 1600,1604 ---- - - return ((TREE_CODE (expr) == REAL_CST -+ && ! TREE_CONSTANT_OVERFLOW (expr) - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)) - || (TREE_CODE (expr) == COMPLEX_CST -*************** real_onep (expr) -*** 1611,1614 **** ---- 1616,1620 ---- - - return ((TREE_CODE (expr) == REAL_CST -+ && ! TREE_CONSTANT_OVERFLOW (expr) - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)) - || (TREE_CODE (expr) == COMPLEX_CST -*************** real_twop (expr) -*** 1626,1629 **** ---- 1632,1636 ---- - - return ((TREE_CODE (expr) == REAL_CST -+ && ! TREE_CONSTANT_OVERFLOW (expr) - && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2)) - || (TREE_CODE (expr) == COMPLEX_CST -*************** staticp (arg) -*** 2055,2061 **** - return 1; - - case COMPONENT_REF: - case BIT_FIELD_REF: -! return staticp (TREE_OPERAND (arg, 0)); - - #if 0 ---- 2062,2073 ---- - return 1; - -+ /* If we are referencing a bitfield, we can't evaluate an -+ ADDR_EXPR at compile time and so it isn't a constant. */ - case COMPONENT_REF: -+ return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1)) -+ && staticp (TREE_OPERAND (arg, 0))); -+ - case BIT_FIELD_REF: -! return 0; - - #if 0 -*************** contains_placeholder_p (exp) -*** 2157,2160 **** ---- 2169,2174 ---- - if (code == WITH_RECORD_EXPR) - return 0; -+ else if (code == PLACEHOLDER_EXPR) -+ return 1; - - switch (TREE_CODE_CLASS (code)) -*************** substitute_in_expr (exp, f, r) -*** 2204,2207 **** ---- 2218,2222 ---- - { - enum tree_code code = TREE_CODE (exp); -+ tree op0, op1, op2; - tree new = 0; - tree inner; -*************** substitute_in_expr (exp, f, r) -*** 2225,2231 **** - { - case 1: -! new = fold (build1 (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), -! f, r))); - break; - ---- 2240,2248 ---- - { - case 1: -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! if (op0 == TREE_OPERAND (exp, 0)) -! return exp; -! -! new = fold (build1 (code, TREE_TYPE (exp), op0)); - break; - -*************** substitute_in_expr (exp, f, r) -*** 2238,2245 **** - abort (); - -! new = fold (build (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 1), -! f, r))); - break; - ---- 2255,2264 ---- - abort (); - -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r); -! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)) -! return exp; -! -! new = fold (build (code, TREE_TYPE (exp), op0, op1)); - break; - -*************** substitute_in_expr (exp, f, r) -*** 2253,2261 **** - abort (); - -! new = fold (build (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 1), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 2), -! f, r))); - } - ---- 2272,2283 ---- - abort (); - -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r); -! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r); -! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) -! && op2 == TREE_OPERAND (exp, 2)) -! return exp; -! -! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); - } - -*************** substitute_in_expr (exp, f, r) -*** 2276,2302 **** - return r; - -! new = fold (build (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), f, r), - TREE_OPERAND (exp, 1))); - break; - - case BIT_FIELD_REF: -! new = fold (build (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 1), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 2), f, r))); - break; - - case INDIRECT_REF: - case BUFFER_REF: -! new = fold (build1 (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), -! f, r))); - break; - - case OFFSET_REF: -! new = fold (build (code, TREE_TYPE (exp), -! substitute_in_expr (TREE_OPERAND (exp, 0), f, r), -! substitute_in_expr (TREE_OPERAND (exp, 1), f, r))); - break; - } ---- 2298,2342 ---- - return r; - -! /* If this expression hasn't been completed let, leave it -! alone. */ -! if (TREE_CODE (inner) == PLACEHOLDER_EXPR -! && TREE_TYPE (inner) == 0) -! return exp; -! -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! if (op0 == TREE_OPERAND (exp, 0)) -! return exp; -! -! new = fold (build (code, TREE_TYPE (exp), op0, - TREE_OPERAND (exp, 1))); - break; - - case BIT_FIELD_REF: -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r); -! op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r); -! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) -! && op2 == TREE_OPERAND (exp, 2)) -! return exp; -! -! new = fold (build (code, TREE_TYPE (exp), op0, op1, op2)); - break; - - case INDIRECT_REF: - case BUFFER_REF: -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! if (op0 == TREE_OPERAND (exp, 0)) -! return exp; -! -! new = fold (build1 (code, TREE_TYPE (exp), op0)); - break; - - case OFFSET_REF: -! op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r); -! op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r); -! if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)) -! return exp; -! -! new = fold (build (code, TREE_TYPE (exp), op0, op1)); - break; - } -*************** substitute_in_expr (exp, f, r) -*** 2311,2454 **** - } - -- /* Given a type T, a FIELD_DECL F, and a replacement value R, -- return a new type with all size expressions that contain F -- updated by replacing F with R. */ -- -- tree -- substitute_in_type (t, f, r) -- tree t, f, r; -- { -- switch (TREE_CODE (t)) -- { -- case POINTER_TYPE: -- case VOID_TYPE: -- return t; -- case INTEGER_TYPE: -- case ENUMERAL_TYPE: -- case BOOLEAN_TYPE: -- case CHAR_TYPE: -- if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST -- && contains_placeholder_p (TYPE_MIN_VALUE (t))) -- || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST -- && contains_placeholder_p (TYPE_MAX_VALUE (t)))) -- return build_range_type (t, -- substitute_in_expr (TYPE_MIN_VALUE (t), f, r), -- substitute_in_expr (TYPE_MAX_VALUE (t), f, r)); -- return t; -- -- case REAL_TYPE: -- if ((TYPE_MIN_VALUE (t) != 0 -- && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST -- && contains_placeholder_p (TYPE_MIN_VALUE (t))) -- || (TYPE_MAX_VALUE (t) != 0 -- && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST -- && contains_placeholder_p (TYPE_MAX_VALUE (t)))) -- { -- t = build_type_copy (t); -- -- if (TYPE_MIN_VALUE (t)) -- TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r); -- if (TYPE_MAX_VALUE (t)) -- TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r); -- } -- return t; -- -- case COMPLEX_TYPE: -- return build_complex_type (substitute_in_type (TREE_TYPE (t), f, r)); -- -- case OFFSET_TYPE: -- case METHOD_TYPE: -- case REFERENCE_TYPE: -- case FILE_TYPE: -- case SET_TYPE: -- case FUNCTION_TYPE: -- case LANG_TYPE: -- /* Don't know how to do these yet. */ -- abort (); -- -- case ARRAY_TYPE: -- t = build_array_type (substitute_in_type (TREE_TYPE (t), f, r), -- substitute_in_type (TYPE_DOMAIN (t), f, r)); -- TYPE_SIZE (t) = 0; -- layout_type (t); -- return t; -- -- case RECORD_TYPE: -- case UNION_TYPE: -- case QUAL_UNION_TYPE: -- { -- tree new = copy_node (t); -- tree field; -- tree last_field = 0; -- -- /* Start out with no fields, make new fields, and chain them -- in. */ -- -- TYPE_FIELDS (new) = 0; -- TYPE_SIZE (new) = 0; -- -- for (field = TYPE_FIELDS (t); field; -- field = TREE_CHAIN (field)) -- { -- tree new_field = copy_node (field); -- -- TREE_TYPE (new_field) -- = substitute_in_type (TREE_TYPE (new_field), f, r); -- -- /* If this is an anonymous field and the type of this field is -- a UNION_TYPE or RECORD_TYPE with no elements, ignore it. If -- the type just has one element, treat that as the field. -- But don't do this if we are processing a QUAL_UNION_TYPE. */ -- if (TREE_CODE (t) != QUAL_UNION_TYPE && DECL_NAME (new_field) == 0 -- && (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE -- || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE)) -- { -- if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0) -- continue; -- -- if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0) -- new_field = TYPE_FIELDS (TREE_TYPE (new_field)); -- } -- -- DECL_CONTEXT (new_field) = new; -- DECL_SIZE (new_field) = 0; -- -- if (TREE_CODE (t) == QUAL_UNION_TYPE) -- { -- /* Do the substitution inside the qualifier and if we find -- that this field will not be present, omit it. */ -- DECL_QUALIFIER (new_field) -- = substitute_in_expr (DECL_QUALIFIER (field), f, r); -- if (integer_zerop (DECL_QUALIFIER (new_field))) -- continue; -- } -- -- if (last_field == 0) -- TYPE_FIELDS (new) = new_field; -- else -- TREE_CHAIN (last_field) = new_field; -- -- last_field = new_field; -- -- /* If this is a qualified type and this field will always be -- present, we are done. */ -- if (TREE_CODE (t) == QUAL_UNION_TYPE -- && integer_onep (DECL_QUALIFIER (new_field))) -- break; -- } -- -- /* If this used to be a qualified union type, but we now know what -- field will be present, make this a normal union. */ -- if (TREE_CODE (new) == QUAL_UNION_TYPE -- && (TYPE_FIELDS (new) == 0 -- || integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new))))) -- TREE_SET_CODE (new, UNION_TYPE); -- -- layout_type (new); -- return new; -- } -- } -- } -- - /* Stabilize a reference so that we can use it any number of times - without causing its operands to be evaluated more than once. ---- 2351,2354 ---- -*************** build_type_variant (type, constp, volati -*** 3141,3145 **** - preserve the TYPE_NAME, since there is code that depends on this. */ - -! for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t)) - if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t) - && TYPE_NAME (t) == TYPE_NAME (type)) ---- 3041,3045 ---- - preserve the TYPE_NAME, since there is code that depends on this. */ - -! for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) - if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t) - && TYPE_NAME (t) == TYPE_NAME (type)) -*************** get_unwidened (op, for_type) -*** 4051,4055 **** - if (TREE_CODE (op) == COMPONENT_REF - /* Since type_for_size always gives an integer type. */ -! && TREE_CODE (type) != REAL_TYPE) - { - unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1))); ---- 3951,3957 ---- - if (TREE_CODE (op) == COMPONENT_REF - /* Since type_for_size always gives an integer type. */ -! && TREE_CODE (type) != REAL_TYPE -! /* Don't crash if field not layed out yet. */ -! && DECL_SIZE (TREE_OPERAND (op, 1)) != 0) - { - unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1))); -diff -rcp2N gcc-2.7.2.2/tree.h g77-new/tree.h -*** gcc-2.7.2.2/tree.h Mon Sep 25 17:49:40 1995 ---- g77-new/tree.h Sun Aug 10 18:47:08 1997 -*************** enum built_in_function -*** 98,101 **** ---- 98,103 ---- - BUILT_IN_APPLY, - BUILT_IN_RETURN, -+ BUILT_IN_SETJMP, -+ BUILT_IN_LONGJMP, - - /* C++ extensions */ -*************** struct tree_int_cst -*** 408,411 **** ---- 410,415 ---- - { - char common[sizeof (struct tree_common)]; -+ struct rtx_def *rtl; /* acts as link to register transfer language -+ (rtl) info */ - HOST_WIDE_INT int_cst_low; - HOST_WIDE_INT int_cst_high; -*************** struct tree_type -*** 957,960 **** ---- 961,967 ---- - #define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag) - -+ /* In a PARM_DECL, nonzero if this is a restricted pointer. */ -+ #define DECL_RESTRICT(NODE) (NODE)->decl.static_ctor_flag -+ - /* Used to indicate that this DECL represents a compiler-generated entity. */ - #define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag) -*************** extern tree build_int_2_wide PROTO((HOS -*** 1176,1180 **** - extern tree build_real PROTO((tree, REAL_VALUE_TYPE)); - extern tree build_real_from_int_cst PROTO((tree, tree)); -! extern tree build_complex PROTO((tree, tree)); - extern tree build_string PROTO((int, char *)); - extern tree build1 PROTO((enum tree_code, tree, tree)); ---- 1183,1187 ---- - extern tree build_real PROTO((tree, REAL_VALUE_TYPE)); - extern tree build_real_from_int_cst PROTO((tree, tree)); -! extern tree build_complex PROTO((tree, tree, tree)); - extern tree build_string PROTO((int, char *)); - extern tree build1 PROTO((enum tree_code, tree, tree)); -*************** extern int contains_placeholder_p PROTO( -*** 1378,1387 **** - extern tree substitute_in_expr PROTO((tree, tree, tree)); - -- /* Given a type T, a FIELD_DECL F, and a replacement value R, -- return a new type with all size expressions that contain F -- updated by replacing the reference to F with R. */ -- -- extern tree substitute_in_type PROTO((tree, tree, tree)); -- - /* variable_size (EXP) is like save_expr (EXP) except that it - is for the special case of something that is part of a ---- 1385,1388 ---- -*************** extern tree maybe_build_cleanup PROTO(( -*** 1456,1460 **** - and find the ultimate containing object, which is returned. */ - -! extern tree get_inner_reference PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *)); - - /* Return the FUNCTION_DECL which provides this _DECL with its context, ---- 1457,1463 ---- - and find the ultimate containing object, which is returned. */ - -! extern tree get_inner_reference PROTO((tree, int *, int *, tree *, -! enum machine_mode *, int *, -! int *, int *)); - - /* Return the FUNCTION_DECL which provides this _DECL with its context, -diff -rcp2N gcc-2.7.2.2/unroll.c g77-new/unroll.c -*** gcc-2.7.2.2/unroll.c Sat Aug 19 17:33:26 1995 ---- g77-new/unroll.c Thu Jul 10 20:09:10 1997 -*************** unroll_loop (loop_end, insn_count, loop_ -*** 268,273 **** - structure of the function. This can happen as a result of the - "if (foo) bar; else break;" optimization in jump.c. */ - -! if (write_symbols != NO_DEBUG) - { - int block_begins = 0; ---- 268,277 ---- - structure of the function. This can happen as a result of the - "if (foo) bar; else break;" optimization in jump.c. */ -+ /* ??? Gcc has a general policy that -g is never supposed to change the code -+ that the compiler emits, so we must disable this optimization always, -+ even if debug info is not being output. This is rare, so this should -+ not be a significant performance problem. */ - -! if (1 /* write_symbols != NO_DEBUG */) - { - int block_begins = 0; -*************** unroll_loop (loop_end, insn_count, loop_ -*** 633,636 **** ---- 637,657 ---- - } - -+ if (unroll_type == UNROLL_NAIVE -+ && GET_CODE (last_loop_insn) == JUMP_INSN -+ && start_label != JUMP_LABEL (last_loop_insn)) -+ { -+ /* ??? The loop ends with a conditional branch that does not branch back -+ to the loop start label. In this case, we must emit an unconditional -+ branch to the loop exit after emitting the final branch. -+ copy_loop_body does not have support for this currently, so we -+ give up. It doesn't seem worthwhile to unroll anyways since -+ unrolling would increase the number of branch instructions -+ executed. */ -+ if (loop_dump_stream) -+ fprintf (loop_dump_stream, -+ "Unrolling failure: final conditional branch not to loop start\n"); -+ return; -+ } -+ - /* Allocate a translation table for the labels and insn numbers. - They will be filled in as we copy the insns in the loop. */ -*************** unroll_loop (loop_end, insn_count, loop_ -*** 995,999 **** - for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) - if (local_regno[j]) -! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j])); - - /* The last copy needs the compare/branch insns at the end, ---- 1016,1024 ---- - for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) - if (local_regno[j]) -! { -! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j])); -! record_base_value (REGNO (map->reg_map[j]), -! regno_reg_rtx[j]); -! } - - /* The last copy needs the compare/branch insns at the end, -*************** unroll_loop (loop_end, insn_count, loop_ -*** 1136,1140 **** - for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) - if (local_regno[j]) -! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j])); - - /* If loop starts with a branch to the test, then fix it so that ---- 1161,1169 ---- - for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) - if (local_regno[j]) -! { -! map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j])); -! record_base_value (REGNO (map->reg_map[j]), -! regno_reg_rtx[j]); -! } - - /* If loop starts with a branch to the test, then fix it so that -*************** copy_loop_body (copy_start, copy_end, ma -*** 1605,1608 **** ---- 1634,1641 ---- - int this_giv_inc = INTVAL (giv_inc); - -+ /* If this DEST_ADDR giv was not split, then ignore it. */ -+ if (*tv->location != tv->dest_reg) -+ continue; -+ - /* Scale this_giv_inc if the multiplicative factors of - the two givs are different. */ -*************** copy_loop_body (copy_start, copy_end, ma -*** 1631,1635 **** - incrementing the shared pseudo reg more than - once. */ -! if (! tv->same_insn) - { - /* tv->dest_reg may actually be a (PLUS (REG) ---- 1664,1668 ---- - incrementing the shared pseudo reg more than - once. */ -! if (! tv->same_insn && ! tv->shared) - { - /* tv->dest_reg may actually be a (PLUS (REG) -*************** copy_loop_body (copy_start, copy_end, ma -*** 1757,1760 **** ---- 1790,1794 ---- - giv_dest_reg = tem; - map->reg_map[regno] = tem; -+ record_base_value (REGNO (tem), giv_src_reg); - } - else -*************** iteration_info (iteration_var, initial_v -*** 2220,2231 **** - return; - } -! /* Reject iteration variables larger than the host long size, since they - could result in a number of iterations greater than the range of our -! `unsigned long' variable loop_n_iterations. */ -! else if (GET_MODE_BITSIZE (GET_MODE (iteration_var)) > HOST_BITS_PER_LONG) - { - if (loop_dump_stream) - fprintf (loop_dump_stream, -! "Loop unrolling: Iteration var rejected because mode larger than host long.\n"); - return; - } ---- 2254,2266 ---- - return; - } -! /* Reject iteration variables larger than the host wide int size, since they - could result in a number of iterations greater than the range of our -! `unsigned HOST_WIDE_INT' variable loop_n_iterations. */ -! else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var)) -! > HOST_BITS_PER_WIDE_INT)) - { - if (loop_dump_stream) - fprintf (loop_dump_stream, -! "Loop unrolling: Iteration var rejected because mode too large.\n"); - return; - } -*************** find_splittable_regs (unroll_type, loop_ -*** 2443,2447 **** - { - rtx tem = gen_reg_rtx (bl->biv->mode); -! - emit_insn_before (gen_move_insn (tem, bl->biv->src_reg), - loop_start); ---- 2478,2483 ---- - { - rtx tem = gen_reg_rtx (bl->biv->mode); -! -! record_base_value (REGNO (tem), bl->biv->add_val); - emit_insn_before (gen_move_insn (tem, bl->biv->src_reg), - loop_start); -*************** find_splittable_regs (unroll_type, loop_ -*** 2500,2503 **** ---- 2536,2541 ---- - exits. */ - rtx tem = gen_reg_rtx (bl->biv->mode); -+ record_base_value (REGNO (tem), bl->biv->add_val); -+ - emit_insn_before (gen_move_insn (tem, bl->biv->src_reg), - loop_start); -*************** find_splittable_givs (bl, unroll_type, l -*** 2675,2678 **** ---- 2713,2717 ---- - rtx tem = gen_reg_rtx (bl->biv->mode); - -+ record_base_value (REGNO (tem), bl->biv->add_val); - emit_insn_before (gen_move_insn (tem, bl->biv->src_reg), - loop_start); -*************** find_splittable_givs (bl, unroll_type, l -*** 2716,2719 **** ---- 2755,2759 ---- - { - rtx tem = gen_reg_rtx (v->mode); -+ record_base_value (REGNO (tem), v->add_val); - emit_iv_add_mult (bl->initial_value, v->mult_val, - v->add_val, tem, loop_start); -*************** find_splittable_givs (bl, unroll_type, l -*** 2734,2747 **** - register for the split addr giv, just to be safe. */ - -! /* ??? If there are multiple address givs which have been -! combined with the same dest_reg giv, then we may only need -! one new register for them. Pulling out constants below will -! catch some of the common cases of this. Currently, I leave -! the work of simplifying multiple address givs to the -! following cse pass. */ -! -! /* As a special case, if we have multiple identical address givs -! within a single instruction, then we do use a single pseudo -! reg for both. This is necessary in case one is a match_dup - of the other. */ - ---- 2774,2780 ---- - register for the split addr giv, just to be safe. */ - -! /* If we have multiple identical address givs within a -! single instruction, then use a single pseudo reg for -! both. This is necessary in case one is a match_dup - of the other. */ - -*************** find_splittable_givs (bl, unroll_type, l -*** 2756,2759 **** ---- 2789,2812 ---- - INSN_UID (v->insn)); - } -+ /* If multiple address GIVs have been combined with the -+ same dest_reg GIV, do not create a new register for -+ each. */ -+ else if (unroll_type != UNROLL_COMPLETELY -+ && v->giv_type == DEST_ADDR -+ && v->same && v->same->giv_type == DEST_ADDR -+ && v->same->unrolled -+ #ifdef ADDRESS_COST -+ /* combine_givs_p may return true when ADDRESS_COST is -+ defined even if the multiply and add values are -+ not equal. To share a register here, the values -+ must be equal, as well as related. */ -+ && rtx_equal_p (v->mult_val, v->same->mult_val) -+ && rtx_equal_p (v->add_val, v->same->add_val) -+ #endif -+ ) -+ { -+ v->dest_reg = v->same->dest_reg; -+ v->shared = 1; -+ } - else if (unroll_type != UNROLL_COMPLETELY) - { -*************** find_splittable_givs (bl, unroll_type, l -*** 2761,2765 **** - register to hold the split value of the DEST_ADDR giv. - Emit insn to initialize its value before loop start. */ -! tem = gen_reg_rtx (v->mode); - - /* If the address giv has a constant in its new_reg value, ---- 2814,2821 ---- - register to hold the split value of the DEST_ADDR giv. - Emit insn to initialize its value before loop start. */ -! -! rtx tem = gen_reg_rtx (v->mode); -! record_base_value (REGNO (tem), v->add_val); -! v->unrolled = 1; - - /* If the address giv has a constant in its new_reg value, -*************** find_splittable_givs (bl, unroll_type, l -*** 2772,2781 **** - v->dest_reg - = plus_constant (tem, INTVAL (XEXP (v->new_reg,1))); -! - /* Only succeed if this will give valid addresses. - Try to validate both the first and the last - address resulting from loop unrolling, if - one fails, then can't do const elim here. */ -! if (! verify_addresses (v, giv_inc, unroll_number)) - { - /* Save the negative of the eliminated const, so ---- 2828,2837 ---- - v->dest_reg - = plus_constant (tem, INTVAL (XEXP (v->new_reg,1))); -! - /* Only succeed if this will give valid addresses. - Try to validate both the first and the last - address resulting from loop unrolling, if - one fails, then can't do const elim here. */ -! if (verify_addresses (v, giv_inc, unroll_number)) - { - /* Save the negative of the eliminated const, so -*************** final_biv_value (bl, loop_start, loop_en -*** 3061,3064 **** ---- 3117,3121 ---- - - tem = gen_reg_rtx (bl->biv->mode); -+ record_base_value (REGNO (tem), bl->biv->add_val); - /* Make sure loop_end is not the last insn. */ - if (NEXT_INSN (loop_end) == 0) -*************** final_giv_value (v, loop_start, loop_end -*** 3154,3157 **** ---- 3211,3215 ---- - /* Put the final biv value in tem. */ - tem = gen_reg_rtx (bl->biv->mode); -+ record_base_value (REGNO (tem), bl->biv->add_val); - emit_iv_add_mult (increment, GEN_INT (loop_n_iterations), - bl->initial_value, tem, insert_before); -diff -rcp2N gcc-2.7.2.2/varasm.c g77-new/varasm.c -*** gcc-2.7.2.2/varasm.c Thu Aug 31 19:02:53 1995 ---- g77-new/varasm.c Sun Aug 10 22:26:32 1997 -*************** assemble_variable (decl, top_level, at_e -*** 1067,1070 **** ---- 1067,1072 ---- - if (! dont_output_data) - { -+ int size; -+ - if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST) - goto finish; -*************** assemble_variable (decl, top_level, at_e -*** 1072,1078 **** - /* This is better than explicit arithmetic, since it avoids overflow. */ - size_tree = size_binop (CEIL_DIV_EXPR, -! DECL_SIZE (decl), size_int (BITS_PER_UNIT)); - -! if (TREE_INT_CST_HIGH (size_tree) != 0) - { - error_with_decl (decl, "size of variable `%s' is too large"); ---- 1074,1082 ---- - /* This is better than explicit arithmetic, since it avoids overflow. */ - size_tree = size_binop (CEIL_DIV_EXPR, -! DECL_SIZE (decl), size_int (BITS_PER_UNIT)); - -! size = TREE_INT_CST_LOW (size_tree); -! if (TREE_INT_CST_HIGH (size_tree) != 0 -! || size != TREE_INT_CST_LOW (size_tree)) - { - error_with_decl (decl, "size of variable `%s' is too large"); -*************** decode_addr_const (exp, value) -*** 2132,2135 **** ---- 2136,2140 ---- - case COMPLEX_CST: - case CONSTRUCTOR: -+ case INTEGER_CST: - x = TREE_CST_RTL (target); - break; -*************** const_hash (exp) -*** 2247,2251 **** - return const_hash (TREE_OPERAND (exp, 0)) * 9 - + const_hash (TREE_OPERAND (exp, 1)); -! else if (code == NOP_EXPR || code == CONVERT_EXPR) - return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2; - ---- 2252,2256 ---- - return const_hash (TREE_OPERAND (exp, 0)) * 9 - + const_hash (TREE_OPERAND (exp, 1)); -! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR) - return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2; - -*************** compare_constant_1 (exp, p) -*** 2401,2405 **** - return p; - } -! else if (code == NOP_EXPR || code == CONVERT_EXPR) - { - p = compare_constant_1 (TREE_OPERAND (exp, 0), p); ---- 2406,2410 ---- - return p; - } -! else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR) - { - p = compare_constant_1 (TREE_OPERAND (exp, 0), p); -*************** copy_constant (exp) -*** 2633,2637 **** - - case COMPLEX_CST: -! return build_complex (copy_constant (TREE_REALPART (exp)), - copy_constant (TREE_IMAGPART (exp))); - ---- 2638,2643 ---- - - case COMPLEX_CST: -! return build_complex (TREE_TYPE (exp), -! copy_constant (TREE_REALPART (exp)), - copy_constant (TREE_IMAGPART (exp))); - -*************** copy_constant (exp) -*** 2644,2647 **** ---- 2650,2654 ---- - case NOP_EXPR: - case CONVERT_EXPR: -+ case NON_LVALUE_EXPR: - return build1 (TREE_CODE (exp), TREE_TYPE (exp), - copy_constant (TREE_OPERAND (exp, 0))); -*************** output_constant_def (exp) -*** 2690,2696 **** - register rtx def; - -- if (TREE_CODE (exp) == INTEGER_CST) -- abort (); /* No TREE_CST_RTL slot in these. */ -- - if (TREE_CST_RTL (exp)) - return TREE_CST_RTL (exp); ---- 2697,2700 ---- -*************** bc_assemble_integer (exp, size) -*** 3620,3624 **** - exp = fold (exp); - -! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR) - exp = TREE_OPERAND (exp, 0); - if (TREE_CODE (exp) == INTEGER_CST) ---- 3624,3629 ---- - exp = fold (exp); - -! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR -! || TREE_CODE (exp) == NON_LVALUE_EXPR) - exp = TREE_OPERAND (exp, 0); - if (TREE_CODE (exp) == INTEGER_CST) -*************** bc_assemble_integer (exp, size) -*** 3631,3639 **** - const_part = TREE_OPERAND (exp, 0); - while (TREE_CODE (const_part) == NOP_EXPR -! || TREE_CODE (const_part) == CONVERT_EXPR) - const_part = TREE_OPERAND (const_part, 0); - addr_part = TREE_OPERAND (exp, 1); - while (TREE_CODE (addr_part) == NOP_EXPR -! || TREE_CODE (addr_part) == CONVERT_EXPR) - addr_part = TREE_OPERAND (addr_part, 0); - if (TREE_CODE (const_part) != INTEGER_CST) ---- 3636,3646 ---- - const_part = TREE_OPERAND (exp, 0); - while (TREE_CODE (const_part) == NOP_EXPR -! || TREE_CODE (const_part) == CONVERT_EXPR -! || TREE_CODE (const_part) == NON_LVALUE_EXPR) - const_part = TREE_OPERAND (const_part, 0); - addr_part = TREE_OPERAND (exp, 1); - while (TREE_CODE (addr_part) == NOP_EXPR -! || TREE_CODE (addr_part) == CONVERT_EXPR -! || TREE_CODE (addr_part) == NON_LVALUE_EXPR) - addr_part = TREE_OPERAND (addr_part, 0); - if (TREE_CODE (const_part) != INTEGER_CST) -diff -rcp2N gcc-2.7.2.2/version.c g77-new/version.c -*** gcc-2.7.2.2/version.c Thu Feb 20 19:24:33 1997 ---- g77-new/version.c Sun Aug 10 19:28:55 1997 -*************** -*** 1 **** -! char *version_string = "2.7.2.2"; ---- 1 ---- -! char *version_string = "2.7.2.2.f.3b"; diff --git a/gcc/f/intdoc.h b/gcc/f/intdoc.h deleted file mode 100644 index 58b4007f7d5..00000000000 --- a/gcc/f/intdoc.h +++ /dev/null @@ -1,2370 +0,0 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. - * This is part of the G77 manual. - * For copying conditions, see the file g77.texi. */ - -/* This is the file containing the verbage for the - intrinsics. It consists of a data base built up - via DEFDOC macros of the form: - - DEFDOC (IMP, SUMMARY, DESCRIPTION) - - IMP is the implementation keyword used in the intrin module. - SUMMARY is the short summary to go in the "* Menu:" section - of the Info document. DESCRIPTION is the longer description - to go in the documentation itself. - - Note that IMP is leveraged across multiple intrinsic names. - - To make for more accurate and consistent documentation, - the translation made by intdoc.c of the text in SUMMARY - and DESCRIPTION includes the special sequence - - @ARGNO@ - - where ARGNO is a series of digits forming a number that - is substituted by intdoc.c as follows: - - 0 The initial-caps form of the intrinsic name (e.g. Float). - 1-98 The initial-caps form of the ARGNO'th argument. - 99 (SUMMARY only) a newline plus the appropriate # of spaces. - - Hope this info is enough to encourage people to feel free to - add documentation to this file! - -*/ - -/* ~~~~~ to do: - ALARM -*/ - -#define ARCHAIC(upper,mixed) \ - "Archaic form of @code{" #upper "()} that is specific\n\ -to one type for @var{@1@}.\n\ -@xref{" #mixed " Intrinsic}.\n" - -#define ARCHAIC_2nd(upper,mixed) \ - "Archaic form of @code{" #upper "()} that is specific\n\ -to one type for @var{@2@}.\n\ -@xref{" #mixed " Intrinsic}.\n" - -#define ARCHAIC_2(upper,mixed) \ - "Archaic form of @code{" #upper "()} that is specific\n\ -to one type for @var{@1@} and @var{@2@}.\n\ -@xref{" #mixed " Intrinsic}.\n" - -DEFDOC (ABS, "Absolute value.", "\ -Returns the absolute value of @var{@1@}. - -If @var{@1@} is type @code{COMPLEX}, the absolute -value is computed as: - -@example -SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2) -@end example - -@noindent -Otherwise, it is computed by negating the @var{@1@} if -it is negative, or returning @var{@1@}. - -@xref{Sign Intrinsic}, for how to explicitly -compute the positive or negative form of the absolute -value of an expression. -") - -DEFDOC (CABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs)) - -DEFDOC (DABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs)) - -DEFDOC (IABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs)) - -DEFDOC (CDABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs)) - -DEFDOC (ACHAR, "ASCII character from code.", "\ -Returns the ASCII character corresponding to the -code specified by @var{@1@}. - -@xref{IAChar Intrinsic}, for the inverse of this function. - -@xref{Char Intrinsic}, for the function corresponding -to the system's native character set. -") - -DEFDOC (IACHAR, "ASCII code for character.", "\ -Returns the code for the ASCII character in the -first character position of @var{@1@}. - -@xref{AChar Intrinsic}, for the inverse of this function. - -@xref{IChar Intrinsic}, for the function corresponding -to the system's native character set. -") - -DEFDOC (CHAR, "Character from code.", "\ -Returns the character corresponding to the -code specified by @var{@1@}, using the system's -native character set. - -Because the system's native character set is used, -the correspondence between character and their codes -is not necessarily the same between GNU Fortran -implementations. - -Note that no intrinsic exists to convert a numerical -value to a printable character string. -For example, there is no intrinsic that, given -an @code{INTEGER} or @code{REAL} argument with the -value @samp{154}, returns the @code{CHARACTER} -result @samp{'154'}. - -Instead, you can use internal-file I/O to do this kind -of conversion. -For example: - -@smallexample -INTEGER VALUE -CHARACTER*10 STRING -VALUE = 154 -WRITE (STRING, '(I10)'), VALUE -PRINT *, STRING -END -@end smallexample - -The above program, when run, prints: - -@smallexample - 154 -@end smallexample - -@xref{IChar Intrinsic}, for the inverse of the @code{@0@} function. - -@xref{AChar Intrinsic}, for the function corresponding -to the ASCII character set. -") - -DEFDOC (ICHAR, "Code for character.", "\ -Returns the code for the character in the -first character position of @var{@1@}. - -Because the system's native character set is used, -the correspondence between character and their codes -is not necessarily the same between GNU Fortran -implementations. - -Note that no intrinsic exists to convert a printable -character string to a numerical value. -For example, there is no intrinsic that, given -the @code{CHARACTER} value @samp{'154'}, returns an -@code{INTEGER} or @code{REAL} value with the value @samp{154}. - -Instead, you can use internal-file I/O to do this kind -of conversion. -For example: - -@smallexample -INTEGER VALUE -CHARACTER*10 STRING -STRING = '154' -READ (STRING, '(I10)'), VALUE -PRINT *, VALUE -END -@end smallexample - -The above program, when run, prints: - -@smallexample - 154 -@end smallexample - -@xref{Char Intrinsic}, for the inverse of the @code{@0@} function. - -@xref{IAChar Intrinsic}, for the function corresponding -to the ASCII character set. -") - -DEFDOC (ACOS, "Arc cosine.", "\ -Returns the arc-cosine (inverse cosine) of @var{@1@} -in radians. - -@xref{Cos Intrinsic}, for the inverse of this function. -") - -DEFDOC (DACOS, "Arc cosine (archaic).", ARCHAIC (ACOS, ACos)) - -DEFDOC (AIMAG, "Convert/extract imaginary part of complex.", "\ -Returns the (possibly converted) imaginary part of @var{@1@}. - -Use of @code{@0@()} with an argument of a type -other than @code{COMPLEX(KIND=1)} is restricted to the following case: - -@example -REAL(AIMAG(@1@)) -@end example - -@noindent -This expression converts the imaginary part of @1@ to -@code{REAL(KIND=1)}. - -@xref{REAL() and AIMAG() of Complex}, for more information. -") - -DEFDOC (DIMAG, "Convert/extract imaginary part of complex (archaic).", ARCHAIC (AIMAG, AImag)) - -DEFDOC (AINT, "Truncate to whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude truncated and its sign preserved. -(Also called ``truncation towards zero''.) - -@xref{ANInt Intrinsic}, for how to round to nearest -whole number. - -@xref{Int Intrinsic}, for how to truncate and then convert -number to @code{INTEGER}. -") - -DEFDOC (DINT, "Truncate to whole number (archaic).", ARCHAIC (AINT, AInt)) - -DEFDOC (INT, "Convert to @code{INTEGER} value truncated@99@to whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude truncated and its sign preserved, converted -to type @code{INTEGER(KIND=1)}. - -If @var{@1@} is type @code{COMPLEX}, its real part is -truncated and converted, and its imaginary part is disregarded. - -@xref{NInt Intrinsic}, for how to convert, rounded to nearest -whole number. - -@xref{AInt Intrinsic}, for how to truncate to whole number -without converting. -") - -DEFDOC (IDINT, "Convert to @code{INTEGER} value truncated@99@to whole number (archaic).", ARCHAIC (INT, Int)) - -DEFDOC (ANINT, "Round to nearest whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude eliminated by rounding to the nearest whole -number and with its sign preserved. - -A fractional portion exactly equal to -@samp{.5} is rounded to the whole number that -is larger in magnitude. -(Also called ``Fortran round''.) - -@xref{AInt Intrinsic}, for how to truncate to -whole number. - -@xref{NInt Intrinsic}, for how to round and then convert -number to @code{INTEGER}. -") - -DEFDOC (DNINT, "Round to nearest whole number (archaic).", ARCHAIC (ANINT, ANInt)) - -DEFDOC (NINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude eliminated by rounding to the nearest whole -number and with its sign preserved, converted -to type @code{INTEGER(KIND=1)}. - -If @var{@1@} is type @code{COMPLEX}, its real part is -rounded and converted. - -A fractional portion exactly equal to -@samp{.5} is rounded to the whole number that -is larger in magnitude. -(Also called ``Fortran round''.) - -@xref{Int Intrinsic}, for how to convert, truncate to -whole number. - -@xref{ANInt Intrinsic}, for how to round to nearest whole number -without converting. -") - -DEFDOC (IDNINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number (archaic).", ARCHAIC (NINT, NInt)) - -DEFDOC (LOG, "Natural logarithm.", "\ -Returns the natural logarithm of @var{@1@}, which must -be greater than zero or, if type @code{COMPLEX}, must not -be zero. - -@xref{Exp Intrinsic}, for the inverse of this function. - -@xref{Log10 Intrinsic}, for the base-10 logarithm function. -") - -DEFDOC (ALOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) - -DEFDOC (CLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) - -DEFDOC (DLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) - -DEFDOC (CDLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log)) - -DEFDOC (LOG10, "Natural logarithm.", "\ -Returns the natural logarithm of @var{@1@}, which must -be greater than zero or, if type @code{COMPLEX}, must not -be zero. - -The inverse of this function is @samp{10. ** LOG10(@var{@1@})}. - -@xref{Log Intrinsic}, for the natural logarithm function. -") - -DEFDOC (ALOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10)) - -DEFDOC (DLOG10, "Natural logarithm (archaic).", ARCHAIC (LOG10, Log10)) - -DEFDOC (MAX, "Maximum value.", "\ -Returns the argument with the largest value. - -@xref{Min Intrinsic}, for the opposite function. -") - -DEFDOC (AMAX0, "Maximum value (archaic).", "\ -Archaic form of @code{MAX()} that is specific -to one type for @var{@1@} and a different return type. -@xref{Max Intrinsic}. -") - -DEFDOC (AMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max)) - -DEFDOC (DMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max)) - -DEFDOC (MAX0, "Maximum value (archaic).", ARCHAIC (MAX, Max)) - -DEFDOC (MAX1, "Maximum value (archaic).", "\ -Archaic form of @code{MAX()} that is specific -to one type for @var{@1@} and a different return type. -@xref{Max Intrinsic}. -") - -DEFDOC (MIN, "Minimum value.", "\ -Returns the argument with the smallest value. - -@xref{Max Intrinsic}, for the opposite function. -") - -DEFDOC (AMIN0, "Minimum value (archaic).", "\ -Archaic form of @code{MIN()} that is specific -to one type for @var{@1@} and a different return type. -@xref{Min Intrinsic}. -") - -DEFDOC (AMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min)) - -DEFDOC (DMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min)) - -DEFDOC (MIN0, "Minimum value (archaic).", ARCHAIC (MIN, Min)) - -DEFDOC (MIN1, "Minimum value (archaic).", "\ -Archaic form of @code{MIN()} that is specific -to one type for @var{@1@} and a different return type. -@xref{Min Intrinsic}. -") - -DEFDOC (MOD, "Remainder.", "\ -Returns remainder calculated as: - -@smallexample -@var{@1@} - (INT(@var{@1@} / @var{@2@}) * @var{@2@}) -@end smallexample - -@var{@2@} must not be zero. -") - -DEFDOC (AMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod)) - -DEFDOC (DMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod)) - -DEFDOC (AND, "Boolean AND.", "\ -Returns value resulting from boolean AND of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (IAND, "Boolean AND.", "\ -Returns value resulting from boolean AND of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (OR, "Boolean OR.", "\ -Returns value resulting from boolean OR of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (IOR, "Boolean OR.", "\ -Returns value resulting from boolean OR of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (XOR, "Boolean XOR.", "\ -Returns value resulting from boolean exclusive-OR of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (IEOR, "Boolean XOR.", "\ -Returns value resulting from boolean exclusive-OR of -pair of bits in each of @var{@1@} and @var{@2@}. -") - -DEFDOC (NOT, "Boolean NOT.", "\ -Returns value resulting from boolean NOT of each bit -in @var{@1@}. -") - -DEFDOC (ASIN, "Arc sine.", "\ -Returns the arc-sine (inverse sine) of @var{@1@} -in radians. - -@xref{Sin Intrinsic}, for the inverse of this function. -") - -DEFDOC (DASIN, "Arc sine (archaic).", ARCHAIC (ASIN, ASin)) - -DEFDOC (ATAN, "Arc tangent.", "\ -Returns the arc-tangent (inverse tangent) of @var{@1@} -in radians. - -@xref{Tan Intrinsic}, for the inverse of this function. -") - -DEFDOC (DATAN, "Arc tangent (archaic).", ARCHAIC (ATAN, ATan)) - -DEFDOC (ATAN2, "Arc tangent.", "\ -Returns the arc-tangent (inverse tangent) of the complex -number (@var{@1@}, @var{@2@}) in radians. - -@xref{Tan Intrinsic}, for the inverse of this function. -") - -DEFDOC (DATAN2, "Arc tangent (archaic).", ARCHAIC_2 (ATAN2, ATan2)) - -DEFDOC (BIT_SIZE, "Number of bits in argument's type.", "\ -Returns the number of bits (integer precision plus sign bit) -represented by the type for @var{@1@}. - -@xref{BTest Intrinsic}, for how to test the value of a -bit in a variable or array. - -@xref{IBSet Intrinsic}, for how to set a bit in a variable to 1. - -@xref{IBClr Intrinsic}, for how to set a bit in a variable to 0. - -") - -DEFDOC (BTEST, "Test bit.", "\ -Returns @code{.TRUE.} if bit @var{@2@} in @var{@1@} is -1, @code{.FALSE.} otherwise. - -(Bit 0 is the low-order (rightmost) bit, adding the value -@ifinfo -2**0, -@end ifinfo -@iftex -@tex -$2^0$, -@end tex -@end iftex -or 1, -to the number if set to 1; -bit 1 is the next-higher-order bit, adding -@ifinfo -2**1, -@end ifinfo -@iftex -@tex -$2^1$, -@end tex -@end iftex -or 2; -bit 2 adds -@ifinfo -2**2, -@end ifinfo -@iftex -@tex -$2^2$, -@end tex -@end iftex -or 4; and so on.) - -@xref{Bit_Size Intrinsic}, for how to obtain the number of bits -in a type. -The leftmost bit of @var{@1@} is @samp{BIT_SIZE(@var{@1@}-1}. -") - -DEFDOC (CMPLX, "Construct @code{COMPLEX(KIND=1)} value.", "\ -If @var{@1@} is not type @code{COMPLEX}, -constructs a value of type @code{COMPLEX(KIND=1)} from the -real and imaginary values specified by @var{@1@} and -@var{@2@}, respectively. -If @var{@2@} is omitted, @samp{0.} is assumed. - -If @var{@1@} is type @code{COMPLEX}, -converts it to type @code{COMPLEX(KIND=1)}. - -@xref{Complex Intrinsic}, for information on easily constructing -a @code{COMPLEX} value of arbitrary precision from @code{REAL} -arguments. -") - -DEFDOC (DCMPLX, "Construct @code{COMPLEX(KIND=2)} value.", "\ -If @var{@1@} is not type @code{COMPLEX}, -constructs a value of type @code{COMPLEX(KIND=2)} from the -real and imaginary values specified by @var{@1@} and -@var{@2@}, respectively. -If @var{@2@} is omitted, @samp{0D0} is assumed. - -If @var{@1@} is type @code{COMPLEX}, -converts it to type @code{COMPLEX(KIND=2)}. - -Although this intrinsic is not standard Fortran, -it is a popular extension offered by many compilers -that support @code{DOUBLE COMPLEX}, since it offers -the easiest way to convert to @code{DOUBLE COMPLEX} -without using Fortran 90 features (such as the @samp{KIND=} -argument to the @code{CMPLX()} intrinsic). - -(@samp{CMPLX(0D0, 0D0)} returns a single-precision -@code{COMPLEX} result, as required by standard FORTRAN 77. -That's why so many compilers provide @code{DCMPLX()}, since -@samp{DCMPLX(0D0, 0D0)} returns a @code{DOUBLE COMPLEX} -result. -Still, @code{DCMPLX()} converts even @code{REAL*16} arguments -to their @code{REAL*8} equivalents in most dialects of -Fortran, so neither it nor @code{CMPLX()} allow easy -construction of arbitrary-precision values without -potentially forcing a conversion involving extending or -reducing precision. -GNU Fortran provides such an intrinsic, called @code{COMPLEX()}.) - -@xref{Complex Intrinsic}, for information on easily constructing -a @code{COMPLEX} value of arbitrary precision from @code{REAL} -arguments. -") - -DEFDOC (CONJG, "Complex conjugate.", "\ -Returns the complex conjugate: - -@example -COMPLEX(REALPART(@var{@1@}), -IMAGPART(@var{@1@})) -@end example -") - -DEFDOC (DCONJG, "Complex conjugate (archaic).", ARCHAIC (CONJG, ATan2)) - -DEFDOC (COS, "Cosine.", "\ -Returns the cosine of @var{@1@}, an angle measured -in radians. - -@xref{ACos Intrinsic}, for the inverse of this function. -") - -DEFDOC (CCOS, "Cosine (archaic).", ARCHAIC (COS, Cos)) - -DEFDOC (DCOS, "Cosine (archaic).", ARCHAIC (COS, Cos)) - -DEFDOC (CDCOS, "Cosine (archaic).", ARCHAIC (COS, Cos)) - -DEFDOC (COSH, "Hyperbolic cosine.", "\ -Returns the hyperbolic cosine of @var{@1@}. -") - -DEFDOC (DCOSH, "Hyperbolic cosine (archaic).", ARCHAIC (COSH, CosH)) - -DEFDOC (SQRT, "Square root.", "\ -Returns the square root of @var{@1@}, which must -not be negative. - -To calculate and represent the square root of a negative -number, complex arithmetic must be used. -For example, @samp{SQRT(COMPLEX(@var{@1@}))}. - -The inverse of this function is @samp{SQRT(@var{@1@}) * SQRT(@var{@1@})}. -") - -DEFDOC (CSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt)) - -DEFDOC (DSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt)) - -DEFDOC (CDSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt)) - -DEFDOC (DBLE, "Convert to double precision.", "\ -Returns @var{@1@} converted to double precision -(@code{REAL(KIND=2)}). -If @var{@1@} is @code{COMPLEX}, the real part of -@var{@1@} is used for the conversion -and the imaginary part disregarded. - -@xref{Sngl Intrinsic}, for the function that converts -to single precision. - -@xref{Int Intrinsic}, for the function that converts -to @code{INTEGER}. - -@xref{Complex Intrinsic}, for the function that converts -to @code{COMPLEX}. -") - -DEFDOC (DIM, "Difference magnitude (non-negative subtract).", "\ -Returns @samp{@var{@1@}-@var{@2@}} if @var{@1@} is greater than -@var{@2@}; otherwise returns zero. -") - -DEFDOC (DDIM, "Difference magnitude (archaic).", ARCHAIC_2 (DIM, DiM)) -DEFDOC (IDIM, "Difference magnitude (archaic).", ARCHAIC_2 (IDIM, IDiM)) - -DEFDOC (DPROD, "Double-precision product.", "\ -Returns @samp{DBLE(@var{@1@})*DBLE(@var{@2@})}. -") - -DEFDOC (EXP, "Exponential.", "\ -Returns @samp{@var{e}**@var{@1@}}, where -@var{e} is approximately 2.7182818. - -@xref{Log Intrinsic}, for the inverse of this function. -") - -DEFDOC (CEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp)) - -DEFDOC (DEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp)) - -DEFDOC (CDEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp)) - -DEFDOC (FLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real)) -DEFDOC (DFLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real)) - -DEFDOC (IFIX, "Conversion (archaic).", ARCHAIC (INT, Int)) - -DEFDOC (LONG, "Conversion to @code{INTEGER(KIND=1)} (archaic).", "\ -Archaic form of @code{INT()} that is specific -to one type for @var{@1@}. -@xref{Int Intrinsic}. - -The precise meaning of this intrinsic might change -in a future version of the GNU Fortran language, -as more is learned about how it is used. -") - -DEFDOC (SHORT, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude truncated and its sign preserved, converted -to type @code{INTEGER(KIND=6)}. - -If @var{@1@} is type @code{COMPLEX}, its real part -is truncated and converted, and its imaginary part is disgregarded. - -@xref{Int Intrinsic}. - -The precise meaning of this intrinsic might change -in a future version of the GNU Fortran language, -as more is learned about how it is used. -") - -DEFDOC (INT2, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude truncated and its sign preserved, converted -to type @code{INTEGER(KIND=6)}. - -If @var{@1@} is type @code{COMPLEX}, its real part -is truncated and converted, and its imaginary part is disgregarded. - -@xref{Int Intrinsic}. - -The precise meaning of this intrinsic might change -in a future version of the GNU Fortran language, -as more is learned about how it is used. -") - -DEFDOC (INT8, "Convert to @code{INTEGER(KIND=2)} value@99@truncated to whole number.", "\ -Returns @var{@1@} with the fractional portion of its -magnitude truncated and its sign preserved, converted -to type @code{INTEGER(KIND=2)}. - -If @var{@1@} is type @code{COMPLEX}, its real part -is truncated and converted, and its imaginary part is disgregarded. - -@xref{Int Intrinsic}. - -The precise meaning of this intrinsic might change -in a future version of the GNU Fortran language, -as more is learned about how it is used. -") - -DEFDOC (LEN, "Length of character entity.", "\ -Returns the length of @var{@1@}. - -If @var{@1@} is an array, the length of an element -of @var{@1@} is returned. - -Note that @var{@1@} need not be defined when this -intrinsic is invoked, since only the length, not -the content, of @var{@1@} is needed. - -@xref{Bit_Size Intrinsic}, for the function that determines -the size of its argument in bits. -") - -DEFDOC (TAN, "Tangent.", "\ -Returns the tangent of @var{@1@}, an angle measured -in radians. - -@xref{ATan Intrinsic}, for the inverse of this function. -") - -DEFDOC (DTAN, "Tangent (archaic).", ARCHAIC (TAN, Tan)) - -DEFDOC (TANH, "Hyperbolic tangent.", "\ -Returns the hyperbolic tangent of @var{@1@}. -") - -DEFDOC (DTANH, "Hyperbolic tangent (archaic).", ARCHAIC (TANH, TanH)) - -DEFDOC (SNGL, "Convert (archaic).", ARCHAIC (REAL, Real)) - -DEFDOC (SIN, "Sine.", "\ -Returns the sine of @var{@1@}, an angle measured -in radians. - -@xref{ASin Intrinsic}, for the inverse of this function. -") - -DEFDOC (CSIN, "Sine (archaic).", ARCHAIC (SIN, Sin)) - -DEFDOC (DSIN, "Sine (archaic).", ARCHAIC (SIN, Sin)) - -DEFDOC (CDSIN, "Sine (archaic).", ARCHAIC (SIN, Sin)) - -DEFDOC (SINH, "Hyperbolic sine.", "\ -Returns the hyperbolic sine of @var{@1@}. -") - -DEFDOC (DSINH, "Hyperbolic sine (archaic).", ARCHAIC (SINH, SinH)) - -DEFDOC (LSHIFT, "Left-shift bits.", "\ -Returns @var{@1@} shifted to the left -@var{@2@} bits. - -Although similar to the expression -@samp{@var{@1@}*(2**@var{@2@})}, there -are important differences. -For example, the sign of the result is -not necessarily the same as the sign of -@var{@1@}. - -Currently this intrinsic is defined assuming -the underlying representation of @var{@1@} -is as a two's-complement integer. -It is unclear at this point whether that -definition will apply when a different -representation is involved. - -@xref{LShift Intrinsic}, for the inverse of this function. - -@xref{IShft Intrinsic}, for information -on a more widely available left-shifting -intrinsic that is also more precisely defined. -") - -DEFDOC (RSHIFT, "Right-shift bits.", "\ -Returns @var{@1@} shifted to the right -@var{@2@} bits. - -Although similar to the expression -@samp{@var{@1@}/(2**@var{@2@})}, there -are important differences. -For example, the sign of the result is -undefined. - -Currently this intrinsic is defined assuming -the underlying representation of @var{@1@} -is as a two's-complement integer. -It is unclear at this point whether that -definition will apply when a different -representation is involved. - -@xref{RShift Intrinsic}, for the inverse of this function. - -@xref{IShft Intrinsic}, for information -on a more widely available right-shifting -intrinsic that is also more precisely defined. -") - -DEFDOC (LGE, "Lexically greater than or equal.", "\ -Returns @samp{.TRUE.} if @samp{@var{@1@}.GE.@var{@2@}}, -@samp{.FALSE.} otherwise. -@var{@1@} and @var{@2@} are interpreted as containing -ASCII character codes. -If either value contains a character not in the ASCII -character set, the result is processor dependent. - -If the @var{@1@} and @var{@2@} are not the same length, -the shorter is compared as if spaces were appended to -it to form a value that has the same length as the longer. - -The lexical comparison intrinsics @code{LGe}, @code{LGt}, -@code{LLe}, and @code{LLt} differ from the corresponding -intrinsic operators @code{.GE.}, @code{.GT.}, -@code{.LE.}, @code{.LT.}. -Because the ASCII collating sequence is assumed, -the following expressions always return @samp{.TRUE.}: - -@smallexample -LGE ('0', ' ') -LGE ('A', '0') -LGE ('a', 'A') -@end smallexample - -The following related expressions do @emph{not} always -return @samp{.TRUE.}, as they are not necessarily evaluated -assuming the arguments use ASCII encoding: - -@smallexample -'0' .GE. ' ' -'A' .GE. '0' -'a' .GE. 'A' -@end smallexample - -The same difference exists -between @code{LGt} and @code{.GT.}; -between @code{LLe} and @code{.LE.}; and -between @code{LLt} and @code{.LT.}. -") - -DEFDOC (LGT, "Lexically greater than.", "\ -Returns @samp{.TRUE.} if @samp{@var{@1@}.GT.@var{@2@}}, -@samp{.FALSE.} otherwise. -@var{@1@} and @var{@2@} are interpreted as containing -ASCII character codes. -If either value contains a character not in the ASCII -character set, the result is processor dependent. - -If the @var{@1@} and @var{@2@} are not the same length, -the shorter is compared as if spaces were appended to -it to form a value that has the same length as the longer. - -@xref{LGe Intrinsic}, for information on the distinction -between the @code{@0@} intrinsic and the @code{.GT.} -operator. -") - -DEFDOC (LLE, "Lexically less than or equal.", "\ -Returns @samp{.TRUE.} if @samp{@var{@1@}.LE.@var{@2@}}, -@samp{.FALSE.} otherwise. -@var{@1@} and @var{@2@} are interpreted as containing -ASCII character codes. -If either value contains a character not in the ASCII -character set, the result is processor dependent. - -If the @var{@1@} and @var{@2@} are not the same length, -the shorter is compared as if spaces were appended to -it to form a value that has the same length as the longer. - -@xref{LGe Intrinsic}, for information on the distinction -between the @code{@0@} intrinsic and the @code{.LE.} -operator. -") - -DEFDOC (LLT, "Lexically less than.", "\ -Returns @samp{.TRUE.} if @samp{@var{@1@}.LT.@var{@2@}}, -@samp{.FALSE.} otherwise. -@var{@1@} and @var{@2@} are interpreted as containing -ASCII character codes. -If either value contains a character not in the ASCII -character set, the result is processor dependent. - -If the @var{@1@} and @var{@2@} are not the same length, -the shorter is compared as if spaces were appended to -it to form a value that has the same length as the longer. - -@xref{LGe Intrinsic}, for information on the distinction -between the @code{@0@} intrinsic and the @code{.LT.} -operator. -") - -DEFDOC (SIGN, "Apply sign to magnitude.", "\ -Returns @samp{ABS(@var{@1@})*@var{s}}, where -@var{s} is +1 if @samp{@var{@2@}.GE.0}, --1 otherwise. - -@xref{Abs Intrinsic}, for the function that returns -the magnitude of a value. -") - -DEFDOC (DSIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (SIGN, Sign)) -DEFDOC (ISIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (ISIGN, ISign)) - -DEFDOC (REAL, "Convert value to type @code{REAL(KIND=1)}.", "\ -Converts @var{@1@} to @code{REAL(KIND=1)}. - -Use of @code{@0@()} with a @code{COMPLEX} argument -(other than @code{COMPLEX(KIND=1)}) is restricted to the following case: - -@example -REAL(REAL(@1@)) -@end example - -@noindent -This expression converts the real part of @1@ to -@code{REAL(KIND=1)}. - -@xref{RealPart Intrinsic}, for information on a GNU Fortran -intrinsic that extracts the real part of an arbitrary -@code{COMPLEX} value. - -@xref{REAL() and AIMAG() of Complex}, for more information. -") - -DEFDOC (DREAL, "Convert value to type @code{REAL(KIND=2)}.", "\ -Converts @var{@1@} to @code{REAL(KIND=2)}. - -If @var{@1@} is type @code{COMPLEX}, its real part -is converted (if necessary) to @code{REAL(KIND=2)}, -and its imaginary part is disregarded. - -Although this intrinsic is not standard Fortran, -it is a popular extension offered by many compilers -that support @code{DOUBLE COMPLEX}, since it offers -the easiest way to extract the real part of a @code{DOUBLE COMPLEX} -value without using the Fortran 90 @code{REAL()} intrinsic -in a way that produces a return value inconsistent with -the way many FORTRAN 77 compilers handle @code{REAL()} of -a @code{DOUBLE COMPLEX} value. - -@xref{RealPart Intrinsic}, for information on a GNU Fortran -intrinsic that avoids these areas of confusion. - -@xref{REAL() and AIMAG() of Complex}, for more information on -this issue. -") - -DEFDOC (IMAGPART, "Extract imaginary part of complex.", "\ -The imaginary part of @var{@1@} is returned, without conversion. - -@emph{Note:} The way to do this in standard Fortran 90 -is @samp{AIMAG(@var{@1@})}. -However, when, for example, @var{@1@} is @code{DOUBLE COMPLEX}, -@samp{AIMAG(@var{@1@})} means something different for some compilers -that are not true Fortran 90 compilers but offer some -extensions standardized by Fortran 90 (such as the -@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}). - -The advantage of @code{@0@()} is that, while not necessarily -more or less portable than @code{AIMAG()}, it is more likely to -cause a compiler that doesn't support it to produce a diagnostic -than generate incorrect code. - -@xref{REAL() and AIMAG() of Complex}, for more information. -") - -DEFDOC (COMPLEX, "Build complex value from real and@99@imaginary parts.", "\ -Returns a @code{COMPLEX} value that has @samp{@1@} and @samp{@2@} as its -real and imaginary parts, respectively. - -If @var{@1@} and @var{@2@} are the same type, and that type is not -@code{INTEGER}, no data conversion is performed, and the type of -the resulting value has the same kind value as the types -of @var{@1@} and @var{@2@}. - -If @var{@1@} and @var{@2@} are not the same type, the usual type-promotion -rules are applied to both, converting either or both to the -appropriate @code{REAL} type. -The type of the resulting value has the same kind value as the -type to which both @var{@1@} and @var{@2@} were converted, in this case. - -If @var{@1@} and @var{@2@} are both @code{INTEGER}, they are both converted -to @code{REAL(KIND=1)}, and the result of the @code{@0@()} -invocation is type @code{COMPLEX(KIND=1)}. - -@emph{Note:} The way to do this in standard Fortran 90 -is too hairy to describe here, but it is important to -note that @samp{CMPLX(D1,D2)} returns a @code{COMPLEX(KIND=1)} -result even if @samp{D1} and @samp{D2} are type @code{REAL(KIND=2)}. -Hence the availability of @code{COMPLEX()} in GNU Fortran. -") - -DEFDOC (LOC, "Address of entity in core.", "\ -The @code{LOC()} intrinsic works the -same way as the @code{%LOC()} construct. -@xref{%LOC(),,The @code{%LOC()} Construct}, for -more information. -") - -DEFDOC (REALPART, "Extract real part of complex.", "\ -The real part of @var{@1@} is returned, without conversion. - -@emph{Note:} The way to do this in standard Fortran 90 -is @samp{REAL(@var{@1@})}. -However, when, for example, @var{@1@} is @code{COMPLEX(KIND=2)}, -@samp{REAL(@var{@1@})} means something different for some compilers -that are not true Fortran 90 compilers but offer some -extensions standardized by Fortran 90 (such as the -@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}). - -The advantage of @code{@0@()} is that, while not necessarily -more or less portable than @code{REAL()}, it is more likely to -cause a compiler that doesn't support it to produce a diagnostic -than generate incorrect code. - -@xref{REAL() and AIMAG() of Complex}, for more information. -") - -DEFDOC (GETARG, "Obtain command-line argument.", "\ -Sets @var{@2@} to the @var{@1@}-th command-line argument (or to all -blanks if there are fewer than @var{@2@} command-line arguments); -@code{CALL @0@(0, @var{value})} sets @var{value} to the name of the -program (on systems that support this feature). - -@xref{IArgC Intrinsic}, for information on how to get the number -of arguments. -") - -DEFDOC (ABORT, "Abort the program.", "\ -Prints a message and potentially causes a core dump via @code{abort(3)}. -") - -DEFDOC (EXIT, "Terminate the program.", "\ -Exit the program with status @var{@1@} after closing open Fortran -I/O units and otherwise behaving as @code{exit(2)}. -If @var{@1@} is omitted the canonical `success' value -will be returned to the system. -") - -DEFDOC (IARGC, "Obtain count of command-line arguments.", "\ -Returns the number of command-line arguments. - -This count does not include the specification of the program -name itself. -") - -DEFDOC (CTIME_func, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\ -Converts @var{@1@}, a system time value, such as returned by -@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}, -and returns that string as the function value. - -@xref{Time8 Intrinsic}. -") - -DEFDOC (CTIME_subr, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\ -Converts @var{@2@}, a system time value, such as returned by -@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}, -and returns that string in @var{@1@}. - -@xref{Time8 Intrinsic}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (DATE, "Get current date as dd-Mon-yy.", "\ -Returns @var{@1@} in the form @samp{@var{dd}-@var{mmm}-@var{yy}}, -representing the numeric day of the month @var{dd}, a three-character -abbreviation of the month name @var{mmm} and the last two digits of -the year @var{yy}, e.g.@ @samp{25-Nov-96}. - -This intrinsic is not recommended, due to the year 2000 approaching. -@xref{CTime Intrinsic (subroutine)}, for information on obtaining more digits -for the current (or any) date. -") - -DEFDOC (DTIME_func, "Get elapsed time since last time.", "\ -Initially, return the number of seconds of runtime -since the start of the process's execution -as the function value, -and the user and system components of this in @samp{@var{@1@}(1)} -and @samp{@var{@1@}(2)} respectively. -The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}. - -Subsequent invocations of @samp{@0@()} return values accumulated since the -previous invocation. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (DTIME_subr, "Get elapsed time since last time.", "\ -Initially, return the number of seconds of runtime -since the start of the process's execution -in @var{@1@}, -and the user and system components of this in @samp{@var{@2@}(1)} -and @samp{@var{@2@}(2)} respectively. -The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}. - -Subsequent invocations of @samp{@0@()} set values based on accumulations -since the previous invocation. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (ETIME_func, "Get elapsed time for process.", "\ -Return the number of seconds of runtime -since the start of the process's execution -as the function value, -and the user and system components of this in @samp{@var{@1@}(1)} -and @samp{@var{@1@}(2)} respectively. -The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}. -") - -DEFDOC (ETIME_subr, "Get elapsed time for process.", "\ -Return the number of seconds of runtime -since the start of the process's execution -in @var{@1@}, -and the user and system components of this in @samp{@var{@2@}(1)} -and @samp{@var{@2@}(2)} respectively. -The value of @var{@1@} is equal to @samp{@var{@2@}(1) + @var{@2@}(2)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (FDATE_func, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\ -Returns the current date (using the same format as @code{CTIME()}). - -Equivalent to: - -@example -CTIME(TIME8()) -@end example - -@xref{CTime Intrinsic (function)}. -") - -DEFDOC (FDATE_subr, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\ -Returns the current date (using the same format as @code{CTIME()}) -in @var{@1@}. - -Equivalent to: - -@example -CALL CTIME(@var{@1@}, TIME8()) -@end example - -@xref{CTime Intrinsic (subroutine)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (GMTIME, "Convert time to GMT time info.", "\ -Given a system time value @var{@1@}, fills @var{@2@} with values -extracted from it appropriate to the GMT time zone using -@code{gmtime(3)}. - -The array elements are as follows: - -@enumerate -@item -Seconds after the minute, range 0--59 or 0--61 to allow for leap -seconds - -@item -Minutes after the hour, range 0--59 - -@item -Hours past midnight, range 0--23 - -@item -Day of month, range 0--31 - -@item -Number of months since January, range 0--12 - -@item -Years since 1900 - -@item -Number of days since Sunday, range 0--6 - -@item -Days since January 1 - -@item -Daylight savings indicator: positive if daylight savings is in effect, -zero if not, and negative if the information isn't available. -@end enumerate -") - -DEFDOC (LTIME, "Convert time to local time info.", "\ -Given a system time value @var{@1@}, fills @var{@2@} with values -extracted from it appropriate to the GMT time zone using -@code{localtime(3)}. - -The array elements are as follows: - -@enumerate -@item -Seconds after the minute, range 0--59 or 0--61 to allow for leap -seconds - -@item -Minutes after the hour, range 0--59 - -@item -Hours past midnight, range 0--23 - -@item -Day of month, range 0--31 - -@item -Number of months since January, range 0--12 - -@item -Years since 1900 - -@item -Number of days since Sunday, range 0--6 - -@item -Days since January 1 - -@item -Daylight savings indicator: positive if daylight savings is in effect, -zero if not, and negative if the information isn't available. -@end enumerate -") - -DEFDOC (IDATE_unix, "Get local time info.", "\ -Fills @var{@1@} with the numerical values at the current local time -of day, month (in the range 1--12), and year in elements 1, 2, and 3, -respectively. -The year has four significant digits. -") - -DEFDOC (IDATE_vxt, "Get local time info (VAX/VMS).", "\ -Returns the numerical values of the current local time. -The month (in the range 1--12) is returned in @var{@1@}, -the day (in the range 1--7) in @var{@2@}, -and the year in @var{@3@} (in the range 0--99). - -This intrinsic is not recommended, due to the year 2000 approaching. -") - -DEFDOC (ITIME, "Get local time of day.", "\ -Returns the current local time hour, minutes, and seconds in elements -1, 2, and 3 of @var{@1@}, respectively. -") - -DEFDOC (MCLOCK, "Get number of clock ticks for process.", "\ -Returns the number of clock ticks since the start of the process. -Supported on systems with @code{clock(3)} (q.v.). - -This intrinsic is not fully portable, such as to systems -with 32-bit @code{INTEGER} types but supporting times -wider than 32 bits. -@xref{MClock8 Intrinsic}, for information on a -similar intrinsic that might be portable to more -GNU Fortran implementations, though to fewer -Fortran compilers. - -If the system does not support @code{clock(3)}, --1 is returned. -") - -DEFDOC (MCLOCK8, "Get number of clock ticks for process.", "\ -Returns the number of clock ticks since the start of the process. -Supported on systems with @code{clock(3)} (q.v.). - -No Fortran implementations other than GNU Fortran are -known to support this intrinsic at the time of this -writing. -@xref{MClock Intrinsic}, for information on a -similar intrinsic that might be portable to more Fortran -compilers, though to fewer GNU Fortran implementations. - -If the system does not support @code{clock(3)}, --1 is returned. -") - -DEFDOC (SECNDS, "Get local time offset since midnight.", "\ -Returns the local time in seconds since midnight minus the value -@var{@1@}. -") - -DEFDOC (SECOND_func, "Get CPU time for process in seconds.", "\ -Returns the process's runtime in seconds---the same value as the -UNIX function @code{etime} returns. - -This routine is known from Cray Fortran. -") - -DEFDOC (SECOND_subr, "Get CPU time for process@99@in seconds.", "\ -Returns the process's runtime in seconds in @var{@1@}---the same value -as the UNIX function @code{etime} returns. - -This routine is known from Cray Fortran. @xref{Cpu_Time Intrinsic} -for a standard equivalent. -") - -DEFDOC (SYSTEM_CLOCK, "Get current system clock value.", "\ -Returns in @var{@1@} the current value of the system clock; this is -the value returned by the UNIX function @code{times(2)} -in this implementation, but -isn't in general. -@var{@2@} is the number of clock ticks per second and -@var{@3@} is the maximum value this can take, which isn't very useful -in this implementation since it's just the maximum C @code{unsigned -int} value. -") - -DEFDOC (CPU_TIME, "Get current CPU time.", "\ -Returns in @var{@1@} the current value of the system time. -This implementation of the Fortran 95 intrinsic is just an alias for -@code{second} @xref{Second Intrinsic (subroutine)}. -") - -DEFDOC (TIME8, "Get current time as time value.", "\ -Returns the current time encoded as a long integer -(in the manner of the UNIX function @code{time(3)}). -This value is suitable for passing to @code{CTIME}, -@code{GMTIME}, and @code{LTIME}. - -No Fortran implementations other than GNU Fortran are -known to support this intrinsic at the time of this -writing. -@xref{Time Intrinsic (UNIX)}, for information on a -similar intrinsic that might be portable to more Fortran -compilers, though to fewer GNU Fortran implementations. -") - -DEFDOC (TIME_unix, "Get current time as time value.", "\ -Returns the current time encoded as an integer -(in the manner of the UNIX function @code{time(3)}). -This value is suitable for passing to @code{CTIME}, -@code{GMTIME}, and @code{LTIME}. - -This intrinsic is not fully portable, such as to systems -with 32-bit @code{INTEGER} types but supporting times -wider than 32 bits. -@xref{Time8 Intrinsic}, for information on a -similar intrinsic that might be portable to more -GNU Fortran implementations, though to fewer -Fortran compilers. -") - -#define BES(num,n,val) "\ -Calculates the Bessel function of the " #num " kind of \ -order " #n " of @var{@" #val "@}.\n\ -See @code{bessel(3m)}, on whose implementation the \ -function depends.\ -" - -DEFDOC (BESJ0, "Bessel function.", BES (first, 0, 1)) -DEFDOC (BESJ1, "Bessel function.", BES (first, 1, 1)) -DEFDOC (BESJN, "Bessel function.", BES (first, @var{N}, 2)) -DEFDOC (BESY0, "Bessel function.", BES (second, 0, 1)) -DEFDOC (BESY1, "Bessel function.", BES (second, 1, 1)) -DEFDOC (BESYN, "Bessel function.", BES (second, @var{N}, 2)) -DEFDOC (DBESJ0, "Bessel function (archaic).", ARCHAIC (BESJ0, BesJ0)) -DEFDOC (DBESJ1, "Bessel function (archaic).", ARCHAIC (BESJ1, BesJ1)) -DEFDOC (DBESJN, "Bessel function (archaic).", ARCHAIC_2nd (BESJN, BesJN)) -DEFDOC (DBESY0, "Bessel function (archaic).", ARCHAIC (BESY0, BesY0)) -DEFDOC (DBESY1, "Bessel function (archaic).", ARCHAIC (BESY1, BesY1)) -DEFDOC (DBESYN, "Bessel function (archaic).", ARCHAIC_2nd (BESYN, BesYN)) - -DEFDOC (ERF, "Error function.", "\ -Returns the error function of @var{@1@}. -See @code{erf(3m)}, which provides the implementation. -") - -DEFDOC (ERFC, "Complementary error function.", "\ -Returns the complementary error function of @var{@1@}: -@samp{ERFC(R) = 1 - ERF(R)} (except that the result may be more -accurate than explicitly evaluating that formulae would give). -See @code{erfc(3m)}, which provides the implementation. -") - -DEFDOC (DERF, "Error function (archaic).", ARCHAIC (ERF, ErF)) -DEFDOC (DERFC, "Complementary error function (archaic).", ARCHAIC (ERFC, ErFC)) - -DEFDOC (IRAND, "Random number.", "\ -Returns a uniform quasi-random number up to a system-dependent limit. -If @var{@1@} is 0, the next number in sequence is returned; if -@var{@1@} is 1, the generator is restarted by calling the UNIX function -@samp{srand(0)}; if @var{@1@} has any other value, -it is used as a new seed with @code{srand()}. - -@xref{SRand Intrinsic}. - -@emph{Note:} As typically implemented (by the routine of the same -name in the C library), this random number generator is a very poor -one, though the BSD and GNU libraries provide a much better -implementation than the `traditional' one. -On a different system you almost certainly want to use something better. -") - -DEFDOC (RAND, "Random number.", "\ -Returns a uniform quasi-random number between 0 and 1. -If @var{@1@} is 0, the next number in sequence is returned; if -@var{@1@} is 1, the generator is restarted by calling @samp{srand(0)}; -if @var{@1@} has any other value, it is used as a new seed with -@code{srand}. - -@xref{SRand Intrinsic}. - -@emph{Note:} As typically implemented (by the routine of the same -name in the C library), this random number generator is a very poor -one, though the BSD and GNU libraries provide a much better -implementation than the `traditional' one. -On a different system you -almost certainly want to use something better. -") - -DEFDOC (SRAND, "Random seed.", "\ -Reinitialises the generator with the seed in @var{@1@}. -@xref{IRand Intrinsic}. -@xref{Rand Intrinsic}. -") - -DEFDOC (ACCESS, "Check file accessibility.", "\ -Checks file @var{@1@} for accessibility in the mode specified by @var{@2@} and -returns 0 if the file is accessible in that mode, otherwise an error -code if the file is inaccessible or @var{@2@} is invalid. -See @code{access(2)}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -@var{@2@} may be a concatenation of any of the following characters: - -@table @samp -@item r -Read permission - -@item w -Write permission - -@item x -Execute permission - -@item @kbd{SPC} -Existence -@end table -") - -DEFDOC (CHDIR_subr, "Change directory.", "\ -Sets the current working directory to be @var{@1@}. -If the @var{@2@} argument is supplied, it contains 0 -on success or a non-zero error code otherwise upon return. -See @code{chdir(3)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@2@} argument. -") - -DEFDOC (CHDIR_func, "Change directory.", "\ -Sets the current working directory to be @var{@1@}. -Returns 0 on success or a non-zero error code. -See @code{chdir(3)}. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (CHMOD_func, "Change file modes.", "\ -Changes the access mode of file @var{@1@} according to the -specification @var{@2@}, which is given in the format of -@code{chmod(1)}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -Currently, @var{@1@} must not contain the single quote -character. - -Returns 0 on success or a non-zero error code otherwise. - -Note that this currently works -by actually invoking @code{/bin/chmod} (or the @code{chmod} found when -the library was configured) and so may fail in some circumstances and -will, anyway, be slow. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (CHMOD_subr, "Change file modes.", "\ -Changes the access mode of file @var{@1@} according to the -specification @var{@2@}, which is given in the format of -@code{chmod(1)}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -Currently, @var{@1@} must not contain the single quote -character. - -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. - -Note that this currently works -by actually invoking @code{/bin/chmod} (or the @code{chmod} found when -the library was configured) and so may fail in some circumstances and -will, anyway, be slow. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (GETCWD_func, "Get current working directory.", "\ -Places the current working directory in @var{@1@}. -Returns 0 on -success, otherwise a non-zero error code -(@code{ENOSYS} if the system does not provide @code{getcwd(3)} -or @code{getwd(3)}). -") - -DEFDOC (GETCWD_subr, "Get current working directory.", "\ -Places the current working directory in @var{@1@}. -If the @var{@2@} argument is supplied, it contains 0 -success or a non-zero error code upon return -(@code{ENOSYS} if the system does not provide @code{getcwd(3)} -or @code{getwd(3)}). - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@2@} argument. -") - -DEFDOC (FSTAT_func, "Get file information.", "\ -Obtains data about the file open on Fortran I/O unit @var{@1@} and -places them in the array @var{@2@}. -The values in this array are -extracted from the @code{stat} structure as returned by -@code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -Returns 0 on success or a non-zero error code. -") - -DEFDOC (FSTAT_subr, "Get file information.", "\ -Obtains data about the file open on Fortran I/O unit @var{@1@} and -places them in the array @var{@2@}. -The values in this array are -extracted from the @code{stat} structure as returned by -@code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (LSTAT_func, "Get file information.", "\ -Obtains data about the given file @var{@1@} and places them in the array -@var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -If @var{@1@} is a symbolic link it returns data on the -link itself, so the routine is available only on systems that support -symbolic links. -The values in this array are extracted from the -@code{stat} structure as returned by @code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -Returns 0 on success or a non-zero error code -(@code{ENOSYS} if the system does not provide @code{lstat(2)}). -") - -DEFDOC (LSTAT_subr, "Get file information.", "\ -Obtains data about the given file @var{@1@} and places them in the array -@var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -If @var{@1@} is a symbolic link it returns data on the -link itself, so the routine is available only on systems that support -symbolic links. -The values in this array are extracted from the -@code{stat} structure as returned by @code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return -(@code{ENOSYS} if the system does not provide @code{lstat(2)}). - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (STAT_func, "Get file information.", "\ -Obtains data about the given file @var{@1@} and places them in the array -@var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -The values in this array are extracted from the -@code{stat} structure as returned by @code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -Returns 0 on success or a non-zero error code. -") - -DEFDOC (STAT_subr, "Get file information.", "\ -Obtains data about the given file @var{@1@} and places them in the array -@var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -The values in this array are extracted from the -@code{stat} structure as returned by @code{fstat(2)} q.v., as follows: - -@enumerate -@item -File mode - -@item -Inode number - -@item -ID of device containing directory entry for file - -@item -Device id (if relevant) - -@item -Number of links - -@item -Owner's uid - -@item -Owner's gid - -@item -File size (bytes) - -@item -Last access time - -@item -Last modification time - -@item -Last file status change time - -@item -Preferred I/O block size - -@item -Number of blocks allocated -@end enumerate - -Not all these elements are relevant on all systems. -If an element is not relevant, it is returned as 0. - -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (LINK_subr, "Make hard link in file system.", "\ -Makes a (hard) link from file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. -See @code{link(2)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (LINK_func, "Make hard link in file system.", "\ -Makes a (hard) link from file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -Returns 0 on success or a non-zero error code. -See @code{link(2)}. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (SYMLNK_subr, "Make symbolic link in file system.", "\ -Makes a symbolic link from file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return -(@code{ENOSYS} if the system does not provide @code{symlink(2)}). - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (SYMLNK_func, "Make symbolic link in file system.", "\ -Makes a symbolic link from file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -Returns 0 on success or a non-zero error code -(@code{ENOSYS} if the system does not provide @code{symlink(2)}). - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (RENAME_subr, "Rename file.", "\ -Renames the file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -See @code{rename(2)}. -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (RENAME_func, "Rename file.", "\ -Renames the file @var{@1@} to @var{@2@}. -A null character (@samp{CHAR(0)}) marks the end of -the names in @var{@1@} and @var{@2@}---otherwise, -trailing blanks in @var{@1@} and @var{@2@} are ignored. -See @code{rename(2)}. -Returns 0 on success or a non-zero error code. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (UMASK_subr, "Set file creation permissions mask.", "\ -Sets the file creation mask to @var{@1@} and returns the old value in -argument @var{@2@} if it is supplied. -See @code{umask(2)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (UMASK_func, "Set file creation permissions mask.", "\ -Sets the file creation mask to @var{@1@} and returns the old value. -See @code{umask(2)}. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (UNLINK_subr, "Unlink file.", "\ -Unlink the file @var{@1@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -If the @var{@2@} argument is supplied, it contains -0 on success or a non-zero error code upon return. -See @code{unlink(2)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@2@} argument. -") - -DEFDOC (UNLINK_func, "Unlink file.", "\ -Unlink the file @var{@1@}. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -Returns 0 on success or a non-zero error code. -See @code{unlink(2)}. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (GERROR, "Get error message for last error.", "\ -Returns the system error message corresponding to the last system -error (C @code{errno}). -") - -DEFDOC (IERRNO, "Get error number for last error.", "\ -Returns the last system error number (corresponding to the C -@code{errno}). -") - -DEFDOC (PERROR, "Print error message for last error.", "\ -Prints (on the C @code{stderr} stream) a newline-terminated error -message corresponding to the last system error. -This is prefixed by @var{@1@}, a colon and a space. -See @code{perror(3)}. -") - -DEFDOC (GETGID, "Get process group id.", "\ -Returns the group id for the current process. -") - -DEFDOC (GETUID, "Get process user id.", "\ -Returns the user id for the current process. -") - -DEFDOC (GETPID, "Get process id.", "\ -Returns the process id for the current process. -") - -DEFDOC (GETENV, "Get environment variable.", "\ -Sets @var{@2@} to the value of environment variable given by the -value of @var{@1@} (@code{$name} in shell terms) or to blanks if -@code{$name} has not been set. -A null character (@samp{CHAR(0)}) marks the end of -the name in @var{@1@}---otherwise, -trailing blanks in @var{@1@} are ignored. -") - -DEFDOC (GETLOG, "Get login name.", "\ -Returns the login name for the process in @var{@1@}. -") - -DEFDOC (HOSTNM_func, "Get host name.", "\ -Fills @var{@1@} with the system's host name returned by -@code{gethostname(2)}, returning 0 on success or a non-zero error code -(@code{ENOSYS} if the system does not provide @code{gethostname(2)}). - -This intrinsic is not available on all systems. -") - -DEFDOC (HOSTNM_subr, "Get host name.", "\ -Fills @var{@1@} with the system's host name returned by -@code{gethostname(2)}. -If the @var{@2@} argument is supplied, it contains -0 on success or a non-zero error code upon return -(@code{ENOSYS} if the system does not provide @code{gethostname(2)}). - -This intrinsic is not available on all systems. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@2@} argument. -") - -/* Fixme: stream I/O */ - -DEFDOC (FLUSH, "Flush buffered output.", "\ -Flushes Fortran unit(s) currently open for output. -Without the optional argument, all such units are flushed, -otherwise just the unit specified by @var{@1@}. - -Some non-GNU implementations of Fortran provide this intrinsic -as a library procedure that might or might not support the -(optional) @var{@1@} argument. -") - -DEFDOC (FNUM, "Get file descriptor from Fortran unit number.", "\ -Returns the Unix file descriptor number corresponding to the open -Fortran I/O unit @var{@1@}. -This could be passed to an interface to C I/O routines. -") - -#define IOWARN " -Stream I/O should not be mixed with normal record-oriented (formatted or -unformatted) I/O on the same unit; the results are unpredictable. -" - -DEFDOC (FGET_func, "Read a character from unit 5 stream-wise.", "\ -Reads a single character into @var{@1@} in stream mode from unit 5 -(by-passing normal formatted input) using @code{getc(3)}. -Returns 0 on -success, @minus{}1 on end-of-file, and the error code from -@code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FGET_subr, "Read a character from unit 5 stream-wise.", "\ -Reads a single character into @var{@1@} in stream mode from unit 5 -(by-passing normal formatted output) using @code{getc(3)}. -Returns in -@var{@2@} 0 on success, @minus{}1 on end-of-file, and the error code -from @code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FGETC_func, "Read a character stream-wise.", "\ -Reads a single character into @var{@2@} in stream mode from unit @var{@1@} -(by-passing normal formatted output) using @code{getc(3)}. -Returns 0 on -success, @minus{}1 on end-of-file, and the error code from -@code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FGETC_subr, "Read a character stream-wise.", "\ -Reads a single character into @var{@2@} in stream mode from unit @var{@1@} -(by-passing normal formatted output) using @code{getc(3)}. -Returns in -@var{@3@} 0 on success, @minus{}1 on end-of-file, and the error code from -@code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FPUT_func, "Write a character to unit 6 stream-wise.", "\ -Writes the single character @var{@1@} in stream mode to unit 6 -(by-passing normal formatted output) using @code{getc(3)}. -Returns 0 on -success, the error code from @code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FPUT_subr, "Write a character to unit 6 stream-wise.", "\ -Writes the single character @var{@1@} in stream mode to unit 6 -(by-passing normal formatted output) using @code{putc(3)}. -Returns in -@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FPUTC_func, "Write a character stream-wise.", "\ -Writes the single character @var{@2@} in stream mode to unit @var{@1@} -(by-passing normal formatted output) using @code{putc(3)}. -Returns 0 on -success, the error code from @code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FPUTC_subr, "Write a character stream-wise.", "\ -Writes the single character @var{@1@} in stream mode to unit 6 -(by-passing normal formatted output) using @code{putc(3)}. -Returns in -@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise. -" IOWARN) - -DEFDOC (FSEEK, "Position file (low-level).", "\ -Attempts to move Fortran unit @var{@1@} to the specified -@var{Offset}: absolute offset if @var{@2@}=0; relative to the -current offset if @var{@2@}=1; relative to the end of the file if -@var{@2@}=2. -It branches to label @var{@3@} if @var{@1@} is -not open or if the call otherwise fails. -") - -DEFDOC (FTELL_func, "Get file position (low-level).", "\ -Returns the current offset of Fortran unit @var{@1@} -(or @minus{}1 if @var{@1@} is not open). -") - -DEFDOC (FTELL_subr, "Get file position (low-level).", "\ -Sets @var{@2@} to the current offset of Fortran unit @var{@1@} -(or to @minus{}1 if @var{@1@} is not open). - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (ISATTY, "Is unit connected to a terminal?", "\ -Returns @code{.TRUE.} if and only if the Fortran I/O unit -specified by @var{@1@} is connected -to a terminal device. -See @code{isatty(3)}. -") - -DEFDOC (TTYNAM_func, "Get name of terminal device for unit.", "\ -Returns the name of the terminal device open on logical unit -@var{@1@} or a blank string if @var{@1@} is not connected to a -terminal. -") - -DEFDOC (TTYNAM_subr, "Get name of terminal device for unit.", "\ -Sets @var{@1@} to the name of the terminal device open on logical unit -@var{@2@} or a blank string if @var{@2@} is not connected to a -terminal. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine. -") - -DEFDOC (SIGNAL_subr, "Muck with signal handling.", "\ -If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be -invoked with a single integer argument (of system-dependent length) -when signal @var{@1@} occurs. -If @var{@1@} is an integer, it can be -used to turn off handling of signal @var{@2@} or revert to its default -action. -See @code{signal(2)}. - -Note that @var{@2@} will be called using C conventions, so its value in -Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it. - -The value returned by @code{signal(2)} is written to @var{@3@}, if -that argument is supplied. -Otherwise the return value is ignored. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (SIGNAL_func, "Muck with signal handling.", "\ -If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be -invoked with a single integer argument (of system-dependent length) -when signal @var{@1@} occurs. -If @var{@1@} is an integer, it can be -used to turn off handling of signal @var{@2@} or revert to its default -action. -See @code{signal(2)}. - -Note that @var{@2@} will be called using C conventions, so its value in -Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it. - -The value returned by @code{signal(2)} is returned. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (KILL_func, "Signal a process.", "\ -Sends the signal specified by @var{@2@} to the process @var{@1@}. -Returns 0 on success or a non-zero error code. -See @code{kill(2)}. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -") - -DEFDOC (KILL_subr, "Signal a process.", "\ -Sends the signal specified by @var{@2@} to the process @var{@1@}. -If the @var{@3@} argument is supplied, it contains -0 on success or a non-zero error code upon return. -See @code{kill(2)}. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@3@} argument. -") - -DEFDOC (LNBLNK, "Get last non-blank character in string.", "\ -Returns the index of the last non-blank character in @var{@1@}. -@code{LNBLNK} and @code{LEN_TRIM} are equivalent. -") - -DEFDOC (SLEEP, "Sleep for a specified time.", "\ -Causes the process to pause for @var{@1@} seconds. -See @code{sleep(2)}. -") - -DEFDOC (SYSTEM_subr, "Invoke shell (system) command.", "\ -Passes the command @var{@1@} to a shell (see @code{system(3)}). -If argument @var{@2@} is present, it contains the value returned by -@code{system(3)}, presumably 0 if the shell command succeeded. -Note that which shell is used to invoke the command is system-dependent -and environment-dependent. - -Some non-GNU implementations of Fortran provide this intrinsic as -only a function, not as a subroutine, or do not support the -(optional) @var{@2@} argument. -") - -DEFDOC (SYSTEM_func, "Invoke shell (system) command.", "\ -Passes the command @var{@1@} to a shell (see @code{system(3)}). -Returns the value returned by -@code{system(3)}, presumably 0 if the shell command succeeded. -Note that which shell is used to invoke the command is system-dependent -and environment-dependent. - -Due to the side effects performed by this intrinsic, the function -form is not recommended. -However, the function form can be valid in cases where the -actual side effects performed by the call are unimportant to -the application. - -For example, on a UNIX system, @samp{SAME = SYSTEM('cmp a b')} -does not perform any side effects likely to be important to the -program, so the programmer would not care if the actual system -call (and invocation of @code{cmp}) was optimized away in a situation -where the return value could be determined otherwise, or was not -actually needed (@samp{SAME} not actually referenced after the -sample assignment statement). -") - -DEFDOC (TIME_vxt, "Get the time as a character value.", "\ -Returns in @var{@1@} a character representation of the current time as -obtained from @code{ctime(3)}. - -@xref{Fdate Intrinsic (subroutine)} for an equivalent routine. -") - -DEFDOC (IBCLR, "Clear a bit.", "\ -Returns the value of @var{@1@} with bit @var{@2@} cleared (set to -zero). -@xref{BTest Intrinsic} for information on bit positions. -") - -DEFDOC (IBSET, "Set a bit.", "\ -Returns the value of @var{@1@} with bit @var{@2@} set (to one). -@xref{BTest Intrinsic} for information on bit positions. -") - -DEFDOC (IBITS, "Extract a bit subfield of a variable.", "\ -Extracts a subfield of length @var{@3@} from @var{@1@}, starting from -bit position @var{@2@} and extending left for @var{@3@} bits. -The result is right-justified and the remaining bits are zeroed. -The value -of @samp{@var{@2@}+@var{@3@}} must be less than or equal to the value -@samp{BIT_SIZE(@var{@1@})}. -@xref{Bit_Size Intrinsic}. -") - -DEFDOC (ISHFT, "Logical bit shift.", "\ -All bits representing @var{@1@} are shifted @var{@2@} places. -@samp{@var{@2@}.GT.0} indicates a left shift, @samp{@var{@2@}.EQ.0} -indicates no shift and @samp{@var{@2@}.LT.0} indicates a right shift. -If the absolute value of the shift count is greater than -@samp{BIT_SIZE(@var{@1@})}, the result is undefined. -Bits shifted out from the left end or the right end, as the case may be, -are lost. -Zeros are shifted in from the opposite end. - -@xref{IShftC Intrinsic} for the circular-shift equivalent. -") - -DEFDOC (ISHFTC, "Circular bit shift.", "\ -The rightmost @var{@3@} bits of the argument @var{@1@} -are shifted circularly @var{@2@} -places, i.e.@ the bits shifted out of one end are shifted into -the opposite end. -No bits are lost. -The unshifted bits of the result are the same as -the unshifted bits of @var{@1@}. -The absolute value of the argument @var{@2@} -must be less than or equal to @var{@3@}. -The value of @var{@3@} must be greater than or equal to one and less than -or equal to @samp{BIT_SIZE(@var{@1@})}. - -@xref{IShft Intrinsic} for the logical shift equivalent. -") - -DEFDOC (MVBITS, "Moving a bit field.", "\ -Moves @var{@3@} bits from positions @var{@2@} through -@samp{@var{@2@}+@var{@3@}-1} of @var{@1@} to positions @var{@5@} through -@samp{@var{@2@}+@var{@3@}-1} of @var{@4@}. The portion of argument -@var{@4@} not affected by the movement of bits is unchanged. Arguments -@var{@1@} and @var{@4@} are permitted to be the same numeric storage -unit. The values of @samp{@var{@2@}+@var{@3@}} and -@samp{@var{@5@}+@var{@3@}} must be less than or equal to -@samp{BIT_SIZE(@var{@1@})}. -") - -DEFDOC (INDEX, "Locate a CHARACTER substring.", "\ -Returns the position of the start of the first occurrence of string -@var{@2@} as a substring in @var{@1@}, counting from one. -If @var{@2@} doesn't occur in @var{@1@}, zero is returned. -") - diff --git a/gcc/f/runtime/ChangeLog b/gcc/f/runtime/ChangeLog deleted file mode 100644 index 57b175eaf6a..00000000000 --- a/gcc/f/runtime/ChangeLog +++ /dev/null @@ -1,756 +0,0 @@ -Tue Sep 9 00:33:24 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Version 0.5.21 released. - -Mon Sep 8 19:39:01 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/close.c (f_exit): Fix thinko, inverted test - of whether initialization done, so exiting now closes - open units again. - -Tue Aug 26 01:42:21 1997 Craig Burley <burley@gnu.ai.mit.edu> - - From Jim Wilson: - * configure.in: Make sure RANLIB_TEST is set also. - - From Robert Lipe <robertl@dgii.com>: - * libU77/getcwd_.c, libU77/hostnm_.c, libU77/lstat_.c: - Also #include <errno.h>, to define ENOSYS. - -Tue Aug 26 01:25:58 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in (stamp-lib): Put all f2cext.c objects in - a temp directory named libE77, then `ar' them all at - once into libf2c.a, to get the job done a bit faster. - Still remove the objects (and libE77 directory) afterward. - -Sun Aug 24 05:04:35 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/rand_.c (G77_rand_0), libU77/dtime_.c (G77_dtime_0), - libU77/etime_.c (G77_etime_0), libU77/secnds_.c (G77_secnds_0), - libU77/second_.c (G77_second_0): Really return `double', not - `doublereal', since the result is cast to `float'. - * f2cext.c: (rand_, dtime_, etime_, secnds_, second_): Ditto. - (erf_, erfc_, besj0_, besj1_, besjn_, besy0_, besy1_, - besyn_, dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_, - dbesyn_): All of these return `double', not `doublereal', - as they either have `float' or `double' results. - * libU77/bes.c (besj0_, besj1_, besjn_, besy0_, besy1_, - besyn_): Ditto. - * libU77/dbes.c (dbesj0_, dbesj1_, dbesjn_, dbesy0_, dbesy1_, - dbesyn_): Ditto. - - Update to Netlib version of 1997-08-16: - * libI77/iio.c: Fix bug in internal writes to an array - of character strings. - - * Makefile.in (UOBJ): Restore fixes made by Dan Pettet I - lost, which included the addition of mclock_.o already noted - below, plus adding symlnk_.o. - -Thu Aug 21 03:58:34 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in (UOBJ): Add mclock_.o, thanks to Mumit Khan! - -1997-08-21 Dave Love <d.love@dl.ac.uk> - - * libU77/alarm_.c: Fix return type: `integer'. - -Mon Aug 11 20:12:42 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in ($(lib), stamp-lib): Ensure that library - gets fully updated even if updating was aborted earlier. - - * libU77/hostnm_.c (G77_hostnm_0): Return ENOSYS and stuff - in errno if system has no gethostname() function. - - * libU77/lstat_.c (G77_lstat_0): Return ENOSYS and stuff - in errno if system has no lstat() function. - - * libU77/getcwd_.c (G77_getcwd_0): Return ENOSYS and stuff - in errno if system has no getcwd() or getwd() function. - Test HAVE_GETCWD properly. - - * libU77/symlnk_.c (G77_symlink_0): Return ENOSYS and stuff - in errno if system has no symlink() function. - - * libU77/mclock_.c (G77_mclock_0): Return -1 if system - has no clock() function. - -Mon Aug 11 01:55:36 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in (F2CEXT): Add `alarm' to this list. - - * f2cext.c (alarm_): Fix some typos in this function. - Delete third `status' argument. - - * libU77/alarm_.c: Delete third `status' argument, - as caller gets this from function result; return - status value as function result for caller. - - * configure.in: Rename `ac_cv_struct_FILE' to - `g77_cv_struct_FILE' according to 1997-06-26 change. - -1997-08-06 Dave Love <d.love@dl.ac.uk> - - * libU77/vxtidate_.c: Correct day/month argument order. - * f2cext.c: Likewise. - -1997-07-07 Dave Love <d.love@dl.ac.uk> - - * f2cext.c: Add alarm_. - - * Makefile.in, libU77/Makefile.in: Add alarm_. - - * libU77/alarm_.c: New file. - -1997-06-26 Dave Love <d.love@dl.ac.uk> - - * configure.in: Generally use prefix `g77_' for cached values - we've invented, not `ac_'. - -Tue Jun 24 18:50:06 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/ilnw.c (s_wsni): Call f_init() here. - (s_wsli): Ditto. - (e_wsli): Turn off "doing I/O" flag here. - -1997-06-20 Dave Love <d.love@dl.ac.uk> - - * runtime/configure.in: Check for cygwin32 after Mumit Khan (but - differently); if cygwin32 define NON_UNIX_STDIO and don't define - NON_ANSI_RW_MODES. - -Tue Jun 01 06:26:29 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/rsne.c (nl_init): Don't call f_init() here, - since s_rsne() already does. - (c_lir): Call f_init() here instead. - * libI77/rsli.c (e_rsli): Turn off "doing I/O" flag here. - * libI77/sue.c (e_rsue): Ditto. - -Sun Jun 22 23:27:22 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/fio.h (err): Mark I/O as no longer in progress - before returning a non-zero error indicator (since - that tells the caller to jump over the remaining I/O - calls, including the corresponding `e_whatever' call). - * libI77/err.c (endif): Ditto. - * libI77/sfe.c (e_wsfe): Ditto. - * libI77/lread.c (ERR): Ditto. - * libI77/lread.c (l_read): Ditto by having quad case - use ERR, not return, to return non-zero error code. - -Sat Jun 21 12:31:28 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/open.c (fk_open): Temporarily turn off - "doing I/O" flag during f_open() call to avoid recursive - I/O error. - -Tue Jun 17 22:40:47 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * err.c, close.c, rewind.c, inquire.c, backspace.c, endfile.c, - iio.c, open.c, Version.c, sfe.c, wsle.c, rsne.c, sue.c, rsfe.c, - lread.c, wsfe.c, fio.h, due.c, dfe.c: Change f__init from - `flag' to `int' and to signal not just whether initialization - has happened (bit 0), but also whether I/O is in progress - already (bit 1). Consistently produce a clear diagnostic - in cases of recursive I/O. Avoid infinite recursion in - f__fatal, in case sig_die triggers another error. Don't - output info on internals if not initialized in f__fatal. Don't - bother closing units in f_exit if initialization hasn't - happened. - -Tue Jun 10 12:57:44 1997 Craig Burley <burley@gnu.ai.mit.edu> - - Update to Netlib version of 1997-06-09: - * libI77/err.c, libI77/lread.c, libI77/rdfmt.c, - libI77/wref.c: Move some #include's around. - -Mon Jun 9 18:11:56 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/kill_.c (kill_): KR_headers version needed - `*' in front of args in decls. - -Sun May 25 03:16:53 1997 Craig Burley <burley@gnu.ai.mit.edu> - - Update to Netlib version of 1997-05-24: - * libF77/README, libF77/Version.c, libF77/main.c, - libF77/makefile, libF77/s_paus.c, libF77/signal1.h, - libF77/signal_.c, libF77/z_div.c, libI77/Notice, - libI77/README, libI77/Version.c, libI77/dfe.c, - libI77/err.c, libI77/fmt.c, libI77/makefile, - libI77/rawio.h: Apply many, but not all, of the changes - made to libf2c since last update. - * libF77/Makefile.in (MISC), Makefile.in (MISC): Rename - exit.o to exit_.o to go along with Netlib. - * libF77/signal.c: Make the prologue much simpler than - Netlib has it. - -Sun May 18 20:56:02 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/unlink_.c, libU77/stat_.c, libU77/symlnk_.c, - libU77/chmod_.c: g_char first arg is const. - - * libU77/chmod_.c: s_cat expects ftnlen[], not int[] or - integer[], change types of array and variables - accordingly. - -May 7 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca> - - * libU77/dbes_.c: Commented out the code in the - same way the bes* routines are commented out. This - was done because corresponding C routines are referenced - directly in com-rt.def. - -Mon May 5 13:56:02 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/stat_.c: Reverse KR/ANSI decls of g_char(). - -Apr 18 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca> - - * libF77/F77_aloc.c, libF77/abort_.c, libF77/derf_.c, - libF77/derfc_.c, libF77/ef1asc_.c, libF77/ef1cmc_.c, - libF77/erf_.c, libF77/erfc_.c, libF77/exit.c, - libF77/getarg_.c, libF77/getenv_.c, libF77/iargc_.c, - libF77/s_cat.c, libF77/signal_.c, libF77/system_.c, - libI77/close.c, libI77/ftell_.c, libU77/access_.c, - libU77/bes.c, libU77/chdir_.c, libU77/chmod_.c, libU77/ctime_.c, - libU77/date_.c, libU77/dbes.c, libU77/dtime_.c, libU77/etime_.c, - libU77/fdate_.c, libU77/fgetc_.c, libU77/flush1_.c, - libU77/fnum_.c, libU77/fputc_.c, libU77/fstat_.c, - libU77/gerror_.c, libU77/getcwd_.c, libU77/getgid_.c, - libU77/getlog_.c, libU77/getpid_.c, libU77/getuid_.c, - libU77/gmtime_.c, libU77/hostnm_.c, libU77/idate_.c, - libU77/ierrno_.c, libU77/irand_.c, libU77/isatty_.c, - libU77/itime_.c, libU77/kill_.c, libU77/link_.c, - libU77/lnblnk_.c, libU77/ltime_.c, libU77/mclock_.c, - libU77/perror_.c, libU77/rand_.c, libU77/rename_.c, - libU77/secnds_.c, libU77/second_.c, libU77/sleep_.c, - libU77/srand_.c, libU77/stat_.c, libU77/symlnk_.c, - libU77/system_clock_.c, libU77/time_.c, libU77/ttynam_.c, - libU77/umask_.c, libU77/unlink_.c, libU77/vxtidate_.c, - libU77/vxttime_.c: Completed renaming routines that are directly - callable from g77 to internal names of the form - G77_xxxx_0 that are known as intrinsics by g77. - -Apr 8 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca> - - * Makefile.in: Add libU77/mclock_.o and libU77/symlnk_.o to UOBJ. - * libU77/Makefile.in: Add mclock_.c to SRCS. - Add mclock_.o and symlnk_.o to OBJS. - Add mclock_.o dependency. - -Apr 8 1997 Daniel Pettet <dan.pettet@bchydro.bc.ca> - - * libU77/symlnk_.c: Added a couple of (char*) casts to malloc - to silence the compiler. - -1997-03-17 Dave Love <d.love@dl.ac.uk> - - * libU77/access_.c, libU77/chdir_.c, libU77/chmod_.c, - libU77/link_.c, libU77/lstat_.c, libU77/rename_.c, libU77/stat_.c, - libU77/symlnk_.c, libU77/u77-test.f, libU77/unlink_.c: Strip - trailing blanks from file names for consistency with other - implementations (notably Sun's). - - * libU77/chmod_.c: Quote the file name given to the shell. - -Mon Mar 10 00:19:17 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/uio.c (do_ud) [PAD_UDread]: Add semicolon to err() - invocation when macro not defined (from Mumit Khan - <khan@xraylith.wisc.edu>). - -Fri Feb 28 13:16:50 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Version 0.5.20 released. - -Wed Feb 26 20:28:53 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in: $(MAKE) invocations now explicitly - specify `-f Makefile', just in case the `makefile's - from the netlib distribution would get used instead. - -Mon Feb 24 16:43:39 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/Makefile.in (check): Specify driver, and - don't bother enabling already-enabled intrinsic groups. - Also, get the $(srcdir) version of u77-test.f. - -Sat Feb 22 14:08:42 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/u77-test.f: Explicitly declare intrinsics, get - rid of useless CHARACTER declarations on intrinsics (maybe - someday appropriate to implement meaning of that in g77 - and restore them?). - Add spin loop just to fatten up the timings a bit. - Clarify ETIME output as having three fields. - Call TIME with CHARACTER*8, not CHARACTER*6, argument. - Call new SECOND intrinsic subroutine, after calling - new DUMDUM subroutine just to ensure the correct value - doesn't get left around in a register or something. - -Thu Feb 20 15:22:42 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/bes.c: Comment out all the code, as g77 avoids actually - calling it, going directly to the system's library instead. - -Mon Feb 17 02:27:41 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libU77/fgetc_.c (fgetc_): Allow return value to be - CHARACTER*(*), properly handle CHARACTER*0 and blank-pad - CHARACTER*n where n>1. - -Tue Feb 11 14:12:19 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in: Clarify role of $(srcdir) here. Fix - various targets accordingly. Don't rely at all on - gcc/f/include/ being a link to gcc/include/ -- just - use it directly. - (${srcdir}/configure, ${srcdir}/libU77/configure): - Remove the config.cache files in build directory before - cd'ing to source directory as well. - - * libF77/Makefile.in, libI77/Makefile.in (ALL_CFLAGS): - Include `-I.' to pick up build directory. - Use gcc/include/ directly. - * libU77/Makefile.in (ALL_CFLAGS): Include `-I$(srcdir)' - to pick up source directory. - (OBJS): Fix typo in `chmod_.o' (was `chmod.o'). - -Mon Feb 10 12:54:47 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in (UOBJ), libU77/Makefile.in (OBJS): Add - libU77/chmod_.o to list of objects. - * libU77/chmod_.c: Fix up headers. - Fix implementation to not prematurely truncate command - string and make room for trailing null. - - * libU77/ctime_.c: Incoming xstime argument is now longint. - * libU77/mclock_.c: Now returns longint. - * libU77/time_.c: Now returns longint. - -1997-02-10 Dave Love <d.love@dl.ac.uk> - - * etime_.c, dtime_.c: Typo rounded times to seconds. - - * date_.c: Add missing return. - - * hostnm_.c: #include unistd.h. - -Sat Feb 8 03:30:19 1997 Craig Burley <burley@gnu.ai.mit.edu> - - INTEGER*8 support built in to f2c.h and libf2c (since - gcc will be used to compile relevant code anyway): - * Makefile.in, libF77/Makefile.in: Add pow_qq.o, - qbitbits.o, and qbitshft.o to $POW and $F90BIT macros, - as appropriate. - * f2c.h.in: Define appropriate types and macros. - Place #error directive correctly. - * configure.in: Determine appropriate types for long - integer (F2C_LONGINT). - Meanwhile, quote strings in #error, for consistency. - Fix restoring of ac_cpp macro. - * configure: Regenerated using autoconf-2.12. - - * libF77/Version.c, libI77/Version.c, libU77/Version.c: - Update version numbers. - Change names and code for g77-specific version-printing - routines (shorter names should be safer to link on - weird, 8-char systems). - - * libF77/c_cos.c, libF77/c_div.c, libF77/c_exp.c, - libF77/c_log.c, libF77/c_sin.c, libF77/c_sqrt.c, - libF77/d_cnjg.c, libF77/pow_zi.c, libF77/r_cnjg.c, - libF77/z_cos.c, libF77/z_div.c, libF77/z_exp.c, - libF77/z_log.c, libF77/z_sin.c, libF77/z_sqrt.c: - Changed to work properly even when result is aliased - with any inputs. - - * libF77/makefile, libI77/makefile: Leave these in - the g77 distribution, so it is easier to track changes - to official libf2c. - - * libF77/signal_.c: Eliminate redundant `return 0;'. - - * libI77/fio.h (err, errfl): Fix these so they work - (and must be expressed) as statements. - Fix up many users of err() to include trailing semicolon. - - * Incorporate changes by Bell Labs to libf2c through 1997-02-07. - -1997-02-06 Dave Love <d.love@dl.ac.uk> - - * libU77/etime_.c, libU77/dtime_.c: Fix getrusage stuff. - - * libU77/config.h.in: Regenerate for HAVE_GETRUSAGE. - - * libU77/Makefile.in, libI77/Makefile.in, libF77/Makefile.in: - Redo *clean targets; distclean and maintainer-clean remove the stage? - and include links. This probably want looking at further. - -Wed Feb 5 00:21:23 1997 Craig Burley <burley@gnu.ai.mit.edu> - - Add libU77 library from Dave Love <d.love@dl.ac.uk>: - * Makefile.in: Add libU77 directory, rules, etc. - * configure.in: New libU77 directory, Makefile, etc. - - * Makefile.in, libF77/Makefile.in, libI77/Makefile.in, - libU77/Makefile.in: Reorganize these so $(AR) commands - handled by the top-level Makefile instead of the - subordinates. This permits it to do $(AR) only when - one or more object files actually change, instead of - having to force-update it as was necessary before. - And that had the disadvantage of requiring, e.g., user - root to have access to $(AR) to the library simply to - install g77, which might be problematic on an NFS setup. - (mostlyclean, clean, distclean, maintainer-clean): - Properly handle these rules. - - * Makefile.in: Don't invoke config.status here -- let - compiler-level stuff handle all that. - - * err.c [MISSING_FILE_ELEMS]: Declare malloc in this case - too, so it doesn't end up as an integer. - -Sat Feb 1 02:43:48 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * libF77/Makefile.in: More fixup for $(F90BIT) -- wasn't - in list for ar command, and it wasn't correctly listed - in the list of things depending on f2c.h. - - * f2c.h.in: Fix up #error directive. - -1997-01-31 Dave Love <d.love@dl.ac.uk> - - * libF77/Makefile.in ($(lib)): Add $(F90BIT); shouldn't exclude - stuff f2c needs so we can share the library. - -Sat Jan 18 19:39:03 1997 Craig Burley <burley@gnu.ai.mit.edu> - - * configure.in: No longer define ALWAYS_FLUSH, the - resulting performance is too low. - -Wed Dec 18 12:06:02 1996 Craig Burley <burley@gnu.ai.mit.edu> - - Patch from Mumit Khan <khan@xraylith.wisc.edu>: - * libF77/s_paus.c: Add __CYGWIN32__ to list of macros - controlling how to pause. - -Sun Dec 1 21:25:27 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * configure: Regenerated using autoconf-2.12. - -Mon Nov 25 21:16:15 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * configure: Regenerated using autoconf-2.11. - -1996-11-19 Dave Love <d.love@dl.ac.uk> - - * libI77/backspace.c: Include sys/types.h for size_t. - -Wed Nov 6 14:17:27 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * f2c.h.in: Properly comment out the unsupported stuff so - we don't get build-time errors. - - * libF77/Version.c, libI77/Version.c: Restore macro definition - of version information. - - * libI77/Makefile.in (OBJ): Add ftell_.o to list of objects. - - * libI77/uio.c (do_ud): Fix up casts in PAD_UDread case just - like they were fixed in the other case. - -Thu Oct 31 22:27:45 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/ftell_.c (fseek_): Map incoming whence argument to - system's actual SEEK_CUR, SEEK_SET, or SEEK_END macro for - fseek(), and crash (gracefully) if the argument is invalid. - -1996-10-19 Dave Love <d.love@dl.ac.uk> - - * configure.in: Add check that we have the tools to cross-compile - if appropriate. - (NO_EOF_CHAR_CHECK,Skip_f2c_Undefs): Define. - - * libF77/Makefile.in (F90BIT): New routines from Netlib. - - * f2c.h.in: - Use more sanitary #error (indented for K&R compliance if necessary) if - f2c_i2 defined. - Sync with Netlib: Add `uninteger'. (Commented out) integer*8 stuff. - bit_{test,clear,set} macros. - -1996-10-19 Dave Love <d.love@dl.ac.uk> - - Update to Netlib version of 1996-09-26. - - * libI77/Version.c: Use <stdio.h>, not "stdio.h". - * libF77/Version.c: Likewise. - -Wed Aug 28 13:25:29 1996 Dave Love <d.love@dl.ac.uk> - - * libI77/rsne.c (x_rsne): Use size_t instead of int. - - * libI77/endfile.c (copy): Use size_t in place of int. - -Wed Aug 28 13:22:20 1996 Dave Love <d.love@dl.ac.uk> - - * libI77/backspace.c (f_back): Cast fread arg to size_t. - -Tue Aug 27 19:11:30 1996 Dave Love <d.love@dl.ac.uk> - - * libI77/Version.c: Supply */ to avoid apparent nested comment. - -Tue Aug 20 09:21:43 1996 Dave Love <d.love@dl.ac.uk> - - * libF77/Makefile.in (ALL_CFLAGS): Fix missing ../ for include. - * libI77/Makefile.in (ALL_CFLAGS): Likewise. - -Sat Aug 17 13:00:47 1996 Dave Love <d.love@dl.ac.uk> - - * (libF77/qbitshft.c, libF77/qbitbits.c, libF77/lbitshft.c, - libF77/lbitbits.c): New file from Netlib. qbit... not currently - compiled. - -Sun Jul 7 18:06:33 1996 Dave Love <d.love@dl.ac.uk> - - * libF77/z_sqrt.c, libF77/z_sin.c, libF77/z_exp.c, libF77/z_log.c, - libF77/system_.c, libF77/z_cos.c, libF77/signal_.c, - libF77/s_stop.c, libF77/sig_die.c, libF77/s_paus.c, - libF77/s_rnge.c, libF77/s_cat.c, libF77/r_tan.c, libF77/r_tanh.c, - libF77/r_sinh.c, libF77/r_sqrt.c, libF77/r_sin.c, libF77/r_mod.c, - libF77/r_nint.c, libF77/r_lg10.c, libF77/r_log.c, libF77/r_exp.c, - libF77/r_int.c, libF77/r_cosh.c, libF77/r_atn2.c, libF77/r_cos.c, - libF77/r_asin.c, libF77/r_atan.c, libF77/r_acos.c, - libF77/pow_dd.c, libF77/pow_zz.c, libF77/main.c, libF77/i_dnnt.c, - libF77/i_nint.c, libF77/h_dnnt.c, libF77/h_nint.c, libF77/exit.c, - libF77/d_tan.c, libF77/d_tanh.c, libF77/d_sqrt.c, libF77/d_sin.c, - libF77/d_sinh.c, libF77/d_mod.c, libF77/d_nint.c, libF77/d_log.c, - libF77/d_int.c, libF77/d_lg10.c, libF77/d_cosh.c, libF77/d_exp.c, - libF77/d_atn2.c, libF77/d_cos.c, libF77/d_atan.c, libF77/d_acos.c, - libF77/d_asin.c, libF77/c_sqrt.c, libF77/cabs.c, libF77/c_sin.c, - libF77/c_exp.c, libF77/c_log.c, libF77/c_cos.c, libF77/F77_aloc.c, - libF77/abort_.c, libI77/xwsne.c, libI77/wref.c, libI77/util.c, - libI77/uio.c, libI77/rsne.c, libI77/rdfmt.c, libI77/rawio.h, - libI77/open.c, libI77/lread.c, libI77/inquire.c, libI77/fio.h, - libI77/err.c, libI77/endfile.c, libI77/close.c: - Use #include <...>, not #include "..." for mkdeps - -Sat Jul 6 21:39:21 1996 Dave Love <d.love@dl.ac.uk> - - * libI77/ftell_.c: Added from Netlib distribution. - -Sat Mar 30 20:57:24 1996 Dave Love <d.love@dl.ac.uk> - - * configure.in: Eliminate explicit use of - {RANLIB,AR}_FOR_TARGET. - * Makefile.in: Likewise. - * libF77/Makefile.in: Likewise. - * libI77/Makefile.in: Likewise. - * configure: Regenerated. - -Sat Mar 30 21:02:03 1996 Dave Love <d.love@dl.ac.uk> - - * Makefile.in: Eliminate explicit use of - {RANLIB,AR}_FOR_TARGET. - -Tue Mar 26 23:39:59 1996 Dave Love <d.love@dl.ac.uk> - - * Makefile.in: Remove hardwired RANLIB and RANLIB_TEST (unnoted - change). - -Mon Mar 25 21:04:56 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * Incorporate changes by Bell Labs to libf2c through 1996-03-23, - including changes to dmg and netlib email addresses. - -Tue Mar 19 13:10:02 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * Incorporate changes by AT&T/Bellcore to libf2c through 1996-03-19. - - * Makefile.in (rebuilt): New target. - - * lib[FI]77/Makefile.in: Use $AR_FOR_TARGET, not $AR. - -Tue Mar 19 12:53:19 1996 Dave Love <d.love@dl.ac.uk> - - * configure.in (ac_cpp): #include <stdio.h> instead - of <features.h>. - -Tue Mar 19 12:52:09 1996 Mumit Khan <khan@xraylith.wisc.edu> - - * configure.in (ac_cpp): For f2c integer type, - add -I$srcdir/../.. to make it work on mips-ultrix4.2. - -Sat Mar 9 17:37:15 1996 Craig Burley <burley@gnu.ai.mit.edu> - - * libI77/Makefile.in (.c.o): Add -DAllow_TYQUAD, to enable - I/O support for INTEGER*8. - * f2c.h.in: Turn on longint type. - -Fri Dec 29 18:22:01 1995 Craig Burley <burley@gnu.ai.mit.edu> - - * Makefile.in: Reorganize the *clean rules to more closely - parallel gcc's. - - * lib[FI]77/Makefile.in: Ignore error from $(AR) command, - in case just doing an install and installer has no write - access to library (this is a kludge fix -- perhaps install - targets should never try updating anything?). - -Sat Nov 18 19:37:22 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Version 0.5.17 released. - -Thu Nov 16 07:20:35 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Incorporate changes by AT&T/Bellcore to libf2c through 1995-11-15. - -Fri Sep 22 02:19:59 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libI77/backspace.c, libI77/close.c, libI77/endfile.c, - libI77/fio.h, libI77/inquire.c, libI77/rawio.h, - libF77/s_paus.c: Not an MSDOS system if GO32 - is defined, in the sense that the run-time environment - is thus more UNIX-like. - -Wed Sep 20 02:24:51 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/Makefile.in, libI77/Makefile.in: Comment out `ld -r -x' - and `mv' line pairs, since `-x' isn't supported on systems - such as Solaris, and these lines don't seem to do anything - useful after all. - -Wed Aug 30 15:58:35 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Version 0.5.16 released. - - * Incorporate changes by AT&T/Bellcore to libf2c through 950829. - -Mon Aug 28 12:50:34 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/Makefile.in, libI77/Makefile.in ($(lib)): Force ar'ing - and ranlib'ing of libf2c.a, else after rm'ing libf2c.a and - doing a make, only libI77 or libF77 would be added to - the newly created archive. - Also, instead of `$?' list all targets explicitly so all - objects are updated in libf2c.a even if only one actually - needs recompiling, for similar reason -- we can't easily tell - if a given object is really up-to-date in libf2c.a, or even - present there. - -Sun Aug 27 14:54:24 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/Makefile.in, libI77/Makefile.in: Fix spacing so - initial tabs are present in all appropriate places. - Move identical $(AR) commands in if then/else clauses - to single command preceding if. - (.c.o, Version[FI].o): Use $@ instead of $* because AIX (RS/6000) - says $@ means source, not object, basename, and $@ seems to work - everywhere. - -Wed Aug 23 15:44:25 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/system_.c (system_): Declare as returning `ftnint', - consistent with signal_, instead of defaulting to `int'. - Hope dmg@research.att.com agrees, else probably will - change to whatever he determines is correct (and change - g77 accordingly). - -Thu Aug 17 08:46:17 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libI77/rsne.c (s_rsne): Call f_init if not already done. - -Thu Aug 17 04:35:28 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Incorporate changes by Bellcore to libf2c through 950817. - And this text is for EMACS: (foo at bar). - -Wed Aug 16 17:33:06 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/Makefile.in, libI77/Makefile.in (CFLAGS): Put -g1 - after configured CFLAGS but before GCC_CFLAGS, so by default - the libraries are built with minimal debugging information. - -Fri Jul 28 10:30:15 1995 Dave Love <d.love@dl.ac.uk> - - * libI77/open.c (f_open): Call f_init if not already done. - -Sat Jul 1 19:31:56 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * libF77/system_.c (system_): Make buff one byte bigger so - following byte doesn't get overwritten by call with large - string. - -Tue Jun 27 23:28:16 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Incorporate changes by Bellcore to libf2c through 950613. - - * libF77/Version.c (__G77_LIBF77_VERSION__): Add this string - to track g77 mods to libf2c. - - * libI77/Version.c (__G77_LIBI77_VERSION__): Add this string - to track g77 mods to libf2c. - - * libI77/rawio.h: #include <rawio.h> only conditionally, - using macro intended for that purpose. - -Fri May 19 11:20:00 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * configure.in: Incorporate change made by d.love, - - * configure: Regenerated. - -Wed Apr 26 21:08:57 BST 1995 Dave Love <d.love@dl.ac.uk> - - * configure.in: Fix quoting problem in atexit check. - - * configure: Regenerated (with current autoconf). - -Wed Mar 15 12:49:58 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Incorporate changes by Bellcore to libf2c through 950315. - -Sun Mar 5 18:54:29 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * README: Tell people not to read lib[fi]77/README. - -Wed Feb 15 14:30:58 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * configure.in: Update copyright notice at top of file. - - * f2c.h.in (f2c_i2): Make sure defining this crashes compilations. - - * libI77/Makefile.in (F2C_H): Fix typo in definition of this - symbol (was FF2C_H=...). - -Sun Feb 12 13:39:36 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * README: Remove some obsolete items. - Add date. - - * TODO: Add date. - -Sat Feb 11 22:07:54 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Makefile.in (libf77, libi77): Add rules to .PHONY list. - - * f2c.h.in (flag): Make same type as friends. - - * libF77/Makefile.in (libf77): Rename to $(lib), remove from - .PHONY list. Fix some typos. - - * libI77/Makefile.in (libi77): Rename to $(lib), remove from - .PHONY list. Fix some typos. - -Thu Feb 2 12:22:41 1995 Craig Burley (burley@gnu.ai.mit.edu) - - * Makefile.in (libF77/Makefile): Fix typos in this rule's name - and dependencies. - - * libF77/Makefile.in (libf77): Add rule to .PHONY list. - - * libI77/Makefile.in (libi77): Add rule to .PHONY list. diff --git a/gcc/f/runtime/Makefile.in b/gcc/f/runtime/Makefile.in deleted file mode 100644 index e923c06f266..00000000000 --- a/gcc/f/runtime/Makefile.in +++ /dev/null @@ -1,253 +0,0 @@ -# Makefile for GNU F77 compiler runtime. -# Copyright (C) 1995-1997 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of GNU Fortran. -# -#GNU Fortran is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2, or (at your option) -#any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with GNU Fortran; see the file COPYING. If not, write to -#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -#02111-1307, USA. - -#### Start of system configuration section. #### - -# $(srcdir) must be set to the g77 runtime source directory -# (g77/f/runtime/). - -srcdir = @srcdir@ -VPATH = @srcdir@ - -top_srcdir = @top_srcdir@ - -INSTALL = @INSTALL@ # installs aren't actually done from here -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -RANLIB = @RANLIB@ -RANLIB_TEST = @RANLIB_TEST@ - -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ @DEFS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -CGFLAGS = -g0 - -GCC_FOR_TARGET = @CC@ -CC = $(GCC_FOR_TARGET) - -CROSS = @CROSS@ - -objext = .o - -transform=@program_transform_name@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -AR = ar -AR_FLAGS = rc - -# Directory in which to install scripts. -bindir = $(exec_prefix)/bin - -# Directory in which to install library files. -libdir = $(prefix)/lib - -# Directory in which to install documentation info files. -infodir = $(prefix)/info - -#### End of system configuration section. #### - -SHELL = /bin/sh - -lib = ../../libf2c.a - -SUBDIRS = libI77 libF77 libU77 - -MISC = libF77/F77_aloc.o libF77/VersionF.o libF77/main.o libF77/s_rnge.o \ - libF77/abort_.o libF77/getarg_.o libF77/iargc_.o libF77/getenv_.o \ - libF77/signal_.o libF77/s_stop.o libF77/s_paus.o libF77/system_.o \ - libF77/cabs.o libF77/derf_.o libF77/derfc_.o libF77/erf_.o \ - libF77/erfc_.o libF77/sig_die.o libF77/exit_.o -POW = libF77/pow_ci.o libF77/pow_dd.o libF77/pow_di.o libF77/pow_hh.o \ - libF77/pow_ii.o libF77/pow_ri.o libF77/pow_zi.o libF77/pow_zz.o \ - libF77/pow_qq.o -CX = libF77/c_abs.o libF77/c_cos.o libF77/c_div.o libF77/c_exp.o \ - libF77/c_log.o libF77/c_sin.o libF77/c_sqrt.o -DCX = libF77/z_abs.o libF77/z_cos.o libF77/z_div.o libF77/z_exp.o \ - libF77/z_log.o libF77/z_sin.o libF77/z_sqrt.o -REAL = libF77/r_abs.o libF77/r_acos.o libF77/r_asin.o libF77/r_atan.o \ - libF77/r_atn2.o libF77/r_cnjg.o libF77/r_cos.o libF77/r_cosh.o \ - libF77/r_dim.o libF77/r_exp.o libF77/r_imag.o libF77/r_int.o \ - libF77/r_lg10.o libF77/r_log.o libF77/r_mod.o libF77/r_nint.o \ - libF77/r_sign.o libF77/r_sin.o libF77/r_sinh.o libF77/r_sqrt.o \ - libF77/r_tan.o libF77/r_tanh.o -DBL = libF77/d_abs.o libF77/d_acos.o libF77/d_asin.o libF77/d_atan.o \ - libF77/d_atn2.o libF77/d_cnjg.o libF77/d_cos.o libF77/d_cosh.o \ - libF77/d_dim.o libF77/d_exp.o libF77/d_imag.o libF77/d_int.o \ - libF77/d_lg10.o libF77/d_log.o libF77/d_mod.o libF77/d_nint.o \ - libF77/d_prod.o libF77/d_sign.o libF77/d_sin.o libF77/d_sinh.o \ - libF77/d_sqrt.o libF77/d_tan.o libF77/d_tanh.o -INT = libF77/i_abs.o libF77/i_dim.o libF77/i_dnnt.o libF77/i_indx.o \ - libF77/i_len.o libF77/i_mod.o libF77/i_nint.o libF77/i_sign.o -HALF = libF77/h_abs.o libF77/h_dim.o libF77/h_dnnt.o libF77/h_indx.o \ - libF77/h_len.o libF77/h_mod.o libF77/h_nint.o libF77/h_sign.o -CMP = libF77/l_ge.o libF77/l_gt.o libF77/l_le.o libF77/l_lt.o \ - libF77/hl_ge.o libF77/hl_gt.o libF77/hl_le.o libF77/hl_lt.o -EFL = libF77/ef1asc_.o libF77/ef1cmc_.o -CHAR = libF77/s_cat.o libF77/s_cmp.o libF77/s_copy.o -F90BIT = libF77/lbitbits.o libF77/lbitshft.o libF77/qbitbits.o \ - libF77/qbitshft.o -FOBJ = $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) $(HALF) $(CMP) \ - $(EFL) $(CHAR) $(F90BIT) - -IOBJ = libI77/VersionI.o libI77/backspace.o libI77/close.o libI77/dfe.o \ - libI77/dolio.o libI77/due.o libI77/endfile.o libI77/err.o \ - libI77/fmt.o libI77/fmtlib.o libI77/iio.o libI77/ilnw.o \ - libI77/inquire.o libI77/lread.o libI77/lwrite.o libI77/open.o \ - libI77/rdfmt.o libI77/rewind.o libI77/rsfe.o libI77/rsli.o \ - libI77/rsne.o libI77/sfe.o libI77/sue.o libI77/typesize.o \ - libI77/uio.o libI77/util.o libI77/wref.o libI77/wrtfmt.o \ - libI77/wsfe.o libI77/wsle.o libI77/wsne.o libI77/xwsne.o \ - libI77/ftell_.o - -UOBJ = libU77/VersionU.o libU77/gerror_.o libU77/perror_.o libU77/ierrno_.o \ - libU77/itime_.o libU77/time_.o libU77/unlink_.o libU77/fnum_.o \ - libU77/getpid_.o libU77/getuid_.o libU77/getgid_.o libU77/kill_.o \ - libU77/rand_.o libU77/srand_.o libU77/irand_.o libU77/sleep_.o \ - libU77/idate_.o libU77/ctime_.o libU77/etime_.o libU77/dtime_.o \ - libU77/isatty_.o libU77/ltime_.o libU77/fstat_.o libU77/stat_.o \ - libU77/lstat_.o libU77/access_.o libU77/link_.o libU77/getlog_.o \ - libU77/ttynam_.o libU77/getcwd_.o libU77/vxttime_.o \ - libU77/vxtidate_.o libU77/gmtime_.o libU77/fdate_.o libU77/secnds_.o \ - libU77/bes.o libU77/dbes.o libU77/chdir_.o libU77/chmod_.o \ - libU77/lnblnk_.o libU77/hostnm_.o libU77/rename_.o libU77/fgetc_.o \ - libU77/fputc_.o libU77/umask_.o libU77/system_clock_.o libU77/date_.o \ - libU77/second_.o libU77/flush1_.o libU77/alarm_.o libU77/mclock_.o \ - libU77/symlnk_.o - -F2CEXT = abort derf derfc ef1asc ef1cmc erf erfc exit getarg getenv iargc \ - signal system flush ftell fseek access besj0 besj1 besjn besy0 besy1 \ - besyn chdir chmod ctime date dbesj0 dbesj1 dbesjn dbesy0 dbesy1 dbesyn \ - dtime etime fdate fgetc fget flush1 fnum fputc fput fstat gerror \ - getcwd getgid getlog getpid getuid gmtime hostnm idate ierrno irand \ - isatty itime kill link lnblnk lstat ltime mclock perror rand rename \ - secnds second sleep srand stat symlnk sclock time ttynam umask unlink \ - vxtidt vxttim alarm - -# flags_to_pass to recursive makes & configure (hence the quoting style) -FLAGS_TO_PASS = \ - CROSS="$(CROSS)" \ - AR_FLAGS="$(AR_FLAGS)" \ - AR="$(AR)" \ - GCCFLAGS="$(GCCFLAGS)" \ - GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ - CC="$(GCC_FOR_TARGET)" \ - LDFLAGS="$(LDFLAGS)" \ - RANLIB="$(RANLIB)" \ - RANLIB_TEST="$(RANLIB_TEST)" \ - SHELL="$(SHELL)" - -CROSS_FLAGS_TO_PASS = \ - CROSS="$(CROSS)" \ - AR_FLAGS="$(AR_FLAGS)" \ - AR="$(AR)" \ - GCCFLAGS="$(GCCFLAGS)" \ - GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ - CC="$(GCC_FOR_TARGET)" \ - LDFLAGS="$(LDFLAGS)" \ - RANLIB="$(RANLIB)" \ - RANLIB_TEST="$(RANLIB_TEST)" \ - SHELL="$(SHELL)" - -all: ../../include/f2c.h libi77 libf77 libu77 $(lib) - -$(lib): stamp-lib ; @true -stamp-lib: $(FOBJ) $(IOBJ) $(UOBJ) - rm -f stamp-lib - $(AR) $(AR_FLAGS) $(lib) $? - rm -fr libE77 - mkdir libE77 - for name in $(F2CEXT); \ - do \ - echo $${name}; \ - $(GCC_FOR_TARGET) -c -I. -I$(srcdir) -I../../include $(CPPFLAGS) $(CFLAGS) $(CGFLAGS) \ - -DL$${name} $(srcdir)/f2cext.c -o libE77/L$${name}$(objext); \ - if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ - done - $(AR) $(AR_FLAGS) $(lib) libE77/*$(object) - rm -fr libE77 - if $(RANLIB_TEST); then $(RANLIB) $(lib); \ - else true; fi - touch stamp-lib - -libi77: libI77/Makefile - if test "$(CROSS)"; then \ - cd libI77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \ - else \ - cd libI77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \ - fi - -libf77: libF77/Makefile - if test "$(CROSS)"; then \ - cd libF77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \ - else \ - cd libF77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \ - fi - -libu77: libU77/Makefile - if test "$(CROSS)"; then \ - cd libU77; $(MAKE) -f Makefile $(CROSS_FLAGS_TO_PASS) all ; \ - else \ - cd libU77; $(MAKE) -f Makefile $(FLAGS_TO_PASS) all ; \ - fi - -${srcdir}/configure: ${srcdir}/configure.in - rm -f config.cache && cd ${srcdir} && autoconf && rm -f config.cache -${srcdir}/libU77/configure: ${srcdir}/libU77/configure.in - rm -f libU77/config.cache && cd ${srcdir}/libU77 && autoconf && rm -f config.cache -#../include/f2c.h libI77/Makefile libF77/Makefile libU77/Makefile Makefile: ${srcdir}/Makefile.in \ -# config.status libU77/config.status -# $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status -# cd libU77; $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status - -# Extra dependencies for the targets above: -libI77/Makefile: $(srcdir)/libI77/Makefile.in -libF77/Makefile: $(srcdir)/libF77/Makefile.in -libU77/Makefile: $(srcdir)/libU77/Makefile.in -../../include/f2c.h: $(srcdir)/f2c.h.in - -#config.status: ${srcdir}/configure -# $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status --recheck -#libU77/config.status: ${srcdir}/libU77/configure -# cd libU77; $(FLAGS_TO_PASS) CONFIG_SITE=/dev/null $(SHELL) config.status --recheck - -mostlyclean: - for i in libI77 libF77 libU77; do cd $$i; $(MAKE) -f Makefile mostlyclean; cd ..; done - -clean: - -rm -f config.log config.cache - for i in libI77 libF77 libU77; do cd $$i; $(MAKE) -f Makefile clean; cd ..; done - -distclean: clean - -rm -f Makefile lib?77/Makefile config.status libU77/config.status ../../include/f2c.h - -maintainer-clean: distclean - -rm -f $(srcdir)/configure $(srcdir)/libU77/configure - -uninstall: - rm ../../include/f2c.h - -rebuilt: ${srcdir}/configure ${srcdir}/libU77/configure - -.PHONY: libf77 libi77 libu77 rebuilt mostlyclean clean distclean maintainer-clean \ - uninstall all diff --git a/gcc/f/runtime/README b/gcc/f/runtime/README deleted file mode 100644 index 9419af77189..00000000000 --- a/gcc/f/runtime/README +++ /dev/null @@ -1,46 +0,0 @@ -970811 - -This directory contains the f2c library packaged for use with g77 to configure -and build automatically (in principle!) as part of the top-level configure and -make steps. This depends on the makefile and configure fragments in ../f. - -Some small changes have been made to the f2c distributions of lib[FI]77 which -come from <ftp:bell-labs.com/netlib/f2c/> and are maintained (excellently) by -David M. Gay <dmg@bell-labs.com>. See the Notice files for copyright -information. I'll try to get the changes rolled into the f2c distribution. - -Files that come directly from netlib are either maintained in the -gcc/f/runtime/ directory under their original names or, if they -are not pertinent for g77's version of libf2c, under their original -names with `.netlib' appended. For example, gcc/f/runtime/permissions.netlib -is a copy of f2c's top-level`permissions' file in the netlib distribution. -In this case, it applies only to the relevant portions of the libF77/ and -libI77/ directories; it does not apply to the libU77/ directory, which is -distributed under different licensing arrangements. Similarly, -the `makefile.netlib' files in libF77/ and libI77/ are copies of -the respective `makefile' files in the netlib distribution, but -are not used when building g77's version of libf2c. - -The `README.netlib' files in libF77/ and libI77/ thus might be -interesting, but should not be taken as guidelines for how to -configure and build libf2c in g77's distribution. - -The packaging for auto-configuration was done by Dave Love <d.love@dl.ac.uk>. -Minor changes have been made by James Craig Burley <burley@gnu.ai.mit.edu>, -who probably broke things Dave had working. :-) - -Among the user-visible changes (choices) g77 makes in its -version of libf2c: - -- f2c.h configured to default to padding unformatted direct reads - (#define Pad_UDread), because that's the behavior most users - expect. - -- f2c.h configured to default to outputting leading zeros before - decimal points in formatted and list-directed output, to be compatible - with many other compilers (#define WANT_LEAD_0). Either way is - standard-conforming, however, and you should try to avoid writing - code that assumes one format or another. - -- dtime_() and etime_() are from Dave Love's libU77, not from - netlib's libF77. diff --git a/gcc/f/runtime/TODO b/gcc/f/runtime/TODO deleted file mode 100644 index a44d1ed7f23..00000000000 --- a/gcc/f/runtime/TODO +++ /dev/null @@ -1,17 +0,0 @@ -970811 - -TODO list for the g77 library - -* `Makefile.in's should be brought up to standard; I'm not sure they - have a complete set of targets at present. - -* Investigate building shared libraries on systems we know about - (probably in 0.5.22, using libtool-1.0 from the FSF, which looks - quite useful). - -* Test cases. - -* Allow the library to be stripped to save space. - -* An interface to IEEE maths functions from libc where this makes - sense. diff --git a/gcc/f/runtime/changes.netlib b/gcc/f/runtime/changes.netlib deleted file mode 100644 index 1827154b591..00000000000 --- a/gcc/f/runtime/changes.netlib +++ /dev/null @@ -1,2841 +0,0 @@ -31 Aug. 1989: - 1. A(min(i,j)) now is translated correctly (where A is an array). - 2. 7 and 8 character variable names are allowed (but elicit a - complaint under -ext). - 3. LOGICAL*1 is treated as LOGICAL, with just one error message - per LOGICAL*1 statement (rather than one per variable declared - in that statement). [Note that LOGICAL*1 is not in Fortran 77.] - Like f77, f2c now allows the format in a read or write statement - to be an integer array. - -5 Sept. 1989: - Fixed botch in argument passing of substrings of equivalenced -variables. - -15 Sept. 1989: - Warn about incorrect code generated when a character-valued -function is not declared external and is passed as a parameter -(in violation of the Fortran 77 standard) before it is invoked. -Example: - - subroutine foo(a,b) - character*10 a,b - call goo(a,b) - b = a(3) - end - -18 Sept. 1989: - Complain about overlapping initializations. - -20 Sept. 1989: - Warn about names declared EXTERNAL but never referenced; -include such names as externs in the generated C (even -though most C compilers will discard them). - -24 Sept. 1989: - New option -w8 to suppress complaint when COMMON or EQUIVALENCE -forces word alignment of a double. - Under -A (for ANSI C), ensure that floating constants (terminated -by 'f') contain either a decimal point or an exponent field. - Repair bugs sometimes encountered with CHAR and ICHAR intrinsic -functions. - Restore f77's optimizations for copying and comparing character -strings of length 1. - Always assume floating-point valued routines in libF77 return -doubles, even under -R. - Repair occasional omission of arguments in routines having multiple -entry points. - Repair bugs in computing offsets of character strings involved -in EQUIVALENCE. - Don't omit structure qualification when COMMON variables are used -as FORMATs or internal files. - -2 Oct. 1989: - Warn about variables that appear only in data stmts; don't emit them. - Fix bugs in character DATA for noncharacter variables -involved in EQUIVALENCE. - Treat noncharacter variables initialized (at least partly) with -character data as though they were equivalenced -- put out a struct -and #define the variables. This eliminates the hideous and nonportable -numeric values that were used to initialize such variables. - Treat IMPLICIT NONE as IMPLICIT UNDEFINED(A-Z) . - Quit when given invalid options. - -8 Oct. 1989: - Modified naming scheme for generated intermediate variables; -more are recycled, fewer distinct ones used. - New option -W nn specifies nn characters/word for Hollerith -data initializing non-character variables. - Bug fix: x(i:min(i+10,j)) used to elicit "Can't handle opcode 31 yet". - Integer expressions of the form (i+const1) - (i+const2), where -i is a scalar integer variable, are now simplified to (const1-const2); -this leads to simpler translation of some substring expressions. - Initialize uninitialized portions of character string arrays to 0 -rather than to blanks. - -9 Oct. 1989: - New option -c to insert comments showing original Fortran source. - New option -g to insert line numbers of original Fortran source. - -10 Oct. 1989: - ! recognized as in-line comment delimiter (a la Fortran 88). - -24 Oct. 1989: - New options to ease coping with systems that want the structs -that result from COMMON blocks to be defined just once: - -E causes uninitialized COMMON blocks to be declared Extern; -if Extern is undefined, f2c.h #defines it to be extern. - -ec causes a separate .c file to be emitted for each -uninitialized COMMON block: COMMON /ABC/ yields abc_com.c; -thus one can compile *_com.c into a library to ensure -precisely one definition. - -e1c is similar to -ec, except that everything goes into -one file, along with comments that give a sed script for -splitting the file into the pieces that -ec would give. -This is for use with netlib's "execute f2c" service (for which --ec is coerced into -e1c, and the sed script will put everything -but the COMMON definitions into f2c_out.c ). - -28 Oct. 1989: - Convert "i = i op ..." into "i op= ...;" even when i is a -dummy argument. - -13 Nov. 1989: - Name integer constants (passed as arguments) c__... rather -than c_... so - common /c/stuff - call foo(1) - ... -is translated correctly. - -19 Nov. 1989: - Floating-point constants are now kept as strings unless they -are involved in constant expressions that get simplified. The -floating-point constants kept as strings can have arbitrarily -many significant figures and a very large exponent field (as -large as long int allows on the machine on which f2c runs). -Thus, for example, the body of - - subroutine zot(x) - double precision x(6), pi - parameter (pi=3.1415926535897932384626433832795028841972) - x(1) = pi - x(2) = pi+1 - x(3) = 9287349823749272.7429874923740978492734D-298374 - x(4) = .89 - x(5) = 4.0005 - x(6) = 10D7 - end - -now gets translated into - - x[1] = 3.1415926535897932384626433832795028841972; - x[2] = 4.1415926535897931; - x[3] = 9.2873498237492727429874923740978492734e-298359; - x[4] = (float).89; - x[5] = (float)4.0005; - x[6] = 1e8; - -rather than the former - - x[1] = 3.1415926535897931; - x[2] = 4.1415926535897931; - x[3] = 0.; - x[4] = (float)0.89000000000000003; - x[5] = (float)4.0004999999999997; - x[6] = 100000000.; - - Recognition of f77 machine-constant intrinsics deleted, i.e., -epbase, epprec, epemin, epemax, eptiny, ephuge, epmrsp. - -22 Nov. 1989: - Workarounds for glitches on some Sun systems... - libf77: libF77/makefile modified to point out possible need -to compile libF77/main.c with -Donexit=on_exit . - libi77: libI77/wref.c (and libI77/README) modified so non-ANSI -systems can compile with USE_STRLEN defined, which will cause - sprintf(b = buf, "%#.*f", d, x); - n = strlen(b) + d1; -rather than - n = sprintf(b = buf, "%#.*f", d, x) + d1; -to be compiled. - -26 Nov. 1989: - Longer names are now accepted (up to 50 characters); names may -contain underscores (in which case they will have two underscores -appended, to avoid clashes with library names). - -28 Nov. 1989: - libi77 updated: - 1. Allow 3 (or, on Crays, 4) digit exponents under format Ew.d . - 2. Try to get things right on machines where ints have 16 bits. - -29 Nov. 1989: - Supplied missing semicolon in parameterless subroutines that -have multiple entry points (all of them parameterless). - -30 Nov. 1989: - libf77 and libi77 revised to use types from f2c.h. - f2c now types floating-point valued C library routines as "double" -rather than "doublereal" (for use with nonstandard C compilers for -which "double" is IEEE double extended). - -1 Dec. 1989: - f2c.h updated to eliminate #defines rendered unnecessary (and, -indeed, dangerous) by change of 26 Nov. to long names possibly -containing underscores. - libi77 further revised: yesterday's change omitted two tweaks to fmt.h -(tweaks which only matter if float and real or double and doublereal are -different types). - -2 Dec. 1989: - Better error message (than "bad tag") for NAMELIST, which no longer -inhibits C output. - -4 Dec. 1989: - Allow capital letters in hex constants (f77 extension; e.g., -x'a012BCd', X'A012BCD' and x'a012bcd' are all treated as the integer -167848909). - libi77 further revised: lio.c lio.h lread.c wref.c wrtfmt.c tweaked -again to allow float and real or double and doublereal to be different. - -6 Dec. 1989: - Revised f2c.h -- required for the following... - Simpler looking translations for abs, min, max, using #defines in -revised f2c.h . - libi77: more corrections to types; additions for NAMELIST. - Corrected casts in some I/O calls. - Translation of NAMELIST; libi77 must still be revised. Currently -libi77 gives you a run-time error message if you attempt NAMELIST I/O. - -7 Dec. 1989: - Fixed bug that prevented local integer variables that appear in DATA -stmts from being ASSIGNed statement labels. - Fillers (for DATA statements initializing EQUIVALENCEd variables and -variables in COMMON) typed integer rather than doublereal (for slightly -more portability, e.g. to Crays). - libi77: missing return values supplied in a few places; some tests -reordered for better working on the Cray. - libf77: better accuracy for complex divide, complex square root, -real mod function (casts to double; double temporaries). - -9 Dec. 1989: - Fixed bug that caused needless (albeit harmless) empty lines to be -inserted in the C output when a comment line contained trailing blanks. - Further tweak to type of fillers: allow doublereal fillers if the -struct has doublereal data. - -11 Dec. 1989: - Alteration of rule for producing external (C) names from names that -contain underscores. Now the external name is always obtained by -appending a pair of underscores. - -12 Dec. 1989: - C production inhibited after most errors. - -15 Dec. 1989: - Fixed bug in headers for subroutines having two or more character -strings arguments: the length arguments were reversed. - -19 Dec. 1989: - f2c.h libf77 libi77: adjusted so #undefs in f2c.h should not foil -compilation of libF77 and libI77. - libf77: getenv_ adjusted to work with unsorted environments. - libi77: the iostat= specifier should now work right with internal I/O. - -20 Dec. 1989: - f2c bugs fixed: In the absence of an err= specifier, the iostat= -specifier was generally set wrong. Character strings containing -explicit nulls (\0) were truncated at the first null. - Unlabeled DO loops recognized; must be terminated by ENDDO. -(Don't ask for CYCLE, EXIT, named DO loops, or DO WHILE.) - -29 Dec. 1989: - Nested unlabeled DO loops now handled properly; new warning for -extraneous text at end of FORMAT. - -30 Dec. 1989: - Fixed bug in translating dble(real(...)), dble(sngl(...)), and -dble(float(...)), where ... is either of type double complex or -is an expression requiring assignment to intermediate variables (e.g., -dble(real(foo(x+1))), where foo is a function and x is a variable). -Regard nonblank label fields on continuation lines as an error. - -3 Jan. 1990: - New option -C++ yields output that should be understood -by C++ compilers. - -6 Jan. 1989: - -a now excludes variables that appear in a namelist from those -that it makes automatic. (As before, it also excludes variables -that appear in a common, data, equivalence, or save statement.) - The syntactically correct Fortran - read(*,i) x - end -now yields syntactically correct C (even though both the Fortran -and C are buggy -- no FORMAT has not been ASSIGNed to i). - -7 Jan. 1990: - libi77: routines supporting NAMELIST added. Surrounding quotes -made optional when no ambiguity arises in a list or namelist READ -of a character-string value. - -9 Jan. 1990: - f2c.src made available. - -16 Jan. 1990: - New options -P to produce ANSI C or C++ prototypes for procedures -defined. Change to -A and -C++: f2c tries to infer prototypes for -invoked procedures unless the new -!P option is given. New warning -messages for inconsistent calling sequences among procedures within -a single file. Most of f2c/src is affected. - f2c.h: typedefs for procedure arguments added; netlib's f2c service -will insert appropriate typedefs for use with older versions of f2c.h. - -17 Jan. 1990: - f2c/src: defs.h exec.c format.c proc.c putpcc.c version.c xsum0.out -updated. Castargs and protofile made extern in defs.h; exec.c -modified so superfluous else clauses are diagnosed; unused variables -omitted from declarations in format.c proc.c putpcc.c . - -21 Jan. 1990: - No C emitted for procedures declared external but not referenced. - f2c.h: more new types added for use with -P. - New feature: f2c accepts as arguments files ending in .p or .P; -such files are assumed to be prototype files, such as produced by -the -P option. All prototype files are read before any Fortran files -and apply globally to all Fortran files. Suitable prototypes help f2c -warn about calling-sequence errors and can tell f2c how to type -procedures declared external but not explicitly typed; the latter is -mainly of interest for users of the -A and -C++ options. (Prototype -arguments are not available to netlib's "execute f2c" service.) - New option -it tells f2c to try to infer types of untyped external -arguments from their use as parameters to prototyped or previously -defined procedures. - f2c/src: many minor cleanups; most modules changed. Individual -files in f2c/src are now in "bundle" format. The former f2c.1 is -now f2c.1t; "f2c.1t from f2c" and "f2c.1t from f2c/src" are now the -same, as are "f2c.1 from f2c" and "f2c.1 from f2c/src". People who -do not obtain a new copy of "all from f2c/src" should at least add - fclose(sortfp); -after the call on do_init_data(outfile, sortfp) in format_data.c . - -22 Jan. 1990: - Cleaner man page wording (thanks to Doug McIlroy). - -it now also applies to all untyped EXTERNAL procedures, not just -arguments. - -23 Jan. 01:34:00 EST 1990: - Bug fixes: under -A and -C++, incorrect C was generated for -subroutines having multiple entries but no arguments. - Under -A -P, subroutines of no arguments were given prototype -calling sequence () rather than (void). - Character-valued functions elicited erroneous warning messages -about inconsistent calling sequences when referenced by another -procedure in the same file. - f2c.1t: omit first appearance of libF77.a in FILES section; -load order of libraries is -lF77 -lI77, not vice versa (bug -introduced in yesterday's edits); define .F macro for those whose --man lacks it. (For a while after yesterday's fixes were posted, -f2c.1t was out of date. Sorry!) - -23 Jan. 9:53:24 EST 1990: - Character substring expressions involving function calls having -character arguments (including the intrinsic len function) yielded -incorrect C. - Procedures defined after invocation (in the same file) with -conflicting argument types also got an erroneous message about -the wrong number of arguments. - -24 Jan. 11:44:00 EST 1990: - Bug fixes: -p omitted #undefs; COMMON block names containing -underscores had their C names incorrectly computed; a COMMON block -having the name of a previously defined procedure wreaked havoc; -if all arguments were .P files, f2c tried reading the second as a -Fortran file. - New feature: -P emits comments showing COMMON block lengths, so one -can get warnings of incompatible COMMON block lengths by having f2c -read .P (or .p) files. Now by running f2c twice, first with -P -!c -(or -P!c), then with *.P among the arguments, you can be warned of -inconsistent COMMON usage, and COMMON blocks having inconsistent -lengths will be given the maximum length. (The latter always did -happen within each input file; now -P lets you extend this behavior -across files.) - -26 Jan. 16:44:00 EST 1990: - Option -it made less aggressive: untyped external procedures that -are invoked are now typed by the rules of Fortran, rather than by -previous use of procedures to which they are passed as arguments -before being invoked. - Option -P now includes information about references, i.e., called -procedures, in the prototype files (in the form of special comments). -This allows iterative invocations of f2c to infer more about untyped -external names, particularly when multiple Fortran files are involved. - As usual, there are some obscure bug fixes: -1. Repair of erroneous warning messages about inconsistent number of -arguments that arose when a character dummy parameter was discovered -to be a function or when multiple entry points involved character -variables appearing in a previous entry point. -2. Repair of memory fault after error msg about "adjustable character -function". -3. Under -U, allow MAIN_ as a subroutine name (in the same file as a -main program). -4. Change for consistency: a known function invoked as a subroutine, -then as a function elicits a warning rather than an error. - -26 Jan. 22:32:00 EST 1990: - Fixed two bugs that resulted in incorrect C for substrings, within -the body of a character-valued function, of the function's name, when -those substrings were arguments to another function (even implicitly, -as in character-string assignment). - -28 Jan. 18:32:00 EST 1990: - libf77, libi77: checksum files added; "make check" looks for -transmission errors. NAMELIST read modified to allow $ rather than & -to precede a namelist name, to allow $ rather than / to terminate -input where the name of another variable would otherwise be expected, -and to regard all nonprinting ASCII characters <= ' ' as spaces. - -29 Jan. 02:11:00 EST 1990: - "fc from f2c" added. - -it option made the default; -!it turns it off. Type information is -now updated in a previously missed case. - -P option tweaked again; message about when rerunning f2c may change -prototypes or declarations made more accurate. - New option -Ps implies -P and returns exit status 4 if rerunning -f2c -P with prototype inputs might change prototypes or declarations. -Now you can execute a crude script like - - cat *.f >zap.F - rm -f zap.P - while :; do - f2c -Ps -!c zap.[FP] - case $? in 4) ;; *) break;; esac - done - -to get a file zap.P of the best prototypes f2c can determine for *.f . - -Jan. 29 07:30:21 EST 1990: - Forgot to check for error status when setting return code 4 under -Ps; -error status (1, 2, 3, or, for caught signal, 126) now takes precedence. - -Jan 29 14:17:00 EST 1990: - Incorrect handling of - open(n,'filename') -repaired -- now treated as - open(n,file='filename') -(and, under -ext, given an error message). - New optional source file memset.c for people whose systems don't -provide memset, memcmp, and memcpy; #include <string.h> in mem.c -changed to #include "string.h" so BSD people can create a local -string.h that simply says #include <strings.h> . - -Jan 30 10:34:00 EST 1990: - Fix erroneous warning at end of definition of a procedure with -character arguments when the procedure had previously been called with -a numeric argument instead of a character argument. (There were two -warnings, the second one incorrectly complaining of a wrong number of -arguments.) - -Jan 30 16:29:41 EST 1990: - Fix case where -P and -Ps erroneously reported another iteration -necessary. (Only harm is the extra iteration.) - -Feb 3 01:40:00 EST 1990: - Supply semicolon occasionally omitted under -c . - Try to force correct alignment when numeric variables are initialized -with character data (a non-standard and non-portable practice). You -must use the -W option if your code has such data statements and is -meant to run on a machine with other than 4 characters/word; e.g., for -code meant to run on a Cray, you would specify -W8 . - Allow parentheses around expressions in output lists (in write and -print statements). - Rename source files so their names are <= 12 characters long -(so there's room to append .Z and still have <= 14 characters); -renamed files: formatdata.c niceprintf.c niceprintf.h safstrncpy.c . - f2c material made available by anonymous ftp from research.att.com -(look in dist/f2c ). - -Feb 3 03:49:00 EST 1990: - Repair memory fault that arose from use (in an assignment or -call) of a non-argument variable declared CHARACTER*(*). - -Feb 9 01:35:43 EST 1990: - Fix erroneous error msg about bad types in - subroutine foo(a,adim) - dimension a(adim) - integer adim - Fix improper passing of character args (and possible memory fault) -in the expression part of a computed goto. - Fix botched calling sequences in array references involving -functions having character args. - Fix memory fault caused by invocation of character-valued functions -of no arguments. - Fix botched calling sequence of a character*1-valued function -assigned to a character*1 variable. - Fix bug in error msg for inconsistent number of args in prototypes. - Allow generation of C output despite inconsistencies in prototypes, -but give exit code 8. - Simplify include logic (by removing some bogus logic); never -prepend "/usr/include/" to file names. - Minor cleanups (that should produce no visible change in f2c's -behavior) in intr.c parse.h main.c defs.h formatdata.c p1output.c . - -Feb 10 00:19:38 EST 1990: - Insert (integer) casts when floating-point expressions are used -as subscripts. - Make SAVE stmt (with no variable list) override -a . - Minor cleanups: change field to Field in struct Addrblock (for the -benefit of buggy C compilers); omit system("/bin/cp ...") in misc.c . - -Feb 13 00:39:00 EST 1990: - Error msg fix in gram.dcl: change "cannot make %s parameter" -to "cannot make into parameter". - -Feb 14 14:02:00 EST 1990: - Various cleanups (invisible on systems with 4-byte ints), thanks -to Dave Regan: vaxx.c eliminated; %d changed to %ld various places; -external names adjusted for the benefit of stupid systems (that ignore -case and recognize only 6 significant characters in external names); -buffer shortened in xsum.c (e.g. for MS-DOS); fopen modes distinguish -text and binary files; several unused functions eliminated; missing -arg supplied to an unlikely fatalstr invocation. - -Thu Feb 15 19:15:53 EST 1990: - More cleanups (invisible on systems with 4 byte ints); casts inserted -so most complaints from cyntax(1) and lint(1) go away; a few (int) -versus (long) casts corrected. - -Fri Feb 16 19:55:00 EST 1990: - Recognize and translate unnamed Fortran 8x do while statements. - Fix bug that occasionally caused improper breaking of character -strings. - New error message for attempts to provide DATA in a type-declaration -statement. - -Sat Feb 17 11:43:00 EST 1990: - Fix infinite loop clf -> Fatal -> done -> clf after I/O error. - Change "if (addrp->vclass = CLPROC)" to "if (addrp->vclass == CLPROC)" -in p1_addr (in p1output.c); this was probably harmless. - Move a misplaced } in lex.c (which slowed initkey()). - Thanks to Gary Word for pointing these things out. - -Sun Feb 18 18:07:00 EST 1990: - Detect overlapping initializations of arrays and scalar variables -in previously missed cases. - Treat logical*2 as logical (after issuing a warning). - Don't pass string literals to p1_comment(). - Correct a cast (introduced 16 Feb.) in gram.expr; this matters e.g. -on a Cray. - Attempt to isolate UNIX-specific things in sysdep.c (a new source -file). Unless sysdep.c is compiled with SYSTEM_SORT defined, the -intermediate files created for DATA statements are now sorted in-core -without invoking system(). - -Tue Feb 20 16:10:35 EST 1990: - Move definition of binread and binwrite from init.c to sysdep.c . - Recognize Fortran 8x tokens < <= == >= > <> as synonyms for -.LT. .LE. .EQ. .GE. .GT. .NE. - Minor cleanup in putpcc.c: fully remove simoffset(). - More discussion of system dependencies added to libI77/README. - -Tue Feb 20 21:44:07 EST 1990: - Minor cleanups for the benefit of EBCDIC machines -- try to remove -the assumption that 'a' through 'z' are contiguous. (Thanks again to -Gary Word.) Also, change log2 to log_2 (shouldn't be necessary). - -Wed Feb 21 06:24:56 EST 1990: - Fix botch in init.c introduced in previous change; only matters -to non-ASCII machines. - -Thu Feb 22 17:29:12 EST 1990: - Allow several entry points to mention the same array. Protect -parameter adjustments with if's (for the case that an array is not -an argument to all entrypoints). - Under -u, allow - subroutine foo(x,n) - real x(n) - integer n - Compute intermediate variables used to evaluate dimension expressions -at the right time. Example previously mistranslated: - subroutine foo(x,k,m,n) - real x(min(k,m,n)) - ... - write(*,*) x - Detect duplicate arguments. (The error msg points to the first -executable stmt -- not wonderful, but not worth fixing.) - Minor cleanup of min/max computation (sometimes slightly simpler). - -Sun Feb 25 09:39:01 EST 1990: - Minor tweak to multiple entry points: protect parameter adjustments -with if's only for (array) args that do not appear in all entry points. - Minor tweaks to format.c and io.c (invisible unless your compiler -complained at the duplicate #defines of IOSUNIT and IOSFMT or at -comparisons of p1gets(...) with NULL). - -Sun Feb 25 18:40:10 EST 1990: - Fix bug introduced Feb. 22: if a subprogram contained DATA and the -first executable statement was labeled, then the label got lost. -(Just change INEXEC to INDATA in p1output.c; it occurs just once.) - -Mon Feb 26 17:45:10 EST 1990: - Fix bug in handling of " and ' in comments. - -Wed Mar 28 01:43:06 EST 1990: -libI77: - 1. Repair nasty I/O bug: opening two files and closing the first -(after possibly reading or writing it), then writing the second caused -the last buffer of the second to be lost. - 2. Formatted reads of logical values treated all letters other than -t or T as f (false). - libI77 files changed: err.c rdfmt.c Version.c - (Request "libi77 from f2c" -- you can't get these files individually.) - -f2c itself: - Repair nasty bug in translation of - ELSE IF (condition involving complicated abs, min, or max) --- auxiliary statements were emitted at the wrong place. - Supply semicolon previously omitted from the translation of a label -(of a CONTINUE) immediately preceding an ELSE IF or an ELSE. This -bug made f2c produce invalid C. - Correct a memory fault that occurred (on some machines) when the -error message "adjustable dimension on non-argument" should be given. - Minor tweaks to remove some harmless warnings by overly chatty C -compilers. - Argument arays having constant dimensions but a variable lower bound -(e.g., x(n+1:n+3)) had a * omitted from scalar arguments involved in -the array offset computation. - -Wed Mar 28 18:47:59 EST 1990: -libf77: add exit(0) to end of main [return(0) encounters a Cray bug] - -Sun Apr 1 16:20:58 EDT 1990: - Avoid dereferencing null when processing equivalences after an error. - -Fri Apr 6 08:29:49 EDT 1990: - Calls involving alternate return specifiers omitted processing -needed for things like min, max, abs, and // (concatenation). - INTEGER*2 PARAMETERs were treated as INTEGER*4. - Convert some O(n^2) parsing to O(n). - -Tue Apr 10 20:07:02 EDT 1990: - When inconsistent calling sequences involve differing numbers of -arguments, report the first differing argument rather than the numbers -of arguments. - Fix bug under -a: formatted I/O in which either the unit or the -format was a local character variable sometimes resulted in invalid C -(a static struct initialized with an automatic component). - Improve error message for invalid flag after elided -. - Complain when literal table overflows, rather than infinitely -looping. (The complaint mentions the new and otherwise undocumented --NL option for specifying a larger literal table.) - New option -h for forcing strings to word (or, with -hd, double-word) -boundaries where possible. - Repair a bug that could cause improper splitting of strings. - Fix bug (cast of c to doublereal) in - subroutine foo(c,r) - double complex c - double precision r - c = cmplx(r,real(c)) - end - New include file "sysdep.h" has some things from defs.h (and -elsewhere) that one may need to modify on some systems. - Some large arrays that were previously statically allocated are now -dynamically allocated when f2c starts running. - f2c/src files changed: - README cds.c defs.h f2c.1 f2c.1t format.c formatdata.c init.c - io.c lex.c main.c makefile mem.c misc.c names.c niceprintf.c - output.c parse_args.c pread.c put.c putpcc.c sysdep.h - version.c xsum0.out - -Wed Apr 11 18:27:12 EDT 1990: - Fix bug in argument consistency checking of character, complex, and -double complex valued functions. If the same source file contained a -definition of such a function with arguments not explicitly typed, -then subsequent references to the function might get erroneous -warnings of inconsistent calling sequences. - Tweaks to sysdep.h for partially ANSI systems. - New options -kr and -krd cause f2c to use temporary variables to -enforce Fortran evaluation-order rules with pernicious, old-style C -compilers that apply the associative law to floating-point operations. - -Sat Apr 14 15:50:15 EDT 1990: - libi77: libI77 adjusted to allow list-directed and namelist I/O -of internal files; bug in namelist I/O of logical and character arrays -fixed; list input of complex numbers adjusted to permit d or D to -denote the start of the exponent field of a component. - f2c itself: fix bug in handling complicated lower-bound -expressions for character substrings; e.g., min and max did not work -right, nor did function invocations involving character arguments. - Switch to octal notation, rather than hexadecimal, for nonprinting -characters in character and string constants. - Fix bug (when neither -A nor -C++ was specified) in typing of -external arguments of type complex, double complex, or character: - subroutine foo(c) - external c - complex c -now results in - /* Complex */ int (*c) (); -(as, indeed, it once did) rather than - complex (*c) (); - -Sat Apr 14 22:50:39 EDT 1990: - libI77/makefile: updated "make check" to omit lio.c - lib[FI]77/makefile: trivial change: define CC = cc, reference $(CC). - (Request, e.g., "libi77 from f2c" -- you can't ask for individual -files from lib[FI]77.) - -Wed Apr 18 00:56:37 EDT 1990: - Move declaration of atof() from defs.h to sysdep.h, where it is -now not declared if stdlib.h is included. (NeXT's stdlib.h has a -#define atof that otherwise wreaks havoc.) - Under -u, provide a more intelligible error message (than "bad tag") -for an attempt to define a function without specifying its type. - -Wed Apr 18 17:26:27 EDT 1990: - Recognize \v (vertical tab) in Hollerith as well as quoted strings; -add recognition of \r (carriage return). - New option -!bs turns off recognition of escapes in character strings -(\0, \\, \b, \f, \n, \r, \t, \v). - Move to sysdep.c initialization of some arrays whose initialization -assumed ASCII; #define Table_size in sysdep.h rather than using -hard-coded 256 in allocating arrays of size 1 << (bits/byte). - -Thu Apr 19 08:13:21 EDT 1990: - Warn when escapes would make Hollerith extend beyond statement end. - Omit max() definition from misc.c (should be invisible except on -systems that erroneously #define max in stdlib.h). - -Mon Apr 23 22:24:51 EDT 1990: - When producing default-style C (no -A or -C++), cast switch -expressions to (int). - Move "-lF77 -lI77 -lm -lc" to link_msg, defined in sysdep.c . - Add #define scrub(x) to sysdep.h, with invocations in format.c and -formatdata.c, so that people who have systems like VMS that would -otherwise create multiple versions of intermediate files can -#define scrub(x) unlink(x) - -Tue Apr 24 18:28:36 EDT 1990: - Pass string lengths once rather than twice to a function of character -arguments involved in comparison of character strings of length 1. - -Fri Apr 27 13:11:52 EDT 1990: - Fix bug that made f2c gag on concatenations involving char(...) on -some systems. - -Sat Apr 28 23:20:16 EDT 1990: - Fix control-stack bug in - if(...) then - else if (complicated condition) - else - endif -(where the complicated condition causes assignment to an auxiliary -variable, e.g., max(a*b,c)). - -Mon Apr 30 13:30:10 EDT 1990: - Change fillers for DATA with holes from substructures to arrays -(in an attempt to make things work right with C compilers that have -funny padding rules for substructures, e.g., Sun C compilers). - Minor cleanup of exec.c (should not affect generated C). - -Mon Apr 30 23:13:51 EDT 1990: - Fix bug in handling return values of functions having multiple -entry points of differing return types. - -Sat May 5 01:45:18 EDT 1990: - Fix type inference bug in - subroutine foo(x) - call goo(x) - end - subroutine goo(i) - i = 3 - end -Instead of warning of inconsistent calling sequences for goo, -f2c was simply making i a real variable; now i is correctly -typed as an integer variable, and f2c issues an error message. - Adjust error messages issued at end of declarations so they -don't blame the first executable statement. - -Sun May 6 01:29:07 EDT 1990: - Fix bug in -P and -Ps: warn when the definition of a subprogram adds -information that would change prototypes or previous declarations. - -Thu May 10 18:09:15 EDT 1990: - Fix further obscure bug with (default) -it: inconsistent calling -sequences and I/O statements could interact to cause a memory fault. -Example: - SUBROUTINE FOO - CALL GOO(' Something') ! Forgot integer first arg - END - SUBROUTINE GOO(IUNIT,MSG) - CHARACTER*(*)MSG - WRITE(IUNIT,'(1X,A)') MSG - END - -Fri May 11 16:49:11 EDT 1990: - Under -!c, do not delete any .c files (when there are errors). - Avoid dereferencing 0 when a fatal error occurs while reading -Fortran on stdin. - -Wed May 16 18:24:42 EDT 1990: - f2c.ps made available. - -Mon Jun 4 12:53:08 EDT 1990: - Diagnose I/O units of invalid type. - Add specific error msg about dummy arguments in common. - -Wed Jun 13 12:43:17 EDT 1990: - Under -A, supply a missing "[1]" for CHARACTER*1 variables that appear -both in a DATA statement and in either COMMON or EQUIVALENCE. - -Mon Jun 18 16:58:31 EDT 1990: - Trivial updates to f2c.ps . ("Fortran 8x" --> "Fortran 90"; omit -"(draft)" from "(draft) ANSI C".) - -Tue Jun 19 07:36:32 EDT 1990: - Fix incorrect code generated for ELSE IF(expression involving -function call passing non-constant substring). - Under -h, preserve the property that strings are null-terminated -where possible. - Remove spaces between # and define in lex.c output.c parse.h . - -Mon Jun 25 07:22:59 EDT 1990: - Minor tweak to makefile to reduce unnecessary recompilations. - -Tue Jun 26 11:49:53 EDT 1990: - Fix unintended truncation of some integer constants on machines -where casting a long to (int) may change the value. E.g., when f2c -ran on machines with 16-bit ints, "i = 99999" was being translated -to "i = -31073;". - -Wed Jun 27 11:05:32 EDT 1990: - Arrange for CHARACTER-valued PARAMETERs to honor their length -specifications. Allow CHAR(nn) in expressions defining such PARAMETERs. - -Fri Jul 20 09:17:30 EDT 1990: - Avoid dereferencing 0 when a FORMAT statement has no label. - -Thu Jul 26 11:09:39 EDT 1990: - Remarks about VOID and binread,binwrite added to README. - Tweaks to parse_args: should be invisible unless your compiler -complained at (short)*store. - -Thu Aug 2 02:07:58 EDT 1990: - f2c.ps: change the first line of page 5 from - include stuff -to - include 'stuff' - -Tue Aug 14 13:21:24 EDT 1990: - libi77: libI77 adjusted to treat tabs as spaces in list input. - -Fri Aug 17 07:24:53 EDT 1990: - libi77: libI77 adjusted so a blank='ZERO' clause (upper case Z) -in an open of a currently open file works right. - -Tue Aug 28 01:56:44 EDT 1990: - Fix bug in warnings of inconsistent calling sequences: if an -argument to a subprogram was never referenced, then a previous -invocation of the subprogram (in the same source file) that -passed something of the wrong type for that argument did not -elicit a warning message. - -Thu Aug 30 09:46:12 EDT 1990: - libi77: prevent embedded blanks in list output of complex values; -omit exponent field in list output of values of magnitude between -10 and 1e8; prevent writing stdin and reading stdout or stderr; -don't close stdin, stdout, or stderr when reopening units 5, 6, 0. - -Tue Sep 4 12:30:57 EDT 1990: - Fix bug in C emitted under -I2 or -i2 for INTEGER*4 FUNCTION. - Warn of missing final END even if there are previous errors. - -Fri Sep 7 13:55:34 EDT 1990: - Remark about "make xsum.out" and "make f2c" added to README. - -Tue Sep 18 23:50:01 EDT 1990: - Fix null dereference (and, on some systems, writing of bogus *_com.c -files) under -ec or -e1c when a prototype file (*.p or *.P) describes -COMMON blocks that do not appear in the Fortran source. - libi77: - Add some #ifdef lines (#ifdef MSDOS, #ifndef MSDOS) to avoid -references to stat and fstat on non-UNIX systems. - On UNIX systems, add component udev to unit; decide that old -and new files are the same iff both the uinode and udev components -of unit agree. - When an open stmt specifies STATUS='OLD', use stat rather than -access (on UNIX systems) to check the existence of the file (in case -directories leading to the file have funny permissions and this is -a setuid or setgid program). - -Thu Sep 27 16:04:09 EDT 1990: - Supply missing entry for Impldoblock in blksize array of cpexpr -(in expr.c). No examples are known where this omission caused trouble. - -Tue Oct 2 22:58:09 EDT 1990: - libf77: test signal(...) == SIG_IGN rather than & 01 in main(). - libi77: adjust rewind.c so two successive rewinds after a write -don't clobber the file. - -Thu Oct 11 18:00:14 EDT 1990: - libi77: minor cleanups: add #include "fcntl.h" to endfile.c, err.c, -open.c; adjust g_char in util.c for segmented memories; in f_inqu -(inquire.c), define x appropriately when MSDOS is defined. - -Mon Oct 15 20:02:11 EDT 1990: - Add #ifdef MSDOS pointer adjustments to mem.c; treat NAME= as a -synonym for FILE= in OPEN statements. - -Wed Oct 17 16:40:37 EDT 1990: - libf77, libi77: minor cleanups: _cleanup() and abort() invocations -replaced by invocations of sig_die in main.c; some error messages -previously lost in buffers will now appear. - -Mon Oct 22 16:11:27 EDT 1990: - libf77: separate sig_die from main (for folks who don't want to use -the main in libF77). - libi77: minor tweak to comments in README. - -Fri Nov 2 13:49:35 EST 1990: - Use two underscores rather than one in generated temporary variable -names to avoid conflict with COMMON names. f2c.ps updated to reflect -this change and the NAME= extension introduced 15 Oct. - Repair a rare memory fault in io.c . - -Mon Nov 5 16:43:55 EST 1990: - libi77: changes to open.c (and err.c): complain if an open stmt -specifies new= and the file already exists (as specified by Fortrans 77 -and 90); allow file= to be omitted in open stmts and allow -status='replace' (Fortran 90 extensions). - -Fri Nov 30 10:10:14 EST 1990: - Adjust malloc.c for unusual systems whose sbrk() can return values -not properly aligned for doubles. - Arrange for slightly more helpful and less repetitive warnings for -non-character variables initialized with character data; these warnings -are (still) suppressed by -w66. - -Fri Nov 30 15:57:59 EST 1990: - Minor tweak to README (about changing VOID in f2c.h). - -Mon Dec 3 07:36:20 EST 1990: - Fix spelling of "character" in f2c.1t. - -Tue Dec 4 09:48:56 EST 1990: - Remark about link_msg and libf2c added to f2c/README. - -Thu Dec 6 08:33:24 EST 1990: - Under -U, render label nnn as L_nnn rather than Lnnn. - -Fri Dec 7 18:05:00 EST 1990: - Add more names from f2c.h (e.g. integer, real) to the c_keywords -list of names to which an underscore is appended to avoid confusion. - -Mon Dec 10 19:11:15 EST 1990: - Minor tweaks to makefile (./xsum) and README (binread/binwrite). - libi77: a few modifications for POSIX systems; meant to be invisible -elsewhere. - -Sun Dec 16 23:03:16 EST 1990: - Fix null dereference caused by unusual erroneous input, e.g. - call foo('abc') - end - subroutine foo(msg) - data n/3/ - character*(*) msg - end -(Subroutine foo is illegal because the character statement comes after a -data statement.) - Use decimal rather than hex constants in xsum.c (to prevent -erroneous warning messages about constant overflow). - -Mon Dec 17 12:26:40 EST 1990: - Fix rare extra underscore in character length parameters passed -for multiple entry points. - -Wed Dec 19 17:19:26 EST 1990: - Allow generation of C despite error messages about bad alignment -forced by equivalence. - Allow variable-length concatenations in I/O statements, such as - open(3, file=bletch(1:n) // '.xyz') - -Fri Dec 28 17:08:30 EST 1990: - Fix bug under -p with formats and internal I/O "units" in COMMON, -as in - COMMON /FIGLEA/F - CHARACTER*20 F - F = '(A)' - WRITE (*,FMT=F) 'Hello, world!' - END - -Tue Jan 15 12:00:24 EST 1991: - Fix bug when two equivalence groups are merged, the second with -nonzero offset, and the result is then merged into a common block. -Example: - INTEGER W(3), X(3), Y(3), Z(3) - COMMON /ZOT/ Z - EQUIVALENCE (W(1),X(1)), (X(2),Y(1)), (Z(3),X(1)) -***** W WAS GIVEN THE WRONG OFFSET - Recognize Fortran 90's optional NML= in NAMELIST READs and WRITEs. -(Currently NML= and FMT= are treated as synonyms -- there's no -error message if, e.g., NML= specifies a format.) - libi77: minor adjustment to allow internal READs from character -string constants in read-only memory. - -Fri Jan 18 22:56:15 EST 1991: - Add comment to README about needing to comment out the typedef of -size_t in sysdep.h on some systems, e.g. Sun 4.1. - Fix misspelling of "statement" in an error message in lex.c - -Wed Jan 23 00:38:48 EST 1991: - Allow hex, octal, and binary constants to have the qualifying letter -(z, x, o, or b) either before or after the quoted string containing the -digits. For now this change will not be reflected in f2c.ps . - -Tue Jan 29 16:23:45 EST 1991: - Arrange for character-valued statement functions to give results of -the right length (that of the statement function's name). - -Wed Jan 30 07:05:32 EST 1991: - More tweaks for character-valued statement functions: an error -check and an adjustment so a right-hand side of nonconstant length -(e.g., a substring) is handled right. - -Wed Jan 30 09:49:36 EST 1991: - Fix p1_head to avoid printing (char *)0 with %s. - -Thu Jan 31 13:53:44 EST 1991: - Add a test after the cleanup call generated for I/O statements with -ERR= or END= clauses to catch the unlikely event that the cleanup -routine encounters an error. - -Mon Feb 4 08:00:58 EST 1991: - Minor cleanup: omit unneeded jumps and labels from code generated for -some NAMELIST READs and WRITEs with IOSTAT=, ERR=, and/or END=. - -Tue Feb 5 01:39:36 EST 1991: - Change Mktemp to mktmp (for the benefit of systems so brain-damaged -that they do not distinguish case in external names -- and that for -some reason want to load mktemp). Try to get xsum0.out right this -time (it somehow didn't get updated on 4 Feb. 1991). - Add note to libi77/README about adjusting the interpretation of -RECL= specifiers in OPENs for direct unformatted I/O. - -Thu Feb 7 17:24:42 EST 1991: - New option -r casts values of REAL functions, including intrinsics, -to REAL. This only matters for unportable code like - real r - r = asin(1.) - if (r .eq. asin(1.)) ... -[The behavior of such code varies with the Fortran compiler used -- -and sometimes is affected by compiler options.] For now, the man page -at the end of f2c.ps is the only part of f2c.ps that reflects this new -option. - -Fri Feb 8 18:12:51 EST 1991: - Cast pointer differences passed as arguments to the appropriate type. -This matters, e.g., with MSDOS compilers that yield a long pointer -difference but have int == short. - Disallow nonpositive dimensions. - -Fri Feb 15 12:24:15 EST 1991: - Change %d to %ld in sprintf call in putpower in putpcc.c. - Free more memory (e.g. allowing translation of larger Fortran -files under MS-DOS). - Recognize READ (character expression) and WRITE (character expression) -as formatted I/O with the format given by the character expression. - Update year in Notice. - -Sat Feb 16 00:42:32 EST 1991: - Recant recognizing WRITE(character expression) as formatted output --- Fortran 77 is not symmetric in its syntax for READ and WRITE. - -Mon Mar 4 15:19:42 EST 1991: - Fix bug in passing the real part of a complex argument to an intrinsic -function. Omit unneeded parentheses in nested calls to intrinsics. -Example: - subroutine foo(x, y) - complex y - x = exp(sin(real(y))) + exp(imag(y)) - end - -Fri Mar 8 15:05:42 EST 1991: - Fix a comment in expr.c; omit safstrncpy.c (which had bugs in -cases not used by f2c). - -Wed Mar 13 02:27:23 EST 1991: - Initialize firstmemblock->next in mem_init in mem.c . [On most -systems it was fortuituously 0, but with System V, -lmalloc could -trip on this missed initialization.] - -Wed Mar 13 11:47:42 EST 1991: - Fix a reference to freed memory. - -Wed Mar 27 00:42:19 EST 1991: - Fix a memory fault caused by such illegal Fortran as - function foo - x = 3 - logical foo ! declaration among executables - foo=.false. ! used to suffer memory fault - end - -Fri Apr 5 08:30:31 EST 1991: - Fix loss of % in some format expressions, e.g. - write(*,'(1h%)') - Fix botch introduced 27 March 1991 that caused subroutines with -multiple entry points to have extraneous declarations of ret_val. - -Fri Apr 5 12:44:02 EST 1991 - Try again to omit extraneous ret_val declarations -- this morning's -fix was sometimes wrong. - -Mon Apr 8 13:47:06 EDT 1991: - Arrange for s_rnge to have the right prototype under -A -C . - -Wed Apr 17 13:36:03 EDT 1991: - New fatal error message for apparent invocation of a recursive -statement function. - -Thu Apr 25 15:13:37 EDT 1991: - F2c and libi77 adjusted so NAMELIST works with -i2. (I forgot -about -i2 when adding NAMELIST.) This required a change to f2c.h -(that only affects NAMELIST I/O under -i2.) Man-page description of --i2 adjusted to reflect that -i2 stores array lengths in short ints. - -Fri Apr 26 02:54:41 EDT 1991: - Libi77: fix some bugs in NAMELIST reading of multi-dimensional arrays -(file rsne.c). - -Thu May 9 02:13:51 EDT 1991: - Omit a trailing space in expr.c (could cause a false xsum value if -a mailer drops the trailing blank). - -Thu May 16 13:14:59 EDT 1991: - Libi77: increase LEFBL in lio.h to overcome a NeXT bug. - Tweak for compilers that recognize "nested" comments: inside comments, -turn /* into /+ (as well as */ into +/). - -Sat May 25 11:44:25 EDT 1991: - libf77: s_rnge: declare line long int rather than int. - -Fri May 31 07:51:50 EDT 1991: - libf77: system_: officially return status. - -Mon Jun 17 16:52:53 EDT 1991: - Minor tweaks: omit unnecessary declaration of strcmp (that caused -trouble on a system where strcmp was a macro) from misc.c; add -SHELL = /bin/sh to makefiles. - Fix a dereference of null when a CHARACTER*(*) declaration appears -(illegally) after DATA. Complain only once per subroutine about -declarations appearing after DATA. - -Mon Jul 1 00:28:13 EDT 1991: - Add test and error message for illegal use of subroutine names, e.g. - SUBROUTINE ZAP(A) - ZAP = A - END - -Mon Jul 8 21:49:20 EDT 1991: - Issue a warning about things like - integer i - i = 'abc' -(which is treated as i = ichar('a')). [It might be nice to treat 'abc' -as an integer initialized (in a DATA statement) with 'abc', but -other matters have higher priority.] - Render - i = ichar('A') -as - i = 'A'; -rather than - i = 65; -(which assumes ASCII). - -Fri Jul 12 07:41:30 EDT 1991: - Note added to README about erroneous definitions of __STDC__ . - -Sat Jul 13 13:38:54 EDT 1991: - Fix bugs in double type convesions of complex values, e.g. -sngl(real(...)) or dble(real(...)) (where ... is complex). - -Mon Jul 15 13:21:42 EDT 1991: - Fix bug introduced 8 July 1991 that caused erroneous warnings -"ichar([first char. of] char. string) assumed for conversion to numeric" -when a subroutine had an array of character strings as an argument. - -Wed Aug 28 01:12:17 EDT 1991: - Omit an unused function in format.c, an unused variable in proc.c . - Under -r8, promote complex to double complex (as the man page claims). - -Fri Aug 30 17:19:17 EDT 1991: - f2c.ps updated: slightly expand description of intrinsics and,or,xor, -not; add mention of intrinsics lshift, rshift; add note about f2c -accepting Fortran 90 inline comments (starting with !); update Cobalt -Blue address. - -Tue Sep 17 07:17:33 EDT 1991: - libI77: err.c and open.c modified to use modes "rb" and "wb" -when (f)opening unformatted files; README updated to point out -that it may be necessary to change these modes to "r" and "w" -on some non-ANSI systems. - -Tue Oct 15 10:25:49 EDT 1991: - Minor tweaks that make some PC compilers happier: insert some -casts, add args to signal functions. - Change -g to emit uncommented #line lines -- and to emit more of them; -update fc, f2c.1, f2c.1t, f2c.ps to reflect this. - Change uchar to Uchar in xsum.c . - Bring gram.c up to date. - -Thu Oct 17 09:22:05 EDT 1991: - libi77: README, fio.h, sue.c, uio.c changed so the length field -in unformatted sequential records has type long rather than int -(unless UIOLEN_int is #defined). This is for systems where sizeof(int) -can vary, depending on the compiler or compiler options. - -Thu Oct 17 13:42:59 EDT 1991: - libi77: inquire.c: when MSDOS is defined, don't strcmp units[i].ufnm -when it is NULL. - -Fri Oct 18 15:16:00 EDT 1991: - Correct xsum0.out in "all from f2c/src" (somehow botched on 15 Oct.). - -Tue Oct 22 18:12:56 EDT 1991: - Fix memory fault when a character*(*) argument is used (illegally) -as a dummy variable in the definition of a statement function. (The -memory fault occurred when the statement function was invoked.) - Complain about implicit character*(*). - -Thu Nov 14 08:50:42 EST 1991: - libi77: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c; this change -should be invisible unless you're running a brain-damaged system. - -Mon Nov 25 19:04:40 EST 1991: - libi77: correct botches introduced 17 Oct. 1991 and 14 Nov. 1991 -(change uint to Uint in lwrite.c; other changes that only matter if -sizeof(int) != sizeof(long)). - Add a more meaningful error message when bailing out due to an attempt -to invoke a COMMON variable as a function. - -Sun Dec 1 19:29:24 EST 1991: - libi77: uio.c: add test for read failure (seq. unformatted reads); -adjust an error return from EOF to off end of record. - -Tue Dec 10 17:42:28 EST 1991: - Add tests to prevent memory faults with bad uses of character*(*). - -Thu Dec 12 11:24:41 EST 1991: - libi77: fix bug with internal list input that caused the last -character of each record to be ignored; adjust error message in -internal formatted input from "end-of-file" to "off end of record" -if the format specifies more characters than the record contains. - -Wed Dec 18 17:48:11 EST 1991: - Fix bug in translating nonsensical ichar invocations involving -concatenations. - Fix bug in passing intrinsics lle, llt, lge, lgt as arguments; -hl_le was being passed rather than l_le, etc. - libf77: adjust length parameters from long to ftnlen, for -compiling with f2c_i2 defined. - -Sat Dec 21 15:30:57 EST 1991: - Allow DO nnn ... to end with an END DO statement labelled nnn. - -Tue Dec 31 13:53:47 EST 1991: - Fix bug in handling dimension a(n**3,2) -- pow_ii was called -incorrectly. - Fix bug in translating - subroutine x(abc,n) - character abc(n) - write(abc,'(i10)') 123 - end -(omitted declaration and initialiation of abc_dim1). - Complain about dimension expressions of such invalid types -as complex and logical. - -Fri Jan 17 11:54:20 EST 1992: - Diagnose some illegal uses of main program name (rather than -memory faulting). - libi77: (1) In list and namelist input, treat "r* ," and "r*," -alike (where r is a positive integer constant), and fix a bug in -handling null values following items with repeat counts (e.g., -2*1,,3). (2) For namelist reading of a numeric array, allow a new -name-value subsequence to terminate the current one (as though the -current one ended with the right number of null values). -(3) [lio.h, lwrite.c]: omit insignificant zeros in list and namelist -output. (Compile with -DOld_list_output to get the old behavior.) - -Sat Jan 18 15:58:01 EST 1992: - libi77: make list output consistent with F format by printing .1 -rather than 0.1 (introduced yesterday). - -Wed Jan 22 08:32:43 EST 1992: - libi77: add comment to README pointing out preconnection of -Fortran units 5, 6, 0 to stdin, stdout, stderr (respectively). - -Mon Feb 3 11:57:53 EST 1992: - libi77: fix namelist read bug that caused the character following -a comma to be ignored. - -Fri Feb 28 01:04:26 EST 1992: - libf77: fix buggy z_sqrt.c (double precision square root), which -misbehaved for arguments in the southwest quadrant. - -Thu Mar 19 15:05:18 EST 1992: - Fix bug (introduced 17 Jan 1992) in handling multiple entry points -of differing types (with implicitly typed entries appearing after -the first executable statement). - Fix memory fault in the following illegal Fortran: - double precision foo(i) -* illegal: above should be "double precision function foo(i)" - foo = i * 3.2 - entry moo(i) - end - Note about ANSI_Libraries (relevant, e.g., to IRIX 4.0.1 and AIX) -added to README. - Abort zero divides during constant simplification. - -Sat Mar 21 01:27:09 EST 1992: - Tweak ckalloc (misc.c) for systems where malloc(0) = 0; this matters -for subroutines with multiple entry points but no arguments. - Add "struct memblock;" to init.c (irrelevant to most compilers). - -Wed Mar 25 13:31:05 EST 1992: - Fix bug with IMPLICIT INTEGER*4(...): under -i2 or -I2, the *4 was -ignored. - -Tue May 5 09:53:55 EDT 1992: - Tweaks to README; e.g., ANSI_LIbraries changed to ANSI_Libraries . - -Wed May 6 23:49:07 EDT 1992 - Under -A and -C++, have subroutines return 0 (even if they have -no * arguments). - Adjust libi77 (rsne.c and lread.c) for systems where ungetc is -a macro. Tweak lib[FI]77/makefile to use unique intermediate file -names (for parallel makes). - -Tue May 19 09:03:05 EDT 1992: - Adjust libI77 to make err= work with internal list and formatted I/O. - -Sat May 23 18:17:42 EDT 1992: - Under -A and -C++, supply "return 0;" after the code generated for -a STOP statement -- the C compiler doesn't know that s_stop won't -return. - New (mutually exclusive) options: - -f treats all input lines as free-format lines, - honoring text that appears after column 72 - and not padding lines shorter than 72 characters - with blanks (which matters if a character string - is continued across 2 or more lines). - -72 treats text appearing after column 72 as an error. - -Sun May 24 09:45:37 EDT 1992: - Tweak description of -f in f2c.1 and f2c.1t; update f2c.ps . - -Fri May 29 01:17:15 EDT 1992: - Complain about externals used as variables. Example - subroutine foo(a,b) - external b - a = a*b ! illegal use of b; perhaps should be b() - end - -Mon Jun 15 11:15:27 EDT 1992: - Fix bug in handling namelists with names that have underscores. - -Sat Jun 27 17:30:59 EDT 1992: - Under -A and -C++, end Main program aliases with "return 0;". - Under -A and -C++, use .P files and usage in previous subprograms -in the current file to give prototypes for functions declared EXTERNAL -but not invoked. - Fix memory fault under -d1 -P . - Under -A and -C++, cast arguments to the right types in calling -a function that has been defined in the current file or in a .P file. - Fix bug in handling multi-dimensional arrays with array references -in their leading dimensions. - Fix bug in the intrinsic cmplx function when the first argument -involves an expression for which f2c generates temporary variables, -e.g. cmplx(abs(real(a)),1.) . - -Sat Jul 18 07:36:58 EDT 1992: - Fix buglet with -e1c (invisible on most systems) temporary file -f2c_functions was unlinked before being closed. - libf77: fix bugs in evaluating m**n for integer n < 0 and m an -integer different from 1 or a real or double precision 0. -Catch SIGTRAP (to print "Trace trap" before aborting). Programs -that previously erroneously computed 1 for 0**-1 may now fault. -Relevant routines: main.c pow_di.c pow_hh.c pow_ii.c pow_ri.c . - -Sat Jul 18 08:40:10 EDT 1992: - libi77: allow namelist input to end with & (e.g. &end). - -Thu Jul 23 00:14:43 EDT 1992 - Append two underscores rather than one to C keywords used as -local variables to avoid conflicts with similarly named COMMON blocks. - -Thu Jul 23 11:20:55 EDT 1992: - libf77, libi77 updated to assume ANSI prototypes unless KR_headers -is #defined. - libi77 now recognizes a Z format item as in Fortran 90; -the implementation assumes 8-bit bytes and botches character strings -on little-endian machines (by printing their bytes from right to -left): expect this bug to persist; fixing it would require a -change to the I/O calling sequences. - -Tue Jul 28 15:18:33 EDT 1992: - libi77: insert missed "#ifdef KR_headers" lines around getnum -header in rsne.c. Version not updated. - -NOTE: "index from f2c" now ends with current timestamps of files in -"all from f2c/src", sorted by time. To bring your source up to date, -obtain source files with a timestamp later than the time shown in your -version.c. - -Fri Aug 14 08:07:09 EDT 1992: - libi77: tweak wrt_E in wref.c to avoid signing NaNs. - -Sun Aug 23 19:05:22 EDT 1992: - fc: supply : after O in getopt invocation (for -O1 -O2 -O3). - -Mon Aug 24 18:37:59 EDT 1992: - Recant above tweak to fc: getopt is dumber than I thought; -it's necessary to say -O 1 (etc.). - libF77/README: add comments about ABORT, ERF, DERF, ERFC, DERFC, -GETARG, GETENV, IARGC, SIGNAL, and SYSTEM. - -Tue Oct 27 01:57:42 EST 1992: - libf77, libi77: - 1. Fix botched indirection in signal_.c. - 2. Supply missing l_eof = 0 assignment to s_rsne() in rsne.c (so -end-of-file on other files won't confuse namelist reads of external -files). - 3. Prepend f__ to external names that are only of internal -interest to lib[FI]77. - -Thu Oct 29 12:37:18 EST 1992: - libf77: Fix botch in signal_.c when KR_headers is #defined; -add CFLAGS to makefile. - libi77: trivial change to makefile for consistency with -libF77/makefile. - -Wed Feb 3 02:05:16 EST 1993: - Recognize types INTEGER*1, LOGICAL*1, LOGICAL*2, INTEGER*8. -INTEGER*8 is not well tested and will only work reasonably on -systems where int = 4 bytes, long = 8 bytes; on such systems, -you'll have to modify f2c.h appropriately, changing integer -from long to int and adding typedef long longint. You'll also -have to compile libI77 with Allow_TYQUAD #defined and adjust -libF77/makefile to compile pow_qq.c. In the f2c source, changes -for INTEGER*8 are delimited by #ifdef TYQUAD ... #endif. You -can omit the INTEGER*8 changes by compiling with NO_TYQUAD -#defined. Otherwise, the new command-line option -!i8 -disables recognition of INTEGER*8. - libf77: add pow_qq.c - libi77: add #ifdef Allow_TYQUAD stuff. Changes for INTEGER*1, -LOGICAL*1, and LOGICAL*2 came last 23 July 1992. Fix bug in -backspace (that only bit when the last character of the second -or subsequent buffer read was the previous newline). Guard -against L_tmpnam being too small in endfile.c. For MSDOS, -close and reopen files when copying to truncate. Lengthen -LINTW (buffer size in lwrite.c). - Add \ to the end of #define lines that get broken. - Fix bug in handling NAMELIST of items in EQUIVALENCE. - Under -h (or -hd), convert Hollerith to integer in general expressions -(e.g., assignments), not just when they're passed as arguments, and -blank-pad rather than 0-pad the Hollerith to a multiple of -sizeof(integer) or sizeof(doublereal). - Add command-line option -s, which instructs f2c preserve multi- -dimensional subscripts (by emitting and using appropriate #defines). - Fix glitch (with default type inferences) in examples like - call foo('abc') - end - subroutine foo(goo) - end -This gave two warning messages: - Warning on line 4 of y.f: inconsistent calling sequences for foo: - here 1, previously 2 args and string lengths. - Warning on line 4 of y.f: inconsistent calling sequences for foo: - here 2, previously 1 args and string lengths. -Now the second Warning is suppressed. - Complain about all inconsistent arguments, not just the first. - Switch to automatic creation of "all from f2c/src". For folks -getting f2c source via ftp, this means f2c/src/all.Z is now an -empty file rather than a bundle. - Separate -P and -A: -P no longer implies -A. - -Thu Feb 4 00:32:20 EST 1993: - Fix some glitches (introduced yesterday) with -h . - -Fri Feb 5 01:40:38 EST 1993: - Fix bug in types conveyed for namelists (introduced 3 Feb. 1993). - -Fri Feb 5 21:26:43 EST 1993: - libi77: tweaks to NAMELIST and open (after comments by Harold -Youngren): - 1. Reading a ? instead of &name (the start of a namelist) causes - the namelist being sought to be written to stdout (unit 6); - to omit this feature, compile rsne.c with -DNo_Namelist_Questions. - 2. Reading the wrong namelist name now leads to an error message - and an attempt to skip input until the right namelist name is found; - to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip. - 3. Namelist writes now insert newlines before each variable; to omit - this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines. - 4. For OPEN of sequential files, ACCESS='APPEND' (or - access='anything else starting with "A" or "a"') causes the file to - be positioned at end-of-file, so a write will append to the file. - (This is nonstandard, but does not require modifying data - structures.) - -Mon Feb 8 14:40:37 EST 1993: - Increase number of continuation lines allowed from 19 to 99, -and allow changing this limit with -NC (e.g. -NC200 for 200 lines). - Treat control-Z (at the beginning of a line) as end-of-file: see -the new penultimate paragraph of README. - Fix a rarely seen glitch that could make an error messages to say -"line 0". - -Tue Feb 9 02:05:40 EST 1993 - libi77: change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO, -and, in err.c under NON_UNIX_STDIO, avoid close(creat(name,0666)) -when the unit has another file descriptor for name. - -Tue Feb 9 17:12:49 EST 1993 - libi77: more tweaks for NON_UNIX_STDIO: use stdio routines -rather than open, close, creat, seek, fdopen (except for f__isdev). - -Fri Feb 12 15:49:33 EST 1993 - Update src/gram.c (which was forgotten in the recent updates). -Most folks regenerate it anyway (wity yacc or bison). - -Thu Mar 4 17:07:38 EST 1993 - Increase default max labels in computed gotos and alternate returns -to 257, and allow -Nl1234 to specify this number. - Tweak put.c to check p->tag == TADDR in realpart() and imagpart(). - Adjust fc script to allow .r (RATFOR) files and -C (check subscripts). - Avoid declaring strchr in niceprintf.c under -DANSI_Libraries . - gram.c updated again. - libi77: err.c, open.c: take declaration of fdopen from rawio.h. - -Sat Mar 6 07:09:11 EST 1993 - libi77: uio.c: adjust off-end-of-record test for sequential -unformatted reads to respond to err= rather than end= . - -Sat Mar 6 16:12:47 EST 1993 - Treat scalar arguments of the form (v) and v+0, where v is a variable, -as expressions: assign to a temporary variable, and pass the latter. - gram.c updated. - -Mon Mar 8 09:35:38 EST 1993 - "f2c.h from f2c" updated to add types logical1 and integer1 for -LOGICAL*1 and INTEGER*1. ("f2c.h from f2c" is supposed to be the -same as "f2c.h from f2c/src", which was updated 3 Feb. 1993.) - -Mon Mar 8 17:57:55 EST 1993 - Fix rarely seen bug that could cause strange casts in function -invocations (revealed by an example with msdos/f2c.exe). - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). - -Fri Mar 12 12:37:01 EST 1993 - Fix bug with -s in handling subscripts involving min, max, and -complicated expressions requiring temporaries. - Fix bug in handling COMMONs that need padding by a char array. - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). - -Fri Mar 12 17:16:16 EST 1993 - libf77, libi77: updated for compiling under C++. - -Mon Mar 15 16:21:37 EST 1993 - libi77: more minor tweaks (for -DKR_headers); Version.c not changed. - -Thu Mar 18 12:37:30 EST 1993 - Flag -r (for discarding carriage-returns on systems that end lines -with carriage-return/newline pairs, e.g. PCs) added to xsum, and -xsum.c converted to ANSI/ISO syntax (with K&R syntax available with --DKR_headers). [When time permits, the f2c source will undergo a -similar conversion.] - libi77: tweaks to #includes in endfile.c, err.c, open.c, rawio.h; -Version.c not changed. - f2c.ps updated (to pick up revision of 2 Feb. 1993 to f2c.1). - -Fri Mar 19 09:19:26 EST 1993 - libi77: add (char *) casts to malloc and realloc invocations -in err.c, open.c; Version.c not changed. - -Tue Mar 30 07:17:15 EST 1993 - Fix bug introduced 6 March 1993: possible memory corruption when -loops in data statements involve constant subscripts, as in - DATA (GUNIT(1,I),I=0,14)/15*-1/ - -Tue Mar 30 16:17:42 EST 1993 - Fix bug with -s: (floating-point array item)*(complex item) -generates an _subscr() reference for the floating-point array, -but a #define for the _subscr() was omitted. - -Tue Apr 6 12:11:22 EDT 1993 - libi77: adjust error returns for formatted inputs to flush the current -input line when err= is specified. To restore the old behavior (input -left mid-line), either adjust the #definition of errfl in fio.h or omit -the invocation of f__doend in err__fl (in err.c). - -Tue Apr 6 13:30:04 EDT 1993 - Fix bug revealed in - subroutine foo(i) - call goo(int(i)) - end -which now passes a copy of i, rather than i itself. - -Sat Apr 17 11:41:02 EDT 1993 - Adjust appending of underscores to conform with f2c.ps ("A Fortran -to C Converter"): names that conflict with C keywords or f2c type -names now have just one underscore appended (rather than two); add -"integer1", "logical1", "longint" to the keyword list. - Append underscores to names that appear in EQUIVALENCE and are -component names in a structure declared in f2c.h, thus avoiding a -problem caused by the #defines emitted for equivalences. Example: - complex a - equivalence (i,j) - a = 1 ! a.i went awry because of #define i - j = 2 - write(*,*) a, i - end - Adjust line-breaking logic to avoid splitting very long constants -(and names). Example: - ! The next line starts with tab and thus is a free-format line. - a=.012345689012345689012345689012345689012345689012345689012345689012345689 - end - Omit extraneous "return 0;" from entry stubs emitted for multiple -entry points of type character, complex, or double complex. - -Sat Apr 17 14:35:05 EDT 1993 - Fix bug (introduced 4 Feb.) in separating -P from -A that kept f2c -from re-reading a .P file written without -A or -C++ describing a -routine with an external argument. [See the just-added note about -separating -P from -A in the changes above for 3 Feb. 1993.] - Fix bug (type UNKNOWN for V in the example below) revealed by - subroutine a() - external c - call b(c) - end - subroutine b(v) - end - -Sun Apr 18 19:55:26 EDT 1993 - Fix wrong calling sequence for mem() in yesterday's addition to -equiv.c . - -Wed Apr 21 17:39:46 EDT 1993 - Fix bug revealed in - - ASSIGN 10 TO L1 - GO TO 20 - 10 ASSIGN 30 TO L2 - STOP 10 - - 20 ASSIGN 10 TO L2 ! Bug here because 10 had been assigned - ! to another label, then defined. - GO TO L2 - 30 END - -Fri Apr 23 18:38:50 EDT 1993 - Fix bug with -h revealed in - CHARACTER*9 FOO - WRITE(FOO,'(I6)') 1 - WRITE(FOO,'(I6)') 2 ! struct icilist io___3 botched - END - -Tue Apr 27 16:08:28 EDT 1993 - Tweak to makefile: remove "size f2c". - -Tue May 4 23:48:20 EDT 1993 - libf77: tweak signal_ line of f2ch.add . - -Tue Jun 1 13:47:13 EDT 1993 - Fix bug introduced 3 Feb. 1993 in handling multiple entry -points with differing return types -- the postfix array in proc.c -needed a new entry for integer*8 (which resulted in wrong -Multitype suffixes for non-integral types). - For (default) K&R C, generate VOID rather than int functions for -functions of Fortran type character, complex, and double complex. - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). - -Tue Jun 1 23:11:15 EDT 1993 - f2c.h: add Multitype component g and commented type longint. - proc.c: omit "return 0;" from stubs for complex and double complex -entries (when entries have multiple types); add test to avoid memory -fault with illegal combinations of entry types. - -Mon Jun 7 12:00:47 EDT 1993 - Fix memory fault in - common /c/ m - integer m(1) - data m(1)/1/, m(2)/2/ ! one too many initializers - end - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). - -Fri Jun 18 13:55:51 EDT 1993 - libi77: change type of signal_ in f2ch.add; change type of il in -union Uint from long to integer (for machines like the DEC Alpha, -where integer should be the same as int). Version.c not changed. - Tweak gram.dcl and gram.head: add semicolons after some rules that -lacked them, and remove an extraneous semicolon. These changes are -completely transparent to our local yacc programs, but apparently -matter on some VMS systems. - -Wed Jun 23 01:02:56 EDT 1993 - Update "fc" shell script, and bring f2c.1 and f2c.1t up to date: -they're meant to be linked with (i.e., the same as) src/f2c.1 and -src/f2c.1t . [In the last update of f2c.1* (2 Feb. 1993), only -src/f2c.1 and src/f2c.1t got changed -- a mistake.] - -Wed Jun 23 09:04:31 EDT 1993 - libi77: fix bug in format reversions for internal writes. -Example: - character*60 lines(2) - write(lines,"('n =',i3,2(' more text',i3))") 3, 4, 5, 6 - write(*,*) 'lines(1) = ', lines(1) - write(*,*) 'lines(2) = ', lines(2) - end -gave an error message that began "iio: off end of record", rather -than giving the correct output: - - lines(1) = n = 3 more text 4 more text 5 - lines(2) = more text 6 more text - -Thu Aug 5 11:31:14 EDT 1993 - libi77: lread.c: fix bug in handling repetition counts for logical -data (during list or namelist input). Change struct f__syl to -struct syl (for buggy compilers). - -Sat Aug 7 16:05:30 EDT 1993 - libi77: lread.c (again): fix bug in namelist reading of incomplete -logical arrays. - Fix minor calling-sequence errors in format.c, output.c, putpcc.c: -should be invisible. - -Mon Aug 9 09:12:38 EDT 1993 - Fix erroneous cast under -A in translating - character*(*) function getc() - getc(2:3)=' ' !wrong cast in first arg to s_copy - end - libi77: lread.c: fix bug in namelist reading of an incomplete array -of numeric data followed by another namelist item whose name starts -with 'd', 'D', 'e', or 'E'. - -Fri Aug 20 13:22:10 EDT 1993 - Fix bug in do while revealed by - subroutine skdig (line, i) - character line*(*), ch*1 - integer i - logical isdigit - isdigit(ch) = ch.ge.'0' .and. ch.le.'9' - do while (isdigit(line(i:i))) ! ch__1[0] was set before - ! "while(...) {...}" - i = i + 1 - enddo - end - -Fri Aug 27 08:22:54 EDT 1993 - Add #ifdefs to avoid declaring atol when it is a macro; version.c -not updated. - -Wed Sep 8 12:24:26 EDT 1993 - libi77: open.c: protect #include "sys/..." with -#ifndef NON_UNIX_STDIO; Version date not changed. - -Thu Sep 9 08:51:21 EDT 1993 - Adjust "include" to interpret file names relative to the directory -of the file that contains the "include". - -Fri Sep 24 00:56:12 EDT 1993 - Fix offset error resulting from repeating the same equivalence -statement twice. Example: - real a(2), b(2) - equivalence (a(2), b(2)) - equivalence (a(2), b(2)) - end - Increase MAXTOKENLEN (to roughly the largest allowed by ANSI C). - -Mon Sep 27 08:55:09 EDT 1993 - libi77: endfile.c: protect #include "sys/types.h" with -#ifndef NON_UNIX_STDIO; Version.c not changed. - -Fri Oct 15 15:37:26 EDT 1993 - Fix rarely seen parsing bug illustrated by - subroutine foo(xabcdefghij) - character*(*) xabcdefghij - IF (xabcdefghij.NE.'##') GOTO 40 - 40 end -in which the spacing in the IF line is crucial. - -Thu Oct 21 13:55:11 EDT 1993 - Give more meaningful error message (then "unexpected character in -cds") when constant simplification leads to Infinity or NaN. - -Wed Nov 10 15:01:05 EST 1993 - libi77: backspace.c: adjust, under -DMSDOS, to cope with MSDOS -text files, as handled by some popular PC C compilers. Beware: -the (defective) libraries associated with these compilers assume lines -end with \r\n (conventional MS-DOS text files) -- and ftell (and -hence the current implementation of backspace) screws up if lines with -just \n. - -Thu Nov 18 09:37:47 EST 1993 - Give a better error (than "control stack empty") for an extraneous -ENDDO. Example: - enddo - end - Update comments about ftp in "readme from f2c". - -Sun Nov 28 17:26:50 EST 1993 - Change format of time stamp in version.c to yyyymmdd. - Sort parameter adjustments (or complain of impossible dependencies) -so that dummy arguments are referenced only after being adjusted. -Example: - subroutine foo(a,b) - integer a(2) ! a must be adjusted before b - double precision b(a(1),a(2)) - call goo(b(3,4)) - end - Adjust structs for initialized common blocks and equivalence classes -to omit the trailing struct component added to force alignment when -padding already forces the desired alignment. Example: - PROGRAM TEST - COMMON /Z/ A, CC - CHARACTER*4 CC - DATA cc /'a'/ - END -now gives - struct { - integer fill_1[1]; - char e_2[4]; - } z_ = { {0}, {'a', ' ', ' ', ' '} }; -rather than -struct { - integer fill_1[1]; - char e_2[4]; - real e_3; - } z_ = { {0}, {'a', ' ', ' ', ' '}, (float)0. }; - -Wed Dec 8 16:24:43 EST 1993 - Adjust lex.c to recognize # nnn "filename" lines emitted by cpp; -this affects the file names and line numbers in error messages and -the #line lines emitted under -g. - Under -g, arrange for a file that starts with an executable -statement to have the first #line line indicate line 1, rather -than the line number of the END statement ending the main program. - Adjust fc script to run files ending in .F through /lib/cpp. - Fix bug ("Impossible tag 2") in - if (t .eq. (0,2)) write(*,*) 'Bug!' - end - libi77: iio.c: adjust internal formatted reads to treat short records -as though padded with blanks (rather than causing an "off end of record" -error). - -Wed Dec 15 15:19:15 EST 1993 - fc: adjusted for .F files to pass -D and -I options to cpp. - -Fri Dec 17 20:03:38 EST 1993 - Fix botch introduced 28 Nov. 1993 in vax.c; change "version of" -to "version". - -Tue Jan 4 15:39:52 EST 1994 - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only). - -Wed Jan 19 08:55:19 EST 1994 - Arrange to accept - integer Nx, Ny, Nz - parameter (Nx = 10, Ny = 20) - parameter (Nz = max(Nx, Ny)) - integer c(Nz) - call foo(c) - end -rather than complaining "Declaration error for c: adjustable dimension -on non-argument". The necessary changes cause some hitherto unfolded -constant expressions to be folded. - Accept BYTE as a synonym for INTEGER*1. - -Thu Jan 27 08:57:40 EST 1994 - Fix botch in changes of 19 Jan. 1994 that broke entry points with -multi-dimensional array arguments that did not appear in the subprogram -argument list and whose leading dimensions depend on arguments. - -Mon Feb 7 09:24:30 EST 1994 - Remove artifact in "fc" script that caused -O to be ignored: - 87c87 - < # lcc ignores -O... - --- - > CFLAGS="$CFLAGS $O" - -Sun Feb 20 17:04:58 EST 1994 - Fix bugs reading .P files for routines with arguments of type -INTEGER*1, INTEGER*8, LOGICAL*2. - Fix glitch in reporting inconsistent arguments for routines involving -character arguments: "arg n" had n too large by the number of -character arguments. - -Tue Feb 22 20:50:08 EST 1994 - Trivial changes to data.c format.c main.c niceprintf.c output.h and -sysdep.h (consistency improvements). - libI77: lread.c: check for NULL return from realloc. - -Fri Feb 25 23:56:08 EST 1994 - output.c, sysdep.h: arrange for -DUSE_DTOA to use dtoa.c and g_fmt.c -for correctly rounded decimal values on IEEE-arithmetic machines -(plus machines with VAX and IBM-mainframe arithmetic). These -routines are available from netlib's fp directory. - msdos/f2cx.exe.Z and msdos/f2c.exe.Z updated (ftp access only); the -former uses -DUSE_DTOA to keep 12 from printing as 12.000000000000001. - vax.c: fix wrong arguments to badtag and frchain introduced -28 Nov. 1993. - Source for f2c converted to ANSI/ISO format, with the K&R format -available by compilation with -DKR_headers . - Arrange for (double precision expression) relop (single precision -constant) to retain the single-precision nature of the constant. -Example: - double precision t - if (t .eq. 0.3) ... - -Mon Feb 28 11:40:24 EST 1994 - README updated to reflect a modification just made to netlib's -"dtoa.c from fp": -96a97,105 -> Also add the rule -> -> dtoa.o: dtoa.c -> $(CC) -c $(CFLAGS) -DMALLOC=ckalloc -DIEEE... dtoa.c -> -> (without the initial tab) to the makefile, where IEEE... is one of -> IEEE_MC68k, IEEE_8087, VAX, or IBM, depending on your machine's -> arithmetic. See the comments near the start of dtoa.c. -> - -Sat Mar 5 09:41:52 EST 1994 - Complain about functions with the name of a previously declared -common block (which is illegal). - New option -d specifies the directory for output .c and .P files; -f2c.1 and f2c.1t updated. The former undocumented debug option -dnnn -is now -Dnnn. - -Thu Mar 10 10:21:44 EST 1994 - libf77: add #undef min and #undef max lines to s_paus.c s_stop.c -and system_.c; Version.c not changed. - libi77: add -DPad_UDread lines to uio.c and explanation to README: - Some buggy Fortran programs use unformatted direct I/O to write - an incomplete record and later read more from that record than - they have written. For records other than the last, the unwritten - portion of the record reads as binary zeros. The last record is - a special case: attempting to read more from it than was written - gives end-of-file -- which may help one find a bug. Some other - Fortran I/O libraries treat the last record no differently than - others and thus give no help in finding the bug of reading more - than was written. If you wish to have this behavior, compile - uio.c with -DPad_UDread . -Version.c not changed. - -Tue Mar 29 17:27:54 EST 1994 - Adjust make_param so dimensions involving min, max, and other -complicated constant expressions do not provoke error messages -about adjustable dimensions on non-arguments. - Fix botch introduced 19 Jan 1994: "adjustable dimension on non- -argument" messages could cause some things to be freed twice. - -Tue May 10 07:55:12 EDT 1994 - Trivial changes to exec.c, p1output.c, parse_args.c, proc.c, -and putpcc.c: change arguments from - type foo[] -to - type *foo -for consistency with defs.h. For most compilers, this makes no -difference. - -Thu Jun 2 12:18:18 EDT 1994 - Fix bug in handling FORMAT statements that have adjacent character -(or Hollerith) strings: an extraneous \002 appeared between the -strings. - libf77: under -DNO_ONEXIT, arrange for f_exit to be called just -once; previously, upon abnormal termination (including stop statements), -it was called twice. - -Mon Jun 6 15:52:57 EDT 1994 - libf77: Avoid references to SIGABRT and SIGIOT if neither is defined; -Version.c not changed. - libi77: Add cast to definition of errfl() in fio.h; this only matters -on systems with sizeof(int) < sizeof(long). Under -DNON_UNIX_STDIO, -use binary mode for direct formatted files (to avoid any confusion -connected with \n characters). - -Fri Jun 10 16:47:31 EDT 1994 - Fix bug under -A in handling unreferenced (and undeclared) -external arguments in subroutines with multiple entry points. Example: - subroutine m(fcn,futil) - external fcn,futil - call fcn - entry mintio(i1) ! (D_fp)0 rather than (U_fp)0 for futil - end - -Wed Jun 15 10:38:14 EDT 1994 - Allow char(constant expression) function in parameter declarations. -(This was probably broken in the changes of 29 March 1994.) - -Fri Jul 1 23:54:00 EDT 1994 - Minor adjustments to makefile (rule for f2c.1 commented out) and -sysdep.h (#undef KR_headers if __STDC__ is #defined, and base test -for ANSI_Libraries and ANSI_Prototypes on KR_headers rather than -__STDC__); version.c touched but not changed. - libi77: adjust fp.h so local.h is only needed under -DV10; -Version.c not changed. - -Tue Jul 5 03:05:46 EDT 1994 - Fix segmentation fault in - subroutine foo(a,b,k) - data i/1/ - double precision a(k,1) ! sequence error: must precede data - b = a(i,1) - end - libi77: Fix bug (introduced 6 June 1994?) in reopening files under -NON_UNIX_STDIO. - Fix some error messages caused by illegal Fortran. Examples: -* 1. - x(i) = 0 !Missing declaration for array x - call f(x) !Said Impossible storage class 8 in routine mkaddr - end !Now says invalid use of statement function x -* 2. - f = g !No declaration for g; by default it's a real variable - call g !Said invalid class code 2 for function g - end !Now says g cannot be called -* 3. - intrinsic foo !Invalid intrinsic name - a = foo(b) !Said intrcall: bad intrgroup 0 - end !Now just complains about line 1 - -Tue Jul 5 11:14:26 EDT 1994 - Fix glitch in handling erroneous statement function declarations. -Example: - a(j(i) - i) = a(j(i) - i) + 1 ! bad statement function - call foo(a(3)) ! Said Impossible type 0 in routine mktmpn - end ! Now warns that i and j are not used - -Wed Jul 6 17:31:25 EDT 1994 - Tweak test for statement functions that (illegally) call themselves; -f2c will now proceed to check for other errors, rather than bailing -out at the first recursive statement function reference. - Warn about but retain divisions by 0 (instead of calling them -"compiler errors" and quiting). On IEEE machines, this permits - double precision nan, ninf, pinf - nan = 0.d0/0.d0 - pinf = 1.d0/0.d0 - ninf = -1.d0/0.d0 - write(*,*) 'nan, pinf, ninf = ', nan, pinf, ninf - end -to print - nan, pinf, ninf = NaN Infinity -Infinity - libi77: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an -optimization that requires exponents to have 2 digits when 2 digits -suffice. lwrite.c wsfe.c (list and formatted external output): -omit ' ' carriage-control when compiled with -DOMIT_BLANK_CC . -Off-by-one bug fixed in character count for list output of character -strings. Omit '.' in list-directed printing of Nan, Infinity. - -Mon Jul 11 13:05:33 EDT 1994 - src/gram.c updated. - -Tue Jul 12 10:24:42 EDT 1994 - libi77: wrtfmt.c: under G11.4, write 0. as " .0000 " rather -than " .0000E+00". - -Thu Jul 14 17:55:46 EDT 1994 - Fix glitch in changes of 6 July 1994 that could cause erroneous -"division by zero" warnings (or worse). Example: - subroutine foo(a,b) - y = b - a = a / y ! erroneous warning of division by zero - end - -Mon Aug 1 16:45:17 EDT 1994 - libi77: lread.c rsne.c: for benefit of systems with a buggy stdio.h, -declare ungetc when neither KR_headers nor ungetc is #defined. -Version.c not changed. - -Wed Aug 3 01:53:00 EDT 1994 - libi77: lwrite.c (list output): do not insert a newline when -appending an oversize item to an empty line. - -Mon Aug 8 00:51:01 EDT 1994 - Fix bug (introduced 3 Feb. 1993) that, under -i2, kept LOGICAL*2 -variables from appearing in INQUIRE statements. Under -I2, allow -LOGICAL*4 variables to appear in INQUIRE. Fix intrinsic function -LEN so it returns a short value under -i2, a long value otherwise. - exec.c: fix obscure memory fault possible with bizarre (and highly -erroneous) DO-loop syntax. - -Fri Aug 12 10:45:57 EDT 1994 - libi77: fix glitch that kept ERR= (in list- or format-directed input) -from working after a NAMELIST READ. - -Thu Aug 25 13:58:26 EDT 1994 - Suppress -s when -C is specified. - Give full pathname (netlib@research.att.com) for netlib in readme and -src/README. - -Wed Sep 7 22:13:20 EDT 1994 - libi77: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2, -INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8 in NAMELISTs. - -Fri Sep 16 17:50:18 EDT 1994 - Change name adjustment for reserved words: instead of just appending -"_" (a single underscore), append "_a_" to local variable names to avoid -trouble when a common block is named a reserved word and the same -reserved word is also a local variable name. Example: - common /const/ a,b,c - real const(3) - equivalence (const(1),a) - a = 1.234 - end - Arrange for ichar() to treat characters as unsigned. - libf77: s_cmp.c: treat characters as unsigned in comparisons. -These changes for unsignedness only matter for strings that contain -non-ASCII characters. Now ichar() should always be >= 0. - -Sat Sep 17 11:19:32 EDT 1994 - fc: set rc=$? before exit (to get exit code right in trap code). - -Mon Sep 19 17:49:43 EDT 1994 - libf77: s_paus.c: flush stderr after PAUSE; add #ifdef MSDOS stuff. - libi77: README: point out general need for -DMSDOS under MS-DOS. - -Tue Sep 20 11:42:30 EDT 1994 - Fix bug in comparing identically named common blocks, in which -all components have the same names and types, but at least one is -dimensioned (1) and the other is not dimensioned. Example: - subroutine foo - common /ab/ a - a=1. !!! translated correctly to ab_1.a = (float)1.; - end - subroutine goo - common /ab/ a(1) - a(1)=2. !!! translated erroneously to ab_1.a[0] = (float)2. - end - -Tue Sep 27 23:47:34 EDT 1994 - Fix bug introduced 16 Sept. 1994: don't add _a_ to C keywords -used as external names. In fact, return to earlier behavior of -appending __ to C keywords unless they are used as external names, -in which case they get just one underscore appended. - Adjust constant handling so integer and logical PARAMETERs retain -type information, particularly under -I2. Example: - SUBROUTINE FOO - INTEGER I - INTEGER*1 I1 - INTEGER*2 I2 - INTEGER*4 I4 - LOGICAL L - LOGICAL*1 L1 - LOGICAL*2 L2 - LOGICAL*4 L4 - PARAMETER (L=.FALSE., L1=.FALSE., L2=.FALSE., L4=.FALSE.) - PARAMETER (I=0,I1=0,I2=0,I4=0) - CALL DUMMY(I, I1, I2, I4, L, L1, L2, L4) - END - f2c.1t: Change f\^2c to f2c (omit half-narrow space) in line following -".SH NAME" for benefit of systems that cannot cope with troff commands -in this context. - -Wed Sep 28 12:45:19 EDT 1994 - libf77: s_cmp.c fix glitch in -DKR_headers version introduced -12 days ago. - -Thu Oct 6 09:46:53 EDT 1994 - libi77: util.c: omit f__mvgbt (which is never used). - f2c.h: change "long" to "long int" to facilitate the adjustments -by means of sed described above. Comment out unused typedef of Long. - -Fri Oct 21 18:02:24 EDT 1994 - libf77: add s_catow.c and adjust README to point out that changing -"s_cat.o" to "s_catow.o" in the makefile will permit the target of a -concatenation to appear on its right-hand side (contrary to the -Fortran 77 Standard and at the cost of some run-time efficiency). - -Wed Nov 2 00:03:58 EST 1994 - Adjust -g output to contain only one #line line per statement, -inserting \ before the \n ending lines broken because of their -length [this insertion was recanted 10 Dec. 1994]. This change -accommodates an idiocy in the ANSI/ISO C standard, which leaves -undefined the behavior of #line lines that occur within the arguments -to a macro call. - -Wed Nov 2 14:44:27 EST 1994 - libi77: under compilation with -DALWAYS_FLUSH, flush buffers at -the end of each write statement, and test (via the return from -fflush) for write failures, which can be caught with an ERR= -specifier in the write statement. This extra flushing slows -execution, but can abort execution or alter the flow of control -when a disk fills up. - f2c/src/io.c: Add ERR= test to e_wsle invocation (end of -list-directed external output) to catch write failures when libI77 -is compiled with -DALWAYS_FLUSH. - -Thu Nov 3 10:59:13 EST 1994 - Fix bug in handling dimensions involving certain intrinsic -functions of constant expressions: the expressions, rather than -pointers to them, were passed. Example: - subroutine subtest(n,x) - real x(2**n,n) ! pow_ii(2,n) was called; now it's pow_ii(&c__2,n) - x(2,2)=3. - end - -Tue Nov 8 23:56:30 EST 1994 - malloc.c: remove assumption that only malloc calls sbrk. This -appears to make malloc.c useful on RS6000 systems. - -Sun Nov 13 13:09:38 EST 1994 - Turn off constant folding of integers used in floating-point -expressions, so the assignment in - subroutine foo(x) - double precision x - x = x*1000000*500000 - end -is rendered as - *x = *x * 1000000 * 500000; -rather than as - *x *= 1783793664; - -Sat Dec 10 16:31:40 EST 1994 - Supply a better error message (than "Impossible type 14") for - subroutine foo - foo = 3 - end - Under -g, convey name of included files to #line lines. - Recant insertion of \ introduced (under -g) 2 Nov. 1994. - -Thu Dec 15 14:33:55 EST 1994 - New command-line option -Idir specifies directories in which to -look for non-absolute include files (after looking in the directory -of the current input file). There can be several -Idir options, each -specifying one directory. All -Idir options are considered, from -left to right, until a suitably named file is found. The -I2 and -I4 -command-line options have precedence, so directories named 2 or 4 -must be spelled by some circumlocation, such as -I./2 . - f2c.ps updated to mention the new -Idir option, correct a typo, -and bring the man page at the end up to date. - lex.c: fix bug in reading line numbers in #line lines. - fc updated to pass -Idir options to f2c. - -Thu Dec 29 09:48:03 EST 1994 - Fix bug (e.g., addressing fault) in diagnosing inconsistency in -the type of function eta in the following example: - function foo(c1,c2) - double complex foo,c1,c2 - double precision eta - foo = eta(c1,c2) - end - function eta(c1,c2) - double complex eta,c1,c2 - eta = c1*c2 - end - -Mon Jan 2 13:27:26 EST 1995 - Retain casts for SNGL (or FLOAT) that were erroneously optimized -away. Example: - subroutine foo(a,b) - double precision a,b - a = float(b) ! now rendered as *a = (real) (*b); - end - Use float (rather than double) temporaries in certain expressions -of type complex. Example: the temporary for sngl(b) in - complex a - double precision b - a = sngl(b) - (3.,4.) -is now of type float. - -Fri Jan 6 00:00:27 EST 1995 - Adjust intrinsic function cmplx to act as dcmplx (returning -double complex rather than complex) if either of its args is of -type double precision. The double temporaries used prior to 2 Jan. -1995 previously gave it this same behavior. - -Thu Jan 12 12:31:35 EST 1995 - Adjust -krd to use double temporaries in some calculations of -type complex. - libf77: pow_[dhiqrz][hiq].c: adjust x**i to work on machines -that sign-extend right shifts when i is the most negative integer. - -Wed Jan 25 00:14:42 EST 1995 - Fix memory fault in handling overlapping initializations in - block data - common /zot/ d - double precision d(3) - character*6 v(4) - real r(2) - equivalence (d(3),r(1)), (d(1),v(1)) - data v/'abcdef', 'ghijkl', 'mnopqr', 'stuvwx'/ - data r/4.,5./ - end - names.c: add "far", "huge", "near" to c_keywords (causing them -to have __ appended when used as local variables). - libf77: add s_copyow.c, an alternative to s_copy.c for handling -(illegal) character assignments where the right- and left-hand -sides overlap, as in a(2:4) = a(1:3). - -Thu Jan 26 14:21:19 EST 1995 - libf77: roll s_catow.c and s_copyow.c into s_cat.c and s_copy.c, -respectively, allowing the left-hand side of a character assignment -to appear on its right-hand side unless s_cat.c and s_copy.c are -compiled with -DNO_OVERWRITE (which is a bit more efficient). -Fortran 77 forbids the left-hand side from participating in the -right-hand side (of a character assignment), but Fortran 90 allows it. - libi77: wref.c: fix glitch in printing the exponent of 0 when -GOOD_SPRINTF_EXPONENT is not #defined. - -Fri Jan 27 12:25:41 EST 1995 - Under -C++ -ec (or -C++ -e1c), surround struct declarations with - #ifdef __cplusplus - extern "C" { - #endif -and - #ifdef __cplusplus - } - #endif -(This isn't needed with cfront, but apparently is necessary with -some other C++ compilers.) - libf77: minor tweak to s_copy.c: copy forward whenever possible -(for better cache behavior). - -Wed Feb 1 10:26:12 EST 1995 - Complain about parameter statements that assign values to dummy -arguments, as in - subroutine foo(x) - parameter(x = 3.4) - end - -Sat Feb 4 20:22:02 EST 1995 - fc: omit "lib=/lib/num/lib.lo". - -Wed Feb 8 08:41:14 EST 1995 - Minor changes to exec.c, putpcc.c to avoid "bad tag" or "error -in frexpr" with certain invalid Fortran. - -Sat Feb 11 08:57:39 EST 1995 - Complain about integer overflows, both in simplifying integer -expressions, and in converting integers from decimal to binary. - Fix a memory fault in putcx1() associated with invalid input. - -Thu Feb 23 11:20:59 EST 1995 - Omit MAXTOKENLEN; realloc token if necessary (to handle very long -strings). - -Fri Feb 24 11:02:00 EST 1995 - libi77: iio.c: z_getc: insert (unsigned char *) to allow internal -reading of characters with high-bit set (on machines that sign-extend -characters). - -Tue Mar 14 18:22:42 EST 1995 - Fix glitch (in io.c) in handling 0-length strings in format -statements, as in - write(*,10) - 10 format(' ab','','cd') - libi77: lread.c and rsfe.c: adjust s_rsle and s_rsfe to check for -end-of-file (to prevent infinite loops with empty read statements). - -Wed Mar 22 10:01:46 EST 1995 - f2c.ps: adjust discussion of -P on p. 7 to reflect a change made -3 Feb. 1993: -P no longer implies -A. - -Fri Apr 21 18:35:00 EDT 1995 - fc script: remove absolute paths (since PATH specifies only standard -places). On most systems, it's still necessary to adjust the PATH -assignment at the start of fc to fit the local conventions. - -Fri May 26 10:03:17 EDT 1995 - fc script: add recognition of -P and .P files. - libi77: iio.c: z_wnew: fix bug in handling T format items in internal -writes whose last item is written to an earlier position than some -previous item. - -Wed May 31 11:39:48 EDT 1995 - libf77: added subroutine exit(rc) (with integer return code rc), -which works like a stop statement but supplies rc as the program's -return code. - -Fri Jun 2 11:56:50 EDT 1995 - Fix memory fault in - parameter (x=2.) - data x /2./ - end -This now elicits two error messages; the second ("too many -initializers"), though not desirable, seems hard to eliminate -without considerable hassle. - -Mon Jul 17 23:24:20 EDT 1995 - Fix botch in simplifying constants in certain complex -expressions. Example: - subroutine foo(s,z) - double complex z - double precision s, M, P - parameter ( M = 100.d0, P = 2.d0 ) - z = M * M / s * dcmplx (1.d0, P/M) -*** The imaginary part of z was miscomputed *** - end - Under -ext, complain about nonintegral dimensions. - -Fri Jul 21 11:18:36 EDT 1995 - Fix glitch on line 159 of init.c: change - "(shortlogical *)0)", -to - "(shortlogical *)0", -This affects multiple entry points when some but not all have -arguments of type logical*2. - libi77: adjust lwrite.c, wref.c, wrtfmt.c so compiling with --DWANT_LEAD_0 causes formatted writes of floating-point numbers of -magnitude < 1 to have an explicit 0 before the decimal point (if the -field-width permits it). Note that the Fortran 77 Standard leaves it -up to the implementation whether to supply these superfluous zeros. - -Tue Aug 1 09:25:56 EDT 1995 - Permit real (or double precision) parameters in dimension expressions. - -Mon Aug 7 08:04:00 EDT 1995 - Append "_eqv" rather than just "_" to names that that appear in -EQUIVALENCE statements as well as structs in f2c.h (to avoid a -conflict when these names also name common blocks). - -Tue Aug 8 12:49:02 EDT 1995 - Modify yesterday's change: merge st_fields with c_keywords, to -cope with equivalences introduced to permit initializing numeric -variables with character data. DATA statements causing these -equivalences can appear after executable statements, so the only -safe course is to rename all local variable with names in the -former st_fields list. This has the unfortunate side effect that -the common local variable "i" will henceforth be renamed "i__". - -Wed Aug 30 00:19:32 EDT 1995 - libf77: add F77_aloc, now used in s_cat and system_ (to allocate -memory and check for failure in so doing). - libi77: improve MSDOS logic in backspace.c. - -Wed Sep 6 09:06:19 EDT 1995 - libf77: Fix return type of system_ (integer) under -DKR_headers. - libi77: Move some f_init calls around for people who do not use -libF77's main(); now open and namelist read statements that are the -first I/O statements executed should work right in that context. -Adjust namelist input to treat a subscripted name whose subscripts do -not involve colons similarly to the name without a subscript: accept -several values, stored in successive elements starting at the -indicated subscript. Adjust namelist output to quote character -strings (avoiding confusion with arrays of character strings). - -Thu Sep 7 00:36:04 EDT 1995 - Fix glitch in integer*8 exponentiation function: it's pow_qq, not -pow_qi. - libi77: fix some bugs with -DAllow_TYQUAD (for integer*8); when -looking for the &name that starts NAMELIST input, treat lines whose -first nonblank character is something other than &, $, or ? as -comment lines (i.e., ignore them), unless rsne.c is compiled with --DNo_Namelist_Comments. - -Thu Sep 7 09:05:40 EDT 1995 - libi77: rdfmt.c: one more tweak for -DAllow_TYQUAD. - -Tue Sep 19 00:03:02 EDT 1995 - Adjust handling of floating-point subscript bounds (a questionable -f2c extension) so subscripts in the generated C are of integral type. - Move #define of roundup to proc.c (where its use is commented out); -version.c left at 19950918. - -Wed Sep 20 17:24:19 EDT 1995 - Fix bug in handling ichar() under -h. - -Thu Oct 5 07:52:56 EDT 1995 - libi77: wrtfmt.c: fix bug with t editing (f__cursor was not always -zeroed in mv_cur). - -Tue Oct 10 10:47:54 EDT 1995 - Under -ext, warn about X**-Y and X**+Y. Following the original f77, -f2c treats these as X**(-Y) and X**(+Y), respectively. (They are not -allowed by the official Fortran 77 Standard.) Some Fortran compilers -give a bizarre interpretation to larger contexts, making multiplication -noncommutative: they treat X**-Y*Z as X**(-Y*Z) rather than X**(-Y)*Z, -which, following the rules of Fortran 77, is the same as (X**(-Y))*Z. - -Wed Oct 11 13:27:05 EDT 1995 - libi77: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c -to err.c. This should work around a problem with buggy loaders and -sometimes leads to smaller executable programs. - -Sat Oct 21 23:54:22 EDT 1995 - Under -h, fix bug in the treatment of ichar('0') in arithmetic -expressions. - Demote to -dneg (a new command-line option not mentioned in the -man page) imitation of the original f77's treatment of unary minus -applied to a REAL operand (yielding a DOUBLE PRECISION result). -Previously this imitation (which was present for debugging) occurred -under (the default) -!R. It is still suppressed by -R. - -Tue Nov 7 23:52:57 EST 1995 - Adjust assigned GOTOs to honor SAVE declarations. - Add comments about ranlib to lib[FI]77/README and makefile. - -Tue Dec 19 22:54:06 EST 1995 - libf77: s_cat.c: fix bug when 2nd or later arg overlaps lhs. - -Tue Jan 2 17:54:00 EST 1996 - libi77: rdfmt.c: move #include "ctype.h" up before "stdlib.h"; no -change to Version.c. - -Sun Feb 25 22:20:20 EST 1996 - Adjust expr.c to permit raising the integer constants 1 and -1 to -negative constant integral powers. - Avoid faulting when -T and -d are not followed by a directory name -(immediately, without intervening spaces). - -Wed Feb 28 12:49:01 EST 1996 - Fix a glitch in handling complex parameters assigned a "wrong" type. -Example: - complex d, z - parameter(z = (0d0,0d0)) - data d/z/ ! elicited "non-constant initializer" - call foo(d) - end - -Thu Feb 29 00:53:12 EST 1996 - Fix bug in handling character parameters assigned a char() value. -Example: - character*2 b,c - character*1 esc - parameter(esc = char(27)) - integer i - data (b(i:i),i=1,2)/esc,'a'/ - data (c(i:i),i=1,2)/esc,'b'/ ! memory fault - call foo(b,c) - end - -Fri Mar 1 23:44:51 EST 1996 - Fix glitch in evaluating .EQ. and .NE. when both operands are -logical constants (.TRUE. or .FALSE.). - -Fri Mar 15 17:29:54 EST 1996 - libi77: lread.c, rsfe.c: honor END= in READ stmts with empty iolist. - -Tue Mar 19 23:08:32 EST 1996 - lex.c: arrange for a "statement" consisting of a single short bogus -keyword to elicit an error message showing the whole keyword. The -error message formerly omitted the last letter of the bad keyword. - libf77: s_cat.c: supply missing break after overlap detection. - -Mon May 13 23:35:26 EDT 1996 - Recognize Fortran 90's /= as a synonym for .NE.. (<> remains a -synonym for .NE..) - Emit an empty int function of no arguments to supply an external -name to named block data subprograms (so they can be called somewhere -to force them to be loaded from a library). - Fix bug (memory fault) in handling the following illegal Fortran: - parameter(i=1) - equivalence(i,j) - end - Treat cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for -the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt, -respectively, unless -cd is specified. - Recognize the Fortran 90 bit-manipulation intrinsics btest, iand, -ibclr, ibits, ibset, ieor, ior, ishft, and ishftc, unless -i90 is -specified. Note that iand, ieor, and ior are thus now synonyms for -"and", "xor", and "or", respectively. - Add three macros (bit_test, bit_clear, bit_set) to f2c.h for use -with btest, ibclr, and ibset, respectively. Add new functions -[lq]bit_bits, [lq]bit_shift, and [lq]_bit_cshift to libF77 for -use with ibits, ishft, and ishftc, respectively. - Add integer function ftell(unit) (returning -1 on error) and -subroutine fseek(unit, offset, whence, *) to libI77 (with branch to -label * on error). - -Tue May 14 23:21:12 EDT 1996 - Fix glitch (possible memory fault, or worse) in handling multiple -entry points with names over 28 characters long. - -Mon Jun 10 01:20:16 EDT 1996 - Update netlib E-mail and ftp addresses in f2c/readme and -f2c/src/readme (which are different files) -- to reflect the upcoming -breakup of AT&T. - libf77: trivial tweaks to F77_aloc.c and system_.c; Version.c not -changed. - libi77: Adjust rsli.c and lread.c so internal list input with too -few items in the input string will honor end= . - -Mon Jun 10 22:59:57 EDT 1996 - Add Bits_per_Byte to sysdep.h and adjust definition of Table_size -to depend on Bits_per_Byte (forcing Table_size to be a power of 2); in -lex.c, change "comstart[c & 0xfff]" to "comstart[c & (Table_size-1)]" -to avoid an out-of-range subscript on end-of-file. - -Wed Jun 12 00:24:28 EDT 1996 - Fix bug in output.c (dereferencing a freed pointer) revealed in - print * !np in out_call in output.c clobbered by free - end !during out_expr. - -Wed Jun 19 08:12:47 EDT 1996 - f2c.h: add types uinteger, ulongint (for libF77); add qbit_clear -and qbit_set macros (in a commented-out section) for integer*8. - For integer*8, use qbit_clear and qbit_set for ibclr and ibset. - libf77: add casts to unsigned in [lq]bitshft.c. - -Thu Jun 20 13:30:43 EDT 1996 - Complain at character*(*) in common (rather than faulting). - Fix bug in recognizing hex constants that start with "16#" (e.g., -16#1234abcd, which is a synonym for z'1234abcd'). - Fix bugs in constant folding of expressions involving btest, ibclr, -and ibset. - Fix bug in constant folding of rshift(16#80000000, -31) (on a 32-bit -machine; more generally, the bug was in constant folding of -rshift(ibset(0,NBITS-1), 1-NBITS) when f2c runs on a machine with -long ints having NBITS bits. - -Mon Jun 24 07:58:53 EDT 1996 - Adjust struct Literal and newlabel() function to accommodate huge -source files (with more than 32767 newlabel() invocations). - Omit .c file when the .f file has a missing final end statement. - -Wed Jun 26 14:00:02 EDT 1996 - libi77: Add discussion of MXUNIT (highest allowed Fortran unit number) -to libI77/README. - -Fri Jun 28 14:16:11 EDT 1996 - Fix glitch with -onetrip: the temporary variable used for nonconstant -initial loop variable values was recycled too soon. Example: - do i = j+1, k - call foo(i+1) ! temp for j+1 was reused here - enddo - end - -Tue Jul 2 16:11:27 EDT 1996 - formatdata.c: add a 0 to the end of the basetype array (for TYBLANK) -(an omission that was harmless on most machines). - expr.c: fix a dereference of NULL that was only possible with buggy -input, such as - subroutine $sub(s) ! the '$' is erroneous - character s*(*) - s(1:) = ' ' - end - -Sat Jul 6 00:44:56 EDT 1996 - Fix glitch in the intrinsic "real" function when applied to a -complex (or double complex) variable and passed as an argument to -some intrinsic functions. Example: - complex a - b = sqrt(a) - end - Fix glitch (only visible if you do not use f2c's malloc and the -malloc you do use is defective in the sense that malloc(0) returns 0) -in handling include files that end with another include (perhaps -followed by comments). - Fix glitch with character*(*) arguments named "h" and "i" when -the body of the subroutine invokes the intrinsic LEN function. - Arrange that after a previous "f2c -P foo.f" has produced foo.P, -running "f2c foo.P foo.f" will produce valid C when foo.f contains - call sub('1234') - end - subroutine sub(msg) - end -Specifically, the length argument in "call sub" is now suppressed. -With or without foo.P, it is also now suppressed when the order of -subprograms in file foo.f is reversed: - subroutine sub(msg) - end - call sub('1234') - end - Adjust copyright notices to reflect AT&T breakup. - -Wed Jul 10 09:25:49 EDT 1996 - Fix bug (possible memory fault) in handling erroneously placed -and inconsistent declarations. Example that faulted: - character*1 w(8) - call foo(w) - end - subroutine foo(m) - data h /0.5/ - integer m(2) ! should be before data - end - Fix bug (possible fault) in handling illegal "if" constructions. -Example (that faulted): - subroutine foo(i,j) - if (i) then ! bug: i is integer, not logical - else if (j) then ! bug: j is integer, not logical - endif - end - Fix glitch with character*(*) argument named "ret_len" to a -character*(*) function. - -Wed Jul 10 23:04:16 EDT 1996 - Fix more glitches in the intrinsic "real" function when applied to a -complex (or double complex) variable and passed as an argument to -some intrinsic functions. Example: - complex a, b - r = sqrt(real(conjg(a))) + sqrt(real(a*b)) - end - -Thu Jul 11 17:27:16 EDT 1996 - Fix a memory fault associated with complicated, illegal input. -Example: - subroutine goo - character a - call foo(a) ! inconsistent with subsequent def and call - end - subroutine foo(a) - end - call foo(a) - end - -Wed Jul 17 19:18:28 EDT 1996 - Fix yet another case of intrinsic "real" applied to a complex -argument. Example: - complex a(3) - x = sqrt(real(a(2))) ! gave error message about bad tag - end - -Mon Aug 26 11:28:57 EDT 1996 - Tweak sysdep.c for non-Unix systems in which process ID's can be -over 5 digits long. - -Tue Aug 27 08:31:32 EDT 1996 - Adjust the ishft intrinsic to use unsigned right shifts. (Previously, -a negative constant second operand resulted in a possibly signed shift.) - -Thu Sep 12 14:04:07 EDT 1996 - equiv.c: fix glitch with -DKR_headers. - libi77: fmtlib.c: fix bug in printing the most negative integer. - -Fri Sep 13 08:54:40 EDT 1996 - Diagnose some illegal appearances of substring notation. - -Tue Sep 17 17:48:09 EDT 1996 - Fix fault in handling some complex parameters. Example: - subroutine foo(a) - double complex a, b - parameter(b = (0,1)) - a = b ! f2c faulted here - end - -Thu Sep 26 07:47:10 EDT 1996 - libi77: fmt.h: for formatted writes of negative integer*1 values, -make ic signed on ANSI systems. If formatted writes of integer*1 -values trouble you when using a K&R C compiler, switch to an ANSI -compiler or use a compiler flag that makes characters signed. - -Tue Oct 1 14:41:36 EDT 1996 - Give a better error message when dummy arguments appear in data -statements. - -Thu Oct 17 13:37:22 EDT 1996 - Fix bug in typechecking arguments to character and complex (or -double complex) functions; the bug could cause length arguments -for character arguments to be omitted on invocations appearing -textually after the first invocation. For example, in - subroutine foo - character c - complex zot - call goo(zot(c), zot(c)) - end -the length was omitted from the second invocation of zot, and -there was an erroneous error message about inconsistent calling -sequences. - -Wed Dec 4 13:59:14 EST 1996 - Fix bug revealed by - subroutine test(cdum,rdum) - complex cdum - rdum=cos(real(cdum)) ! "Unexpected tag 3 in opconv_fudge" - end - Fix glitch in parsing "DO 10 D0 = 1, 10". - Fix glitch in parsing - real*8 x - real*8 x ! erroneous "incompatible type" message - call foo(x) - end - -Mon Dec 9 23:15:02 EST 1996 - Fix glitch in parameter adjustments for arrays whose lower -bound depends on a scalar argument. Example: - subroutine bug(p,z,m,n) - integer z(*),m,n - double precision p(z(m):z(m) + n) ! p_offset botched - call foo(p(0), p(n)) - end - libi77: complain about non-positive rec= in direct read and write -statements. - libf77: trivial adjustments; Version.c not changed. - -Wed Feb 12 00:18:03 EST 1997 - output.c: fix (seldom problematic) glitch in out_call: put parens -around the ... in a test of the form "if (q->tag == TADDR && ...)". - vax.c: fix bug revealed in the "psi_offset =" assignment in the -following example: - subroutine foo(psi,m) - integer z(100),m - common /a/ z - double precision psi(z(m):z(m) + 10) - call foo(m+1, psi(0),psi(10)) - end - -Mon Feb 24 23:44:54 EST 1997 - For consistency with f2c's current treatment of adjacent character -strings in FORMAT statements, recognize a Hollerith string following -a string (and merge adjacent strings in FORMAT statements). - -Wed Feb 26 13:41:11 EST 1997 - New libf2c.zip, a combination of the libf77 and libi77 bundles (and -available only by ftp). - libf77: adjust functions with a complex output argument to permit -aliasing it with input arguments. (For now, at least, this is just -for possible benefit of g77.) - libi77: tweak to ftell_.c for systems with strange definitions of -SEEK_SET, etc. - -Tue Apr 8 20:57:08 EDT 1997 - libf77: [cz]_div.c: tweaks invisible on most systems (that may -improve things slightly with optimized compilation on systems that use -gratuitous extra precision). - libi77: fmt.c: adjust to complain at missing numbers in formats -(but still treat missing ".nnn" as ".0"). - -Fri Apr 11 14:05:57 EDT 1997 - libi77: err.c: attempt to make stderr line buffered rather than -fully buffered. (Buffering is needed for format items T and TR.) - -Thu Apr 17 22:42:43 EDT 1997 - libf77: add F77_aloc.o to makefile (and makefile.u in libf2c.zip). - -Fri Apr 25 19:32:09 EDT 1997 - libf77: add [de]time_.c (which may give trouble on some systems). - -Tue May 27 09:18:52 EDT 1997 - libi77: ftell_.c: fix typo that caused the third argument to be -treated as 2 on some systems. - -Mon Jun 9 00:04:37 EDT 1997 - libi77 (and libf2c.zip): adjust include order in err.c lread.c wref.c -rdfmt.c to include fmt.h (etc.) after system includes. Version.c not -changed. - -Mon Jul 21 16:04:54 EDT 1997 - proc.c: fix glitch in logic for "nonpositive dimension" message. - libi77: inquire.c: always include string.h (for possible use with --DNON_UNIX_STDIO); Version.c not changed. - -Thu Jul 24 17:11:23 EDT 1997 - Tweak "Notice" to reflect the AT&T breakup -- we missed it when -updating the copyright notices in the source files last summer. - Adjust src/makefile so malloc.o is not used by default, but can -be specified with "make MALLOC=malloc.o". - Add comments to src/README about the "CRAY" T3E. - -Tue Aug 5 14:53:25 EDT 1997 - Add definition of calloc to malloc.c; this makes f2c's malloc -work on some systems where trouble hitherto arose because references -to calloc brought in the system's malloc. (On sensible systems, -calloc is defined separately from malloc. To avoid confusion on -other systems, f2c/malloc.c now defines calloc.) - libi77: lread.c: adjust to accord with a change to the Fortran 8X -draft (in 1990 or 1991) that rescinded permission to elide quote marks -in namelist input of character data; to get the old behavior, compile -with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print -the right number of 0's for zero under G format. - -Sat Aug 16 05:45:32 EDT 1997 - libI77: iio.c: fix bug in internal writes to an array of character -strings that sometimes caused one more array element than required by -the format to be blank-filled. Example: format(1x). diff --git a/gcc/f/runtime/configure b/gcc/f/runtime/configure deleted file mode 100755 index 9d7b6f5069f..00000000000 --- a/gcc/f/runtime/configure +++ /dev/null @@ -1,2051 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=libF77/Version.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -# From configure.in 1.10 - -# For g77 we'll set CC to point at the built gcc, but this will get it into -# the makefiles -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:530: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:559: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:607: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext <<EOF -#line 617 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -if { (eval echo configure:621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:641: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:646: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:670: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-O2" - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - -if test "$CROSS";then - ac_cv_c_cross=yes -else - ac_cv_c_cross=no -fi - -test "$AR" || AR=ar - -if test "$RANLIB"; then : - - if test -z "$RANLIB_TEST"; then - RANLIB_TEST=true - fi -else - RANLIB_TEST=true - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:715: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -fi - - - - -# Sanity check for the cross-compilation case: -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:748: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 763 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 780 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 -echo "configure:810: checking for stdio.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 815 "configure" -#include "confdefs.h" -#include <stdio.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -{ echo "configure: error: Can't find stdio.h. -You must have a usable C system for the target already installed, at least -including headers and, preferably, the library, before you can configure -the G77 runtime system. If necessary, install gcc now with \`LANGUAGES=c', -then the target library, then build with \`LANGUAGES=f77'." 1>&2; exit 1; } -fi - - -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:848: checking for ANSI C header files" >&5 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 853 "configure" -#include "confdefs.h" -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 878 "configure" -#include "confdefs.h" -#include <string.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 896 "configure" -#include "confdefs.h" -#include <stdlib.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext <<EOF -#line 917 "configure" -#include "confdefs.h" -#include <ctype.h> -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -if { (eval echo configure:928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* -fi - -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - - - -echo $ac_n "checking for posix""... $ac_c" 1>&6 -echo "configure:954: checking for posix" >&5 -if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 959 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <unistd.h> -#ifdef _POSIX_VERSION - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_header_posix=yes -else - rm -rf conftest* - g77_cv_header_posix=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$g77_cv_header_posix" 1>&6 - -# We can rely on the GNU library being posix-ish. I guess checking the -# header isn't actually like checking the functions, though... -echo $ac_n "checking for GNU library""... $ac_c" 1>&6 -echo "configure:985: checking for GNU library" >&5 -if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 990 "configure" -#include "confdefs.h" -#include <stdio.h> -#ifdef __GNU_LIBRARY__ - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_lib_gnu=yes -else - rm -rf conftest* - g77_cv_lib_gnu=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$g77_cv_lib_gnu" 1>&6 - -# Apparently cygwin needs to be special-cased. -echo $ac_n "checking for cyg\`win'32""... $ac_c" 1>&6 -echo "configure:1014: checking for cyg\`win'32" >&5 -if eval "test \"`echo '$''{'g77_cv_sys_cygwin32'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1019 "configure" -#include "confdefs.h" -#ifdef __CYGWIN32__ - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_sys_cygwin32=yes -else - rm -rf conftest* - g77_cv_sys_cygwin32=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$g77_cv_sys_cygwin32" 1>&6 - -ac_safe=`echo "fcntl.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for fcntl.h""... $ac_c" 1>&6 -echo "configure:1042: checking for fcntl.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1047 "configure" -#include "confdefs.h" -#include <fcntl.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - test $g77_cv_header_posix = yes && cat >> confdefs.h <<\EOF -#define _POSIX_SOURCE 1 -EOF - -else - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define NO_FCNTL 1 -EOF - cat >> confdefs.h <<\EOF -#define OPEN_DECL 1 -EOF - -fi - - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1085: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1090 "configure" -#include "confdefs.h" - -int main() { - -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:1160: checking for size_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1165 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#include <stddef.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_size_t=yes -else - rm -rf conftest* - ac_cv_type_size_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_size_t" 1>&6 -if test $ac_cv_type_size_t = no; then - cat >> confdefs.h <<\EOF -#define size_t unsigned -EOF - -fi - - -echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:1194: checking return type of signal handlers" >&5 -if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1199 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <signal.h> -#ifdef signal -#undef signal -#endif -#ifdef __cplusplus -extern "C" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif - -int main() { -int i; -; return 0; } -EOF -if { (eval echo configure:1216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_type_signal=void -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_type_signal=int -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_type_signal" 1>&6 -cat >> confdefs.h <<EOF -#define RETSIGTYPE $ac_cv_type_signal -EOF - - -# we'll get atexit by default -if test $ac_cv_header_stdc != yes; then -echo $ac_n "checking for atexit""... $ac_c" 1>&6 -echo "configure:1237: checking for atexit" >&5 -if eval "test \"`echo '$''{'ac_cv_func_atexit'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1242 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char atexit(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char atexit(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_atexit) || defined (__stub___atexit) -choke me -#else -atexit(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_atexit=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_atexit=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'atexit`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define onexit atexit -EOF - -else - echo "$ac_t""no" 1>&6 - cat >> confdefs.h <<\EOF -#define NO_ONEXIT 1 -EOF - - echo $ac_n "checking for onexit""... $ac_c" 1>&6 -echo "configure:1290: checking for onexit" >&5 -if eval "test \"`echo '$''{'ac_cv_func_onexit'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1295 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char onexit(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char onexit(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_onexit) || defined (__stub___onexit) -choke me -#else -onexit(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_onexit=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_onexit=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'onexit`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for on_exit""... $ac_c" 1>&6 -echo "configure:1336: checking for on_exit" >&5 -if eval "test \"`echo '$''{'ac_cv_func_on_exit'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1341 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char on_exit(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char on_exit(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_on_exit) || defined (__stub___on_exit) -choke me -#else -on_exit(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_on_exit=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_on_exit=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'on_exit`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define onexit on_exit -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -fi - -fi - -else true -fi - -# This should always succeed on unix. -# Apparently positive result on cygwin loses re. NON_UNIX_STDIO -# (as of cygwin b18). -echo $ac_n "checking for fstat""... $ac_c" 1>&6 -echo "configure:1397: checking for fstat" >&5 -if eval "test \"`echo '$''{'ac_cv_func_fstat'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1402 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char fstat(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char fstat(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_fstat) || defined (__stub___fstat) -choke me -#else -fstat(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_fstat=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_fstat=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'fstat`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking need for NON_UNIX_STDIO""... $ac_c" 1>&6 -echo "configure:1445: checking need for NON_UNIX_STDIO" >&5 -if test $g77_cv_sys_cygwin32 = yes || test $ac_cv_func_fstat = no; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define NON_UNIX_STDIO 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -# This is necessary for e.g. Linux: -echo $ac_n "checking for necessary members of struct FILE""... $ac_c" 1>&6 -echo "configure:1458: checking for necessary members of struct FILE" >&5 -if eval "test \"`echo '$''{'g77_cv_struct_FILE'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1463 "configure" -#include "confdefs.h" -#include <stdio.h> -int main() { -FILE s; s._ptr; s._base; s._flag; -; return 0; } -EOF -if { (eval echo configure:1470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - g77_cv_struct_FILE=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - g77_cv_struct_FILE=no -fi -rm -f conftest* -fi -echo "$ac_t""$g77_cv_struct_FILE" 1>&6 -if test $g77_cv_struct_FILE = no; then - cat >> confdefs.h <<\EOF -#define MISSING_FILE_ELEMS 1 -EOF - -fi - -echo $ac_n "checking for drem in -lm""... $ac_c" 1>&6 -echo "configure:1490: checking for drem in -lm" >&5 -ac_lib_var=`echo m'_'drem | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lm $LIBS" -cat > conftest.$ac_ext <<EOF -#line 1498 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char drem(); - -int main() { -drem() -; return 0; } -EOF -if { (eval echo configure:1509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define IEEE_drem 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi - - - -# posix will guarantee the right behaviour for sprintf, else we can't be -# sure; HEADER_STDC wouldn't be the right check in sunos4, for instance. -# However, on my sunos4/gcc setup unistd.h leads us wrongly to believe -# we're posix-conformant, so always do the test. -echo $ac_n "checking for ansi/posix sprintf result""... $ac_c" 1>&6 -echo "configure:1539: checking for ansi/posix sprintf result" >&5 -if test "$cross_compiling" = yes; then - g77_cv_sys_sprintf_ansi=no -else - cat > conftest.$ac_ext <<EOF -#line 1544 "configure" -#include "confdefs.h" - #include <stdio.h> - /* does sprintf return the number of chars transferred? */ - main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);} - -EOF -if { (eval echo configure:1551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - g77_cv_sys_sprintf_ansi=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - g77_cv_sys_sprintf_ansi=no -fi -rm -fr conftest* -fi - -if eval "test \"`echo '$''{'g77_cv_sys_sprintf_ansi'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - g77_cv_sys_sprintf_ansi=$g77_cv_sys_sprintf_ansi -fi - -if test $ac_cv_c_cross = no; then - echo "$ac_t""$g77_cv_sys_sprintf_ansi" 1>&6 -else - echo "$ac_t""can't tell -- assuming no" 1>&6 -fi -# The cygwin patch takes steps to avoid defining USE_STRLEN here -- I don't -# understand why. -if test $g77_cv_sys_sprintf_ansi != yes; then - cat >> confdefs.h <<\EOF -#define USE_STRLEN 1 -EOF - -fi - -# define NON_ANSI_RW_MODES on unix (can't hurt) -echo $ac_n "checking NON_ANSI_RW_MODES""... $ac_c" 1>&6 -echo "configure:1585: checking NON_ANSI_RW_MODES" >&5 -cat > conftest.$ac_ext <<EOF -#line 1587 "configure" -#include "confdefs.h" -#ifdef unix - yes -#endif -#ifdef __unix - yes -#endif -#ifdef __unix__ - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - is_unix=yes -else - rm -rf conftest* - is_unix=no -fi -rm -f conftest* - -if test $g77_cv_sys_cygwin32 = yes; then - echo "$ac_t""no" 1>&6 -else - if test $is_unix = yes; then - cat >> confdefs.h <<\EOF -#define NON_ANSI_RW_MODES 1 -EOF - - echo "$ac_t""yes" 1>&6 - else - echo "$ac_t""no" 1>&6 - fi -fi - -# We have to firkle with the info in hconfig.h to figure out suitable types -# (via com.h). proj.h and com.h are in $srcdir/.., config.h which they need -# is in ../.. and the config files are in $srcdir/../../config. -echo $ac_n "checking f2c integer type""... $ac_c" 1>&6 -echo "configure:1628: checking f2c integer type" >&5 -late_ac_cpp=$ac_cpp -ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config" -if eval "test \"`echo '$''{'g77_cv_sys_f2cinteger'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1635 "configure" -#include "confdefs.h" -#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG -F2C_INTEGER=long int -#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT -F2C_INTEGER=int -#else -# error "Cannot find a suitable type for F2C_INTEGER" -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "F2C_INTEGER=long int" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_sys_f2cinteger="long int" -fi -rm -f conftest* - -if test "$g77_cv_sys_f2cinteger" = ""; then - cat > conftest.$ac_ext <<EOF -#line 1658 "configure" -#include "confdefs.h" -#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG -F2C_INTEGER=long int -#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT -F2C_INTEGER=int -#else -# error "Cannot find a suitable type for F2C_INTEGER" -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "F2C_INTEGER=int" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_sys_f2cinteger=int -fi -rm -f conftest* - -fi -if test "$g77_cv_sys_f2cinteger" = ""; then - echo "$ac_t""""" 1>&6 - { echo "configure: error: Can't determine type for f2c integer; config.log may help." 1>&2; exit 1; } -fi - -fi - -echo "$ac_t""$g77_cv_sys_f2cinteger" 1>&6 -F2C_INTEGER=$g77_cv_sys_f2cinteger -ac_cpp=$late_ac_cpp - - -echo $ac_n "checking f2c long int type""... $ac_c" 1>&6 -echo "configure:1693: checking f2c long int type" >&5 -late_ac_cpp=$ac_cpp -ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config" -if eval "test \"`echo '$''{'g77_cv_sys_f2clongint'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1700 "configure" -#include "confdefs.h" -#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG -F2C_LONGINT=long int -#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG -F2C_LONGINT=long long int -#else -# error "Cannot find a suitable type for F2C_LONGINT" -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "F2C_LONGINT=long int" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_sys_f2clongint="long int" -fi -rm -f conftest* - -if test "$g77_cv_sys_f2clongint" = ""; then - cat > conftest.$ac_ext <<EOF -#line 1723 "configure" -#include "confdefs.h" -#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG -F2C_LONGINT=long int -#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG -F2C_LONGINT=long long int -#else -# error "Cannot find a suitable type for F2C_LONGINT" -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "F2C_LONGINT=long long int" >/dev/null 2>&1; then - rm -rf conftest* - g77_cv_sys_f2clongint="long long int" -fi -rm -f conftest* - -fi -if test "$g77_cv_sys_f2clongint" = ""; then - echo "$ac_t""""" 1>&6 - { echo "configure: error: Can't determine type for f2c long int; config.log may help." 1>&2; exit 1; } -fi - -fi - -echo "$ac_t""$g77_cv_sys_f2clongint" 1>&6 -F2C_LONGINT=$g77_cv_sys_f2clongint -ac_cpp=$late_ac_cpp - - - - - - -# This EOF_CHAR is a misfeature on unix. -cat >> confdefs.h <<\EOF -#define NO_EOF_CHAR_CHECK 1 -EOF - - -cat >> confdefs.h <<\EOF -#define Skip_f2c_Undefs 1 -EOF - - - - - -cat >> confdefs.h <<\EOF -#define Pad_UDread 1 -EOF - - - - - -cat >> confdefs.h <<\EOF -#define WANT_LEAD_0 1 -EOF - - -# avoid confusion in case the `makefile's from the f2c distribution have -# got put here -test -f libF77/makefile && mv libF77/makefile libF77/makefile.ori -test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori -test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir - -trap 'rm -fr `echo "Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@AR@%$AR%g -s%@RANLIB@%$RANLIB%g -s%@RANLIB_TEST@%$RANLIB_TEST%g -s%@CPP@%$CPP%g -s%@F2C_INTEGER@%$F2C_INTEGER%g -s%@F2C_LONGINT@%$F2C_LONGINT%g -s%@CROSS@%$CROSS%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -EOF -cat >> $CONFIG_STATUS <<EOF - -EOF -cat >> $CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - - - diff --git a/gcc/f/runtime/configure.in b/gcc/f/runtime/configure.in deleted file mode 100644 index 7b1ed2cd0f8..00000000000 --- a/gcc/f/runtime/configure.in +++ /dev/null @@ -1,375 +0,0 @@ -# Process this file with autoconf to produce a configure script. -# Copyright (C) 1995, 1997 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of GNU Fortran. -# -#GNU Fortran is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2, or (at your option) -#any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with GNU Fortran; see the file COPYING. If not, write to -#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -#02111-1307, USA. - -AC_INIT(libF77/Version.c) - -AC_REVISION(1.10) - -dnl Checks for programs. -# For g77 we'll set CC to point at the built gcc, but this will get it into -# the makefiles -AC_PROG_CC -dnl AC_C_CROSS -dnl Gives misleading `(cached)' message from the check. -if test "$CROSS";then - ac_cv_c_cross=yes -else - ac_cv_c_cross=no -fi - -dnl These should be inherited in the recursive make, but ensure they are -dnl defined: -test "$AR" || AR=ar -AC_SUBST(AR) -if test "$RANLIB"; then : - AC_SUBST(RANLIB) -dnl Make sure that RANLIB_TEST is set also. - if test -z "$RANLIB_TEST"; then - RANLIB_TEST=true - fi -else - RANLIB_TEST=true - AC_PROG_RANLIB -fi -AC_SUBST(RANLIB_TEST) - -dnl not needed for g77? -dnl AC_PROG_MAKE_SET - -dnl Checks for libraries. - -dnl Checks for header files. -# Sanity check for the cross-compilation case: -AC_CHECK_HEADER(stdio.h,:, - [AC_MSG_ERROR([Can't find stdio.h. -You must have a usable C system for the target already installed, at least -including headers and, preferably, the library, before you can configure -the G77 runtime system. If necessary, install gcc now with \`LANGUAGES=c', -then the target library, then build with \`LANGUAGES=f77'.])]) - -AC_HEADER_STDC -dnl We could do this if we didn't know we were using gcc -dnl AC_MSG_CHECKING(for prototype-savvy compiler) -dnl AC_CACHE_VAL(g77_cv_sys_proto, -dnl [AC_TRY_LINK(, -dnl dnl looks screwy because TRY_LINK expects a function body -dnl [return 0;} int foo (int * bar) {], -dnl g77_cv_sys_proto=yes, -dnl [g77_cv_sys_proto=no -dnl AC_DEFINE(KR_headers)])]) -dnl AC_MSG_RESULT($g77_cv_sys_proto) - -dnl for U77 -dnl AC_CHECK_HEADERS(unistd.h) - -AC_MSG_CHECKING(for posix) -AC_CACHE_VAL(g77_cv_header_posix, - AC_EGREP_CPP(yes, - [#include <sys/types.h> -#include <unistd.h> -#ifdef _POSIX_VERSION - yes -#endif -], - g77_cv_header_posix=yes, - g77_cv_header_posix=no)) -AC_MSG_RESULT($g77_cv_header_posix) - -# We can rely on the GNU library being posix-ish. I guess checking the -# header isn't actually like checking the functions, though... -AC_MSG_CHECKING(for GNU library) -AC_CACHE_VAL(g77_cv_lib_gnu, - AC_EGREP_CPP(yes, - [#include <stdio.h> -#ifdef __GNU_LIBRARY__ - yes -#endif -], - g77_cv_lib_gnu=yes, g77_cv_lib_gnu=no)) -AC_MSG_RESULT($g77_cv_lib_gnu) - -# Apparently cygwin needs to be special-cased. -AC_MSG_CHECKING([for cyg\`win'32]) -AC_CACHE_VAL(g77_cv_sys_cygwin32, - AC_EGREP_CPP(yes, - [#ifdef __CYGWIN32__ - yes -#endif -], - g77_cv_sys_cygwin32=yes, - g77_cv_sys_cygwin32=no)) -AC_MSG_RESULT($g77_cv_sys_cygwin32) - -AC_CHECK_HEADER(fcntl.h, - test $g77_cv_header_posix = yes && AC_DEFINE(_POSIX_SOURCE), - AC_DEFINE(NO_FCNTL) AC_DEFINE(OPEN_DECL)) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -dnl Checks for library functions. -AC_TYPE_SIGNAL -# we'll get atexit by default -if test $ac_cv_header_stdc != yes; then -AC_CHECK_FUNC(atexit, - AC_DEFINE(onexit,atexit),dnl just in case - [AC_DEFINE(NO_ONEXIT) - AC_CHECK_FUNC(onexit,, - [AC_CHECK_FUNC(on_exit, - AC_DEFINE(onexit,on_exit),)])]) -else true -fi - -# This should always succeed on unix. -# Apparently positive result on cygwin loses re. NON_UNIX_STDIO -# (as of cygwin b18). -AC_CHECK_FUNC(fstat) -AC_MSG_CHECKING([need for NON_UNIX_STDIO]) -if test $g77_cv_sys_cygwin32 = yes || test $ac_cv_func_fstat = no; then - AC_MSG_RESULT(yes) - AC_DEFINE(NON_UNIX_STDIO) -else - AC_MSG_RESULT(no) -fi - -# This is necessary for e.g. Linux: -AC_MSG_CHECKING([for necessary members of struct FILE]) -AC_CACHE_VAL(g77_cv_struct_FILE, -[AC_TRY_COMPILE([#include <stdio.h>], - [FILE s; s._ptr; s._base; s._flag;],g77_cv_struct_FILE=yes, - g77_cv_struct_FILE=no)])dnl -AC_MSG_RESULT($g77_cv_struct_FILE) -if test $g77_cv_struct_FILE = no; then - AC_DEFINE(MISSING_FILE_ELEMS) -fi - -dnl perhaps should check also for remainder -dnl Unfortunately, the message implies we're just checking for -lm... -AC_CHECK_LIB(m,drem,AC_DEFINE(IEEE_drem)) - -dnl for U77: -dnl AC_CHECK_FUNCS(symlink getcwd lstat) -dnl test $ac_cv_func_symlink = yes && SYMLNK=symlnk_.o -dnl test $ac_cv_func_lstat = yes && SYMLNK="$SYMLNK lstat_.o" -dnl AC_SUBST(SYMLNK) - -# posix will guarantee the right behaviour for sprintf, else we can't be -# sure; HEADER_STDC wouldn't be the right check in sunos4, for instance. -# However, on my sunos4/gcc setup unistd.h leads us wrongly to believe -# we're posix-conformant, so always do the test. -AC_MSG_CHECKING(for ansi/posix sprintf result) -dnl This loses if included as an argument to AC_CACHE_VAL because the -dnl changequote doesn't take effect and the [] vanish. -dnl fixme: use cached value -AC_TRY_RUN(changequote(<<, >>)dnl - <<#include <stdio.h> - /* does sprintf return the number of chars transferred? */ - main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);} ->>changequote([, ]), - g77_cv_sys_sprintf_ansi=yes, - g77_cv_sys_sprintf_ansi=no, - g77_cv_sys_sprintf_ansi=no) -AC_CACHE_VAL(g77_cv_sys_sprintf_ansi, - g77_cv_sys_sprintf_ansi=$g77_cv_sys_sprintf_ansi) -dnl We get a misleading `(cached)' message... -if test $ac_cv_c_cross = no; then - AC_MSG_RESULT($g77_cv_sys_sprintf_ansi) -else - AC_MSG_RESULT([can't tell -- assuming no]) -fi -# The cygwin patch takes steps to avoid defining USE_STRLEN here -- I don't -# understand why. -if test $g77_cv_sys_sprintf_ansi != yes; then - AC_DEFINE(USE_STRLEN) -fi - -# define NON_ANSI_RW_MODES on unix (can't hurt) -AC_MSG_CHECKING(NON_ANSI_RW_MODES) -AC_EGREP_CPP(yes, -[#ifdef unix - yes -#endif -#ifdef __unix - yes -#endif -#ifdef __unix__ - yes -#endif -], is_unix=yes, is_unix=no) -if test $g77_cv_sys_cygwin32 = yes; then - AC_MSG_RESULT(no) -else - if test $is_unix = yes; then - AC_DEFINE(NON_ANSI_RW_MODES) - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -fi - -# We have to firkle with the info in hconfig.h to figure out suitable types -# (via com.h). proj.h and com.h are in $srcdir/.., config.h which they need -# is in ../.. and the config files are in $srcdir/../../config. -AC_MSG_CHECKING(f2c integer type) -late_ac_cpp=$ac_cpp -ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config" -AC_CACHE_VAL(g77_cv_sys_f2cinteger, -AC_EGREP_CPP(F2C_INTEGER=long int, -[#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG -F2C_INTEGER=long int -#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT -F2C_INTEGER=int -#else -# error "Cannot find a suitable type for F2C_INTEGER" -#endif -], - g77_cv_sys_f2cinteger="long int",) -if test "$g77_cv_sys_f2cinteger" = ""; then - AC_EGREP_CPP(F2C_INTEGER=int, -[#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG -F2C_INTEGER=long int -#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT -F2C_INTEGER=int -#else -# error "Cannot find a suitable type for F2C_INTEGER" -#endif -], - g77_cv_sys_f2cinteger=int,) -fi -if test "$g77_cv_sys_f2cinteger" = ""; then - AC_MSG_RESULT("") - AC_MSG_ERROR([Can't determine type for f2c integer; config.log may help.]) -fi -) -AC_MSG_RESULT($g77_cv_sys_f2cinteger) -F2C_INTEGER=$g77_cv_sys_f2cinteger -ac_cpp=$late_ac_cpp -AC_SUBST(F2C_INTEGER) - -AC_MSG_CHECKING(f2c long int type) -late_ac_cpp=$ac_cpp -ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config" -AC_CACHE_VAL(g77_cv_sys_f2clongint, -AC_EGREP_CPP(F2C_LONGINT=long int, -[#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG -F2C_LONGINT=long int -#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG -F2C_LONGINT=long long int -#else -# error "Cannot find a suitable type for F2C_LONGINT" -#endif -], - g77_cv_sys_f2clongint="long int",) -if test "$g77_cv_sys_f2clongint" = ""; then - AC_EGREP_CPP(F2C_LONGINT=long long int, -[#include "proj.h" -#define FFECOM_DETERMINE_TYPES 1 -#include "com.h" -#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG -F2C_LONGINT=long int -#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG -F2C_LONGINT=long long int -#else -# error "Cannot find a suitable type for F2C_LONGINT" -#endif -], - g77_cv_sys_f2clongint="long long int",) -fi -if test "$g77_cv_sys_f2clongint" = ""; then - AC_MSG_RESULT("") - AC_MSG_ERROR([Can't determine type for f2c long int; config.log may help.]) -fi -) -AC_MSG_RESULT($g77_cv_sys_f2clongint) -F2C_LONGINT=$g77_cv_sys_f2clongint -ac_cpp=$late_ac_cpp -AC_SUBST(F2C_LONGINT) - -dnl maybe check for drem/remainder - -AC_SUBST(CROSS) - - -# This EOF_CHAR is a misfeature on unix. -AC_DEFINE(NO_EOF_CHAR_CHECK) - -AC_DEFINE(Skip_f2c_Undefs) - -dnl Craig had these in f2c.h, but they're only relevant for building libf2c -dnl anyway. - -dnl For GNU Fortran (g77), we always enable the following behaviors for -dnl libf2c, to make things easy on the programmer. The alternate -dnl behaviors have their uses, and g77 might provide them as compiler, -dnl rather than library, options, so only a single copy of a shared libf2c -dnl need be built for a system. - -dnl This makes unformatted I/O more consistent in relation to other -dnl systems. It is not required by the F77 standard. - -AC_DEFINE(Pad_UDread) - -dnl This makes ERR= and IOSTAT= returns work properly in disk-full -dnl situations, making things work more as expected. It slows things -dnl down, so g77 will probably someday choose the original implementation -dnl on a case-by-case basis when it can be shown to not be necessary -dnl (e.g. no ERR= or IOSTAT=) or when it is given the appropriate -dnl compile-time option or, perhaps, source-code directive. - -dnl AC_DEFINE(ALWAYS_FLUSH) - -dnl Most Fortran implementations do this, so to make it easier -dnl to compare the output of g77-compiled programs to those compiled -dnl by most other compilers, tell libf2c to put leading zeros in -dnl appropriate places on output - -AC_DEFINE(WANT_LEAD_0) - -# avoid confusion in case the `makefile's from the f2c distribution have -# got put here -test -f libF77/makefile && mv libF77/makefile libF77/makefile.ori -test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori -test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori - -AC_OUTPUT(Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile) - -dnl We might have configuration options to: -dnl * allow non-standard string concatenation (use libF77 s_catow.o, -dnl not s_cat.o) -dnl * change unit preconnexion in libI77/err.c (f_init.c) -dnl * -DALWAYS_FLUSH in libI77 -dnl * -DOMIT_BLANK_CC in libI77 - -dnl Local Variables: -dnl comment-start: "dnl " -dnl comment-end: "" -dnl comment-start-skip: "\\bdnl\\b\\s *" -dnl End: diff --git a/gcc/f/runtime/disclaimer.netlib b/gcc/f/runtime/disclaimer.netlib deleted file mode 100644 index a11108f83db..00000000000 --- a/gcc/f/runtime/disclaimer.netlib +++ /dev/null @@ -1,15 +0,0 @@ -f2c is a Fortran to C converter under development since 1990 by - David M. Gay (then AT&T Bell Labs, now Bell Labs, Lucent Technologies) - Stu Feldman (then at Bellcore, now at IBM) - Mark Maimone (Carnegie-Mellon University) - Norm Schryer (then AT&T Bell Labs, now AT&T Labs) -Please send bug reports to dmg@research.bell-labs.com . - -AT&T, Bellcore and Lucent disclaim all warranties with regard to this -software, including all implied warranties of merchantability -and fitness. In no event shall AT&T, Bellcore or Lucent be liable for -any special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether -in an action of contract, negligence or other tortious action, -arising out of or in connection with the use or performance of -this software. diff --git a/gcc/f/runtime/f2c.h.in b/gcc/f/runtime/f2c.h.in deleted file mode 100644 index 90374678100..00000000000 --- a/gcc/f/runtime/f2c.h.in +++ /dev/null @@ -1,227 +0,0 @@ -/* f2c.h -- Standard Fortran to C header file */ - -/** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - - - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ - -#ifndef F2C_INCLUDE -#define F2C_INCLUDE - -/* F2C_INTEGER will normally be `int' but would be `long' on 16-bit systems */ -/* we assume short, float are OK */ -typedef @F2C_INTEGER@ /* long int */ integer; -typedef unsigned @F2C_INTEGER@ /* long */ uinteger; -typedef char *address; -typedef short int shortint; -typedef float real; -typedef double doublereal; -typedef struct { real r, i; } complex; -typedef struct { doublereal r, i; } doublecomplex; -typedef @F2C_INTEGER@ /* long int */ logical; -typedef short int shortlogical; -typedef char logical1; -typedef char integer1; -typedef @F2C_LONGINT@ /* long long */ longint; /* system-dependent */ -typedef unsigned @F2C_LONGINT@ /* long long */ ulongint; /* system-dependent */ -#define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b))) -#define qbit_set(a,b) ((a) | ((ulongint)1 << (b))) - -#define TRUE_ (1) -#define FALSE_ (0) - -/* Extern is for use with -E */ -#ifndef Extern -#define Extern extern -#endif - -/* I/O stuff */ - -#ifdef f2c_i2 -#error "f2c_i2 will not work with g77!!!!" -/* for -i2 */ -typedef short flag; -typedef short ftnlen; -typedef short ftnint; -#else -typedef @F2C_INTEGER@ /* long int */ flag; -typedef @F2C_INTEGER@ /* long int */ ftnlen; -typedef @F2C_INTEGER@ /* long int */ ftnint; -#endif - -/*external read, write*/ -typedef struct -{ flag cierr; - ftnint ciunit; - flag ciend; - char *cifmt; - ftnint cirec; -} cilist; - -/*internal read, write*/ -typedef struct -{ flag icierr; - char *iciunit; - flag iciend; - char *icifmt; - ftnint icirlen; - ftnint icirnum; -} icilist; - -/*open*/ -typedef struct -{ flag oerr; - ftnint ounit; - char *ofnm; - ftnlen ofnmlen; - char *osta; - char *oacc; - char *ofm; - ftnint orl; - char *oblnk; -} olist; - -/*close*/ -typedef struct -{ flag cerr; - ftnint cunit; - char *csta; -} cllist; - -/*rewind, backspace, endfile*/ -typedef struct -{ flag aerr; - ftnint aunit; -} alist; - -/* inquire */ -typedef struct -{ flag inerr; - ftnint inunit; - char *infile; - ftnlen infilen; - ftnint *inex; /*parameters in standard's order*/ - ftnint *inopen; - ftnint *innum; - ftnint *innamed; - char *inname; - ftnlen innamlen; - char *inacc; - ftnlen inacclen; - char *inseq; - ftnlen inseqlen; - char *indir; - ftnlen indirlen; - char *infmt; - ftnlen infmtlen; - char *inform; - ftnint informlen; - char *inunf; - ftnlen inunflen; - ftnint *inrecl; - ftnint *innrec; - char *inblank; - ftnlen inblanklen; -} inlist; - -#define VOID void - -union Multitype { /* for multiple entry points */ - integer1 g; - shortint h; - integer i; - /* longint j; */ - real r; - doublereal d; - complex c; - doublecomplex z; - }; - -typedef union Multitype Multitype; - -/*typedef long int Long;*/ /* No longer used; formerly in Namelist */ - -struct Vardesc { /* for Namelist */ - char *name; - char *addr; - ftnlen *dims; - int type; - }; -typedef struct Vardesc Vardesc; - -struct Namelist { - char *name; - Vardesc **vars; - int nvars; - }; -typedef struct Namelist Namelist; - -#define abs(x) ((x) >= 0 ? (x) : -(x)) -#define dabs(x) (doublereal)abs(x) -#define min(a,b) ((a) <= (b) ? (a) : (b)) -#define max(a,b) ((a) >= (b) ? (a) : (b)) -#define dmin(a,b) (doublereal)min(a,b) -#define dmax(a,b) (doublereal)max(a,b) -#define bit_test(a,b) ((a) >> (b) & 1) -#define bit_clear(a,b) ((a) & ~((uinteger)1 << (b))) -#define bit_set(a,b) ((a) | ((uinteger)1 << (b))) - -/* procedure parameter types for -A and -C++ */ - -#define F2C_proc_par_types 1 -#ifdef __cplusplus -typedef int /* Unknown procedure type */ (*U_fp)(...); -typedef shortint (*J_fp)(...); -typedef integer (*I_fp)(...); -typedef real (*R_fp)(...); -typedef doublereal (*D_fp)(...), (*E_fp)(...); -typedef /* Complex */ VOID (*C_fp)(...); -typedef /* Double Complex */ VOID (*Z_fp)(...); -typedef logical (*L_fp)(...); -typedef shortlogical (*K_fp)(...); -typedef /* Character */ VOID (*H_fp)(...); -typedef /* Subroutine */ int (*S_fp)(...); -#else -typedef int /* Unknown procedure type */ (*U_fp)(); -typedef shortint (*J_fp)(); -typedef integer (*I_fp)(); -typedef real (*R_fp)(); -typedef doublereal (*D_fp)(), (*E_fp)(); -typedef /* Complex */ VOID (*C_fp)(); -typedef /* Double Complex */ VOID (*Z_fp)(); -typedef logical (*L_fp)(); -typedef shortlogical (*K_fp)(); -typedef /* Character */ VOID (*H_fp)(); -typedef /* Subroutine */ int (*S_fp)(); -#endif -/* E_fp is for real functions when -R is not specified */ -typedef VOID C_f; /* complex function */ -typedef VOID H_f; /* character function */ -typedef VOID Z_f; /* double complex function */ -typedef doublereal E_f; /* real function with -R not specified */ - -/* undef any lower-case symbols that your C compiler predefines, e.g.: */ - -#ifndef Skip_f2c_Undefs -/* (No such symbols should be defined in a strict ANSI C compiler. - We can avoid trouble with f2c-translated code by using - gcc -ansi [-traditional].) */ -#undef cray -#undef gcos -#undef mc68010 -#undef mc68020 -#undef mips -#undef pdp11 -#undef sgi -#undef sparc -#undef sun -#undef sun2 -#undef sun3 -#undef sun4 -#undef u370 -#undef u3b -#undef u3b2 -#undef u3b5 -#undef unix -#undef vax -#endif -#endif diff --git a/gcc/f/runtime/f2cext.c b/gcc/f/runtime/f2cext.c deleted file mode 100644 index d5ac815c9b4..00000000000 --- a/gcc/f/runtime/f2cext.c +++ /dev/null @@ -1,562 +0,0 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran run-time library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - - -#include <f2c.h> -typedef int (*sig_proc)(int); - -#ifdef Labort -int abort_ (void) { - extern int G77_abort_0 (void); - return G77_abort_0 (); -} -#endif - -#ifdef Lderf -double derf_ (doublereal *x) { - extern double G77_derf_0 (doublereal *x); - return G77_derf_0 (x); -} -#endif - -#ifdef Lderfc -double derfc_ (doublereal *x) { - extern double G77_derfc_0 (doublereal *x); - return G77_derfc_0 (x); -} -#endif - -#ifdef Lef1asc -int ef1asc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) { - extern int G77_ef1asc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb); - return G77_ef1asc_0 (a, la, b, lb); -} -#endif - -#ifdef Lef1cmc -integer ef1cmc_ (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) { - extern integer G77_ef1cmc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb); - return G77_ef1cmc_0 (a, la, b, lb); -} -#endif - -#ifdef Lerf -double erf_ (real *x) { - extern double G77_erf_0 (real *x); - return G77_erf_0 (x); -} -#endif - -#ifdef Lerfc -double erfc_ (real *x) { - extern double G77_erfc_0 (real *x); - return G77_erfc_0 (x); -} -#endif - -#ifdef Lexit -void exit_ (integer *rc) { - extern void G77_exit_0 (integer *rc); - G77_exit_0 (rc); -} -#endif - -#ifdef Lgetarg -void getarg_ (ftnint *n, char *s, ftnlen ls) { - extern void G77_getarg_0 (ftnint *n, char *s, ftnlen ls); - G77_getarg_0 (n, s, ls); -} -#endif - -#ifdef Lgetenv -void getenv_ (char *fname, char *value, ftnlen flen, ftnlen vlen) { - extern void G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen); - G77_getenv_0 (fname, value, flen, vlen); -} -#endif - -#ifdef Liargc -ftnint iargc_ (void) { - extern ftnint G77_iargc_0 (void); - return G77_iargc_0 (); -} -#endif - -#ifdef Lsignal -ftnint signal_ (integer *sigp, sig_proc proc) { - extern ftnint G77_signal_0 (integer *sigp, sig_proc proc); - return G77_signal_0 (sigp, proc); -} -#endif - -#ifdef Lsystem -integer system_ (char *s, ftnlen n) { - extern integer G77_system_0 (char *s, ftnlen n); - return G77_system_0 (s, n); -} -#endif - -#ifdef Lflush -int flush_ (void) { - extern int G77_flush_0 (void); - return G77_flush_0 (); -} -#endif - -#ifdef Lftell -integer ftell_ (integer *Unit) { - extern integer G77_ftell_0 (integer *Unit); - return G77_ftell_0 (Unit); -} -#endif - -#ifdef Lfseek -integer fseek_ (integer *Unit, integer *offset, integer *xwhence) { - extern integer G77_fseek_0 (integer *Unit, integer *offset, integer *xwhence); - return G77_fseek_0 (Unit, offset, xwhence); -} -#endif - -#ifdef Laccess -integer access_ (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode) { - extern integer G77_access_0 (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode); - return G77_access_0 (name, mode, Lname, Lmode); -} -#endif - -#ifdef Lalarm -integer alarm_ (integer *seconds, sig_proc proc, integer *status) { - extern integer G77_alarm_0 (integer *seconds, sig_proc proc); - return G77_alarm_0 (seconds, proc); -} -#endif - -#ifdef Lbesj0 -double besj0_ (const real *x) { - return j0 (*x); -} -#endif - -#ifdef Lbesj1 -double besj1_ (const real *x) { - return j1 (*x); -} -#endif - -#ifdef Lbesjn -double besjn_ (const integer *n, real *x) { - return jn (*n, *x); -} -#endif - -#ifdef Lbesy0 -double besy0_ (const real *x) { - return y0 (*x); -} -#endif - -#ifdef Lbesy1 -double besy1_ (const real *x) { - return y1 (*x); -} -#endif - -#ifdef Lbesyn -double besyn_ (const integer *n, real *x) { - return yn (*n, *x); -} -#endif - -#ifdef Lchdir -integer chdir_ (const char *name, const ftnlen Lname) { - extern integer G77_chdir_0 (const char *name, const ftnlen Lname); - return G77_chdir_0 (name, Lname); -} -#endif - -#ifdef Lchmod -integer chmod_ (const char *name, const char *mode, const ftnlen Lname, const ftnlen Lmode) { - extern integer G77_chmod_0 (const char *name, const char *mode, const ftnlen Lname, const ftnlen Lmode); - return G77_chmod_0 (name, mode, Lname, Lmode); -} -#endif - -#ifdef Lctime -void ctime_ (char *chtime, const ftnlen Lchtime, longint *xstime) { - extern void G77_ctime_0 (char *chtime, const ftnlen Lchtime, longint *xstime); - G77_ctime_0 (chtime, Lchtime, xstime); -} -#endif - -#ifdef Ldate -int date_ (char *buf, ftnlen buf_len) { - extern int G77_date_0 (char *buf, ftnlen buf_len); - return G77_date_0 (buf, buf_len); -} -#endif - -#ifdef Ldbesj0 -double dbesj0_ (const double *x) { - return j0 (*x); -} -#endif - -#ifdef Ldbesj1 -double dbesj1_ (const double *x) { - return j1 (*x); -} -#endif - -#ifdef Ldbesjn -double dbesjn_ (const integer *n, double *x) { - return jn (*n, *x); -} -#endif - -#ifdef Ldbesy0 -double dbesy0_ (const double *x) { - return y0 (*x); -} -#endif - -#ifdef Ldbesy1 -double dbesy1_ (const double *x) { - return y1 (*x); -} -#endif - -#ifdef Ldbesyn -double dbesyn_ (const integer *n, double *x) { - return yn (*n, *x); -} -#endif - -#ifdef Ldtime -double dtime_ (real tarray[2]) { - extern double G77_dtime_0 (real tarray[2]); - return G77_dtime_0 (tarray); -} -#endif - -#ifdef Letime -double etime_ (real tarray[2]) { - extern double G77_etime_0 (real tarray[2]); - return G77_etime_0 (tarray); -} -#endif - -#ifdef Lfdate -void fdate_ (char *ret_val, ftnlen ret_val_len) { - extern void G77_fdate_0 (char *ret_val, ftnlen ret_val_len); - G77_fdate_0 (ret_val, ret_val_len); -} -#endif - -#ifdef Lfgetc -integer fgetc_ (const integer *lunit, char *c, ftnlen Lc) { - extern integer G77_fgetc_0 (const integer *lunit, char *c, ftnlen Lc); - return G77_fgetc_0 (lunit, c, Lc); -} -#endif - -#ifdef Lfget -integer fget_ (char *c, const ftnlen Lc) { - extern integer G77_fget_0 (char *c, const ftnlen Lc); - return G77_fget_0 (c, Lc); -} -#endif - -#ifdef Lflush1 -int flush1_ (const integer *lunit) { - extern int G77_flush1_0 (const integer *lunit); - return G77_flush1_0 (lunit); -} -#endif - -#ifdef Lfnum -integer fnum_ (integer *lunit) { - extern integer G77_fnum_0 (integer *lunit); - return G77_fnum_0 (lunit); -} -#endif - -#ifdef Lfputc -integer fputc_ (const integer *lunit, const char *c, const ftnlen Lc) { - extern integer G77_fputc_0 (const integer *lunit, const char *c, const ftnlen Lc); - return G77_fputc_0 (lunit, c, Lc); -} -#endif - -#ifdef Lfput -integer fput_ (const char *c, const ftnlen Lc) { - extern integer G77_fput_0 (const char *c, const ftnlen Lc); - return G77_fput_0 (c, Lc); -} -#endif - -#ifdef Lfstat -integer fstat_ (const integer *lunit, integer statb[13]) { - extern integer G77_fstat_0 (const integer *lunit, integer statb[13]); - return G77_fstat_0 (lunit, statb); -} -#endif - -#ifdef Lgerror -int gerror_ (char *str, ftnlen Lstr) { - extern int G77_gerror_0 (char *str, ftnlen Lstr); - return G77_gerror_0 (str, Lstr); -} -#endif - -#ifdef Lgetcwd -integer getcwd_ (char *str, const ftnlen Lstr) { - extern integer G77_getcwd_0 (char *str, const ftnlen Lstr); - return G77_getcwd_0 (str, Lstr); -} -#endif - -#ifdef Lgetgid -integer getgid_ (void) { - extern integer G77_getgid_0 (void); - return G77_getgid_0 (); -} -#endif - -#ifdef Lgetlog -int getlog_ (char *str, const ftnlen Lstr) { - extern int G77_getlog_0 (char *str, const ftnlen Lstr); - return G77_getlog_0 (str, Lstr); -} -#endif - -#ifdef Lgetpid -integer getpid_ (void) { - extern integer G77_getpid_0 (void); - return G77_getpid_0 (); -} -#endif - -#ifdef Lgetuid -integer getuid_ (void) { - extern integer G77_getuid_0 (void); - return G77_getuid_0 (); -} -#endif - -#ifdef Lgmtime -int gmtime_ (const integer *stime, integer tarray[9]) { - extern int G77_gmtime_0 (const integer *stime, integer tarray[9]); - return G77_gmtime_0 (stime, tarray); -} -#endif - -#ifdef Lhostnm -integer hostnm_ (char *name, ftnlen Lname) { - extern integer G77_hostnm_0 (char *name, ftnlen Lname); - return G77_hostnm_0 (name, Lname); -} -#endif - -#ifdef Lidate -int idate_ (int iarray[3]) { - extern int G77_idate_0 (int iarray[3]); - return G77_idate_0 (iarray); -} -#endif - -#ifdef Lierrno -integer ierrno_ (void) { - extern integer G77_ierrno_0 (void); - return G77_ierrno_0 (); -} -#endif - -#ifdef Lirand -integer irand_ (integer *flag) { - extern integer G77_irand_0 (integer *flag); - return G77_irand_0 (flag); -} -#endif - -#ifdef Lisatty -logical isatty_ (integer *lunit) { - extern logical G77_isatty_0 (integer *lunit); - return G77_isatty_0 (lunit); -} -#endif - -#ifdef Litime -int itime_ (integer tarray[3]) { - extern int G77_itime_0 (integer tarray[3]); - return G77_itime_0 (tarray); -} -#endif - -#ifdef Lkill -integer kill_ (const integer *pid, const integer *signum) { - extern integer G77_kill_0 (const integer *pid, const integer *signum); - return G77_kill_0 (pid, signum); -} -#endif - -#ifdef Llink -integer link_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) { - extern integer G77_link_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2); - return G77_link_0 (path1, path2, Lpath1, Lpath2); -} -#endif - -#ifdef Llnblnk -integer lnblnk_ (char *str, ftnlen str_len) { - extern integer G77_lnblnk_0 (char *str, ftnlen str_len); - return G77_lnblnk_0 (str, str_len); -} -#endif - -#ifdef Llstat -integer lstat_ (const char *name, integer statb[13], const ftnlen Lname) { - extern integer G77_lstat_0 (const char *name, integer statb[13], const ftnlen Lname); - return G77_lstat_0 (name, statb, Lname); -} -#endif - -#ifdef Lltime -int ltime_ (const integer *stime, integer tarray[9]) { - extern int G77_ltime_0 (const integer *stime, integer tarray[9]); - return G77_ltime_0 (stime, tarray); -} -#endif - -#ifdef Lmclock -longint mclock_ (void) { - extern longint G77_mclock_0 (void); - return G77_mclock_0 (); -} -#endif - -#ifdef Lperror -int perror_ (const char *str, const ftnlen Lstr) { - extern int G77_perror_0 (const char *str, const ftnlen Lstr); - return G77_perror_0 (str, Lstr); -} -#endif - -#ifdef Lrand -double rand_ (integer *flag) { - extern double G77_rand_0 (integer *flag); - return G77_rand_0 (flag); -} -#endif - -#ifdef Lrename -integer rename_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) { - extern integer G77_rename_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2); - return G77_rename_0 (path1, path2, Lpath1, Lpath2); -} -#endif - -#ifdef Lsecnds -double secnds_ (real *r) { - extern double G77_secnds_0 (real *r); - return G77_secnds_0 (r); -} -#endif - -#ifdef Lsecond -double second_ () { - extern double G77_second_0 (); - return G77_second_0 (); -} -#endif - -#ifdef Lsleep -int sleep_ (const integer *seconds) { - extern int G77_sleep_0 (const integer *seconds); - return G77_sleep_0 (seconds); -} -#endif - -#ifdef Lsrand -int srand_ (const integer *seed) { - extern int G77_srand_0 (const integer *seed); - return G77_srand_0 (seed); -} -#endif - -#ifdef Lstat -integer stat_ (const char *name, integer statb[13], const ftnlen Lname) { - extern integer G77_stat_0 (const char *name, integer statb[13], const ftnlen Lname); - return G77_stat_0 (name, statb, Lname); -} -#endif - -#ifdef Lsymlnk -integer symlnk_ (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) { - extern integer G77_symlnk_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2); - return G77_symlnk_0 (path1, path2, Lpath1, Lpath2); -} -#endif - -#ifdef Lsclock -int system_clock_ (integer *count, integer *count_rate, integer *count_max) { - extern int G77_system_clock_0 (integer *count, integer *count_rate, integer *count_max); - return G77_system_clock_0 (count, count_rate, count_max); -} -#endif - -#ifdef Ltime -longint time_ (void) { - extern longint G77_time_0 (void); - return G77_time_0 (); -} -#endif - -#ifdef Lttynam -void ttynam_ (char *ret_val, ftnlen ret_val_len, integer *lunit) { - extern void G77_ttynam_0 (char *ret_val, ftnlen ret_val_len, integer *lunit); - G77_ttynam_0 (ret_val, ret_val_len, lunit); -} -#endif - -#ifdef Lumask -integer umask_ (integer *mask) { - extern integer G77_umask_0 (integer *mask); - return G77_umask_0 (mask); -} -#endif - -#ifdef Lunlink -integer unlink_ (const char *str, const ftnlen Lstr) { - extern integer G77_unlink_0 (const char *str, const ftnlen Lstr); - return G77_unlink_0 (str, Lstr); -} -#endif - -#ifdef Lvxtidt -int vxtidate_ (integer *m, integer *d, integer *y) { - extern int G77_vxtidate_0 (integer *m, integer *d, integer *y); - return G77_vxtidate_0 (m, d, y); -} -#endif - -#ifdef Lvxttim -void vxttime_ (char chtime[8], const ftnlen Lchtime) { - extern void G77_vxttime_0 (char chtime[8], const ftnlen Lchtime); - G77_vxttime_0 (chtime, Lchtime); -} -#endif diff --git a/gcc/f/runtime/libF77/F77_aloc.c b/gcc/f/runtime/libF77/F77_aloc.c deleted file mode 100644 index 8754fe2ef70..00000000000 --- a/gcc/f/runtime/libF77/F77_aloc.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "f2c.h" -#undef abs -#undef min -#undef max -#include <stdio.h> - -static integer memfailure = 3; - -#ifdef KR_headers -extern char *malloc(); -extern void G77_exit_0 (); - - char * -F77_aloc(Len, whence) integer Len; char *whence; -#else -#include <stdlib.h> -extern void G77_exit_0 (integer*); - - char * -F77_aloc(integer Len, char *whence) -#endif -{ - char *rv; - unsigned int uLen = (unsigned int) Len; /* for K&R C */ - - if (!(rv = (char*)malloc(uLen))) { - fprintf(stderr, "malloc(%u) failure in %s\n", - uLen, whence); - G77_exit_0 (&memfailure); - } - return rv; - } diff --git a/gcc/f/runtime/libF77/Makefile.in b/gcc/f/runtime/libF77/Makefile.in deleted file mode 100644 index 208626cb4a0..00000000000 --- a/gcc/f/runtime/libF77/Makefile.in +++ /dev/null @@ -1,95 +0,0 @@ -# Makefile for GNU F77 compiler runtime. -# Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the -# file `Notice'). -# Portions of this file Copyright (C) 1995, 1996 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of GNU Fortran. -# -#GNU Fortran is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2, or (at your option) -#any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with GNU Fortran; see the file COPYING. If not, write to -#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -#02111-1307, USA. - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -#### Start of system configuration section. #### - -# The _FOR_TARGET things are appropriate for a cross-make, passed by the -# superior makefile -GCC_FOR_TARGET = @CC@ -CC = $(GCC_FOR_TARGET) -CFLAGS = @CFLAGS@ $(GCC_FLAGS) -CPPFLAGS = @CPPFLAGS@ -DEFS = @DEFS@ -CGFLAGS = -g0 -# f2c.h should already be installed in xgcc's include directory but add that -# to -I anyhow in case not using xgcc. -ALL_CFLAGS = -I. -I$(srcdir) -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS) -AR = @AR@ -AR_FLAGS = rc -RANLIB = @RANLIB@ -RANLIB_TEST = @RANLIB_TEST@ -CROSS = @CROSS@ - -.SUFFIXES: -.SUFFIXES: .c .o - -.c.o: - $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $(CGFLAGS) $< - -MISC = F77_aloc.o VersionF.o main.o s_rnge.o abort_.o getarg_.o iargc_.o\ - getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o\ - derf_.o derfc_.o erf_.o erfc_.o sig_die.o exit_.o -POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o \ - pow_qq.o -CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o -DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o -REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\ - r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\ - r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\ - r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o -DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\ - d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\ - d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\ - d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\ - d_sqrt.o d_tan.o d_tanh.o -INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o -HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o -CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o -EFL = ef1asc_.o ef1cmc_.o -CHAR = s_cat.o s_cmp.o s_copy.o -F90BIT = lbitbits.o lbitshft.o qbitbits.o qbitshft.o - -F2C_H = ../../../include/f2c.h - -all: $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ - $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT) - -VersionF.o: Version.c - $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c - -mostlyclean clean: - -rm -f *.o - -distclean maintainer-clean: clean - -rm -f stage? include Makefile - -# Not quite all these actually do depend on f2c.h... -$(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ - $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT): $(F2C_H) - -.PHONY: mostlyclean clean distclean maintainer-clean all diff --git a/gcc/f/runtime/libF77/Notice b/gcc/f/runtime/libF77/Notice deleted file mode 100644 index 261b719bc57..00000000000 --- a/gcc/f/runtime/libF77/Notice +++ /dev/null @@ -1,23 +0,0 @@ -/**************************************************************** -Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore. - -Permission to use, copy, modify, and distribute this software -and its documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appear in all -copies and that both that the copyright notice and this -permission notice and warranty disclaimer appear in supporting -documentation, and that the names of AT&T, Bell Laboratories, -Lucent or Bellcore or any of their entities not be used in -advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -AT&T, Lucent and Bellcore disclaim all warranties with regard to -this software, including all implied warranties of -merchantability and fitness. In no event shall AT&T, Lucent or -Bellcore be liable for any special, indirect or consequential -damages or any damages whatsoever resulting from loss of use, -data or profits, whether in an action of contract, negligence or -other tortious action, arising out of or in connection with the -use or performance of this software. -****************************************************************/ - diff --git a/gcc/f/runtime/libF77/README.netlib b/gcc/f/runtime/libF77/README.netlib deleted file mode 100644 index 76682152551..00000000000 --- a/gcc/f/runtime/libF77/README.netlib +++ /dev/null @@ -1,108 +0,0 @@ -If your compiler does not recognize ANSI C headers, -compile with KR_headers defined: either add -DKR_headers -to the definition of CFLAGS in the makefile, or insert - -#define KR_headers - -at the top of f2c.h , cabs.c , main.c , and sig_die.c . - -Under MS-DOS, compile s_paus.c with -DMSDOS. - -If you have a really ancient K&R C compiler that does not understand -void, add -Dvoid=int to the definition of CFLAGS in the makefile. - -If you use a C++ compiler, first create a local f2c.h by appending -f2ch.add to the usual f2c.h, e.g., by issuing the command - make f2c.h -which assumes f2c.h is installed in /usr/include . - -If your system lacks onexit() and you are not using an ANSI C -compiler, then you should compile main.c, s_paus.c, s_stop.c, and -sig_die.c with NO_ONEXIT defined. See the comments about onexit in -the makefile. - -If your system has a double drem() function such that drem(a,b) -is the IEEE remainder function (with double a, b), then you may -wish to compile r_mod.c and d_mod.c with IEEE_drem defined. -On some systems, you may also need to compile with -Ddrem=remainder . - -To check for transmission errors, issue the command - make check -This assumes you have the xsum program whose source, xsum.c, -is distributed as part of "all from f2c/src". If you do not -have xsum, you can obtain xsum.c by sending the following E-mail -message to netlib@netlib.bell-labs.com - send xsum.c from f2c/src - -The makefile assumes you have installed f2c.h in a standard -place (and does not cause recompilation when f2c.h is changed); -f2c.h comes with "all from f2c" (the source for f2c) and is -available separately ("f2c.h from f2c"). - -Most of the routines in libF77 are support routines for Fortran -intrinsic functions or for operations that f2c chooses not -to do "in line". There are a few exceptions, summarized below -- -functions and subroutines that appear to your program as ordinary -external Fortran routines. - -1. CALL ABORT prints a message and causes a core dump. - -2. ERF(r) and DERF(d) and the REAL and DOUBLE PRECISION - error functions (with x REAL and d DOUBLE PRECISION); - DERF must be declared DOUBLE PRECISION in your program. - Both ERF and DERF assume your C library provides the - underlying erf() function (which not all systems do). - -3. ERFC(r) and DERFC(d) are the complementary error functions: - ERFC(r) = 1 - ERF(r) and DERFC(d) = 1.d0 - DERFC(d) - (except that their results may be more accurate than - explicitly evaluating the above formulae would give). - Again, ERFC and r are REAL, and DERFC and d are DOUBLE - PRECISION (and must be declared as such in your program), - and ERFC and DERFC rely on your system's erfc(). - -4. CALL GETARG(n,s), where n is an INTEGER and s is a CHARACTER - variable, sets s to the n-th command-line argument (or to - all blanks if there are fewer than n command-line arguments); - CALL GETARG(0,s) sets s to the name of the program (on systems - that support this feature). See IARGC below. - -5. CALL GETENV(name, value), where name and value are of type - CHARACTER, sets value to the environment value, $name, of - name (or to blanks if $name has not been set). - -6. NARGS = IARGC() sets NARGS to the number of command-line - arguments (an INTEGER value). - -7. CALL SIGNAL(n,func), where n is an INTEGER and func is an - EXTERNAL procedure, arranges for func to be invoked when - signal n occurs (on systems where this makes sense). - -8. CALL SYSTEM(cmd), where cmd is of type CHARACTER, passes - cmd to the system's command processor (on systems where - this can be done). - -The makefile does not attempt to compile pow_qq.c, qbitbits.c, -and qbitshft.c, which are meant for use with INTEGER*8. To use -INTEGER*8, you must modify f2c.h to declare longint and ulongint -appropriately; then add pow_qq.o to the POW = line in the makefile, -and add " qbitbits.o qbitshft.o" to the makefile's F90BIT = line. - -Following Fortran 90, s_cat.c and s_copy.c allow the target of a -(character string) assignment to be appear on its right-hand, at -the cost of some extra overhead for all run-time concatenations. -If you prefer the extra efficiency that comes with the Fortran 77 -requirement that the left-hand side of a character assignment not -be involved in the right-hand side, compile s_cat.c and s_copy.c -with -DNO_OVERWRITE . - -If your system lacks a ranlib command, you don't need it. -Either comment out the makefile's ranlib invocation, or install -a harmless "ranlib" command somewhere in your PATH, such as the -one-line shell script - - exit 0 - -or (on some systems) - - exec /usr/bin/ar lts $1 >/dev/null diff --git a/gcc/f/runtime/libF77/Version.c b/gcc/f/runtime/libF77/Version.c deleted file mode 100644 index 8644f3f8187..00000000000 --- a/gcc/f/runtime/libF77/Version.c +++ /dev/null @@ -1,65 +0,0 @@ -static char junk[] = "\n@(#)LIBF77 VERSION 19970404\n"; - -/* -*/ - -char __G77_LIBF77_VERSION__[] = "0.5.21"; - -/* -2.00 11 June 1980. File version.c added to library. -2.01 31 May 1988. s_paus() flushes stderr; names of hl_* fixed - [ d]erf[c ] added - 8 Aug. 1989: #ifdefs for f2c -i2 added to s_cat.c - 29 Nov. 1989: s_cmp returns long (for f2c) - 30 Nov. 1989: arg types from f2c.h - 12 Dec. 1989: s_rnge allows long names - 19 Dec. 1989: getenv_ allows unsorted environment - 28 Mar. 1990: add exit(0) to end of main() - 2 Oct. 1990: test signal(...) == SIG_IGN rather than & 01 in main - 17 Oct. 1990: abort() calls changed to sig_die(...,1) - 22 Oct. 1990: separate sig_die from main - 25 Apr. 1991: minor, theoretically invisible tweaks to s_cat, sig_die - 31 May 1991: make system_ return status - 18 Dec. 1991: change long to ftnlen (for -i2) many places - 28 Feb. 1992: repair z_sqrt.c (scribbled on input, gave wrong answer) - 18 July 1992: for n < 0, repair handling of 0**n in pow_[dr]i.c - and m**n in pow_hh.c and pow_ii.c; - catch SIGTRAP in main() for error msg before abort - 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined - 23 Oct. 1992: fix botch in signal_.c (erroneous deref of 2nd arg); - change Cabs to f__cabs. - 12 March 1993: various tweaks for C++ - 2 June 1994: adjust so abnormal terminations invoke f_exit just once - 16 Sept. 1994: s_cmp: treat characters as unsigned in comparisons. - 19 Sept. 1994: s_paus: flush after end of PAUSE; add -DMSDOS - 12 Jan. 1995: pow_[dhiqrz][hiq]: adjust x**i to work on machines - that sign-extend right shifts when i is the most - negative integer. - 26 Jan. 1995: adjust s_cat.c, s_copy.c to permit the left-hand side - of character assignments to appear on the right-hand - side (unless compiled with -DNO_OVERWRITE). - 27 Jan. 1995: minor tweak to s_copy.c: copy forward whenever - possible (for better cache behavior). - 30 May 1995: added subroutine exit(rc) integer rc. Version not changed. - 29 Aug. 1995: add F77_aloc.c; use it in s_cat.c and system_.c. - 6 Sept. 1995: fix return type of system_ under -DKR_headers. - 19 Dec. 1995: s_cat.c: fix bug when 2nd or later arg overlaps lhs. - 19 Mar. 1996: s_cat.c: supply missing break after overlap detection. - 13 May 1996: add [lq]bitbits.c and [lq]bitshft.c (f90 bit intrinsics). - 19 June 1996: add casts to unsigned in [lq]bitshft.c. - 26 Feb. 1997: adjust functions with a complex output argument - to permit aliasing it with input arguments. - (For now, at least, this is just for possible - benefit of g77.) - 4 April 1997: [cz]_div.c: tweaks invisible on most systems (that may - affect systems using gratuitous extra precision). -*/ - -#include <stdio.h> - -void -g77__fvers__ () -{ - fprintf (stderr, "__G77_LIBF77_VERSION__: %s", __G77_LIBF77_VERSION__); - fputs (junk, stderr); -} diff --git a/gcc/f/runtime/libF77/abort_.c b/gcc/f/runtime/libF77/abort_.c deleted file mode 100644 index 8efdc42f970..00000000000 --- a/gcc/f/runtime/libF77/abort_.c +++ /dev/null @@ -1,18 +0,0 @@ -#include <stdio.h> -#include "f2c.h" - -#ifdef KR_headers -extern VOID sig_die(); - -int G77_abort_0 () -#else -extern void sig_die(char*,int); - -int G77_abort_0 (void) -#endif -{ -sig_die("Fortran abort routine called", 1); -#ifdef __cplusplus -return 0; -#endif -} diff --git a/gcc/f/runtime/libF77/c_abs.c b/gcc/f/runtime/libF77/c_abs.c deleted file mode 100644 index 041fbd3d8bb..00000000000 --- a/gcc/f/runtime/libF77/c_abs.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double f__cabs(); - -double c_abs(z) complex *z; -#else -extern double f__cabs(double, double); - -double c_abs(complex *z) -#endif -{ -return( f__cabs( z->r, z->i ) ); -} diff --git a/gcc/f/runtime/libF77/c_cos.c b/gcc/f/runtime/libF77/c_cos.c deleted file mode 100644 index 9e833c168b3..00000000000 --- a/gcc/f/runtime/libF77/c_cos.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double sin(), cos(), sinh(), cosh(); - -VOID c_cos(resx, z) complex *resx, *z; -#else -#undef abs -#include <math.h> - -void c_cos(complex *resx, complex *z) -#endif -{ -complex res; - -res.r = cos(z->r) * cosh(z->i); -res.i = - sin(z->r) * sinh(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/c_div.c b/gcc/f/runtime/libF77/c_div.c deleted file mode 100644 index 9568354bd53..00000000000 --- a/gcc/f/runtime/libF77/c_div.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern VOID sig_die(); -VOID c_div(resx, a, b) -complex *a, *b, *resx; -#else -extern void sig_die(char*,int); -void c_div(complex *resx, complex *a, complex *b) -#endif -{ -double ratio, den; -double abr, abi; -complex res; - -if( (abr = b->r) < 0.) - abr = - abr; -if( (abi = b->i) < 0.) - abi = - abi; -if( abr <= abi ) - { - if(abi == 0) - sig_die("complex division by zero", 1); - ratio = (double)b->r / b->i ; - den = b->i * (1 + ratio*ratio); - res.r = (a->r*ratio + a->i) / den; - res.i = (a->i*ratio - a->r) / den; - } - -else - { - ratio = (double)b->i / b->r ; - den = b->r * (1 + ratio*ratio); - res.r = (a->r + a->i*ratio) / den; - res.i = (a->i - a->r*ratio) / den; - } - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/c_exp.c b/gcc/f/runtime/libF77/c_exp.c deleted file mode 100644 index 8d3d33d0fe3..00000000000 --- a/gcc/f/runtime/libF77/c_exp.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double exp(), cos(), sin(); - - VOID c_exp(resx, z) complex *resx, *z; -#else -#undef abs -#include <math.h> - -void c_exp(complex *resx, complex *z) -#endif -{ -double expx; -complex res; - -expx = exp(z->r); -res.r = expx * cos(z->i); -res.i = expx * sin(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/c_log.c b/gcc/f/runtime/libF77/c_log.c deleted file mode 100644 index 6715131ad1d..00000000000 --- a/gcc/f/runtime/libF77/c_log.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double log(), f__cabs(), atan2(); -VOID c_log(resx, z) complex *resx, *z; -#else -#undef abs -#include <math.h> -extern double f__cabs(double, double); - -void c_log(complex *resx, complex *z) -#endif -{ -complex res; - -res.i = atan2(z->i, z->r); -res.r = log( f__cabs(z->r, z->i) ); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/c_sin.c b/gcc/f/runtime/libF77/c_sin.c deleted file mode 100644 index 7bf3e392bed..00000000000 --- a/gcc/f/runtime/libF77/c_sin.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double sin(), cos(), sinh(), cosh(); - -VOID c_sin(resx, z) complex *resx, *z; -#else -#undef abs -#include <math.h> - -void c_sin(complex *resx, complex *z) -#endif -{ -complex res; - -res.r = sin(z->r) * cosh(z->i); -res.i = cos(z->r) * sinh(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/c_sqrt.c b/gcc/f/runtime/libF77/c_sqrt.c deleted file mode 100644 index 775977a87f7..00000000000 --- a/gcc/f/runtime/libF77/c_sqrt.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double sqrt(), f__cabs(); - -VOID c_sqrt(resx, z) complex *resx, *z; -#else -#undef abs -#include <math.h> -extern double f__cabs(double, double); - -void c_sqrt(complex *resx, complex *z) -#endif -{ -double mag, t; -complex res; - -if( (mag = f__cabs(z->r, z->i)) == 0.) - res.r = res.i = 0.; -else if(z->r > 0) - { - res.r = t = sqrt(0.5 * (mag + z->r) ); - t = z->i / t; - res.i = 0.5 * t; - } -else - { - t = sqrt(0.5 * (mag - z->r) ); - if(z->i < 0) - t = -t; - res.i = t; - t = z->i / t; - res.r = 0.5 * t; - } - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/cabs.c b/gcc/f/runtime/libF77/cabs.c deleted file mode 100644 index 2fad044e884..00000000000 --- a/gcc/f/runtime/libF77/cabs.c +++ /dev/null @@ -1,27 +0,0 @@ -#ifdef KR_headers -extern double sqrt(); -double f__cabs(real, imag) double real, imag; -#else -#undef abs -#include <math.h> -double f__cabs(double real, double imag) -#endif -{ -double temp; - -if(real < 0) - real = -real; -if(imag < 0) - imag = -imag; -if(imag > real){ - temp = real; - real = imag; - imag = temp; -} -if((real+imag) == real) - return(real); - -temp = imag/real; -temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/ -return(temp); -} diff --git a/gcc/f/runtime/libF77/d_abs.c b/gcc/f/runtime/libF77/d_abs.c deleted file mode 100644 index cb157e067b7..00000000000 --- a/gcc/f/runtime/libF77/d_abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double d_abs(x) doublereal *x; -#else -double d_abs(doublereal *x) -#endif -{ -if(*x >= 0) - return(*x); -return(- *x); -} diff --git a/gcc/f/runtime/libF77/d_acos.c b/gcc/f/runtime/libF77/d_acos.c deleted file mode 100644 index 33da5369db2..00000000000 --- a/gcc/f/runtime/libF77/d_acos.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double acos(); -double d_acos(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_acos(doublereal *x) -#endif -{ -return( acos(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_asin.c b/gcc/f/runtime/libF77/d_asin.c deleted file mode 100644 index 79b33ca1bd6..00000000000 --- a/gcc/f/runtime/libF77/d_asin.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double asin(); -double d_asin(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_asin(doublereal *x) -#endif -{ -return( asin(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_atan.c b/gcc/f/runtime/libF77/d_atan.c deleted file mode 100644 index caea4a406e0..00000000000 --- a/gcc/f/runtime/libF77/d_atan.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double atan(); -double d_atan(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_atan(doublereal *x) -#endif -{ -return( atan(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_atn2.c b/gcc/f/runtime/libF77/d_atn2.c deleted file mode 100644 index 6748a55d56f..00000000000 --- a/gcc/f/runtime/libF77/d_atn2.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double atan2(); -double d_atn2(x,y) doublereal *x, *y; -#else -#undef abs -#include <math.h> -double d_atn2(doublereal *x, doublereal *y) -#endif -{ -return( atan2(*x,*y) ); -} diff --git a/gcc/f/runtime/libF77/d_cnjg.c b/gcc/f/runtime/libF77/d_cnjg.c deleted file mode 100644 index 1afa3bc4061..00000000000 --- a/gcc/f/runtime/libF77/d_cnjg.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "f2c.h" - - VOID -#ifdef KR_headers -d_cnjg(resx, z) doublecomplex *resx, *z; -#else -d_cnjg(doublecomplex *resx, doublecomplex *z) -#endif -{ -doublecomplex res; - -res.r = z->r; -res.i = - z->i; - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/d_cos.c b/gcc/f/runtime/libF77/d_cos.c deleted file mode 100644 index fa4d6ca406f..00000000000 --- a/gcc/f/runtime/libF77/d_cos.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double cos(); -double d_cos(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_cos(doublereal *x) -#endif -{ -return( cos(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_cosh.c b/gcc/f/runtime/libF77/d_cosh.c deleted file mode 100644 index edc0ebc1092..00000000000 --- a/gcc/f/runtime/libF77/d_cosh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double cosh(); -double d_cosh(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_cosh(doublereal *x) -#endif -{ -return( cosh(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_dim.c b/gcc/f/runtime/libF77/d_dim.c deleted file mode 100644 index 1d0ecb7bbb6..00000000000 --- a/gcc/f/runtime/libF77/d_dim.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double d_dim(a,b) doublereal *a, *b; -#else -double d_dim(doublereal *a, doublereal *b) -#endif -{ -return( *a > *b ? *a - *b : 0); -} diff --git a/gcc/f/runtime/libF77/d_exp.c b/gcc/f/runtime/libF77/d_exp.c deleted file mode 100644 index be12fd70551..00000000000 --- a/gcc/f/runtime/libF77/d_exp.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double exp(); -double d_exp(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_exp(doublereal *x) -#endif -{ -return( exp(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_imag.c b/gcc/f/runtime/libF77/d_imag.c deleted file mode 100644 index 793a3f9c405..00000000000 --- a/gcc/f/runtime/libF77/d_imag.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double d_imag(z) doublecomplex *z; -#else -double d_imag(doublecomplex *z) -#endif -{ -return(z->i); -} diff --git a/gcc/f/runtime/libF77/d_int.c b/gcc/f/runtime/libF77/d_int.c deleted file mode 100644 index beff1e7d378..00000000000 --- a/gcc/f/runtime/libF77/d_int.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -double d_int(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_int(doublereal *x) -#endif -{ -return( (*x>0) ? floor(*x) : -floor(- *x) ); -} diff --git a/gcc/f/runtime/libF77/d_lg10.c b/gcc/f/runtime/libF77/d_lg10.c deleted file mode 100644 index c0892bd512a..00000000000 --- a/gcc/f/runtime/libF77/d_lg10.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "f2c.h" - -#define log10e 0.43429448190325182765 - -#ifdef KR_headers -double log(); -double d_lg10(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_lg10(doublereal *x) -#endif -{ -return( log10e * log(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_log.c b/gcc/f/runtime/libF77/d_log.c deleted file mode 100644 index 592015b2821..00000000000 --- a/gcc/f/runtime/libF77/d_log.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double log(); -double d_log(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_log(doublereal *x) -#endif -{ -return( log(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_mod.c b/gcc/f/runtime/libF77/d_mod.c deleted file mode 100644 index 23f19299168..00000000000 --- a/gcc/f/runtime/libF77/d_mod.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -#ifdef IEEE_drem -double drem(); -#else -double floor(); -#endif -double d_mod(x,y) doublereal *x, *y; -#else -#ifdef IEEE_drem -double drem(double, double); -#else -#undef abs -#include <math.h> -#endif -double d_mod(doublereal *x, doublereal *y) -#endif -{ -#ifdef IEEE_drem - double xa, ya, z; - if ((ya = *y) < 0.) - ya = -ya; - z = drem(xa = *x, ya); - if (xa > 0) { - if (z < 0) - z += ya; - } - else if (z > 0) - z -= ya; - return z; -#else - double quotient; - if( (quotient = *x / *y) >= 0) - quotient = floor(quotient); - else - quotient = -floor(-quotient); - return(*x - (*y) * quotient ); -#endif -} diff --git a/gcc/f/runtime/libF77/d_nint.c b/gcc/f/runtime/libF77/d_nint.c deleted file mode 100644 index 064beff669c..00000000000 --- a/gcc/f/runtime/libF77/d_nint.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -double d_nint(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_nint(doublereal *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/d_prod.c b/gcc/f/runtime/libF77/d_prod.c deleted file mode 100644 index 3d4cef7835c..00000000000 --- a/gcc/f/runtime/libF77/d_prod.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double d_prod(x,y) real *x, *y; -#else -double d_prod(real *x, real *y) -#endif -{ -return( (*x) * (*y) ); -} diff --git a/gcc/f/runtime/libF77/d_sign.c b/gcc/f/runtime/libF77/d_sign.c deleted file mode 100644 index 514ff0bbff8..00000000000 --- a/gcc/f/runtime/libF77/d_sign.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double d_sign(a,b) doublereal *a, *b; -#else -double d_sign(doublereal *a, doublereal *b) -#endif -{ -double x; -x = (*a >= 0 ? *a : - *a); -return( *b >= 0 ? x : -x); -} diff --git a/gcc/f/runtime/libF77/d_sin.c b/gcc/f/runtime/libF77/d_sin.c deleted file mode 100644 index fdd699eede5..00000000000 --- a/gcc/f/runtime/libF77/d_sin.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sin(); -double d_sin(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_sin(doublereal *x) -#endif -{ -return( sin(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_sinh.c b/gcc/f/runtime/libF77/d_sinh.c deleted file mode 100644 index 77f36904f8e..00000000000 --- a/gcc/f/runtime/libF77/d_sinh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sinh(); -double d_sinh(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_sinh(doublereal *x) -#endif -{ -return( sinh(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_sqrt.c b/gcc/f/runtime/libF77/d_sqrt.c deleted file mode 100644 index b5cf83b946f..00000000000 --- a/gcc/f/runtime/libF77/d_sqrt.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sqrt(); -double d_sqrt(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_sqrt(doublereal *x) -#endif -{ -return( sqrt(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_tan.c b/gcc/f/runtime/libF77/d_tan.c deleted file mode 100644 index af94a053223..00000000000 --- a/gcc/f/runtime/libF77/d_tan.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double tan(); -double d_tan(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_tan(doublereal *x) -#endif -{ -return( tan(*x) ); -} diff --git a/gcc/f/runtime/libF77/d_tanh.c b/gcc/f/runtime/libF77/d_tanh.c deleted file mode 100644 index 92a02d4fd6b..00000000000 --- a/gcc/f/runtime/libF77/d_tanh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double tanh(); -double d_tanh(x) doublereal *x; -#else -#undef abs -#include <math.h> -double d_tanh(doublereal *x) -#endif -{ -return( tanh(*x) ); -} diff --git a/gcc/f/runtime/libF77/derf_.c b/gcc/f/runtime/libF77/derf_.c deleted file mode 100644 index fba6b6b11f3..00000000000 --- a/gcc/f/runtime/libF77/derf_.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double erf(); -double G77_derf_0 (x) doublereal *x; -#else -extern double erf(double); -double G77_derf_0 (doublereal *x) -#endif -{ -return( erf(*x) ); -} diff --git a/gcc/f/runtime/libF77/derfc_.c b/gcc/f/runtime/libF77/derfc_.c deleted file mode 100644 index ae1ac740302..00000000000 --- a/gcc/f/runtime/libF77/derfc_.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern double erfc(); - -double G77_derfc_0 (x) doublereal *x; -#else -extern double erfc(double); - -double G77_derfc_0 (doublereal *x) -#endif -{ -return( erfc(*x) ); -} diff --git a/gcc/f/runtime/libF77/dtime_.c b/gcc/f/runtime/libF77/dtime_.c deleted file mode 100644 index 2e775c6b84e..00000000000 --- a/gcc/f/runtime/libF77/dtime_.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "time.h" -#ifndef USE_CLOCK -#include "sys/types.h" -#include "sys/times.h" -#endif - -#undef Hz -#ifdef CLK_TCK -#define Hz CLK_TCK -#else -#ifdef HZ -#define Hz HZ -#else -#define Hz 60 -#endif -#endif - - float -#ifdef KR_headers -dtime_(tarray) float *tarray; -#else -dtime_(float *tarray) -#endif -{ -#ifdef USE_CLOCK -#ifndef CLOCKS_PER_SECOND -#define CLOCKS_PER_SECOND Hz -#endif - static double t0; - double t = clock(); - tarray[1] = 0; - tarray[0] = (t - t0) / CLOCKS_PER_SECOND; - t0 = t; - return tarray[0]; -#else - struct tms t; - static struct tms t0; - - times(&t); - tarray[0] = (t.tms_utime - t0.tms_utime) / Hz; - tarray[1] = (t.tms_stime - t0.tms_stime) / Hz; - t0 = t; - return tarray[0] + tarray[1]; -#endif - } diff --git a/gcc/f/runtime/libF77/ef1asc_.c b/gcc/f/runtime/libF77/ef1asc_.c deleted file mode 100644 index a922a1d9ba9..00000000000 --- a/gcc/f/runtime/libF77/ef1asc_.c +++ /dev/null @@ -1,21 +0,0 @@ -/* EFL support routine to copy string b to string a */ - -#include "f2c.h" - - -#define M ( (long) (sizeof(long) - 1) ) -#define EVEN(x) ( ( (x)+ M) & (~M) ) - -#ifdef KR_headers -extern VOID s_copy(); -G77_ef1asc_0 (a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb; -#else -extern void s_copy(char*,char*,ftnlen,ftnlen); -int G77_ef1asc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) -#endif -{ -s_copy( (char *)a, (char *)b, EVEN(*la), *lb ); -#ifdef __cplusplus -return 0; -#endif -} diff --git a/gcc/f/runtime/libF77/ef1cmc_.c b/gcc/f/runtime/libF77/ef1cmc_.c deleted file mode 100644 index f471172935f..00000000000 --- a/gcc/f/runtime/libF77/ef1cmc_.c +++ /dev/null @@ -1,14 +0,0 @@ -/* EFL support routine to compare two character strings */ - -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -integer G77_ef1cmc_0 (a, la, b, lb) ftnint *a, *b; ftnlen *la, *lb; -#else -extern integer s_cmp(char*,char*,ftnlen,ftnlen); -integer G77_ef1cmc_0 (ftnint *a, ftnlen *la, ftnint *b, ftnlen *lb) -#endif -{ -return( s_cmp( (char *)a, (char *)b, *la, *lb) ); -} diff --git a/gcc/f/runtime/libF77/erf_.c b/gcc/f/runtime/libF77/erf_.c deleted file mode 100644 index 1ba4350ad05..00000000000 --- a/gcc/f/runtime/libF77/erf_.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double erf(); -double G77_erf_0 (x) real *x; -#else -extern double erf(double); -double G77_erf_0 (real *x) -#endif -{ -return( erf(*x) ); -} diff --git a/gcc/f/runtime/libF77/erfc_.c b/gcc/f/runtime/libF77/erfc_.c deleted file mode 100644 index f44b1d49d84..00000000000 --- a/gcc/f/runtime/libF77/erfc_.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double erfc(); -double G77_erfc_0 (x) real *x; -#else -extern double erfc(double); -double G77_erfc_0 (real *x) -#endif -{ -return( erfc(*x) ); -} diff --git a/gcc/f/runtime/libF77/etime_.c b/gcc/f/runtime/libF77/etime_.c deleted file mode 100644 index 0fb658af43c..00000000000 --- a/gcc/f/runtime/libF77/etime_.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "time.h" -#ifndef USE_CLOCK -#include "sys/types.h" -#include "sys/times.h" -#endif - -#undef Hz -#ifdef CLK_TCK -#define Hz CLK_TCK -#else -#ifdef HZ -#define Hz HZ -#else -#define Hz 60 -#endif -#endif - - float -#ifdef KR_headers -etime_(tarray) float *tarray; -#else -etime_(float *tarray) -#endif -{ -#ifdef USE_CLOCK -#ifndef CLOCKS_PER_SECOND -#define CLOCKS_PER_SECOND Hz -#endif - double t = clock(); - tarray[1] = 0; - return tarray[0] = t / CLOCKS_PER_SECOND; -#else - struct tms t; - - times(&t); - return (tarray[0] = t.tms_utime/Hz) + (tarray[1] = t.tms_stime/Hz); -#endif - } diff --git a/gcc/f/runtime/libF77/exit_.c b/gcc/f/runtime/libF77/exit_.c deleted file mode 100644 index 4c0582add12..00000000000 --- a/gcc/f/runtime/libF77/exit_.c +++ /dev/null @@ -1,37 +0,0 @@ -/* This gives the effect of - - subroutine exit(rc) - integer*4 rc - stop - end - - * with the added side effect of supplying rc as the program's exit code. - */ - -#include "f2c.h" -#undef abs -#undef min -#undef max -#ifndef KR_headers -#include <stdlib.h> -#ifdef __cplusplus -extern "C" { -#endif -extern void f_exit(void); -#endif - - void -#ifdef KR_headers -G77_exit_0 (rc) integer *rc; -#else -G77_exit_0 (integer *rc) -#endif -{ -#ifdef NO_ONEXIT - f_exit(); -#endif - exit(*rc); - } -#ifdef __cplusplus -} -#endif diff --git a/gcc/f/runtime/libF77/f2ch.add b/gcc/f/runtime/libF77/f2ch.add deleted file mode 100644 index a2acc17a159..00000000000 --- a/gcc/f/runtime/libF77/f2ch.add +++ /dev/null @@ -1,162 +0,0 @@ -/* If you are using a C++ compiler, append the following to f2c.h - for compiling libF77 and libI77. */ - -#ifdef __cplusplus -extern "C" { -extern int abort_(void); -extern double c_abs(complex *); -extern void c_cos(complex *, complex *); -extern void c_div(complex *, complex *, complex *); -extern void c_exp(complex *, complex *); -extern void c_log(complex *, complex *); -extern void c_sin(complex *, complex *); -extern void c_sqrt(complex *, complex *); -extern double d_abs(double *); -extern double d_acos(double *); -extern double d_asin(double *); -extern double d_atan(double *); -extern double d_atn2(double *, double *); -extern void d_cnjg(doublecomplex *, doublecomplex *); -extern double d_cos(double *); -extern double d_cosh(double *); -extern double d_dim(double *, double *); -extern double d_exp(double *); -extern double d_imag(doublecomplex *); -extern double d_int(double *); -extern double d_lg10(double *); -extern double d_log(double *); -extern double d_mod(double *, double *); -extern double d_nint(double *); -extern double d_prod(float *, float *); -extern double d_sign(double *, double *); -extern double d_sin(double *); -extern double d_sinh(double *); -extern double d_sqrt(double *); -extern double d_tan(double *); -extern double d_tanh(double *); -extern double derf_(double *); -extern double derfc_(double *); -extern integer do_fio(ftnint *, char *, ftnlen); -extern integer do_lio(ftnint *, ftnint *, char *, ftnlen); -extern integer do_uio(ftnint *, char *, ftnlen); -extern integer e_rdfe(void); -extern integer e_rdue(void); -extern integer e_rsfe(void); -extern integer e_rsfi(void); -extern integer e_rsle(void); -extern integer e_rsli(void); -extern integer e_rsue(void); -extern integer e_wdfe(void); -extern integer e_wdue(void); -extern integer e_wsfe(void); -extern integer e_wsfi(void); -extern integer e_wsle(void); -extern integer e_wsli(void); -extern integer e_wsue(void); -extern int ef1asc_(ftnint *, ftnlen *, ftnint *, ftnlen *); -extern integer ef1cmc_(ftnint *, ftnlen *, ftnint *, ftnlen *); -extern double erf(double); -extern double erf_(float *); -extern double erfc(double); -extern double erfc_(float *); -extern integer f_back(alist *); -extern integer f_clos(cllist *); -extern integer f_end(alist *); -extern void f_exit(void); -extern integer f_inqu(inlist *); -extern integer f_open(olist *); -extern integer f_rew(alist *); -extern int flush_(void); -extern void getarg_(integer *, char *, ftnlen); -extern void getenv_(char *, char *, ftnlen, ftnlen); -extern short h_abs(short *); -extern short h_dim(short *, short *); -extern short h_dnnt(double *); -extern short h_indx(char *, char *, ftnlen, ftnlen); -extern short h_len(char *, ftnlen); -extern short h_mod(short *, short *); -extern short h_nint(float *); -extern short h_sign(short *, short *); -extern short hl_ge(char *, char *, ftnlen, ftnlen); -extern short hl_gt(char *, char *, ftnlen, ftnlen); -extern short hl_le(char *, char *, ftnlen, ftnlen); -extern short hl_lt(char *, char *, ftnlen, ftnlen); -extern integer i_abs(integer *); -extern integer i_dim(integer *, integer *); -extern integer i_dnnt(double *); -extern integer i_indx(char *, char *, ftnlen, ftnlen); -extern integer i_len(char *, ftnlen); -extern integer i_mod(integer *, integer *); -extern integer i_nint(float *); -extern integer i_sign(integer *, integer *); -extern integer iargc_(void); -extern ftnlen l_ge(char *, char *, ftnlen, ftnlen); -extern ftnlen l_gt(char *, char *, ftnlen, ftnlen); -extern ftnlen l_le(char *, char *, ftnlen, ftnlen); -extern ftnlen l_lt(char *, char *, ftnlen, ftnlen); -extern void pow_ci(complex *, complex *, integer *); -extern double pow_dd(double *, double *); -extern double pow_di(double *, integer *); -extern short pow_hh(short *, shortint *); -extern integer pow_ii(integer *, integer *); -extern double pow_ri(float *, integer *); -extern void pow_zi(doublecomplex *, doublecomplex *, integer *); -extern void pow_zz(doublecomplex *, doublecomplex *, doublecomplex *); -extern double r_abs(float *); -extern double r_acos(float *); -extern double r_asin(float *); -extern double r_atan(float *); -extern double r_atn2(float *, float *); -extern void r_cnjg(complex *, complex *); -extern double r_cos(float *); -extern double r_cosh(float *); -extern double r_dim(float *, float *); -extern double r_exp(float *); -extern double r_imag(complex *); -extern double r_int(float *); -extern double r_lg10(float *); -extern double r_log(float *); -extern double r_mod(float *, float *); -extern double r_nint(float *); -extern double r_sign(float *, float *); -extern double r_sin(float *); -extern double r_sinh(float *); -extern double r_sqrt(float *); -extern double r_tan(float *); -extern double r_tanh(float *); -extern void s_cat(char *, char **, integer *, integer *, ftnlen); -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -extern void s_copy(char *, char *, ftnlen, ftnlen); -extern int s_paus(char *, ftnlen); -extern integer s_rdfe(cilist *); -extern integer s_rdue(cilist *); -extern integer s_rnge(char *, integer, char *, integer); -extern integer s_rsfe(cilist *); -extern integer s_rsfi(icilist *); -extern integer s_rsle(cilist *); -extern integer s_rsli(icilist *); -extern integer s_rsne(cilist *); -extern integer s_rsni(icilist *); -extern integer s_rsue(cilist *); -extern int s_stop(char *, ftnlen); -extern integer s_wdfe(cilist *); -extern integer s_wdue(cilist *); -extern integer s_wsfe(cilist *); -extern integer s_wsfi(icilist *); -extern integer s_wsle(cilist *); -extern integer s_wsli(icilist *); -extern integer s_wsne(cilist *); -extern integer s_wsni(icilist *); -extern integer s_wsue(cilist *); -extern void sig_die(char *, int); -extern integer signal_(integer *, void (*)(int)); -extern integer system_(char *, ftnlen); -extern double z_abs(doublecomplex *); -extern void z_cos(doublecomplex *, doublecomplex *); -extern void z_div(doublecomplex *, doublecomplex *, doublecomplex *); -extern void z_exp(doublecomplex *, doublecomplex *); -extern void z_log(doublecomplex *, doublecomplex *); -extern void z_sin(doublecomplex *, doublecomplex *); -extern void z_sqrt(doublecomplex *, doublecomplex *); - } -#endif diff --git a/gcc/f/runtime/libF77/getarg_.c b/gcc/f/runtime/libF77/getarg_.c deleted file mode 100644 index eaded2e4c9b..00000000000 --- a/gcc/f/runtime/libF77/getarg_.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "f2c.h" - -/* - * subroutine getarg(k, c) - * returns the kth unix command argument in fortran character - * variable argument c -*/ - -#ifdef KR_headers -VOID G77_getarg_0 (n, s, ls) ftnint *n; register char *s; ftnlen ls; -#else -void G77_getarg_0 (ftnint *n, register char *s, ftnlen ls) -#endif -{ -extern int xargc; -extern char **xargv; -register char *t; -register int i; - -if(*n>=0 && *n<xargc) - t = xargv[*n]; -else - t = ""; -for(i = 0; i<ls && *t!='\0' ; ++i) - *s++ = *t++; -for( ; i<ls ; ++i) - *s++ = ' '; -} diff --git a/gcc/f/runtime/libF77/getenv_.c b/gcc/f/runtime/libF77/getenv_.c deleted file mode 100644 index b9916e6065e..00000000000 --- a/gcc/f/runtime/libF77/getenv_.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "f2c.h" - -/* - * getenv - f77 subroutine to return environment variables - * - * called by: - * call getenv (ENV_NAME, char_var) - * where: - * ENV_NAME is the name of an environment variable - * char_var is a character variable which will receive - * the current value of ENV_NAME, or all blanks - * if ENV_NAME is not defined - */ - -#ifdef KR_headers -VOID G77_getenv_0 (fname, value, flen, vlen) char *value, *fname; ftnlen vlen, flen; -#else -void G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen) -#endif -{ -extern char **environ; -register char *ep, *fp, *flast; -register char **env = environ; - -flast = fname + flen; -for(fp = fname ; fp < flast ; ++fp) - if(*fp == ' ') - { - flast = fp; - break; - } - -while (ep = *env++) - { - for(fp = fname; fp<flast ; ) - if(*fp++ != *ep++) - goto endloop; - - if(*ep++ == '=') { /* copy right hand side */ - while( *ep && --vlen>=0 ) - *value++ = *ep++; - - goto blank; - } -endloop: ; - } - -blank: - while( --vlen >= 0 ) - *value++ = ' '; -} diff --git a/gcc/f/runtime/libF77/h_abs.c b/gcc/f/runtime/libF77/h_abs.c deleted file mode 100644 index 73b82151ac1..00000000000 --- a/gcc/f/runtime/libF77/h_abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_abs(x) shortint *x; -#else -shortint h_abs(shortint *x) -#endif -{ -if(*x >= 0) - return(*x); -return(- *x); -} diff --git a/gcc/f/runtime/libF77/h_dim.c b/gcc/f/runtime/libF77/h_dim.c deleted file mode 100644 index ceff660e26c..00000000000 --- a/gcc/f/runtime/libF77/h_dim.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_dim(a,b) shortint *a, *b; -#else -shortint h_dim(shortint *a, shortint *b) -#endif -{ -return( *a > *b ? *a - *b : 0); -} diff --git a/gcc/f/runtime/libF77/h_dnnt.c b/gcc/f/runtime/libF77/h_dnnt.c deleted file mode 100644 index 9d0aa25f1d3..00000000000 --- a/gcc/f/runtime/libF77/h_dnnt.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -shortint h_dnnt(x) doublereal *x; -#else -#undef abs -#include <math.h> -shortint h_dnnt(doublereal *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/h_indx.c b/gcc/f/runtime/libF77/h_indx.c deleted file mode 100644 index a211cc7fa0f..00000000000 --- a/gcc/f/runtime/libF77/h_indx.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_indx(a, b, la, lb) char *a, *b; ftnlen la, lb; -#else -shortint h_indx(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -ftnlen i, n; -char *s, *t, *bend; - -n = la - lb + 1; -bend = b + lb; - -for(i = 0 ; i < n ; ++i) - { - s = a + i; - t = b; - while(t < bend) - if(*s++ != *t++) - goto no; - return((shortint)i+1); - no: ; - } -return(0); -} diff --git a/gcc/f/runtime/libF77/h_len.c b/gcc/f/runtime/libF77/h_len.c deleted file mode 100644 index 00a2151bfa1..00000000000 --- a/gcc/f/runtime/libF77/h_len.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_len(s, n) char *s; ftnlen n; -#else -shortint h_len(char *s, ftnlen n) -#endif -{ -return(n); -} diff --git a/gcc/f/runtime/libF77/h_mod.c b/gcc/f/runtime/libF77/h_mod.c deleted file mode 100644 index 43431c1c503..00000000000 --- a/gcc/f/runtime/libF77/h_mod.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_mod(a,b) short *a, *b; -#else -shortint h_mod(short *a, short *b) -#endif -{ -return( *a % *b); -} diff --git a/gcc/f/runtime/libF77/h_nint.c b/gcc/f/runtime/libF77/h_nint.c deleted file mode 100644 index 0af3735da42..00000000000 --- a/gcc/f/runtime/libF77/h_nint.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -shortint h_nint(x) real *x; -#else -#undef abs -#include <math.h> -shortint h_nint(real *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/h_sign.c b/gcc/f/runtime/libF77/h_sign.c deleted file mode 100644 index 7b06c157a74..00000000000 --- a/gcc/f/runtime/libF77/h_sign.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint h_sign(a,b) shortint *a, *b; -#else -shortint h_sign(shortint *a, shortint *b) -#endif -{ -shortint x; -x = (*a >= 0 ? *a : - *a); -return( *b >= 0 ? x : -x); -} diff --git a/gcc/f/runtime/libF77/hl_ge.c b/gcc/f/runtime/libF77/hl_ge.c deleted file mode 100644 index 4c29527065a..00000000000 --- a/gcc/f/runtime/libF77/hl_ge.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -shortlogical hl_ge(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -shortlogical hl_ge(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) >= 0); -} diff --git a/gcc/f/runtime/libF77/hl_gt.c b/gcc/f/runtime/libF77/hl_gt.c deleted file mode 100644 index c4f345a0859..00000000000 --- a/gcc/f/runtime/libF77/hl_gt.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -shortlogical hl_gt(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -shortlogical hl_gt(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) > 0); -} diff --git a/gcc/f/runtime/libF77/hl_le.c b/gcc/f/runtime/libF77/hl_le.c deleted file mode 100644 index a9cce596c71..00000000000 --- a/gcc/f/runtime/libF77/hl_le.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -shortlogical hl_le(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -shortlogical hl_le(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) <= 0); -} diff --git a/gcc/f/runtime/libF77/hl_lt.c b/gcc/f/runtime/libF77/hl_lt.c deleted file mode 100644 index 162d919c3b4..00000000000 --- a/gcc/f/runtime/libF77/hl_lt.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -shortlogical hl_lt(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -shortlogical hl_lt(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) < 0); -} diff --git a/gcc/f/runtime/libF77/i_abs.c b/gcc/f/runtime/libF77/i_abs.c deleted file mode 100644 index be21295aaa1..00000000000 --- a/gcc/f/runtime/libF77/i_abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_abs(x) integer *x; -#else -integer i_abs(integer *x) -#endif -{ -if(*x >= 0) - return(*x); -return(- *x); -} diff --git a/gcc/f/runtime/libF77/i_dim.c b/gcc/f/runtime/libF77/i_dim.c deleted file mode 100644 index 6e1b1707b55..00000000000 --- a/gcc/f/runtime/libF77/i_dim.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_dim(a,b) integer *a, *b; -#else -integer i_dim(integer *a, integer *b) -#endif -{ -return( *a > *b ? *a - *b : 0); -} diff --git a/gcc/f/runtime/libF77/i_dnnt.c b/gcc/f/runtime/libF77/i_dnnt.c deleted file mode 100644 index 8fcecb68200..00000000000 --- a/gcc/f/runtime/libF77/i_dnnt.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -integer i_dnnt(x) doublereal *x; -#else -#undef abs -#include <math.h> -integer i_dnnt(doublereal *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/i_indx.c b/gcc/f/runtime/libF77/i_indx.c deleted file mode 100644 index 96e7bc51ba8..00000000000 --- a/gcc/f/runtime/libF77/i_indx.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_indx(a, b, la, lb) char *a, *b; ftnlen la, lb; -#else -integer i_indx(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -ftnlen i, n; -char *s, *t, *bend; - -n = la - lb + 1; -bend = b + lb; - -for(i = 0 ; i < n ; ++i) - { - s = a + i; - t = b; - while(t < bend) - if(*s++ != *t++) - goto no; - return(i+1); - no: ; - } -return(0); -} diff --git a/gcc/f/runtime/libF77/i_len.c b/gcc/f/runtime/libF77/i_len.c deleted file mode 100644 index 4020fee4618..00000000000 --- a/gcc/f/runtime/libF77/i_len.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_len(s, n) char *s; ftnlen n; -#else -integer i_len(char *s, ftnlen n) -#endif -{ -return(n); -} diff --git a/gcc/f/runtime/libF77/i_mod.c b/gcc/f/runtime/libF77/i_mod.c deleted file mode 100644 index 6937c421357..00000000000 --- a/gcc/f/runtime/libF77/i_mod.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_mod(a,b) integer *a, *b; -#else -integer i_mod(integer *a, integer *b) -#endif -{ -return( *a % *b); -} diff --git a/gcc/f/runtime/libF77/i_nint.c b/gcc/f/runtime/libF77/i_nint.c deleted file mode 100644 index c0f6795171f..00000000000 --- a/gcc/f/runtime/libF77/i_nint.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -integer i_nint(x) real *x; -#else -#undef abs -#include <math.h> -integer i_nint(real *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/i_sign.c b/gcc/f/runtime/libF77/i_sign.c deleted file mode 100644 index 94009b86e6f..00000000000 --- a/gcc/f/runtime/libF77/i_sign.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer i_sign(a,b) integer *a, *b; -#else -integer i_sign(integer *a, integer *b) -#endif -{ -integer x; -x = (*a >= 0 ? *a : - *a); -return( *b >= 0 ? x : -x); -} diff --git a/gcc/f/runtime/libF77/iargc_.c b/gcc/f/runtime/libF77/iargc_.c deleted file mode 100644 index 7ce5e08d306..00000000000 --- a/gcc/f/runtime/libF77/iargc_.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -ftnint G77_iargc_0 () -#else -ftnint G77_iargc_0 (void) -#endif -{ -extern int xargc; -return ( xargc - 1 ); -} diff --git a/gcc/f/runtime/libF77/l_ge.c b/gcc/f/runtime/libF77/l_ge.c deleted file mode 100644 index 86b4a1f5a7f..00000000000 --- a/gcc/f/runtime/libF77/l_ge.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -logical l_ge(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -logical l_ge(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) >= 0); -} diff --git a/gcc/f/runtime/libF77/l_gt.c b/gcc/f/runtime/libF77/l_gt.c deleted file mode 100644 index c4b52f5bf7d..00000000000 --- a/gcc/f/runtime/libF77/l_gt.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -logical l_gt(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -logical l_gt(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) > 0); -} diff --git a/gcc/f/runtime/libF77/l_le.c b/gcc/f/runtime/libF77/l_le.c deleted file mode 100644 index f2740a23814..00000000000 --- a/gcc/f/runtime/libF77/l_le.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -logical l_le(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -logical l_le(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) <= 0); -} diff --git a/gcc/f/runtime/libF77/l_lt.c b/gcc/f/runtime/libF77/l_lt.c deleted file mode 100644 index c48dc946f9a..00000000000 --- a/gcc/f/runtime/libF77/l_lt.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern integer s_cmp(); -logical l_lt(a,b,la,lb) char *a, *b; ftnlen la, lb; -#else -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -logical l_lt(char *a, char *b, ftnlen la, ftnlen lb) -#endif -{ -return(s_cmp(a,b,la,lb) < 0); -} diff --git a/gcc/f/runtime/libF77/lbitbits.c b/gcc/f/runtime/libF77/lbitbits.c deleted file mode 100644 index 75e9f9c603f..00000000000 --- a/gcc/f/runtime/libF77/lbitbits.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "f2c.h" - -#ifndef LONGBITS -#define LONGBITS 32 -#endif - - integer -#ifdef KR_headers -lbit_bits(a, b, len) integer a, b, len; -#else -lbit_bits(integer a, integer b, integer len) -#endif -{ - /* Assume 2's complement arithmetic */ - - unsigned long x, y; - - x = (unsigned long) a; - y = (unsigned long)-1L; - x >>= b; - y <<= len; - return (integer)(x & ~y); - } - - integer -#ifdef KR_headers -lbit_cshift(a, b, len) integer a, b, len; -#else -lbit_cshift(integer a, integer b, integer len) -#endif -{ - unsigned long x, y, z; - - x = (unsigned long)a; - if (len <= 0) { - if (len == 0) - return 0; - goto full_len; - } - if (len >= LONGBITS) { - full_len: - if (b >= 0) { - b %= LONGBITS; - return (integer)(x << b | x >> LONGBITS -b ); - } - b = -b; - b %= LONGBITS; - return (integer)(x << LONGBITS - b | x >> b); - } - y = z = (unsigned long)-1; - y <<= len; - z &= ~y; - y &= x; - x &= z; - if (b >= 0) { - b %= len; - return (integer)(y | z & (x << b | x >> len - b)); - } - b = -b; - b %= len; - return (integer)(y | z & (x >> b | x << len - b)); - } diff --git a/gcc/f/runtime/libF77/lbitshft.c b/gcc/f/runtime/libF77/lbitshft.c deleted file mode 100644 index 81b0fdbeaba..00000000000 --- a/gcc/f/runtime/libF77/lbitshft.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "f2c.h" - - integer -#ifdef KR_headers -lbit_shift(a, b) integer a; integer b; -#else -lbit_shift(integer a, integer b) -#endif -{ - return b >= 0 ? a << b : (integer)((uinteger)a >> -b); - } diff --git a/gcc/f/runtime/libF77/main.c b/gcc/f/runtime/libF77/main.c deleted file mode 100644 index 469a64bdcb3..00000000000 --- a/gcc/f/runtime/libF77/main.c +++ /dev/null @@ -1,135 +0,0 @@ -/* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */ - -#include <stdio.h> -#include "signal1.h" - -#ifndef SIGIOT -#ifdef SIGABRT -#define SIGIOT SIGABRT -#endif -#endif - -#ifndef KR_headers -#undef VOID -#include <stdlib.h> -#endif - -#ifndef VOID -#define VOID void -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef NO__STDC -#define ONEXIT onexit -extern VOID f_exit(); -#else -#ifndef KR_headers -extern void f_exit(void); -#ifndef NO_ONEXIT -#define ONEXIT atexit -extern int atexit(void (*)(void)); -#endif -#else -#ifndef NO_ONEXIT -#define ONEXIT onexit -extern VOID f_exit(); -#endif -#endif -#endif - -#ifdef KR_headers -extern VOID f_init(), sig_die(); -extern int MAIN__(); -#define Int /* int */ -#else -extern void f_init(void), sig_die(char*, int); -extern int MAIN__(void); -#define Int int -#endif - -static VOID sigfdie(Int n) -{ -sig_die("Floating Exception", 1); -} - - -static VOID sigidie(Int n) -{ -sig_die("IOT Trap", 1); -} - -#ifdef SIGQUIT -static VOID sigqdie(Int n) -{ -sig_die("Quit signal", 1); -} -#endif - - -static VOID sigindie(Int n) -{ -sig_die("Interrupt", 0); -} - -static VOID sigtdie(Int n) -{ -sig_die("Killed", 0); -} - -#ifdef SIGTRAP -static VOID sigtrdie(Int n) -{ -sig_die("Trace trap", 1); -} -#endif - - -int xargc; -char **xargv; - -#ifdef __cplusplus - } -#endif - -#ifdef KR_headers -main(argc, argv) int argc; char **argv; -#else -main(int argc, char **argv) -#endif -{ -xargc = argc; -xargv = argv; -signal1(SIGFPE, sigfdie); /* ignore underflow, enable overflow */ -#ifdef SIGIOT -signal1(SIGIOT, sigidie); -#endif -#ifdef SIGTRAP -signal1(SIGTRAP, sigtrdie); -#endif -#ifdef SIGQUIT -if(signal1(SIGQUIT,sigqdie) == SIG_IGN) - signal1(SIGQUIT, SIG_IGN); -#endif -if(signal1(SIGINT, sigindie) == SIG_IGN) - signal1(SIGINT, SIG_IGN); -signal1(SIGTERM,sigtdie); - -#ifdef pdp11 - ldfps(01200); /* detect overflow as an exception */ -#endif - -f_init(); -#ifndef NO_ONEXIT -ONEXIT(f_exit); -#endif -MAIN__(); -#ifdef NO_ONEXIT -f_exit(); -#endif -exit(0); /* exit(0) rather than return(0) to bypass Cray bug */ -return 0; /* For compilers that complain of missing return values; */ - /* others will complain that this is unreachable code. */ -} diff --git a/gcc/f/runtime/libF77/makefile.netlib b/gcc/f/runtime/libF77/makefile.netlib deleted file mode 100644 index 230ca7e9f93..00000000000 --- a/gcc/f/runtime/libF77/makefile.netlib +++ /dev/null @@ -1,103 +0,0 @@ -.SUFFIXES: .c .o -CC = cc -SHELL = /bin/sh -CFLAGS = -O - -# If your system lacks onexit() and you are not using an -# ANSI C compiler, then you should add -DNO_ONEXIT to CFLAGS, -# e.g., by changing the above "CFLAGS =" line to -# CFLAGS = -O -DNO_ONEXIT - -# On at least some Sun systems, it is more appropriate to change the -# "CFLAGS =" line to -# CFLAGS = -O -Donexit=on_exit - -# compile, then strip unnecessary symbols -.c.o: - $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c - ld -r -x -o $*.xxx $*.o - mv $*.xxx $*.o -## Under Solaris (and other systems that do not understand ld -x), -## omit -x in the ld line above. -## If your system does not have the ld command, comment out -## or remove both the ld and mv lines above. - -MISC = F77_aloc.o Version.o main.o s_rnge.o abort_.o getarg_.o iargc_.o \ - getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o\ - derf_.o derfc_.o erf_.o erfc_.o sig_die.o exit_.o -POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o -CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o -DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o -REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\ - r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\ - r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\ - r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o -DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\ - d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\ - d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\ - d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\ - d_sqrt.o d_tan.o d_tanh.o -INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o -HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o -CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o -EFL = ef1asc_.o ef1cmc_.o -CHAR = F77_aloc.o s_cat.o s_cmp.o s_copy.o -F90BIT = lbitbits.o lbitshft.o -QINT = pow_qq.o qbitbits.o qbitshft.o -TIME = dtime_.o etime_.o - -all: signal1.h libF77.a - -# You may need to adjust signal1.h suitably for your system... -signal1.h: signal1.h0 - cp signal1.h0 signal1.h - -# If you get an error compiling dtime_.c or etime_.c, try adding -# -DUSE_CLOCK to the CFLAGS assignment above; if that does not work, -# omit $(TIME) from the dependency list for libF77.a below. - -# For INTEGER*8 support (which requires system-dependent adjustments to -# f2c.h), add $(QINT) to the libf2c.a dependency list below... - -libF77.a : $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ - $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT) $(TIME) - ar r libF77.a $? - -ranlib libF77.a - -### If your system lacks ranlib, you don't need it; see README. - -Version.o: Version.c - $(CC) -c Version.c - -# To compile with C++, first "make f2c.h" -f2c.h: f2ch.add - cat /usr/include/f2c.h f2ch.add >f2c.h - -install: libF77.a - mv libF77.a /usr/lib - ranlib /usr/lib/libF77.a - -clean: - rm -f libF77.a *.o - -check: - xsum F77_aloc.c Notice README Version.c abort_.c c_abs.c c_cos.c \ - c_div.c c_exp.c c_log.c c_sin.c c_sqrt.c cabs.c d_abs.c d_acos.c \ - d_asin.c d_atan.c d_atn2.c d_cnjg.c d_cos.c d_cosh.c d_dim.c \ - d_exp.c d_imag.c d_int.c d_lg10.c d_log.c d_mod.c d_nint.c \ - d_prod.c d_sign.c d_sin.c d_sinh.c d_sqrt.c d_tan.c d_tanh.c \ - derf_.c derfc_.c dtime_.c \ - ef1asc_.c ef1cmc_.c erf_.c erfc_.c etime_.c exit_.c f2ch.add \ - getarg_.c getenv_.c h_abs.c h_dim.c h_dnnt.c h_indx.c h_len.c \ - h_mod.c h_nint.c h_sign.c hl_ge.c hl_gt.c hl_le.c hl_lt.c \ - i_abs.c i_dim.c i_dnnt.c i_indx.c i_len.c i_mod.c i_nint.c \ - i_sign.c iargc_.c l_ge.c l_gt.c l_le.c l_lt.c lbitbits.c lbitshft.c \ - main.c makefile pow_ci.c pow_dd.c pow_di.c pow_hh.c pow_ii.c \ - pow_qq.c pow_ri.c pow_zi.c pow_zz.c qbitbits.c qbitshft.c \ - r_abs.c r_acos.c r_asin.c r_atan.c r_atn2.c \ - r_cnjg.c r_cos.c r_cosh.c r_dim.c r_exp.c r_imag.c r_int.c r_lg10.c \ - r_log.c r_mod.c r_nint.c r_sign.c r_sin.c r_sinh.c r_sqrt.c \ - r_tan.c r_tanh.c s_cat.c s_cmp.c s_copy.c \ - s_paus.c s_rnge.c s_stop.c sig_die.c signal1.h0 signal_.c system_.c \ - z_abs.c z_cos.c z_div.c z_exp.c z_log.c z_sin.c z_sqrt.c >zap - cmp zap libF77.xsum && rm zap || diff libF77.xsum zap diff --git a/gcc/f/runtime/libF77/pow_ci.c b/gcc/f/runtime/libF77/pow_ci.c deleted file mode 100644 index 37e2ce0f2eb..00000000000 --- a/gcc/f/runtime/libF77/pow_ci.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -VOID pow_ci(p, a, b) /* p = a**b */ - complex *p, *a; integer *b; -#else -extern void pow_zi(doublecomplex*, doublecomplex*, integer*); -void pow_ci(complex *p, complex *a, integer *b) /* p = a**b */ -#endif -{ -doublecomplex p1, a1; - -a1.r = a->r; -a1.i = a->i; - -pow_zi(&p1, &a1, b); - -p->r = p1.r; -p->i = p1.i; -} diff --git a/gcc/f/runtime/libF77/pow_dd.c b/gcc/f/runtime/libF77/pow_dd.c deleted file mode 100644 index d0dd0ff2744..00000000000 --- a/gcc/f/runtime/libF77/pow_dd.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double pow(); -double pow_dd(ap, bp) doublereal *ap, *bp; -#else -#undef abs -#include <math.h> -double pow_dd(doublereal *ap, doublereal *bp) -#endif -{ -return(pow(*ap, *bp) ); -} diff --git a/gcc/f/runtime/libF77/pow_di.c b/gcc/f/runtime/libF77/pow_di.c deleted file mode 100644 index affed625a91..00000000000 --- a/gcc/f/runtime/libF77/pow_di.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double pow_di(ap, bp) doublereal *ap; integer *bp; -#else -double pow_di(doublereal *ap, integer *bp) -#endif -{ -double pow, x; -integer n; -unsigned long u; - -pow = 1; -x = *ap; -n = *bp; - -if(n != 0) - { - if(n < 0) - { - n = -n; - x = 1/x; - } - for(u = n; ; ) - { - if(u & 01) - pow *= x; - if(u >>= 1) - x *= x; - else - break; - } - } -return(pow); -} diff --git a/gcc/f/runtime/libF77/pow_hh.c b/gcc/f/runtime/libF77/pow_hh.c deleted file mode 100644 index 24a019734da..00000000000 --- a/gcc/f/runtime/libF77/pow_hh.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -shortint pow_hh(ap, bp) shortint *ap, *bp; -#else -shortint pow_hh(shortint *ap, shortint *bp) -#endif -{ - shortint pow, x, n; - unsigned u; - - x = *ap; - n = *bp; - - if (n <= 0) { - if (n == 0 || x == 1) - return 1; - if (x != -1) - return x == 0 ? 1/x : 0; - n = -n; - } - u = n; - for(pow = 1; ; ) - { - if(u & 01) - pow *= x; - if(u >>= 1) - x *= x; - else - break; - } - return(pow); - } diff --git a/gcc/f/runtime/libF77/pow_ii.c b/gcc/f/runtime/libF77/pow_ii.c deleted file mode 100644 index 84d1c7e0b5e..00000000000 --- a/gcc/f/runtime/libF77/pow_ii.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -integer pow_ii(ap, bp) integer *ap, *bp; -#else -integer pow_ii(integer *ap, integer *bp) -#endif -{ - integer pow, x, n; - unsigned long u; - - x = *ap; - n = *bp; - - if (n <= 0) { - if (n == 0 || x == 1) - return 1; - if (x != -1) - return x == 0 ? 1/x : 0; - n = -n; - } - u = n; - for(pow = 1; ; ) - { - if(u & 01) - pow *= x; - if(u >>= 1) - x *= x; - else - break; - } - return(pow); - } diff --git a/gcc/f/runtime/libF77/pow_qq.c b/gcc/f/runtime/libF77/pow_qq.c deleted file mode 100644 index 3bc80e05f7f..00000000000 --- a/gcc/f/runtime/libF77/pow_qq.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -longint pow_qq(ap, bp) longint *ap, *bp; -#else -longint pow_qq(longint *ap, longint *bp) -#endif -{ - longint pow, x, n; - unsigned long long u; /* system-dependent */ - - x = *ap; - n = *bp; - - if (n <= 0) { - if (n == 0 || x == 1) - return 1; - if (x != -1) - return x == 0 ? 1/x : 0; - n = -n; - } - u = n; - for(pow = 1; ; ) - { - if(u & 01) - pow *= x; - if(u >>= 1) - x *= x; - else - break; - } - return(pow); - } diff --git a/gcc/f/runtime/libF77/pow_ri.c b/gcc/f/runtime/libF77/pow_ri.c deleted file mode 100644 index 6e5816bbf10..00000000000 --- a/gcc/f/runtime/libF77/pow_ri.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double pow_ri(ap, bp) real *ap; integer *bp; -#else -double pow_ri(real *ap, integer *bp) -#endif -{ -double pow, x; -integer n; -unsigned long u; - -pow = 1; -x = *ap; -n = *bp; - -if(n != 0) - { - if(n < 0) - { - n = -n; - x = 1/x; - } - for(u = n; ; ) - { - if(u & 01) - pow *= x; - if(u >>= 1) - x *= x; - else - break; - } - } -return(pow); -} diff --git a/gcc/f/runtime/libF77/pow_zi.c b/gcc/f/runtime/libF77/pow_zi.c deleted file mode 100644 index 898ea6be917..00000000000 --- a/gcc/f/runtime/libF77/pow_zi.c +++ /dev/null @@ -1,61 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -VOID pow_zi(resx, a, b) /* p = a**b */ - doublecomplex *resx, *a; integer *b; -#else -extern void z_div(doublecomplex*, doublecomplex*, doublecomplex*); -void pow_zi(doublecomplex *resx, doublecomplex *a, integer *b) /* p = a**b */ -#endif -{ -integer n; -unsigned long u; -double t; -doublecomplex x; -doublecomplex res; -static doublecomplex one = {1.0, 0.0}; - -n = *b; - -if(n == 0) - { - resx->r = 1; - resx->i = 0; - return; - } - -res.r = 1; -res.i = 0; - -if(n < 0) - { - n = -n; - z_div(&x, &one, a); - } -else - { - x.r = a->r; - x.i = a->i; - } - -for(u = n; ; ) - { - if(u & 01) - { - t = res.r * x.r - res.i * x.i; - res.i = res.r * x.i + res.i * x.r; - res.r = t; - } - if(u >>= 1) - { - t = x.r * x.r - x.i * x.i; - x.i = 2 * x.r * x.i; - x.r = t; - } - else - break; - } - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/pow_zz.c b/gcc/f/runtime/libF77/pow_zz.c deleted file mode 100644 index 20faf29cfb8..00000000000 --- a/gcc/f/runtime/libF77/pow_zz.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double log(), exp(), cos(), sin(), atan2(), f__cabs(); -VOID pow_zz(r,a,b) doublecomplex *r, *a, *b; -#else -#undef abs -#include <math.h> -extern double f__cabs(double,double); -void pow_zz(doublecomplex *r, doublecomplex *a, doublecomplex *b) -#endif -{ -double logr, logi, x, y; - -logr = log( f__cabs(a->r, a->i) ); -logi = atan2(a->i, a->r); - -x = exp( logr * b->r - logi * b->i ); -y = logr * b->i + logi * b->r; - -r->r = x * cos(y); -r->i = x * sin(y); -} diff --git a/gcc/f/runtime/libF77/qbitbits.c b/gcc/f/runtime/libF77/qbitbits.c deleted file mode 100644 index ad4ac963ce2..00000000000 --- a/gcc/f/runtime/libF77/qbitbits.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "f2c.h" - -#ifndef LONGBITS -#define LONGBITS 32 -#endif - -#ifndef LONG8BITS -#define LONG8BITS (2*LONGBITS) -#endif - - integer -#ifdef KR_headers -qbit_bits(a, b, len) longint a; integer b, len; -#else -qbit_bits(longint a, integer b, integer len) -#endif -{ - /* Assume 2's complement arithmetic */ - - ulongint x, y; - - x = (ulongint) a; - y = (ulongint)-1L; - x >>= b; - y <<= len; - return (longint)(x & y); - } - - longint -#ifdef KR_headers -qbit_cshift(a, b, len) longint a; integer b, len; -#else -qbit_cshift(longint a, integer b, integer len) -#endif -{ - ulongint x, y, z; - - x = (ulongint)a; - if (len <= 0) { - if (len == 0) - return 0; - goto full_len; - } - if (len >= LONG8BITS) { - full_len: - if (b >= 0) { - b %= LONG8BITS; - return (longint)(x << b | x >> LONG8BITS - b ); - } - b = -b; - b %= LONG8BITS; - return (longint)(x << LONG8BITS - b | x >> b); - } - y = z = (unsigned long)-1; - y <<= len; - z &= ~y; - y &= x; - x &= z; - if (b >= 0) { - b %= len; - return (longint)(y | z & (x << b | x >> len - b)); - } - b = -b; - b %= len; - return (longint)(y | z & (x >> b | x << len - b)); - } diff --git a/gcc/f/runtime/libF77/qbitshft.c b/gcc/f/runtime/libF77/qbitshft.c deleted file mode 100644 index 87fffb91ff8..00000000000 --- a/gcc/f/runtime/libF77/qbitshft.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "f2c.h" - - longint -#ifdef KR_headers -qbit_shift(a, b) longint a; integer b; -#else -qbit_shift(longint a, integer b) -#endif -{ - return b >= 0 ? a << b : (longint)((ulongint)a >> -b); - } diff --git a/gcc/f/runtime/libF77/r_abs.c b/gcc/f/runtime/libF77/r_abs.c deleted file mode 100644 index 7b222961d16..00000000000 --- a/gcc/f/runtime/libF77/r_abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double r_abs(x) real *x; -#else -double r_abs(real *x) -#endif -{ -if(*x >= 0) - return(*x); -return(- *x); -} diff --git a/gcc/f/runtime/libF77/r_acos.c b/gcc/f/runtime/libF77/r_acos.c deleted file mode 100644 index 330f88a3092..00000000000 --- a/gcc/f/runtime/libF77/r_acos.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double acos(); -double r_acos(x) real *x; -#else -#undef abs -#include <math.h> -double r_acos(real *x) -#endif -{ -return( acos(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_asin.c b/gcc/f/runtime/libF77/r_asin.c deleted file mode 100644 index 45ece4b749e..00000000000 --- a/gcc/f/runtime/libF77/r_asin.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double asin(); -double r_asin(x) real *x; -#else -#undef abs -#include <math.h> -double r_asin(real *x) -#endif -{ -return( asin(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_atan.c b/gcc/f/runtime/libF77/r_atan.c deleted file mode 100644 index 36479c915b0..00000000000 --- a/gcc/f/runtime/libF77/r_atan.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double atan(); -double r_atan(x) real *x; -#else -#undef abs -#include <math.h> -double r_atan(real *x) -#endif -{ -return( atan(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_atn2.c b/gcc/f/runtime/libF77/r_atn2.c deleted file mode 100644 index 9347e1f13a9..00000000000 --- a/gcc/f/runtime/libF77/r_atn2.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double atan2(); -double r_atn2(x,y) real *x, *y; -#else -#undef abs -#include <math.h> -double r_atn2(real *x, real *y) -#endif -{ -return( atan2(*x,*y) ); -} diff --git a/gcc/f/runtime/libF77/r_cnjg.c b/gcc/f/runtime/libF77/r_cnjg.c deleted file mode 100644 index b6175eedfd7..00000000000 --- a/gcc/f/runtime/libF77/r_cnjg.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -VOID r_cnjg(resx, z) complex *resx, *z; -#else -VOID r_cnjg(complex *resx, complex *z) -#endif -{ -complex res; - -res.r = z->r; -res.i = - z->i; - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/r_cos.c b/gcc/f/runtime/libF77/r_cos.c deleted file mode 100644 index 5bda158cee9..00000000000 --- a/gcc/f/runtime/libF77/r_cos.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double cos(); -double r_cos(x) real *x; -#else -#undef abs -#include <math.h> -double r_cos(real *x) -#endif -{ -return( cos(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_cosh.c b/gcc/f/runtime/libF77/r_cosh.c deleted file mode 100644 index 7ae72cc0cef..00000000000 --- a/gcc/f/runtime/libF77/r_cosh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double cosh(); -double r_cosh(x) real *x; -#else -#undef abs -#include <math.h> -double r_cosh(real *x) -#endif -{ -return( cosh(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_dim.c b/gcc/f/runtime/libF77/r_dim.c deleted file mode 100644 index baca95cd9e4..00000000000 --- a/gcc/f/runtime/libF77/r_dim.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double r_dim(a,b) real *a, *b; -#else -double r_dim(real *a, real *b) -#endif -{ -return( *a > *b ? *a - *b : 0); -} diff --git a/gcc/f/runtime/libF77/r_exp.c b/gcc/f/runtime/libF77/r_exp.c deleted file mode 100644 index d1dea75563f..00000000000 --- a/gcc/f/runtime/libF77/r_exp.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double exp(); -double r_exp(x) real *x; -#else -#undef abs -#include <math.h> -double r_exp(real *x) -#endif -{ -return( exp(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_imag.c b/gcc/f/runtime/libF77/r_imag.c deleted file mode 100644 index d51252bbb79..00000000000 --- a/gcc/f/runtime/libF77/r_imag.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double r_imag(z) complex *z; -#else -double r_imag(complex *z) -#endif -{ -return(z->i); -} diff --git a/gcc/f/runtime/libF77/r_int.c b/gcc/f/runtime/libF77/r_int.c deleted file mode 100644 index 8378e775726..00000000000 --- a/gcc/f/runtime/libF77/r_int.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -double r_int(x) real *x; -#else -#undef abs -#include <math.h> -double r_int(real *x) -#endif -{ -return( (*x>0) ? floor(*x) : -floor(- *x) ); -} diff --git a/gcc/f/runtime/libF77/r_lg10.c b/gcc/f/runtime/libF77/r_lg10.c deleted file mode 100644 index 51f84201711..00000000000 --- a/gcc/f/runtime/libF77/r_lg10.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "f2c.h" - -#define log10e 0.43429448190325182765 - -#ifdef KR_headers -double log(); -double r_lg10(x) real *x; -#else -#undef abs -#include <math.h> -double r_lg10(real *x) -#endif -{ -return( log10e * log(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_log.c b/gcc/f/runtime/libF77/r_log.c deleted file mode 100644 index 4873fb418e8..00000000000 --- a/gcc/f/runtime/libF77/r_log.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double log(); -double r_log(x) real *x; -#else -#undef abs -#include <math.h> -double r_log(real *x) -#endif -{ -return( log(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_mod.c b/gcc/f/runtime/libF77/r_mod.c deleted file mode 100644 index faea344a7b7..00000000000 --- a/gcc/f/runtime/libF77/r_mod.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -#ifdef IEEE_drem -double drem(); -#else -double floor(); -#endif -double r_mod(x,y) real *x, *y; -#else -#ifdef IEEE_drem -double drem(double, double); -#else -#undef abs -#include <math.h> -#endif -double r_mod(real *x, real *y) -#endif -{ -#ifdef IEEE_drem - double xa, ya, z; - if ((ya = *y) < 0.) - ya = -ya; - z = drem(xa = *x, ya); - if (xa > 0) { - if (z < 0) - z += ya; - } - else if (z > 0) - z -= ya; - return z; -#else - double quotient; - if( (quotient = (double)*x / *y) >= 0) - quotient = floor(quotient); - else - quotient = -floor(-quotient); - return(*x - (*y) * quotient ); -#endif -} diff --git a/gcc/f/runtime/libF77/r_nint.c b/gcc/f/runtime/libF77/r_nint.c deleted file mode 100644 index f5382af660a..00000000000 --- a/gcc/f/runtime/libF77/r_nint.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double floor(); -double r_nint(x) real *x; -#else -#undef abs -#include <math.h> -double r_nint(real *x) -#endif -{ -return( (*x)>=0 ? - floor(*x + .5) : -floor(.5 - *x) ); -} diff --git a/gcc/f/runtime/libF77/r_sign.c b/gcc/f/runtime/libF77/r_sign.c deleted file mode 100644 index df6d02af00a..00000000000 --- a/gcc/f/runtime/libF77/r_sign.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double r_sign(a,b) real *a, *b; -#else -double r_sign(real *a, real *b) -#endif -{ -double x; -x = (*a >= 0 ? *a : - *a); -return( *b >= 0 ? x : -x); -} diff --git a/gcc/f/runtime/libF77/r_sin.c b/gcc/f/runtime/libF77/r_sin.c deleted file mode 100644 index 095b9510de9..00000000000 --- a/gcc/f/runtime/libF77/r_sin.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sin(); -double r_sin(x) real *x; -#else -#undef abs -#include <math.h> -double r_sin(real *x) -#endif -{ -return( sin(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_sinh.c b/gcc/f/runtime/libF77/r_sinh.c deleted file mode 100644 index 3bf4bb138be..00000000000 --- a/gcc/f/runtime/libF77/r_sinh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sinh(); -double r_sinh(x) real *x; -#else -#undef abs -#include <math.h> -double r_sinh(real *x) -#endif -{ -return( sinh(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_sqrt.c b/gcc/f/runtime/libF77/r_sqrt.c deleted file mode 100644 index d0203d3d19b..00000000000 --- a/gcc/f/runtime/libF77/r_sqrt.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sqrt(); -double r_sqrt(x) real *x; -#else -#undef abs -#include <math.h> -double r_sqrt(real *x) -#endif -{ -return( sqrt(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_tan.c b/gcc/f/runtime/libF77/r_tan.c deleted file mode 100644 index fc0009e4774..00000000000 --- a/gcc/f/runtime/libF77/r_tan.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double tan(); -double r_tan(x) real *x; -#else -#undef abs -#include <math.h> -double r_tan(real *x) -#endif -{ -return( tan(*x) ); -} diff --git a/gcc/f/runtime/libF77/r_tanh.c b/gcc/f/runtime/libF77/r_tanh.c deleted file mode 100644 index 818c6a8451b..00000000000 --- a/gcc/f/runtime/libF77/r_tanh.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double tanh(); -double r_tanh(x) real *x; -#else -#undef abs -#include <math.h> -double r_tanh(real *x) -#endif -{ -return( tanh(*x) ); -} diff --git a/gcc/f/runtime/libF77/s_cat.c b/gcc/f/runtime/libF77/s_cat.c deleted file mode 100644 index f462fd24945..00000000000 --- a/gcc/f/runtime/libF77/s_cat.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Unless compiled with -DNO_OVERWRITE, this variant of s_cat allows the - * target of a concatenation to appear on its right-hand side (contrary - * to the Fortran 77 Standard, but in accordance with Fortran 90). - */ - -#include "f2c.h" -#ifndef NO_OVERWRITE -#include <stdio.h> -#undef abs -#ifdef KR_headers - extern char *F77_aloc(); - extern void free(); - extern void G77_exit_0 (); -#else -#undef min -#undef max -#include <stdlib.h> - extern char *F77_aloc(ftnlen, char*); -#endif -#include <string.h> -#endif /* NO_OVERWRITE */ - - VOID -#ifdef KR_headers -s_cat(lp, rpp, rnp, np, ll) char *lp, *rpp[]; ftnlen rnp[], *np, ll; -#else -s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll) -#endif -{ - ftnlen i, nc; - char *rp; - ftnlen n = *np; -#ifndef NO_OVERWRITE - ftnlen L, m; - char *lp0, *lp1; - - lp0 = 0; - lp1 = lp; - L = ll; - i = 0; - while(i < n) { - rp = rpp[i]; - m = rnp[i++]; - if (rp >= lp1 || rp + m <= lp) { - if ((L -= m) <= 0) { - n = i; - break; - } - lp1 += m; - continue; - } - lp0 = lp; - lp = lp1 = F77_aloc(L = ll, "s_cat"); - break; - } - lp1 = lp; -#endif /* NO_OVERWRITE */ - for(i = 0 ; i < n ; ++i) { - nc = ll; - if(rnp[i] < nc) - nc = rnp[i]; - ll -= nc; - rp = rpp[i]; - while(--nc >= 0) - *lp++ = *rp++; - } - while(--ll >= 0) - *lp++ = ' '; -#ifndef NO_OVERWRITE - if (lp0) { - memcpy(lp0, lp1, L); - free(lp1); - } -#endif - } diff --git a/gcc/f/runtime/libF77/s_cmp.c b/gcc/f/runtime/libF77/s_cmp.c deleted file mode 100644 index 1e052f28642..00000000000 --- a/gcc/f/runtime/libF77/s_cmp.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "f2c.h" - -/* compare two strings */ - -#ifdef KR_headers -integer s_cmp(a0, b0, la, lb) char *a0, *b0; ftnlen la, lb; -#else -integer s_cmp(char *a0, char *b0, ftnlen la, ftnlen lb) -#endif -{ -register unsigned char *a, *aend, *b, *bend; -a = (unsigned char *)a0; -b = (unsigned char *)b0; -aend = a + la; -bend = b + lb; - -if(la <= lb) - { - while(a < aend) - if(*a != *b) - return( *a - *b ); - else - { ++a; ++b; } - - while(b < bend) - if(*b != ' ') - return( ' ' - *b ); - else ++b; - } - -else - { - while(b < bend) - if(*a == *b) - { ++a; ++b; } - else - return( *a - *b ); - while(a < aend) - if(*a != ' ') - return(*a - ' '); - else ++a; - } -return(0); -} diff --git a/gcc/f/runtime/libF77/s_copy.c b/gcc/f/runtime/libF77/s_copy.c deleted file mode 100644 index d1673510c62..00000000000 --- a/gcc/f/runtime/libF77/s_copy.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the - * target of an assignment to appear on its right-hand side (contrary - * to the Fortran 77 Standard, but in accordance with Fortran 90), - * as in a(2:5) = a(4:7) . - */ - -#include "f2c.h" - -/* assign strings: a = b */ - -#ifdef KR_headers -VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb; -#else -void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) -#endif -{ - register char *aend, *bend; - - aend = a + la; - - if(la <= lb) -#ifndef NO_OVERWRITE - if (a <= b || a >= b + la) -#endif - while(a < aend) - *a++ = *b++; -#ifndef NO_OVERWRITE - else - for(b += la; a < aend; ) - *--aend = *--b; -#endif - - else { - bend = b + lb; -#ifndef NO_OVERWRITE - if (a <= b || a >= bend) -#endif - while(b < bend) - *a++ = *b++; -#ifndef NO_OVERWRITE - else { - a += lb; - while(b < bend) - *--a = *--bend; - a += lb; - } -#endif - while(a < aend) - *a++ = ' '; - } - } diff --git a/gcc/f/runtime/libF77/s_paus.c b/gcc/f/runtime/libF77/s_paus.c deleted file mode 100644 index 1317008cb73..00000000000 --- a/gcc/f/runtime/libF77/s_paus.c +++ /dev/null @@ -1,88 +0,0 @@ -#include <stdio.h> -#include "f2c.h" -#define PAUSESIG 15 - -#ifdef KR_headers -#define Void /* void */ -#define Int /* int */ -#else -#define Void void -#define Int int -#undef abs -#undef min -#undef max -#include <stdlib.h> -#include "signal1.h" -#ifdef __cplusplus -extern "C" { -#endif -extern int getpid(void), isatty(int), pause(void); -#endif - -extern VOID f_exit(Void); - - static VOID -waitpause(Int n) -{ n = n; /* shut up compiler warning */ - return; - } - - static VOID -#ifdef KR_headers -s_1paus(fin) FILE *fin; -#else -s_1paus(FILE *fin) -#endif -{ - fprintf(stderr, - "To resume execution, type go. Other input will terminate the job.\n"); - fflush(stderr); - if( getc(fin)!='g' || getc(fin)!='o' || getc(fin)!='\n' ) { - fprintf(stderr, "STOP\n"); -#ifdef NO_ONEXIT - f_exit(); -#endif - exit(0); - } - } - - int -#ifdef KR_headers -s_paus(s, n) char *s; ftnlen n; -#else -s_paus(char *s, ftnlen n) -#endif -{ - fprintf(stderr, "PAUSE "); - if(n > 0) - fprintf(stderr, " %.*s", (int)n, s); - fprintf(stderr, " statement executed\n"); - if( isatty(fileno(stdin)) ) - s_1paus(stdin); - else { -#if (defined (MSDOS) && !defined (GO32)) || defined(__CYGWIN32__) - FILE *fin; - fin = fopen("con", "r"); - if (!fin) { - fprintf(stderr, "s_paus: can't open con!\n"); - fflush(stderr); - exit(1); - } - s_1paus(fin); - fclose(fin); -#else - fprintf(stderr, - "To resume execution, execute a kill -%d %d command\n", - PAUSESIG, getpid() ); - signal1(PAUSESIG, waitpause); - fflush(stderr); - pause(); -#endif - } - fprintf(stderr, "Execution resumes after PAUSE.\n"); - fflush(stderr); - return 0; /* NOT REACHED */ -#ifdef __cplusplus - } -#endif -} diff --git a/gcc/f/runtime/libF77/s_rnge.c b/gcc/f/runtime/libF77/s_rnge.c deleted file mode 100644 index 189b5247ced..00000000000 --- a/gcc/f/runtime/libF77/s_rnge.c +++ /dev/null @@ -1,26 +0,0 @@ -#include <stdio.h> -#include "f2c.h" - -/* called when a subscript is out of range */ - -#ifdef KR_headers -extern VOID sig_die(); -integer s_rnge(varn, offset, procn, line) char *varn, *procn; ftnint offset, line; -#else -extern VOID sig_die(char*,int); -integer s_rnge(char *varn, ftnint offset, char *procn, ftnint line) -#endif -{ -register int i; - -fprintf(stderr, "Subscript out of range on file line %ld, procedure ", line); -while((i = *procn) && i != '_' && i != ' ') - putc(*procn++, stderr); -fprintf(stderr, ".\nAttempt to access the %ld-th element of variable ", offset+1); -while((i = *varn) && i != ' ') - putc(*varn++, stderr); -sig_die(".", 1); -#ifdef __cplusplus -return 0; -#endif -} diff --git a/gcc/f/runtime/libF77/s_stop.c b/gcc/f/runtime/libF77/s_stop.c deleted file mode 100644 index 2e3f1035b30..00000000000 --- a/gcc/f/runtime/libF77/s_stop.c +++ /dev/null @@ -1,37 +0,0 @@ -#include <stdio.h> -#include "f2c.h" - -#ifdef KR_headers -extern void f_exit(); -VOID s_stop(s, n) char *s; ftnlen n; -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#ifdef __cplusplus -extern "C" { -#endif -void f_exit(void); - -int s_stop(char *s, ftnlen n) -#endif -{ -int i; - -if(n > 0) - { - fprintf(stderr, "STOP "); - for(i = 0; i<n ; ++i) - putc(*s++, stderr); - fprintf(stderr, " statement executed\n"); - } -#ifdef NO_ONEXIT -f_exit(); -#endif -exit(0); -#ifdef __cplusplus -return 0; /* NOT REACHED */ -} -#endif -} diff --git a/gcc/f/runtime/libF77/sig_die.c b/gcc/f/runtime/libF77/sig_die.c deleted file mode 100644 index bebb1e7b8f7..00000000000 --- a/gcc/f/runtime/libF77/sig_die.c +++ /dev/null @@ -1,45 +0,0 @@ -#include <stdio.h> -#include <signal.h> - -#ifndef SIGIOT -#ifdef SIGABRT -#define SIGIOT SIGABRT -#endif -#endif - -#ifdef KR_headers -void sig_die(s, kill) register char *s; int kill; -#else -#include <stdlib.h> -#ifdef __cplusplus -extern "C" { -#endif - extern void f_exit(void); - -void sig_die(register char *s, int kill) -#endif -{ - /* print error message, then clear buffers */ - fprintf(stderr, "%s\n", s); - - if(kill) - { - fflush(stderr); - f_exit(); - fflush(stderr); - /* now get a core */ -#ifdef SIGIOT - signal(SIGIOT, SIG_DFL); -#endif - abort(); - } - else { -#ifdef NO_ONEXIT - f_exit(); -#endif - exit(1); - } - } -#ifdef __cplusplus -} -#endif diff --git a/gcc/f/runtime/libF77/signal1.h b/gcc/f/runtime/libF77/signal1.h deleted file mode 100644 index b559211e8e4..00000000000 --- a/gcc/f/runtime/libF77/signal1.h +++ /dev/null @@ -1,5 +0,0 @@ -/* The g77 implementation of libf2c directly includes signal1.h0, - instead of copying it to signal1.h, since that seems easier to - cope with at this point. */ - -#include "signal1.h0" diff --git a/gcc/f/runtime/libF77/signal1.h0 b/gcc/f/runtime/libF77/signal1.h0 deleted file mode 100644 index 8800a18d77b..00000000000 --- a/gcc/f/runtime/libF77/signal1.h0 +++ /dev/null @@ -1,25 +0,0 @@ -/* You may need to adjust the definition of signal1 to supply a */ -/* cast to the correct argument type. This detail is system- and */ -/* compiler-dependent. The #define below assumes signal.h declares */ -/* type SIG_PF for the signal function's second argument. */ - -#include <signal.h> - -#ifndef Sigret_t -#define Sigret_t void -#endif -#ifndef Sigarg_t -#ifdef KR_headers -#define Sigarg_t -#else -#define Sigarg_t int -#endif -#endif /*Sigarg_t*/ - -#ifdef USE_SIG_PF /* compile with -DUSE_SIG_PF under IRIX */ -#define sig_pf SIG_PF -#else -typedef Sigret_t (*sig_pf)(Sigarg_t); -#endif - -#define signal1(a,b) signal(a,(sig_pf)b) diff --git a/gcc/f/runtime/libF77/signal_.c b/gcc/f/runtime/libF77/signal_.c deleted file mode 100644 index 1ac81391aef..00000000000 --- a/gcc/f/runtime/libF77/signal_.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "f2c.h" -#include "signal1.h" - -#ifdef KR_headers -ftnint G77_signal_0 (sigp, proc) integer *sigp; sig_pf proc; -#else -ftnint G77_signal_0 (integer *sigp, sig_pf proc) -#endif -{ - int sig; - sig = (int)*sigp; - - return (ftnint)signal(sig, proc); - } diff --git a/gcc/f/runtime/libF77/system_.c b/gcc/f/runtime/libF77/system_.c deleted file mode 100644 index ed024a14ded..00000000000 --- a/gcc/f/runtime/libF77/system_.c +++ /dev/null @@ -1,36 +0,0 @@ -/* f77 interface to system routine */ - -#include "f2c.h" - -#ifdef KR_headers -extern char *F77_aloc(); - - integer -G77_system_0 (s, n) register char *s; ftnlen n; -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -extern char *F77_aloc(ftnlen, char*); - - integer -G77_system_0 (register char *s, ftnlen n) -#endif -{ - char buff0[256], *buff; - register char *bp, *blast; - integer rv; - - buff = bp = n < sizeof(buff0) - ? buff0 : F77_aloc(n+1, "system_"); - blast = bp + n; - - while(bp < blast && *s) - *bp++ = *s++; - *bp = 0; - rv = system(buff); - if (buff != buff0) - free(buff); - return rv; - } diff --git a/gcc/f/runtime/libF77/z_abs.c b/gcc/f/runtime/libF77/z_abs.c deleted file mode 100644 index 7e67ad2957f..00000000000 --- a/gcc/f/runtime/libF77/z_abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double f__cabs(); -double z_abs(z) doublecomplex *z; -#else -double f__cabs(double, double); -double z_abs(doublecomplex *z) -#endif -{ -return( f__cabs( z->r, z->i ) ); -} diff --git a/gcc/f/runtime/libF77/z_cos.c b/gcc/f/runtime/libF77/z_cos.c deleted file mode 100644 index a811bbecc65..00000000000 --- a/gcc/f/runtime/libF77/z_cos.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sin(), cos(), sinh(), cosh(); -VOID z_cos(resx, z) doublecomplex *resx, *z; -#else -#undef abs -#include <math.h> -void z_cos(doublecomplex *resx, doublecomplex *z) -#endif -{ -doublecomplex res; - -res.r = cos(z->r) * cosh(z->i); -res.i = - sin(z->r) * sinh(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/z_div.c b/gcc/f/runtime/libF77/z_div.c deleted file mode 100644 index 4a987ab255a..00000000000 --- a/gcc/f/runtime/libF77/z_div.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -extern VOID sig_die(); -VOID z_div(resx, a, b) doublecomplex *a, *b, *resx; -#else -extern void sig_die(char*, int); -void z_div(doublecomplex *resx, doublecomplex *a, doublecomplex *b) -#endif -{ -double ratio, den; -double abr, abi; -doublecomplex res; - -if( (abr = b->r) < 0.) - abr = - abr; -if( (abi = b->i) < 0.) - abi = - abi; -if( abr <= abi ) - { - if(abi == 0) - sig_die("complex division by zero", 1); - ratio = b->r / b->i ; - den = b->i * (1 + ratio*ratio); - res.r = (a->r*ratio + a->i) / den; - res.i = (a->i*ratio - a->r) / den; - } - -else - { - ratio = b->i / b->r ; - den = b->r * (1 + ratio*ratio); - res.r = (a->r + a->i*ratio) / den; - res.i = (a->i - a->r*ratio) / den; - } - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/z_exp.c b/gcc/f/runtime/libF77/z_exp.c deleted file mode 100644 index 85fb63e4209..00000000000 --- a/gcc/f/runtime/libF77/z_exp.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double exp(), cos(), sin(); -VOID z_exp(resx, z) doublecomplex *resx, *z; -#else -#undef abs -#include <math.h> -void z_exp(doublecomplex *resx, doublecomplex *z) -#endif -{ -double expx; -doublecomplex res; - -expx = exp(z->r); -res.r = expx * cos(z->i); -res.i = expx * sin(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/z_log.c b/gcc/f/runtime/libF77/z_log.c deleted file mode 100644 index 48afca63d6d..00000000000 --- a/gcc/f/runtime/libF77/z_log.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double log(), f__cabs(), atan2(); -VOID z_log(resx, z) doublecomplex *resx, *z; -#else -#undef abs -#include <math.h> -extern double f__cabs(double, double); -void z_log(doublecomplex *resx, doublecomplex *z) -#endif -{ -doublecomplex res; - -res.i = atan2(z->i, z->r); -res.r = log( f__cabs( z->r, z->i ) ); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/z_sin.c b/gcc/f/runtime/libF77/z_sin.c deleted file mode 100644 index 94456c9c30a..00000000000 --- a/gcc/f/runtime/libF77/z_sin.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sin(), cos(), sinh(), cosh(); -VOID z_sin(resx, z) doublecomplex *resx, *z; -#else -#undef abs -#include <math.h> -void z_sin(doublecomplex *resx, doublecomplex *z) -#endif -{ -doublecomplex res; - -res.r = sin(z->r) * cosh(z->i); -res.i = cos(z->r) * sinh(z->i); - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libF77/z_sqrt.c b/gcc/f/runtime/libF77/z_sqrt.c deleted file mode 100644 index f5db5651991..00000000000 --- a/gcc/f/runtime/libF77/z_sqrt.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "f2c.h" - -#ifdef KR_headers -double sqrt(), f__cabs(); -VOID z_sqrt(resx, z) doublecomplex *resx, *z; -#else -#undef abs -#include <math.h> -extern double f__cabs(double, double); -void z_sqrt(doublecomplex *resx, doublecomplex *z) -#endif -{ -double mag; -doublecomplex res; - -if( (mag = f__cabs(z->r, z->i)) == 0.) - res.r = res.i = 0.; -else if(z->r > 0) - { - res.r = sqrt(0.5 * (mag + z->r) ); - res.i = z->i / res.r / 2; - } -else - { - res.i = sqrt(0.5 * (mag - z->r) ); - if(z->i < 0) - res.i = - res.i; - res.r = z->i / res.i / 2; - } - -resx->r = res.r; -resx->i = res.i; -} diff --git a/gcc/f/runtime/libI77/Makefile.in b/gcc/f/runtime/libI77/Makefile.in deleted file mode 100644 index 34bc5fa3997..00000000000 --- a/gcc/f/runtime/libI77/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Makefile for GNU F77 compiler runtime. -# Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the -# file `Notice'). -# Portions of this file Copyright (C) 1995, 1996 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of GNU Fortran. -# -#GNU Fortran is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2, or (at your option) -#any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with GNU Fortran; see the file COPYING. If not, write to -#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -#02111-1307, USA. - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -#### Start of system configuration section. #### - -# The _FOR_TARGET things are appropriate for a cross-make, passed by the -# superior makefile -GCC_FOR_TARGET = @CC@ -CC = $(GCC_FOR_TARGET) -CFLAGS = @CFLAGS@ $(GCC_FLAGS) -CPPFLAGS = @CPPFLAGS@ -DEFS = @DEFS@ -CGFLAGS = -g0 -# f2c.h should already be installed in xgcc's include directory but add that -# to -I anyhow in case not using xgcc. -ALL_CFLAGS = -I. -I$(srcdir) -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS) -AR = @AR@ -AR_FLAGS = rc -RANLIB = @RANLIB@ -RANLIB_TEST = @RANLIB_TEST@ -CROSS = @CROSS@ - -.SUFFIXES: -.SUFFIXES: .c .o - -.c.o: - $(CC) -c -DSkip_f2c_Undefs -DAllow_TYQUAD $(ALL_CFLAGS) $(CGFLAGS) $< - -OBJ = VersionI.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \ - fmt.o fmtlib.o iio.o ilnw.o inquire.o lread.o lwrite.o open.o \ - rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o uio.o \ - util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o \ - ftell_.o - -F2C_H = ../../../include/f2c.h - -all: $(OBJ) - -VersionI.o: Version.c - $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c - -mostlyclean clean: - -rm -f $(OBJ) - -distclean maintainer-clean: mostlyclean - -rm -f stage? include Makefile - -backspace.o: fio.h -close.o: fio.h -dfe.o: fio.h -dfe.o: fmt.h -due.o: fio.h -endfile.o: fio.h rawio.h -err.o: fio.h rawio.h -fmt.o: fio.h -fmt.o: fmt.h -ftell_.o: fio.h -iio.o: fio.h -iio.o: fmt.h -ilnw.o: fio.h -ilnw.o: lio.h -inquire.o: fio.h -lread.o: fio.h -lread.o: fmt.h -lread.o: lio.h -lread.o: fp.h -lwrite.o: fio.h -lwrite.o: fmt.h -lwrite.o: lio.h -open.o: fio.h rawio.h -rdfmt.o: fio.h -rdfmt.o: fmt.h -rdfmt.o: fp.h -rewind.o: fio.h -rsfe.o: fio.h -rsfe.o: fmt.h -rsli.o: fio.h -rsli.o: lio.h -rsne.o: fio.h -rsne.o: lio.h -sfe.o: fio.h -sue.o: fio.h -uio.o: fio.h -util.o: fio.h -wref.o: fio.h -wref.o: fmt.h -wref.o: fp.h -wrtfmt.o: fio.h -wrtfmt.o: fmt.h -wsfe.o: fio.h -wsfe.o: fmt.h -wsle.o: fio.h -wsle.o: fmt.h -wsle.o: lio.h -wsne.o: fio.h -wsne.o: lio.h -xwsne.o: fio.h -xwsne.o: lio.h -xwsne.o: fmt.h - -# May be pessimistic: -$(OBJ): $(F2C_H) - -.PHONY: mostlyclean clean distclean maintainer-clean all diff --git a/gcc/f/runtime/libI77/Notice b/gcc/f/runtime/libI77/Notice deleted file mode 100644 index 261b719bc57..00000000000 --- a/gcc/f/runtime/libI77/Notice +++ /dev/null @@ -1,23 +0,0 @@ -/**************************************************************** -Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore. - -Permission to use, copy, modify, and distribute this software -and its documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appear in all -copies and that both that the copyright notice and this -permission notice and warranty disclaimer appear in supporting -documentation, and that the names of AT&T, Bell Laboratories, -Lucent or Bellcore or any of their entities not be used in -advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -AT&T, Lucent and Bellcore disclaim all warranties with regard to -this software, including all implied warranties of -merchantability and fitness. In no event shall AT&T, Lucent or -Bellcore be liable for any special, indirect or consequential -damages or any damages whatsoever resulting from loss of use, -data or profits, whether in an action of contract, negligence or -other tortious action, arising out of or in connection with the -use or performance of this software. -****************************************************************/ - diff --git a/gcc/f/runtime/libI77/README.netlib b/gcc/f/runtime/libI77/README.netlib deleted file mode 100644 index 30dd5b5223d..00000000000 --- a/gcc/f/runtime/libI77/README.netlib +++ /dev/null @@ -1,225 +0,0 @@ -If your compiler does not recognize ANSI C headers, -compile with KR_headers defined: either add -DKR_headers -to the definition of CFLAGS in the makefile, or insert - -#define KR_headers - -at the top of f2c.h and fmtlib.c . - - -If you have a really ancient K&R C compiler that does not understand -void, add -Dvoid=int to the definition of CFLAGS in the makefile. - -If you use a C++ compiler, first create a local f2c.h by appending -f2ch.add to the usual f2c.h, e.g., by issuing the command - make f2c.h -which assumes f2c.h is installed in /usr/include . - -If your system lacks /usr/include/fcntl.h , then you -should simply create an empty fcntl.h in this directory. -If your compiler then complains about creat and open not -having a prototype, compile with OPEN_DECL defined. -On many systems, open and creat are declared in fcntl.h . - -If your system has /usr/include/fcntl.h, you may need to add --D_POSIX_SOURCE to the makefile's definition of CFLAGS. - -If your system's sprintf does not work the way ANSI C -specifies -- specifically, if it does not return the -number of characters transmitted -- then insert the line - -#define USE_STRLEN - -at the end of fmt.h . This is necessary with -at least some versions of Sun and DEC software. -In particular, if you get a warning about an improper -pointer/integer combination in compiling wref.c, then -you need to compile with -DUSE_STRLEN . - -If your system's fopen does not like the ANSI binary -reading and writing modes "rb" and "wb", then you should -compile open.c with NON_ANSI_RW_MODES #defined. - -If you get error messages about references to cf->_ptr -and cf->_base when compiling wrtfmt.c and wsfe.c or to -stderr->_flag when compiling err.c, then insert the line - -#define NON_UNIX_STDIO - -at the beginning of fio.h, and recompile everything (or -at least those modules that contain NON_UNIX_STDIO). - -Unformatted sequential records consist of a length of record -contents, the record contents themselves, and the length of -record contents again (for backspace). Prior to 17 Oct. 1991, -the length was of type int; now it is of type long, but you -can change it back to int by inserting - -#define UIOLEN_int - -at the beginning of fio.h. This affects only sue.c and uio.c . - -On VAX, Cray, or Research Tenth-Edition Unix systems, you may -need to add -DVAX, -DCRAY, or -DV10 (respectively) to CFLAGS -to make fp.h work correctly. Alternatively, you may need to -edit fp.h to suit your machine. - -You may need to supply the following non-ANSI routines: - - fstat(int fileds, struct stat *buf) is similar -to stat(char *name, struct stat *buf), except that -the first argument, fileds, is the file descriptor -returned by open rather than the name of the file. -fstat is used in the system-dependent routine -canseek (in the libI77 source file err.c), which -is supposed to return 1 if it's possible to issue -seeks on the file in question, 0 if it's not; you may -need to suitably modify err.c . On non-UNIX systems, -you can avoid references to fstat and stat by compiling -with NON_UNIX_STDIO defined; in that case, you may need -to supply access(char *Name,0), which is supposed to -return 0 if file Name exists, nonzero otherwise. - - char * mktemp(char *buf) is supposed to replace the -6 trailing X's in buf with a unique number and then -return buf. The idea is to get a unique name for -a temporary file. - -On non-UNIX systems, you may need to change a few other, -e.g.: the form of name computed by mktemp() in endfile.c and -open.c; the use of the open(), close(), and creat() system -calls in endfile.c, err.c, open.c; and the modes in calls on -fopen() and fdopen() (and perhaps the use of fdopen() itself --- it's supposed to return a FILE* corresponding to a given -an integer file descriptor) in err.c and open.c (component ufmt -of struct unit is 1 for formatted I/O -- text mode on some systems --- and 0 for unformatted I/O -- binary mode on some systems). -Compiling with -DNON_UNIX_STDIO omits all references to creat() -and almost all references to open() and close(), the exception -being in the function f__isdev() (in open.c). - -For MS-DOS, compile all of libI77 with -DMSDOS (which implies --DNON_UNIX_STDIO). You may need to make other compiler-dependent -adjustments; for example, for Turbo C++ you need to adjust the mktemp -invocations and to #undef ungetc in lread.c and rsne.c . - -If you want to be able to load against libI77 but not libF77, -then you will need to add sig_die.o (from libF77) to libI77. - -If you wish to use translated Fortran that has funny notions -of record length for direct unformatted I/O (i.e., that assumes -RECL= values in OPEN statements are not bytes but rather counts -of some other units -- e.g., 4-character words for VMS), then you -should insert an appropriate #define for url_Adjust at the -beginning of open.c . For VMS Fortran, for example, -#define url_Adjust(x) x *= 4 -would suffice. - -To check for transmission errors, issue the command - make check -This assumes you have the xsum program whose source, xsum.c, -is distributed as part of "all from f2c/src". If you do not -have xsum, you can obtain xsum.c by sending the following E-mail -message to netlib@netlib.bell-labs.com - send xsum.c from f2c/src - -The makefile assumes you have installed f2c.h in a standard -place (and does not cause recompilation when f2c.h is changed); -f2c.h comes with "all from f2c" (the source for f2c) and is -available separately ("f2c.h from f2c"). - -By default, Fortran I/O units 5, 6, and 0 are pre-connected to -stdin, stdout, and stderr, respectively. You can change this -behavior by changing f_init() in err.c to suit your needs. -Note that f2c assumes READ(*... means READ(5... and WRITE(*... -means WRITE(6... . Moreover, an OPEN(n,... statement that does -not specify a file name (and does not specify STATUS='SCRATCH') -assumes FILE='fort.n' . You can change this by editing open.c -and endfile.c suitably. - -Unless you adjust the "#define MXUNIT" line in fio.h, Fortran units -0, 1, ..., 99 are available, i.e., the highest allowed unit number -is MXUNIT - 1. - -Lines protected from compilation by #ifdef Allow_TYQUAD -are for a possible extension to 64-bit integers in which -integer = int = 32 bits and longint = long = 64 bits. - -Extensions (Feb. 1993) to NAMELIST processing: - 1. Reading a ? instead of &name (the start of a namelist) causes -the namelist being sought to be written to stdout (unit 6); -to omit this feature, compile rsne.c with -DNo_Namelist_Questions. - 2. Reading the wrong namelist name now leads to an error message -and an attempt to skip input until the right namelist name is found; -to omit this feature, compile rsne.c with -DNo_Bad_Namelist_Skip. - 3. Namelist writes now insert newlines before each variable; to omit -this feature, compile xwsne.c with -DNo_Extra_Namelist_Newlines. - 4. (Sept. 1995) When looking for the &name that starts namelist -input, lines whose first non-blank character is something other -than &, $, or ? are treated as comment lines and ignored, unless -rsne.c is compiled with -DNo_Namelist_Comments. - -Nonstandard extension (Feb. 1993) to open: for sequential files, -ACCESS='APPEND' (or access='anything else starting with "A" or "a"') -causes the file to be positioned at end-of-file, so a write will -append to the file. - -Some buggy Fortran programs use unformatted direct I/O to write -an incomplete record and later read more from that record than -they have written. For records other than the last, the unwritten -portion of the record reads as binary zeros. The last record is -a special case: attempting to read more from it than was written -gives end-of-file -- which may help one find a bug. Some other -Fortran I/O libraries treat the last record no differently than -others and thus give no help in finding the bug of reading more -than was written. If you wish to have this behavior, compile -uio.c with -DPad_UDread . - -If you want to be able to catch write failures (e.g., due to a -disk being full) with an ERR= specifier, compile dfe.c, due.c, -sfe.c, sue.c, and wsle.c with -DALWAYS_FLUSH. This will lead to -slower execution and more I/O, but should make ERR= work as -expected, provided fflush returns an error return when its -physical write fails. - -Carriage controls are meant to be interpreted by the UNIX col -program (or a similar program). Sometimes it's convenient to use -only ' ' as the carriage control character (normal single spacing). -If you compile lwrite.c and wsfe.c with -DOMIT_BLANK_CC, formatted -external output lines will have an initial ' ' quietly omitted, -making use of the col program unnecessary with output that only -has ' ' for carriage control. - -The Fortran 77 Standard leaves it up to the implementation whether -formatted writes of floating-point numbers of absolute value < 1 have -a zero before the decimal point. By default, libI77 omits such -superfluous zeros, but you can cause them to appear by compiling -lwrite.c, wref.c, and wrtfmt.c with -DWANT_LEAD_0 . - -If your system lacks a ranlib command, you don't need it. -Either comment out the makefile's ranlib invocation, or install -a harmless "ranlib" command somewhere in your PATH, such as the -one-line shell script - - exit 0 - -or (on some systems) - - exec /usr/bin/ar lts $1 >/dev/null - -Most of the routines in libI77 are support routines for Fortran -I/O. There are a few exceptions, summarized below -- I/O related -functions and subroutines that appear to your program as ordinary -external Fortran routines. - -1. CALL FLUSH flushes all buffers. - -2. FTELL(i) is an INTEGER function that returns the current - offset of Fortran unit i (or -1 if unit i is not open). - -3. CALL FSEEK(i, offset, whence, *errlab) attemps to move - Fortran unit i to the specified offset: absolute offset - if whence = 0; relative to the current offset if whence = 1; - relative to the end of the file if whence = 2. It branches - to label errlab if unit i is not open or if the call - otherwise fails. diff --git a/gcc/f/runtime/libI77/Version.c b/gcc/f/runtime/libI77/Version.c deleted file mode 100644 index cbb63c9250a..00000000000 --- a/gcc/f/runtime/libI77/Version.c +++ /dev/null @@ -1,276 +0,0 @@ -static char junk[] = "\n@(#) LIBI77 VERSION pjw,dmg-mods 19970816\n"; - -/* -*/ - -char __G77_LIBI77_VERSION__[] = "0.5.21"; - -/* -2.01 $ format added -2.02 Coding bug in open.c repaired -2.03 fixed bugs in lread.c (read * with negative f-format) and lio.c - and lio.h (e-format conforming to spec) -2.04 changed open.c and err.c (fopen and freopen respectively) to - update to new c-library (append mode) -2.05 added namelist capability -2.06 allow internal list and namelist I/O -*/ - -/* -close.c: - allow upper-case STATUS= values -endfile.c - create fort.nnn if unit nnn not open; - else if (file length == 0) use creat() rather than copy; - use local copy() rather than forking /bin/cp; - rewind, fseek to clear buffer (for no reading past EOF) -err.c - use neither setbuf nor setvbuf; make stderr buffered -fio.h - #define _bufend -inquire.c - upper case responses; - omit byfile test from SEQUENTIAL= - answer "YES" to DIRECT= for unopened file (open to debate) -lio.c - flush stderr, stdout at end of each stmt - space before character strings in list output only at line start -lio.h - adjust LEW, LED consistent with old libI77 -lread.c - use atof() - allow "nnn*," when reading complex constants -open.c - try opening for writing when open for read fails, with - special uwrt value (2) delaying creat() to first write; - set curunit so error messages don't drop core; - no file name ==> fort.nnn except for STATUS='SCRATCH' -rdfmt.c - use atof(); trust EOF == end-of-file (so don't read past - end-of-file after endfile stmt) -sfe.c - flush stderr, stdout at end of each stmt -wrtfmt.c: - use upper case - put wrt_E and wrt_F into wref.c, use sprintf() - rather than ecvt() and fcvt() [more accurate on VAX] -*/ - -/* 16 Oct. 1988: uwrt = 3 after write, rewind, so close won't zap the file. */ - -/* 10 July 1989: change _bufend to buf_end in fio.h, wsfe.c, wrtfmt.c */ - -/* 28 Nov. 1989: corrections for IEEE and Cray arithmetic */ -/* 29 Nov. 1989: change various int return types to long for f2c */ -/* 30 Nov. 1989: various types from f2c.h */ -/* 6 Dec. 1989: types corrected various places */ -/* 19 Dec. 1989: make iostat= work right for internal I/O */ -/* 8 Jan. 1990: add rsne, wsne -- routines for handling NAMELIST */ -/* 28 Jan. 1990: have NAMELIST read treat $ as &, general white - space as blank */ -/* 27 Mar. 1990: change an = to == in rd_L(rdfmt.c) so formatted reads - of logical values reject letters other than fFtT; - have nowwriting reset cf */ -/* 14 Aug. 1990: adjust lread.c to treat tabs as spaces in list input */ -/* 17 Aug. 1990: adjust open.c to recognize blank='Z...' as well as - blank='z...' when reopening an open file */ -/* 30 Aug. 1990: prevent embedded blanks in list output of complex values; - omit exponent field in list output of values of - magnitude between 10 and 1e8; prevent writing stdin - and reading stdout or stderr; don't close stdin, stdout, - or stderr when reopening units 5, 6, 0. */ -/* 18 Sep. 1990: add component udev to unit and consider old == new file - iff uinode and udev values agree; use stat rather than - access to check existence of file (when STATUS='OLD')*/ -/* 2 Oct. 1990: adjust rewind.c so two successive rewinds after a write - don't clobber the file. */ -/* 9 Oct. 1990: add #include "fcntl.h" to endfile.c, err.c, open.c; - adjust g_char in util.c for segmented memories. */ -/* 17 Oct. 1990: replace abort() and _cleanup() with calls on - sig_die(...,1) (defined in main.c). */ -/* 5 Nov. 1990: changes to open.c: complain if new= is specified and the - file already exists; allow file= to be omitted in open stmts - and allow status='replace' (Fortran 90 extensions). */ -/* 11 Dec. 1990: adjustments for POSIX. */ -/* 15 Jan. 1991: tweak i_ungetc in rsli.c to allow reading from - strings in read-only memory. */ -/* 25 Apr. 1991: adjust namelist stuff to work with f2c -i2 */ -/* 26 Apr. 1991: fix some bugs with NAMELIST read of multi-dim. arrays */ -/* 16 May 1991: increase LEFBL in lio.h to bypass NeXT bug */ -/* 17 Oct. 1991: change type of length field in sequential unformatted - records from int to long (for systems where sizeof(int) - can vary, depending on the compiler or compiler options). */ -/* 14 Nov. 1991: change uint to Uint in fmt.h, rdfmt.c, wrtfmt.c. */ -/* 25 Nov. 1991: change uint to Uint in lwrite.c; change sizeof(int) to - sizeof(uioint) in fseeks in sue.c (missed on 17 Oct.). */ -/* 1 Dec. 1991: uio.c: add test for read failure (seq. unformatted reads); - adjust an error return from EOF to off end of record */ -/* 12 Dec. 1991: rsli.c: fix bug with internal list input that caused - the last character of each record to be ignored. - iio.c: adjust error message in internal formatted - input from "end-of-file" to "off end of record" if - the format specifies more characters than the - record contains. */ -/* 17 Jan. 1992: lread.c, rsne.c: in list and namelist input, - treat "r* ," and "r*," alike (where r is a - positive integer constant), and fix a bug in - handling null values following items with repeat - counts (e.g., 2*1,,3); for namelist reading - of a numeric array, allow a new name-value subsequence - to terminate the current one (as though the current - one ended with the right number of null values). - lio.h, lwrite.c: omit insignificant zeros in - list and namelist output. To get the old - behavior, compile with -DOld_list_output . */ -/* 18 Jan. 1992: make list output consistent with F format by - printing .1 rather than 0.1 (introduced yesterday). */ -/* 3 Feb. 1992: rsne.c: fix namelist read bug that caused the - character following a comma to be ignored. */ -/* 19 May 1992: adjust iio.c, ilnw.c, rdfmt.c and rsli.c to make err= - work with internal list and formatted I/O. */ -/* 18 July 1992: adjust rsne.c to allow namelist input to stop at - an & (e.g. &end). */ -/* 23 July 1992: switch to ANSI prototypes unless KR_headers is #defined ; - recognize Z format (assuming 8-bit bytes). */ -/* 14 Aug. 1992: tweak wrt_E in wref.c to avoid -NaN */ -/* 23 Oct. 1992: Supply missing l_eof = 0 assignment to s_rsne() in rsne.c - (so end-of-file on other files won't confuse namelist - reads of external files). Prepend f__ to external - names that are only of internal interest to lib[FI]77. */ -/* 1 Feb. 1993: backspace.c: fix bug that bit when last char of 2nd - buffer == '\n'. - endfile.c: guard against tiny L_tmpnam; close and reopen - files in t_runc(). - lio.h: lengthen LINTW (buffer size in lwrite.c). - err.c, open.c: more prepending of f__ (to [rw]_mode). */ -/* 5 Feb. 1993: tweaks to NAMELIST: rsne.c: ? prints the namelist being - sought; namelists of the wrong name are skipped (after - an error message; xwsne.c: namelist writes have a - newline before each new variable. - open.c: ACCESS='APPEND' positions sequential files - at EOF (nonstandard extension -- that doesn't require - changing data structures). */ -/* 9 Feb. 1993: Change some #ifdef MSDOS lines to #ifdef NON_UNIX_STDIO. - err.c: under NON_UNIX_STDIO, avoid close(creat(name,0666)) - when the unit has another file descriptor for name. */ -/* 4 March 1993: err.c, open.c: take declaration of fdopen from rawio.h; - open.c: always give f__w_mode[] 4 elements for use - in t_runc (in endfile.c -- for change of 1 Feb. 1993). */ -/* 6 March 1993: uio.c: adjust off-end-of-record test for sequential - unformatted reads to respond to err= rather than end=. */ -/* 12 March 1993: various tweaks for C++ */ -/* 6 April 1993: adjust error returns for formatted inputs to flush - the current input line when err=label is specified. - To restore the old behavior (input left mid-line), - either adjust the #definition of errfl in fio.h or - omit the invocation of f__doend in err__fl (in err.c). */ -/* 23 June 1993: iio.c: fix bug in format reversions for internal writes. */ -/* 5 Aug. 1993: lread.c: fix bug in handling repetition counts for - logical data (during list or namelist input). - Change struct f__syl to struct syl (for buggy compilers). */ -/* 7 Aug. 1993: lread.c: fix bug in namelist reading of incomplete - logical arrays. */ -/* 9 Aug. 1993: lread.c: fix bug in namelist reading of an incomplete - array of numeric data followed by another namelist - item whose name starts with 'd', 'D', 'e', or 'E'. */ -/* 8 Sept. 1993: open.c: protect #include "sys/..." with - #ifndef NON_UNIX_STDIO; Version date not changed. */ -/* 10 Nov. 1993: backspace.c: add nonsense for #ifdef MSDOS */ -/* 8 Dec. 1993: iio.c: adjust internal formatted reads to treat - short records as though padded with blanks - (rather than causing an "off end of record" error). */ -/* 22 Feb. 1994: lread.c: check that realloc did not return NULL. */ -/* 6 June 1994: Under NON_UNIX_STDIO, use binary mode for direct - formatted files (avoiding any confusion regarding \n). */ -/* 5 July 1994: Fix bug (introduced 6 June 1994?) in reopening files - under NON_UNIX_STDIO. */ -/* 6 July 1994: wref.c: protect with #ifdef GOOD_SPRINTF_EXPONENT an - optimization that requires exponents to have 2 digits - when 2 digits suffice. - lwrite.c wsfe.c (list and formatted external output): - omit ' ' carriage-control when compiled with - -DOMIT_BLANK_CC . Off-by-one bug fixed in character - count for list output of character strings. - Omit '.' in list-directed printing of Nan, Infinity. */ -/* 12 July 1994: wrtfmt.c: under G11.4, write 0. as " .0000 " rather - than " .0000E+00". */ -/* 3 Aug. 1994: lwrite.c: do not insert a newline when appending an - oversize item to an empty line. */ -/* 12 Aug. 1994: rsli.c rsne.c: fix glitch (reset nml_read) that kept - ERR= (in list- or format-directed input) from working - after a NAMELIST READ. */ -/* 7 Sept. 1994: typesize.c: adjust to allow types LOGICAL*1, LOGICAL*2, - INTEGER*1, and (under -DAllow_TYQUAD) INTEGER*8 - in NAMELISTs. */ -/* 6 Oct. 1994: util.c: omit f__mvgbt, as it is never used. */ -/* 2 Nov. 1994: add #ifdef ALWAYS_FLUSH logic. */ -/* 26 Jan. 1995: wref.c: fix glitch in printing the exponent of 0 when - GOOD_SPRINTF_EXPONENT is not #defined. */ -/* 24 Feb. 1995: iio.c: z_getc: insert (unsigned char *) to allow - internal reading of characters with high-bit set - (on machines that sign-extend characters). */ -/* 14 March 1995:lread.c and rsfe.c: adjust s_rsle and s_rsfe to - check for end-of-file (to prevent infinite loops - with empty read statements). */ -/* 26 May 1995: iio.c: z_wnew: fix bug in handling T format items - in internal writes whose last item is written to - an earlier position than some previous item. */ -/* 29 Aug. 1995: backspace.c: adjust MSDOS logic. */ -/* 6 Sept. 1995: Adjust namelist input to treat a subscripted name - whose subscripts do not involve colons similarly - to the name without a subscript: accept several - values, stored in successive elements starting at - the indicated subscript. Adjust namelist output - to quote character strings (avoiding confusion with - arrays of character strings). Adjust f_init calls - for people who don't use libF77's main(); now open and - namelist read statements invoke f_init if needed. */ -/* 7 Sept. 1995: Fix some bugs with -DAllow_TYQUAD (for integer*8). - Add -DNo_Namelist_Comments lines to rsne.c. */ -/* 5 Oct. 1995: wrtfmt.c: fix bug with t editing (f__cursor was not - always zeroed in mv_cur). */ -/* 11 Oct. 1995: move defs of f__hiwater, f__svic, f__icptr from wrtfmt.c - to err.c */ -/* 15 Mar. 1996: lread.c, rsfe.c: honor END= in READ stmt with empty iolist */ - -/* 13 May 1996: add ftell_.c and fseek_.c */ -/* 9 June 1996: Adjust rsli.c and lread.c so internal list input with - too few items in the input string will honor end= . */ -/* 12 Sept. 1995:fmtlib.c: fix glitch in printing the most negative integer. */ -/* 25 Sept. 1995:fmt.h: for formatted writes of negative integer*1 values, - make ic signed on ANSI systems. If formatted writes of - integer*1 values trouble you when using a K&R C compiler, - switch to an ANSI compiler or use a compiler flag that - makes characters signed. */ -/* 9 Dec. 1996: d[fu]e.c, err.c: complain about non-positive rec= - in direct read and write statements. - ftell_.c: change param "unit" to "Unit" for -DKR_headers. */ -/* 26 Feb. 1997: ftell_.c: on systems that define SEEK_SET, etc., use - SEEK_SET, SEEK_CUR, SEEK_END for *whence = 0, 1, 2. */ -/* 7 Apr. 1997: fmt.c: adjust to complain at missing numbers in formats - (but still treat missing ".nnn" as ".0"). */ -/* 11 Apr. 1997: err.c: attempt to make stderr line buffered rather - than fully buffered. (Buffering is needed for format - items T and TR.) */ -/* 27 May 1997: ftell_.c: fix typo (that caused the third argument to be - treated as 2 on some systems). */ -/* 5 Aug. 1997: lread.c: adjust to accord with a change to the Fortran 8X - draft (in 1990 or 1991) that rescinded permission to elide - quote marks in namelist input of character data; compile - with -DF8X_NML_ELIDE_QUOTES to get the old behavior. - wrtfmt.o: wrt_G: tweak to print the right number of 0's - for zero under G format. */ -/* 16 Aug. 1997: iio.c: fix bug in internal writes to an array of character - strings that sometimes caused one more array element than - required by the format to be blank-filled. Example: - format(1x). */ -/* 17 June 1997: detect recursive I/O and call f__fatal explaining it. */ - -#include <stdio.h> - -void -g77__ivers__ () -{ - fprintf (stderr, "__G77_LIBI77_VERSION__: %s", __G77_LIBI77_VERSION__); - fputs (junk, stderr); -} diff --git a/gcc/f/runtime/libI77/backspace.c b/gcc/f/runtime/libI77/backspace.c deleted file mode 100644 index 8413d5f6821..00000000000 --- a/gcc/f/runtime/libI77/backspace.c +++ /dev/null @@ -1,101 +0,0 @@ -#include <sys/types.h> -#include "f2c.h" -#include "fio.h" -#ifdef KR_headers -integer f_back(a) alist *a; -#else -integer f_back(alist *a) -#endif -{ unit *b; - int i, n, ndec; -#if defined (MSDOS) && !defined (GO32) - int j, k; - long w, z; -#endif - long x, y; - char buf[32]; - if (f__init & 2) - f__fatal (131, "I/O recursion"); - if(a->aunit >= MXUNIT || a->aunit < 0) - err(a->aerr,101,"backspace"); - b= &f__units[a->aunit]; - if(b->useek==0) err(a->aerr,106,"backspace"); - if(b->ufd==NULL) { - fk_open(1, 1, a->aunit); - return(0); - } - if(b->uend==1) - { b->uend=0; - return(0); - } - if(b->uwrt) { - (void) t_runc(a); - if (f__nowreading(b)) - err(a->aerr,errno,"backspace"); - } - if(b->url>0) - { - x=ftell(b->ufd); - y = x % b->url; - if(y == 0) x--; - x /= b->url; - x *= b->url; - (void) fseek(b->ufd,x,SEEK_SET); - return(0); - } - - if(b->ufmt==0) - { (void) fseek(b->ufd,-(long)sizeof(int),SEEK_CUR); - (void) fread((char *)&n,sizeof(int),1,b->ufd); - (void) fseek(b->ufd,-(long)n-2*sizeof(int),SEEK_CUR); - return(0); - } -#if defined (MSDOS) && !defined (GO32) - w = -1; -#endif - for(ndec = 1;; ndec = 0) - { - y = x = ftell(b->ufd); - if(x < sizeof(buf)) - x = 0; - else - x -= sizeof(buf); - (void) fseek(b->ufd,x,SEEK_SET); - n=fread(buf,1,(size_t)(y-x), b->ufd); - for(i = n - ndec; --i >= 0; ) - { - if(buf[i]!='\n') continue; -#if defined (MSDOS) && !defined (GO32) - for(j = k = 0; j <= i; j++) - if (buf[j] == '\n') - k++; - fseek(b->ufd,x,SEEK_SET); - for(;;) - if (getc(b->ufd) == '\n') { - if ((z = ftell(b->ufd)) >= y && ndec) { - if (w == -1) - goto break2; - break; - } - if (--k <= 0) - return 0; - w = z; - } - fseek(b->ufd, w, SEEK_SET); -#else - fseek(b->ufd,(long)(i+1-n),SEEK_CUR); -#endif - return(0); - } -#if defined (MSDOS) && !defined (GO32) - break2: -#endif - if(x==0) - { - (void) fseek(b->ufd, 0L, SEEK_SET); - return(0); - } - else if(n<=0) err(a->aerr,(EOF),"backspace"); - (void) fseek(b->ufd, x, SEEK_SET); - } -} diff --git a/gcc/f/runtime/libI77/close.c b/gcc/f/runtime/libI77/close.c deleted file mode 100644 index 691f931a3c0..00000000000 --- a/gcc/f/runtime/libI77/close.c +++ /dev/null @@ -1,99 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#ifdef KR_headers -integer f_clos(a) cllist *a; -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#ifdef NON_UNIX_STDIO -#ifndef unlink -#define unlink remove -#endif -#else -#if defined (MSDOS) && !defined (GO32) -#include "io.h" -#else -#ifdef __cplusplus -extern "C" int unlink(const char*); -#else -extern int unlink(const char*); -#endif -#endif -#endif - -integer f_clos(cllist *a) -#endif -{ unit *b; - - if (f__init & 2) - f__fatal (131, "I/O recursion"); - if(a->cunit >= MXUNIT) return(0); - b= &f__units[a->cunit]; - if(b->ufd==NULL) - goto done; - if (!a->csta) - if (b->uscrtch == 1) - goto Delete; - else - goto Keep; - switch(*a->csta) { - default: - Keep: - case 'k': - case 'K': - if(b->uwrt == 1) - t_runc((alist *)a); - if(b->ufnm) { - fclose(b->ufd); - free(b->ufnm); - } - break; - case 'd': - case 'D': - Delete: - if(b->ufnm) { - fclose(b->ufd); - unlink(b->ufnm); /*SYSDEP*/ - free(b->ufnm); - } - } - b->ufd=NULL; - done: - b->uend=0; - b->ufnm=NULL; - return(0); - } - void -#ifdef KR_headers -f_exit() -#else -f_exit(void) -#endif -{ int i; - static cllist xx; - if (! (f__init & 1)) - return; /* Not initialized, so no open units. */ - if (!xx.cerr) { - xx.cerr=1; - xx.csta=NULL; - for(i=0;i<MXUNIT;i++) - { - xx.cunit=i; - (void) f_clos(&xx); - } - } -} - int -#ifdef KR_headers -G77_flush_0 () -#else -G77_flush_0 (void) -#endif -{ int i; - for(i=0;i<MXUNIT;i++) - if(f__units[i].ufd != NULL && f__units[i].uwrt) - fflush(f__units[i].ufd); -return 0; -} diff --git a/gcc/f/runtime/libI77/dfe.c b/gcc/f/runtime/libI77/dfe.c deleted file mode 100644 index e229e0e3356..00000000000 --- a/gcc/f/runtime/libI77/dfe.c +++ /dev/null @@ -1,156 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" - -y_rsk(Void) -{ - if(f__curunit->uend || f__curunit->url <= f__recpos - || f__curunit->url == 1) return 0; - do { - getc(f__cf); - } while(++f__recpos < f__curunit->url); - return 0; -} -y_getc(Void) -{ - int ch; - if(f__curunit->uend) return(-1); - if((ch=getc(f__cf))!=EOF) - { - f__recpos++; - if(f__curunit->url>=f__recpos || - f__curunit->url==1) - return(ch); - else return(' '); - } - if(feof(f__cf)) - { - f__curunit->uend=1; - errno=0; - return(-1); - } - err(f__elist->cierr,errno,"readingd"); -} -#ifdef KR_headers -y_putc(c) -#else -y_putc(int c) -#endif -{ - f__recpos++; - if(f__recpos <= f__curunit->url || f__curunit->url==1) - putc(c,f__cf); - else - err(f__elist->cierr,110,"dout"); - return(0); -} -y_rev(Void) -{ /*what about work done?*/ - if(f__curunit->url==1 || f__recpos==f__curunit->url) - return(0); - while(f__recpos<f__curunit->url) - (*f__putn)(' '); - f__recpos=0; - return(0); -} -y_err(Void) -{ - err(f__elist->cierr, 110, "dfe"); -} - -y_newrec(Void) -{ - if(f__curunit->url == 1 || f__recpos == f__curunit->url) { - f__hiwater = f__recpos = f__cursor = 0; - return(1); - } - if(f__hiwater > f__recpos) - f__recpos = f__hiwater; - y_rev(); - f__hiwater = f__cursor = 0; - return(1); -} - -#ifdef KR_headers -c_dfe(a) cilist *a; -#else -c_dfe(cilist *a) -#endif -{ - f__sequential=0; - f__formatted=f__external=1; - f__elist=a; - f__cursor=f__scale=f__recpos=0; - if(a->ciunit>MXUNIT || a->ciunit<0) - err(a->cierr,101,"startchk"); - f__curunit = &f__units[a->ciunit]; - if(f__curunit->ufd==NULL && fk_open(DIR,FMT,a->ciunit)) - err(a->cierr,104,"dfe"); - f__cf=f__curunit->ufd; - if(!f__curunit->ufmt) err(a->cierr,102,"dfe"); - if(!f__curunit->useek) err(a->cierr,104,"dfe"); - f__fmtbuf=a->cifmt; - if(a->cirec <= 0) - err(a->cierr,130,"dfe"); - (void) fseek(f__cf,(long)f__curunit->url * (a->cirec-1),SEEK_SET); - f__curunit->uend = 0; - return(0); -} -#ifdef KR_headers -integer s_rdfe(a) cilist *a; -#else -integer s_rdfe(cilist *a) -#endif -{ - int n; - if(f__init != 1) f_init(); - f__init = 3; - f__reading=1; - if(n=c_dfe(a))return(n); - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr,errno,"read start"); - f__getn = y_getc; - f__doed = rd_ed; - f__doned = rd_ned; - f__dorevert = f__donewrec = y_err; - f__doend = y_rsk; - if(pars_f(f__fmtbuf)<0) - err(a->cierr,100,"read start"); - fmt_bg(); - return(0); -} -#ifdef KR_headers -integer s_wdfe(a) cilist *a; -#else -integer s_wdfe(cilist *a) -#endif -{ - int n; - if(f__init != 1) f_init(); - f__init = 3; - f__reading=0; - if(n=c_dfe(a)) return(n); - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr,errno,"startwrt"); - f__putn = y_putc; - f__doed = w_ed; - f__doned= w_ned; - f__dorevert = y_err; - f__donewrec = y_newrec; - f__doend = y_rev; - if(pars_f(f__fmtbuf)<0) - err(a->cierr,100,"startwrt"); - fmt_bg(); - return(0); -} -integer e_rdfe(Void) -{ - f__init = 1; - (void) en_fio(); - return(0); -} -integer e_wdfe(Void) -{ - f__init = 1; - return en_fio(); -} diff --git a/gcc/f/runtime/libI77/dolio.c b/gcc/f/runtime/libI77/dolio.c deleted file mode 100644 index 4b5a2ca6588..00000000000 --- a/gcc/f/runtime/libI77/dolio.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "f2c.h" - -#ifdef __cplusplus -extern "C" { -#endif -#ifdef KR_headers -extern int (*f__lioproc)(); - -integer do_lio(type,number,ptr,len) ftnint *number,*type; char *ptr; ftnlen len; -#else -extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint); - -integer do_lio(ftnint *type, ftnint *number, char *ptr, ftnlen len) -#endif -{ - return((*f__lioproc)(number,ptr,len,*type)); -} -#ifdef __cplusplus - } -#endif diff --git a/gcc/f/runtime/libI77/due.c b/gcc/f/runtime/libI77/due.c deleted file mode 100644 index dec58657b50..00000000000 --- a/gcc/f/runtime/libI77/due.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "f2c.h" -#include "fio.h" - -#ifdef KR_headers -c_due(a) cilist *a; -#else -c_due(cilist *a) -#endif -{ - if(f__init != 1) f_init(); - f__init = 3; - if(a->ciunit>=MXUNIT || a->ciunit<0) - err(a->cierr,101,"startio"); - f__sequential=f__formatted=f__recpos=0; - f__external=1; - f__curunit = &f__units[a->ciunit]; - f__elist=a; - if(f__curunit->ufd==NULL && fk_open(DIR,UNF,a->ciunit) ) err(a->cierr,104,"due"); - f__cf=f__curunit->ufd; - if(f__curunit->ufmt) err(a->cierr,102,"cdue"); - if(!f__curunit->useek) err(a->cierr,104,"cdue"); - if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue"); - if(a->cirec <= 0) - err(a->cierr,130,"due"); - (void) fseek(f__cf,(long)(a->cirec-1)*f__curunit->url,SEEK_SET); - f__curunit->uend = 0; - return(0); -} -#ifdef KR_headers -integer s_rdue(a) cilist *a; -#else -integer s_rdue(cilist *a) -#endif -{ - int n; - f__reading=1; - if(n=c_due(a)) return(n); - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr,errno,"read start"); - return(0); -} -#ifdef KR_headers -integer s_wdue(a) cilist *a; -#else -integer s_wdue(cilist *a) -#endif -{ - int n; - f__reading=0; - if(n=c_due(a)) return(n); - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr,errno,"write start"); - return(0); -} -integer e_rdue(Void) -{ - f__init = 1; - if(f__curunit->url==1 || f__recpos==f__curunit->url) - return(0); - (void) fseek(f__cf,(long)(f__curunit->url-f__recpos),SEEK_CUR); - if(ftell(f__cf)%f__curunit->url) - err(f__elist->cierr,200,"syserr"); - return(0); -} -integer e_wdue(Void) -{ - f__init = 1; -#ifdef ALWAYS_FLUSH - if (fflush(f__cf)) - err(f__elist->cierr,errno,"write end"); -#endif - return(e_rdue()); -} diff --git a/gcc/f/runtime/libI77/endfile.c b/gcc/f/runtime/libI77/endfile.c deleted file mode 100644 index 6050d1e3b30..00000000000 --- a/gcc/f/runtime/libI77/endfile.c +++ /dev/null @@ -1,195 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include <sys/types.h> -#include "rawio.h" - -#ifdef KR_headers -extern char *strcpy(); -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#include <string.h> -#endif - -#ifdef NON_UNIX_STDIO -#ifndef unlink -#define unlink remove -#endif -#else -#if defined (MSDOS) && !defined (GO32) -#include "io.h" -#endif -#endif - -#ifdef NON_UNIX_STDIO -extern char *f__r_mode[], *f__w_mode[]; -#endif - -#ifdef KR_headers -integer f_end(a) alist *a; -#else -integer f_end(alist *a) -#endif -{ - unit *b; - if (f__init & 2) - f__fatal (131, "I/O recursion"); - if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile"); - b = &f__units[a->aunit]; - if(b->ufd==NULL) { - char nbuf[10]; - (void) sprintf(nbuf,"fort.%ld",a->aunit); -#ifdef NON_UNIX_STDIO - { FILE *tf; - if (tf = fopen(nbuf, f__w_mode[0])) - fclose(tf); - } -#else - close(creat(nbuf, 0666)); -#endif - return(0); - } - b->uend=1; - return(b->useek ? t_runc(a) : 0); -} - - static int -#ifdef NON_UNIX_STDIO -#ifdef KR_headers -copy(from, len, to) char *from, *to; register long len; -#else -copy(FILE *from, register long len, FILE *to) -#endif -{ - int k, len1; - char buf[BUFSIZ]; - - while(fread(buf, len1 = len > BUFSIZ ? BUFSIZ : (int)len, 1, from)) { - if (!fwrite(buf, len1, 1, to)) - return 1; - if ((len -= len1) <= 0) - break; - } - return 0; - } -#else -#ifdef KR_headers -copy(from, len, to) char *from, *to; register long len; -#else -copy(char *from, register long len, char *to) -#endif -{ - register size_t n; - int k, rc = 0, tmp; - char buf[BUFSIZ]; - - if ((k = open(from, O_RDONLY)) < 0) - return 1; - if ((tmp = creat(to,0666)) < 0) - return 1; - while((n = read(k, buf, (size_t) (len > BUFSIZ ? BUFSIZ : (int)len))) > 0) { - if (write(tmp, buf, n) != n) - { rc = 1; break; } - if ((len -= n) <= 0) - break; - } - close(k); - close(tmp); - return n < 0 ? 1 : rc; - } -#endif - -#ifndef L_tmpnam -#define L_tmpnam 16 -#endif - - int -#ifdef KR_headers -t_runc(a) alist *a; -#else -t_runc(alist *a) -#endif -{ - char nm[L_tmpnam+12]; /* extra space in case L_tmpnam is tiny */ - long loc, len; - unit *b; -#ifdef NON_UNIX_STDIO - FILE *bf, *tf; -#else - FILE *bf; -#endif - int rc = 0; - - b = &f__units[a->aunit]; - if(b->url) - return(0); /*don't truncate direct files*/ - loc=ftell(bf = b->ufd); - fseek(bf,0L,SEEK_END); - len=ftell(bf); - if (loc >= len || b->useek == 0 || b->ufnm == NULL) - return(0); -#ifdef NON_UNIX_STDIO - fclose(b->ufd); -#else - rewind(b->ufd); /* empty buffer */ -#endif - if (!loc) { -#ifdef NON_UNIX_STDIO - if (!(bf = fopen(b->ufnm, f__w_mode[b->ufmt]))) -#else - if (close(creat(b->ufnm,0666))) -#endif - rc = 1; - if (b->uwrt) - b->uwrt = 1; - goto done; - } -#ifdef _POSIX_SOURCE - tmpnam(nm); -#else - strcpy(nm,"tmp.FXXXXXX"); - mktemp(nm); -#endif -#ifdef NON_UNIX_STDIO - if (!(bf = fopen(b->ufnm, f__r_mode[0]))) { - bad: - rc = 1; - goto done; - } - if (!(tf = fopen(nm, f__w_mode[0]))) - goto bad; - if (copy(bf, loc, tf)) { - bad1: - rc = 1; - goto done1; - } - if (!(bf = freopen(b->ufnm, f__w_mode[0], bf))) - goto bad1; - if (!(tf = freopen(nm, f__r_mode[0], tf))) - goto bad1; - if (copy(tf, loc, bf)) - goto bad1; - if (f__w_mode[0] != f__w_mode[b->ufmt]) { - if (!(bf = freopen(b->ufnm, f__w_mode[b->ufmt|2], bf))) - goto bad1; - fseek(bf, loc, SEEK_SET); - } -done1: - fclose(tf); - unlink(nm); -done: - f__cf = b->ufd = bf; -#else - if (copy(b->ufnm, loc, nm) - || copy(nm, loc, b->ufnm)) - rc = 1; - unlink(nm); - fseek(b->ufd, loc, SEEK_SET); -done: -#endif - if (rc) - err(a->aerr,111,"endfile"); - return 0; - } diff --git a/gcc/f/runtime/libI77/err.c b/gcc/f/runtime/libI77/err.c deleted file mode 100644 index 1d0188737be..00000000000 --- a/gcc/f/runtime/libI77/err.c +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef NON_UNIX_STDIO -#include <sys/types.h> -#include <sys/stat.h> -#endif -#include "f2c.h" -#if defined (NON_UNIX_STDIO) || defined (MISSING_FILE_ELEMS) -#ifdef KR_headers -extern char *malloc(); -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#endif -#endif -#include "fio.h" -#include "fmt.h" /* for struct syl */ -#include "rawio.h" /* for fcntl.h, fdopen */ - -/*global definitions*/ -unit f__units[MXUNIT]; /*unit table*/ -int f__init; /*bit 0: set after initializations; - bit 1: set during I/O involving returns to - caller of library (or calls to user code)*/ -cilist *f__elist; /*active external io list*/ -icilist *f__svic; /*active internal io list*/ -flag f__reading; /*1 if reading, 0 if writing*/ -flag f__cplus,f__cblank; -char *f__fmtbuf; -flag f__external; /*1 if external io, 0 if internal */ -#ifdef KR_headers -int (*f__doed)(),(*f__doned)(); -int (*f__doend)(),(*f__donewrec)(),(*f__dorevert)(); -int (*f__getn)(),(*f__putn)(); /*for formatted io*/ -#else -int (*f__getn)(void),(*f__putn)(int); /*for formatted io*/ -int (*f__doed)(struct syl*, char*, ftnlen),(*f__doned)(struct syl*); -int (*f__dorevert)(void),(*f__donewrec)(void),(*f__doend)(void); -#endif -flag f__sequential; /*1 if sequential io, 0 if direct*/ -flag f__formatted; /*1 if formatted io, 0 if unformatted*/ -FILE *f__cf; /*current file*/ -unit *f__curunit; /*current unit*/ -int f__recpos; /*place in current record*/ -int f__cursor, f__hiwater, f__scale; -char *f__icptr; - -/*error messages*/ -char *F_err[] = -{ - "error in format", /* 100 */ - "illegal unit number", /* 101 */ - "formatted io not allowed", /* 102 */ - "unformatted io not allowed", /* 103 */ - "direct io not allowed", /* 104 */ - "sequential io not allowed", /* 105 */ - "can't backspace file", /* 106 */ - "null file name", /* 107 */ - "can't stat file", /* 108 */ - "unit not connected", /* 109 */ - "off end of record", /* 110 */ - "truncation failed in endfile", /* 111 */ - "incomprehensible list input", /* 112 */ - "out of free space", /* 113 */ - "unit not connected", /* 114 */ - "read unexpected character", /* 115 */ - "bad logical input field", /* 116 */ - "bad variable type", /* 117 */ - "bad namelist name", /* 118 */ - "variable not in namelist", /* 119 */ - "no end record", /* 120 */ - "variable count incorrect", /* 121 */ - "subscript for scalar variable", /* 122 */ - "invalid array section", /* 123 */ - "substring out of bounds", /* 124 */ - "subscript out of bounds", /* 125 */ - "can't read file", /* 126 */ - "can't write file", /* 127 */ - "'new' file exists", /* 128 */ - "can't append to file", /* 129 */ - "non-positive record number", /* 130 */ - "I/O started while already doing I/O" /* 131 */ -}; -#define MAXERR (sizeof(F_err)/sizeof(char *)+100) - -#ifdef KR_headers -f__canseek(f) FILE *f; /*SYSDEP*/ -#else -f__canseek(FILE *f) /*SYSDEP*/ -#endif -{ -#ifdef NON_UNIX_STDIO - return !isatty(fileno(f)); -#else - struct stat x; - - if (fstat(fileno(f),&x) < 0) - return(0); -#ifdef S_IFMT - switch(x.st_mode & S_IFMT) { - case S_IFDIR: - case S_IFREG: - if(x.st_nlink > 0) /* !pipe */ - return(1); - else - return(0); - case S_IFCHR: - if(isatty(fileno(f))) - return(0); - return(1); -#ifdef S_IFBLK - case S_IFBLK: - return(1); -#endif - } -#else -#ifdef S_ISDIR - /* POSIX version */ - if (S_ISREG(x.st_mode) || S_ISDIR(x.st_mode)) { - if(x.st_nlink > 0) /* !pipe */ - return(1); - else - return(0); - } - if (S_ISCHR(x.st_mode)) { - if(isatty(fileno(f))) - return(0); - return(1); - } - if (S_ISBLK(x.st_mode)) - return(1); -#else - Help! How does fstat work on this system? -#endif -#endif - return(0); /* who knows what it is? */ -#endif -} - - void -#ifdef KR_headers -f__fatal(n,s) char *s; -#else -f__fatal(int n, char *s) -#endif -{ - static int dead = 0; - - if(n<100 && n>=0) perror(s); /*SYSDEP*/ - else if(n >= (int)MAXERR || n < -1) - { fprintf(stderr,"%s: illegal error number %d\n",s,n); - } - else if(n == -1) fprintf(stderr,"%s: end of file\n",s); - else - fprintf(stderr,"%s: %s\n",s,F_err[n-100]); - if (dead) { - fprintf (stderr, "(libf2c f__fatal already called, aborting.)"); - abort(); - } - dead = 1; - if (f__init & 1) { - if (f__curunit) { - fprintf(stderr,"apparent state: unit %d ",f__curunit-f__units); - fprintf(stderr, f__curunit->ufnm ? "named %s\n" : "(unnamed)\n", - f__curunit->ufnm); - } - else - fprintf(stderr,"apparent state: internal I/O\n"); - if (f__fmtbuf) - fprintf(stderr,"last format: %s\n",f__fmtbuf); - fprintf(stderr,"lately %s %s %s %s",f__reading?"reading":"writing", - f__sequential?"sequential":"direct",f__formatted?"formatted":"unformatted", - f__external?"external":"internal"); - } - f__init &= ~2; /* No longer doing I/O (no more user code to be called). */ - sig_die(" IO", 1); -} -/*initialization routine*/ - VOID -f_init(Void) -{ unit *p; - - if (f__init & 2) - f__fatal (131, "I/O recursion"); - f__init = 1; - p= &f__units[0]; - p->ufd=stderr; - p->useek=f__canseek(stderr); -#ifdef _IOLBF - setvbuf(stderr, (char*)malloc(BUFSIZ+8), _IOLBF, BUFSIZ+8); -#else -#if defined (NON_UNIX_STDIO) || defined (MISSING_FILE_ELEMS) - setbuf(stderr, (char *)malloc(BUFSIZ+8)); -#else - stderr->_flag &= ~_IONBF; -#endif -#endif - p->ufmt=1; - p->uwrt=1; - p = &f__units[5]; - p->ufd=stdin; - p->useek=f__canseek(stdin); - p->ufmt=1; - p->uwrt=0; - p= &f__units[6]; - p->ufd=stdout; - p->useek=f__canseek(stdout); - p->ufmt=1; - p->uwrt=1; -} -#ifdef KR_headers -f__nowreading(x) unit *x; -#else -f__nowreading(unit *x) -#endif -{ - long loc; - int ufmt; - extern char *f__r_mode[]; - - if (!x->ufnm) - goto cantread; - ufmt = x->ufmt; - loc=ftell(x->ufd); - if(freopen(x->ufnm,f__r_mode[ufmt],x->ufd) == NULL) { - cantread: - errno = 126; - return(1); - } - x->uwrt=0; - (void) fseek(x->ufd,loc,SEEK_SET); - return(0); -} -#ifdef KR_headers -f__nowwriting(x) unit *x; -#else -f__nowwriting(unit *x) -#endif -{ - long loc; - int ufmt; - extern char *f__w_mode[]; -#ifndef NON_UNIX_STDIO - int k; -#endif - - if (!x->ufnm) - goto cantwrite; - ufmt = x->ufmt; -#ifdef NON_UNIX_STDIO - ufmt |= 2; -#endif - if (x->uwrt == 3) { /* just did write, rewind */ -#ifdef NON_UNIX_STDIO - if (!(f__cf = x->ufd = - freopen(x->ufnm,f__w_mode[ufmt],x->ufd))) -#else - if (close(creat(x->ufnm,0666))) -#endif - goto cantwrite; - } - else { - loc=ftell(x->ufd); -#ifdef NON_UNIX_STDIO - if (!(f__cf = x->ufd = - freopen(x->ufnm, f__w_mode[ufmt], x->ufd))) -#else - if (fclose(x->ufd) < 0 - || (k = x->uwrt == 2 ? creat(x->ufnm,0666) - : open(x->ufnm,O_WRONLY)) < 0 - || (f__cf = x->ufd = fdopen(k,f__w_mode[ufmt])) == NULL) -#endif - { - x->ufd = NULL; - cantwrite: - errno = 127; - return(1); - } - (void) fseek(x->ufd,loc,SEEK_SET); - } - x->uwrt = 1; - return(0); -} - - int -#ifdef KR_headers -err__fl(f, m, s) int f, m; char *s; -#else -err__fl(int f, int m, char *s) -#endif -{ - if (!f) - f__fatal(m, s); - if (f__doend) - (*f__doend)(); - f__init &= ~2; - return errno = m; - } diff --git a/gcc/f/runtime/libI77/f2ch.add b/gcc/f/runtime/libI77/f2ch.add deleted file mode 100644 index a2acc17a159..00000000000 --- a/gcc/f/runtime/libI77/f2ch.add +++ /dev/null @@ -1,162 +0,0 @@ -/* If you are using a C++ compiler, append the following to f2c.h - for compiling libF77 and libI77. */ - -#ifdef __cplusplus -extern "C" { -extern int abort_(void); -extern double c_abs(complex *); -extern void c_cos(complex *, complex *); -extern void c_div(complex *, complex *, complex *); -extern void c_exp(complex *, complex *); -extern void c_log(complex *, complex *); -extern void c_sin(complex *, complex *); -extern void c_sqrt(complex *, complex *); -extern double d_abs(double *); -extern double d_acos(double *); -extern double d_asin(double *); -extern double d_atan(double *); -extern double d_atn2(double *, double *); -extern void d_cnjg(doublecomplex *, doublecomplex *); -extern double d_cos(double *); -extern double d_cosh(double *); -extern double d_dim(double *, double *); -extern double d_exp(double *); -extern double d_imag(doublecomplex *); -extern double d_int(double *); -extern double d_lg10(double *); -extern double d_log(double *); -extern double d_mod(double *, double *); -extern double d_nint(double *); -extern double d_prod(float *, float *); -extern double d_sign(double *, double *); -extern double d_sin(double *); -extern double d_sinh(double *); -extern double d_sqrt(double *); -extern double d_tan(double *); -extern double d_tanh(double *); -extern double derf_(double *); -extern double derfc_(double *); -extern integer do_fio(ftnint *, char *, ftnlen); -extern integer do_lio(ftnint *, ftnint *, char *, ftnlen); -extern integer do_uio(ftnint *, char *, ftnlen); -extern integer e_rdfe(void); -extern integer e_rdue(void); -extern integer e_rsfe(void); -extern integer e_rsfi(void); -extern integer e_rsle(void); -extern integer e_rsli(void); -extern integer e_rsue(void); -extern integer e_wdfe(void); -extern integer e_wdue(void); -extern integer e_wsfe(void); -extern integer e_wsfi(void); -extern integer e_wsle(void); -extern integer e_wsli(void); -extern integer e_wsue(void); -extern int ef1asc_(ftnint *, ftnlen *, ftnint *, ftnlen *); -extern integer ef1cmc_(ftnint *, ftnlen *, ftnint *, ftnlen *); -extern double erf(double); -extern double erf_(float *); -extern double erfc(double); -extern double erfc_(float *); -extern integer f_back(alist *); -extern integer f_clos(cllist *); -extern integer f_end(alist *); -extern void f_exit(void); -extern integer f_inqu(inlist *); -extern integer f_open(olist *); -extern integer f_rew(alist *); -extern int flush_(void); -extern void getarg_(integer *, char *, ftnlen); -extern void getenv_(char *, char *, ftnlen, ftnlen); -extern short h_abs(short *); -extern short h_dim(short *, short *); -extern short h_dnnt(double *); -extern short h_indx(char *, char *, ftnlen, ftnlen); -extern short h_len(char *, ftnlen); -extern short h_mod(short *, short *); -extern short h_nint(float *); -extern short h_sign(short *, short *); -extern short hl_ge(char *, char *, ftnlen, ftnlen); -extern short hl_gt(char *, char *, ftnlen, ftnlen); -extern short hl_le(char *, char *, ftnlen, ftnlen); -extern short hl_lt(char *, char *, ftnlen, ftnlen); -extern integer i_abs(integer *); -extern integer i_dim(integer *, integer *); -extern integer i_dnnt(double *); -extern integer i_indx(char *, char *, ftnlen, ftnlen); -extern integer i_len(char *, ftnlen); -extern integer i_mod(integer *, integer *); -extern integer i_nint(float *); -extern integer i_sign(integer *, integer *); -extern integer iargc_(void); -extern ftnlen l_ge(char *, char *, ftnlen, ftnlen); -extern ftnlen l_gt(char *, char *, ftnlen, ftnlen); -extern ftnlen l_le(char *, char *, ftnlen, ftnlen); -extern ftnlen l_lt(char *, char *, ftnlen, ftnlen); -extern void pow_ci(complex *, complex *, integer *); -extern double pow_dd(double *, double *); -extern double pow_di(double *, integer *); -extern short pow_hh(short *, shortint *); -extern integer pow_ii(integer *, integer *); -extern double pow_ri(float *, integer *); -extern void pow_zi(doublecomplex *, doublecomplex *, integer *); -extern void pow_zz(doublecomplex *, doublecomplex *, doublecomplex *); -extern double r_abs(float *); -extern double r_acos(float *); -extern double r_asin(float *); -extern double r_atan(float *); -extern double r_atn2(float *, float *); -extern void r_cnjg(complex *, complex *); -extern double r_cos(float *); -extern double r_cosh(float *); -extern double r_dim(float *, float *); -extern double r_exp(float *); -extern double r_imag(complex *); -extern double r_int(float *); -extern double r_lg10(float *); -extern double r_log(float *); -extern double r_mod(float *, float *); -extern double r_nint(float *); -extern double r_sign(float *, float *); -extern double r_sin(float *); -extern double r_sinh(float *); -extern double r_sqrt(float *); -extern double r_tan(float *); -extern double r_tanh(float *); -extern void s_cat(char *, char **, integer *, integer *, ftnlen); -extern integer s_cmp(char *, char *, ftnlen, ftnlen); -extern void s_copy(char *, char *, ftnlen, ftnlen); -extern int s_paus(char *, ftnlen); -extern integer s_rdfe(cilist *); -extern integer s_rdue(cilist *); -extern integer s_rnge(char *, integer, char *, integer); -extern integer s_rsfe(cilist *); -extern integer s_rsfi(icilist *); -extern integer s_rsle(cilist *); -extern integer s_rsli(icilist *); -extern integer s_rsne(cilist *); -extern integer s_rsni(icilist *); -extern integer s_rsue(cilist *); -extern int s_stop(char *, ftnlen); -extern integer s_wdfe(cilist *); -extern integer s_wdue(cilist *); -extern integer s_wsfe(cilist *); -extern integer s_wsfi(icilist *); -extern integer s_wsle(cilist *); -extern integer s_wsli(icilist *); -extern integer s_wsne(cilist *); -extern integer s_wsni(icilist *); -extern integer s_wsue(cilist *); -extern void sig_die(char *, int); -extern integer signal_(integer *, void (*)(int)); -extern integer system_(char *, ftnlen); -extern double z_abs(doublecomplex *); -extern void z_cos(doublecomplex *, doublecomplex *); -extern void z_div(doublecomplex *, doublecomplex *, doublecomplex *); -extern void z_exp(doublecomplex *, doublecomplex *); -extern void z_log(doublecomplex *, doublecomplex *); -extern void z_sin(doublecomplex *, doublecomplex *); -extern void z_sqrt(doublecomplex *, doublecomplex *); - } -#endif diff --git a/gcc/f/runtime/libI77/fio.h b/gcc/f/runtime/libI77/fio.h deleted file mode 100644 index 769d360a626..00000000000 --- a/gcc/f/runtime/libI77/fio.h +++ /dev/null @@ -1,102 +0,0 @@ -#include <stdio.h> -#include <errno.h> -#ifndef NULL -/* ANSI C */ -#include <stddef.h> -#endif - -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - -#if defined (MSDOS) && !defined (GO32) -#ifndef NON_UNIX_STDIO -#define NON_UNIX_STDIO -#endif -#endif - -#ifdef UIOLEN_int -typedef int uiolen; -#else -typedef long uiolen; -#endif - -/*units*/ -typedef struct -{ FILE *ufd; /*0=unconnected*/ - char *ufnm; -#if !(defined (MSDOS) && !defined (GO32)) - long uinode; - int udev; -#endif - int url; /*0=sequential*/ - flag useek; /*true=can backspace, use dir, ...*/ - flag ufmt; - flag uprnt; - flag ublnk; - flag uend; - flag uwrt; /*last io was write*/ - flag uscrtch; -} unit; - -extern int f__init; -extern cilist *f__elist; /*active external io list*/ -extern flag f__reading,f__external,f__sequential,f__formatted; -#undef Void -#ifdef KR_headers -#define Void /*void*/ -extern int (*f__getn)(),(*f__putn)(); /*for formatted io*/ -extern long f__inode(); -extern VOID sig_die(); -extern int (*f__donewrec)(), t_putc(), x_wSL(); -extern int c_sfe(), err__fl(), xrd_SL(); -#else -#define Void void -#ifdef __cplusplus -extern "C" { -#endif -extern int (*f__getn)(void),(*f__putn)(int); /*for formatted io*/ -extern long f__inode(char*,int*); -extern void sig_die(char*,int); -extern void f__fatal(int,char*); -extern int t_runc(alist*); -extern int f__nowreading(unit*), f__nowwriting(unit*); -extern int fk_open(int,int,ftnint); -extern int en_fio(void); -extern void f_init(void); -extern int (*f__donewrec)(void), t_putc(int), x_wSL(void); -extern void b_char(char*,char*,ftnlen), g_char(char*,ftnlen,char*); -extern int c_sfe(cilist*), z_rnew(void); -extern int isatty(int); -extern int err__fl(int,int,char*); -extern int xrd_SL(void); -#ifdef __cplusplus - } -#endif -#endif -extern int (*f__doend)(Void); -extern FILE *f__cf; /*current file*/ -extern unit *f__curunit; /*current unit*/ -extern unit f__units[]; -#define err(f,m,s) do {if(f) {f__init &= ~2; errno= m;} else f__fatal(m,s); return(m);} while(0) -#define errfl(f,m,s) do {return err__fl((int)f,m,s);} while(0) - -/*Table sizes*/ -#define MXUNIT 100 - -extern int f__recpos; /*position in current record*/ -extern int f__cursor; /* offset to move to */ -extern int f__hiwater; /* so TL doesn't confuse us */ - -#define WRITE 1 -#define READ 2 -#define SEQ 3 -#define DIR 4 -#define FMT 5 -#define UNF 6 -#define EXT 7 -#define INT 8 - -#define buf_end(x) (x->_flag & _IONBF ? x->_ptr : x->_base + BUFSIZ) diff --git a/gcc/f/runtime/libI77/fmt.c b/gcc/f/runtime/libI77/fmt.c deleted file mode 100644 index a82f82153f6..00000000000 --- a/gcc/f/runtime/libI77/fmt.c +++ /dev/null @@ -1,516 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" -#define skip(s) while(*s==' ') s++ -#ifdef interdata -#define SYLMX 300 -#endif -#ifdef pdp11 -#define SYLMX 300 -#endif -#ifdef vax -#define SYLMX 300 -#endif -#ifndef SYLMX -#define SYLMX 300 -#endif -#define GLITCH '\2' - /* special quote character for stu */ -extern int f__cursor,f__scale; -extern flag f__cblank,f__cplus; /*blanks in I and compulsory plus*/ -struct syl f__syl[SYLMX]; -int f__parenlvl,f__pc,f__revloc; - - static -#ifdef KR_headers -char *ap_end(s) char *s; -#else -char *ap_end(char *s) -#endif -{ char quote; - quote= *s++; - for(;*s;s++) - { if(*s!=quote) continue; - if(*++s!=quote) return(s); - } - if(f__elist->cierr) { - errno = 100; - return(NULL); - } - f__fatal(100, "bad string"); - /*NOTREACHED*/ return 0; -} - static -#ifdef KR_headers -op_gen(a,b,c,d) -#else -op_gen(int a, int b, int c, int d) -#endif -{ struct syl *p= &f__syl[f__pc]; - if(f__pc>=SYLMX) - { fprintf(stderr,"format too complicated:\n"); - sig_die(f__fmtbuf, 1); - } - p->op=a; - p->p1=b; - p->p2=c; - p->p3=d; - return(f__pc++); -} -#ifdef KR_headers -static char *f_list(); -static char *gt_num(s,n,n1) char *s; int *n, n1; -#else -static char *f_list(char*); -static char *gt_num(char *s, int *n, int n1) -#endif -{ int m=0,f__cnt=0; - char c; - for(c= *s;;c = *s) - { if(c==' ') - { s++; - continue; - } - if(c>'9' || c<'0') break; - m=10*m+c-'0'; - f__cnt++; - s++; - } - if(f__cnt==0) { - if (!n1) - s = 0; - *n=n1; - } - else *n=m; - return(s); -} - - static -#ifdef KR_headers -char *f_s(s,curloc) char *s; -#else -char *f_s(char *s, int curloc) -#endif -{ - skip(s); - if(*s++!='(') - { - return(NULL); - } - if(f__parenlvl++ ==1) f__revloc=curloc; - if(op_gen(RET1,curloc,0,0)<0 || - (s=f_list(s))==NULL) - { - return(NULL); - } - skip(s); - return(s); -} - - static -#ifdef KR_headers -ne_d(s,p) char *s,**p; -#else -ne_d(char *s, char **p) -#endif -{ int n,x,sign=0; - struct syl *sp; - switch(*s) - { - default: - return(0); - case ':': (void) op_gen(COLON,0,0,0); break; - case '$': - (void) op_gen(NONL, 0, 0, 0); break; - case 'B': - case 'b': - if(*++s=='z' || *s == 'Z') (void) op_gen(BZ,0,0,0); - else (void) op_gen(BN,0,0,0); - break; - case 'S': - case 's': - if(*(s+1)=='s' || *(s+1) == 'S') - { x=SS; - s++; - } - else if(*(s+1)=='p' || *(s+1) == 'P') - { x=SP; - s++; - } - else x=S; - (void) op_gen(x,0,0,0); - break; - case '/': (void) op_gen(SLASH,0,0,0); break; - case '-': sign=1; - case '+': s++; /*OUTRAGEOUS CODING TRICK*/ - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - if (!(s=gt_num(s,&n,0))) { - bad: *p = 0; - return 1; - } - switch(*s) - { - default: - return(0); - case 'P': - case 'p': if(sign) n= -n; (void) op_gen(P,n,0,0); break; - case 'X': - case 'x': (void) op_gen(X,n,0,0); break; - case 'H': - case 'h': - sp = &f__syl[op_gen(H,n,0,0)]; - *(char **)&sp->p2 = s + 1; - s+=n; - break; - } - break; - case GLITCH: - case '"': - case '\'': - sp = &f__syl[op_gen(APOS,0,0,0)]; - *(char **)&sp->p2 = s; - if((*p = ap_end(s)) == NULL) - return(0); - return(1); - case 'T': - case 't': - if(*(s+1)=='l' || *(s+1) == 'L') - { x=TL; - s++; - } - else if(*(s+1)=='r'|| *(s+1) == 'R') - { x=TR; - s++; - } - else x=T; - if (!(s=gt_num(s+1,&n,0))) - goto bad; - s--; - (void) op_gen(x,n,0,0); - break; - case 'X': - case 'x': (void) op_gen(X,1,0,0); break; - case 'P': - case 'p': (void) op_gen(P,1,0,0); break; - } - s++; - *p=s; - return(1); -} - - static -#ifdef KR_headers -e_d(s,p) char *s,**p; -#else -e_d(char *s, char **p) -#endif -{ int i,im,n,w,d,e,found=0,x=0; - char *sv=s; - s=gt_num(s,&n,1); - (void) op_gen(STACK,n,0,0); - switch(*s++) - { - default: break; - case 'E': - case 'e': x=1; - case 'G': - case 'g': - found=1; - if (!(s=gt_num(s,&w,0))) { - bad: - *p = 0; - return 1; - } - if(w==0) break; - if(*s=='.') { - if (!(s=gt_num(s+1,&d,0))) - goto bad; - } - else d=0; - if(*s!='E' && *s != 'e') - (void) op_gen(x==1?E:G,w,d,0); /* default is Ew.dE2 */ - else { - if (!(s=gt_num(s+1,&e,0))) - goto bad; - (void) op_gen(x==1?EE:GE,w,d,e); - } - break; - case 'O': - case 'o': - i = O; - im = OM; - goto finish_I; - case 'Z': - case 'z': - i = Z; - im = ZM; - goto finish_I; - case 'L': - case 'l': - found=1; - if (!(s=gt_num(s,&w,0))) - goto bad; - if(w==0) break; - (void) op_gen(L,w,0,0); - break; - case 'A': - case 'a': - found=1; - skip(s); - if(*s>='0' && *s<='9') - { s=gt_num(s,&w,1); - if(w==0) break; - (void) op_gen(AW,w,0,0); - break; - } - (void) op_gen(A,0,0,0); - break; - case 'F': - case 'f': - if (!(s=gt_num(s,&w,0))) - goto bad; - found=1; - if(w==0) break; - if(*s=='.') { - if (!(s=gt_num(s+1,&d,0))) - goto bad; - } - else d=0; - (void) op_gen(F,w,d,0); - break; - case 'D': - case 'd': - found=1; - if (!(s=gt_num(s,&w,0))) - goto bad; - if(w==0) break; - if(*s=='.') { - if (!(s=gt_num(s+1,&d,0))) - goto bad; - } - else d=0; - (void) op_gen(D,w,d,0); - break; - case 'I': - case 'i': - i = I; - im = IM; - finish_I: - if (!(s=gt_num(s,&w,0))) - goto bad; - found=1; - if(w==0) break; - if(*s!='.') - { (void) op_gen(i,w,0,0); - break; - } - if (!(s=gt_num(s+1,&d,0))) - goto bad; - (void) op_gen(im,w,d,0); - break; - } - if(found==0) - { f__pc--; /*unSTACK*/ - *p=sv; - return(0); - } - *p=s; - return(1); -} - static -#ifdef KR_headers -char *i_tem(s) char *s; -#else -char *i_tem(char *s) -#endif -{ char *t; - int n,curloc; - if(*s==')') return(s); - if(ne_d(s,&t)) return(t); - if(e_d(s,&t)) return(t); - s=gt_num(s,&n,1); - if((curloc=op_gen(STACK,n,0,0))<0) return(NULL); - return(f_s(s,curloc)); -} - - static -#ifdef KR_headers -char *f_list(s) char *s; -#else -char *f_list(char *s) -#endif -{ - for(;*s!=0;) - { skip(s); - if((s=i_tem(s))==NULL) return(NULL); - skip(s); - if(*s==',') s++; - else if(*s==')') - { if(--f__parenlvl==0) - { - (void) op_gen(REVERT,f__revloc,0,0); - return(++s); - } - (void) op_gen(GOTO,0,0,0); - return(++s); - } - } - return(NULL); -} - -#ifdef KR_headers -pars_f(s) char *s; -#else -pars_f(char *s) -#endif -{ - f__parenlvl=f__revloc=f__pc=0; - if(f_s(s,0) == NULL) - { - return(-1); - } - return(0); -} -#define STKSZ 10 -int f__cnt[STKSZ],f__ret[STKSZ],f__cp,f__rp; -flag f__workdone, f__nonl; - - static -#ifdef KR_headers -type_f(n) -#else -type_f(int n) -#endif -{ - switch(n) - { - default: - return(n); - case RET1: - return(RET1); - case REVERT: return(REVERT); - case GOTO: return(GOTO); - case STACK: return(STACK); - case X: - case SLASH: - case APOS: case H: - case T: case TL: case TR: - return(NED); - case F: - case I: - case IM: - case A: case AW: - case O: case OM: - case L: - case E: case EE: case D: - case G: case GE: - case Z: case ZM: - return(ED); - } -} -#ifdef KR_headers -integer do_fio(number,ptr,len) ftnint *number; ftnlen len; char *ptr; -#else -integer do_fio(ftnint *number, char *ptr, ftnlen len) -#endif -{ struct syl *p; - int n,i; - for(i=0;i<*number;i++,ptr+=len) - { -loop: switch(type_f((p= &f__syl[f__pc])->op)) - { - default: - fprintf(stderr,"unknown code in do_fio: %d\n%s\n", - p->op,f__fmtbuf); - err(f__elist->cierr,100,"do_fio"); - case NED: - if((*f__doned)(p)) - { f__pc++; - goto loop; - } - f__pc++; - continue; - case ED: - if(f__cnt[f__cp]<=0) - { f__cp--; - f__pc++; - goto loop; - } - if(ptr==NULL) - return((*f__doend)()); - f__cnt[f__cp]--; - f__workdone=1; - if((n=(*f__doed)(p,ptr,len))>0) - errfl(f__elist->cierr,errno,"fmt"); - if(n<0) - err(f__elist->ciend,(EOF),"fmt"); - continue; - case STACK: - f__cnt[++f__cp]=p->p1; - f__pc++; - goto loop; - case RET1: - f__ret[++f__rp]=p->p1; - f__pc++; - goto loop; - case GOTO: - if(--f__cnt[f__cp]<=0) - { f__cp--; - f__rp--; - f__pc++; - goto loop; - } - f__pc=1+f__ret[f__rp--]; - goto loop; - case REVERT: - f__rp=f__cp=0; - f__pc = p->p1; - if(ptr==NULL) - return((*f__doend)()); - if(!f__workdone) return(0); - if((n=(*f__dorevert)()) != 0) return(n); - goto loop; - case COLON: - if(ptr==NULL) - return((*f__doend)()); - f__pc++; - goto loop; - case NONL: - f__nonl = 1; - f__pc++; - goto loop; - case S: - case SS: - f__cplus=0; - f__pc++; - goto loop; - case SP: - f__cplus = 1; - f__pc++; - goto loop; - case P: f__scale=p->p1; - f__pc++; - goto loop; - case BN: - f__cblank=0; - f__pc++; - goto loop; - case BZ: - f__cblank=1; - f__pc++; - goto loop; - } - } - return(0); -} -en_fio(Void) -{ ftnint one=1; - return(do_fio(&one,(char *)NULL,(ftnint)0)); -} - VOID -fmt_bg(Void) -{ - f__workdone=f__cp=f__rp=f__pc=f__cursor=0; - f__cnt[0]=f__ret[0]=0; -} diff --git a/gcc/f/runtime/libI77/fmt.h b/gcc/f/runtime/libI77/fmt.h deleted file mode 100644 index 509746e13b9..00000000000 --- a/gcc/f/runtime/libI77/fmt.h +++ /dev/null @@ -1,99 +0,0 @@ -struct syl -{ int op,p1,p2,p3; -}; -#define RET1 1 -#define REVERT 2 -#define GOTO 3 -#define X 4 -#define SLASH 5 -#define STACK 6 -#define I 7 -#define ED 8 -#define NED 9 -#define IM 10 -#define APOS 11 -#define H 12 -#define TL 13 -#define TR 14 -#define T 15 -#define COLON 16 -#define S 17 -#define SP 18 -#define SS 19 -#define P 20 -#define BN 21 -#define BZ 22 -#define F 23 -#define E 24 -#define EE 25 -#define D 26 -#define G 27 -#define GE 28 -#define L 29 -#define A 30 -#define AW 31 -#define O 32 -#define NONL 33 -#define OM 34 -#define Z 35 -#define ZM 36 -extern struct syl f__syl[]; -extern int f__pc,f__parenlvl,f__revloc; -typedef union -{ real pf; - doublereal pd; -} ufloat; -typedef union -{ short is; -#ifndef KR_headers - signed -#endif - char ic; - integer il; -#ifdef Allow_TYQUAD - longint ili; -#endif -} Uint; -#ifdef KR_headers -extern int (*f__doed)(),(*f__doned)(); -extern int (*f__dorevert)(); -extern int rd_ed(),rd_ned(); -extern int w_ed(),w_ned(); -#else -#ifdef __cplusplus -extern "C" { -#endif -extern int (*f__doed)(struct syl*, char*, ftnlen),(*f__doned)(struct syl*); -extern int (*f__dorevert)(void); -extern void fmt_bg(void); -extern int pars_f(char*); -extern int rd_ed(struct syl*, char*, ftnlen),rd_ned(struct syl*); -extern int w_ed(struct syl*, char*, ftnlen),w_ned(struct syl*); -extern int wrt_E(ufloat*, int, int, int, ftnlen); -extern int wrt_F(ufloat*, int, int, ftnlen); -extern int wrt_L(Uint*, int, ftnlen); -#ifdef __cplusplus - } -#endif -#endif -extern flag f__cblank,f__cplus,f__workdone, f__nonl; -extern char *f__fmtbuf; -extern int f__scale; -#define GET(x) if((x=(*f__getn)())<0) return(x) -#define VAL(x) (x!='\n'?x:' ') -#define PUT(x) (*f__putn)(x) -extern int f__cursor; - -#undef TYQUAD -#ifndef Allow_TYQUAD -#undef longint -#define longint long -#else -#define TYQUAD 14 -#endif - -#ifdef KR_headers -extern char *f__icvt(); -#else -extern char *f__icvt(longint, int*, int*, int); -#endif diff --git a/gcc/f/runtime/libI77/fmtlib.c b/gcc/f/runtime/libI77/fmtlib.c deleted file mode 100644 index 91483fc5290..00000000000 --- a/gcc/f/runtime/libI77/fmtlib.c +++ /dev/null @@ -1,45 +0,0 @@ -/* @(#)fmtlib.c 1.2 */ -#define MAXINTLENGTH 23 - -#include "f2c.h" -#ifndef Allow_TYQUAD -#undef longint -#define longint long -#undef ulongint -#define ulongint unsigned long -#endif - -#ifdef KR_headers -char *f__icvt(value,ndigit,sign, base) longint value; int *ndigit,*sign; - register int base; -#else -char *f__icvt(longint value, int *ndigit, int *sign, int base) -#endif -{ - static char buf[MAXINTLENGTH+1]; - register int i; - ulongint uvalue; - - if(value > 0) { - uvalue = value; - *sign = 0; - } - else if (value < 0) { - uvalue = -value; - *sign = 1; - } - else { - *sign = 0; - *ndigit = 1; - buf[MAXINTLENGTH-1] = '0'; - return &buf[MAXINTLENGTH-1]; - } - i = MAXINTLENGTH; - do { - buf[--i] = (uvalue%base) + '0'; - uvalue /= base; - } - while(uvalue > 0); - *ndigit = MAXINTLENGTH - i; - return &buf[i]; - } diff --git a/gcc/f/runtime/libI77/fp.h b/gcc/f/runtime/libI77/fp.h deleted file mode 100644 index 40743d79f74..00000000000 --- a/gcc/f/runtime/libI77/fp.h +++ /dev/null @@ -1,28 +0,0 @@ -#define FMAX 40 -#define EXPMAXDIGS 8 -#define EXPMAX 99999999 -/* FMAX = max number of nonzero digits passed to atof() */ -/* EXPMAX = 10^EXPMAXDIGS - 1 = largest allowed exponent absolute value */ - -#ifdef V10 /* Research Tenth-Edition Unix */ -#include "local.h" -#endif - -/* MAXFRACDIGS and MAXINTDIGS are for wrt_F -- bounds (not necessarily - tight) on the maximum number of digits to the right and left of - * the decimal point. - */ - -#ifdef VAX -#define MAXFRACDIGS 56 -#define MAXINTDIGS 38 -#else -#ifdef CRAY -#define MAXFRACDIGS 9880 -#define MAXINTDIGS 9864 -#else -/* values that suffice for IEEE double */ -#define MAXFRACDIGS 344 -#define MAXINTDIGS 308 -#endif -#endif diff --git a/gcc/f/runtime/libI77/ftell_.c b/gcc/f/runtime/libI77/ftell_.c deleted file mode 100644 index 1bd03be325a..00000000000 --- a/gcc/f/runtime/libI77/ftell_.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "f2c.h" -#include "fio.h" - - static FILE * -#ifdef KR_headers -unit_chk(Unit, who) integer Unit; char *who; -#else -unit_chk(integer Unit, char *who) -#endif -{ - if (Unit >= MXUNIT || Unit < 0) - f__fatal(101, who); - return f__units[Unit].ufd; - } - - integer -#ifdef KR_headers -G77_ftell_0 (Unit) integer *Unit; -#else -G77_ftell_0 (integer *Unit) -#endif -{ - FILE *f; - return (f = unit_chk(*Unit, "ftell")) ? ftell(f) : -1L; - } - - integer -#ifdef KR_headers -G77_fseek_0 (Unit, offset, xwhence) integer *Unit, *offset, *xwhence; -#else -G77_fseek_0 (integer *Unit, integer *offset, integer *xwhence) -#endif -{ - FILE *f; - int w = (int)*xwhence; -#ifdef SEEK_SET - static int wohin[3] = { SEEK_SET, SEEK_CUR, SEEK_END }; -#endif - if (w < 0 || w > 2) - w = 0; -#ifdef SEEK_SET - w = wohin[w]; -#endif - return !(f = unit_chk(*Unit, "fseek")) - || fseek(f, *offset, w) ? 1 : 0; - } diff --git a/gcc/f/runtime/libI77/iio.c b/gcc/f/runtime/libI77/iio.c deleted file mode 100644 index 22eae3f433d..00000000000 --- a/gcc/f/runtime/libI77/iio.c +++ /dev/null @@ -1,148 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" -extern char *f__icptr; -char *f__icend; -extern icilist *f__svic; -int f__icnum; -extern int f__hiwater; -z_getc(Void) -{ - if(f__recpos++ < f__svic->icirlen) { - if(f__icptr >= f__icend) err(f__svic->iciend,(EOF),"endfile"); - return(*(unsigned char *)f__icptr++); - } - return '\n'; -} -#ifdef KR_headers -z_putc(c) -#else -z_putc(int c) -#endif -{ - if(f__icptr >= f__icend) err(f__svic->icierr,110,"inwrite"); - if(f__recpos++ < f__svic->icirlen) - *f__icptr++ = c; - else err(f__svic->icierr,110,"recend"); - return 0; -} -z_rnew(Void) -{ - f__icptr = f__svic->iciunit + (++f__icnum)*f__svic->icirlen; - f__recpos = 0; - f__cursor = 0; - f__hiwater = 0; - return 1; -} - - static int -z_endp(Void) -{ - (*f__donewrec)(); - return 0; - } - -#ifdef KR_headers -c_si(a) icilist *a; -#else -c_si(icilist *a) -#endif -{ - if (f__init & 2) - f__fatal (131, "I/O recursion"); - f__init |= 2; - f__elist = (cilist *)a; - f__fmtbuf=a->icifmt; - if(pars_f(f__fmtbuf)<0) - err(a->icierr,100,"startint"); - fmt_bg(); - f__sequential=f__formatted=1; - f__external=0; - f__cblank=f__cplus=f__scale=0; - f__svic=a; - f__icnum=f__recpos=0; - f__cursor = 0; - f__hiwater = 0; - f__icptr = a->iciunit; - f__icend = f__icptr + a->icirlen*a->icirnum; - f__curunit = 0; - f__cf = 0; - return(0); -} - - int -iw_rev(Void) -{ - if(f__workdone) - z_endp(); - f__hiwater = f__recpos = f__cursor = 0; - return(f__workdone=0); - } - -#ifdef KR_headers -integer s_rsfi(a) icilist *a; -#else -integer s_rsfi(icilist *a) -#endif -{ int n; - if(n=c_si(a)) return(n); - f__reading=1; - f__doed=rd_ed; - f__doned=rd_ned; - f__getn=z_getc; - f__dorevert = z_endp; - f__donewrec = z_rnew; - f__doend = z_endp; - return(0); -} - -z_wnew(Void) -{ - if (f__recpos < f__hiwater) { - f__icptr += f__hiwater - f__recpos; - f__recpos = f__hiwater; - } - while(f__recpos++ < f__svic->icirlen) - *f__icptr++ = ' '; - f__recpos = 0; - f__cursor = 0; - f__hiwater = 0; - f__icnum++; - return 1; -} -#ifdef KR_headers -integer s_wsfi(a) icilist *a; -#else -integer s_wsfi(icilist *a) -#endif -{ int n; - if(n=c_si(a)) return(n); - f__reading=0; - f__doed=w_ed; - f__doned=w_ned; - f__putn=z_putc; - f__dorevert = iw_rev; - f__donewrec = z_wnew; - f__doend = z_endp; - return(0); -} -integer e_rsfi(Void) -{ int n; - f__init &= ~2; - n = en_fio(); - f__fmtbuf = NULL; - return(n); -} -integer e_wsfi(Void) -{ - int n; - f__init &= ~2; - n = en_fio(); - f__fmtbuf = NULL; - if(f__icnum >= f__svic->icirnum - || !f__recpos && f__icnum) - return(n); - while(f__recpos++ < f__svic->icirlen) - *f__icptr++ = ' '; - return(n); -} diff --git a/gcc/f/runtime/libI77/ilnw.c b/gcc/f/runtime/libI77/ilnw.c deleted file mode 100644 index 08ea2be7831..00000000000 --- a/gcc/f/runtime/libI77/ilnw.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "lio.h" -extern char *f__icptr; -extern char *f__icend; -extern icilist *f__svic; -extern int f__icnum; -#ifdef KR_headers -extern int z_putc(); -#else -extern int z_putc(int); -#endif - - static int -z_wSL(Void) -{ - while(f__recpos < f__svic->icirlen) - z_putc(' '); - return z_rnew(); - } - - VOID -#ifdef KR_headers -c_liw(a) icilist *a; -#else -c_liw(icilist *a) -#endif -{ - f__reading = 0; - f__external = 0; - f__formatted = 1; - f__putn = z_putc; - L_len = a->icirlen; - f__donewrec = z_wSL; - f__svic = a; - f__icnum = f__recpos = 0; - f__cursor = 0; - f__cf = 0; - f__curunit = 0; - f__icptr = a->iciunit; - f__icend = f__icptr + a->icirlen*a->icirnum; - f__elist = (cilist *)a; - } - - integer -#ifdef KR_headers -s_wsni(a) icilist *a; -#else -s_wsni(icilist *a) -#endif -{ - cilist ca; - - if(f__init != 1) f_init(); - f__init = 3; - c_liw(a); - ca.cifmt = a->icifmt; - x_wsne(&ca); - z_wSL(); - return 0; - } - - integer -#ifdef KR_headers -s_wsli(a) icilist *a; -#else -s_wsli(icilist *a) -#endif -{ - if(f__init != 1) f_init(); - f__init = 3; - f__lioproc = l_write; - c_liw(a); - return(0); - } - -integer e_wsli(Void) -{ - f__init = 1; - z_wSL(); - return(0); - } diff --git a/gcc/f/runtime/libI77/inquire.c b/gcc/f/runtime/libI77/inquire.c deleted file mode 100644 index 963d4c3e5e8..00000000000 --- a/gcc/f/runtime/libI77/inquire.c +++ /dev/null @@ -1,108 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include <string.h> -#ifdef KR_headers -integer f_inqu(a) inlist *a; -#else -#if defined (MSDOS) && !defined (GO32) -#undef abs -#undef min -#undef max -#include "io.h" -#endif -integer f_inqu(inlist *a) -#endif -{ flag byfile; - int i, n; - unit *p; - char buf[256]; - long x; - if (f__init & 2) - f__fatal (131, "I/O recursion"); - if(a->infile!=NULL) - { byfile=1; - g_char(a->infile,a->infilen,buf); -#ifdef NON_UNIX_STDIO - x = access(buf,0) ? -1 : 0; - for(i=0,p=NULL;i<MXUNIT;i++) - if(f__units[i].ufd != NULL - && f__units[i].ufnm != NULL - && !strcmp(f__units[i].ufnm,buf)) { - p = &f__units[i]; - break; - } -#else - x=f__inode(buf, &n); - for(i=0,p=NULL;i<MXUNIT;i++) - if(f__units[i].uinode==x - && f__units[i].ufd!=NULL - && f__units[i].udev == n) { - p = &f__units[i]; - break; - } -#endif - } - else - { - byfile=0; - if(a->inunit<MXUNIT && a->inunit>=0) - { - p= &f__units[a->inunit]; - } - else - { - p=NULL; - } - } - if(a->inex!=NULL) - if(byfile && x != -1 || !byfile && p!=NULL) - *a->inex=1; - else *a->inex=0; - if(a->inopen!=NULL) - if(byfile) *a->inopen=(p!=NULL); - else *a->inopen=(p!=NULL && p->ufd!=NULL); - if(a->innum!=NULL) *a->innum= p-f__units; - if(a->innamed!=NULL) - if(byfile || p!=NULL && p->ufnm!=NULL) - *a->innamed=1; - else *a->innamed=0; - if(a->inname!=NULL) - if(byfile) - b_char(buf,a->inname,a->innamlen); - else if(p!=NULL && p->ufnm!=NULL) - b_char(p->ufnm,a->inname,a->innamlen); - if(a->inacc!=NULL && p!=NULL && p->ufd!=NULL) - if(p->url) - b_char("DIRECT",a->inacc,a->inacclen); - else b_char("SEQUENTIAL",a->inacc,a->inacclen); - if(a->inseq!=NULL) - if(p!=NULL && p->url) - b_char("NO",a->inseq,a->inseqlen); - else b_char("YES",a->inseq,a->inseqlen); - if(a->indir!=NULL) - if(p==NULL || p->url) - b_char("YES",a->indir,a->indirlen); - else b_char("NO",a->indir,a->indirlen); - if(a->infmt!=NULL) - if(p!=NULL && p->ufmt==0) - b_char("UNFORMATTED",a->infmt,a->infmtlen); - else b_char("FORMATTED",a->infmt,a->infmtlen); - if(a->inform!=NULL) - if(p!=NULL && p->ufmt==0) - b_char("NO",a->inform,a->informlen); - else b_char("YES",a->inform,a->informlen); - if(a->inunf) - if(p!=NULL && p->ufmt==0) - b_char("YES",a->inunf,a->inunflen); - else if (p!=NULL) b_char("NO",a->inunf,a->inunflen); - else b_char("UNKNOWN",a->inunf,a->inunflen); - if(a->inrecl!=NULL && p!=NULL) - *a->inrecl=p->url; - if(a->innrec!=NULL && p!=NULL && p->url>0) - *a->innrec=ftell(p->ufd)/p->url+1; - if(a->inblank && p!=NULL && p->ufmt) - if(p->ublnk) - b_char("ZERO",a->inblank,a->inblanklen); - else b_char("NULL",a->inblank,a->inblanklen); - return(0); -} diff --git a/gcc/f/runtime/libI77/lio.h b/gcc/f/runtime/libI77/lio.h deleted file mode 100644 index 012317206aa..00000000000 --- a/gcc/f/runtime/libI77/lio.h +++ /dev/null @@ -1,74 +0,0 @@ -/* copy of ftypes from the compiler */ -/* variable types - * numeric assumptions: - * int < reals < complexes - * TYDREAL-TYREAL = TYDCOMPLEX-TYCOMPLEX - */ - -/* 0-10 retain their old (pre LOGICAL*1, etc.) */ -/* values to allow mixing old and new objects. */ - -#define TYUNKNOWN 0 -#define TYADDR 1 -#define TYSHORT 2 -#define TYLONG 3 -#define TYREAL 4 -#define TYDREAL 5 -#define TYCOMPLEX 6 -#define TYDCOMPLEX 7 -#define TYLOGICAL 8 -#define TYCHAR 9 -#define TYSUBR 10 -#define TYINT1 11 -#define TYLOGICAL1 12 -#define TYLOGICAL2 13 -#ifdef Allow_TYQUAD -#undef TYQUAD -#define TYQUAD 14 -#endif - -#define LINTW 24 -#define LINE 80 -#define LLOGW 2 -#ifdef Old_list_output -#define LLOW 1.0 -#define LHIGH 1.e9 -#define LEFMT " %# .8E" -#define LFFMT " %# .9g" -#else -#define LGFMT "%.9G" -#endif -/* LEFBL 20 should suffice; 24 overcomes a NeXT bug. */ -#define LEFBL 24 - -typedef union -{ - char flchar; - short flshort; - ftnint flint; -#ifdef Allow_TYQUAD - longint fllongint; -#endif - real flreal; - doublereal fldouble; -} flex; -extern int f__scale; -#ifdef KR_headers -extern int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)(); -extern int l_read(), l_write(); -#else -#ifdef __cplusplus -extern "C" { -#endif -extern int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint); -extern int l_write(ftnint*, char*, ftnlen, ftnint); -extern void x_wsne(cilist*); -extern int c_le(cilist*), (*l_getc)(void), (*l_ungetc)(int,FILE*); -extern int l_read(ftnint*,char*,ftnlen,ftnint); -extern integer e_rsle(void), e_wsle(void), s_wsne(cilist*); -extern int z_rnew(void); -#ifdef __cplusplus - } -#endif -#endif -extern ftnint L_len; diff --git a/gcc/f/runtime/libI77/lread.c b/gcc/f/runtime/libI77/lread.c deleted file mode 100644 index 3f0642c24cd..00000000000 --- a/gcc/f/runtime/libI77/lread.c +++ /dev/null @@ -1,684 +0,0 @@ -#include <ctype.h> -#include "f2c.h" -#include "fio.h" - -/* Compile with -DF8X_NML_ELIDE_QUOTES to permit eliding quotation */ -/* marks in namelist input a la the Fortran 8X Draft published in */ -/* the May 1989 issue of Fortran Forum. */ - - -extern char *f__fmtbuf; - -#ifdef Allow_TYQUAD -static longint f__llx; -static int quad_read; -#endif - -#ifdef KR_headers -extern double atof(); -extern char *malloc(), *realloc(); -int (*f__lioproc)(), (*l_getc)(), (*l_ungetc)(); -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -int (*f__lioproc)(ftnint*, char*, ftnlen, ftnint), (*l_getc)(void), - (*l_ungetc)(int,FILE*); -#endif - -#include "fmt.h" -#include "lio.h" -#include "fp.h" - -int l_eof; - -#define isblnk(x) (f__ltab[x+1]&B) -#define issep(x) (f__ltab[x+1]&SX) -#define isapos(x) (f__ltab[x+1]&AX) -#define isexp(x) (f__ltab[x+1]&EX) -#define issign(x) (f__ltab[x+1]&SG) -#define iswhit(x) (f__ltab[x+1]&WH) -#define SX 1 -#define B 2 -#define AX 4 -#define EX 8 -#define SG 16 -#define WH 32 -char f__ltab[128+1] = { /* offset one for EOF */ - 0, - 0,0,AX,0,0,0,0,0,0,WH|B,SX|WH,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - SX|B|WH,0,AX,0,0,0,0,AX,0,0,0,SG,SX,SG,0,SX, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - AX,0,0,0,EX,EX,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - -#ifdef ungetc - static int -#ifdef KR_headers -un_getc(x,f__cf) int x; FILE *f__cf; -#else -un_getc(int x, FILE *f__cf) -#endif -{ return ungetc(x,f__cf); } -#else -#define un_getc ungetc -#ifdef KR_headers - extern int ungetc(); -#else -extern int ungetc(int, FILE*); /* for systems with a buggy stdio.h */ -#endif -#endif - -t_getc(Void) -{ int ch; - if(f__curunit->uend) return(EOF); - if((ch=getc(f__cf))!=EOF) return(ch); - if(feof(f__cf)) - f__curunit->uend = l_eof = 1; - return(EOF); -} -integer e_rsle(Void) -{ - int ch; - f__init = 1; - if(f__curunit->uend) return(0); - while((ch=t_getc())!='\n') - if (ch == EOF) { - if(feof(f__cf)) - f__curunit->uend = l_eof = 1; - return EOF; - } - return(0); -} - -flag f__lquit; -int f__lcount,f__ltype,nml_read; -char *f__lchar; -double f__lx,f__ly; -#define ERR(x) if(n=(x)) {f__init &= ~2; return(n);} -#define GETC(x) (x=(*l_getc)()) -#define Ungetc(x,y) (*l_ungetc)(x,y) - -#ifdef KR_headers -l_R(poststar) int poststar; -#else -l_R(int poststar) -#endif -{ - char s[FMAX+EXPMAXDIGS+4]; - register int ch; - register char *sp, *spe, *sp1; - long e, exp; - int havenum, havestar, se; - - if (!poststar) { - if (f__lcount > 0) - return(0); - f__lcount = 1; - } -#ifdef Allow_TYQUAD - f__llx = 0; -#endif - f__ltype = 0; - exp = 0; - havestar = 0; -retry: - sp1 = sp = s; - spe = sp + FMAX; - havenum = 0; - - switch(GETC(ch)) { - case '-': *sp++ = ch; sp1++; spe++; - case '+': - GETC(ch); - } - while(ch == '0') { - ++havenum; - GETC(ch); - } - while(isdigit(ch)) { - if (sp < spe) *sp++ = ch; - else ++exp; - GETC(ch); - } - if (ch == '*' && !poststar) { - if (sp == sp1 || exp || *s == '-') { - errfl(f__elist->cierr,112,"bad repetition count"); - } - poststar = havestar = 1; - *sp = 0; - f__lcount = atoi(s); - goto retry; - } - if (ch == '.') { - GETC(ch); - if (sp == sp1) - while(ch == '0') { - ++havenum; - --exp; - GETC(ch); - } - while(isdigit(ch)) { - if (sp < spe) - { *sp++ = ch; --exp; } - GETC(ch); - } - } - havenum += sp - sp1; - se = 0; - if (issign(ch)) - goto signonly; - if (havenum && isexp(ch)) { - GETC(ch); - if (issign(ch)) { -signonly: - if (ch == '-') se = 1; - GETC(ch); - } - if (!isdigit(ch)) { -bad: - errfl(f__elist->cierr,112,"exponent field"); - } - - e = ch - '0'; - while(isdigit(GETC(ch))) { - e = 10*e + ch - '0'; - if (e > EXPMAX) - goto bad; - } - if (se) - exp -= e; - else - exp += e; - } - (void) Ungetc(ch, f__cf); - if (sp > sp1) { - ++havenum; - while(*--sp == '0') - ++exp; - if (exp) - sprintf(sp+1, "e%ld", exp); - else - sp[1] = 0; - f__lx = atof(s); -#ifdef Allow_TYQUAD - if (quad_read && (se = sp - sp1 + exp) > 14 && se < 20) { - /* Assuming 64-bit longint and 32-bit long. */ - if (exp < 0) - sp += exp; - if (sp1 <= sp) { - f__llx = *sp1 - '0'; - while(++sp1 <= sp) - f__llx = 10*f__llx + (*sp1 - '0'); - } - while(--exp >= 0) - f__llx *= 10; - if (*s == '-') - f__llx = -f__llx; - } -#endif - } - else - f__lx = 0.; - if (havenum) - f__ltype = TYLONG; - else - switch(ch) { - case ',': - case '/': - break; - default: - if (havestar && ( ch == ' ' - ||ch == '\t' - ||ch == '\n')) - break; - if (nml_read > 1) { - f__lquit = 2; - return 0; - } - errfl(f__elist->cierr,112,"invalid number"); - } - return 0; - } - - static int -#ifdef KR_headers -rd_count(ch) register int ch; -#else -rd_count(register int ch) -#endif -{ - if (ch < '0' || ch > '9') - return 1; - f__lcount = ch - '0'; - while(GETC(ch) >= '0' && ch <= '9') - f__lcount = 10*f__lcount + ch - '0'; - Ungetc(ch,f__cf); - return f__lcount <= 0; - } - -l_C(Void) -{ int ch, nml_save; - double lz; - if(f__lcount>0) return(0); - f__ltype=0; - GETC(ch); - if(ch!='(') - { - if (nml_read > 1 && (ch < '0' || ch > '9')) { - Ungetc(ch,f__cf); - f__lquit = 2; - return 0; - } - if (rd_count(ch)) - if(!f__cf || !feof(f__cf)) - errfl(f__elist->cierr,112,"complex format"); - else - err(f__elist->cierr,(EOF),"lread"); - if(GETC(ch)!='*') - { - if(!f__cf || !feof(f__cf)) - errfl(f__elist->cierr,112,"no star"); - else - err(f__elist->cierr,(EOF),"lread"); - } - if(GETC(ch)!='(') - { Ungetc(ch,f__cf); - return(0); - } - } - else - f__lcount = 1; - while(iswhit(GETC(ch))); - Ungetc(ch,f__cf); - nml_save = nml_read; - nml_read = 0; - if (ch = l_R(1)) - return ch; - if (!f__ltype) - errfl(f__elist->cierr,112,"no real part"); - lz = f__lx; - while(iswhit(GETC(ch))); - if(ch!=',') - { (void) Ungetc(ch,f__cf); - errfl(f__elist->cierr,112,"no comma"); - } - while(iswhit(GETC(ch))); - (void) Ungetc(ch,f__cf); - if (ch = l_R(1)) - return ch; - if (!f__ltype) - errfl(f__elist->cierr,112,"no imaginary part"); - while(iswhit(GETC(ch))); - if(ch!=')') errfl(f__elist->cierr,112,"no )"); - f__ly = f__lx; - f__lx = lz; -#ifdef Allow_TYQUAD - f__llx = 0; -#endif - nml_read = nml_save; - return(0); -} -l_L(Void) -{ - int ch; - if(f__lcount>0) return(0); - f__lcount = 1; - f__ltype=0; - GETC(ch); - if(isdigit(ch)) - { - rd_count(ch); - if(GETC(ch)!='*') - if(!f__cf || !feof(f__cf)) - errfl(f__elist->cierr,112,"no star"); - else - err(f__elist->cierr,(EOF),"lread"); - GETC(ch); - } - if(ch == '.') GETC(ch); - switch(ch) - { - case 't': - case 'T': - f__lx=1; - break; - case 'f': - case 'F': - f__lx=0; - break; - default: - if(isblnk(ch) || issep(ch) || ch==EOF) - { (void) Ungetc(ch,f__cf); - return(0); - } - if (nml_read > 1) { - Ungetc(ch,f__cf); - f__lquit = 2; - return 0; - } - errfl(f__elist->cierr,112,"logical"); - } - f__ltype=TYLONG; - while(!issep(GETC(ch)) && ch!=EOF); - (void) Ungetc(ch, f__cf); - return(0); -} -#define BUFSIZE 128 -l_CHAR(Void) -{ int ch,size,i; - static char rafail[] = "realloc failure"; - char quote,*p; - if(f__lcount>0) return(0); - f__ltype=0; - if(f__lchar!=NULL) free(f__lchar); - size=BUFSIZE; - p=f__lchar = (char *)malloc((unsigned int)size); - if(f__lchar == NULL) - errfl(f__elist->cierr,113,"no space"); - - GETC(ch); - if(isdigit(ch)) { - /* allow Fortran 8x-style unquoted string... */ - /* either find a repetition count or the string */ - f__lcount = ch - '0'; - *p++ = ch; - for(i = 1;;) { - switch(GETC(ch)) { - case '*': - if (f__lcount == 0) { - f__lcount = 1; -#ifndef F8X_NML_ELIDE_QUOTES - if (nml_read) - goto no_quote; -#endif - goto noquote; - } - p = f__lchar; - goto have_lcount; - case ',': - case ' ': - case '\t': - case '\n': - case '/': - Ungetc(ch,f__cf); - /* no break */ - case EOF: - f__lcount = 1; - f__ltype = TYCHAR; - return *p = 0; - } - if (!isdigit(ch)) { - f__lcount = 1; -#ifndef F8X_NML_ELIDE_QUOTES - if (nml_read) { - no_quote: - errfl(f__elist->cierr,112, - "undelimited character string"); - } -#endif - goto noquote; - } - *p++ = ch; - f__lcount = 10*f__lcount + ch - '0'; - if (++i == size) { - f__lchar = (char *)realloc(f__lchar, - (unsigned int)(size += BUFSIZE)); - if(f__lchar == NULL) - errfl(f__elist->cierr,113,rafail); - p = f__lchar + i; - } - } - } - else (void) Ungetc(ch,f__cf); - have_lcount: - if(GETC(ch)=='\'' || ch=='"') quote=ch; - else if(isblnk(ch) || (issep(ch) && ch != '\n') || ch==EOF) { - Ungetc(ch,f__cf); - return 0; - } -#ifndef F8X_NML_ELIDE_QUOTES - else if (nml_read > 1) { - Ungetc(ch,f__cf); - f__lquit = 2; - return 0; - } -#endif - else { - /* Fortran 8x-style unquoted string */ - *p++ = ch; - for(i = 1;;) { - switch(GETC(ch)) { - case ',': - case ' ': - case '\t': - case '\n': - case '/': - Ungetc(ch,f__cf); - /* no break */ - case EOF: - f__ltype = TYCHAR; - return *p = 0; - } - noquote: - *p++ = ch; - if (++i == size) { - f__lchar = (char *)realloc(f__lchar, - (unsigned int)(size += BUFSIZE)); - if(f__lchar == NULL) - errfl(f__elist->cierr,113,rafail); - p = f__lchar + i; - } - } - } - f__ltype=TYCHAR; - for(i=0;;) - { while(GETC(ch)!=quote && ch!='\n' - && ch!=EOF && ++i<size) *p++ = ch; - if(i==size) - { - newone: - f__lchar= (char *)realloc(f__lchar, - (unsigned int)(size += BUFSIZE)); - if(f__lchar == NULL) - errfl(f__elist->cierr,113,rafail); - p=f__lchar+i-1; - *p++ = ch; - } - else if(ch==EOF) return(EOF); - else if(ch=='\n') - { if(*(p-1) != '\\') continue; - i--; - p--; - if(++i<size) *p++ = ch; - else goto newone; - } - else if(GETC(ch)==quote) - { if(++i<size) *p++ = ch; - else goto newone; - } - else - { (void) Ungetc(ch,f__cf); - *p = 0; - return(0); - } - } -} -#ifdef KR_headers -c_le(a) cilist *a; -#else -c_le(cilist *a) -#endif -{ - if(f__init != 1) f_init(); - f__init = 3; - f__fmtbuf="list io"; - if(a->ciunit>=MXUNIT || a->ciunit<0) - err(a->cierr,101,"stler"); - f__scale=f__recpos=0; - f__elist=a; - f__curunit = &f__units[a->ciunit]; - if(f__curunit->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) - err(a->cierr,102,"lio"); - f__cf=f__curunit->ufd; - if(!f__curunit->ufmt) err(a->cierr,103,"lio"); - return(0); -} -#ifdef KR_headers -l_read(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len; -#else -l_read(ftnint *number, char *ptr, ftnlen len, ftnint type) -#endif -{ -#define Ptr ((flex *)ptr) - int i,n,ch; - doublereal *yy; - real *xx; - for(i=0;i<*number;i++) - { - if(f__lquit) return(0); - if(l_eof) - err(f__elist->ciend, EOF, "list in"); - if(f__lcount == 0) { - f__ltype = 0; - for(;;) { - GETC(ch); - switch(ch) { - case EOF: - err(f__elist->ciend,(EOF),"list in"); - case ' ': - case '\t': - case '\n': - continue; - case '/': - f__lquit = 1; - goto loopend; - case ',': - f__lcount = 1; - goto loopend; - default: - (void) Ungetc(ch, f__cf); - goto rddata; - } - } - } - rddata: - switch((int)type) - { - case TYINT1: - case TYSHORT: - case TYLONG: - case TYREAL: - case TYDREAL: - ERR(l_R(0)); - break; -#ifdef TYQUAD - case TYQUAD: - quad_read = 1; - n = l_R(0); - quad_read = 0; - ERR(n); - break; -#endif - case TYCOMPLEX: - case TYDCOMPLEX: - ERR(l_C()); - break; - case TYLOGICAL1: - case TYLOGICAL2: - case TYLOGICAL: - ERR(l_L()); - break; - case TYCHAR: - ERR(l_CHAR()); - break; - } - while (GETC(ch) == ' ' || ch == '\t'); - if (ch != ',' || f__lcount > 1) - Ungetc(ch,f__cf); - loopend: - if(f__lquit) return(0); - if(f__cf && ferror(f__cf)) { - clearerr(f__cf); - errfl(f__elist->cierr,errno,"list in"); - } - if(f__ltype==0) goto bump; - switch((int)type) - { - case TYINT1: - case TYLOGICAL1: - Ptr->flchar = (char)f__lx; - break; - case TYLOGICAL2: - case TYSHORT: - Ptr->flshort = (short)f__lx; - break; - case TYLOGICAL: - case TYLONG: - Ptr->flint=f__lx; - break; -#ifdef Allow_TYQUAD - case TYQUAD: - if (!(Ptr->fllongint = f__llx)) - Ptr->fllongint = f__lx; - break; -#endif - case TYREAL: - Ptr->flreal=f__lx; - break; - case TYDREAL: - Ptr->fldouble=f__lx; - break; - case TYCOMPLEX: - xx=(real *)ptr; - *xx++ = f__lx; - *xx = f__ly; - break; - case TYDCOMPLEX: - yy=(doublereal *)ptr; - *yy++ = f__lx; - *yy = f__ly; - break; - case TYCHAR: - b_char(f__lchar,ptr,len); - break; - } - bump: - if(f__lcount>0) f__lcount--; - ptr += len; - if (nml_read) - nml_read++; - } - return(0); -#undef Ptr -} -#ifdef KR_headers -integer s_rsle(a) cilist *a; -#else -integer s_rsle(cilist *a) -#endif -{ - int n; - - if(n=c_le(a)) return(n); - f__reading=1; - f__external=1; - f__formatted=1; - f__lioproc = l_read; - f__lquit = 0; - f__lcount = 0; - l_eof = 0; - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr,errno,"read start"); - if(f__curunit->uend) - err(f__elist->ciend,(EOF),"read start"); - l_getc = t_getc; - l_ungetc = un_getc; - f__doend = xrd_SL; - return(0); -} diff --git a/gcc/f/runtime/libI77/lwrite.c b/gcc/f/runtime/libI77/lwrite.c deleted file mode 100644 index 5da7dfbb972..00000000000 --- a/gcc/f/runtime/libI77/lwrite.c +++ /dev/null @@ -1,310 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" -#include "lio.h" - -ftnint L_len; -int f__Aquote; - - static VOID -donewrec(Void) -{ - if (f__recpos) - (*f__donewrec)(); - } - -#ifdef KR_headers -t_putc(c) -#else -t_putc(int c) -#endif -{ - f__recpos++; - putc(c,f__cf); - return(0); -} - static VOID -#ifdef KR_headers -lwrt_I(n) longint n; -#else -lwrt_I(longint n) -#endif -{ - char *p; - int ndigit, sign; - - p = f__icvt(n, &ndigit, &sign, 10); - if(f__recpos + ndigit >= L_len) - donewrec(); - PUT(' '); - if (sign) - PUT('-'); - while(*p) - PUT(*p++); -} - static VOID -#ifdef KR_headers -lwrt_L(n, len) ftnint n; ftnlen len; -#else -lwrt_L(ftnint n, ftnlen len) -#endif -{ - if(f__recpos+LLOGW>=L_len) - donewrec(); - wrt_L((Uint *)&n,LLOGW, len); -} - static VOID -#ifdef KR_headers -lwrt_A(p,len) char *p; ftnlen len; -#else -lwrt_A(char *p, ftnlen len) -#endif -{ - int a; - char *p1, *pe; - - a = 0; - pe = p + len; - if (f__Aquote) { - a = 3; - if (len > 1 && p[len-1] == ' ') { - while(--len > 1 && p[len-1] == ' '); - pe = p + len; - } - p1 = p; - while(p1 < pe) - if (*p1++ == '\'') - a++; - } - if(f__recpos+len+a >= L_len) - donewrec(); - if (a -#ifndef OMIT_BLANK_CC - || !f__recpos -#endif - ) - PUT(' '); - if (a) { - PUT('\''); - while(p < pe) { - if (*p == '\'') - PUT('\''); - PUT(*p++); - } - PUT('\''); - } - else - while(p < pe) - PUT(*p++); -} - - static int -#ifdef KR_headers -l_g(buf, n) char *buf; double n; -#else -l_g(char *buf, double n) -#endif -{ -#ifdef Old_list_output - doublereal absn; - char *fmt; - - absn = n; - if (absn < 0) - absn = -absn; - fmt = LLOW <= absn && absn < LHIGH ? LFFMT : LEFMT; -#ifdef USE_STRLEN - sprintf(buf, fmt, n); - return strlen(buf); -#else - return sprintf(buf, fmt, n); -#endif - -#else - register char *b, c, c1; - - b = buf; - *b++ = ' '; - if (n < 0) { - *b++ = '-'; - n = -n; - } - else - *b++ = ' '; - if (n == 0) { - *b++ = '0'; - *b++ = '.'; - *b = 0; - goto f__ret; - } - sprintf(b, LGFMT, n); - switch(*b) { -#ifndef WANT_LEAD_0 - case '0': - while(b[0] = b[1]) - b++; - break; -#endif - case 'i': - case 'I': - /* Infinity */ - case 'n': - case 'N': - /* NaN */ - while(*++b); - break; - - default: - /* Fortran 77 insists on having a decimal point... */ - for(;; b++) - switch(*b) { - case 0: - *b++ = '.'; - *b = 0; - goto f__ret; - case '.': - while(*++b); - goto f__ret; - case 'E': - for(c1 = '.', c = 'E'; *b = c1; - c1 = c, c = *++b); - goto f__ret; - } - } - f__ret: - return b - buf; -#endif - } - - static VOID -#ifdef KR_headers -l_put(s) register char *s; -#else -l_put(register char *s) -#endif -{ -#ifdef KR_headers - register int c, (*pn)() = f__putn; -#else - register int c, (*pn)(int) = f__putn; -#endif - while(c = *s++) - (*pn)(c); - } - - static VOID -#ifdef KR_headers -lwrt_F(n) double n; -#else -lwrt_F(double n) -#endif -{ - char buf[LEFBL]; - - if(f__recpos + l_g(buf,n) >= L_len) - donewrec(); - l_put(buf); -} - static VOID -#ifdef KR_headers -lwrt_C(a,b) double a,b; -#else -lwrt_C(double a, double b) -#endif -{ - char *ba, *bb, bufa[LEFBL], bufb[LEFBL]; - int al, bl; - - al = l_g(bufa, a); - for(ba = bufa; *ba == ' '; ba++) - --al; - bl = l_g(bufb, b) + 1; /* intentionally high by 1 */ - for(bb = bufb; *bb == ' '; bb++) - --bl; - if(f__recpos + al + bl + 3 >= L_len) - donewrec(); -#ifdef OMIT_BLANK_CC - else -#endif - PUT(' '); - PUT('('); - l_put(ba); - PUT(','); - if (f__recpos + bl >= L_len) { - (*f__donewrec)(); -#ifndef OMIT_BLANK_CC - PUT(' '); -#endif - } - l_put(bb); - PUT(')'); -} -#ifdef KR_headers -l_write(number,ptr,len,type) ftnint *number,type; char *ptr; ftnlen len; -#else -l_write(ftnint *number, char *ptr, ftnlen len, ftnint type) -#endif -{ -#define Ptr ((flex *)ptr) - int i; - longint x; - double y,z; - real *xx; - doublereal *yy; - for(i=0;i< *number; i++) - { - switch((int)type) - { - default: f__fatal(204,"unknown type in lio"); - case TYINT1: - x = Ptr->flchar; - goto xint; - case TYSHORT: - x=Ptr->flshort; - goto xint; -#ifdef Allow_TYQUAD - case TYQUAD: - x = Ptr->fllongint; - goto xint; -#endif - case TYLONG: - x=Ptr->flint; - xint: lwrt_I(x); - break; - case TYREAL: - y=Ptr->flreal; - goto xfloat; - case TYDREAL: - y=Ptr->fldouble; - xfloat: lwrt_F(y); - break; - case TYCOMPLEX: - xx= &Ptr->flreal; - y = *xx++; - z = *xx; - goto xcomplex; - case TYDCOMPLEX: - yy = &Ptr->fldouble; - y= *yy++; - z = *yy; - xcomplex: - lwrt_C(y,z); - break; - case TYLOGICAL1: - x = Ptr->flchar; - goto xlog; - case TYLOGICAL2: - x = Ptr->flshort; - goto xlog; - case TYLOGICAL: - x = Ptr->flint; - xlog: lwrt_L(Ptr->flint, len); - break; - case TYCHAR: - lwrt_A(ptr,len); - break; - } - ptr += len; - } - return(0); -} diff --git a/gcc/f/runtime/libI77/makefile.netlib b/gcc/f/runtime/libI77/makefile.netlib deleted file mode 100644 index edba1fe8569..00000000000 --- a/gcc/f/runtime/libI77/makefile.netlib +++ /dev/null @@ -1,104 +0,0 @@ -.SUFFIXES: .c .o -CC = cc -CFLAGS = -O -SHELL = /bin/sh - -# compile, then strip unnecessary symbols -.c.o: - $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c - ld -r -x -o $*.xxx $*.o - mv $*.xxx $*.o -## Under Solaris (and other systems that do not understand ld -x), -## omit -x in the ld line above. -## If your system does not have the ld command, comment out -## or remove both the ld and mv lines above. - -OBJ = Version.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \ - fmt.o fmtlib.o ftell_.o iio.o ilnw.o inquire.o lread.o lwrite.o \ - open.o rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o \ - uio.o util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o -libI77.a: $(OBJ) - ar r libI77.a $? - -ranlib libI77.a - -### If your system lacks ranlib, you don't need it; see README. - -install: libI77.a - cp libI77.a /usr/lib/libI77.a - ranlib /usr/lib/libI77.a - -Version.o: Version.c - $(CC) -c Version.c - -# To compile with C++, first "make f2c.h" -f2c.h: f2ch.add - cat /usr/include/f2c.h f2ch.add >f2c.h - - -clean: - rm -f $(OBJ) libI77.a - -clobber: clean - rm -f libI77.a - -backspace.o: fio.h -close.o: fio.h -dfe.o: fio.h -dfe.o: fmt.h -due.o: fio.h -endfile.o: fio.h rawio.h -err.o: fio.h rawio.h -fmt.o: fio.h -fmt.o: fmt.h -ftell_.o: fio.h -iio.o: fio.h -iio.o: fmt.h -ilnw.o: fio.h -ilnw.o: lio.h -inquire.o: fio.h -lread.o: fio.h -lread.o: fmt.h -lread.o: lio.h -lread.o: fp.h -lwrite.o: fio.h -lwrite.o: fmt.h -lwrite.o: lio.h -open.o: fio.h rawio.h -rdfmt.o: fio.h -rdfmt.o: fmt.h -rdfmt.o: fp.h -rewind.o: fio.h -rsfe.o: fio.h -rsfe.o: fmt.h -rsli.o: fio.h -rsli.o: lio.h -rsne.o: fio.h -rsne.o: lio.h -sfe.o: fio.h -sue.o: fio.h -uio.o: fio.h -util.o: fio.h -wref.o: fio.h -wref.o: fmt.h -wref.o: fp.h -wrtfmt.o: fio.h -wrtfmt.o: fmt.h -wsfe.o: fio.h -wsfe.o: fmt.h -wsle.o: fio.h -wsle.o: fmt.h -wsle.o: lio.h -wsne.o: fio.h -wsne.o: lio.h -xwsne.o: fio.h -xwsne.o: lio.h -xwsne.o: fmt.h - -check: - xsum Notice README Version.c backspace.c close.c dfe.c dolio.c \ - due.c endfile.c err.c f2ch.add fio.h fmt.c fmt.h fmtlib.c fp.h \ - ftell_.c iio.c ilnw.c inquire.c lio.h lread.c lwrite.c makefile \ - open.c rawio.h rdfmt.c rewind.c rsfe.c rsli.c rsne.c sfe.c sue.c \ - typesize.c uio.c util.c wref.c wrtfmt.c wsfe.c wsle.c wsne.c \ - xwsne.c >zap - cmp zap libI77.xsum && rm zap || diff libI77.xsum zap diff --git a/gcc/f/runtime/libI77/open.c b/gcc/f/runtime/libI77/open.c deleted file mode 100644 index b08302b5b2c..00000000000 --- a/gcc/f/runtime/libI77/open.c +++ /dev/null @@ -1,245 +0,0 @@ -#ifndef NON_UNIX_STDIO -#include <sys/types.h> -#include <sys/stat.h> -#endif -#include "f2c.h" -#include "fio.h" -#include <string.h> -#include "rawio.h" - -#ifdef KR_headers -extern char *malloc(), *mktemp(); -extern integer f_clos(); -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -extern int f__canseek(FILE*); -extern integer f_clos(cllist*); -#endif - -#ifdef NON_ANSI_RW_MODES -char *f__r_mode[2] = {"r", "r"}; -char *f__w_mode[4] = {"w", "w", "r+w", "r+w"}; -#else -char *f__r_mode[2] = {"rb", "r"}; -char *f__w_mode[4] = {"wb", "w", "r+b", "r+"}; -#endif - -#ifdef KR_headers -f__isdev(s) char *s; -#else -f__isdev(char *s) -#endif -{ -#ifdef NON_UNIX_STDIO - int i, j; - - i = open(s,O_RDONLY); - if (i == -1) - return 0; - j = isatty(i); - close(i); - return j; -#else - struct stat x; - - if(stat(s, &x) == -1) return(0); -#ifdef S_IFMT - switch(x.st_mode&S_IFMT) { - case S_IFREG: - case S_IFDIR: - return(0); - } -#else -#ifdef S_ISREG - /* POSIX version */ - if(S_ISREG(x.st_mode) || S_ISDIR(x.st_mode)) - return(0); - else -#else - Help! How does stat work on this system? -#endif -#endif - return(1); -#endif -} -#ifdef KR_headers -integer f_open(a) olist *a; -#else -integer f_open(olist *a) -#endif -{ unit *b; - integer rv; - char buf[256], *s; - cllist x; - int ufmt; -#ifdef NON_UNIX_STDIO - FILE *tf; -#else - int n; - struct stat stb; -#endif - if(f__init != 1) f_init(); - if(a->ounit>=MXUNIT || a->ounit<0) - err(a->oerr,101,"open"); - f__curunit = b = &f__units[a->ounit]; - if(b->ufd) { - if(a->ofnm==0) - { - same: if (a->oblnk) - b->ublnk = *a->oblnk == 'z' || *a->oblnk == 'Z'; - return(0); - } -#ifdef NON_UNIX_STDIO - if (b->ufnm - && strlen(b->ufnm) == a->ofnmlen - && !strncmp(b->ufnm, b->ufnm, (unsigned)a->ofnmlen)) - goto same; -#else - g_char(a->ofnm,a->ofnmlen,buf); - if (f__inode(buf,&n) == b->uinode && n == b->udev) - goto same; -#endif - x.cunit=a->ounit; - x.csta=0; - x.cerr=a->oerr; - if ((rv = f_clos(&x)) != 0) - return rv; - } - b->url = (int)a->orl; - b->ublnk = a->oblnk && (*a->oblnk == 'z' || *a->oblnk == 'Z'); - if(a->ofm==0) - { if(b->url>0) b->ufmt=0; - else b->ufmt=1; - } - else if(*a->ofm=='f' || *a->ofm == 'F') b->ufmt=1; - else b->ufmt=0; - ufmt = b->ufmt; -#ifdef url_Adjust - if (b->url && !ufmt) - url_Adjust(b->url); -#endif - if (a->ofnm) { - g_char(a->ofnm,a->ofnmlen,buf); - if (!buf[0]) - err(a->oerr,107,"open"); - } - else - sprintf(buf, "fort.%ld", a->ounit); - b->uscrtch = 0; - switch(a->osta ? *a->osta : 'u') - { - case 'o': - case 'O': -#ifdef NON_UNIX_STDIO - if(access(buf,0)) -#else - if(stat(buf,&stb)) -#endif - err(a->oerr,errno,"open"); - break; - case 's': - case 'S': - b->uscrtch=1; -#ifdef _POSIX_SOURCE - tmpnam(buf); -#else - (void) strcpy(buf,"tmp.FXXXXXX"); - (void) mktemp(buf); -#endif - goto replace; - case 'n': - case 'N': -#ifdef NON_UNIX_STDIO - if(!access(buf,0)) -#else - if(!stat(buf,&stb)) -#endif - err(a->oerr,128,"open"); - /* no break */ - case 'r': /* Fortran 90 replace option */ - case 'R': - replace: -#ifdef NON_UNIX_STDIO - if (tf = fopen(buf,f__w_mode[0])) - fclose(tf); -#else - (void) close(creat(buf, 0666)); -#endif - } - - b->ufnm=(char *) malloc((unsigned int)(strlen(buf)+1)); - if(b->ufnm==NULL) err(a->oerr,113,"no space"); - (void) strcpy(b->ufnm,buf); - b->uend=0; - b->uwrt = 0; -#ifdef NON_UNIX_STDIO - if ((s = a->oacc) && (*s == 'd' || *s == 'D')) - ufmt = 0; -#endif - if(f__isdev(buf)) - { b->ufd = fopen(buf,f__r_mode[ufmt]); - if(b->ufd==NULL) err(a->oerr,errno,buf); - } - else { - if(!(b->ufd = fopen(buf, f__r_mode[ufmt]))) { -#ifdef NON_UNIX_STDIO - if (b->ufd = fopen(buf, f__w_mode[ufmt|2])) - b->uwrt = 2; - else if (b->ufd = fopen(buf, f__w_mode[ufmt])) - b->uwrt = 1; - else -#else - if ((n = open(buf,O_WRONLY)) >= 0) - b->uwrt = 2; - else { - n = creat(buf, 0666); - b->uwrt = 1; - } - if (n < 0 - || (b->ufd = fdopen(n, f__w_mode[ufmt])) == NULL) -#endif - err(a->oerr, errno, "open"); - } - } - b->useek=f__canseek(b->ufd); -#ifndef NON_UNIX_STDIO - if((b->uinode=f__inode(buf,&b->udev))==-1) - err(a->oerr,108,"open"); -#endif - if(b->useek) - if (a->orl) - rewind(b->ufd); - else if ((s = a->oacc) && (*s == 'a' || *s == 'A') - && fseek(b->ufd, 0L, SEEK_END)) - err(a->oerr,129,"open"); - return(0); -} -#ifdef KR_headers -fk_open(seq,fmt,n) ftnint n; -#else -fk_open(int seq, int fmt, ftnint n) -#endif -{ char nbuf[10]; - olist a; - int rtn; - int save_init; - - (void) sprintf(nbuf,"fort.%ld",n); - a.oerr=1; - a.ounit=n; - a.ofnm=nbuf; - a.ofnmlen=strlen(nbuf); - a.osta=NULL; - a.oacc= seq==SEQ?"s":"d"; - a.ofm = fmt==FMT?"f":"u"; - a.orl = seq==DIR?1:0; - a.oblnk=NULL; - save_init = f__init; - f__init &= ~2; - rtn = f_open(&a); - f__init = save_init | 1; - return rtn; -} diff --git a/gcc/f/runtime/libI77/rawio.h b/gcc/f/runtime/libI77/rawio.h deleted file mode 100644 index cc5cab8b7bb..00000000000 --- a/gcc/f/runtime/libI77/rawio.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifdef KR_headers -extern FILE *fdopen(); -#else -#if defined (MSDOS) && !defined (GO32) -#include "io.h" -#ifndef WATCOM -#define close _close -#define creat _creat -#define open _open -#define read _read -#define write _write -#endif /*WATCOM*/ -#endif /*MSDOS*/ -#ifdef __cplusplus -extern "C" { -#endif -#if !(defined (MSDOS) && !defined (GO32)) -#ifdef OPEN_DECL -extern int creat(const char*,int), open(const char*,int); -#endif -extern int close(int); -extern int read(int,void*,size_t), write(int,void*,size_t); -extern int unlink(const char*); -#ifndef _POSIX_SOURCE -#ifndef NON_UNIX_STDIO -extern FILE *fdopen(int, const char*); -#endif -#endif -#endif /*KR_HEADERS*/ - -extern char *mktemp(char*); - -#ifdef __cplusplus - } -#endif -#endif - -#ifndef NO_FCNTL -#include <fcntl.h> -#endif - -#ifndef O_WRONLY -#define O_RDONLY 0 -#define O_WRONLY 1 -#endif diff --git a/gcc/f/runtime/libI77/rdfmt.c b/gcc/f/runtime/libI77/rdfmt.c deleted file mode 100644 index 0d8c2b4d9ca..00000000000 --- a/gcc/f/runtime/libI77/rdfmt.c +++ /dev/null @@ -1,476 +0,0 @@ -#include <ctype.h> -#include "f2c.h" -#include "fio.h" - -extern int f__cursor; -#ifdef KR_headers -extern double atof(); -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#endif - -#include "fmt.h" -#include "fp.h" - - static int -#ifdef KR_headers -rd_Z(n,w,len) Uint *n; ftnlen len; -#else -rd_Z(Uint *n, int w, ftnlen len) -#endif -{ - long x[9]; - char *s, *s0, *s1, *se, *t; - int ch, i, w1, w2; - static char hex[256]; - static int one = 1; - int bad = 0; - - if (!hex['0']) { - s = "0123456789"; - while(ch = *s++) - hex[ch] = ch - '0' + 1; - s = "ABCDEF"; - while(ch = *s++) - hex[ch] = hex[ch + 'a' - 'A'] = ch - 'A' + 11; - } - s = s0 = (char *)x; - s1 = (char *)&x[4]; - se = (char *)&x[8]; - if (len > 4*sizeof(long)) - return errno = 117; - while (w) { - GET(ch); - if (ch==',' || ch=='\n') - break; - w--; - if (ch > ' ') { - if (!hex[ch & 0xff]) - bad++; - *s++ = ch; - if (s == se) { - /* discard excess characters */ - for(t = s0, s = s1; t < s1;) - *t++ = *s++; - s = s1; - } - } - } - if (bad) - return errno = 115; - w = (int)len; - w1 = s - s0; - w2 = w1+1 >> 1; - t = (char *)n; - if (*(char *)&one) { - /* little endian */ - t += w - 1; - i = -1; - } - else - i = 1; - for(; w > w2; t += i, --w) - *t = 0; - if (!w) - return 0; - if (w < w2) - s0 = s - (w << 1); - else if (w1 & 1) { - *t = hex[*s0++ & 0xff] - 1; - if (!--w) - return 0; - t += i; - } - do { - *t = hex[*s0 & 0xff]-1 << 4 | hex[s0[1] & 0xff]-1; - t += i; - s0 += 2; - } - while(--w); - return 0; - } - - static int -#ifdef KR_headers -rd_I(n,w,len, base) Uint *n; int w; ftnlen len; register int base; -#else -rd_I(Uint *n, int w, ftnlen len, register int base) -#endif -{ longint x; - int sign,ch; - char s[84], *ps; - ps=s; x=0; - while (w) - { - GET(ch); - if (ch==',' || ch=='\n') break; - *ps=ch; ps++; w--; - } - *ps='\0'; - ps=s; - while (*ps==' ') ps++; - if (*ps=='-') { sign=1; ps++; } - else { sign=0; if (*ps=='+') ps++; } -loop: while (*ps>='0' && *ps<='9') { x=x*base+(*ps-'0'); ps++; } - if (*ps==' ') {if (f__cblank) x *= base; ps++; goto loop;} - if(sign) x = -x; - if(len==sizeof(integer)) n->il=x; - else if(len == sizeof(char)) n->ic = (char)x; -#ifdef Allow_TYQUAD - else if (len == sizeof(longint)) n->ili = x; -#endif - else n->is = (short)x; - if (*ps) return(errno=115); else return(0); -} - static int -#ifdef KR_headers -rd_L(n,w,len) ftnint *n; ftnlen len; -#else -rd_L(ftnint *n, int w, ftnlen len) -#endif -{ int ch, lv; - char s[84], *ps; - ps=s; - while (w) { - GET(ch); - if (ch==','||ch=='\n') break; - *ps=ch; - ps++; w--; - } - *ps='\0'; - ps=s; while (*ps==' ') ps++; - if (*ps=='.') ps++; - if (*ps=='t' || *ps == 'T') - lv = 1; - else if (*ps == 'f' || *ps == 'F') - lv = 0; - else return(errno=116); - switch(len) { - case sizeof(char): *(char *)n = (char)lv; break; - case sizeof(short): *(short *)n = (short)lv; break; - default: *n = lv; - } - return 0; -} - - static int -#ifdef KR_headers -rd_F(p, w, d, len) ufloat *p; ftnlen len; -#else -rd_F(ufloat *p, int w, int d, ftnlen len) -#endif -{ - char s[FMAX+EXPMAXDIGS+4]; - register int ch; - register char *sp, *spe, *sp1; - double x; - int scale1, se; - long e, exp; - - sp1 = sp = s; - spe = sp + FMAX; - exp = -d; - x = 0.; - - do { - GET(ch); - w--; - } while (ch == ' ' && w); - switch(ch) { - case '-': *sp++ = ch; sp1++; spe++; - case '+': - if (!w) goto zero; - --w; - GET(ch); - } - while(ch == ' ') { -blankdrop: - if (!w--) goto zero; GET(ch); } - while(ch == '0') - { if (!w--) goto zero; GET(ch); } - if (ch == ' ' && f__cblank) - goto blankdrop; - scale1 = f__scale; - while(isdigit(ch)) { -digloop1: - if (sp < spe) *sp++ = ch; - else ++exp; -digloop1e: - if (!w--) goto done; - GET(ch); - } - if (ch == ' ') { - if (f__cblank) - { ch = '0'; goto digloop1; } - goto digloop1e; - } - if (ch == '.') { - exp += d; - if (!w--) goto done; - GET(ch); - if (sp == sp1) { /* no digits yet */ - while(ch == '0') { -skip01: - --exp; -skip0: - if (!w--) goto done; - GET(ch); - } - if (ch == ' ') { - if (f__cblank) goto skip01; - goto skip0; - } - } - while(isdigit(ch)) { -digloop2: - if (sp < spe) - { *sp++ = ch; --exp; } -digloop2e: - if (!w--) goto done; - GET(ch); - } - if (ch == ' ') { - if (f__cblank) - { ch = '0'; goto digloop2; } - goto digloop2e; - } - } - switch(ch) { - default: - break; - case '-': se = 1; goto signonly; - case '+': se = 0; goto signonly; - case 'e': - case 'E': - case 'd': - case 'D': - if (!w--) - goto bad; - GET(ch); - while(ch == ' ') { - if (!w--) - goto bad; - GET(ch); - } - se = 0; - switch(ch) { - case '-': se = 1; - case '+': -signonly: - if (!w--) - goto bad; - GET(ch); - } - while(ch == ' ') { - if (!w--) - goto bad; - GET(ch); - } - if (!isdigit(ch)) - goto bad; - - e = ch - '0'; - for(;;) { - if (!w--) - { ch = '\n'; break; } - GET(ch); - if (!isdigit(ch)) { - if (ch == ' ') { - if (f__cblank) - ch = '0'; - else continue; - } - else - break; - } - e = 10*e + ch - '0'; - if (e > EXPMAX && sp > sp1) - goto bad; - } - if (se) - exp -= e; - else - exp += e; - scale1 = 0; - } - switch(ch) { - case '\n': - case ',': - break; - default: -bad: - return (errno = 115); - } -done: - if (sp > sp1) { - while(*--sp == '0') - ++exp; - if (exp -= scale1) - sprintf(sp+1, "e%ld", exp); - else - sp[1] = 0; - x = atof(s); - } -zero: - if (len == sizeof(real)) - p->pf = x; - else - p->pd = x; - return(0); - } - - - static int -#ifdef KR_headers -rd_A(p,len) char *p; ftnlen len; -#else -rd_A(char *p, ftnlen len) -#endif -{ int i,ch; - for(i=0;i<len;i++) - { GET(ch); - *p++=VAL(ch); - } - return(0); -} - static int -#ifdef KR_headers -rd_AW(p,w,len) char *p; ftnlen len; -#else -rd_AW(char *p, int w, ftnlen len) -#endif -{ int i,ch; - if(w>=len) - { for(i=0;i<w-len;i++) - GET(ch); - for(i=0;i<len;i++) - { GET(ch); - *p++=VAL(ch); - } - return(0); - } - for(i=0;i<w;i++) - { GET(ch); - *p++=VAL(ch); - } - for(i=0;i<len-w;i++) *p++=' '; - return(0); -} - static int -#ifdef KR_headers -rd_H(n,s) char *s; -#else -rd_H(int n, char *s) -#endif -{ int i,ch; - for(i=0;i<n;i++) - if((ch=(*f__getn)())<0) return(ch); - else *s++ = ch=='\n'?' ':ch; - return(1); -} - static int -#ifdef KR_headers -rd_POS(s) char *s; -#else -rd_POS(char *s) -#endif -{ char quote; - int ch; - quote= *s++; - for(;*s;s++) - if(*s==quote && *(s+1)!=quote) break; - else if((ch=(*f__getn)())<0) return(ch); - else *s = ch=='\n'?' ':ch; - return(1); -} -#ifdef KR_headers -rd_ed(p,ptr,len) struct syl *p; char *ptr; ftnlen len; -#else -rd_ed(struct syl *p, char *ptr, ftnlen len) -#endif -{ int ch; - for(;f__cursor>0;f__cursor--) if((ch=(*f__getn)())<0) return(ch); - if(f__cursor<0) - { if(f__recpos+f__cursor < 0) /*err(elist->cierr,110,"fmt")*/ - f__cursor = -f__recpos; /* is this in the standard? */ - if(f__external == 0) { - extern char *f__icptr; - f__icptr += f__cursor; - } - else if(f__curunit && f__curunit->useek) - (void) fseek(f__cf,(long) f__cursor,SEEK_CUR); - else - err(f__elist->cierr,106,"fmt"); - f__recpos += f__cursor; - f__cursor=0; - } - switch(p->op) - { - default: fprintf(stderr,"rd_ed, unexpected code: %d\n", p->op); - sig_die(f__fmtbuf, 1); - case IM: - case I: ch = rd_I((Uint *)ptr,p->p1,len, 10); - break; - - /* O and OM don't work right for character, double, complex, */ - /* or doublecomplex, and they differ from Fortran 90 in */ - /* showing a minus sign for negative values. */ - - case OM: - case O: ch = rd_I((Uint *)ptr, p->p1, len, 8); - break; - case L: ch = rd_L((ftnint *)ptr,p->p1,len); - break; - case A: ch = rd_A(ptr,len); - break; - case AW: - ch = rd_AW(ptr,p->p1,len); - break; - case E: case EE: - case D: - case G: - case GE: - case F: ch = rd_F((ufloat *)ptr,p->p1,p->p2,len); - break; - - /* Z and ZM assume 8-bit bytes. */ - - case ZM: - case Z: - ch = rd_Z((Uint *)ptr, p->p1, len); - break; - } - if(ch == 0) return(ch); - else if(ch == EOF) return(EOF); - if (f__cf) - clearerr(f__cf); - return(errno); -} -#ifdef KR_headers -rd_ned(p) struct syl *p; -#else -rd_ned(struct syl *p) -#endif -{ - switch(p->op) - { - default: fprintf(stderr,"rd_ned, unexpected code: %d\n", p->op); - sig_die(f__fmtbuf, 1); - case APOS: - return(rd_POS(*(char **)&p->p2)); - case H: return(rd_H(p->p1,*(char **)&p->p2)); - case SLASH: return((*f__donewrec)()); - case TR: - case X: f__cursor += p->p1; - return(1); - case T: f__cursor=p->p1-f__recpos - 1; - return(1); - case TL: f__cursor -= p->p1; - if(f__cursor < -f__recpos) /* TL1000, 1X */ - f__cursor = -f__recpos; - return(1); - } -} diff --git a/gcc/f/runtime/libI77/rewind.c b/gcc/f/runtime/libI77/rewind.c deleted file mode 100644 index 9ba4b239f32..00000000000 --- a/gcc/f/runtime/libI77/rewind.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#ifdef KR_headers -integer f_rew(a) alist *a; -#else -integer f_rew(alist *a) -#endif -{ - unit *b; - if (f__init & 2) - f__fatal (131, "I/O recursion"); - if(a->aunit>=MXUNIT || a->aunit<0) - err(a->aerr,101,"rewind"); - b = &f__units[a->aunit]; - if(b->ufd == NULL || b->uwrt == 3) - return(0); - if(!b->useek) - err(a->aerr,106,"rewind"); - if(b->uwrt) { - (void) t_runc(a); - b->uwrt = 3; - } - rewind(b->ufd); - b->uend=0; - return(0); -} diff --git a/gcc/f/runtime/libI77/rsfe.c b/gcc/f/runtime/libI77/rsfe.c deleted file mode 100644 index 02a9e6d4680..00000000000 --- a/gcc/f/runtime/libI77/rsfe.c +++ /dev/null @@ -1,80 +0,0 @@ -/* read sequential formatted external */ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" - -xrd_SL(Void) -{ int ch; - if(!f__curunit->uend) - while((ch=getc(f__cf))!='\n') - if (ch == EOF) { - f__curunit->uend = 1; - break; - } - f__cursor=f__recpos=0; - return(1); -} -x_getc(Void) -{ int ch; - if(f__curunit->uend) return(EOF); - ch = getc(f__cf); - if(ch!=EOF && ch!='\n') - { f__recpos++; - return(ch); - } - if(ch=='\n') - { (void) ungetc(ch,f__cf); - return(ch); - } - if(f__curunit->uend || feof(f__cf)) - { errno=0; - f__curunit->uend=1; - return(-1); - } - return(-1); -} -x_endp(Void) -{ - xrd_SL(); - return f__curunit->uend == 1 ? EOF : 0; -} -x_rev(Void) -{ - (void) xrd_SL(); - return(0); -} -#ifdef KR_headers -integer s_rsfe(a) cilist *a; /* start */ -#else -integer s_rsfe(cilist *a) /* start */ -#endif -{ int n; - if(f__init != 1) f_init(); - f__init = 3; - if(n=c_sfe(a)) return(n); - f__reading=1; - f__sequential=1; - f__formatted=1; - f__external=1; - f__elist=a; - f__cursor=f__recpos=0; - f__scale=0; - f__fmtbuf=a->cifmt; - f__curunit= &f__units[a->ciunit]; - f__cf=f__curunit->ufd; - if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio"); - f__getn= x_getc; - f__doed= rd_ed; - f__doned= rd_ned; - fmt_bg(); - f__doend=x_endp; - f__donewrec=xrd_SL; - f__dorevert=x_rev; - f__cblank=f__curunit->ublnk; - f__cplus=0; - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr,errno,"read start"); - if(f__curunit->uend) - err(f__elist->ciend,(EOF),"read start"); - return(0); -} diff --git a/gcc/f/runtime/libI77/rsli.c b/gcc/f/runtime/libI77/rsli.c deleted file mode 100644 index baf2ba54873..00000000000 --- a/gcc/f/runtime/libI77/rsli.c +++ /dev/null @@ -1,105 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "lio.h" -#include "fmt.h" /* for f__doend */ - -extern flag f__lquit; -extern int f__lcount; -extern char *f__icptr; -extern char *f__icend; -extern icilist *f__svic; -extern int f__icnum, f__recpos; - -static int i_getc(Void) -{ - if(f__recpos >= f__svic->icirlen) { - if (f__recpos++ == f__svic->icirlen) - return '\n'; - z_rnew(); - } - f__recpos++; - if(f__icptr >= f__icend) - return EOF; - return(*f__icptr++); - } - - static -#ifdef KR_headers -int i_ungetc(ch, f) int ch; FILE *f; -#else -int i_ungetc(int ch, FILE *f) -#endif -{ - if (--f__recpos == f__svic->icirlen) - return '\n'; - if (f__recpos < -1) - err(f__svic->icierr,110,"recend"); - /* *--icptr == ch, and icptr may point to read-only memory */ - return *--f__icptr /* = ch */; - } - - static void -#ifdef KR_headers -c_lir(a) icilist *a; -#else -c_lir(icilist *a) -#endif -{ - extern int l_eof; - if(f__init != 1) f_init(); - f__init = 3; - f__reading = 1; - f__external = 0; - f__formatted = 1; - f__svic = a; - L_len = a->icirlen; - f__recpos = -1; - f__icnum = f__recpos = 0; - f__cursor = 0; - l_getc = i_getc; - l_ungetc = i_ungetc; - l_eof = 0; - f__icptr = a->iciunit; - f__icend = f__icptr + a->icirlen*a->icirnum; - f__cf = 0; - f__curunit = 0; - f__elist = (cilist *)a; - } - - -#ifdef KR_headers -integer s_rsli(a) icilist *a; -#else -integer s_rsli(icilist *a) -#endif -{ - f__lioproc = l_read; - f__lquit = 0; - f__lcount = 0; - c_lir(a); - f__doend = 0; - return(0); - } - -integer e_rsli(Void) -{ f__init = 1; return 0; } - -#ifdef KR_headers -integer s_rsni(a) icilist *a; -#else -extern int x_rsne(cilist*); - -integer s_rsni(icilist *a) -#endif -{ - extern int nml_read; - integer rv; - cilist ca; - ca.ciend = a->iciend; - ca.cierr = a->icierr; - ca.cifmt = a->icifmt; - c_lir(a); - rv = x_rsne(&ca); - nml_read = 0; - return rv; - } diff --git a/gcc/f/runtime/libI77/rsne.c b/gcc/f/runtime/libI77/rsne.c deleted file mode 100644 index 86bb2164f12..00000000000 --- a/gcc/f/runtime/libI77/rsne.c +++ /dev/null @@ -1,607 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "lio.h" - -#define MAX_NL_CACHE 3 /* maximum number of namelist hash tables to cache */ -#define MAXDIM 20 /* maximum number of subscripts */ - - struct dimen { - ftnlen extent; - ftnlen curval; - ftnlen delta; - ftnlen stride; - }; - typedef struct dimen dimen; - - struct hashentry { - struct hashentry *next; - char *name; - Vardesc *vd; - }; - typedef struct hashentry hashentry; - - struct hashtab { - struct hashtab *next; - Namelist *nl; - int htsize; - hashentry *tab[1]; - }; - typedef struct hashtab hashtab; - - static hashtab *nl_cache; - static int n_nlcache; - static hashentry **zot; - static int colonseen; - extern ftnlen f__typesize[]; - - extern flag f__lquit; - extern int f__lcount, nml_read; - extern t_getc(Void); - -#ifdef KR_headers - extern char *malloc(), *memset(); - -#ifdef ungetc - static int -un_getc(x,f__cf) int x; FILE *f__cf; -{ return ungetc(x,f__cf); } -#else -#define un_getc ungetc - extern int ungetc(); -#endif - -#else -#undef abs -#undef min -#undef max -#include <stdlib.h> -#include <string.h> - -#ifdef ungetc - static int -un_getc(int x, FILE *f__cf) -{ return ungetc(x,f__cf); } -#else -#define un_getc ungetc -extern int ungetc(int, FILE*); /* for systems with a buggy stdio.h */ -#endif -#endif - - static Vardesc * -#ifdef KR_headers -hash(ht, s) hashtab *ht; register char *s; -#else -hash(hashtab *ht, register char *s) -#endif -{ - register int c, x; - register hashentry *h; - char *s0 = s; - - for(x = 0; c = *s++; x = x & 0x4000 ? ((x << 1) & 0x7fff) + 1 : x << 1) - x += c; - for(h = *(zot = ht->tab + x % ht->htsize); h; h = h->next) - if (!strcmp(s0, h->name)) - return h->vd; - return 0; - } - - hashtab * -#ifdef KR_headers -mk_hashtab(nl) Namelist *nl; -#else -mk_hashtab(Namelist *nl) -#endif -{ - int nht, nv; - hashtab *ht; - Vardesc *v, **vd, **vde; - hashentry *he; - - hashtab **x, **x0, *y; - for(x = &nl_cache; y = *x; x0 = x, x = &y->next) - if (nl == y->nl) - return y; - if (n_nlcache >= MAX_NL_CACHE) { - /* discard least recently used namelist hash table */ - y = *x0; - free((char *)y->next); - y->next = 0; - } - else - n_nlcache++; - nv = nl->nvars; - if (nv >= 0x4000) - nht = 0x7fff; - else { - for(nht = 1; nht < nv; nht <<= 1); - nht += nht - 1; - } - ht = (hashtab *)malloc(sizeof(hashtab) + (nht-1)*sizeof(hashentry *) - + nv*sizeof(hashentry)); - if (!ht) - return 0; - he = (hashentry *)&ht->tab[nht]; - ht->nl = nl; - ht->htsize = nht; - ht->next = nl_cache; - nl_cache = ht; - memset((char *)ht->tab, 0, nht*sizeof(hashentry *)); - vd = nl->vars; - vde = vd + nv; - while(vd < vde) { - v = *vd++; - if (!hash(ht, v->name)) { - he->next = *zot; - *zot = he; - he->name = v->name; - he->vd = v; - he++; - } - } - return ht; - } - -static char Alpha[256], Alphanum[256]; - - static VOID -nl_init(Void) { - register char *s; - register int c; - - for(s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; c = *s++; ) - Alpha[c] - = Alphanum[c] - = Alpha[c + 'a' - 'A'] - = Alphanum[c + 'a' - 'A'] - = c; - for(s = "0123456789_"; c = *s++; ) - Alphanum[c] = c; - } - -#define GETC(x) (x=(*l_getc)()) -#define Ungetc(x,y) (*l_ungetc)(x,y) - - static int -#ifdef KR_headers -getname(s, slen) register char *s; int slen; -#else -getname(register char *s, int slen) -#endif -{ - register char *se = s + slen - 1; - register int ch; - - GETC(ch); - if (!(*s++ = Alpha[ch & 0xff])) { - if (ch != EOF) - ch = 115; - errfl(f__elist->cierr, ch, "namelist read"); - } - while(*s = Alphanum[GETC(ch) & 0xff]) - if (s < se) - s++; - if (ch == EOF) - err(f__elist->cierr, EOF, "namelist read"); - if (ch > ' ') - Ungetc(ch,f__cf); - return *s = 0; - } - - static int -#ifdef KR_headers -getnum(chp, val) int *chp; ftnlen *val; -#else -getnum(int *chp, ftnlen *val) -#endif -{ - register int ch, sign; - register ftnlen x; - - while(GETC(ch) <= ' ' && ch >= 0); - if (ch == '-') { - sign = 1; - GETC(ch); - } - else { - sign = 0; - if (ch == '+') - GETC(ch); - } - x = ch - '0'; - if (x < 0 || x > 9) - return 115; - while(GETC(ch) >= '0' && ch <= '9') - x = 10*x + ch - '0'; - while(ch <= ' ' && ch >= 0) - GETC(ch); - if (ch == EOF) - return EOF; - *val = sign ? -x : x; - *chp = ch; - return 0; - } - - static int -#ifdef KR_headers -getdimen(chp, d, delta, extent, x1) - int *chp; dimen *d; ftnlen delta, extent, *x1; -#else -getdimen(int *chp, dimen *d, ftnlen delta, ftnlen extent, ftnlen *x1) -#endif -{ - register int k; - ftnlen x2, x3; - - if (k = getnum(chp, x1)) - return k; - x3 = 1; - if (*chp == ':') { - if (k = getnum(chp, &x2)) - return k; - x2 -= *x1; - if (*chp == ':') { - if (k = getnum(chp, &x3)) - return k; - if (!x3) - return 123; - x2 /= x3; - colonseen = 1; - } - if (x2 < 0 || x2 >= extent) - return 123; - d->extent = x2 + 1; - } - else - d->extent = 1; - d->curval = 0; - d->delta = delta; - d->stride = x3; - return 0; - } - -#ifndef No_Namelist_Questions - static Void -#ifdef KR_headers -print_ne(a) cilist *a; -#else -print_ne(cilist *a) -#endif -{ - flag intext = f__external; - int rpsave = f__recpos; - FILE *cfsave = f__cf; - unit *usave = f__curunit; - cilist t; - t = *a; - t.ciunit = 6; - s_wsne(&t); - fflush(f__cf); - f__external = intext; - f__reading = 1; - f__recpos = rpsave; - f__cf = cfsave; - f__curunit = usave; - f__elist = a; - } -#endif - - static char where0[] = "namelist read start "; - -#ifdef KR_headers -x_rsne(a) cilist *a; -#else -x_rsne(cilist *a) -#endif -{ - int ch, got1, k, n, nd, quote, readall; - Namelist *nl; - static char where[] = "namelist read"; - char buf[64]; - hashtab *ht; - Vardesc *v; - dimen *dn, *dn0, *dn1; - ftnlen *dims, *dims1; - ftnlen b, b0, b1, ex, no, no1, nomax, size, span; - ftnint type; - char *vaddr; - long iva, ivae; - dimen dimens[MAXDIM], substr; - - if (!Alpha['a']) - nl_init(); - f__reading=1; - f__formatted=1; - got1 = 0; - top: - for(;;) switch(GETC(ch)) { - case EOF: - eof: - err(a->ciend,(EOF),where0); - case '&': - case '$': - goto have_amp; -#ifndef No_Namelist_Questions - case '?': - print_ne(a); - continue; -#endif - default: - if (ch <= ' ' && ch >= 0) - continue; -#ifndef No_Namelist_Comments - while(GETC(ch) != '\n') - if (ch == EOF) - goto eof; -#else - errfl(a->cierr, 115, where0); -#endif - } - have_amp: - if (ch = getname(buf,(int) sizeof(buf))) - return ch; - nl = (Namelist *)a->cifmt; - if (strcmp(buf, nl->name)) -#ifdef No_Bad_Namelist_Skip - errfl(a->cierr, 118, where0); -#else - { - fprintf(stderr, - "Skipping namelist \"%s\": seeking namelist \"%s\".\n", - buf, nl->name); - fflush(stderr); - for(;;) switch(GETC(ch)) { - case EOF: - err(a->ciend, EOF, where0); - case '/': - case '&': - case '$': - if (f__external) - e_rsle(); - else - z_rnew(); - goto top; - case '"': - case '\'': - quote = ch; - more_quoted: - while(GETC(ch) != quote) - if (ch == EOF) - err(a->ciend, EOF, where0); - if (GETC(ch) == quote) - goto more_quoted; - Ungetc(ch,f__cf); - default: - continue; - } - } -#endif - ht = mk_hashtab(nl); - if (!ht) - errfl(f__elist->cierr, 113, where0); - for(;;) { - for(;;) switch(GETC(ch)) { - case EOF: - if (got1) - return 0; - err(a->ciend, EOF, where0); - case '/': - case '$': - case '&': - return 0; - default: - if (ch <= ' ' && ch >= 0 || ch == ',') - continue; - Ungetc(ch,f__cf); - if (ch = getname(buf,(int) sizeof(buf))) - return ch; - goto havename; - } - havename: - v = hash(ht,buf); - if (!v) - errfl(a->cierr, 119, where); - while(GETC(ch) <= ' ' && ch >= 0); - vaddr = v->addr; - type = v->type; - if (type < 0) { - size = -type; - type = TYCHAR; - } - else - size = f__typesize[type]; - ivae = size; - iva = readall = 0; - if (ch == '(' /*)*/ ) { - dn = dimens; - if (!(dims = v->dims)) { - if (type != TYCHAR) - errfl(a->cierr, 122, where); - if (k = getdimen(&ch, dn, (ftnlen)size, - (ftnlen)size, &b)) - errfl(a->cierr, k, where); - if (ch != ')') - errfl(a->cierr, 115, where); - b1 = dn->extent; - if (--b < 0 || b + b1 > size) - return 124; - iva += b; - size = b1; - while(GETC(ch) <= ' ' && ch >= 0); - goto scalar; - } - nd = (int)dims[0]; - nomax = span = dims[1]; - ivae = iva + size*nomax; - colonseen = 0; - if (k = getdimen(&ch, dn, size, nomax, &b)) - errfl(a->cierr, k, where); - no = dn->extent; - b0 = dims[2]; - dims1 = dims += 3; - ex = 1; - for(n = 1; n++ < nd; dims++) { - if (ch != ',') - errfl(a->cierr, 115, where); - dn1 = dn + 1; - span /= *dims; - if (k = getdimen(&ch, dn1, dn->delta**dims, - span, &b1)) - errfl(a->cierr, k, where); - ex *= *dims; - b += b1*ex; - no *= dn1->extent; - dn = dn1; - } - if (ch != ')') - errfl(a->cierr, 115, where); - readall = 1 - colonseen; - b -= b0; - if (b < 0 || b >= nomax) - errfl(a->cierr, 125, where); - iva += size * b; - dims = dims1; - while(GETC(ch) <= ' ' && ch >= 0); - no1 = 1; - dn0 = dimens; - if (type == TYCHAR && ch == '(' /*)*/) { - if (k = getdimen(&ch, &substr, size, size, &b)) - errfl(a->cierr, k, where); - if (ch != ')') - errfl(a->cierr, 115, where); - b1 = substr.extent; - if (--b < 0 || b + b1 > size) - return 124; - iva += b; - b0 = size; - size = b1; - while(GETC(ch) <= ' ' && ch >= 0); - if (b1 < b0) - goto delta_adj; - } - if (readall) - goto delta_adj; - for(; dn0 < dn; dn0++) { - if (dn0->extent != *dims++ || dn0->stride != 1) - break; - no1 *= dn0->extent; - } - if (dn0 == dimens && dimens[0].stride == 1) { - no1 = dimens[0].extent; - dn0++; - } - delta_adj: - ex = 0; - for(dn1 = dn0; dn1 <= dn; dn1++) - ex += (dn1->extent-1) - * (dn1->delta *= dn1->stride); - for(dn1 = dn; dn1 > dn0; dn1--) { - ex -= (dn1->extent - 1) * dn1->delta; - dn1->delta -= ex; - } - } - else if (dims = v->dims) { - no = no1 = dims[1]; - ivae = iva + no*size; - } - else - scalar: - no = no1 = 1; - if (ch != '=') - errfl(a->cierr, 115, where); - got1 = nml_read = 1; - f__lcount = 0; - readloop: - for(;;) { - if (iva >= ivae || iva < 0) { - f__lquit = 1; - goto mustend; - } - else if (iva + no1*size > ivae) - no1 = (ivae - iva)/size; - f__lquit = 0; - if (k = l_read(&no1, vaddr + iva, size, type)) - return k; - if (f__lquit == 1) - return 0; - if (readall) { - iva += dn0->delta; - if (f__lcount > 0) { - no1 = (ivae - iva)/size; - if (no1 > f__lcount) - no1 = f__lcount; - iva += no1 * dn0->delta; - if (k = l_read(&no1, vaddr + iva, - size, type)) - return k; - } - } - mustend: - GETC(ch); - if (readall) - if (iva >= ivae) - readall = 0; - else for(;;) { - switch(ch) { - case ' ': - case '\t': - case '\n': - GETC(ch); - continue; - } - break; - } - if (ch == '/' || ch == '$' || ch == '&') { - f__lquit = 1; - return 0; - } - else if (f__lquit) { - while(ch <= ' ' && ch >= 0) - GETC(ch); - Ungetc(ch,f__cf); - if (!Alpha[ch & 0xff] && ch >= 0) - errfl(a->cierr, 125, where); - break; - } - Ungetc(ch,f__cf); - if (readall && !Alpha[ch & 0xff]) - goto readloop; - if ((no -= no1) <= 0) - break; - for(dn1 = dn0; dn1 <= dn; dn1++) { - if (++dn1->curval < dn1->extent) { - iva += dn1->delta; - goto readloop; - } - dn1->curval = 0; - } - break; - } - } - } - - integer -#ifdef KR_headers -s_rsne(a) cilist *a; -#else -s_rsne(cilist *a) -#endif -{ - extern int l_eof; - int n; - - f__external=1; - l_eof = 0; - if(n = c_le(a)) - return n; - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr,errno,where0); - l_getc = t_getc; - l_ungetc = un_getc; - f__doend = xrd_SL; - n = x_rsne(a); - nml_read = 0; - if (n) - return n; - return e_rsle(); - } diff --git a/gcc/f/runtime/libI77/sfe.c b/gcc/f/runtime/libI77/sfe.c deleted file mode 100644 index 1bb10d9052d..00000000000 --- a/gcc/f/runtime/libI77/sfe.c +++ /dev/null @@ -1,44 +0,0 @@ -/* sequential formatted external common routines*/ -#include "f2c.h" -#include "fio.h" - -extern char *f__fmtbuf; - -integer e_rsfe(Void) -{ int n; - f__init = 1; - n=en_fio(); - if (f__cf == stdout) - fflush(stdout); - else if (f__cf == stderr) - fflush(stderr); - f__fmtbuf=NULL; - return(n); -} -#ifdef KR_headers -c_sfe(a) cilist *a; /* check */ -#else -c_sfe(cilist *a) /* check */ -#endif -{ unit *p; - if(a->ciunit >= MXUNIT || a->ciunit<0) - err(a->cierr,101,"startio"); - p = &f__units[a->ciunit]; - if(p->ufd==NULL && fk_open(SEQ,FMT,a->ciunit)) err(a->cierr,114,"sfe"); - if(!p->ufmt) err(a->cierr,102,"sfe"); - return(0); -} -integer e_wsfe(Void) -{ -#ifdef ALWAYS_FLUSH - int n; - f__init = 1; - n = en_fio(); - f__fmtbuf=NULL; - if (!n && fflush(f__cf)) - err(f__elist->cierr, errno, "write end"); - return n; -#else - return(e_rsfe()); -#endif -} diff --git a/gcc/f/runtime/libI77/sue.c b/gcc/f/runtime/libI77/sue.c deleted file mode 100644 index 8f2ea314f30..00000000000 --- a/gcc/f/runtime/libI77/sue.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "f2c.h" -#include "fio.h" -extern uiolen f__reclen; -long f__recloc; - -#ifdef KR_headers -c_sue(a) cilist *a; -#else -c_sue(cilist *a) -#endif -{ - if(a->ciunit >= MXUNIT || a->ciunit < 0) - err(a->cierr,101,"startio"); - f__external=f__sequential=1; - f__formatted=0; - f__curunit = &f__units[a->ciunit]; - f__elist=a; - if(f__curunit->ufd==NULL && fk_open(SEQ,UNF,a->ciunit)) - err(a->cierr,114,"sue"); - f__cf=f__curunit->ufd; - if(f__curunit->ufmt) err(a->cierr,103,"sue"); - if(!f__curunit->useek) err(a->cierr,103,"sue"); - return(0); -} -#ifdef KR_headers -integer s_rsue(a) cilist *a; -#else -integer s_rsue(cilist *a) -#endif -{ - int n; - if(f__init != 1) f_init(); - f__init = 3; - f__reading=1; - if(n=c_sue(a)) return(n); - f__recpos=0; - if(f__curunit->uwrt && f__nowreading(f__curunit)) - err(a->cierr, errno, "read start"); - if(fread((char *)&f__reclen,sizeof(uiolen),1,f__cf) - != 1) - { if(feof(f__cf)) - { f__curunit->uend = 1; - err(a->ciend, EOF, "start"); - } - clearerr(f__cf); - err(a->cierr, errno, "start"); - } - return(0); -} -#ifdef KR_headers -integer s_wsue(a) cilist *a; -#else -integer s_wsue(cilist *a) -#endif -{ - int n; - if(f__init != 1) f_init(); - f__init = 3; - if(n=c_sue(a)) return(n); - f__reading=0; - f__reclen=0; - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr, errno, "write start"); - f__recloc=ftell(f__cf); - (void) fseek(f__cf,(long)sizeof(uiolen),SEEK_CUR); - return(0); -} -integer e_wsue(Void) -{ long loc; - f__init = 1; - fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); -#ifdef ALWAYS_FLUSH - if (fflush(f__cf)) - err(f__elist->cierr, errno, "write end"); -#endif - loc=ftell(f__cf); - fseek(f__cf,f__recloc,SEEK_SET); - fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); - fseek(f__cf,loc,SEEK_SET); - return(0); -} -integer e_rsue(Void) -{ - f__init = 1; - (void) fseek(f__cf,(long)(f__reclen-f__recpos+sizeof(uiolen)),SEEK_CUR); - return(0); -} diff --git a/gcc/f/runtime/libI77/typesize.c b/gcc/f/runtime/libI77/typesize.c deleted file mode 100644 index 1cb20ff2863..00000000000 --- a/gcc/f/runtime/libI77/typesize.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "f2c.h" - -ftnlen f__typesize[] = { 0, 0, sizeof(shortint), sizeof(integer), - sizeof(real), sizeof(doublereal), - sizeof(complex), sizeof(doublecomplex), - sizeof(logical), sizeof(char), - 0, sizeof(integer1), - sizeof(logical1), sizeof(shortlogical), -#ifdef Allow_TYQUAD - sizeof(longint), -#endif - 0}; diff --git a/gcc/f/runtime/libI77/uio.c b/gcc/f/runtime/libI77/uio.c deleted file mode 100644 index ea733cec06c..00000000000 --- a/gcc/f/runtime/libI77/uio.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include <sys/types.h> -uiolen f__reclen; - -#ifdef KR_headers -do_us(number,ptr,len) ftnint *number; char *ptr; ftnlen len; -#else -do_us(ftnint *number, char *ptr, ftnlen len) -#endif -{ - if(f__reading) - { - f__recpos += (int)(*number * len); - if(f__recpos>f__reclen) - err(f__elist->cierr, 110, "do_us"); - if (fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number) - err(f__elist->ciend, EOF, "do_us"); - return(0); - } - else - { - f__reclen += *number * len; - (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf); - return(0); - } -} -#ifdef KR_headers -integer do_ud(number,ptr,len) ftnint *number; char *ptr; ftnlen len; -#else -integer do_ud(ftnint *number, char *ptr, ftnlen len) -#endif -{ - f__recpos += (int)(*number * len); - if(f__recpos > f__curunit->url && f__curunit->url!=1) - err(f__elist->cierr,110,"do_ud"); - if(f__reading) - { -#ifdef Pad_UDread -#ifdef KR_headers - int i; -#else - size_t i; -#endif - if (!(i = fread(ptr,(size_t)len,(size_t)(*number),f__cf)) - && !(f__recpos - *number*len)) - err(f__elist->cierr,EOF,"do_ud"); - if (i < *number) - memset(ptr + i*len, 0, (*number - i)*len); - return 0; -#else - if(fread(ptr,(size_t)len,(size_t)(*number),f__cf) != *number) - err(f__elist->cierr,EOF,"do_ud"); - else return(0); -#endif - } - (void) fwrite(ptr,(size_t)len,(size_t)(*number),f__cf); - return(0); -} -#ifdef KR_headers -integer do_uio(number,ptr,len) ftnint *number; char *ptr; ftnlen len; -#else -integer do_uio(ftnint *number, char *ptr, ftnlen len) -#endif -{ - if(f__sequential) - return(do_us(number,ptr,len)); - else return(do_ud(number,ptr,len)); -} diff --git a/gcc/f/runtime/libI77/util.c b/gcc/f/runtime/libI77/util.c deleted file mode 100644 index a24932533c1..00000000000 --- a/gcc/f/runtime/libI77/util.c +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef NON_UNIX_STDIO -#include <sys/types.h> -#include <sys/stat.h> -#endif -#include "f2c.h" -#include "fio.h" - - VOID -#ifdef KR_headers -g_char(a,alen,b) char *a,*b; ftnlen alen; -#else -g_char(char *a, ftnlen alen, char *b) -#endif -{ - char *x = a + alen, *y = b + alen; - - for(;; y--) { - if (x <= a) { - *b = 0; - return; - } - if (*--x != ' ') - break; - } - *y-- = 0; - do *y-- = *x; - while(x-- > a); - } - - VOID -#ifdef KR_headers -b_char(a,b,blen) char *a,*b; ftnlen blen; -#else -b_char(char *a, char *b, ftnlen blen) -#endif -{ int i; - for(i=0;i<blen && *a!=0;i++) *b++= *a++; - for(;i<blen;i++) *b++=' '; -} -#ifndef NON_UNIX_STDIO -#ifdef KR_headers -long f__inode(a, dev) char *a; int *dev; -#else -long f__inode(char *a, int *dev) -#endif -{ struct stat x; - if(stat(a,&x)<0) return(-1); - *dev = x.st_dev; - return(x.st_ino); -} -#endif diff --git a/gcc/f/runtime/libI77/wref.c b/gcc/f/runtime/libI77/wref.c deleted file mode 100644 index a10bcaa1236..00000000000 --- a/gcc/f/runtime/libI77/wref.c +++ /dev/null @@ -1,276 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#ifndef VAX -#include <ctype.h> -#endif - -#ifndef KR_headers -#undef abs -#undef min -#undef max -#include <stdlib.h> -#include <string.h> -#endif - -#include "fmt.h" -#include "fp.h" - -#ifdef KR_headers -wrt_E(p,w,d,e,len) ufloat *p; ftnlen len; -#else -wrt_E(ufloat *p, int w, int d, int e, ftnlen len) -#endif -{ - char buf[FMAX+EXPMAXDIGS+4], *s, *se; - int d1, delta, e1, i, sign, signspace; - double dd; -#ifdef WANT_LEAD_0 - int insert0 = 0; -#endif -#ifndef VAX - int e0 = e; -#endif - - if(e <= 0) - e = 2; - if(f__scale) { - if(f__scale >= d + 2 || f__scale <= -d) - goto nogood; - } - if(f__scale <= 0) - --d; - if (len == sizeof(real)) - dd = p->pf; - else - dd = p->pd; - if (dd < 0.) { - signspace = sign = 1; - dd = -dd; - } - else { - sign = 0; - signspace = (int)f__cplus; -#ifndef VAX - if (!dd) - dd = 0.; /* avoid -0 */ -#endif - } - delta = w - (2 /* for the . and the d adjustment above */ - + 2 /* for the E+ */ + signspace + d + e); -#ifdef WANT_LEAD_0 - if (f__scale <= 0 && delta > 0) { - delta--; - insert0 = 1; - } - else -#endif - if (delta < 0) { -nogood: - while(--w >= 0) - PUT('*'); - return(0); - } - if (f__scale < 0) - d += f__scale; - if (d > FMAX) { - d1 = d - FMAX; - d = FMAX; - } - else - d1 = 0; - sprintf(buf,"%#.*E", d, dd); -#ifndef VAX - /* check for NaN, Infinity */ - if (!isdigit(buf[0])) { - switch(buf[0]) { - case 'n': - case 'N': - signspace = 0; /* no sign for NaNs */ - } - delta = w - strlen(buf) - signspace; - if (delta < 0) - goto nogood; - while(--delta >= 0) - PUT(' '); - if (signspace) - PUT(sign ? '-' : '+'); - for(s = buf; *s; s++) - PUT(*s); - return 0; - } -#endif - se = buf + d + 3; -#ifdef GOOD_SPRINTF_EXPONENT /* When possible, exponent has 2 digits. */ - if (f__scale != 1 && dd) - sprintf(se, "%+.2d", atoi(se) + 1 - f__scale); -#else - if (dd) - sprintf(se, "%+.2d", atoi(se) + 1 - f__scale); - else - strcpy(se, "+00"); -#endif - s = ++se; - if (e < 2) { - if (*s != '0') - goto nogood; - } -#ifndef VAX - /* accommodate 3 significant digits in exponent */ - if (s[2]) { -#ifdef Pedantic - if (!e0 && !s[3]) - for(s -= 2, e1 = 2; s[0] = s[1]; s++); - - /* Pedantic gives the behavior that Fortran 77 specifies, */ - /* i.e., requires that E be specified for exponent fields */ - /* of more than 3 digits. With Pedantic undefined, we get */ - /* the behavior that Cray displays -- you get a bigger */ - /* exponent field if it fits. */ -#else - if (!e0) { - for(s -= 2, e1 = 2; s[0] = s[1]; s++) -#ifdef CRAY - delta--; - if ((delta += 4) < 0) - goto nogood -#endif - ; - } -#endif - else if (e0 >= 0) - goto shift; - else - e1 = e; - } - else - shift: -#endif - for(s += 2, e1 = 2; *s; ++e1, ++s) - if (e1 >= e) - goto nogood; - while(--delta >= 0) - PUT(' '); - if (signspace) - PUT(sign ? '-' : '+'); - s = buf; - i = f__scale; - if (f__scale <= 0) { -#ifdef WANT_LEAD_0 - if (insert0) - PUT('0'); -#endif - PUT('.'); - for(; i < 0; ++i) - PUT('0'); - PUT(*s); - s += 2; - } - else if (f__scale > 1) { - PUT(*s); - s += 2; - while(--i > 0) - PUT(*s++); - PUT('.'); - } - if (d1) { - se -= 2; - while(s < se) PUT(*s++); - se += 2; - do PUT('0'); while(--d1 > 0); - } - while(s < se) - PUT(*s++); - if (e < 2) - PUT(s[1]); - else { - while(++e1 <= e) - PUT('0'); - while(*s) - PUT(*s++); - } - return 0; - } - -#ifdef KR_headers -wrt_F(p,w,d,len) ufloat *p; ftnlen len; -#else -wrt_F(ufloat *p, int w, int d, ftnlen len) -#endif -{ - int d1, sign, n; - double x; - char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s; - - x= (len==sizeof(real)?p->pf:p->pd); - if (d < MAXFRACDIGS) - d1 = 0; - else { - d1 = d - MAXFRACDIGS; - d = MAXFRACDIGS; - } - if (x < 0.) - { x = -x; sign = 1; } - else { - sign = 0; -#ifndef VAX - if (!x) - x = 0.; -#endif - } - - if (n = f__scale) - if (n > 0) - do x *= 10.; while(--n > 0); - else - do x *= 0.1; while(++n < 0); - -#ifdef USE_STRLEN - sprintf(b = buf, "%#.*f", d, x); - n = strlen(b) + d1; -#else - n = sprintf(b = buf, "%#.*f", d, x) + d1; -#endif - -#ifndef WANT_LEAD_0 - if (buf[0] == '0' && d) - { ++b; --n; } -#endif - if (sign) { - /* check for all zeros */ - for(s = b;;) { - while(*s == '0') s++; - switch(*s) { - case '.': - s++; continue; - case 0: - sign = 0; - } - break; - } - } - if (sign || f__cplus) - ++n; - if (n > w) { -#ifdef WANT_LEAD_0 - if (buf[0] == '0' && --n == w) - ++b; - else -#endif - { - while(--w >= 0) - PUT('*'); - return 0; - } - } - for(w -= n; --w >= 0; ) - PUT(' '); - if (sign) - PUT('-'); - else if (f__cplus) - PUT('+'); - while(n = *b++) - PUT(n); - while(--d1 >= 0) - PUT('0'); - return 0; - } diff --git a/gcc/f/runtime/libI77/wrtfmt.c b/gcc/f/runtime/libI77/wrtfmt.c deleted file mode 100644 index e14efa85833..00000000000 --- a/gcc/f/runtime/libI77/wrtfmt.c +++ /dev/null @@ -1,385 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" - -extern icilist *f__svic; -extern char *f__icptr; - - static int -mv_cur(Void) /* shouldn't use fseek because it insists on calling fflush */ - /* instead we know too much about stdio */ -{ - int cursor = f__cursor; - f__cursor = 0; - if(f__external == 0) { - if(cursor < 0) { - if(f__hiwater < f__recpos) - f__hiwater = f__recpos; - f__recpos += cursor; - f__icptr += cursor; - if(f__recpos < 0) - err(f__elist->cierr, 110, "left off"); - } - else if(cursor > 0) { - if(f__recpos + cursor >= f__svic->icirlen) - err(f__elist->cierr, 110, "recend"); - if(f__hiwater <= f__recpos) - for(; cursor > 0; cursor--) - (*f__putn)(' '); - else if(f__hiwater <= f__recpos + cursor) { - cursor -= f__hiwater - f__recpos; - f__icptr += f__hiwater - f__recpos; - f__recpos = f__hiwater; - for(; cursor > 0; cursor--) - (*f__putn)(' '); - } - else { - f__icptr += cursor; - f__recpos += cursor; - } - } - return(0); - } - if(cursor > 0) { - if(f__hiwater <= f__recpos) - for(;cursor>0;cursor--) (*f__putn)(' '); - else if(f__hiwater <= f__recpos + cursor) { -#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS) - if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf)) - f__cf->_ptr += f__hiwater - f__recpos; - else -#endif - (void) fseek(f__cf, (long) (f__hiwater - f__recpos), SEEK_CUR); - cursor -= f__hiwater - f__recpos; - f__recpos = f__hiwater; - for(; cursor > 0; cursor--) - (*f__putn)(' '); - } - else { -#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS) - if(f__cf->_ptr + cursor < buf_end(f__cf)) - f__cf->_ptr += cursor; - else -#endif - (void) fseek(f__cf, (long)cursor, SEEK_CUR); - f__recpos += cursor; - } - } - if(cursor<0) - { - if(cursor+f__recpos<0) err(f__elist->cierr,110,"left off"); -#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS) - if(f__cf->_ptr + cursor >= f__cf->_base) - f__cf->_ptr += cursor; - else -#endif - if(f__curunit && f__curunit->useek) - (void) fseek(f__cf,(long)cursor,SEEK_CUR); - else - err(f__elist->cierr,106,"fmt"); - if(f__hiwater < f__recpos) - f__hiwater = f__recpos; - f__recpos += cursor; - } - return(0); -} - - static int -#ifdef KR_headers -wrt_Z(n,w,minlen,len) Uint *n; int w, minlen; ftnlen len; -#else -wrt_Z(Uint *n, int w, int minlen, ftnlen len) -#endif -{ - register char *s, *se; - register int i, w1; - static int one = 1; - static char hex[] = "0123456789ABCDEF"; - s = (char *)n; - --len; - if (*(char *)&one) { - /* little endian */ - se = s; - s += len; - i = -1; - } - else { - se = s + len; - i = 1; - } - for(;; s += i) - if (s == se || *s) - break; - w1 = (i*(se-s) << 1) + 1; - if (*s & 0xf0) - w1++; - if (w1 > w) - for(i = 0; i < w; i++) - (*f__putn)('*'); - else { - if ((minlen -= w1) > 0) - w1 += minlen; - while(--w >= w1) - (*f__putn)(' '); - while(--minlen >= 0) - (*f__putn)('0'); - if (!(*s & 0xf0)) { - (*f__putn)(hex[*s & 0xf]); - if (s == se) - return 0; - s += i; - } - for(;; s += i) { - (*f__putn)(hex[*s >> 4 & 0xf]); - (*f__putn)(hex[*s & 0xf]); - if (s == se) - break; - } - } - return 0; - } - - static int -#ifdef KR_headers -wrt_I(n,w,len, base) Uint *n; ftnlen len; register int base; -#else -wrt_I(Uint *n, int w, ftnlen len, register int base) -#endif -{ int ndigit,sign,spare,i; - longint x; - char *ans; - if(len==sizeof(integer)) x=n->il; - else if(len == sizeof(char)) x = n->ic; -#ifdef Allow_TYQUAD - else if (len == sizeof(longint)) x = n->ili; -#endif - else x=n->is; - ans=f__icvt(x,&ndigit,&sign, base); - spare=w-ndigit; - if(sign || f__cplus) spare--; - if(spare<0) - for(i=0;i<w;i++) (*f__putn)('*'); - else - { for(i=0;i<spare;i++) (*f__putn)(' '); - if(sign) (*f__putn)('-'); - else if(f__cplus) (*f__putn)('+'); - for(i=0;i<ndigit;i++) (*f__putn)(*ans++); - } - return(0); -} - static int -#ifdef KR_headers -wrt_IM(n,w,m,len,base) Uint *n; ftnlen len; int base; -#else -wrt_IM(Uint *n, int w, int m, ftnlen len, int base) -#endif -{ int ndigit,sign,spare,i,xsign; - longint x; - char *ans; - if(sizeof(integer)==len) x=n->il; - else if(len == sizeof(char)) x = n->ic; -#ifdef Allow_TYQUAD - else if (len == sizeof(longint)) x = n->ili; -#endif - else x=n->is; - ans=f__icvt(x,&ndigit,&sign, base); - if(sign || f__cplus) xsign=1; - else xsign=0; - if(ndigit+xsign>w || m+xsign>w) - { for(i=0;i<w;i++) (*f__putn)('*'); - return(0); - } - if(x==0 && m==0) - { for(i=0;i<w;i++) (*f__putn)(' '); - return(0); - } - if(ndigit>=m) - spare=w-ndigit-xsign; - else - spare=w-m-xsign; - for(i=0;i<spare;i++) (*f__putn)(' '); - if(sign) (*f__putn)('-'); - else if(f__cplus) (*f__putn)('+'); - for(i=0;i<m-ndigit;i++) (*f__putn)('0'); - for(i=0;i<ndigit;i++) (*f__putn)(*ans++); - return(0); -} - static int -#ifdef KR_headers -wrt_AP(s) char *s; -#else -wrt_AP(char *s) -#endif -{ char quote; - int i; - - if(f__cursor && (i = mv_cur())) - return i; - quote = *s++; - for(;*s;s++) - { if(*s!=quote) (*f__putn)(*s); - else if(*++s==quote) (*f__putn)(*s); - else return(1); - } - return(1); -} - static int -#ifdef KR_headers -wrt_H(a,s) char *s; -#else -wrt_H(int a, char *s) -#endif -{ - int i; - - if(f__cursor && (i = mv_cur())) - return i; - while(a--) (*f__putn)(*s++); - return(1); -} -#ifdef KR_headers -wrt_L(n,len, sz) Uint *n; ftnlen sz; -#else -wrt_L(Uint *n, int len, ftnlen sz) -#endif -{ int i; - long x; - if(sizeof(long)==sz) x=n->il; - else if(sz == sizeof(char)) x = n->ic; - else x=n->is; - for(i=0;i<len-1;i++) - (*f__putn)(' '); - if(x) (*f__putn)('T'); - else (*f__putn)('F'); - return(0); -} - static int -#ifdef KR_headers -wrt_A(p,len) char *p; ftnlen len; -#else -wrt_A(char *p, ftnlen len) -#endif -{ - while(len-- > 0) (*f__putn)(*p++); - return(0); -} - static int -#ifdef KR_headers -wrt_AW(p,w,len) char * p; ftnlen len; -#else -wrt_AW(char * p, int w, ftnlen len) -#endif -{ - while(w>len) - { w--; - (*f__putn)(' '); - } - while(w-- > 0) - (*f__putn)(*p++); - return(0); -} - - static int -#ifdef KR_headers -wrt_G(p,w,d,e,len) ufloat *p; ftnlen len; -#else -wrt_G(ufloat *p, int w, int d, int e, ftnlen len) -#endif -{ double up = 1,x; - int i=0,oldscale,n,j; - x = len==sizeof(real)?p->pf:p->pd; - if(x < 0 ) x = -x; - if(x<.1) { - if (x != 0.) - return(wrt_E(p,w,d,e,len)); - i = 1; - goto have_i; - } - for(;i<=d;i++,up*=10) - { if(x>=up) continue; - have_i: - oldscale = f__scale; - f__scale = 0; - if(e==0) n=4; - else n=e+2; - i=wrt_F(p,w-n,d-i,len); - for(j=0;j<n;j++) (*f__putn)(' '); - f__scale=oldscale; - return(i); - } - return(wrt_E(p,w,d,e,len)); -} -#ifdef KR_headers -w_ed(p,ptr,len) struct syl *p; char *ptr; ftnlen len; -#else -w_ed(struct syl *p, char *ptr, ftnlen len) -#endif -{ - int i; - - if(f__cursor && (i = mv_cur())) - return i; - switch(p->op) - { - default: - fprintf(stderr,"w_ed, unexpected code: %d\n", p->op); - sig_die(f__fmtbuf, 1); - case I: return(wrt_I((Uint *)ptr,p->p1,len, 10)); - case IM: - return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,10)); - - /* O and OM don't work right for character, double, complex, */ - /* or doublecomplex, and they differ from Fortran 90 in */ - /* showing a minus sign for negative values. */ - - case O: return(wrt_I((Uint *)ptr, p->p1, len, 8)); - case OM: - return(wrt_IM((Uint *)ptr,p->p1,p->p2,len,8)); - case L: return(wrt_L((Uint *)ptr,p->p1, len)); - case A: return(wrt_A(ptr,len)); - case AW: - return(wrt_AW(ptr,p->p1,len)); - case D: - case E: - case EE: - return(wrt_E((ufloat *)ptr,p->p1,p->p2,p->p3,len)); - case G: - case GE: - return(wrt_G((ufloat *)ptr,p->p1,p->p2,p->p3,len)); - case F: return(wrt_F((ufloat *)ptr,p->p1,p->p2,len)); - - /* Z and ZM assume 8-bit bytes. */ - - case Z: return(wrt_Z((Uint *)ptr,p->p1,0,len)); - case ZM: - return(wrt_Z((Uint *)ptr,p->p1,p->p2,len)); - } -} -#ifdef KR_headers -w_ned(p) struct syl *p; -#else -w_ned(struct syl *p) -#endif -{ - switch(p->op) - { - default: fprintf(stderr,"w_ned, unexpected code: %d\n", p->op); - sig_die(f__fmtbuf, 1); - case SLASH: - return((*f__donewrec)()); - case T: f__cursor = p->p1-f__recpos - 1; - return(1); - case TL: f__cursor -= p->p1; - if(f__cursor < -f__recpos) /* TL1000, 1X */ - f__cursor = -f__recpos; - return(1); - case TR: - case X: - f__cursor += p->p1; - return(1); - case APOS: - return(wrt_AP(*(char **)&p->p2)); - case H: - return(wrt_H(p->p1,*(char **)&p->p2)); - } -} diff --git a/gcc/f/runtime/libI77/wsfe.c b/gcc/f/runtime/libI77/wsfe.c deleted file mode 100644 index 5adb1a49f08..00000000000 --- a/gcc/f/runtime/libI77/wsfe.c +++ /dev/null @@ -1,85 +0,0 @@ -/*write sequential formatted external*/ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" -extern int f__hiwater; - -#ifdef KR_headers -x_putc(c) -#else -x_putc(int c) -#endif -{ - /* this uses \n as an indicator of record-end */ - if(c == '\n' && f__recpos < f__hiwater) { /* fseek calls fflush, a loss */ -#if ! defined (NON_UNIX_STDIO) && ! defined (MISSING_FILE_ELEMS) - if(f__cf->_ptr + f__hiwater - f__recpos < buf_end(f__cf)) - f__cf->_ptr += f__hiwater - f__recpos; - else -#endif - (void) fseek(f__cf, (long)(f__hiwater - f__recpos), SEEK_CUR); - } -#ifdef OMIT_BLANK_CC - if (!f__recpos++ && c == ' ') - return c; -#else - f__recpos++; -#endif - return putc(c,f__cf); -} -x_wSL(Void) -{ - (*f__putn)('\n'); - f__recpos=0; - f__cursor = 0; - f__hiwater = 0; - return(1); -} -xw_end(Void) -{ - if(f__nonl == 0) - (*f__putn)('\n'); - f__hiwater = f__recpos = f__cursor = 0; - return(0); -} -xw_rev(Void) -{ - if(f__workdone) (*f__putn)('\n'); - f__hiwater = f__recpos = f__cursor = 0; - return(f__workdone=0); -} - -#ifdef KR_headers -integer s_wsfe(a) cilist *a; /*start*/ -#else -integer s_wsfe(cilist *a) /*start*/ -#endif -{ int n; - if(f__init != 1) f_init(); - f__init = 3; - if(n=c_sfe(a)) return(n); - f__reading=0; - f__sequential=1; - f__formatted=1; - f__external=1; - f__elist=a; - f__hiwater = f__cursor=f__recpos=0; - f__nonl = 0; - f__scale=0; - f__fmtbuf=a->cifmt; - f__curunit = &f__units[a->ciunit]; - f__cf=f__curunit->ufd; - if(pars_f(f__fmtbuf)<0) err(a->cierr,100,"startio"); - f__putn= x_putc; - f__doed= w_ed; - f__doned= w_ned; - f__doend=xw_end; - f__dorevert=xw_rev; - f__donewrec=x_wSL; - fmt_bg(); - f__cplus=0; - f__cblank=f__curunit->ublnk; - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr,errno,"write start"); - return(0); -} diff --git a/gcc/f/runtime/libI77/wsle.c b/gcc/f/runtime/libI77/wsle.c deleted file mode 100644 index d13f78f650b..00000000000 --- a/gcc/f/runtime/libI77/wsle.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "fmt.h" -#include "lio.h" - -#ifdef KR_headers -integer s_wsle(a) cilist *a; -#else -integer s_wsle(cilist *a) -#endif -{ - int n; - if(n=c_le(a)) return(n); - f__reading=0; - f__external=1; - f__formatted=1; - f__putn = t_putc; - f__lioproc = l_write; - L_len = LINE; - f__donewrec = x_wSL; - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr, errno, "list output start"); - return(0); - } - -integer e_wsle(Void) -{ - f__init = 1; - t_putc('\n'); - f__recpos=0; -#ifdef ALWAYS_FLUSH - if (fflush(f__cf)) - err(f__elist->cierr, errno, "write end"); -#else - if (f__cf == stdout) - fflush(stdout); - else if (f__cf == stderr) - fflush(stderr); -#endif - return(0); - } diff --git a/gcc/f/runtime/libI77/wsne.c b/gcc/f/runtime/libI77/wsne.c deleted file mode 100644 index 0febd52634f..00000000000 --- a/gcc/f/runtime/libI77/wsne.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "lio.h" - - integer -#ifdef KR_headers -s_wsne(a) cilist *a; -#else -s_wsne(cilist *a) -#endif -{ - int n; - - if(n=c_le(a)) - return(n); - f__reading=0; - f__external=1; - f__formatted=1; - f__putn = t_putc; - L_len = LINE; - f__donewrec = x_wSL; - if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) - err(a->cierr, errno, "namelist output start"); - x_wsne(a); - return e_wsle(); - } diff --git a/gcc/f/runtime/libI77/xwsne.c b/gcc/f/runtime/libI77/xwsne.c deleted file mode 100644 index 71f6f1d5da5..00000000000 --- a/gcc/f/runtime/libI77/xwsne.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "f2c.h" -#include "fio.h" -#include "lio.h" -#include "fmt.h" - -extern int f__Aquote; - - static VOID -nl_donewrec(Void) -{ - (*f__donewrec)(); - PUT(' '); - } - -#ifdef KR_headers -x_wsne(a) cilist *a; -#else -#include <string.h> - - VOID -x_wsne(cilist *a) -#endif -{ - Namelist *nl; - char *s; - Vardesc *v, **vd, **vde; - ftnint *number, type; - ftnlen *dims; - ftnlen size; - static ftnint one = 1; - extern ftnlen f__typesize[]; - - nl = (Namelist *)a->cifmt; - PUT('&'); - for(s = nl->name; *s; s++) - PUT(*s); - PUT(' '); - f__Aquote = 1; - vd = nl->vars; - vde = vd + nl->nvars; - while(vd < vde) { - v = *vd++; - s = v->name; -#ifdef No_Extra_Namelist_Newlines - if (f__recpos+strlen(s)+2 >= L_len) -#endif - nl_donewrec(); - while(*s) - PUT(*s++); - PUT(' '); - PUT('='); - number = (dims = v->dims) ? dims + 1 : &one; - type = v->type; - if (type < 0) { - size = -type; - type = TYCHAR; - } - else - size = f__typesize[type]; - l_write(number, v->addr, size, type); - if (vd < vde) { - if (f__recpos+2 >= L_len) - nl_donewrec(); - PUT(','); - PUT(' '); - } - else if (f__recpos+1 >= L_len) - nl_donewrec(); - } - f__Aquote = 0; - PUT('/'); - } diff --git a/gcc/f/runtime/libU77/COPYING.LIB b/gcc/f/runtime/libU77/COPYING.LIB deleted file mode 100644 index eb685a5ec98..00000000000 --- a/gcc/f/runtime/libU77/COPYING.LIB +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - <one line to give the library's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - <signature of Ty Coon>, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/gcc/f/runtime/libU77/Makefile.in b/gcc/f/runtime/libU77/Makefile.in deleted file mode 100644 index 2e6846b23de..00000000000 --- a/gcc/f/runtime/libU77/Makefile.in +++ /dev/null @@ -1,155 +0,0 @@ -# Makefile for GNU F77 compiler runtime, libc interface. -# Copyright (C) 1995-1997 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of GNU Fortran libU77 library. -# -#This library is free software; you can redistribute it and/or modify -#it under the terms of the GNU Library General Public License as -#published by the Free Software Foundation; either version 2, or (at -#your option) any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, but -#WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -#Library General Public License for more details. -# -#You should have received a copy of the GNU General Public License -#along with GNU Fortran; see the file COPYING. If not, write to -#Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -#### Start of system configuration section. #### - -# The _FOR_TARGET things are appropriate for a cross-make, passed by the -# superior makefile -GCC_FOR_TARGET = @CC@ -CC = $(GCC_FOR_TARGET) -CFLAGS = @CFLAGS@ $(GCC_FLAGS) -CPPFLAGS = @CPPFLAGS@ -DEFS = @DEFS@ -CGFLAGS = -g0 -# f2c.h should already be installed in xgcc's include directory but add that -# to -I anyhow in case not using xgcc. fio.h is in libI77. We need config.h -# from `.'. -ALL_CFLAGS = -I. -I$(srcdir) -I$(srcdir)/../libI77 -I../../../include $(CPPFLAGS) $(DEFS) $(CFLAGS) -AR = @AR@ -AR_FLAGS = rc -RANLIB = @RANLIB@ -RANLIB_TEST = @RANLIB_TEST@ -CROSS = @CROSS@ -G77DIR = ../../../ - -.SUFFIXES: -.SUFFIXES: .c .o - -.c.o: - $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $(CGFLAGS) $< - -OBJS = VersionU.o gerror_.o perror_.o ierrno_.o itime_.o time_.o \ - unlink_.o fnum_.o getpid_.o getuid_.o getgid_.o kill_.o rand_.o \ - srand_.o irand_.o sleep_.o idate_.o ctime_.o etime_.o \ - dtime_.o isatty_.o ltime_.o fstat_.o stat_.o \ - lstat_.o access_.o link_.o getlog_.o ttynam_.o getcwd_.o symlnk_.o \ - vxttime_.o vxtidate_.o gmtime_.o fdate_.o secnds_.o \ - bes.o dbes.o \ - chdir_.o chmod_.o lnblnk_.o hostnm_.o rename_.o fgetc_.o fputc_.o \ - umask_.o system_clock_.o date_.o second_.o flush1_.o mclock_.o \ - alarm_.o -SRCS = Version.c gerror_.c perror_.c ierrno_.c itime_.c time_.c \ - unlink_.c fnum_.c getpid_.c getuid_.c getgid_.c kill_.c rand_.c \ - srand_.c irand_.c sleep_.c idate_.c ctime_.c etime_.c \ - dtime_.c isatty_.c ltime_.c fstat_.c stat_.c \ - lstat_.c access_.c link_.c getlog_.c ttynam_.c getcwd_.c symlnk_.c \ - vxttime_.c vxtidate_.c gmtime_.c fdate_.c secnds_.c \ - bes.c dbes.c \ - chdir_.c chmod_.c lnblnk_.c hostnm_.c rename_.c fgetc_.c fputc_.c \ - umask_.c system_clock_.c date_.c second_.c flush1_.c mclock_.c \ - alarm_.c - -F2C_H = ../../../include/f2c.h - -all: $(OBJS) - -VersionU.o: Version.c - $(CC) -c $(CGFLAGS) -o $@ $(srcdir)/Version.c - -lint: - lint $(CFLAGS) $(SRCS) - -mostlyclean: - -rm -f $(OBJS) - -clean: mostlyclean - -rm -f config.log a.out - -distclean realclean maintainer-clean: clean - -rm -f config.h Makefile config.status config.cache stage? include - -$(OBJS): $(F2C_H) config.h - -check: - -$(G77DIR)g77 --driver=$(G77DIR)/xgcc -B$(G77DIR) -g $(srcdir)/u77-test.f $(lib) && ./a.out - rm -f a.out - -access_.o: access_.c -ctime_.o: ctime_.c -dtime_.o: dtime_.c -etime_.o: etime_.c -fnum_.o: fnum_.c $(srcdir)/../libI77/fio.h -fstat_.o: fstat_.c -gerror_.o: gerror_.c -getcwd_.o: getcwd_.c -getgid_.o: getgid_.c -getlog_.o: getlog_.c -getpid_.o: getpid_.c -getuid_.o: getuid_.c -idate_.o: idate_.c -ierrno_.o: ierrno_.c -irand_.o: irand_.c -isatty_.o: isatty_.c $(srcdir)/../libI77/fio.h -itime_.o: itime_.c -kill_.o: kill_.c -link_.o: link_.c -loc_.o: loc_.c -lstat_.o: lstat_.c -ltime_.o: ltime_.c -perror_.o: perror_.c -qsort.o: qsort.c -qsort_.o: qsort_.c -rand_.o: rand_.c -rename_.o: rename_.c -second_.o: second_.c -sleep_.o: sleep_.c -srand_.o: srand_.c -stat_.o: stat_.c -symlnk_.o: symlnk_.c -time_.o: time_.c -ttynam_.o: ttynam_.c -unlink_.o: unlink_.c -wait_.o: wait_.c -vxttime_.o: vxttime_.c -vtxidate_.o: vxtidate_.c -fdate_.o: fdate_.c -gmtime_.o: gmtime_.c -secnds_.o: secnds_.c -bes.o: bes.c -dbes.o: dbes.c -lnblnk_.o: lnblnk_.c -chmod_.o: chmod_.c -chdir_.o: chdir_.c -hostnm_.o: hostnm_.c -rename_.o: rename_.c -fputc_.o: fputc_.c -fgetc_.o: fgetc_.c -system_clock_.o: system_clock_.c -umask_.o: umask_.c -flush1_.o: flush1_.c -mclock_.o: mclock_.c -alarm_.o: alarm_.c - -.PHONY: mostlyclean clean distclean maintainer-clean lint check all diff --git a/gcc/f/runtime/libU77/PROJECTS b/gcc/f/runtime/libU77/PROJECTS deleted file mode 100644 index 0cf1383cbf9..00000000000 --- a/gcc/f/runtime/libU77/PROJECTS +++ /dev/null @@ -1,10 +0,0 @@ - -*- indented-text-*- - -* Interface to strget - -* Non-blocking (`asynchronous') i/o (per c.l.f. discussion) - -* `ioinit'-type routine for various i/o options - -* IEEE/VAX/... number format conversion (or XDR interface). This - might be made optionally transparent per logical unit a la DECtran. diff --git a/gcc/f/runtime/libU77/README b/gcc/f/runtime/libU77/README deleted file mode 100644 index 9033a495f1b..00000000000 --- a/gcc/f/runtime/libU77/README +++ /dev/null @@ -1,40 +0,0 @@ -19970811 -*-text-*- - -g77 libU77 ----------- - -This directory contains an implementation of most of the `traditional' -Unix libU77 routines, mostly an interface to libc and libm routines -and some extra ones for time and date etc. It's intended for use with -g77, to whose configuration procedure it's currently tied, but should -be compatible with f2c otherwise, if using the same f2c.h. - -The contents of libU77 and its interfaces aren't consistent across -implementations. This one is mostly taken from documentation for (an -old version of) the Convex implementation and the v2 SunPro one. -As of g77 version 0.5.20, most of these routines have been made -into g77 intrinsics. Some routines have a version with a name prefixed -by `vxt', corresponding to the VMS Fortran versions, and these should -be integrated with g77's intrinsics visibility control. - -A few routines are currently missing; in the case of `fork', for -instance, because they're probably not useful, and in the case of -`qsort' and those for stream-based i/o handling, because they need -more effort/research. The configuration should weed out those few -which correspond to facilities which may not be present on some Unix -systems, such as symbolic links. It's unclear whether the interfaces -to the native library random number routines should be retained, since -their implementation is likely to be something one should avoid -assiduously. - -This library has been tested it under SunOS4.1.3 and Irix5.2 and there -has been some feedback from Linux; presumably potential problems lie -mainly with systems with impoverished native C library support which -haven't been properly taken care of with autoconf. - -There's another GPL'd implementation of this stuff which I only found -out about recently (despite having looked) and I haven't yet checked -how they should be amalgamated. - -Dave Love <d.love@dl.ac.uk> Aug '95 -(minor changes by Craig Burley <burley@gnu.ai.mit.edu> Aug '97) diff --git a/gcc/f/runtime/libU77/Version.c b/gcc/f/runtime/libU77/Version.c deleted file mode 100644 index 88a2907c217..00000000000 --- a/gcc/f/runtime/libU77/Version.c +++ /dev/null @@ -1,12 +0,0 @@ -static char junk[] = "\n@(#) LIBU77 VERSION 19970609\n"; - -char __G77_LIBU77_VERSION__[] = "0.5.21"; - -#include <stdio.h> - -void -g77__uvers__ () -{ - fprintf (stderr, "__G77_LIBU77_VERSION__: %s", __G77_LIBU77_VERSION__); - fputs (junk, stderr); -} diff --git a/gcc/f/runtime/libU77/access_.c b/gcc/f/runtime/libU77/access_.c deleted file mode 100644 index 1699ef065f2..00000000000 --- a/gcc/f/runtime/libU77/access_.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> /* for NULL */ -#endif - -#include <errno.h> -#include <limits.h> -#include "f2c.h" - -#ifndef R_OK /* for SVR1-2 */ -# define R_OK 4 -#endif -#ifndef W_OK -# define W_OK 2 -#endif -#ifndef X_OK -# define X_OK 1 -#endif -#ifndef F_OK -# define F_OK 0 -#endif - -#ifdef KR_headers -void g_char (); - -integer G77_access_0 (name, mode, Lname, Lmode) - char *name, *mode; - ftnlen Lname, Lmode; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_access_0 (const char *name, const char *mode, ftnlen Lname, ftnlen Lmode) -#endif -{ - char *buff; - char *bp, *blast; - int amode, i; - - buff = malloc (Lname+1); - if (buff == NULL) return -1; - g_char (name, Lname, buff); - amode = 0; - for (i=0;i<Lmode;i++) { - switch (mode[i]) { - case 'r': amode |= R_OK; break; - case 'w': amode |= W_OK; break; - case 'x': amode |= X_OK; break; - case ' ': amode |= F_OK; break; /* as per Sun, at least */ - default: return EINVAL; - } - } - i = access (buff, amode); - free (buff); - return i; -} diff --git a/gcc/f/runtime/libU77/acconfig.h b/gcc/f/runtime/libU77/acconfig.h deleted file mode 100644 index 12bba85b869..00000000000 --- a/gcc/f/runtime/libU77/acconfig.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Define as the path of the `chmod' program. */ -#undef CHMOD_PATH diff --git a/gcc/f/runtime/libU77/alarm_.c b/gcc/f/runtime/libU77/alarm_.c deleted file mode 100644 index b1c347d4a68..00000000000 --- a/gcc/f/runtime/libU77/alarm_.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if HAVE_UNISTD_H -# include <unistd.h> -#endif - -#include "f2c.h" - -#ifndef RETSIGTYPE -/* we shouldn't rely on this... */ -#ifdef KR_headers -#define RETSIGTYPE int -#else -#define RETSIGTYPE void -#endif -#endif -typedef RETSIGTYPE (*sig_type)(); - -#ifdef KR_headers -extern sig_type signal(); - -integer G77_alarm_0 (seconds, proc) - integer *seconds; - sig_type proc; -#else -#include <signal.h> -typedef int (*sig_proc)(int); - -integer G77_alarm_0 (integer *seconds, sig_proc proc) -#endif -{ - int status; - - if (signal(SIGALRM, (sig_type)proc) == SIG_ERR) - status = -1; - else - status = alarm (*seconds); - return status; -} diff --git a/gcc/f/runtime/libU77/bes.c b/gcc/f/runtime/libU77/bes.c deleted file mode 100644 index 442337fd77a..00000000000 --- a/gcc/f/runtime/libU77/bes.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#if 0 /* Don't include these unless necessary -- jcb. */ -#include "f2c.h" -#include <math.h> - -double G77_besj0_0 (const real *x) { - return j0 (*x); -} - -double G77_besj1_0 (const real *x) { - return j1 (*x); -} - -double G77_besjn_0 (const integer *n, real *x) { - return jn (*n, *x); - } - -double G77_besy0_0 (const real *x) { - return y0 (*x); -} - -double G77_besy1_0 (const real *x) { - return y1 (*x); -} - -double G77_besyn_0 (const integer *n, real *x) { - return yn (*n, *x); -} -#endif diff --git a/gcc/f/runtime/libU77/chdir_.c b/gcc/f/runtime/libU77/chdir_.c deleted file mode 100644 index 500be54fbe6..00000000000 --- a/gcc/f/runtime/libU77/chdir_.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> -#endif - -#include <errno.h> -#include "f2c.h" - - -#ifdef KR_headers -void g_char (); - -integer G77_chdir_0 (name, Lname) - char *name; - ftnlen Lname; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_chdir_0 (const char *name, const ftnlen Lname) -#endif -{ - char *buff; - char *bp, *blast; - int i; - - buff = malloc (Lname+1); - if (buff == NULL) return -1; - g_char (name, Lname, buff); - i = chdir (buff); - free (buff); - return i ? errno : 0; -} diff --git a/gcc/f/runtime/libU77/chmod_.c b/gcc/f/runtime/libU77/chmod_.c deleted file mode 100644 index 9797b80f3f5..00000000000 --- a/gcc/f/runtime/libU77/chmod_.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - - -/* This definitely shouldn't be done this way -- should canibalise - chmod(1) from GNU or BSD. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> /* for NULL */ -#endif - -#include "f2c.h" - -#ifndef CHMOD_PATH -#define CHMOD_PATH "/bin/chmod" -#endif - -#ifdef KR_headers -extern void s_cat (); -void g_char (); - -integer G77_chmod_0 (name, mode, Lname, Lmode) - char *name, *mode; - ftnlen Lname, Lmode; -#else -extern void s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll); -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_chmod_0 (/* const */ char *name, /* const */ char *mode, const ftnlen Lname, const ftnlen Lmode) -#endif -{ - char *buff; - char *bp, *blast; - int i; - ftnlen l, l2; - ftnlen six = 6; - address a[6]; - ftnlen ii[6]; - char chmod_path [] = CHMOD_PATH; - l = strlen (chmod_path); - buff = malloc (Lname+Lmode+l+3+13+1); - if (buff == NULL) return -1; - ii[0] = l; a[0] = chmod_path; - ii[1] = 1; a[1] = " "; - ii[2] = Lmode; a[2] = mode; - ii[3] = 2; a[3] = " '"; - for (l2=Lname; (l2 > 1) && (name[l2-1] == ' '); ) - l2--; - ii[4] = l2; a[4] = name; - ii[5] = 13; a[5] = "' 2>/dev/null"; - s_cat (buff, a, ii, &six, Lname+Lmode+l+3+13); - buff[Lname+Lmode+l+3+13] = '\0'; - i = system (buff); - free (buff); - return i; -} diff --git a/gcc/f/runtime/libU77/config.h.in b/gcc/f/runtime/libU77/config.h.in deleted file mode 100644 index 45ada20e236..00000000000 --- a/gcc/f/runtime/libU77/config.h.in +++ /dev/null @@ -1,73 +0,0 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if your struct stat has st_blksize. */ -#undef HAVE_ST_BLKSIZE - -/* Define if your struct stat has st_blocks. */ -#undef HAVE_ST_BLOCKS - -/* Define if your struct stat has st_rdev. */ -#undef HAVE_ST_RDEV - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef mode_t - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef pid_t - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME - -/* Define if your <sys/time.h> declares struct tm. */ -#undef TM_IN_SYS_TIME - -/* Define as the path of the `chmod' program. */ -#undef CHMOD_PATH - -/* Define if you have the clock function. */ -#undef HAVE_CLOCK - -/* Define if you have the getcwd function. */ -#undef HAVE_GETCWD - -/* Define if you have the gethostname function. */ -#undef HAVE_GETHOSTNAME - -/* Define if you have the getrusage function. */ -#undef HAVE_GETRUSAGE - -/* Define if you have the getwd function. */ -#undef HAVE_GETWD - -/* Define if you have the lstat function. */ -#undef HAVE_LSTAT - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR - -/* Define if you have the symlink function. */ -#undef HAVE_SYMLINK - -/* Define if you have the <limits.h> header file. */ -#undef HAVE_LIMITS_H - -/* Define if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define if you have the <sys/time.h> header file. */ -#undef HAVE_SYS_TIME_H - -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H diff --git a/gcc/f/runtime/libU77/configure b/gcc/f/runtime/libU77/configure deleted file mode 100755 index 63fb0e7844e..00000000000 --- a/gcc/f/runtime/libU77/configure +++ /dev/null @@ -1,1758 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=access_.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - - -# For g77 we'll set CC to point at the built gcc, but this will get it into -# the makefiles -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:529: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:558: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:606: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext <<EOF -#line 616 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -if { (eval echo configure:620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:640: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:645: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - ac_test_CFLAGS="${CFLAGS+set}" - ac_save_CFLAGS="$CFLAGS" - CFLAGS= - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:669: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-O2" - fi -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" -fi - -if test "$CROSS";then - ac_cv_c_cross=yes -else - ac_cv_c_cross=no -fi - -# Extract the first word of "chmod", so it can be a program name with args. -set dummy chmod; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:705: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_ac_cv_prog_chmod'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$ac_cv_prog_chmod" in - /*) - ac_cv_path_ac_cv_prog_chmod="$ac_cv_prog_chmod" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_ac_cv_prog_chmod="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_ac_cv_prog_chmod" && ac_cv_path_ac_cv_prog_chmod="no" - ;; -esac -fi -ac_cv_prog_chmod="$ac_cv_path_ac_cv_prog_chmod" -if test -n "$ac_cv_prog_chmod"; then - echo "$ac_t""$ac_cv_prog_chmod" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test "$ac_cv_prog_chmod" != no || test "$CROSS"; then - MAYBES=chmod_.o - cat >> confdefs.h <<EOF -#define CHMOD_PATH "$ac_cv_prog_chmod" -EOF - -else - MAYBES="" -fi - -if test "$ac_cv_c_cross" = yes; then - RANLIB=$RANLIB_FOR_TARGET - AR=$AR_FOR_TARGET - -else - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:752: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - AR=ar - RANLIB_TEST=true -fi - - - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:785: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 800 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 817 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:846: checking for ANSI C header files" >&5 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 851 "configure" -#include "confdefs.h" -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 876 "configure" -#include "confdefs.h" -#include <string.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 894 "configure" -#include "confdefs.h" -#include <stdlib.h> -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext <<EOF -#line 915 "configure" -#include "confdefs.h" -#include <ctype.h> -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -if { (eval echo configure:926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* -fi - -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - - -echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:951: checking whether time.h and sys/time.h may both be included" >&5 -if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 956 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/time.h> -#include <time.h> -int main() { -struct tm *tp; -; return 0; } -EOF -if { (eval echo configure:965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_header_time=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_time=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_header_time" 1>&6 -if test $ac_cv_header_time = yes; then - cat >> confdefs.h <<\EOF -#define TIME_WITH_SYS_TIME 1 -EOF - -fi - -for ac_hdr in limits.h unistd.h sys/time.h string.h stdlib.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:989: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 994 "configure" -#include "confdefs.h" -#include <$ac_hdr> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1027: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1032 "configure" -#include "confdefs.h" - -int main() { - -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:1102: checking for size_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1107 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#include <stddef.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_size_t=yes -else - rm -rf conftest* - ac_cv_type_size_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_size_t" 1>&6 -if test $ac_cv_type_size_t = no; then - cat >> confdefs.h <<\EOF -#define size_t unsigned -EOF - -fi - -echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:1135: checking for mode_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1140 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#include <stddef.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_mode_t=yes -else - rm -rf conftest* - ac_cv_type_mode_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_mode_t" 1>&6 -if test $ac_cv_type_mode_t = no; then - cat >> confdefs.h <<\EOF -#define mode_t int -EOF - -fi - - -echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:1169: checking for pid_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1174 "configure" -#include "confdefs.h" -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#include <stddef.h> -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_pid_t=yes -else - rm -rf conftest* - ac_cv_type_pid_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_pid_t" 1>&6 -if test $ac_cv_type_pid_t = no; then - cat >> confdefs.h <<\EOF -#define pid_t int -EOF - -fi - -echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:1202: checking for st_blksize in struct stat" >&5 -if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1207 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/stat.h> -int main() { -struct stat s; s.st_blksize; -; return 0; } -EOF -if { (eval echo configure:1215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_st_blksize=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_struct_st_blksize=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6 -if test $ac_cv_struct_st_blksize = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ST_BLKSIZE 1 -EOF - -fi - -echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:1236: checking for st_blocks in struct stat" >&5 -if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1241 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/stat.h> -int main() { -struct stat s; s.st_blocks; -; return 0; } -EOF -if { (eval echo configure:1249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_st_blocks=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_struct_st_blocks=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_struct_st_blocks" 1>&6 -if test $ac_cv_struct_st_blocks = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ST_BLOCKS 1 -EOF - -else - LIBOBJS="$LIBOBJS fileblocks.o" -fi - -echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:1272: checking for st_rdev in struct stat" >&5 -if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1277 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/stat.h> -int main() { -struct stat s; s.st_rdev; -; return 0; } -EOF -if { (eval echo configure:1285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_st_rdev=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_struct_st_rdev=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_struct_st_rdev" 1>&6 -if test $ac_cv_struct_st_rdev = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ST_RDEV 1 -EOF - -fi - -echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:1306: checking whether struct tm is in sys/time.h or time.h" >&5 -if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1311 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <time.h> -int main() { -struct tm *tp; tp->tm_sec; -; return 0; } -EOF -if { (eval echo configure:1319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_tm=time.h -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_struct_tm=sys/time.h -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_struct_tm" 1>&6 -if test $ac_cv_struct_tm = sys/time.h; then - cat >> confdefs.h <<\EOF -#define TM_IN_SYS_TIME 1 -EOF - -fi - - - -for ac_func in symlink getcwd getwd lstat gethostname strerror clock getrusage -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1344: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1349 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:1372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -test $ac_cv_func_symlink = yes && MAYBES="$MAYBES symlnk_.o" -test $ac_cv_func_lstat = yes && MAYBES="$MAYBES lstat_.o" -test $ac_cv_func_gethostname = yes && MAYBES="$MAYBES hostnm_.o" -test $ac_cv_func_clock = yes && MAYBES="$MAYBES mclock_.o" - - - - - - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir - -trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@ac_cv_prog_chmod@%$ac_cv_prog_chmod%g -s%@RANLIB@%$RANLIB%g -s%@AR@%$AR%g -s%@CPP@%$CPP%g -s%@LIBOBJS@%$LIBOBJS%g -s%@MAYBES@%$MAYBES%g -s%@CROSS@%$CROSS%g -s%@RANLIB_TEST@%$RANLIB_TEST%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <<EOF - CONFIG_HEADERS="config.h" -EOF -cat >> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <<EOF - -EOF -cat >> $CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/gcc/f/runtime/libU77/configure.in b/gcc/f/runtime/libU77/configure.in deleted file mode 100644 index d50fa118e93..00000000000 --- a/gcc/f/runtime/libU77/configure.in +++ /dev/null @@ -1,111 +0,0 @@ -# Process this file with autoconf to produce a configure script. -# Copyright (C) 1995 Free Software Foundation, Inc. -# Contributed by Dave Love (d.love@dl.ac.uk). -# -#This file is part of the GNU Fortran libU77 library. -# -#This library is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2, or (at your option) -#any later version. -# -#GNU Fortran is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#GNU Library General Public License for more details. -# -#You should have received a copy of the GNU Library General Public -#License along with GNU Fortran; see the file COPYING. If not, write -#to Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -#USA. - -AC_INIT(access_.c) -AC_CONFIG_HEADER(config.h) - -dnl Checks for programs. -# For g77 we'll set CC to point at the built gcc, but this will get it into -# the makefiles -AC_PROG_CC -dnl AC_C_CROSS -dnl Gives misleading `(cached)' message from the check. -if test "$CROSS";then - ac_cv_c_cross=yes -else - ac_cv_c_cross=no -fi - -dnl This is only because we (horribly) punt the chmod job to the program at -dnl present. Note that the result of this test could be wrong in the cross -dnl case. -AC_PATH_PROG(ac_cv_prog_chmod, chmod, no) -if test "$ac_cv_prog_chmod" != no || test "$CROSS"; then - MAYBES=chmod_.o - AC_DEFINE_UNQUOTED(CHMOD_PATH,"$ac_cv_prog_chmod") -else - MAYBES="" -fi - -dnl for g77 build maybe use $(RANLIB_FOR_TARGET) always (like wise AR) -if test "$ac_cv_c_cross" = yes; then - RANLIB=$RANLIB_FOR_TARGET - AR=$AR_FOR_TARGET - AC_SUBST(RANLIB) -else - AC_PROG_RANLIB - AR=ar - RANLIB_TEST=true -fi -AC_SUBST(AR) -dnl not needed for g77 -dnl AC_SUBST(AR_FOR_TARGET) -dnl AC_SUBST(RANLIB_FOR_TARGET) -dnl AC_SUBST(RANLIB_TEST_FOR_TARGET) -dnl not needed for g77? -dnl AC_PROG_MAKE_SET - -dnl Checks for libraries. - -dnl Checks for header files. -AC_HEADER_STDC -dnl We could do this if we didn't know we were using gcc -dnl AC_MSG_CHECKING(for prototype-savvy compiler) -dnl AC_CACHE_VAL(ac_cv_sys_proto, -dnl [AC_TRY_LINK(, -dnl dnl looks screwy because TRY_LINK expects a function body -dnl [return 0;} int foo (int * bar) {], -dnl ac_cv_sys_proto=yes, -dnl [ac_cv_sys_proto=no -dnl AC_DEFINE(KR_headers)])]) -dnl AC_MSG_RESULT($ac_cv_sys_proto) - -AC_HEADER_TIME -AC_CHECK_HEADERS(limits.h unistd.h sys/time.h string.h stdlib.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T -AC_TYPE_MODE_T - -AC_TYPE_PID_T -dnl The next 3 demand a dummy fileblocks.o (added to LIBOJS). We don't use -dnl LIBOJS, though. -AC_STRUCT_ST_BLKSIZE -AC_STRUCT_ST_BLOCKS -AC_STRUCT_ST_RDEV -AC_STRUCT_TM - -dnl Checks for library functions. - -AC_CHECK_FUNCS(symlink getcwd getwd lstat gethostname strerror clock getrusage) -test $ac_cv_func_symlink = yes && MAYBES="$MAYBES symlnk_.o" -test $ac_cv_func_lstat = yes && MAYBES="$MAYBES lstat_.o" -test $ac_cv_func_gethostname = yes && MAYBES="$MAYBES hostnm_.o" -test $ac_cv_func_clock = yes && MAYBES="$MAYBES mclock_.o" -AC_SUBST(MAYBES) - - -AC_SUBST(CROSS) -AC_SUBST(RANLIB) -AC_SUBST(RANLIB_TEST) - -AC_OUTPUT(Makefile) diff --git a/gcc/f/runtime/libU77/ctime_.c b/gcc/f/runtime/libU77/ctime_.c deleted file mode 100644 index af5813772af..00000000000 --- a/gcc/f/runtime/libU77/ctime_.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -/* may need sys/time.h & long arg for stime (bsd, svr1-3) */ - -#ifdef KR_headers -/* Character */ void G77_ctime_0 (chtime, Lchtime, xstime) - char *chtime; - longint * xstime; - ftnlen Lchtime; -#else -/* Character */ void G77_ctime_0 (char *chtime, const ftnlen Lchtime, longint * xstime) -#endif -{ - int i, l; - int s_copy (); - time_t stime = *xstime; - - /* Allow a length other than 24 for compatibility with what other - systems do, despite it being documented as 24. */ - s_copy (chtime, ctime (&stime), Lchtime, 24); -} diff --git a/gcc/f/runtime/libU77/date_.c b/gcc/f/runtime/libU77/date_.c deleted file mode 100644 index 8426edc4fb0..00000000000 --- a/gcc/f/runtime/libU77/date_.c +++ /dev/null @@ -1,39 +0,0 @@ -/* date_.f -- translated by f2c (version 19961001). - You must link the resulting object file with the libraries: - -lf2c -lm (in that order) -*/ - -#include "f2c.h" - -/* Table of constant values */ - -static integer c__5 = 5; - -/* Subroutine */ int G77_date_0 (char *buf, ftnlen buf_len) -{ - /* System generated locals */ - address a__1[5]; - integer i__1, i__2[5]; - char ch__1[24]; - - /* Builtin functions */ - /* Subroutine */ int s_copy(), s_cat(); - - /* Local variables */ - static char cbuf[24]; - extern integer G77_time_0 (); - extern /* Character */ VOID G77_ctime_0 (); - - i__1 = G77_time_0 (); - G77_ctime_0 (ch__1, 24L, &i__1); - s_copy(cbuf, ch__1, 24L, 24L); -/* Writing concatenation */ - i__2[0] = 2, a__1[0] = cbuf + 8; - i__2[1] = 1, a__1[1] = "-"; - i__2[2] = 3, a__1[2] = cbuf + 4; - i__2[3] = 1, a__1[3] = "-"; - i__2[4] = 2, a__1[4] = cbuf + 22; - s_cat(buf, a__1, i__2, &c__5, buf_len); - return 0; -} /* date_ */ - diff --git a/gcc/f/runtime/libU77/dbes.c b/gcc/f/runtime/libU77/dbes.c deleted file mode 100644 index 8c245cf3c25..00000000000 --- a/gcc/f/runtime/libU77/dbes.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#include "f2c.h" -#include <math.h> - -#if 0 /* Don't include these unless necessary -- dnp. */ -double G77_dbesj0_0 (const double *x) { - return j0 (*x); -} - -double G77_dbesj1_0 (const double *x) { - return j1 (*x); -} - -double G77_dbesjn_0 (const integer *n, double *x) { - return jn (*n, *x); - } - -double G77_dbesy0_0 (const double *x) { - return y0 (*x); -} - -double G77_dbesy1_0 (const double *x) { - return y1 (*x); -} - -double G77_dbesyn_0 (const integer *n, double *x) { - return yn (*n, *x); -} -#endif diff --git a/gcc/f/runtime/libU77/dtime_.c b/gcc/f/runtime/libU77/dtime_.c deleted file mode 100644 index dc0accbfdf0..00000000000 --- a/gcc/f/runtime/libU77/dtime_.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <sys/times.h> -#if HAVE_GETRUSAGE -# include <sys/time.h> -# include <sys/resource.h> -#endif -#include "f2c.h" - -/* For dtime, etime we store the clock tick parameter (clk_tck) the - first time either of them is invoked rather than each time. This - approach probably speeds up each invocation by avoiding a system - call each time, but means that the overhead of the first call is - different to all others. */ -static long clk_tck = 0; - -#ifdef KR_headers -double G77_dtime_0 (tarray) - real tarray[2]; -#else -double G77_dtime_0 (real tarray[2]) -#endif -{ - time_t utime, stime; - static time_t old_utime = 0, old_stime = 0; - /* The getrusage version is only the default for convenience. */ -#ifdef HAVE_GETRUSAGE - struct rusage rbuff; - - if (getrusage (RUSAGE_SELF, &rbuff) != 0) - abort (); - utime = ((float) (rbuff.ru_utime).tv_sec + - (float) (rbuff.ru_utime).tv_usec/1000000.0); - tarray[0] = utime - (float) old_utime; - stime = ((float) (rbuff.ru_stime).tv_sec + - (float) (rbuff.ru_stime).tv_usec/1000000.0); - tarray[1] = stime - old_stime; -#else /* HAVE_GETRUSAGE */ - struct tms buffer; - -/* NeXTStep seems to define _SC_CLK_TCK but not to have sysconf; - fixme: does using _POSIX_VERSION help? */ -# if defined _SC_CLK_TCK && defined _POSIX_VERSION - if (! clk_tck) clk_tck = sysconf(_SC_CLK_TCK); -# elif defined CLOCKS_PER_SECOND - if (! clk_tck) clk_tck = CLOCKS_PER_SECOND; -# elif defined CLK_TCK - if (! clk_tck) clk_tck = CLK_TCK; -# elif defined HAVE_GETRUSAGE -# else - #error Dont know clock tick length -# endif - if (times(&buffer) < 0) return -1.0; - utime = buffer.tms_utime; stime = buffer.tms_stime; - tarray[0] = ((float)(utime - old_utime)) / (float)clk_tck; - tarray[1] = ((float)(stime - old_stime)) / (float)clk_tck; -#endif /* HAVE_GETRUSAGE */ - old_utime = utime; old_stime = stime; - return (tarray[0]+tarray[1]); -} diff --git a/gcc/f/runtime/libU77/etime_.c b/gcc/f/runtime/libU77/etime_.c deleted file mode 100644 index fa6ccfb0d4d..00000000000 --- a/gcc/f/runtime/libU77/etime_.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <sys/types.h> -#include <sys/times.h> -#include <sys/param.h> -#if HAVE_GETRUSAGE -# include <sys/time.h> -# include <sys/resource.h> -#endif -#include "f2c.h" - -/* For dtime, etime we store the clock tick parameter (clk_tck) the - first time either of them is invoked rather than each time. This - approach probably speeds up each invocation by avoiding a system - call each time, but means that the overhead of the first call is - different to all others. */ -static long clk_tck = 0; - -#ifdef KR_headers -double G77_etime_0 (tarray) - real tarray[2]; -#else -double G77_etime_0 (real tarray[2]) -#endif -{ - /* The getrusage version is only the default for convenience. */ -#ifdef HAVE_GETRUSAGE - struct rusage rbuff; - - if (getrusage (RUSAGE_SELF, &rbuff) != 0) - abort (); - tarray[0] = ((float) (rbuff.ru_utime).tv_sec + - (float) (rbuff.ru_utime).tv_usec/1000000.0); - tarray[1] = ((float) (rbuff.ru_stime).tv_sec + - (float) (rbuff.ru_stime).tv_usec/1000000.0); -#else /* HAVE_GETRUSAGE */ - struct tms buffer; - -/* NeXTStep seems to define _SC_CLK_TCK but not to have sysconf; - fixme: does using _POSIX_VERSION help? */ -# if defined _SC_CLK_TCK && defined _POSIX_VERSION - if (! clk_tck) clk_tck = sysconf(_SC_CLK_TCK); -# elif defined CLOCKS_PER_SECOND - if (! clk_tck) clk_tck = CLOCKS_PER_SECOND; -# elif defined CLK_TCK - if (! clk_tck) clk_tck = CLK_TCK; -# elif defined HAVE_GETRUSAGE -# else - #error Dont know clock tick length -# endif - if (times(&buffer) < 0) return -1.0; - tarray[0] = (float) buffer.tms_utime / (float)clk_tck; - tarray[1] = (float) buffer.tms_stime / (float)clk_tck; -#endif /* HAVE_GETRUSAGE */ - return (tarray[0]+tarray[1]); -} diff --git a/gcc/f/runtime/libU77/fdate_.c b/gcc/f/runtime/libU77/fdate_.c deleted file mode 100644 index afe8b24fc44..00000000000 --- a/gcc/f/runtime/libU77/fdate_.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif - -#include "f2c.h" - -/* NB. this implementation is for a character*24 function. There's - also a subroutine version. Of course, the calling convention is - essentially the same for both. */ - -/* Character *24 */ void G77_fdate_0 (char *ret_val, ftnlen ret_val_len) -{ - int s_copy (); - time_t tloc; - tloc = time (NULL); - /* Allow a length other than 24 for compatibility with what other - systems do, despite it being documented as 24. */ - s_copy (ret_val, ctime ((time_t *) &tloc), ret_val_len, 24); -} diff --git a/gcc/f/runtime/libU77/fgetc_.c b/gcc/f/runtime/libU77/fgetc_.c deleted file mode 100644 index 49f39830d2c..00000000000 --- a/gcc/f/runtime/libU77/fgetc_.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#include "f2c.h" -#include "fio.h" - -#ifdef KR_headers -integer G77_fgetc_0 (lunit, c, Lc) - integer *lunit; - ftnlen Lc; /* should be 1 */ - char *c; -#else -integer G77_fgetc_0 (const integer *lunit, char *c, ftnlen Lc) -#endif -{ - int err; - FILE *f = f__units[*lunit].ufd; - - if (*lunit>=MXUNIT || *lunit<0) - return 101; /* bad unit error */ - err = getc (f); - if (err == EOF) { - if (feof (f)) - return -1; - else - return ferror (f); } - else { - if (Lc == 0) - return 0; - - c[0] = err; - while (--Lc) - *++c = ' '; - return 0; } -} - -#ifdef KR_headers -integer G77_fget_0 (c, Lc) - ftnlen Lc; /* should be 1 */ - char *c; -#else -integer G77_fget_0 (char *c, const ftnlen Lc) -#endif -{ - integer five = 5; - - return G77_fgetc_0 (&five, c, Lc); -} diff --git a/gcc/f/runtime/libU77/flush1_.c b/gcc/f/runtime/libU77/flush1_.c deleted file mode 100644 index 451915debac..00000000000 --- a/gcc/f/runtime/libU77/flush1_.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#include "f2c.h" -#include "fio.h" - -/* This flushes a single unit, c.f. libI77 version. */ - -#ifdef KR_headers -extern integer G77_fnum_0 (); - -/* Subroutine */ int G77_flush1_0 (lunit) - integer *lunit; -#else -extern integer G77_fnum_0 (integer *); - -/* Subroutine */ int G77_flush1_0 (const integer *lunit) -#endif -{ - if (*lunit>=MXUNIT || *lunit<0) - err(1,101,"flush"); - /* f__units is a table of descriptions for the unit numbers (defined - in io.h) with file descriptors rather than streams */ - if (f__units[*lunit].ufd != NULL && f__units[*lunit].uwrt) - fflush(f__units[*lunit].ufd); - return 0; -} diff --git a/gcc/f/runtime/libU77/fnum_.c b/gcc/f/runtime/libU77/fnum_.c deleted file mode 100644 index 0a3ba013e06..00000000000 --- a/gcc/f/runtime/libU77/fnum_.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "f2c.h" -#include "fio.h" - -#ifdef KR_headers -integer G77_fnum_0 (lunit) - integer *lunit; -#else -integer G77_fnum_0 (integer *lunit) -#endif -{ - if (*lunit>=MXUNIT || *lunit<0) - err(1,101,"fnum"); - /* f__units is a table of descriptions for the unit numbers (defined - in io.h). Use file descriptor (ufd) and fileno rather than udev - field since udev is unix specific */ - return fileno(f__units[*lunit].ufd); -} diff --git a/gcc/f/runtime/libU77/fputc_.c b/gcc/f/runtime/libU77/fputc_.c deleted file mode 100644 index 5a1109e8d4f..00000000000 --- a/gcc/f/runtime/libU77/fputc_.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#include "f2c.h" -#include "fio.h" - -#ifdef KR_headers -integer G77_fputc_0 (lunit, c, Lc) - integer *lunit; - ftnlen Lc; /* should be 1 */ - char *c; -#else -integer G77_fputc_0 (const integer *lunit, const char *c, const ftnlen Lc) -#endif -{ - int err; - FILE *f = f__units[*lunit].ufd; - - if (*lunit>=MXUNIT || *lunit<0) - return 101; /* bad unit error */ - err = putc (c[0], f); - if (err == EOF) { - if (feof (f)) - return -1; - else - return ferror (f); - } - else - return 0; -} - -#ifdef KR_headers -integer G77_fput_0 (c, Lc) - ftnlen Lc; /* should be 1 */ - char *c; -#else -integer G77_fput_0 (const char *c, const ftnlen Lc) -#endif -{ - integer six = 6; - - return G77_fputc_0 (&six, c, Lc); -} diff --git a/gcc/f/runtime/libU77/fstat_.c b/gcc/f/runtime/libU77/fstat_.c deleted file mode 100644 index da5434ad0b7..00000000000 --- a/gcc/f/runtime/libU77/fstat_.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "f2c.h" -#include <sys/types.h> -#include <sys/stat.h> - -#ifdef KR_headers -extern integer G77_fnum_0 (); - -integer G77_fstat_0 (lunit, statb) - integer *lunit; - integer statb[13]; -#else -extern integer G77_fnum_0 (const integer *); - -integer G77_fstat_0 (const integer *lunit, integer statb[13]) -#endif -{ - int err; - struct stat buf; - - err = fstat (G77_fnum_0 (lunit), &buf); - statb[0] = buf.st_dev; - statb[1] = buf.st_ino; - statb[2] = buf.st_mode; - statb[3] = buf.st_nlink; - statb[4] = buf.st_uid; - statb[5] = buf.st_gid; -#if HAVE_ST_RDEV - statb[6] = buf.st_rdev; /* not posix */ -#else - statb[6] = 0; -#endif - statb[7] = buf.st_size; - statb[8] = buf.st_atime; - statb[9] = buf.st_mtime; - statb[10] = buf.st_ctime; -#if HAVE_ST_BLKSIZE - statb[11] = buf.st_blksize; /* not posix */ -#else - statb[11] = -1; -#endif -#if HAVE_ST_BLOCKS - statb[12] = buf.st_blocks; /* not posix */ -#else - statb[12] = -1; -#endif - return err; -} diff --git a/gcc/f/runtime/libU77/gerror_.c b/gcc/f/runtime/libU77/gerror_.c deleted file mode 100644 index 6f5943c1dce..00000000000 --- a/gcc/f/runtime/libU77/gerror_.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <errno.h> -#include <stddef.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -#ifndef HAVE_STRERROR - extern char *sys_errlist []; -# define strerror(i) (sys_errlist[i]) -#endif -#ifdef KR_headers -extern void s_copy (); -/* Subroutine */ int G77_gerror_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -/* Subroutine */ int G77_gerror_0 (char *str, ftnlen Lstr) -#endif -{ - char * s; - - s = strerror(errno); - s_copy (str, s, Lstr, strlen (s)); - return 0; -} diff --git a/gcc/f/runtime/libU77/getcwd_.c b/gcc/f/runtime/libU77/getcwd_.c deleted file mode 100644 index e757803896a..00000000000 --- a/gcc/f/runtime/libU77/getcwd_.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <errno.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include <stdio.h> /* for NULL */ -#include <errno.h> /* for ENOSYS */ -#include "f2c.h" - -#if HAVE_GETCWD - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#else - extern char *getcwd (); -#endif - -#ifdef KR_headers -extern void s_copy (); -integer G77_getcwd_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -integer G77_getcwd_0 (char *str, const ftnlen Lstr) -#endif -{ - int i; - char *ret; - - ret = getcwd (str, Lstr); - if (ret == NULL) return errno; - for (i=strlen(str); i<Lstr; i++) - str[i] = ' '; - return 0; -} - -#elif HAVE_GETWD /* HAVE_GETCWD */ - -/* getwd usage taken from SunOS4 man */ - -# include <sys/param.h> - extern char *getwd (); -#ifdef KR_headers -extern VOID s_copy (); -integer G77_getcwd_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -integer G77_getcwd_0 (char *str, const ftnlen Lstr) -#endif -{ - char pathname[MAXPATHLEN]; - size_t l; - - if (getwd (pathname) == NULL) { - return errno; - } else { - s_copy (str, pathname, Lstr, strlen (str)); - return 0; - } -} - -#else /* !HAVE_GETWD && !HAVE_GETCWD */ - -#ifdef KR_headers -extern VOID s_copy (); -integer G77_getcwd_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -integer G77_getcwd_0 (char *str, const ftnlen Lstr) -#endif -{ - return errno = ENOSYS; -} - -#endif diff --git a/gcc/f/runtime/libU77/getgid_.c b/gcc/f/runtime/libU77/getgid_.c deleted file mode 100644 index 02e8a4e4895..00000000000 --- a/gcc/f/runtime/libU77/getgid_.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <sys/types.h> -#include "f2c.h" - -#ifdef KR_headers -integer G77_getgid_0 () -#else -integer G77_getgid_0 (void) -#endif -{ - return getgid (); -} diff --git a/gcc/f/runtime/libU77/getlog_.c b/gcc/f/runtime/libU77/getlog_.c deleted file mode 100644 index a2c5f20f28b..00000000000 --- a/gcc/f/runtime/libU77/getlog_.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> -#endif -#include <stdio.h> -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -/* getlogin not in svr1-3 */ - -/* SGI also has character*(*) function getlog() */ - -#ifdef KR_headers -extern VOID s_copy (); -/* Subroutine */ int G77_getlog_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -/* Subroutine */ int G77_getlog_0 (char *str, const ftnlen Lstr) -#endif -{ - size_t i; - char *p; - - p = getlogin (); - if (p != NULL) { - i = strlen (p); - s_copy (str, p, Lstr, i); - } else { - s_copy (str, " ", Lstr, 1); - } - return 0; -} diff --git a/gcc/f/runtime/libU77/getpid_.c b/gcc/f/runtime/libU77/getpid_.c deleted file mode 100644 index fa484785957..00000000000 --- a/gcc/f/runtime/libU77/getpid_.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <sys/types.h> -#include "f2c.h" - -#ifdef KR_headers -integer G77_getpid_0 () -#else -integer G77_getpid_0 (void) -#endif -{ - return getpid (); -} diff --git a/gcc/f/runtime/libU77/getuid_.c b/gcc/f/runtime/libU77/getuid_.c deleted file mode 100644 index 421bb4c9362..00000000000 --- a/gcc/f/runtime/libU77/getuid_.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <sys/types.h> -#include "f2c.h" - -#ifdef KR_headers -integer G77_getuid_0 () -#else -integer G77_getuid_0 (void) -#endif -{ - return getuid (); -} diff --git a/gcc/f/runtime/libU77/gmtime_.c b/gcc/f/runtime/libU77/gmtime_.c deleted file mode 100644 index 5f6f8ec6a0b..00000000000 --- a/gcc/f/runtime/libU77/gmtime_.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -/* fixme: do we need to use TM_IN_SYS_TIME? */ -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -#ifdef KR_headers -/* Subroutine */ int G77_gmtime_0 (stime, tarray) - integer *stime, tarray[9]; -#else -/* Subroutine */ int G77_gmtime_0 (const integer * stime, integer tarray[9]) -#endif -{ - struct tm *lt; - lt = gmtime ((time_t *) stime); - tarray[0] = lt->tm_sec; - tarray[1] = lt->tm_min; - tarray[2] = lt->tm_hour; - tarray[3] = lt->tm_mday; - tarray[4] = lt->tm_mon; - tarray[5] = lt->tm_year; - tarray[6] = lt->tm_wday; - tarray[7] = lt->tm_yday; - tarray[8] = lt->tm_isdst; - return 0; -} diff --git a/gcc/f/runtime/libU77/hostnm_.c b/gcc/f/runtime/libU77/hostnm_.c deleted file mode 100644 index 8229e09e727..00000000000 --- a/gcc/f/runtime/libU77/hostnm_.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <errno.h> /* for ENOSYS */ -#include "f2c.h" - -integer G77_hostnm_0 (char *name, ftnlen Lname) -{ - int ret, i; - -#if HAVE_GETHOSTNAME - ret = gethostname (name, Lname); - if (ret==0) { - /* Pad with blanks (assuming gethostname will make an error - return if it can't fit in the null). */ - for (i=strlen(name); i<=Lname; i++) - name[i] = ' '; - } - return ret; -#else - return errno = ENOSYS; -#endif -} diff --git a/gcc/f/runtime/libU77/idate_.c b/gcc/f/runtime/libU77/idate_.c deleted file mode 100644 index c4075767a4c..00000000000 --- a/gcc/f/runtime/libU77/idate_.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -/* VMS and Irix versions (at least) differ from libU77 elsewhere */ - -/* libU77 one: */ - -#ifdef KR_headers -/* Subroutine */ int G77_idate_0 (iarray) - int iarray[3]; -#else -/* Subroutine */ int G77_idate_0 (int iarray[3]) -#endif -{ - struct tm *lt; - time_t tim; - tim = time(NULL); - lt = localtime(&tim); - iarray[0] = lt->tm_mday; - iarray[1] = lt->tm_mon + 1; /* in range 1-12 in SunOS (experimentally) */ - /* The `+1900' is consistent with SunOS and Irix, but they don't say - it's added. I think I've seen a system where tm_year was since - 1970, but can't now verify that, so assume the ANSI definition. */ - iarray[2] = lt->tm_year + 1900; - return 0; -} diff --git a/gcc/f/runtime/libU77/ierrno_.c b/gcc/f/runtime/libU77/ierrno_.c deleted file mode 100644 index 557b53a4664..00000000000 --- a/gcc/f/runtime/libU77/ierrno_.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <errno.h> -#include "f2c.h" - -#ifdef KR_headers -integer G77_ierrno_0 () -#else -integer G77_ierrno_0 (void) -#endif -{ - return errno; -} diff --git a/gcc/f/runtime/libU77/irand_.c b/gcc/f/runtime/libU77/irand_.c deleted file mode 100644 index 2bf14ccee26..00000000000 --- a/gcc/f/runtime/libU77/irand_.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif -#include "f2c.h" - -/* We could presumably do much better than the traditional libc - version, though at least the glibc one is reasonable, it seems. - For the sake of the innocent, I'm not sure we should really do - this... */ - -/* Note this is per SunOS -- other s may have no arg. */ - -#ifdef KR_headers -integer G77_irand_0 (flag) - integer *flag; -#else -integer G77_irand_0 (integer *flag) -#endif -{ - switch (*flag) { - case 0: - break; - case 1: - srand (0); /* Arbitrary choice of initialiser. */ - break; - default: - srand (*flag); - } - return rand (); -} - - - - - - diff --git a/gcc/f/runtime/libU77/isatty_.c b/gcc/f/runtime/libU77/isatty_.c deleted file mode 100644 index 92c33468f53..00000000000 --- a/gcc/f/runtime/libU77/isatty_.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include "f2c.h" -#include "fio.h" - -#ifdef KR_headers -extern integer G77_fnum_0 (); - -logical G77_isatty_0 (lunit) - integer *lunit; -#else -extern integer G77_fnum_0 (integer *); - -logical G77_isatty_0 (integer *lunit) -#endif -{ - if (*lunit>=MXUNIT || *lunit<0) - err(1,101,"isatty"); - /* f__units is a table of descriptions for the unit numbers (defined - in io.h) with file descriptors rather than streams */ - return (isatty(G77_fnum_0 (lunit)) ? TRUE_ : FALSE_); -} diff --git a/gcc/f/runtime/libU77/itime_.c b/gcc/f/runtime/libU77/itime_.c deleted file mode 100644 index 50378d54426..00000000000 --- a/gcc/f/runtime/libU77/itime_.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -#ifdef KR_headers -/* Subroutine */ int G77_itime_0 (tarray) - integer tarray[3]; -#else -/* Subroutine */ int G77_itime_0 (integer tarray[3]) -#endif -{ - struct tm *lt; - time_t tim; - - tim = time(NULL); - lt = localtime(&tim); - tarray[0] = lt->tm_hour; - tarray[1] = lt->tm_min; - tarray[2] = lt->tm_sec; - return 0; -} diff --git a/gcc/f/runtime/libU77/kill_.c b/gcc/f/runtime/libU77/kill_.c deleted file mode 100644 index 32afddf1e46..00000000000 --- a/gcc/f/runtime/libU77/kill_.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <sys/types.h> -#include <signal.h> -#include <errno.h> -#include "f2c.h" - -/* fixme: bsd, svr1-3 use int, not pid_t */ - -#ifdef KR_headers -integer G77_kill_0 (pid, signum) - integer *pid, *signum; -#else -integer G77_kill_0 (const integer *pid, const integer *signum) -#endif -{ - return kill ((pid_t) *pid, *signum) ? errno : 0; -} diff --git a/gcc/f/runtime/libU77/link_.c b/gcc/f/runtime/libU77/link_.c deleted file mode 100644 index 6892dcb7694..00000000000 --- a/gcc/f/runtime/libU77/link_.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <errno.h> -#include <sys/param.h> -#include "f2c.h" - -#ifdef KR_headers -void g_char (); - -integer G77_link_0 (path1, path2, Lpath1, Lpath2) - char *path1, *path2; ftnlen Lpath1, Lpath2; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_link_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) -#endif -{ - char *buff1, *buff2; - char *bp, *blast; - int i; - - buff1 = malloc (Lpath1+1); - if (buff1 == NULL) return -1; - g_char (path1, Lpath1, buff1); - buff2 = malloc (Lpath2+1); - if (buff2 == NULL) return -1; - g_char (path2, Lpath2, buff2); - i = link (buff1, buff2); - free (buff1); free (buff2); - return i ? errno : 0; -} diff --git a/gcc/f/runtime/libU77/lnblnk_.c b/gcc/f/runtime/libU77/lnblnk_.c deleted file mode 100644 index 806eca293f1..00000000000 --- a/gcc/f/runtime/libU77/lnblnk_.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - - -/* via f2c from Fortran */ - -#include "f2c.h" - -integer G77_lnblnk_0 (char *str, ftnlen str_len) -{ - integer ret_val; - integer i_len(); - - for (ret_val = str_len; ret_val >= 1; --ret_val) { - if (*(unsigned char *)&str[ret_val - 1] != ' ') { - return ret_val; - } - } - return ret_val; -} diff --git a/gcc/f/runtime/libU77/lstat_.c b/gcc/f/runtime/libU77/lstat_.c deleted file mode 100644 index e3efce7c55b..00000000000 --- a/gcc/f/runtime/libU77/lstat_.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif -#include <sys/types.h> -#include <sys/stat.h> -#include <errno.h> /* for ENOSYS */ -#include "f2c.h" - -/* lstat isn't posix */ - -#ifdef KR_headers -void g_char(); - -integer G77_lstat_0 (name, statb, Lname) - char *name; - integer statb[13]; - ftnlen Lname; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_lstat_0 (const char *name, integer statb[13], const ftnlen Lname) -#endif -{ -#if HAVE_LSTAT - char *buff; - char *bp, *blast; - int err; - struct stat buf; - - buff = malloc (Lname+1); - if (buff == NULL) return -1; - g_char (name, Lname, buff); - err = lstat (buff, &buf); - free (buff); - statb[0] = buf.st_dev; - statb[1] = buf.st_ino; - statb[2] = buf.st_mode; - statb[3] = buf.st_nlink; - statb[4] = buf.st_uid; - statb[5] = buf.st_gid; -#if HAVE_ST_RDEV - statb[6] = buf.st_rdev; -#else - statb[6] = 0; -#endif - statb[7] = buf.st_size; - statb[8] = buf.st_atime; - statb[9] = buf.st_mtime; - statb[10] = buf.st_ctime; - statb[6] = 0; -#if HAVE_ST_BLKSIZE - statb[11] = buf.st_blksize; -#else - statb[11] = -1; -#endif -#if HAVE_ST_BLOCKS - statb[12] = buf.st_blocks; -#else - statb[12] = -1; -#endif - return err; -#else /* !HAVE_LSTAT */ - return errno = ENOSYS; -#endif /* !HAVE_LSTAT */ -} diff --git a/gcc/f/runtime/libU77/ltime_.c b/gcc/f/runtime/libU77/ltime_.c deleted file mode 100644 index 151ac6c9b55..00000000000 --- a/gcc/f/runtime/libU77/ltime_.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -/* fixme: do we need to use TM_IN_SYS_TIME? */ -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -#ifdef KR_headers -/* Subroutine */ int G77_ltime_0 (stime, tarray) - integer *stime, tarray[9]; -#else -/* Subroutine */ int G77_ltime_0 (const integer * stime, integer tarray[9]) -#endif -{ - struct tm *lt; - lt = localtime ((time_t *) stime); - tarray[0] = lt->tm_sec; - tarray[1] = lt->tm_min; - tarray[2] = lt->tm_hour; - tarray[3] = lt->tm_mday; - tarray[4] = lt->tm_mon; - tarray[5] = lt->tm_year; - tarray[6] = lt->tm_wday; - tarray[7] = lt->tm_yday; - tarray[8] = lt->tm_isdst; - return 0; -} diff --git a/gcc/f/runtime/libU77/mclock_.c b/gcc/f/runtime/libU77/mclock_.c deleted file mode 100644 index 6b7e81b1e04..00000000000 --- a/gcc/f/runtime/libU77/mclock_.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -/* Reported by wd42ej@sgi83.wwb.noaa.gov (Russ Jones AUTO-Sun3) on AIX. */ - -#ifdef KR_headers -longint G77_mclock_0 () -#else -longint G77_mclock_0 (void) -#endif -{ -#if HAVE_CLOCK - return clock (); -#else - return -1; -#endif -} diff --git a/gcc/f/runtime/libU77/perror_.c b/gcc/f/runtime/libU77/perror_.c deleted file mode 100644 index 26d8582dbcc..00000000000 --- a/gcc/f/runtime/libU77/perror_.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#include <errno.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -#ifdef KR_headers -/* Subroutine */ int G77_perror_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -/* Subroutine */ int G77_perror_0 (const char *str, const ftnlen Lstr) -#endif -{ - char buff[1000]; - char *bp, *blast; - - /* same technique as `system' -- what's wrong with malloc? */ - blast = buff + (Lstr < 1000 ? Lstr : 1000); - for (bp = buff ; bp<blast && *str!='\0' ; ) - *bp++ = *str++; - *bp = '\0'; - perror (buff); - return 0; -} diff --git a/gcc/f/runtime/libU77/rand_.c b/gcc/f/runtime/libU77/rand_.c deleted file mode 100644 index 165aee1220c..00000000000 --- a/gcc/f/runtime/libU77/rand_.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif -#include "f2c.h" -#ifndef RAND_MAX -# define RAND_MAX 2147483647 /* from SunOS */ -#endif - -/* We could presumably do much better than the traditional libc - version, though at least the glibc one is reasonable, it seems. - For the sake of the innocent, I'm not sure we should really do - this... */ - -/* Note this is per SunOS -- other s may have no arg. */ - -#ifdef KR_headers -double G77_rand_0 (flag) - integer *flag; -#else -double G77_rand_0 (integer *flag) -#endif -{ - switch (*flag) { - case 0: - break; - case 1: - srand (0); /* Arbitrary choice of initialiser. */ - break; - default: - srand (*flag); - } - return (float) rand () / RAND_MAX; -} diff --git a/gcc/f/runtime/libU77/rename_.c b/gcc/f/runtime/libU77/rename_.c deleted file mode 100644 index e8a4bf6523c..00000000000 --- a/gcc/f/runtime/libU77/rename_.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif -#include <stdio.h> -#include <errno.h> -#include "f2c.h" - -#ifdef KR_headers -void g_char (); - -integer G77_rename_0 (path1, path2, Lpath1, Lpath2) - char *path1, *path2; ftnlen Lpath1, Lpath2; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_rename_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) -#endif -{ - char *buff1, *buff2; - char *bp, *blast; - int i; - - buff1 = malloc (Lpath1+1); - if (buff1 == NULL) return -1; - g_char (path1, Lpath1, buff1); - buff2 = malloc (Lpath2+1); - if (buff2 == NULL) return -1; - g_char (path2, Lpath2, buff2); - i = rename (buff1, buff2); - free (buff1); free (buff2); - return i ? errno : 0; -} diff --git a/gcc/f/runtime/libU77/secnds_.c b/gcc/f/runtime/libU77/secnds_.c deleted file mode 100644 index 1942528530f..00000000000 --- a/gcc/f/runtime/libU77/secnds_.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include <sys/types.h> - -#include "f2c.h" - -/* This is a VMS intrinsic. */ - -double G77_secnds_0 (real *r) -{ - struct tm *lt; - time_t clock; - float f; - - clock = time (NULL); - lt = localtime (&clock); - f= (3600.0*((real)lt->tm_hour) + 60.0*((real)lt->tm_min) + - (real)lt->tm_sec - *r); - return f; -} - diff --git a/gcc/f/runtime/libU77/second_.c b/gcc/f/runtime/libU77/second_.c deleted file mode 100644 index 41bb5a90a92..00000000000 --- a/gcc/f/runtime/libU77/second_.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#include "f2c.h" - -double G77_second_0 () { - extern double G77_etime_0 (); - real tarray[2]; - - return G77_etime_0 (tarray); -} diff --git a/gcc/f/runtime/libU77/sleep_.c b/gcc/f/runtime/libU77/sleep_.c deleted file mode 100644 index 36e1b8d9a7b..00000000000 --- a/gcc/f/runtime/libU77/sleep_.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include "f2c.h" - -/* Subroutine */ -#ifdef KR_headers -int G77_sleep_0 (seconds) - integer *seconds; -#else -int G77_sleep_0 (const integer *seconds) -#endif -{ - (void) sleep ((unsigned int) *seconds); - return 0; -} diff --git a/gcc/f/runtime/libU77/srand_.c b/gcc/f/runtime/libU77/srand_.c deleted file mode 100644 index 8edc62e4fe0..00000000000 --- a/gcc/f/runtime/libU77/srand_.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if STDC_HEADERS -# include <stdlib.h> -#endif -#include "f2c.h" - -/* Subroutine */ -#ifdef KR_headers -int G77_srand_0 (seed) - integer *seed; -#else -int G77_srand_0 (const integer *seed) -#endif -{ - srand ((unsigned int) *seed); - return 0; -} diff --git a/gcc/f/runtime/libU77/stat_.c b/gcc/f/runtime/libU77/stat_.c deleted file mode 100644 index b24f3892221..00000000000 --- a/gcc/f/runtime/libU77/stat_.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if HAVE_STDLIB_H -# include <stdlib.h> -#endif -#include <sys/types.h> -#include <sys/stat.h> -#include "f2c.h" - -#ifdef KR_headers -void g_char (); - -integer G77_stat_0 (name, statb, Lname) - char *name; - integer statb[13]; - ftnlen Lname; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_stat_0 (const char *name, integer statb[13], const ftnlen Lname) -#endif -{ - char *buff; - char *bp, *blast; - int err; - struct stat buf; - - buff = malloc (Lname+1); - if (buff == NULL) return -1; - g_char (name, Lname, buff); - err = stat (buff, &buf); - free (buff); - statb[0] = buf.st_dev; - statb[1] = buf.st_ino; - statb[2] = buf.st_mode; - statb[3] = buf.st_nlink; - statb[4] = buf.st_uid; - statb[5] = buf.st_gid; -#if HAVE_ST_RDEV - statb[6] = buf.st_rdev; /* not posix */ -#else - statb[6] = 0; -#endif - statb[7] = buf.st_size; - statb[8] = buf.st_atime; - statb[9] = buf.st_mtime; - statb[10] = buf.st_ctime; -#if HAVE_ST_BLKSIZE - statb[11] = buf.st_blksize; /* not posix */ -#else - statb[11] = -1; -#endif -#if HAVE_ST_BLOCKS - statb[12] = buf.st_blocks; /* not posix */ -#else - statb[12] = -1; -#endif - return err; -} diff --git a/gcc/f/runtime/libU77/symlnk_.c b/gcc/f/runtime/libU77/symlnk_.c deleted file mode 100644 index d15e4528758..00000000000 --- a/gcc/f/runtime/libU77/symlnk_.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran. - -GNU Fortran is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <errno.h> -#include <sys/param.h> -#include "f2c.h" - -#ifdef KR_headers -void g_char (); - -integer G77_symlnk_0 (path1, path2, Lpath1, Lpath2) - char *path1, *path2; ftnlen Lpath1, Lpath2; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_symlnk_0 (const char *path1, const char *path2, const ftnlen Lpath1, const ftnlen Lpath2) -#endif -{ -#if HAVE_SYMLINK - char *buff1, *buff2; - char *bp, *blast; - int i; - - buff1 = (char *) malloc (Lpath1+1); - if (buff1 == NULL) return -1; - g_char (path1, Lpath1, buff1); - buff2 = (char *) malloc (Lpath2+1); - if (buff2 == NULL) return -1; - g_char (path2, Lpath2, buff2); - i = symlink (buff1, buff2); - free (buff1); free (buff2); - return i ? errno : 0; -#else /* !HAVE_SYMLINK */ - return errno = ENOSYS; -#endif /* !HAVE_SYMLINK */ -} diff --git a/gcc/f/runtime/libU77/system_clock_.c b/gcc/f/runtime/libU77/system_clock_.c deleted file mode 100644 index d5cbaac0608..00000000000 --- a/gcc/f/runtime/libU77/system_clock_.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include <sys/times.h> -#include <limits.h> -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include "f2c.h" - -#ifdef KR_headers -int G77_system_clock_0 (count, count_rate, count_max) - integer *count, *count_rate, *count_max; -#else -int G77_system_clock_0 (integer *count, integer *count_rate, integer *count_max) -#endif -{ - struct tms buffer; - unsigned long cnt; -#ifdef _SC_CLK_TCK - *count_rate = sysconf(_SC_CLK_TCK); -#elif defined CLOCKS_PER_SECOND - *count_rate = CLOCKS_PER_SECOND; -#elif defined CLK_TCK - *count_rate = CLK_TCK; -#else - #error Dont know clock tick length -#endif - *count_max = INT_MAX; /* dubious */ - cnt = times (&buffer); - if (cnt > (unsigned long) (*count_max)) - *count = *count_max; /* also dubious */ - else - *count = cnt; - return 0; -} diff --git a/gcc/f/runtime/libU77/time_.c b/gcc/f/runtime/libU77/time_.c deleted file mode 100644 index 73894b0b413..00000000000 --- a/gcc/f/runtime/libU77/time_.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -/* As well as this external function some compilers have an intrinsic - subroutine which fills a character argument (which is the VMS way) - -- caveat emptor. */ -#ifdef KR_headers -longint G77_time_0 () -#else -longint G77_time_0 (void) -#endif -{ - /* There are potential problems with the cast of the time_t here. */ - return time (NULL); -} diff --git a/gcc/f/runtime/libU77/ttynam_.c b/gcc/f/runtime/libU77/ttynam_.c deleted file mode 100644 index f69aa43f564..00000000000 --- a/gcc/f/runtime/libU77/ttynam_.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if STDC_HEADERS -# include <stdlib.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> /* POSIX for ttyname */ -#endif -#include <stdio.h> -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -#ifdef KR_headers -extern void s_copy (); -extern integer G77_fnum_0 (); -/* Character */ void G77_ttynam_0 (ret_val, ret_val_len, lunit) - char *ret_val; ftnlen ret_val_len; integer *lunit -#else -extern integer G77_fnum_0 (integer *lunit); -extern void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb); -/* Character */ void G77_ttynam_0 (char *ret_val, ftnlen ret_val_len, integer *lunit) -#endif -{ - size_t i; - char *p; - - p = ttyname (G77_fnum_0 (lunit)); - if (p != NULL) { - i = strlen (p); - s_copy (ret_val, p, ret_val_len, i); - } else { - s_copy (ret_val, " ", ret_val_len, 1); - } -} diff --git a/gcc/f/runtime/libU77/u77-test.f b/gcc/f/runtime/libU77/u77-test.f deleted file mode 100644 index 11c5ecae449..00000000000 --- a/gcc/f/runtime/libU77/u77-test.f +++ /dev/null @@ -1,178 +0,0 @@ -*** Some random stuff for testing libU77. Should be done better. It's -* hard to test things where you can't guarantee the result. Have a -* good squint at what it prints, though detected errors will cause -* starred messages. - - integer i, j, k, ltarray (9), idat (3), count, rate, count_max, - + pid - real tarray1(2), tarray2(2), r1, r2, etime - intrinsic getpid, getuid, getgid, ierrno, gerror, - + fnum, isatty, getarg, access, unlink, fstat, - + stat, lstat, getcwd, gmtime, hostnm, etime, chmod, - + chdir, fgetc, fputc, system_clock, second, idate, secnds, - + time, ctime, fdate, ttynam - external lenstr - logical l - character gerr*80, c*1 - character ctim*25, line*80, lognam*20, wd*100, line2*80 - integer fstatb (13), statb (13) - integer *2 i2zero - - ctim = ctime(time()) - WRITE (6,'(A/)') '1 GNU libU77 test at: ' // ctim - write (6,'(A,I3,'', '',I3)') - + ' Logical units 5 and 6 correspond (FNUM) to' - + // ' Unix i/o units ', fnum(5), fnum(6) - if (lnblnk('foo ').ne.3 .or. len_trim('foo ').ne.3) then - print *, 'LNBLNK or LEN_TRIM failed' - call exit(1) - end if - l= isatty(6) - line2 = ttynam(6) - if (l) then - line = 'and 6 is a tty device (ISATTY) named '//line2 - else - line = 'and 6 isn''t a tty device (ISATTY)' - end if - write (6,'(1X,A)') line(:lenstr(line)) - pid = getpid() - WRITE (6,'(A,I10)') ' Process id (GETPID): ', pid - WRITE (6,'(A,I10)') ' User id (GETUID): ', GETUID () - WRITE (6,'(A,I10)') ' Group id (GETGID): ', GETGID () - WRITE (6,*) 'If you have the `id'' program, the following call of' - + // ' SYSTEM should agree with the above' - call flush(6) - CALL SYSTEM ('echo " " `id`') - call flush - call getlog (lognam) - write (6,*) 'Login name (GETLOG): ', lognam - call umask(0, mask) - write(6,*) 'UMASK returns', mask - call umask(mask) - ctim = fdate() - write (6,*) 'FDATE returns: ', ctim - j=time() - call ltime (j, ltarray) - write (6,'(1x,a,9i4)') 'LTIME returns:', ltarray - call gmtime (j, ltarray) - write (6,'(1x,a,9i4)') 'GMTIME returns:', ltarray - call system_clock(count, rate, count_max) - write(6,*) 'SYSTEM_CLOCK returns: ', count, rate, count_max - write (6,*) 'Sleeping for 1 second (SLEEP) ...' - call sleep (1) - write (6,*) 'Looping 10,000,000 times ...' - do i=1,10*1000*1000 - end do - r1= etime (tarray1) - if (r1.ne.tarray1(1)+tarray1(2)) - + write (6,*) '*** ETIME didn''t return sum of the array: ', - + r1, ' /= ', tarray1 - r2= dtime (tarray2) - if (abs (r1-r2).gt.1.0) write (6,*) - + 'Results of ETIME and DTIME differ by more than a second:', - + i, j - write (6,'(A,3F10.3)') - + ' Elapsed total, user, system time (ETIME): ', - + r1, tarray1 - call idate(i,j,k) - call idate (idat) - write (6,*) 'IDATE d,m,y: ',idat - print *, '... and the VXT version: ', i,j,k - call time(line(:8)) - print *, line(:8) - write (6,*) 'SECNDS(0.0) returns: ',secnds(0.0) - write (6,*) 'SECOND returns: ', second() - call dumdum(r1) - call second(r1) - write (6,*) 'CALL SECOND returns: ', r1 - i = getcwd(wd) - if (i.ne.0) then - call perror ('*** getcwd') - else - write (6,*) 'Current directory is "'//wd(:lenstr(wd))//'"' - end if - call chdir ('.',i) - if (i.ne.0) write (6,*) '***CHDIR to ".": ', i - i=hostnm(wd) - if(i.ne.0) then - call perror ('*** hostnm') - else - write (6,*) 'Host name is ', wd(:lenstr(wd)) - end if - i = access('/dev/null ', 'rw') - if (i.ne.0) write (6,*) '***Read/write ACCESS to /dev/null: ', i - write (6,*) 'Creating file "foo" for testing...' - open (3,file='foo',status='UNKNOWN') - rewind 3 - call fputc(3, 'c',i) - call fputc(3, 'd',j) - if (i+j.ne.0) write(6,*) '***FPUTC: ', i -C why is it necessary to reopen? - close(3) - open(3,file='foo',status='old') - call fseek(3,0,0,*10) - go to 20 - 10 write(6,*) '***FSEEK failed' - 20 call fgetc(3, c,i) - if (i.ne.0) write(6,*) '***FGETC: ', i - if (c.ne.'c') write(6,*) '***FGETC read the wrong thing: ', - + ichar(c) - i= ftell(3) - if (i.ne.1) write(6,*) '***FTELL offset: ', i - call chmod ('foo', 'a+w',i) - if (i.ne.0) write (6,*) '***CHMOD of "foo": ', i - i = fstat (3, fstatb) - if (i.ne.0) write (6,*) '***FSTAT of "foo": ', i - i = stat ('foo', statb) - if (i.ne.0) write (6,*) '***STAT of "foo": ', i - write (6,*) ' with stat array ', statb - if (statb(5).ne.getuid () .or. statb(6).ne.getgid() .or. statb(4) - + .ne. 1) write (6,*) '*** FSTAT uid, gid or nlink is wrong' - do i=1,13 - if (fstatb (i) .ne. statb (i)) - + write (6,*) '*** FSTAT and STAT don''t agree on '// ' - + array element ', i, ' value ', fstatb (i), statb (i) - end do - i = lstat ('foo', fstatb) - do i=1,13 - if (fstatb (i) .ne. statb (i)) - + write (6,*) '*** LSTAT and STAT don''t agree on '// ' - + array element ', i, ' value ', fstatb (i), statb (i) - end do - -C in case it exists already: - call unlink ('bar',i) - call link ('foo ', 'bar ',i) - if (i.ne.0) - + write (6,*) '***LINK "foo" to "bar" failed: ', i - call unlink ('foo',i) - if (i.ne.0) write (6,*) '***UNLINK "foo" failed: ', i - call unlink ('foo',i) - if (i.eq.0) write (6,*) '***UNLINK "foo" again: ', i - call gerror (gerr) - i = ierrno() - write (6,'(A,I3,A/1X,A)') ' The current error number is: ', - + i, - + ' and the corresponding message is:', gerr(:lenstr(gerr)) - write (6,*) 'This is sent to stderr prefixed by the program name' - call getarg (0, line) - call perror (line (:lenstr (line))) - call unlink ('bar') - WRITE (6,*) 'You should see exit status 1' - CALL EXIT(1) - 99 END - - integer function lenstr (str) -C return length of STR not including trailing blanks, but always -C return >0 - character *(*) str - if (str.eq.' ') then - lenstr=1 - else - lenstr = lnblnk (str) - end if - end -* just make sure SECOND() doesn't "magically" work the second time. - subroutine dumdum(r) - r = 3.14159 - end diff --git a/gcc/f/runtime/libU77/umask_.c b/gcc/f/runtime/libU77/umask_.c deleted file mode 100644 index 203acfa916f..00000000000 --- a/gcc/f/runtime/libU77/umask_.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <sys/types.h> -#include <sys/stat.h> -#include "f2c.h" - -#ifdef KR_headers -integer G77_umask_0 (mask) - integer *mask; -#else -integer G77_umask_0 (integer *mask) -#endif -{ - return umask ((mode_t) *mask); -} diff --git a/gcc/f/runtime/libU77/unlink_.c b/gcc/f/runtime/libU77/unlink_.c deleted file mode 100644 index 5e7edf213bc..00000000000 --- a/gcc/f/runtime/libU77/unlink_.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#if HAVE_STDLIB_H -# include <stdlib.h> -#else -# include <stdio.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <errno.h> -#include <sys/param.h> -#include "f2c.h" - -#ifdef KR_headers -void g_char (); - -integer G77_unlink_0 (str, Lstr) - char *str; ftnlen Lstr; -#else -void g_char(const char *a, ftnlen alen, char *b); - -integer G77_unlink_0 (const char *str, const ftnlen Lstr) -#endif -{ - char *buff; - char *bp, *blast; - int i; - - buff = malloc (Lstr+1); - if (buff == NULL) return -1; - g_char (str, Lstr, buff); - i = unlink (buff); - free (buff); - return i ? errno : 0; /* SGI version returns -1 on failure. */ -} diff --git a/gcc/f/runtime/libU77/vxtidate_.c b/gcc/f/runtime/libU77/vxtidate_.c deleted file mode 100644 index c517f29419e..00000000000 --- a/gcc/f/runtime/libU77/vxtidate_.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#include "f2c.h" - -/* VMS and Irix versions (at least) differ from libU77 elsewhere */ - -/* VMS style: */ - -/* Subroutine */ -#ifdef KR_headers -int G77_vxtidate_0 (m, d, y) - integer *y, *m, *d; -#else -int G77_vxtidate_0 (integer *m, integer *d, integer *y) -#endif -{ - struct tm *lt; - time_t tim; - tim = time(NULL); - lt = localtime(&tim); - *y = lt->tm_year; - *m = lt->tm_mon+1; - *d = lt->tm_mday; - return 0; -} diff --git a/gcc/f/runtime/libU77/vxttime_.c b/gcc/f/runtime/libU77/vxttime_.c deleted file mode 100644 index 054bb45a89a..00000000000 --- a/gcc/f/runtime/libU77/vxttime_.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of GNU Fortran libU77 library. - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Library General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GNU Fortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with GNU Fortran; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif -#if HAVE_STRING_H -# include <string.h> -#else -# include <strings.h> -#endif -#include "f2c.h" - -/* Subroutine */ -#ifdef KR_headers -void G77_vxttime_0 (chtime, Lchtime) - char chtime[8]; - ftnlen Lchtime; -#else -void G77_vxttime_0 (char chtime[8], const ftnlen Lchtime) -#endif -{ - time_t tim; - char *ctim; - tim = time(NULL); - ctim = ctime (&tim); - strncpy (chtime, ctim+11, 8); -} diff --git a/gcc/f/runtime/permission.netlib b/gcc/f/runtime/permission.netlib deleted file mode 100644 index 261b719bc57..00000000000 --- a/gcc/f/runtime/permission.netlib +++ /dev/null @@ -1,23 +0,0 @@ -/**************************************************************** -Copyright 1990 - 1997 by AT&T, Lucent Technologies and Bellcore. - -Permission to use, copy, modify, and distribute this software -and its documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appear in all -copies and that both that the copyright notice and this -permission notice and warranty disclaimer appear in supporting -documentation, and that the names of AT&T, Bell Laboratories, -Lucent or Bellcore or any of their entities not be used in -advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -AT&T, Lucent and Bellcore disclaim all warranties with regard to -this software, including all implied warranties of -merchantability and fitness. In no event shall AT&T, Lucent or -Bellcore be liable for any special, indirect or consequential -damages or any damages whatsoever resulting from loss of use, -data or profits, whether in an action of contract, negligence or -other tortious action, arising out of or in connection with the -use or performance of this software. -****************************************************************/ - diff --git a/gcc/f/runtime/readme.netlib b/gcc/f/runtime/readme.netlib deleted file mode 100644 index 5d2ac98226f..00000000000 --- a/gcc/f/runtime/readme.netlib +++ /dev/null @@ -1,590 +0,0 @@ - -====== old index for f2c, now "readme from f2c" ============ - -FILES: - -f2c.h Include file necessary for compiling output of the converter. - See the second NOTE below. - -f2c.1 Man page for f2c. - -f2c.1t Source for f2c.1 (to be processed by troff -man or nroff -man). - -libf77 Library of non I/O support routines the generated C may need. - Fortran main programs result in a C function named MAIN__ that - is meant to be invoked by the main() in libf77. - -libi77 Library of Fortran I/O routines the generated C may need. - Note that some vendors (e.g., BSD, Sun and MIPS) provide a - libF77 and libI77 that are incompatible with f2c -- they - provide some differently named routines or routines with the - names that f2c expects, but with different calling sequences. - On such systems, the recommended procedure is to merge - libf77 and libi77 into a single library, say libf2c, and to - install it where you can access it by specifying -lf2c . The - definition of link_msg in sysdep.c assumes this arrangement. - - Both libf77 and libi77 are bundles, meant to be unpacked by the - Bourne (or Korn) shell. MS-DOS users can use the MKS Toolkit - to unpack libf77 and libi77. - -libf2c.zip - Only available by ftp: combination of libf77 and libi77, with - Unix and PC makefiles. - -f2c.ps Postscript for a technical report on f2c. After you strip the - mail header, the first line should be "%!PS". - -fixes The complete change log, reporting bug fixes and other changes. - (Some recent change-log entries are given below). - -fc A shell script that uses f2c and imitates much of the behavior - of commonly found f77 commands. You will almost certainly - need to adjust some of the shell-variable assignments to make - this script work on your system. - - -SUBDIRECTORY: - -f2c/src Source for the converter itself, including a file of checksums - and source for a program to compute the checksums (to verify - correct transmission of the source), is available: ask netlib - (e.g., netlib@netlib.bell-labs.com) to - send all from f2c/src - If the checksums show damage to just a few source files, or if - the change log file (see "fixes" below) reports corrections to - some source files, you can request those files individually - "from f2c/src". For example, to get defs.h and xsum0.out, you - would ask netlib to - send defs.h xsum0.out from f2c/src - "all from f2c/src" is about 640 kilobytes long; for convenience - (and checksums), it includes copies of f2c.h, f2c.1, and f2c.1t. - - Tip: if asked to send over 99,000 bytes in one request, netlib - breaks the shipment into 1000 line pieces and sends each piece - separately (since otherwise some mailers might gag). To avoid - the hassle of reassembling the pieces, try to keep each request - under 99,000 bytes long. The final number in each line of - xsum0.out gives the length of each file in f2c/src. For - example, - send exec.c expr.c from f2c/src - send format.c format_data.c from f2c/src - will give you slightly less hassle than - send exec.c expr.c format.c format_data.c from f2c/src - Alternatively, if all the mailers in your return path allow - long messages, you can supply an appropriate mailsize line in - your netlib request, e.g. - mailsize 200k - send exec.c expr.c format.c format_data.c from f2c/src - - If you have trouble generating gram.c, you can ask netlib to - send gram.c from f2c/src - Then `xsum gram.c` should report - gram.c 5529f4f 58745 - Alternatively, if you have bison, you might get a working - gram.c by saying - make gram.c YACC=bison YFLAGS=-y - (but please do not complain if this gives a bad gram.c). - -NOTE: For now, you may exercise f2c by sending netlib a message whose - first line is "execute f2c" and whose remaining lines are - the Fortran 77 source that you wish to have converted. - Return mail brings you the resulting C, with f2c's error - messages between #ifdef uNdEfInEd and #endif at the end. - (To understand line numbers in the error messages, regard - the "execute f2c" line as line 0. It is stripped away by - the netlib software before f2c sees your Fortran input.) - Options described in the man page may be transmitted to - netlib by having the first line of input be a comment - whose first 6 characters are "c$f2c " and whose remaining - characters are the desired options, e.g., "c$f2c -R -u". - - You may say "execute f2c" in the Subject line instead of (but - *not* in addition to) in the first line of the message body. - - The incoming Fortran is saved, at least for a while. Don't - send any secrets! - - -BUGS: Please send bug reports (including the shortest example - you can find that illustrates the bug) to research!dmg - or dmg@bell-labs.com . You might first check whether - the bug goes away when you turn optimization off. - - -NOTE: f2c.h defines several types, e.g., real, integer, doublereal. - The definitions in f2c.h are suitable for most machines, but if - your machine has sizeof(double) > 2*sizeof(long), you may need - to adjust f2c.h appropriately. f2c assumes - sizeof(doublecomplex) = 2*sizeof(doublereal) - sizeof(doublereal) = sizeof(complex) - sizeof(doublereal) = 2*sizeof(real) - sizeof(real) = sizeof(integer) - sizeof(real) = sizeof(logical) - sizeof(real) = 2*sizeof(shortint) - EQUIVALENCEs may not be translated correctly if these - assumptions are violated. - - On machines, such as those using a DEC Alpha processor, on - which sizeof(short) == 2, sizeof(int) == sizeof(float) == 4, - and sizeof(long) == sizeof(double) == 8, it suffices to - modify f2c.h by removing the first occurrence of "long " - on each line containing "long ", e.g., by issuing the - commands - mv f2c.h f2c.h0 - sed 's/long //' f2c.h0 >f2c.h - On such machines, one can enable INTEGER*8 by uncommenting - the typedef of longint in f2c.h, so it reads - typedef long longint; - by compiling libI77 with -DAllow_TYQUAD, and by adjusting - libF77/makefile as described in libF77/README. - - Some machines may have sizeof(int) == 4 and - sizeof(long long) == 8. On such machines, adjust f2c.h - by changing "long int " to "long long ", e.g., by saying - mv f2c.h f2c.h0 - sed 's/long int /long long /' f2c.h0 >f2c.h - One can enable INTEGER*8 on such machines as described - above, but with - typedef long long longint; - - There exists a C compiler that objects to the lines - typedef VOID C_f; /* complex function */ - typedef VOID H_f; /* character function */ - typedef VOID Z_f; /* double complex function */ - in f2c.h . If yours is such a compiler, do two things: - 1. Complain to your vendor about this compiler bug. - 2. Find the line - #define VOID void - in f2c.h and change it to - #define VOID int - (For readability, the f2c.h lines shown above have had two - tabs inserted before their first character.) - -FTP: All the material described above is now available by anonymous - ftp from netlib.bell-labs.com (login: anonymous; Password: your - E-mail address; cd netlib/f2c). Note that you can say, e.g., - - cd /netlib/f2c/src - binary - prompt - mget *.Z - - to get all the .Z files in src. You must uncompress the .Z - files once you have a copy of them, e.g., by - - uncompress *.Z - - Subdirectory msdos contains two PC versions of f2c, - f2c.exe.Z and f2cx.exe.Z; the latter uses extended memory. - The README in that directory provides more details. - - Changes appear first in the f2c files available by E-mail - from netlib@netlib.bell-labs.com. If the deamons work right, - changed files are available the next day by ftp from - netlib.bell-labs.com. In due course, they reach other netlib servers. - -CHANGE NOTIFICATION: - Send the E-mail message - subscribe f2c - to netlib@netlib.bell-labs.com to request notification of new and - changed f2c files. (Beware that automatically sent change - notifications may reach you before changes have reached - ftp://netlib.bell-labs.com/netlib/f2c or to other netlib servers.) - Send the E-mail message - unsubscribe f2c - to recant your notification request. - ------------------ -Recent change log (partial) ------------------ - -Mon May 13 23:35:26 EDT 1996 - Recognize Fortran 90's /= as a synonym for .NE.. (<> remains a -synonym for .NE..) - Emit an empty int function of no arguments to supply an external -name to named block data subprograms (so they can be called somewhere -to force them to be loaded from a library). - Fix bug (memory fault) in handling the following illegal Fortran: - parameter(i=1) - equivalence(i,j) - end - Treat cdabs, cdcos, cdexp, cdlog, cdsin, and cdsqrt as synonyms for -the double complex intrinsics zabs, zcos, zexp, zlog, zsin, and zsqrt, -respectively, unless -cd is specified. - Recognize the Fortran 90 bit-manipulation intrinsics btest, iand, -ibclr, ibits, ibset, ieor, ior, ishft, and ishftc, unless -i90 is -specified. Note that iand, ieor, and ior are thus now synonyms for -"and", "xor", and "or", respectively. - Add three macros (bit_test, bit_clear, bit_set) to f2c.h for use -with btest, ibclr, and ibset, respectively. Add new functions -[lq]bit_bits, [lq]bit_shift, and [lq]_bit_cshift to libF77 for -use with ibits, ishft, and ishftc, respectively. - Add integer function ftell(unit) (returning -1 on error) and -subroutine fseek(unit, offset, whence, *) to libI77 (with branch to -label * on error). - -Tue May 14 23:21:12 EDT 1996 - Fix glitch (possible memory fault, or worse) in handling multiple -entry points with names over 28 characters long. - -Mon Jun 10 01:20:16 EDT 1996 - Update netlib E-mail and ftp addresses in f2c/readme and -f2c/src/readme (which are different files) -- to reflect the upcoming -breakup of AT&T. - libf77: trivial tweaks to F77_aloc.c and system_.c; Version.c not -changed. - libi77: Adjust rsli.c and lread.c so internal list input with too -few items in the input string will honor end= . - -Mon Jun 10 22:59:57 EDT 1996 - Add Bits_per_Byte to sysdep.h and adjust definition of Table_size -to depend on Bits_per_Byte (forcing Table_size to be a power of 2); in -lex.c, change "comstart[c & 0xfff]" to "comstart[c & (Table_size-1)]" -to avoid an out-of-range subscript on end-of-file. - -Wed Jun 12 00:24:28 EDT 1996 - Fix bug in output.c (dereferencing a freed pointer) revealed in - print * !np in out_call in output.c clobbered by free - end !during out_expr. - -Wed Jun 19 08:12:47 EDT 1996 - f2c.h: add types uinteger, ulongint (for libF77); add qbit_clear -and qbit_set macros (in a commented-out section) for integer*8. - For integer*8, use qbit_clear and qbit_set for ibclr and ibset. - libf77: add casts to unsigned in [lq]bitshft.c. - -Thu Jun 20 13:30:43 EDT 1996 - Complain at character*(*) in common (rather than faulting). - Fix bug in recognizing hex constants that start with "16#" (e.g., -16#1234abcd, which is a synonym for z'1234abcd'). - Fix bugs in constant folding of expressions involving btest, ibclr, -and ibset. - Fix bug in constant folding of rshift(16#80000000, -31) (on a 32-bit -machine; more generally, the bug was in constant folding of -rshift(ibset(0,NBITS-1), 1-NBITS) when f2c runs on a machine with -long ints having NBITS bits. - -Mon Jun 24 07:58:53 EDT 1996 - Adjust struct Literal and newlabel() function to accommodate huge -source files (with more than 32767 newlabel() invocations). - Omit .c file when the .f file has a missing final end statement. - -Wed Jun 26 14:00:02 EDT 1996 - libi77: Add discussion of MXUNIT (highest allowed Fortran unit number) -to libI77/README. - -Fri Jun 28 14:16:11 EDT 1996 - Fix glitch with -onetrip: the temporary variable used for nonconstant -initial loop variable values was recycled too soon. Example: - do i = j+1, k - call foo(i+1) ! temp for j+1 was reused here - enddo - end - -Tue Jul 2 16:11:27 EDT 1996 - formatdata.c: add a 0 to the end of the basetype array (for TYBLANK) -(an omission that was harmless on most machines). - expr.c: fix a dereference of NULL that was only possible with buggy -input, such as - subroutine $sub(s) ! the '$' is erroneous - character s*(*) - s(1:) = ' ' - end - -Sat Jul 6 00:44:56 EDT 1996 - Fix glitch in the intrinsic "real" function when applied to a -complex (or double complex) variable and passed as an argument to -some intrinsic functions. Example: - complex a - b = sqrt(real(a)) - end - Fix glitch (only visible if you do not use f2c's malloc and the -malloc you do use is defective in the sense that malloc(0) returns 0) -in handling include files that end with another include (perhaps -followed by comments). - Fix glitch with character*(*) arguments named "h" and "i" when -the body of the subroutine invokes the intrinsic LEN function. - Arrange that after a previous "f2c -P foo.f" has produced foo.P, -running "f2c foo.P foo.f" will produce valid C when foo.f contains - call sub('1234') - end - subroutine sub(msg) - end -Specifically, the length argument in "call sub" is now suppressed. -With or without foo.P, it is also now suppressed when the order of -subprograms in file foo.f is reversed: - subroutine sub(msg) - end - call sub('1234') - end - Adjust copyright notices to reflect AT&T breakup. - -Wed Jul 10 09:25:49 EDT 1996 - Fix bug (possible memory fault) in handling erroneously placed -and inconsistent declarations. Example that faulted: - character*1 w(8) - call foo(w) - end - subroutine foo(m) - data h /0.5/ - integer m(2) ! should be before data - end - Fix bug (possible fault) in handling illegal "if" constructions. -Example (that faulted): - subroutine foo(i,j) - if (i) then ! bug: i is integer, not logical - else if (j) then ! bug: j is integer, not logical - endif - end - Fix glitch with character*(*) argument named "ret_len" to a -character*(*) function. - -Wed Jul 10 23:04:16 EDT 1996 - Fix more glitches in the intrinsic "real" function when applied to a -complex (or double complex) variable and passed as an argument to -some intrinsic functions. Example: - complex a, b - r = sqrt(real(conjg(a))) + sqrt(real(a*b)) - end - -Thu Jul 11 17:27:16 EDT 1996 - Fix a memory fault associated with complicated, illegal input. -Example: - subroutine goo - character a - call foo(a) ! inconsistent with subsequent def and call - end - subroutine foo(a) - end - call foo(a) - end - -Wed Jul 17 19:18:28 EDT 1996 - Fix yet another case of intrinsic "real" applied to a complex -argument. Example: - complex a(3) - x = sqrt(real(a(2))) ! gave error message about bad tag - end - -Mon Aug 26 11:28:57 EDT 1996 - Tweak sysdep.c for non-Unix systems in which process ID's can be -over 5 digits long. - -Tue Aug 27 08:31:32 EDT 1996 - Adjust the ishft intrinsic to use unsigned right shifts. (Previously, -a negative constant second operand resulted in a possibly signed shift.) - -Thu Sep 12 14:04:07 EDT 1996 - equiv.c: fix glitch with -DKR_headers. - libi77: fmtlib.c: fix bug in printing the most negative integer. - -Fri Sep 13 08:54:40 EDT 1996 - Diagnose some illegal appearances of substring notation. - -Tue Sep 17 17:48:09 EDT 1996 - Fix fault in handling some complex parameters. Example: - subroutine foo(a) - double complex a, b - parameter(b = (0,1)) - a = b ! f2c faulted here - end - -Thu Sep 26 07:47:10 EDT 1996 - libi77: fmt.h: for formatted writes of negative integer*1 values, -make ic signed on ANSI systems. If formatted writes of integer*1 -values trouble you when using a K&R C compiler, switch to an ANSI -compiler or use a compiler flag that makes characters signed. - -Tue Oct 1 14:41:36 EDT 1996 - Give a better error message when dummy arguments appear in data -statements. - -Thu Oct 17 13:37:22 EDT 1996 - Fix bug in typechecking arguments to character and complex (or -double complex) functions; the bug could cause length arguments -for character arguments to be omitted on invocations appearing -textually after the first invocation. For example, in - subroutine foo - character c - complex zot - call goo(zot(c), zot(c)) - end -the length was omitted from the second invocation of zot, and -there was an erroneous error message about inconsistent calling -sequences. - -Wed Dec 4 13:59:14 EST 1996 - Fix bug revealed by - subroutine test(cdum,rdum) - complex cdum - rdum=cos(real(cdum)) ! "Unexpected tag 3 in opconv_fudge" - end - Fix glitch in parsing "DO 10 D0 = 1, 10". - Fix glitch in parsing - real*8 x - real*8 x ! erroneous "incompatible type" message - call foo(x) - end - lib[FI]77/makefile: add comment about omitting -x under Solaris. - -Mon Dec 9 23:15:02 EST 1996 - Fix glitch in parameter adjustments for arrays whose lower -bound depends on a scalar argument. Example: - subroutine bug(p,z,m,n) - integer z(*),m,n - double precision p(z(m):z(m) + n) ! p_offset botched - call foo(p(0), p(n)) - end - libi77: complain about non-positive rec= in direct read and write -statements. - libf77: trivial adjustments; Version.c not changed. - -Wed Feb 12 00:18:03 EST 1997 - output.c: fix (seldom problematic) glitch in out_call: put parens -around the ... in a test of the form "if (q->tag == TADDR && ...)". - vax.c: fix bug revealed in the "psi_offset =" assignment in the -following example: - subroutine foo(psi,m) - integer z(100),m - common /a/ z - double precision psi(z(m):z(m) + 10) - call foo(m+1, psi(0),psi(10)) - end - -Mon Feb 24 23:44:54 EST 1997 - For consistency with f2c's current treatment of adjacent character -strings in FORMAT statements, recognize a Hollerith string following -a string (and merge adjacent strings in FORMAT statements). - -Wed Feb 26 13:41:11 EST 1997 - New libf2c.zip, a combination of the libf77 and libi77 bundles (and -available only by ftp). - libf77: adjust functions with a complex output argument to permit -aliasing it with input arguments. (For now, at least, this is just -for possible benefit of g77.) - libi77: tweak to ftell_.c for systems with strange definitions of -SEEK_SET, etc. - -Tue Apr 8 20:57:08 EDT 1997 - libf77: [cz]_div.c: tweaks invisible on most systems (that may -improve things slightly with optimized compilation on systems that use -gratuitous extra precision). - libi77: fmt.c: adjust to complain at missing numbers in formats -(but still treat missing ".nnn" as ".0"). - -Fri Apr 11 14:05:57 EDT 1997 - libi77: err.c: attempt to make stderr line buffered rather than -fully buffered. (Buffering is needed for format items T and TR.) - -Thu Apr 17 22:42:43 EDT 1997 - libf77: add F77_aloc.o to makefile (and makefile.u in libf2c.zip). - -Fri Apr 25 19:32:09 EDT 1997 - libf77: add [de]time_.c (which may give trouble on some systems). - -Tue May 27 09:18:52 EDT 1997 - libi77: ftell_.c: fix typo that caused the third argument to be -treated as 2 on some systems. - -Mon Jun 9 00:04:37 EDT 1997 - libi77 (and libf2c.zip): adjust include order in err.c lread.c wref.c -rdfmt.c to include fmt.h (etc.) after system includes. Version.c not -changed. - -Mon Jun 9 14:29:13 EDT 1997 - src/gram.c updated; somehow it did not reflect the change of -19961001 to gram.dcl. - -Mon Jul 21 16:04:54 EDT 1997 - proc.c: fix glitch in logic for "nonpositive dimension" message. - libi77: inquire.c: always include string.h (for possible use with --DNON_UNIX_STDIO); Version.c not changed. - -Thu Jul 24 17:11:23 EDT 1997 - Tweak "Notice" to reflect the AT&T breakup -- we missed it when -updating the copyright notices in the source files last summer. - Adjust src/makefile so malloc.o is not used by default, but can -be specified with "make MALLOC=malloc.o". - Add comments to src/README about the "CRAY" T3E. - -Tue Aug 5 14:53:25 EDT 1997 - Add definition of calloc to malloc.c; this makes f2c's malloc -work on some systems where trouble hitherto arose because references -to calloc brought in the system's malloc. (On sensible systems, -calloc is defined separately from malloc. To avoid confusion on -other systems, f2c/malloc.c now defines calloc.) - libi77: lread.c: adjust to accord with a change to the Fortran 8X -draft (in 1990 or 1991) that rescinded permission to elide quote marks -in namelist input of character data; to get the old behavior, compile -with F8X_NML_ELIDE_QUOTES #defined. wrtfmt.o: wrt_G: tweak to print -the right number of 0's for zero under G format. - -Sat Aug 16 05:45:32 EDT 1997 - libI77: iio.c: fix bug in internal writes to an array of character -strings that sometimes caused one more array element than required by -the format to be blank-filled. Example: format(1x). - -Current timestamps of files in "all from f2c/src", sorted by time, -appear below (mm/dd/year hh:mm:ss). To bring your source up to date, -obtain source files with a timestamp later than the time shown in your -version.c. Note that the time shown in the current version.c is the -timestamp of the source module that immediately follows version.c below: - - 8/05/1997 14:51:56 xsum0.out - 8/05/1997 14:42:48 version.c - 8/05/1997 10:31:26 malloc.c - 7/24/1997 17:10:55 README - 7/24/1997 17:00:57 makefile - 7/24/1997 16:06:19 Notice - 7/21/1997 12:58:44 proc.c - 2/19/1997 13:34:09 lex.c - 2/11/1997 23:39:14 vax.c -12/22/1996 11:51:22 output.c -12/04/1996 13:07:53 gram.exec -10/17/1996 13:10:40 putpcc.c -10/01/1996 14:36:18 gram.dcl -10/01/1996 14:36:18 init.c -10/01/1996 14:36:18 defs.h -10/01/1996 14:36:17 data.c - 9/17/1996 17:29:44 expr.c - 9/12/1996 12:12:46 equiv.c - 8/27/1996 8:30:32 intr.c - 8/26/1996 9:41:13 sysdep.c - 7/09/1996 10:41:13 format.c - 7/09/1996 10:40:45 names.c - 7/04/1996 9:58:31 formatdata.c - 7/04/1996 9:55:45 sysdep.h - 7/04/1996 9:55:43 put.c - 7/04/1996 9:55:41 pread.c - 7/04/1996 9:55:40 parse_args.c - 7/04/1996 9:55:40 p1output.c - 7/04/1996 9:55:38 niceprintf.c - 7/04/1996 9:55:37 misc.c - 7/04/1996 9:55:36 memset.c - 7/04/1996 9:55:36 mem.c - 7/04/1996 9:55:35 main.c - 7/04/1996 9:55:33 io.c - 7/04/1996 9:55:30 exec.c - 7/04/1996 9:55:29 error.c - 7/04/1996 9:55:27 cds.c - 7/03/1996 15:47:49 xsum.c - 6/19/1996 7:04:27 f2c.h - 6/19/1996 2:52:05 defines.h - 5/13/1996 0:40:32 gram.head - 5/12/1996 23:37:11 f2c.1 - 5/12/1996 23:37:02 f2c.1t - 2/25/1994 2:07:19 parse.h - 2/22/1994 19:07:20 iob.h - 2/22/1994 18:56:53 p1defs.h - 2/22/1994 18:53:46 output.h - 2/22/1994 18:51:14 names.h - 2/22/1994 18:30:41 format.h - 1/18/1994 18:12:52 tokens - 3/06/1993 14:13:58 gram.expr - 1/28/1993 9:03:16 ftypes.h - 4/06/1990 0:00:57 gram.io - 2/03/1990 0:58:26 niceprintf.h - 1/07/1990 1:20:01 usignal.h -11/27/1989 8:27:37 machdefs.h - 7/01/1989 11:59:44 pccdefs.h |