|
|
1.1 ! root 1: ! 2: Sun May 22 12:25:06 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 3: ! 4: * Version 1.22 released. ! 5: ! 6: * reload1.c (reload): Spilling isn't finished till max_nongroups is 0. ! 7: ! 8: * tm-encore.h (PRINT_OPERAND): No `$' before a CONST. ! 9: ! 10: Sat May 21 13:08:54 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 11: ! 12: * fold-const.c (combine): Typo in MIN_EXPR, MAX_EXPR. ! 13: ! 14: * reload1.c (reload): Was counting insn_groups as total size of groups, ! 15: not number of groups. ! 16: A new spilled group counts against group-needs of superclasses. ! 17: ! 18: * parse.y (parmlist{,_or_identifiers}_1): In error case, ! 19: return a tree list just as in the other cases. ! 20: ! 21: Fri May 20 02:14:51 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 22: ! 23: * config-vax.h, config-m68k.h: If __GNUC__, use builtin-alloca. ! 24: ! 25: * genpeep.c (match_rtx): Generated code was testing the wrong rtx ! 26: when testing an int or string at a nonzero index in the rtx. ! 27: ! 28: * reload.c (find_reloads): Typo checking `modified' for conflict ! 29: with an earlyclobber. ! 30: ! 31: * reload.c (find_equiv_reg): Reject stack ptr as return value. ! 32: ! 33: * expr.c (expand_builtin): Alloca must do pending stack adjust. ! 34: ! 35: Thu May 19 13:01:01 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 36: ! 37: * flow.c (propagate_block): Skipping back across libcall didn't happen ! 38: due to failing to set PREV. ! 39: ! 40: * expr.c (emit_library_call): Code to increment and decrement ! 41: current_args_size broke since emit_call_1 was changed to restore it. ! 42: ! 43: * combine.c (try_combine): When i1 or i2 auto-incs a reg, don't combine ! 44: if i3 uses that reg. ! 45: ! 46: * config-hp9k3.h: #define bcopy, bcmp, bzero here. ! 47: * conf-hp9k320.h: Delete file. ! 48: ! 49: * integrate.c: Don't include strings.h--no need. ! 50: ! 51: * stmt.c (expand_asm_operands): Don't make zero-length vectors. ! 52: ! 53: * loop.c (scan_loop): After a fcn call, maybe-trap insns can't move. ! 54: The fcn call might exit and that would prevent the trap. ! 55: ! 56: * reload1.c (reload): Set reload_first_uid to next uid to be used. ! 57: * reload.c (find_equiv_reg): Use reload_first_uid to ignore insns ! 58: that are due to reloading--only if reload_reg_p is not 0 or 1. ! 59: ! 60: Wed May 18 22:11:20 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 61: ! 62: * typecheck.c (build_unary_op): Don't complain about array ! 63: as argument to `!'. ! 64: ! 65: * decl.c (pushdecl): If locally declaring an extern function, ! 66: check the identifier's global value in case it's an inline function. ! 67: ! 68: Mon May 16 03:06:08 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 69: ! 70: * output-ns32k.c (output_shift_insn): New fn, maybe turn shift to adds. ! 71: (reg_or_mem_operand): Predicate for a non-immediate general_operand. ! 72: * tm-ns32k.h (CONST_OK_FOR_LETTER_P): Define letter K. ! 73: * ns32k.md: Use output_shift_insn for various addr insns that shift. ! 74: Don't allow nonexplicit constants in lprd, multiply or truncate insns. ! 75: Use reg_or_mem_operand for constraint in op1 of divide insns; ! 76: a constant there causes regclass to screw up. ! 77: Split alternative constraints on the bit-field insns to avoid ! 78: out-of-range operands in exts, inss. Some cases of extraction ! 79: can be done faster via memory. ! 80: ! 81: * flow.c (mark_set_1): When adding a REG_DEAD note, inc reg_n_deaths. ! 82: ! 83: * dbxout.c (dbxout_type_def): Do nothing for {integer,char}_type_node. ! 84: ! 85: Sun May 15 00:56:44 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 86: ! 87: * tm-sequent.h, tm-ns32k.h, tm-encore.h (PRINT_OPERAND): ! 88: Was treating SF's as SI's. ! 89: ! 90: * expr.c (emit_move_insn): Check all CONST_DOUBLEs for ! 91: LEGITIMATE_CONSTANT_P and put them in memory if not. ! 92: ! 93: * local-alloc.c (combine_regs): Allow a reg to be tied to a qty ! 94: if the reg's class is contained in the qty's class ! 95: (as well as if the reg's class contains the qty's class as before). ! 96: Rename qty_reg_class to qty_min_class and make it the smallest ! 97: class of any reg tied to the qty. ! 98: (reg_class_subset_p, reg_meets_class_p, update_qty_class): ! 99: New subroutines to implement this. ! 100: (local_alloc): Init reg_qty to -1 for pseudos not in cur. basic block. ! 101: (reg_is_born): Abort if pseudo not in basic block has -2 in reg_qty. ! 102: ! 103: * jump.c (rtx_renumbered_equal_p): Insist that modes of REGs match. ! 104: ! 105: Sat May 14 01:05:35 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu) ! 106: ! 107: * stmt.c (expand_return): Empty frame frame_offset isn't nec. 0. ! 108: ! 109: * expr.c (emit_call_1): Use stack_size_rtx everywhere appropriate. ! 110: ! 111: * decl.c (init_decl_processing): Set sizetype to `unsigned long' ! 112: if `int' is less than a word. ! 113: ! 114: * stddef.h (size_t, ptrdiff_t): Both are now long. ! 115: ! 116: Fri May 13 01:06:00 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu) ! 117: ! 118: * emit-rtl.c (gen_lowpart): Handle non-lowpart subreg as arg. ! 119: ! 120: * recog.c (register_operand): VOIDmode means allow any mode. ! 121: (immediate_operand, nonmemory_operand): Likewise. ! 122: ! 123: * emit-rtl.c (classify_insn): Update for changed CALL_INSN format. ! 124: (emit): New function to emit an rtl pattern as the right kind of insn. ! 125: * jump.c (simplejump_p): No longer static. ! 126: ! 127: * genemit.c (gen_expand): For match_operand at top level, call `emit'. ! 128: Use `emit_call_insn' when appropriate. ! 129: (gen_exp): Handle rtx's that contain strings. ! 130: ! 131: * final.c, symout.c: If not NO_DBX_FORMAT, include stab.h to get the ! 132: N_... symbols. Use their default definitions only if they're undef. ! 133: ! 134: * expr.c (expand_call) [no PUSH_ROUNDING]: Always set argblock ! 135: if there are any stack-passed arguments. ! 136: ! 137: * typecheck.c (build_unary_op): Mark all increment-exprs volatile. ! 138: ! 139: * recog.c (reg_renumbered_fits_class_p): Delete private copy of ! 140: reg_class_contents. ! 141: ! 142: * reload1.c (forget_old_reloads): Handle PARALLEL case by recursion. ! 143: Explicit store into a spilled reg invalidates old reloaded contents; ! 144: this can occur when we drop through into a basic block whose need was 0 ! 145: (and so whose local pseudos were not spilled). ! 146: ! 147: * gcc.c (main): If -v, print gcc's own version; also no error msg ! 148: if no input files. ! 149: ! 150: * loop.c (may_trap_p): Mem ref to nonconstant address may trap. ! 151: (scan_loop): Check may_trap_p only when insn is in other respects ok. ! 152: ! 153: * cexp.y: #include config.h (for decl of alloca on some machines). ! 154: ! 155: Thu May 12 17:24:19 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 156: ! 157: * regclass.c (regclass): When inserting an insn at start of block, ! 158: update basic_block_head. ! 159: ! 160: Wed May 11 00:47:09 1988 Richard Stallman (rms at corn-chex.ai.mit.edu) ! 161: ! 162: * stmt.c (assign_parms): DECL_OFFSET should be offset as passed ! 163: (not including big-endian width-change correction). ! 164: ! 165: * typecheck.c (shorten_compare): Set unsignedp[01] right in case ! 166: where get_narrower makes no change. ! 167: (build_binary_op_nodefault): Likewise for shortening shifts. ! 168: ! 169: * stmt.c (expand_end_case): Use type_for_size to get the type ! 170: to convert the index to, since `int' is wrong if -mshort. ! 171: ! 172: * decl.c (grokdeclarator): Don't check PARM type for completeness. ! 173: (grokparms): If fn definition, check all parm types for completeness. ! 174: (store_parm_decls): Likewise. ! 175: ! 176: Tue May 10 22:42:13 1988 Richard Stallman (rms at corn-chex.ai.mit.edu) ! 177: ! 178: * typecheck.c (store_init): For invalid init, store error_mark_node. ! 179: * varasm.c (assemble_variable): Ignore error_mark as an init. ! 180: * stmt.c (expand_decl): If init is error_mark, init to 0 if possible. ! 181: This avoids a spurious "uninitialized variable" warning. ! 182: ! 183: Sun May 8 17:08:07 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu) ! 184: ! 185: * tm-hp9k320.h: Define STRUCTURE_SIZE_BOUNDARY. ! 186: ! 187: * decl.c (get_parm_info): Replaces get_parm_types. Returns a tree_list ! 188: containing parmdecls and tag list as well as type list. ! 189: (grokparms): Accept that tree_list as argument. ! 190: (grokdeclarator): Calling grokparms, say "not a definition" for the ! 191: function declarators for arg or value types within a definition. ! 192: ! 193: * parse.y: Call get_parm_info. ! 194: (parmlist_or_identifiers): If identifiers, make a tree_list ! 195: like the one get_parm_info returns. ! 196: ! 197: Fri May 6 16:44:19 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 198: ! 199: * m68k.md (casesi): Delete template aside from match_operand's. ! 200: ! 201: * tm-encore.h: New file from Robert Brown. ! 202: ! 203: * ns32k.md: Use %c in some addr insns. ! 204: (tst*): Use {d,f,}const0_rtx to make the constant 0; OS-independent. ! 205: (call, call_value): Use %? before address in a bsr. ! 206: ! 207: * output-ns32k.c (print_operand_address): To output a local label, ! 208: use `output_asm_label'. ! 209: Make SEQUENT_ADDRESS_BUG conditionals happen at compile time. ! 210: ! 211: * tm-ns32k.h: Delete SEQUENT_HAS_FIXED_THEIR_BUG. ! 212: (PRINT_OPERAND): Output nothing for `%?'. ! 213: * tm-sequent.h: (PRINT_OPERAND): Output nothing for `%?'. ! 214: ! 215: * final.c (output_asm_label): No longer `static'. ! 216: ! 217: Thu May 5 09:03:37 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 218: ! 219: * explow.c (memory_address): Ignore flag_force_reg unless optimize. ! 220: Also ignore it for addresses of stack slots (avoid invalid REG_EQUIVs). ! 221: ! 222: * typecheck.c (digest_init): If traditional, allow `char x[100]=0;'. ! 223: ! 224: * tree.c (get_unwidened): Don't alter a COMPONENT_REF if ! 225: innerprec equals the precision of the existing type. ! 226: It was changing pointers to integers. ! 227: ! 228: * m68k.md (movdi): Put all fpregs in separate constraint alternatives ! 229: and handicap them so spill reg won't be an fp reg. ! 230: ! 231: * parse.y (yyerror): Use the arg as part of the error message. ! 232: ! 233: * decl.c (start_function): Give the RESULT_DECL type int rather ! 234: than char or short. ! 235: * typecheck.c (c_expand_return): Convert value from fn's return type ! 236: to the RESULT_DECL's type. ! 237: ! 238: * Avoid generating dbx xrefs to enums, since dbx loses on them. ! 239: Do this by outputting all types in order of definition. ! 240: This is done only for top-level types; problem remains for local ones. ! 241: ! 242: * decl.c (finish_decl): Do rest_of_decl_compilation for TYPE_DECLs. ! 243: * toplev.c (rest_of_decl_compilation): Do dbxout_symbol for them. ! 244: ! 245: * dbxout.c (dbxout_symbol): Check DECL_RTL only for fns and variables. ! 246: For a TYPE_DECL, ignore it if the type was already output ! 247: and its preferred name is the TYPE_DECL. Else output type in full. ! 248: ! 249: * decl.c (pushdecl): Don't prefer typedef names to type tag names. ! 250: ! 251: * stor-layout.c (chain_type): Build chain in forward order. ! 252: ! 253: ! 254: * tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Error getting length of table. ! 255: ! 256: * tm-3b1.h: #define SGS_3B1 was missing. ! 257: ! 258: * typecheck.c (build_compound_expr): Ignore non-volatile subexprs. ! 259: ! 260: * fold-const.c (fold): Simplify (unsigned) foo >= 0, etc. ! 261: ! 262: * stor-layout.c (layout_type): Set TYPE_PRECISION of ptr types. ! 263: ! 264: Wed May 4 08:06:25 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 265: ! 266: * parse.y: Don't use the Bison @ construct, since it makes parser slow. ! 267: ! 268: * decl.c (finish_function): Delete FILENAME and LINE args. ! 269: ! 270: * typecheck.c (digest_init): No pedantic warning for array="string". ! 271: ! 272: Tue May 3 09:09:30 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 273: ! 274: * toplev.c (main): Ignore `-Wcomment'. ! 275: * gcc.c: Pass -Wall to cpp (which treats it like -Wcomment). ! 276: ! 277: * tm-isi68.h: Greatly simplified; now works only with GAS. ! 278: ! 279: * tm-m68k.h (EMPTY_FIELD_BOUNDARY): now 16 (right on Sun, ISI and HP). ! 280: * tm-sun3.h: No need to redefine it. ! 281: ! 282: * decl.c (finish_struct): Don't ever make DECL_ALIGN smaller. ! 283: ! 284: * decl.c: Rename min, max to MIN, MAX. ! 285: ! 286: * typecheck.c (convert_for_assignment): Avoid warning if assigning ! 287: a `void *' from a `const void *'. ! 288: ! 289: * combine.c (FAKE_EXTEND_SAFE_P): Turn off for mem refs; avoid faults. ! 290: ! 291: Mon May 2 07:28:27 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 292: ! 293: * tm-vax.h: Support -mg switch to use g-float instead of d-float. ! 294: New macros TARGET_G_SWITCH, ASM_DOUBLE_CHAR. ! 295: Changes in TARGET_SWITCHES, ASM_OUTPUT_DOUBLE. ! 296: Define code `#' for PRINT_OPERAND. ! 297: * vax.md: use `#' in opcodes for doubleword float. ! 298: ! 299: * tm-vax.h: Define UDIVSI3_LIBCALL and UMODSI3_LIBCALL. ! 300: ! 301: * cccp.c (main, do_include): Implement -I- switch. ! 302: ! 303: * jump.c (jump_optimize): When hunting NOTE_INSN_FUNCTION_END, ! 304: skip final RETURN (found on the vax). ! 305: ! 306: * toplev.c (main): -Wall is equiv to all -W switches combined. ! 307: ! 308: * stmt.c (expand_decl, expand_end_bindings, ! 309: expand_{start,end}_function). The -noreg treatment of `register' vars ! 310: is extended to vars used as addresses of vars in memory (varying-size ! 311: structures). ! 312: (use_variable): Emit USE for regs used in specified rtx. ! 313: ! 314: * cse.c (fold_cc0): Stack-frame addresses are always nonzero. ! 315: (fold_rtx): 0200 bit in prev_insn_cc0 means only zeroness is known. ! 316: ! 317: * parse.y (parmlist): poplevel needs 3 args. ! 318: ! 319: Sun May 1 07:20:34 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 320: ! 321: * decl.c (start_function): typo checking for incomplete return type. ! 322: ! 323: * emit-rtl.c (restore_reg_data): If a pseudo appears nowhere, ! 324: don't leave its slot empty; create a pseudo for that slot. ! 325: ! 326: * Version 1.21 released. ! 327: ! 328: * expr.c (expand_call): Merge duplicate code for structure_value_addr. ! 329: ! 330: * emit-rtl.c (restore_reg_data): Delete error check; it's legit for ! 331: a pseudo reg to appear nowhere in the rtl. ! 332: ! 333: Sat Apr 30 07:35:31 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 334: ! 335: * integrate.c (copy_rtx_and_substitute): Fix typo for arg_pointer_rtx. ! 336: ! 337: * decl.c (poplevel): Undo previous change with #if 0. ! 338: ! 339: * stmt.c: `struct nesting' now records the depth on the stack. ! 340: Each expand_start... must update and record the depth; ! 341: each expand_end... uses macro POPSTACK to pop. ! 342: This way, if a level isn't explicitly popped, it won't cause ! 343: circular structure. ! 344: ! 345: * dbxout.c (dbxout_type): Replace with main variant only if incomplete. ! 346: ! 347: * typecheck.c (build_unary_op): Test of `pedantic' was backwards. ! 348: ! 349: * expr.c (STACK_BYTES): Typo in definition. ! 350: ! 351: * typecheck.c (build_binary_op_nodefault): Rename code1 to code0, ! 352: and likewise for code2, tt1, tt2. ! 353: ! 354: * expr.c (expand_call): Wrong arg order for warning_with_decl. ! 355: ! 356: Fri Apr 29 08:41:06 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 357: ! 358: * integrate.c (copy_decl_tree): New arg is depth in recursion. ! 359: Always discard the outermost LET_STMT being copied; never discard any ! 360: others. This way the copied LET_STMTs correspond to the copied NOTEs. ! 361: ! 362: * varasm.c (decode_rtx_const): For SYMBOL_REF, use string address ! 363: not address of the rtx. Library fns have only one copy of the name ! 364: but many copies of the SYMBOL_REF. ! 365: ! 366: * expr.c (emit_call_1): New arg OLD_ARGS_SIZE is used to reset ! 367: current_args_size. ! 368: (emit_library_call, expand_call): Pass new arg; don't restore it here. ! 369: ! 370: * flow.c (life_analysis): Don't mark sp live at end if fn is empty. ! 371: ! 372: * parse.y (parse_or_identifiers_1): Handle `error' in here, not in ! 373: callers notype_declarator etc. Also read the closeparen here. ! 374: ! 375: Thu Apr 28 12:43:52 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 376: ! 377: * expmed.c (expand_shift): In extzv strategy, handle the operand ! 378: predicates for operands 0, 1 and 3. (Not needed for 2.) ! 379: * vax.md: extzv pattern for SImode op1 must recognize general_operand ! 380: since the pattern named "extzv" allows them. ! 381: ! 382: Wed Apr 27 00:52:44 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 383: ! 384: * expr.c (emit_call_1): New arg NEXT_ARG_REG describes # regs ! 385: used for passing args. ! 386: (emit_library_call, expand_call): Provide that argument. ! 387: ! 388: * explow.c (round_push): New fn: round arg up to STACK_BOUNDARY. ! 389: * expr.c (expand_builtin): Use round_push on size for __builtin_alloca. ! 390: * stmt.c (expand_decl): Likewise for variable-size objects. ! 391: * expr.c (expand_call): Likewise for args_size.var. ! 392: Also use STACK_BOUNDARY to round a constant arg-block size. ! 393: Pass emit_call_1 that rounded value. ! 394: (emit_library_call): Round arg_size with STACK_BOUNDARY. ! 395: * tm-spur.h: Define STACK_BOUNDARY instead of ROUND_CALL_BLOCK_SIZE. ! 396: * tm-m68k.h: Define STACK_BOUNDARY as 16. ! 397: ! 398: * expr.c (emit_call_1): Don't change current_args_size. ! 399: (emit_library_call, expand_call): Always restore current_args_size ! 400: to ambient value, after calling emit_call_1. ! 401: ! 402: * tm-hp9k320.h: Don't define USG here. ! 403: * config-hp9k3.h: New file. USG defined here. ! 404: ! 405: * tm-3b1.h: #undef ASM_OUTPUT_ASCII (a defn came from tm-hp9k320.h). ! 406: ! 407: * decl.c (grokdeclarator primarily): Cast all RID_... to (int) before ! 408: using them in arithmetic. Placates CC on Sequent. ! 409: ! 410: * emit-rtl.c (emit_jump_insn): Return proper value, for a SEQUENCE. ! 411: * emit-rtl.c (emit_call_insn): Handle SEQUENCE like emit_jump_insn. ! 412: ! 413: Tue Apr 26 02:41:26 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu) ! 414: ! 415: * cccp.c (macroexpand): If traditional, don't disable called macro. ! 416: (macarg1): Was failing to count backslash-newline inside a string ! 417: in a macro arg as part of file's linenumber. ! 418: ! 419: Mon Apr 25 18:46:53 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu) ! 420: ! 421: * jump.c (jump_optimize): Don't do April 20 optimization on first ! 422: iteration; let other simpler opts be done before this is considered. ! 423: ! 424: Sun Apr 24 02:45:28 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 425: ! 426: * tree.c (staticp): a CONSTRUCTOR can be static. ! 427: ! 428: * varasm.c (output_constant_def): Always return memref, not address. ! 429: ! 430: * decl.c (complete_array_type): New fn, make an array type complete ! 431: based on an initializer. ! 432: (finish_decl): Use complete_array_type. ! 433: * parse.y (expr_no_commas): When parsing a constructor, ! 434: Use complete_array_type on constructors for incomplete array types. ! 435: ! 436: * typecheck.c (digest_init, store_init_value,process_init_constructor): ! 437: It's now TREE_STATIC, not TREE_ADDRESSABLE, that records that all elts ! 438: in a CONSTRUCTOR are simple constants. ! 439: (digest_init): A CONSTRUCTOR with non-null type is treated as ordinary ! 440: expression, not as a braced initializer. ! 441: Allow init of an array from an array-valued expr; warn if pedantic. ! 442: * expr.c (expand_expr, CONSTRUCTOR case): Put in memory only if static. ! 443: Was making an extraneous level of MEM; output_constant_def does it all. ! 444: ! 445: * typecheck.c (build_unary_op): Allow ADDR_EXPR of static CONSTRUCTOR. ! 446: (default_conversion): Likewise. ! 447: (initializer_constant_valid_p): Constructor is ok if static. ! 448: ! 449: * gcc.c: Change -fnostd... to -nostd... ! 450: * cccp.c (main): Likewise. ! 451: ! 452: * Everywhere: Use REG_NOTE_KIND to get the kind of a reg note. ! 453: ! 454: * rtl.c (find_regno_note): New function. ! 455: * flow.c (flow_deadp): Deleted; caller uses find_regno_note. ! 456: * global-alloc.c (reg_dead_p): Deleted. ! 457: (global_conflicts): Use find_regno_note instead of reg_dead_p. ! 458: ! 459: * final.c (final) Use find_reg_note to look for a REG_INC. ! 460: * combine.c (insn_has_inc_p): deleted; callers use find_reg_note. ! 461: (try_combine): Use find_reg_note whenever looking for a REG_INC. ! 462: (regno_dead_p, remove_death): Check the REG_NOTE_KIND before assuming ! 463: that the datum in it is a REG. ! 464: * reload1.c (reload): Use find_reg_note to find a REG_EQUIV. ! 465: ! 466: * gcc.c: Don't delete .o files if not all compilations succeed. ! 467: (record_temp_file): New arg SUCCESS_ONLY--delete file only if succeed. ! 468: (delete_temp_files): New arg SUCCESS says compilation succeeded. ! 469: (store_arg): Now 3 possibilities for arg TEMPNAMEP; 2 = del on success. ! 470: (do_spec_1): For %d, set delete_this_arg to 2. ! 471: ! 472: * decl.c (poplevel): Warn about any still-incomplete type-tags. ! 473: ! 474: Sat Apr 23 02:54:16 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu) ! 475: ! 476: * expr.c (expand_builtin): For alloca, round arg up to multiple ! 477: of PARM_BOUNDARY. Also to convert it to Pmode unless it already is. ! 478: ! 479: * stor-layout.c (layout_union): Bug in 14 April change: ! 480: use caller-specified alignment as minimum, not as maximum. ! 481: ! 482: * parse.y (skip_white_space): Avoid infinite loop on unterm. comment. ! 483: ! 484: Fri Apr 22 00:22:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 485: ! 486: * cccp.c: Text following #else or #endif is just a warning. ! 487: (rescan): Digit-case was dropping into the $-case; reorder. ! 488: ! 489: * cccp.c (rescan): Comment start when -traditional was output as ! 490: `/*'; should be nothing. ! 491: ! 492: * jump.c (jump_optimize): Fix prev change: ! 493: do nothing if range1end == range2end; ! 494: don't lose any NOTEs when splicing. ! 495: ! 496: * flow.c (propagate-block): For CALL_INSN, clobber the call-used regs ! 497: only after mark_set_regs is done; avoids confusion about lifespan ! 498: of function value reg. ! 499: ! 500: * gcc.c: Pass -Wcomment to cpp. ! 501: ! 502: * cccp.c (main, rescan): If -Wcomment, warn if `/*' inside comment. ! 503: ! 504: * decl.c (duplicate_decls): Ignore `inline' decl following definition. ! 505: ! 506: * m68k.md (casesi): Split it up into subroutines, so insns emitted ! 507: by the call to memory_address (on 68000) come in the right place. ! 508: ! 509: * combine.c (record_dead_and_set_regs): Notice storing in a SUBREG. ! 510: ! 511: * integrate.c (expand_inline_function): Insn to copy a subroutine's ! 512: return-value was being output twice, once incorrectly. ! 513: ! 514: * reload.c (find_equiv_reg): A stack-push insn does not invalidate ! 515: an equiv for a goal in memory. ! 516: Any other write to memory does invalidate any goal in memory ! 517: (PARALLEL case failed to check for this). ! 518: ! 519: * expmed.c (expand_shift): In the extzv clause, force shifted value ! 520: out of memory if -fforce-mem. ! 521: ! 522: * print-tree.c (prtypeinfo): Some attributes were missing. ! 523: (dump): In ..._TYPE nodes, ignore the TREE_CHAIN field. ! 524: ! 525: * cse.c (note_mem_written): Pushing on stack does not invalidate mem. ! 526: ! 527: * vax.md (extv/andl peephole opt): Made incorrect code if output was ! 528: pushed on stack. Added special case code. ! 529: (extv, extzv for SImode operand): Require register_operand. ! 530: ! 531: Thu Apr 21 00:24:52 1988 Richard Stallman (rms at corn-chex.ai.mit.edu) ! 532: ! 533: * stmt.c (assign_parms): Round current_function_pretend_args_size up. ! 534: ! 535: * integrate.c: `pushlevel' arg was missing. ! 536: ! 537: * dbxout.c (dbxout_type): Undo rest of March 29 change: ! 538: When a named type is first seen inside another type, output an xref ! 539: and let the real definition come out later. ! 540: It is strange that Sun dbx has sometimes appeared to demand ! 541: one strategy and sometimes appeared to demand the other. ! 542: ! 543: * typecheck.c (convert_for_assignment): Allow conversion to or from ! 544: `const void *', etc., unless pedantic. ! 545: ! 546: * decl.c (get_parm_types): For `foo (void){}', set last_function_parms ! 547: to nil so store_parm_decls won't lose. ! 548: ! 549: * combine.c (subst): (plus (plus X N) -N) => X. ! 550: ! 551: * explow.c ({anti_,}adjust_stack): Don't make a copy of ! 552: `stack_pointer_rtx'. ! 553: ! 554: * integrate.c (expand_inline_function): Typo testing for the ! 555: USE that indicates a CALL_INSN's value is being returned. ! 556: ! 557: * expr.c (expand_builtin, alloca case): Copy arg to reg before ! 558: adjusting stack, to avoid invalid insns on some machines. ! 559: ! 560: Wed Apr 20 00:15:14 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu) ! 561: ! 562: * typecheck.c (build_binary_op_nodefault): When shortening, ! 563: get_narrower may make no change because ARGn is already narrow. ! 564: In this case, set UNSIGNEPn from ARGn's type. ! 565: ! 566: * typecheck.c: Rename ARG1,ARG2 to ARG0,ARG1, etc. in several fns. ! 567: ! 568: * tm-vax.h: Turn off continuation on DBX output. ! 569: ! 570: * typecheck.c (build_function_call): Don't change __builtin_ffs to an ! 571: FFS_EXPR. Note that __builtin_alloca has always made a CALL_EXPR. ! 572: * expr.c (expand_builtin): New function expands all CALL_EXPRs that ! 573: are really built-in functions. ! 574: (preexpand_calls): Do nothing to a CALL_EXPR for a built-in function. ! 575: ! 576: * loop.c (count_loop_regs_set): Don't move a reg that is in a CLOBBER. ! 577: ! 578: * stupid.c (stupid_mark_refs): Was getting hard reg's mode from ! 579: the wrong place. ! 580: ! 581: * rtl.c (note_stores): Typo in checking vector elt for SET vs CLOBBER. ! 582: ! 583: * stmt.c (expand_end_bindings): If restoring stack level, ! 584: first do pending stack adjust (so it won't be done erroneously after). ! 585: (expand_goto): likewise. ! 586: ! 587: * rtl.h: LABEL_NUSES was an rtx. It should be an int. ! 588: * stmt.c (expand_label, expand_goto): Delete frobbing with LABEL_NUSES; ! 589: the value stored there was the same as the CODE_LABEL rtx. ! 590: ! 591: * jump.c (jump_optimize): Detect if (foo) ...; else { ... break;} ! 592: and change to if (! foo) { ... break;} else ...; so can drop out. ! 593: (next_label): New fn returns the next label after given insn. ! 594: ! 595: Tue Apr 19 21:30:05 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 596: ! 597: * flow.c (insn_dead_p): Delete special handling for stack ptr. ! 598: (mark_set_regs, mark_used_regs): Likewise. ! 599: (life_analysis): Mark stack ptr live at end of fn if necessary. ! 600: (propagate_block): Mark stack ptr live leading up to a CALL_INSN. ! 601: ! 602: * jump.c (jump_optimize): #if 0 around stack-adjust-deletion code. ! 603: ! 604: * cse.c (fold_rtx): Change const_arg from an array to 3 separate ! 605: scalars for the first three operands. ! 606: Handle SIGN_EXTEND and ZERO_EXTEND. ! 607: ! 608: * integrate.c (copy_rtx_and_substitute): If arg is 0, return 0. ! 609: (expand_inline_function): Separate vars for old pattern and new insn. ! 610: ! 611: * expr.c (expand_call): Set TREE_ADDRESSABLE if call is not inlined. ! 612: ! 613: Tue Apr 19 02:25:22 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 614: ! 615: * Version 1.20 released. ! 616: ! 617: * tm-ns32k.h: Define new reg class GEN_OR_FLOAT_REGS ! 618: so that GENERAL_REGS and FLOAT_REGS have a union. ! 619: ! 620: * tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Recognize a stack-push. ! 621: * ns32k.md: Many constraints must now allow or reject pushes. ! 622: Delete the special patterns for pushing. ! 623: ! 624: Mon Apr 18 06:02:39 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu) ! 625: ! 626: * reload1.c (forget_old_reloads): For a multiword hard reg, ! 627: forget old reloads for each word. ! 628: ! 629: * reload.c (find_reloads): Typo in calling push_replacement. ! 630: ! 631: * tm-ns32k.h (HARD_REGNO_MODE_OK): Failed to allow fp regs for SFmode. ! 632: ! 633: Sun Apr 17 01:21:35 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 634: ! 635: * tm-sequent.h (PRINT_OPERAND): Handle absolute integer memaddress. ! 636: ! 637: * ns32k.md: Add DImode push insns. Add QImode and HImode push insns. ! 638: Supply missing statement in movsf. ! 639: ! 640: * dbxout.c (dbxout_type): Don't contin before 1st field of struct. ! 641: ! 642: * dbxout.c (dbx_continue): Use DBX_CONTIN_CHAR instead of backslash. ! 643: ! 644: * loop.c (scan_loop): Ov vax, the "loop-entry jump" can be a return, ! 645: in which case perhaps there is no label following it. ! 646: Detect phoniness of loop before looking for that label. ! 647: ! 648: * decl.c (init_decl_processing): Builtin fn names start with `__'. ! 649: ! 650: * typecheck.c (shorten_compare): Warn about constant result only in ! 651: cases like (char)x < 0x80, where old C compilers made it -0x80. ! 652: ! 653: * vax.md: All jbs/jbc/jlbs/jlbc patters with op0 in SImode ! 654: must reject mode-dependent memory addresses. ! 655: ! 656: * recog.c (mode_independent_operand): Test for general operand ! 657: that doesn't have a mode-dependent memory address. ! 658: ! 659: * varasm.c (assemble_function): ASM_DECLARE_FUNCTION_NAME, if def, ! 660: is now responsible for outputting the function name as a label. ! 661: ! 662: Sat Apr 16 05:02:55 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 663: ! 664: * cccp.c (do_xifdef): Warn about punctuation or other junk in argument. ! 665: Warn about no argument. If pedantic, warn if arg starts with digit. ! 666: If traditional, ignore all after first non-idchar and never warn. ! 667: ! 668: Thu Apr 14 01:12:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 669: ! 670: * integrate.c (expand_inline_function): Typo for addressable parms. ! 671: ! 672: * cse.c (insert_regs): Copying half a DImode into half of another ! 673: does not make the two DImode regs equivalent. ! 674: ! 675: * recog.c (general_operand): Was failing to accept symbol_ref:SI ! 676: when MODE arg was VOIDmode. ! 677: ! 678: * expr.c (preexpand_calls): For RTL_EXPR, do nothing. ! 679: ! 680: * decl.c (start_enum, build_enumerator): Remember default for next one ! 681: as a tree node (so the high-half isn't lost in a negative one). ! 682: ! 683: * stor-layout.c (layout_{record,union}): Pay attn to initial value ! 684: of TYPE_ALIGN in computing final alignment. ! 685: (layout_union): Round size up to multiple of the alignment. ! 686: ! 687: * decl.c (finish_struct): Don't alter size after type is laid out. ! 688: Instead, set TYPE_ALIGN before layout_type. ! 689: ! 690: * reload1.c (choose_reload_targets): Introduce reg_has_output_reload. ! 691: If there are two separate reloads (one in and one out) ! 692: for the same (hard or pseudo) reg, always set reg_last_reload_reg ! 693: based on the output reload. ! 694: ! 695: Wed Apr 13 21:26:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 696: ! 697: * reload.c (find_reloads_address_1): Always barf if a "constant" ! 698: register is autoincremented. ! 699: ! 700: * parse.y (structsp): suspend_momentary before start_enum; ! 701: else some nodes made by start_enum might be momentary. ! 702: ! 703: * stmt.c (expand_start_case): New arg is nominal type for comparison ! 704: (which is the promoted type of the index expression). ! 705: (pushcase): Always convert VALUE to that nominal type ! 706: before validating it. ! 707: * parse.y (case stmt): Promote each case-value before pushcase. ! 708: * typecheck.c (c_expand_start_case): Promote the index-expr ! 709: to determine the nominal type, before get_narrower. ! 710: ! 711: Wed Apr 13 12:43:08 1988 Chris Hanson (cph at kleph) ! 712: ! 713: * tm-hp9k320.h: Define ASM_FORMAT_PRIVATE_NAME. HPUX asm forbids ! 714: `.' in identifiers, so use `___' (there is some danger in this choice). ! 715: ! 716: Tue Apr 12 23:26:48 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 717: ! 718: * local-alloc.c (block_alloc): Make 1 extra slot in regs_live_at. ! 719: ! 720: * stmt.c (optimize_bit_field): Function moved from reload1.c. ! 721: When need to generate a SIGN_EXTEND or ZERO_EXTEND, make it a separate ! 722: insn and use gen_extend_insn to make it. ! 723: * optabs.c (gen_extend_insn): New fn, construct body of an insn ! 724: to extend Y and store in X. ! 725: ! 726: Mon Apr 11 19:20:57 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu) ! 727: ! 728: * decl.c (finish_decl): Error if static var has variable size. ! 729: ! 730: * parse.y (yylex): Warn if int const is out of range. ! 731: ! 732: * parse.y: New keyword __alignof. ! 733: * typecheck.c (c_alignof): Given a type, return its alignment in bytes. ! 734: ! 735: * typecheck.c (c_sizeof{,_nowarn)): Don't return integer_one_node; ! 736: use build_int to make sure we get something with type `sizetype'. ! 737: ! 738: * Support variable-sized structures (containing var-sized arrays). ! 739: ! 740: * stmt.c (assign_parms): Handle parms whose size varies. ! 741: Use `memory_address' when constructing memrefs to args; ! 742: no need to set `invalid_stack_slot'. ! 743: Don't make a REG_EQUIV note for a scalar arg at variable offset. ! 744: * stor-layout.c (genop, build_int): No longer `static'. ! 745: ! 746: * stor-layout.c (convert_units): Optimize ceil (ceil(x,2)*2, 4) etc. ! 747: ! 748: * stmt.c (expand_decl): Don't abort if var-sized object has init. ! 749: Convert variable size from units of DECL_SIZE_UNIT to units of bytes. ! 750: ! 751: * expr.c (emit_push_insn): Arg ARGS_SO_FAR is now an rtx. ! 752: Pay attention to ARGS_ADDR even if machine has push insns. ! 753: (expand_call): Handle variable-sized arguments. ! 754: If have any such, push entire arg-block in advance. ! 755: Record each arg's offset during first loop and don't change args_size ! 756: during the actual pushing loop; this way the actual pushing loop ! 757: works regardless of arg-order if arg-block was pushed in advance. ! 758: (push_block): Copy SIZE to reg unless it's a reg or constant. ! 759: ! 760: * expmed.c (expand_divmod): If converting CEIL_DIV to FLOOR_DIV, ! 761: make new pseudo for incremented value, to help cse understand. ! 762: ! 763: Sun Apr 10 00:07:45 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 764: ! 765: * expr.c (emit_library_call): Two dumb bugs calling emit_call_1. ! 766: ! 767: * dbxout.c (dbxout_symbol): Handle case of (MEM (REG frameptr)). ! 768: ! 769: * cccp.c (skip_if_group): Ignore quote-chars if -traditional. ! 770: (rescan): If -traditional, don't output a space for a comment. ! 771: (handle_directive): If not -traditional, output a space for a comment. ! 772: ! 773: Sat Apr 9 21:26:51 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 774: ! 775: * decl.c (get_parm_types): `void' type is error, except as entire list. ! 776: * parse.y (parmlist_1): `void,...' is error. ! 777: ! 778: * typecheck.c (pointer_int_sum, pointer_diff): ! 779: Use an integer type with at least POINTER_SIZE bits. ! 780: * expr.c (expand_expr, ARRAY_REF): Likewise. ! 781: * tree.c (type_precision): Prec of a pointer is POINTER_SIZE. ! 782: (convert_to_pointer): Directly convert any int w/ width==POINTER_SIZE. ! 783: Other int types convert via an int of that width. ! 784: (convert_to_integer): Pointers convert via an int of that width. ! 785: ! 786: * decl.c (init_decl_processing): Use INT_TYPE_SIZE, if def, ! 787: to set width of `int' and `unsigned int'. ! 788: (make_index_type): Give new type the width of a long int. ! 789: ! 790: * tm-m68k.h: Add new -mshort which controls TARGET_SHORT. ! 791: * tm-m68k.h: Define INT_TYPE_SIZE depending on TARGET_SHORT. ! 792: ! 793: Fri Apr 8 05:02:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 794: ! 795: * typecheck.c (require_complete_type): Fix typo in detection of `void'. ! 796: (build_function_call): Fix backward test to allow `void' values. ! 797: ! 798: * dbxout.c (dbxout_tags): Output each tag once even if type is defined. ! 799: ! 800: * m68k.md (movstrictqi): Reject addr-reg always, for both operands. ! 801: ! 802: * tm-vax.h (STRUCTURE_SIZE_BOUNDARY): Make this always 8, for BSD. ! 803: * tm-ultrix.h: New file, overriding STRUCTURE_SIZE_BOUNDARY. ! 804: [This change has been taken out; tm-ultrix.h is now equivalent to ! 805: tm-vax.h. I must have been confused when testing PCC.] ! 806: ! 807: * integrate.c (expand_inline_function): Don't let inline_target ! 808: be nonzero in BLKmode. ! 809: ! 810: * decl.c (grokdeclarator): Const array parm becomes ptr-to-const. ! 811: ! 812: Thu Apr 7 05:02:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 813: ! 814: * genoutput.c (bcopy, bzero): Renamed to mybcopy, mybzero ! 815: so variation in C library and config.h won't affect the results. ! 816: * genrecog.c (bzero): likewise. ! 817: * genextract.c (bcopy): Fn deleted; used only in a string constant. ! 818: ! 819: * varasm.c (force_const_mem): Fix typo in arg decl. ! 820: ! 821: * toplev.c (compile_file): init_file with main_input_filename ! 822: so dbx output doesn't lack N_SOL symbols. ! 823: ! 824: * cccp.c (rescan) [CPLUSPLUS]: Put out // comments as // comments. ! 825: ! 826: Wed Apr 6 14:06:38 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 827: ! 828: * expr.c: Delete SLOW_ZERO_EXTEND conditionals added March 3. ! 829: Now that enums types can be unsigned, this isn't needed. ! 830: ! 831: * emit-rtl.c (emit_jump_insn): Handle SEQUENCEs. ! 832: ! 833: * genemit.c (gen_expand): Use emit_jump_insn, emit_label, emit_barrier ! 834: when the insn rtl requires it. ! 835: ! 836: * m68k.md (subsi3): Prefer to avoid reverse-subtraction alternative. ! 837: ! 838: * stmt.c (expand_end_case): Let CASE_DROPS_THROUGH control what to ! 839: emit after the table. ! 840: * tm-vax.h: Define CASE_DROPS_THROUGH. ! 841: ! 842: Tue Apr 5 15:47:10 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 843: ! 844: * genemit.c (gen_exp): Handle vectors within exprs. ! 845: ! 846: * stmt.c (expand_end_case): Pass 5th arg (default_label) to gen_casesi. ! 847: * m68k.md: Define casesi insn rather than tablejump insn. ! 848: ! 849: * cccp.c (skip_if_group): For validate_else, pass BP (end of cmd name). ! 850: Don't call validate_else if do_else or do_endif will detect error. ! 851: ! 852: * Bug: inline fcns can refer to the return reg with a strict_low_part ! 853: which confuses expand_inline_function. Fix is to change return reg ! 854: into inline_target *everywhere* except in or right after a call. ! 855: * integrate.c (copy_rtx_and_substitute): Delete special case for SET. ! 856: Replace return-value hard regs with INLINE_TARGET in all contexts. ! 857: (expand_inline_function): special handling for insn after a CALL_INSN ! 858: if it copies the function value out. ! 859: Allow notes and stack adjust insns to intervene ! 860: between the CALL_INSN and the value-copy. ! 861: ! 862: * expr.c (emit_call_1): New name for gen_call_1. ! 863: ! 864: * Bug: ({...}) insns were in wrong place for a subexpression ! 865: after a sequence point, as in x ? y : ({...}). ! 866: * tree.def: New tree-code RTL_EXPR holds a sequence. ! 867: * expr.c (expand_expr): Handle RTL_EXPR by emitting the sequence. ! 868: * stmt.c (expand_{start,end}_stmt_expr): Use emit_to_sequence ! 869: to make a sequence from everything within the ({...}). ! 870: (expand_{start,end,emit}_delayed_expr): Delete these functions. ! 871: * parse.y (`for'-statements): Don't call them; nothing special needed. ! 872: ! 873: * parse.y (yylex): Handle syntax L"..." and L'...' ! 874: (combine_strings): Handle wide strings being combined. ! 875: * typecheck.c (digest_init): Reject wide string as init for char array. ! 876: Allow it for an int array, but don't allow a narrow string. ! 877: * decl.c (init_decl_processing): New var int_array_type_node. ! 878: ! 879: * parse.y: Define keyword `noalias'. ! 880: * parse.h: Define RID_NOALIAS. ! 881: ! 882: * typecheck.c (compparms): Not all parmlists match an empty one; ! 883: call `compparms1' to filter them. ! 884: ! 885: * decl.c (groktypename): Remove special case for `void' as parameter. ! 886: (get_parm_types): Special case for list of one decl with type void. ! 887: ! 888: * decl.c (build_enumerator): Give enum constants the type `int'. ! 889: Variable `current_enum_type' eliminated. ! 890: (finish_enum): No need to repeat `fixup_unsigned_type' ! 891: since the precision has not changed. ! 892: * stor-layout.c (layout_type): Allow enum types to be unsigned. ! 893: ! 894: * emit-rtl.c (unshare_all_rtl): Unshare contents of all reg-notes. ! 895: ! 896: * parse.y (check_newline): filename is optional in #-lines. ! 897: ! 898: Mon Apr 4 14:36:54 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 899: ! 900: * typecheck.c (shorten_compare): When data type determines the value, ! 901: eval the nonconstant arg anyway if it has side effects. ! 902: (build_conditional_expr): When merging `foo *' with `void *', ! 903: also allow `const void *'. Result type has merged set of qualifiers. ! 904: (qualify_type): Merge qualifiers of two types. ! 905: ! 906: * decl.c (get_parm_types): Store any tags defined in parmlist ! 907: into `last_function_parm_types'. ! 908: (store_parm_decls): Add those tags into the current binding level. ! 909: ! 910: * parse.y (parmlist, parmlist_or_identifier): Pass 0 to pushlevel; ! 911: no binding levels in C should be transparent to tags. ! 912: ! 913: * 3b1 support: ! 914: * tm-3b1.h: New file. ! 915: ! 916: * m68k.md: Add HPUX_ASM conditionals for shift-by-24-and-compare. ! 917: In one of the dbra patterns, a HPUX_ASM conditional was backwards. ! 918: (movhi) [SGS_3B1]: Define the LI... label as in MIT syntax. ! 919: (addsi3) [SGS]: Syntax for base-displacement differs from MOTOROLA. ! 920: (subsi3) [SGS]: likewise. ! 921: (tablejump) [ASM_OUTPUT_CASE_LABEL]: Use 6, not 2, as displacement. ! 922: This assumes ASM_OUTPUT_CASE_LABEL on 68k is used for a `swbeg'. ! 923: ! 924: * final.c (final): Use ASM_OUTPUT_CASE_LABEL (if defined) to output ! 925: any CODE_LABEL followed by an ADDR_VEC or ADDR_DIFF_VEC. ! 926: It has 4 args; 4th is the insn which is the ADDR_VEC or ADDR_DIFF_VEC. ! 927: ! 928: * tm-*.h for 68000 (PRINT_OPERAND_ADDRESS): For unscaled indexing in ! 929: fetch from a branch table, use L and LI symbols as in the scaled case. ! 930: ! 931: * cccp.c: If SCCS_DIRECTIVE, define #sccs as no-op. ! 932: ! 933: * integrate.c (output_inline_function): Real start of function ! 934: is FIRST_PARM_INSN, not FIRST_FUNCTION_INSN. ! 935: ! 936: * tree.c (build_string): String contents must be saveable (for ! 937: inline fcn). ! 938: ! 939: * cse.c (cse_insn): Don't forget to set dest_hash_code when dest ! 940: is a stack slot (and so its address is not being optimized). ! 941: ! 942: * emit-rtl.c (restore_reg_data_1): reg_rtx_no must be 1+ largest REGNO. ! 943: ! 944: * m68k.md (non-SImode bit-field insns): Change constraint to "o,d" ! 945: so a nonoffsetable memref is handled by reloading its address ! 946: but a register can still be handled. ! 947: ! 948: * toplev.c (main): Execute OVERRIDE_OPTIONS, if it's defined. ! 949: ! 950: Sat Apr 2 00:55:21 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 951: ! 952: * expr.c (convert_move): Handle a SUBREG in direct truncation case. ! 953: ! 954: * cse.c (lookup_for_remove): Don't test machine mode of registers: ! 955: Storing in (REG:SI 0) invalidates (REG:DF 0). ! 956: ! 957: * decl.c (pushlevel): New arg, nonzero means this level is for ! 958: variables only, not for tags. All calls changed. ! 959: (lookup_tag): Even if THIS_LEVEL_ONLY, skip variables-only levels. ! 960: (pushtag): Define it in the first non-variables-only level. ! 961: ! 962: * dbxout.c (dbxout_type): Undo Mar 29 change, in the DBX_NO_XREFS case. ! 963: So now each struct or union will contain only nameless cross-refs ! 964: to any others it uses. The prior change is still in effect when ! 965: DBX_NO_XREFS is not defined. ! 966: ! 967: * Implement variable array bounds for parameters. ! 968: * decl.c (poplevel): Don't crash if DECL_NAME gives 0. ! 969: * typecheck.c (comptypes): A variable array bound matches anything. ! 970: * parse.y (parmlist): Call pushlevel, then pushdecl each parm as it ! 971: is parsed; then poplevel after using get_parm_types to extract the ! 972: results of the parmlist. ! 973: * decl.c (get_parm_types): New function; reverse the current decls, ! 974: put them in last_function_parms, and return a list of their types. ! 975: (grokparms): Arg is now an idlist or a typelist. Do nothing if latter. ! 976: (push_parm_decl): New function, like {start,finish}_decl combined ! 977: for a parm in a parmlist. ! 978: ! 979: * dbxout.c (dbxout_symbol): Ignore sym if its DECL_RTL is 0. ! 980: ! 981: * symout.c (symout_block_symbols): Ignore sym if type is error_mark. ! 982: ! 983: Fri Apr 1 11:41:21 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 984: ! 985: * expr.c (prepare_call_address): New function; given two rtx's ! 986: for function and context, copy the context to the right hard reg, ! 987: put the function address in the right place and return an rtx for it. ! 988: (gen_call_1): No longer do those things. Delete args CONTEXT, PROTECT. ! 989: (emit_library_call, expand_call): Call `prepare_call_address'. ! 990: In between that and `gen_call_1', USE the parm registers. ! 991: ! 992: * tm-hp9k320.h (ASM_OUTPUT_*): Flush uses of output_arith_constant. ! 993: ! 994: * varasm.c (assemble_variable): Use ASM_FORMAT_PRIVATE_NAME ! 995: to make the name for a local static variable. ! 996: * tm-m68k.h, tm-vax.h, tm-ns32k.h, tm-spur.h: ! 997: Define ASM_FORMAT_PRIVATE_NAME. Use `.', not `$', to separate. ! 998: ! 999: * tm-m68k.h, tm-ns32k.h (FIX_FRAME_POINTER_ADDRESS): ! 1000: To refer to stack ptr, use stack_pointer_rtx, not a copy. ! 1001: ! 1002: * tree.c (build_real_from_string): Function deleted. ! 1003: * parse.y (yylex): Use build_real and atof. ! 1004: ! 1005: * parse.y: Allow string concatenation in arg of asm. ! 1006: ! 1007: * parse.y (yylex): Always allow `$' in ident, but warn if pedantic. ! 1008: * tm-vms.h: Delete DOLLARS_IN_IDENTIFIERS (no longer tested). ! 1009: ! 1010: * cccp.c (rescan, do_define, initialize_random_junk): ! 1011: Always allow `$', but warn if pedantic. ! 1012: (main): If -t, set `traditional'. ! 1013: (collect_expansion): If `traditional', no special handling for quotes ! 1014: and no whitespace added at end of macro definition. ! 1015: ! 1016: * expr.c (compare, compare1): Last arg to compare_constants ! 1017: must be a size in bits. ! 1018: ! 1019: Thu Mar 31 00:31:52 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1020: ! 1021: * expmed.c (expand_mult, expand_divmod, extract_fixed_bit_field): ! 1022: Reject function return register as target if may need to read it. ! 1023: (Reading the return register in an inline function doesn't work.) ! 1024: ! 1025: * decl.c (start_function): Delete extra arg to `error'. ! 1026: ! 1027: * emit-rtl.c (last_parm_insn): Delete this unused var. ! 1028: ! 1029: * make-cc1.com: New version from Kashtan. ! 1030: ! 1031: * integrate.c (expand_inline_function): Always set up an INLINE_TARGET ! 1032: for a function that returns a nonvoid nonBLK value. ! 1033: Since `pushlevel' and `poplevel' are called, must also call ! 1034: `expand_{start,end}_bindings' to make a pair of NOTEs. ! 1035: Let them handle USEs at end of scope of formal parameter copies. ! 1036: ! 1037: * integrate.c (expand_inline_function): In a new-style CALL_INSN, ! 1038: don't change the result reg into INLINE_TARGET. Also, ! 1039: generate a move insn after the call only if INLINE_TARGET is non-0. ! 1040: ! 1041: * integrate.c (copy_decl_tree): Don't crash if DECL_RTL is 0. ! 1042: ! 1043: * integrate.c (copy_for_inline): Don't treat `return' rtx's specially. ! 1044: ! 1045: * stmt.c (expand_{start,end,emit}_delayed_expr): ! 1046: New fns to handle ({...})'s in expressions output not where parsed ! 1047: (such as third expression in a `for' statement). ! 1048: * parse.y: Call them to handle third expression in a `for'. ! 1049: ! 1050: * decl.c (duplicate_decls): Result is `inline' if either OLD or NEW is. ! 1051: ! 1052: * emit-rtl.c (emit_note): Return the note, or 0 if none. ! 1053: * stmt.c (expand_start_bindings): Use emit_note's value. ! 1054: ! 1055: Wed Mar 30 12:48:22 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1056: ! 1057: * obstack.c (_obstack_begin): If ALIGNMENT is 0, use default. ! 1058: Compute default for the alignment of a `double'. ! 1059: * obstack.h (obstack_{begin,init}): Pass 0 for the alignment. ! 1060: ! 1061: * flow.c (mark_used_regs): Discard multiple SUBREGs, STRICT_LOW_PARTs. ! 1062: ! 1063: ** Call insns that return values are now represented as ! 1064: (set (reg ...) (call ...)), not just (call ...). ! 1065: ! 1066: * *.md: Define a "call_value" insn pattern. ! 1067: ! 1068: * tm-m68k.h, tm-vax.h, tm-ns32k.h: (NOTICE_UPDATE_CC): ! 1069: These insns invalidate the CC. ! 1070: ! 1071: * local-alloc.c (combine_regs): #if 0 special treatment of ! 1072: function value hard reg. ! 1073: (wipe_dead_reg): If hard reg, call reg_is_born so that the death ! 1074: will not be ignored. ! 1075: (reg_is_set): For reg that dies in this insn, mark it dead from now on ! 1076: and post_mark it live after this insn only. ! 1077: ! 1078: * combine.c (try_combine): Don't allow a call insn as I1 or I2. ! 1079: ! 1080: * loop.c (count_loop_regs_set): Move CALL_INSN into a separate ! 1081: clause. When finding regs that are function addresses, handle ! 1082: both old and new format call insns. ! 1083: ! 1084: * flow.c (insn_dead_p): A SET that contains a CALL can't be dead. ! 1085: (volatile_refs_p): Any CALL constitutes a volatile ref. ! 1086: (mark_used_regs): If setting a reg from a volatile ref, ! 1087: treat it like setting a reg whose value will be used. ! 1088: ! 1089: * expr.c (gen_call_1): New arg VALREG if nonzero means generate ! 1090: a call_value insn which stores in VALREG. ! 1091: (expand_call): Use `hard_function_value' to make the VALREG arg ! 1092: unless expression has type `void'. ! 1093: ! 1094: * expr.c (emit_library_call): New 2nd arg OUTMODE is mode of result. ! 1095: (So can give gen_call_1 the proper value-register.) ! 1096: All callers (here and optabs.c) pass this arg. ! 1097: ! 1098: * cse.c (canon_hash): Consider all CALL rtx's volatile. ! 1099: ! 1100: ** end of change in representation of call insns. ! 1101: ! 1102: * stmt.c (expand_asm_operands): Replace complex lvalues with ! 1103: SAVE_EXPRs here ! 1104: * typecheck.c (c_expand_asm_operands): rather than here. ! 1105: ! 1106: * typecheck.c (pointer_diff): Fix typo preventing use of FLOOR_DIV_EXPR ! 1107: when dividing by power of 2. ! 1108: (build_c_cast): Flush unused locals. ! 1109: (store_init_value): likewise. ! 1110: (process_init_constructor): Delete unused 4th arg `for_static'. ! 1111: ! 1112: * toplev.c (fatal_io_error): Arg to fprintf was missing. ! 1113: ! 1114: * tm-m68k.h (LEGITIMIZE_ADDRESS): Flush extra arg to `emit_move_insn'. ! 1115: ! 1116: * decl.c: Delete some unused local vars. ! 1117: ! 1118: * stor-layout.c (layout_decl): `packed_size' now unsigned. ! 1119: ! 1120: Tue Mar 29 14:47:07 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1121: ! 1122: * Version 1.19 released. ! 1123: ! 1124: * loop.c (may_trap_p): Nonzero if X is a division that might trap. ! 1125: (scan_loop): If insn might trap, move only if loop always executes it. ! 1126: ! 1127: * dbxout.c (dbxout_type): Never output a cross-ref for ! 1128: a type whose definition is known. Sun dbx won't accept them. ! 1129: ! 1130: Mon Mar 28 12:34:46 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1131: ! 1132: * tm-vms.h (TARGET_DEFAULT): Default is PCC alignment. ! 1133: The VMS compile driver controls the real default. ! 1134: ! 1135: * typecheck.c (c_expand_return): Don't ignore return value ! 1136: when its type is void. ! 1137: ! 1138: * final.c (final): Forget the condition codes after an `asm'. ! 1139: ! 1140: * typecheck.c (build_binary_op_nodefault): Warn about ptr < 0 ! 1141: even if not pedantic, but not if traditional. ! 1142: ! 1143: * typecheck.c (convert_for_assignment): Don't warn about ! 1144: pointers volatile * vs nonvolatile * if -fvolatile specified. ! 1145: ! 1146: * decl.c (store_parm_decls): Among the old-style parm decls ! 1147: there can legitiately be other decls! For example, if a parm ! 1148: is declared `enum {foo, bar} x;', there are decls for `foo' and `bar'. ! 1149: Don't let anything but a PARM_DECL match a parm name; ! 1150: pass all the other decls through into the lexical context. ! 1151: ! 1152: * jump.c (jump_optimize): When deleting stack adjusts before a ! 1153: jump-to-return, don't be fooled by intervening NOTEs. ! 1154: ! 1155: * tm-sequent.h (PRINT_OPERAND): Output (MEM (MEM (REG))) properly. ! 1156: * output-ns32k.c (print_operand_address): Output (MEM (REG)) ! 1157: properly; output stack-pointer as `tos'. ! 1158: ! 1159: * flow.c (find_use_as_address): Reject uses within operand 0 ! 1160: of a ZERO_EXTRACT or SIGN_EXTRACT reference. It's hard to reload ! 1161: an autoincrement inside these because they can refer to multiple bytes. ! 1162: ! 1163: * reload.c (find_reloads): `o' in constraint means any memref ! 1164: (except auto-increment) is acceptable with reloading. ! 1165: Braino: Clear BADOP, not BAD. ! 1166: ! 1167: * reload.c (push_reloads): Use rtx_equal_p (via macro MATCHES) ! 1168: when considering reuse of an old reload. Otherwise equal values ! 1169: may get reloaded into different registers, and two MEMs that ! 1170: originally matched may fail to match once reloaded. ! 1171: ! 1172: * m68k.md (sign_extract and zero_extract insns): ! 1173: If operand 0 is QI or HImode, don't allow register--only `o' ! 1174: (except in some bftst patterns where bitpos is < 8). ! 1175: And change `m' to `o' in all these patterns. ! 1176: ! 1177: Sun Mar 27 15:32:54 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1178: ! 1179: * expr.c (expand_expr, case CONSTRUCTOR): ! 1180: Not all aggregates are BLKmode; use the type's mode. ! 1181: ! 1182: * gcc.c: Pass -y* to ld. ! 1183: ! 1184: * cse.c (struct hash): New member `equivalence_only'. ! 1185: (insert): Initialize it. ! 1186: (cse_insn): Set it to 1 when src_eqv is inserted. ! 1187: When finding cheapest equivalent of something, ! 1188: skip elts that are marked with `equivalence_only'. ! 1189: ! 1190: * decl.c (duplicate_decls): Don't call `layout_type' ! 1191: if the type is `error_mark_node'. ! 1192: ! 1193: * decl.c (implicitly_declare): If decl will be file-scope, ! 1194: make sure it's a permanent node, and its associated data too. ! 1195: ! 1196: Sat Mar 26 15:48:50 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1197: ! 1198: * flow.c (insn_dead_p, mark_used_regs): Storing a reg via a ! 1199: ZERO_EXTRACT or SIGN_EXTRACT is dead if the reg isn't needed afterward. ! 1200: ! 1201: * stmt.c (expand_start_function): Set current_function_name ! 1202: to the name of this function. ! 1203: * tm-vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Use current_function_name. ! 1204: ! 1205: * expr.c (expand_increment): A SUBREG in op0 can also a be a copy. ! 1206: ! 1207: * ns32k.md: Correct range of args for `adjspb' insn. ! 1208: Use `adjspw' when appropriate. ! 1209: New pattern for `lprd' insn. ! 1210: Change some `const_int' predicates to GET_CODE tests. ! 1211: ! 1212: * expr.c (expand_call): Eval function before copying args to hard regs. ! 1213: ! 1214: * tree.c (make_node, copy_node): Don't get length of a REAL_CST ! 1215: from tree_code_length. ! 1216: ! 1217: * expmed.c (extract_fixed_bit_field): In memory-word case, abort ! 1218: if tm.h parms say word could fail to be well-aligned. ! 1219: * tm-ns32k.h: Define STRUCTURE_SIZE_BOUNDARY so they will be aligned. ! 1220: * tm-vax.h: Define STRUCTURE_SIZE_BOUNDARY since Unix CC seems to. ! 1221: ! 1222: * tm-vms.h (CPP_PREDEFINES): Predefine __GNU__ and __GNUC__. ! 1223: ! 1224: Fri Mar 25 13:23:27 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1225: ! 1226: * gcc.c (main): Handle SIGHUP, SIGTERM. ! 1227: ! 1228: * expmed.c (expand_bit_and): Don't clobber OP1 when trying andcb. ! 1229: ! 1230: Thu Mar 24 21:59:09 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1231: ! 1232: * stmt.c (assign_parms): Get size of BLKmode local from the type, ! 1233: not the mode. ! 1234: (expand_function_start): Init frame_offset before calling assign_parms. ! 1235: ! 1236: Wed Mar 23 23:50:37 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1237: ! 1238: * expr.c (emit_push_insn): When making a move insn, ! 1239: go via emit_move_insn; else fails to put constants into memory. ! 1240: ! 1241: Tue Mar 22 15:45:10 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1242: ! 1243: * expr.c (expand_increment): Flush special case for register_operand; ! 1244: actually call the predicate whatever it is. ! 1245: ! 1246: * genemit.c (gen_expand): Make `operands' a local variable, ! 1247: not a global static one, in the `gen_...' function. ! 1248: Avoids lossage when one `gen_...' fcn calls another indirectly. ! 1249: ! 1250: * genoutput.c (output_epilogue): Don't give printf a null string. ! 1251: ! 1252: Mon Mar 21 15:41:42 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1253: ! 1254: * expmed.c (store_bit_field) [HAVE_insv]: ! 1255: Force VALUE1, not VALUE, into a register. ! 1256: ! 1257: * expmed.c (store_fixed_bit_field): Width of mask for clearing ! 1258: the bit-field depends on mode of OP0. ! 1259: ! 1260: * ns32k.md (branch and store-flag insns): ! 1261: Test cc_prev_status, not cc_status. ! 1262: ! 1263: * expmed.c (extract_bit_field): Delete unused var `omode'. ! 1264: ! 1265: * dbxout.c (dbxout_type, dbxout_tag): Use the main variant ! 1266: of the specified type. ! 1267: ! 1268: * reload.c (find_reloads): When an alternative succeeds without reload, ! 1269: initialize goal_alternative_matches from this_alternative_matches. ! 1270: ! 1271: Sun Mar 20 17:58:00 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1272: ! 1273: * tm-sun*.h: Don't predefine `m68k'; Sun's compiler does not. ! 1274: ! 1275: Fri Mar 18 13:48:29 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1276: ! 1277: * reload.c (find_reloads): Set up goal_alternative_matches ! 1278: *after* the label `finish'. ! 1279: ! 1280: * stmt.c (assign_parms): GET_MODE_SIZE needs a mode, not an rtx. ! 1281: ! 1282: * recog.c (constrain_operands): Set global var `which_alternative' ! 1283: to indicate which of the alternatives this insn matches. ! 1284: ! 1285: * typecheck.c (commontype): long int vs unsigned int ! 1286: gives long unsigned, if long and int are the same width. ! 1287: ! 1288: Thu Mar 17 15:39:45 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1289: ! 1290: * emit-rtl.c, tree.c: include local version of varargs.h. ! 1291: ! 1292: * decl.c (start_function): Clear TREE_EXTERNAL and set TREE_STATIC ! 1293: here rather than in finish_function. Affects the case of ! 1294: `extern foo (); static foo (a) {...}' ! 1295: ! 1296: * gcc.c: Handle -fnostdinc and -fnostdlib switches in specs. ! 1297: ! 1298: * cccp.c (main): Handle -fnostdinc: don't put default dirs ! 1299: on the chain to be searched. ! 1300: ! 1301: * cccp.c (error, warning, error_with_line): No longer print ! 1302: charpos within file; lineno is enough. ! 1303: ! 1304: Wed Mar 16 16:56:36 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1305: ! 1306: * expmed.c (expand_inc, expand_dec): Handy new subroutines ! 1307: to generate x+=y or x-=y, given x and y as rtl. ! 1308: * expmed.c (expand_divmod): Use them instead of gen_{add2,sub2}_insn. ! 1309: ! 1310: * expr.c (emit_move_insn): Return the move insn emitted. ! 1311: Eliminate the code here to move a DImode or DFmode by pieces. ! 1312: ! 1313: * emit-rtl.c (emit_insn): Return-value was wrong if emit_to_sequence; ! 1314: cannot use `last_insn' in that case. ! 1315: ! 1316: * regclass.c, stupid.c, local-alloc.c, global-alloc.c: ! 1317: Some vars of type HARD_REG_SET should be `register' only ! 1318: if HARD_REG_SET is a macro (ie a scalar). ! 1319: ! 1320: * expr.c (move_block_from_reg): New function, converse of ! 1321: move_block_from_reg. ! 1322: * stmt.c (assign_parms): If a BLKmode arrives in regs, ! 1323: copy to a stack slot using move_block_from_reg. ! 1324: ! 1325: Tue Mar 15 17:33:22 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1326: ! 1327: * regclass.c (regclass): Don't convert to two-operand insns ! 1328: unless optimizing. ! 1329: ! 1330: * varasm.c (decode_rtx_const, const_hash_rtx): Fix typos. ! 1331: ! 1332: * stmt.c (fixup_var_1): Don't alter insn moving VAR to or from ! 1333: a subreg of a register. ! 1334: ! 1335: * cse.c (fold_rtx): Don't fold if result is not LEGITIMATE_CONSTANT_P. ! 1336: Construct all results in new local variable NEW; then test that ! 1337: and decide whether to return it or the original rtx. ! 1338: ! 1339: * cse.c (cse_insn): When SRC_EQV is non-0 but set[0] has been ! 1340: cleared, don't insert SRC_EQV in hash table. ! 1341: ! 1342: * All insns emitted by a define_expand become part of the SEQUENCE: ! 1343: * SEQUENCE now contains a vector of insns, not of bodies. ! 1344: * insn-emit.c (add_insn): If `emit_to_sequence' nonzero, add the ! 1345: insn to a separate chain, `sequence_first_insn'. ! 1346: (gen_sequence): Take everything on that chain and make a SEQUENCE. ! 1347: (emit_insn): Handle SEQUENCE differently since elts are now insns. ! 1348: (emit_insn_{before,after}): Handle SEQUENCE. ! 1349: (classify_insn): #if 0. ! 1350: * genemit.c (gen_expand): emit all the insns, then call gen_sequence ! 1351: to make the return value. ! 1352: Define two macros DONE and FAIL for use in a DEFINE_EXPAND: ! 1353: Use DONE to inhibit emission of the pattern of the DEFINE_EXPAND. ! 1354: Use FAIL to make the gen_... function return 0. ! 1355: ! 1356: Mon Mar 14 12:47:28 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1357: ! 1358: * expr.c (expand_expr): Extend the don't-sign-extend-enums hack ! 1359: to COMPONENT_REF. (See 3 March.) ! 1360: ! 1361: * tm-*.h (FUNCTION_ARG, etc.) New argument NAMED ! 1362: is nonzero for a named arg, zero for an anonymous extra arg. ! 1363: * expr.c (expand_call): Pass 1 for NAMED if appropriate. ! 1364: * expr.c (emit_library_call): Pass 1 for NAMED. ! 1365: * stmt.c (assign_parms): Pass 1 for NAMED. ! 1366: ! 1367: * cccp.c: Test __GNUC__, not __GNU__. ! 1368: ! 1369: * integrate.c (copy_and_substitute_rtx): ! 1370: Replacing a MEM parm with the parm value, convert mode if mismatch. ! 1371: Always use VOIDmode when generating SETs. ! 1372: Take heed of FIRST_PARM_OFFSET and distinguish arg-pointer ! 1373: from frame-pointer when they are different. ! 1374: (expand_inline_function): Handle (RETURN) insns, by creating a ! 1375: return_label which is output after the integrated code. ! 1376: ! 1377: * parse.y (yylex): Condition for ignoring `inline' was backwards. ! 1378: ! 1379: * flow.c (mark_used_regs): Ignore STRICT_LOW_PART, so that ! 1380: an insn that sets STRICT_LOW_PART (and its source values) may be dead. ! 1381: (propagate_block): Always pass 1 for strict_low_ok to insn_dead_p. ! 1382: ! 1383: * optabs.c (emit_unop_insn): Don't make a REG_RETVAL note. ! 1384: Change above deletes dead STRICT_LOW_PART stores without one. ! 1385: ! 1386: * optabs.c (expand_binop, expand_unop): If the library address ! 1387: is to be put in a pseudoreg, do it here, and make the REG_RETVAL ! 1388: note point after that. ! 1389: ! 1390: * expr.c (emit_library_call): Never defer stack-pops. ! 1391: Deletion of the library call by flow.c loses if they are deferred. ! 1392: ! 1393: * cse.c (cse_insn): Handling of 68k's zero-extend was broken: ! 1394: it made the actual source and the REG_EQUAL source equivalent. ! 1395: * If dest is a STRICT_LOW_PART, ignore the actual source and use ! 1396: the REG_EQUAL source in its place. src_eqv's mode may be different ! 1397: from src's, so use proper mode in lookups or inserts for src_eqv. ! 1398: * Don't forget to set src_eqv_elt if src_eqv already has an elt. ! 1399: * On use_related_value for src_eqv, use src_eqv_elt. ! 1400: ! 1401: * toplev.c (main_input_filename): Name of file mentioned in first ! 1402: #-line in the input. ! 1403: (compile_file): Pass it to dbxout_init as 2nd arg. ! 1404: * dbxout.c (dbxout_init): Use 2nd arg to make the N_SO symbol. ! 1405: * parse.y (check_newline): Store main_input_filename. ! 1406: ! 1407: * expr.c (move_block_to_reg): New function, copies a MEM:BLK ! 1408: to consecutive registers. ! 1409: (use_regs): New function to emit a USE for each reg in a series. ! 1410: (expand_call): Use the two new functions when a precomputed BLKmode ! 1411: arg is passed entirely in regs. ! 1412: (emit_push_insn): Use move_block_to_reg when PARTIAL > 0. ! 1413: Also, don't subtract USED from SIZE twice. ! 1414: Use plus_constant to add ARGS_SO_FAR so can use indexing on stack ptr. ! 1415: ! 1416: * varasm.c (assemble_integer_zero): Use rtx 0, not tree 0, ! 1417: to go with prev change in ASM_OUTPUT_INT. ! 1418: ! 1419: Sun Mar 13 01:16:17 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1420: ! 1421: * varasm.c (const_hash, compare_constant_1, record_constant_1): ! 1422: Handle NOP_EXPR and CONVERT_EXPR in constant expressions. ! 1423: ! 1424: * optabs.c (expand_binop, expand_unop): When widening operands, ! 1425: those with VOIDmode (like CONST_INT) may be left alone. ! 1426: ! 1427: Sat Mar 12 01:09:24 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1428: ! 1429: * varasm.c (assemble_variable): When making a .comm or .lcomm, ! 1430: round size up to multiple of BIGGEST_ALIGNMENT. ! 1431: ! 1432: * obstack.c (_obstack_newchunk): Eliminate fencepost causing copying ! 1433: to access the word past the end of the existing object. ! 1434: ! 1435: * tm-vax.h, tm-ns32k.h: Define {INIT_,}CUMULATIVE_ARGS ! 1436: and upgrade FUNCTION_ARGS for new calling convention. ! 1437: ! 1438: * gcc.c: If -O, define __OPTIMIZE__. ! 1439: (do_spec_1): %c now scans SIGNED_CHAR_SPEC: define __CHAR_UNSIGNED__ ! 1440: when appropriate whether or not it is the default. ! 1441: ! 1442: Fri Mar 11 16:49:25 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1443: ! 1444: * parse.y: Define YYDEBUG. ! 1445: ! 1446: * rtl.c (rtx_unstable_p): New function, same as old rtx_varies_p. ! 1447: * explow.c (stabilize): Use rtx_unstable_p. ! 1448: * rtl.c (rtx_varies_p): Ignore `unchanging' (undoing previous change ! 1449: in this function) because `unchanging' doesn't enable cse to compare ! 1450: the value with any particular constant value. ! 1451: * rtl.c (insn_store_addr_varies_p): Delete, since not used. ! 1452: ! 1453: * hard-reg-set.h (COPY_HARD_REG_SET, etc.) non-scalar case: ! 1454: Rename and rearrange temp variables to avoid name conflicts with args. ! 1455: ! 1456: * regclass.c (reg_class_record): Don't smash class to GENERAL_REGS ! 1457: and don't exit prematurely, when `r' or `g' is seen. Must merge ! 1458: GENERAL_REGS with previously determined desired class. ! 1459: ! 1460: * expr.c (expand_call) [no PUSH_ROUNDING]: When pushing the arg ! 1461: block, try to reuse some of the pending_stack_adjust. ! 1462: ! 1463: * cse.c: qty_const can now hold values (PLUS frame_pointer integer). ! 1464: Effect is that storing into a structure doesn't invalidate ! 1465: mem refs to scalar stack variables via addresses in registers. ! 1466: (insert): Load such values into qty_const, like true constants. ! 1467: (fold_rtx): Ignore qty_const if it isn't really a constant. ! 1468: ! 1469: * expr.c (expand_expr) VAR_DECL: Copy DECL_RTL before calling ! 1470: change_address, so it isn't permanently clobbered. ! 1471: ! 1472: * stmt.c (fixup_var_refs_1): Make sure the stack slot address ! 1473: is valid by calling fixup_stack_1 each time it is substituted. ! 1474: ! 1475: * stmt.c (fixup_stack_1): Return the altered rtx. ! 1476: If it's a MEM in the stack, return a copy of it. ! 1477: ! 1478: * stmt.c (fixup_stack_slots): #if 0. ! 1479: * stmt.c (expand_finish_function): Don't call fixup_stack_slots ! 1480: because fixup_stack_1 is called elsewhere when necessary. ! 1481: ! 1482: * reload.c (find_reloads_address): New arg is location of the MEM ! 1483: whose address is being reloaded. So we copy the MEM if it ! 1484: is one that can be shared. New arg 0 means no need to copy the MEM. ! 1485: All callers pass the new arg. ! 1486: ! 1487: * stmt.c (assign_parms): Determine parm stack-size from ! 1488: the DECL_ARG_TYPE, not from the TREE_TYPE. ! 1489: Else loses when parm is declared `float' but passed as `double'. ! 1490: ! 1491: * emit-rtl.c (make_safe_from): Constants are already safe. ! 1492: Use proper machine mode for temp reg when needed. ! 1493: ! 1494: Thu Mar 10 14:35:14 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1495: ! 1496: * expr.c (emit_push_insn): Don't pass wrong type to plus_constant ! 1497: (case where there is no PUSH_ROUNDING). ! 1498: ! 1499: * expr.c (expand_call): Round partial[i] down to multiple of ! 1500: PARM_BOUNDARY before subtracting it from arg size on stack. ! 1501: Compute these sizes just once and keep them in vector `arg_size'. ! 1502: * expr.c (emit_push_insn): Handle `partial' uniformly, in accord ! 1503: with this new convention for how it affects the stack size. ! 1504: * stmt.c (assign_parms): Round NREGS down to PARM_BOUNDARY likewise. ! 1505: ! 1506: * obstack.h (obstack_free macro) [Not __GNUC__ but __STDC__]: ! 1507: Don't cast result of (obstack_free) to (int); just ignore it. ! 1508: ! 1509: * reload.c (find_reloads): Initialize operand_reloadnum. ! 1510: ! 1511: * optabs.c (emit_unop_insn): New argument CODE, used to make ! 1512: a REG_EQUAL note from operand OP0 if more than one insn results. ! 1513: Also a REG_RETVAL note. ! 1514: * expr.c (convert_move): Pass CODE arg to emit_unop_insn. ! 1515: * flow.c (propagate_block): Use insn_dead_p to decide whether ! 1516: to handle a REG_RETVAL note by skipping some insns. ! 1517: Always pass 1 for STRICT_LOW_OK for an insn that has a REG_RETVAL note. ! 1518: Handle case where REG_RETVAL points at an insn that's deleted. ! 1519: * flow.c (insn_dead_p): New operand STRICT_LOW_OK says an insn ! 1520: that sets STRICT_LOW_PART may be considered dead. ! 1521: ! 1522: * expr.c (expand_expr): Once again canonicalize X-C to X+(-C). ! 1523: Change on March 1 made it stop doing this. ! 1524: ! 1525: Wed Mar 9 01:25:35 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1526: ! 1527: * loop.c (move_movables): Don't always mark the moved reg ! 1528: as equivalent to a constant value: not if it is being cleared ! 1529: to zero-extend something or if it is used outside the loop. ! 1530: ! 1531: * expr.c (move_by_pieces_1): Finish last change. ! 1532: ! 1533: * stmt.c (assign_parms): Update stack_args_size properly. ! 1534: Figure FIRST_PARM_OFFSET when making the stack mem refs. ! 1535: ! 1536: * cse.c (insert): Build the related_value lists in the opposite order ! 1537: so that the oldest element in the chain is the one that follows ! 1538: the most basic element. ! 1539: ! 1540: * expr.c (expand_expr): COMPONENT_REF case: criterion for ! 1541: converting the the result is if MODE1 (its mode of arrival) isn't ! 1542: a mode we want. ! 1543: ! 1544: * toplev.c (rest_of_compilation): Fix typo setting TREE_ASM_WRITTEN. ! 1545: ! 1546: Tue Mar 8 13:18:37 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1547: ! 1548: * cse'ing of library calls. ! 1549: ! 1550: * expr.h: type `optab' is now a ptr to a struct. ! 1551: The old contents are now the `handlers' element. ! 1552: The `code' element gives the RTL code for the kind of expression ! 1553: this optab makes (PLUS for add_optab, etc.) ! 1554: Every var formerly declared `struct optab *' is now just `optab'. ! 1555: ! 1556: * optabs.c (init_optab, init_optabs): New function to init an optab ! 1557: and set its `code'. Used in init_optabs. ! 1558: ! 1559: * optabs.c (expand_binop, expand_unop): Use the `code' field ! 1560: to add a REG_EQUAL note to the insn that copies a libcall's ! 1561: value into a pseudo. Also a REG_RETVAL note pointing at the ! 1562: first insn for setting up args for the call. ! 1563: ! 1564: * cse.c (cse_insn): Process REG_EQUIV and REG_EQUAL datum almost like ! 1565: another set-src; put the actual src into the equivalence class of that. ! 1566: ! 1567: * flow.c (propagate_block): If a dead insn has a REG_RETVAL reg-note, ! 1568: either ignore or delete all the insns back to the insn the REG_ARG ! 1569: note points to. ! 1570: ! 1571: * local-alloc.c (block_alloc): Don't refrain from allocating a ! 1572: "constant" register if the constant value isn't ok for an immediate op. ! 1573: ! 1574: ! 1575: * dbxout.c (CONTIN): If DBX_CONTIN_LENGTH is <= 0, do nothing. ! 1576: ! 1577: * cccp.c: Extra default include dirs for C++. ! 1578: * cccp.c (main): For -M, strip dirs from object file name. ! 1579: ! 1580: * rtl.c (find_reg_note): New function. ! 1581: ! 1582: * expmed.c (store_fixed_bit_field): Don't AND with VALUE ! 1583: if VALUE's original mode had no more bits than we want. ! 1584: ! 1585: * expr.c (emit_library_call): Use varargs. ! 1586: ! 1587: * integrate.c (copy_and_substitute_rtx): Recognize arg_pointer_rtx ! 1588: and translate it just like frame_pointer_rtx. ! 1589: ! 1590: Mon Mar 7 00:48:33 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1591: ! 1592: * expmed.c (extract_fixed_bit_field): ! 1593: Shift counts were wrong for narrow MODE in signed case. ! 1594: Do the sign-extending shifts in the narrowest mode possible. ! 1595: Reduce big-endian case to little-endian case. ! 1596: Delete SLOW_ZERO_EXTEND conditional. ! 1597: ! 1598: * Implement constants in memory for RISC machines ! 1599: with limited abilities for immediate args and constant addresses. ! 1600: ! 1601: * genoutput.c (output_epilogue): Empty predicate-name ! 1602: is output as 0 in insn_operand_predicate. ! 1603: ! 1604: * expr.c (expand_expr): Change 4th arg to an `enum expand_modifier' ! 1605: Value EXPAND_SUM corresponds to old nonzero 4th arg. ! 1606: Value EXPAND_CONST_ADDRESS means ok to return an invalid MEM ! 1607: whose address is a constant. Changes for this case in ADDR_EXPR, ! 1608: COMPONENT_REF and ..._DECL. ! 1609: ! 1610: * varasm.c (output_arith_constant): Function deleted. ! 1611: * tm-*.h: (ASM_OUTPUT_{INT,SHORT,CHAR}): 2nd arg is now an RTX ! 1612: and output it using `output_addr_const'. ! 1613: * varasm.c (output_constant): Change uses of those macros. ! 1614: ! 1615: * varasm.c (init_const_rtx_hash_table): Initialize constant pool ! 1616: for a new function. Called from `expand_function_start'. ! 1617: * varasm.c (force_const_mem): Turn a constant rtx into a MEM rtx ! 1618: which refers to the constant pool. Other new subroutines too. ! 1619: (force_const_double_mem): Use force_const_mem to make the MEM. ! 1620: (immed_real_const): No longer record the REAL_CST node in the rtx. ! 1621: ! 1622: * explow.c (force_reg): If arg is a constant and not legitimate, ! 1623: put it in the constant pool with force_const_mem. ! 1624: Mark the register as equivalent to the constant value. ! 1625: * expr.c (emit_move_insn): Likewise. ! 1626: * explow.c (break_out_mem_refs): Use force_reg to put into a reg. ! 1627: * explow.c (memory_address): Likewise. ! 1628: * expr.c (expand_expr): ADDR_EXPR case: likewise. ! 1629: ! 1630: * expr.c (expand_call): Do force_reg on each register-operand ! 1631: so it will go through a pseudo and can be cse'd. ! 1632: ! 1633: * recog.c (immediate_operand, nonmemory_operand, general_operand): ! 1634: For constant operands, use LEGITIMATE_CONSTANT_P to decide value. ! 1635: * tm-*.h: Define LEGITIMATE_CONSTANT_P. ! 1636: ! 1637: * reload1.c (reload): Invalid constants can't go in reg_equiv_constant. ! 1638: ! 1639: Sun Mar 6 22:49:06 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1640: ! 1641: * reload.c (push_reloads): If IN occurs within OUT, ! 1642: don't reuse an existing input-only reload. Otherwise would lose on ! 1643: (set (mem (plus R C)) (plus R C1)) if R is available in a spill reg. ! 1644: ! 1645: * reload1.c (choose_reload_targets): Don't choose an inherited ! 1646: reload register that's in use for another reload. ! 1647: Without this, above change doesn't have an effect. ! 1648: ! 1649: * Implement the `unchanging' flag in MEM and REG rtx's. ! 1650: Also simplify code with a new subroutine `change_address'. ! 1651: ! 1652: * emit-rtl.c (change_address): Return new memory ref like an old ! 1653: one but with specified mode and address. ! 1654: * expmed.c (extract{,_split,_fixed}_bit_field): Use change_address. ! 1655: (store{,_split,_fixed}_bit_field): Likewise. ! 1656: * expr.c (store_expr, expand_expr): Likewise. ! 1657: ! 1658: * expr.c (move_by_pieces): Args now memrefs, not addresses. ! 1659: Eliminate the FROM_VOL and TO_VOL args since the memrefs indicate. ! 1660: Change the structure `struct move_by_pieces' similarly. ! 1661: (move_by_pieces_1): Same changes; use change_address. ! 1662: (emit_block_move, emit_push_insn): Calls to move_by_pieces changed. ! 1663: ! 1664: * integrate.c (copy_rtx_and_substitute): Use change_address; ! 1665: handle ->unchanging field. ! 1666: ! 1667: * rtl.c (rtx_varies_p): Regs or memrefs with ->unchanging don't vary. ! 1668: (copy_rtx): Perserve ->unchanging. ! 1669: (print_rtx): Print ->unchanging as /u. ! 1670: ! 1671: * stmt.c (expand_decl): Set ->unchanging on `const' decls. ! 1672: (fixup_memory_subreg): Use change_address. ! 1673: (assign_parms): Record in the rtl which parms are volatile or const. ! 1674: ! 1675: * varasm.c (assemble_variable): Set ->unchanging on `const' decls. ! 1676: (output_constant_def): Always set ->unchanging for constant refs. ! 1677: ! 1678: * cse.c (canon_hash): Don't treat a MEM as "in memory" ! 1679: if its ->unchanging bit is set. ! 1680: ! 1681: * loop.c (invariant_p): A REG or MEM with ->unchanging is invariant ! 1682: (for a MEM, the address must be invariant). ! 1683: ! 1684: Sat Mar 5 13:22:11 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1685: ! 1686: * genconfig.c (walk_insn_part): DO consider MATCH_DUPs ! 1687: when calculating MAX_RECOG_OPERANDS. ! 1688: (gen_expand): define_expand is now different from define_insn. ! 1689: Compute max # SETs or CLOBBERs for any one sub-insn in a define_expand, ! 1690: instead of summing them all. And don't count the MATCH_DUPs at all. ! 1691: ! 1692: * genemit.c (max_operand_1): Record largest opno in a MATCH_DUP ! 1693: separately from largest in a MATCH_OPERAND. ! 1694: (gen_expand): An operand # with only MATCH_DUPs gets ! 1695: a local variable in the gen_ function we output. ! 1696: ! 1697: * integrate.c (save_for_inline): Delete vestige of NOTE_INSN_IS_DECL. ! 1698: ! 1699: * cse.c (invalidate): Handle subregs. ! 1700: (cse_ins, invalidate_from_clobbers): Do call `invalidate' for subregs. ! 1701: (insert_regs): When assigning one subreg from a like one, ! 1702: make the two regs equivalent. ! 1703: (cse_insn): Do call insert_regs when dest is a subreg. ! 1704: ! 1705: * expr.c (expand_call): Precompute all args going via hard regs ! 1706: since even arithmetic could require a library call. ! 1707: ! 1708: Fri Mar 4 15:48:17 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1709: ! 1710: * stor-layout.c (layout_parms): Function deleted. ! 1711: * stmt.c (expand_function_start): Don't call it. ! 1712: ! 1713: * stmt.c (assign_parms): ! 1714: stack_args_size counts size of args so far passed on stack. ! 1715: Use PARM_BOUNDARY when counting it; derive stack offsets from it. ! 1716: Set current_function_args_size from it. ! 1717: ! 1718: When an arg is split between regs and stack, make stack space ! 1719: for the rest of it, and count it. ! 1720: In a varargs function, push the last arg onto the stack. ! 1721: When an arg is passed in regs alone, don't remember a stack slot ! 1722: for it, and if it needs one, use assign_stack_local. ! 1723: ! 1724: Set DECL_OFFSET to the stack offset, or -1 if parm came in regs. ! 1725: ! 1726: * expr.c (expand_call): Anonymous args of a varargs function ! 1727: are always passed on the stack. ! 1728: ! 1729: * varasm.c (force_const_double_mem): Copy the MEM rtx ! 1730: if it may need to be smashed by reloading. ! 1731: ! 1732: * genemit.c (gen_expand): define_expand must have nonempty pattern ! 1733: even though, due to `return' statements in the code-to-run, ! 1734: that pattern may not be used to generate code. ! 1735: ! 1736: Thu Mar 3 17:08:43 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1737: ! 1738: * expr.c (expand_expr): If supposed to sign-extend an enum ! 1739: which is never negative, zero-extend instead (unless SLOW_ZERO_EXTEND). ! 1740: (store_expr): Likewise. ! 1741: ! 1742: * reload.c (find_reloads): 'm' for CONST_DOUBLE: clear BADOP, not BAD. ! 1743: After force_const_double_mem, do find_reloads_toplev on the MEM. ! 1744: (find_reloads_address): Handle constant addresses (on machines ! 1745: that don't allow them). ! 1746: ! 1747: * final.c (set_current_gdbfile): New fn, get the gdbfile structure ! 1748: for specified filename. ! 1749: (output_source_line): Use set_current_gdbfile for the file. ! 1750: * varasm.c (assemble_variable): Call set_current_gdbfile ! 1751: for the declaration's source file, so GDB won't ignore the file. ! 1752: ! 1753: * varasm.c (force_const_double_mem): Build a new REAL_CST node ! 1754: and get its data type from the machine mode of the CONST_DOUBLE. ! 1755: (immed_real_const): Don't save the REAL_CST tree node. ! 1756: * typecheck.c (get_floating_type): Return float type for given mode. ! 1757: ! 1758: * integrate.c (expand_inline_function): Ignore the (USE (REG...)) ! 1759: (for the return-register) at the end of the inline function. ! 1760: After a CALL_INSN, imagine the (SET (REG ...) (REG ...)) for ! 1761: the return-register if the return-register isn't explicitly used. ! 1762: ! 1763: Wed Mar 2 22:08:49 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1764: ! 1765: * typecheck.c (build_array_ref): Do default_conversion on INDEX. ! 1766: ! 1767: Tue Mar 1 15:49:34 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1768: ! 1769: * expr.c (expand_call): Always get a SYMBOL_REF for a fixed function. ! 1770: If may be alloca, set may_call_alloca. ! 1771: (gen_call_1): Never put a SYMBOL_REF through `memory_address'; ! 1772: but if function cse is wanted, just copy it to a register. ! 1773: If NO_FUNCTION_CSE is defined, never do function cse. ! 1774: ! 1775: * expr.c (init_expr): New function, does init_queue and inits ! 1776: other things. ! 1777: ! 1778: * stmt.c (expand_function_start): Call init_expr, not init_queue. ! 1779: ! 1780: * optabs.c (expand_binop): Don't clobber OP0 and OP1 ! 1781: if may call delete_insns_since later. ! 1782: ! 1783: * expr.c (emit_library_call): PUSH_ARGS_REVERSE test was backwards. ! 1784: ! 1785: * cse.c (cse_insn): Do canon_reg on the size and position operands ! 1786: in a ZERO_EXTEND or SIGN_EXTEND that is a destination. ! 1787: ! 1788: * tm-*.h: Define SLOW_BYTE_ACCESS. ! 1789: * expmed.c ({store,extract}_fixed_bit_field): ! 1790: If SLOW_BYTE_ACCESS, get/set all bit fields from full words. ! 1791: ! 1792: * combine.c (subst): Simplify ! 1793: (zero_extend:SI (subreg:QI (zero_extract ...))). ! 1794: * combine.c (simplify_and_const_int): Simplify ! 1795: (and (zero_extract ...) (const_int ...)). ! 1796: ! 1797: * local-alloc.c (qty_compare{,_1}): Test of qty_phys_sugg was reversed. ! 1798: (combine_regs): If one pseudo gets two suggested hard regs ! 1799: (one at birth and one at death), prefer the one from birth ! 1800: unless we see at death that it's no good. ! 1801: ! 1802: * expr.c (expand_expr): Ignore sum_ok unless mode is Pmode. ! 1803: Don't use force_operand unless sum_ok is set. ! 1804: ! 1805: Mon Feb 29 19:23:50 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1806: ! 1807: * expr.c (emit_move_insn): When a CONST_DOUBLE needs moving ! 1808: by pieces, force it into memory, unless it is dconst0_rtx, ! 1809: in which case each piece is const0_rtx. ! 1810: (emit_push_insn): Likewise. Also, write code for pushing a ! 1811: non-BLK mode which has no "mov" insn defined, but only ! 1812: in the case where there is no PUSH_ROUNDING. ! 1813: ! 1814: * expr.c (do_tablejump): Put constant term in address last. ! 1815: ! 1816: * toplev.c (xrealloc): On error, call fatal instead of abort. ! 1817: ! 1818: * optabs.c (emit_cmp_insn): If genning from tst_optab, ! 1819: make the operand fit its predicate. ! 1820: ! 1821: * optabs.c (expand_float): Don't adjust stack between cmp and jump. ! 1822: ! 1823: * optabs.c (expand_binop): Recursive calls can return 0; handle ! 1824: that event by deleting any preparatory insns. Also don't smash ! 1825: TARGET when this happens. ! 1826: ! 1827: * reload.c (push_reload): If IN != *INLOC, set reload_nocombine. ! 1828: (combine_reloads): Don't combine an input reload with reload_nocombine. ! 1829: ! 1830: * jump.c (jump_optimize): Don't delete stack adjusts unless ! 1831: EXIT_IGNORE_STACK is nonzero. ! 1832: * expr.c (clear_pending_stack_adjust): Likewise. ! 1833: * tm-*.h: When EXIT_IGNORE_STACK is defined, give it `1' as defn. ! 1834: ! 1835: * expr.c (expand_call): Initialize args_size. ! 1836: Don't push a block if args_size is 0. ! 1837: (emit_library_call): Don't include register-args (or reg-parts ! 1838: of partial ones) in args_size. ! 1839: Don't push a block if args_size is 0. ! 1840: ! 1841: * expr.c (expand_expr): For DECLs in memory, check the address ! 1842: validity with memory_address_p, and preserve volatility info. ! 1843: ! 1844: * stmt.c (expand_function_end): fixup_gotos needs 2 args. ! 1845: ! 1846: * jump.c (mark_jump_label): If INSN is 0, don't set its JUMP_LABEL. ! 1847: Inside an ADDR_VEC or ADDR_DIFF_VEC, recurse with 0 for INSN. ! 1848: ! 1849: * varasm.c (force_const_double_mem): Must zero TREE_CST_RTL ! 1850: before output, or nothing will happen. ! 1851: ! 1852: Sun Feb 28 01:08:53 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1853: ! 1854: * optabs.c (emit_unop_insn): Generate and emit an insn ! 1855: given the insn-code and the two operands (one out, one in). ! 1856: Can move the operands into registers when needed for various ! 1857: reasons. ! 1858: * expr.c (convert_move): Use emit_unop_insn for outputting the ! 1859: conversion insns. ! 1860: ! 1861: * expr.c (emit_library_call): Use arg's nominal mode to choose ! 1862: a reg to pass it in, not actual mode (which can be VOIDmode). ! 1863: ! 1864: * insn-emit.c (emit_insn): If arg is empty SEQUENCE, do nothing. ! 1865: ! 1866: * genemit.c (gen_expand): Scan the rtl-pattern for predicates ! 1867: and machine modes of the operands. ! 1868: ! 1869: * m68k.d (dbra patterns): Add HPUX_ASM conditionals. ! 1870: ! 1871: * rtl.c (reg_mentioned_p): Use "equal", not "eq", when ! 1872: REG isn't a register. ! 1873: * reload.c (combine_reloads): Verify not reg_mentioned_p even if ! 1874: the input reload's value isn't a register. ! 1875: ! 1876: * reload.c (operands_match_p): If successful and 2nd arg ! 1877: has a pre-increment that matches a non-increment, return 2. ! 1878: ! 1879: * reload1.c (reload): At end, clobber a pseudoreg to a MEM ! 1880: even if it's an out-of-range address. It doesn't affect the ! 1881: assembler code in this case, but it makes the dbx output correct. ! 1882: ! 1883: * recog.c (constrain_operands): When operands_match_p returns 2, ! 1884: in the constraint alternative that is ultimately successful, ! 1885: copy the output operand from the input that it matched ! 1886: so that the assembler insn that is output shows the pre-increment. ! 1887: ! 1888: Sat Feb 27 15:16:47 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1889: ! 1890: * combine.c (subst): When optimizing ! 1891: (set (zero_extract ...) (and (zero_extract ...) const)) ! 1892: must arrange to have 1's, not 0's, shifted into low bits of const. ! 1893: ! 1894: * decl.c (grokdeclarator): When return-type defaults to int, ! 1895: don't warn, just set warn_about_return_type. ! 1896: (start_function): See that variable and warn, after starting function. ! 1897: ! 1898: * toplev.c (count_error): No longer print newline if not quiet. ! 1899: (report_error_function): If not quiet, print a newline if ! 1900: printing anything, and don't print the function name. ! 1901: ! 1902: * reload1.c (choose_reload_targets): ! 1903: Fix the loop that checks for consecutive available spill regs. ! 1904: Set `have_groups' nonzero if any reload wants a group. ! 1905: In that case, for non-group reloads, prefer a reg that can't be in ! 1906: group, or else one that has only one available neighbor. ! 1907: ! 1908: * reload1.c (reload): Find separately the max need for each class ! 1909: for single registers, groups of registers, and single registers ! 1910: not in any group. (The last one counts non-group reloads ! 1911: in insns that have at least one group reload.) ! 1912: Then make sure enough of each kind are found. ! 1913: ! 1914: * expmed.c: Now needs flags.h and recog.h (therefore insn-config.h). ! 1915: ! 1916: * expmed.c (store_bit_field): ! 1917: Delete redundant protect_from_queue. ! 1918: Force VALUE out of memory if -fforce-mem. ! 1919: If insv's predicate for VALUE wants a register, put it there. ! 1920: ! 1921: * expmed.c (extract_bit_field): ! 1922: Force TARGET out of memory if -fforce-mem. ! 1923: If insv's predicate for TARGET wants a register, put it there. ! 1924: ! 1925: Fri Feb 26 00:12:48 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1926: ! 1927: * reload1.c (eliminate_frame_pointer): Don't check for pushes ! 1928: unless PUSH_ROUNDING is defined. ! 1929: ! 1930: * reload.c: Don't define REG_OK_FOR_{INDEX,BASE}_P ! 1931: (since the tm file is supposed to do it). ! 1932: ! 1933: * expr.c (emit_push_insn, expand_call): ! 1934: Don't use PUSH_ROUNDING if it's not defined. ! 1935: ! 1936: * expr.c (preexpand_calls): Do nothing for constants and decls. ! 1937: ! 1938: * expr.c (expand_call, emit_library_call): When PUSH_ROUNDING ! 1939: is not defined, use ROUND_CALL_BLOCK_SIZE to round the size ! 1940: of the block of arguments. ! 1941: ! 1942: * expr.c (expand_call): Don't count register-args in ARGS_SIZE. ! 1943: ! 1944: * rtl.h, emit-rtl.c: Create static_chain_incoming_rtx ! 1945: and struct_value_incoming_rtx. ! 1946: * stmt.c (expand_function_start): Use ..._incoming_rtx where needed. ! 1947: ! 1948: * expr.c (expand_call): Use new macros INIT_CUMULATIVE_ARGS, ! 1949: CUMULATIVE_ARGS and FUNCTION_ARG_ADVANCE to update data ! 1950: on args scanned so far. ! 1951: (emit_library_call): Likewise. ! 1952: * stmt.c (assign_parms): Likewise. ! 1953: * tm-spur.h, tm-m68k.h: Define these macros. ! 1954: ! 1955: * rtl.h (NUM_MACHINE_MODES): NUM_MACHINE_MODE renamed. ! 1956: * rtl.c, genrecog.c: Change places it is used. ! 1957: ! 1958: * cccp.c (output_line_command): line_cmd_buf should be chars, not ints. ! 1959: ! 1960: Thu Feb 25 13:33:29 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1961: ! 1962: * genemit.c (gen_expand): Don't lose if pattern is empty-vector. ! 1963: ! 1964: * genconfig.c (gen_insn): Don't lose if pattern is empty-vector. ! 1965: ! 1966: * expr.c (expand_expr): For COMPONENT_REF, don't convert to tmode ! 1967: unless the mode we get is unacceptable. ! 1968: ! 1969: * loop.c (scan_loop, move_movables): New field `partial' is 1 for ! 1970: zero-extending clr insn; don't make the reg invariant when it's moved. ! 1971: ! 1972: * optabs.c (expand_unop, expand_binop, emit_cmp_insn): ! 1973: mode-argument to predicates was missing. ! 1974: ! 1975: * optabs.c (expand_binop): If gen-function returns 0, this means ! 1976: the insn wasn't available. ! 1977: ! 1978: * reload.c (find_reloads): Don't make optional reloads for operands ! 1979: that match other operands. ! 1980: ! 1981: * reload.c (combine_reloads): Reject optional output reload. ! 1982: ! 1983: * reload.c (find_equiv_reg): Know that CALL_INSNs clobber memory. ! 1984: ! 1985: * typecheck.c (build_binary_op_nodefault): ! 1986: If doing a short shift, leave the shift-count as a fullword. ! 1987: ! 1988: Tue Feb 23 14:43:46 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 1989: ! 1990: * combine.c (subst): Count, in n_occurrences, # times FROM is seen. ! 1991: (try_combine): Refuse to combine x=*y++ into z = x*x. ! 1992: ! 1993: * loop.c (invariant_p): Frame pointer and arg pointer are invariant. ! 1994: (move_movables): Don't forget to set ->done! ! 1995: When moving the matching movables, don't forget to set n_times_set. ! 1996: ! 1997: * expmed.c (expand_shift): Reorder strategies for logical shift; ! 1998: if widening, try all ashift strategies before extzv. ! 1999: ! 2000: * typecheck.c (build_binary_op_nodefault): ! 2001: Always return error_mark if either operand is one. ! 2002: ! 2003: * recog.c (nonmemory_operand): New predicate. ! 2004: ! 2005: * optabs.c (expand_unop, expand_binop, emit_cmp_insn): ! 2006: Don't treat `register_operand' as special. Apply the predicate ! 2007: to the rtx; if the predicate fails, use a register instead. ! 2008: ! 2009: Mon Feb 22 22:37:32 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2010: ! 2011: * expr.c (expand_calls): Preexpand all calls in arguments ! 2012: that are passed in regs before copying any of them into the regs. ! 2013: ! 2014: * expr.c (emit_push_insn): Three more args. ! 2015: EXTRA for extra space to leave. ! 2016: ARGS_ADDR and ARGS_SO_FAR for using move-insns on machines ! 2017: that lack true push insns. ! 2018: ! 2019: * expr.c (emit_library_call, expand_call): ! 2020: Use the new arguments of `emit_push_insn'. ! 2021: ! 2022: * expr.c (PUSH_ARGS_REVERSED): defined if handle args last-to-firs. ! 2023: ! 2024: Sun Feb 21 12:17:59 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2025: ! 2026: * toplev.c (rest_of_compilation): Set TREE_ASM_WRITTEN ! 2027: when a function is really output as assembler code. ! 2028: Don't do inlining of a function that is already made inline; ! 2029: instead, output it as assembler code, because this must be ! 2030: the second call for that function. ! 2031: ! 2032: * decl.c (finish_compilation): Delete it. ! 2033: * toplev.c (compile_file): Output pending inline functions at the end ! 2034: in the same way tentative-defined variables are output. ! 2035: ! 2036: * emit-rtl.c (restore_reg_data): New fn: given chain of insns, ! 2037: restore emit-rtl's data on registers from the regs they use. ! 2038: ! 2039: * integrate.c (output_inline_function): Use restore_reg_data. ! 2040: (fill_regno_reg_rtx_as_needed): Now restore_reg_data_1 in emit-rtl.c. ! 2041: ! 2042: * tree.c (build_decl): Function moved from decl.c. ! 2043: No longer set attributes of function decls specially. ! 2044: ! 2045: * decl.c (implicitly_declare, builtin_function, grokdeclarator): ! 2046: Don't expect build_decl to set attributes of FUNCTION_DECL. ! 2047: ! 2048: * tree.c (preserve_data): New fn, make all data now on ! 2049: maybepermanent_obstack last permanently. ! 2050: ! 2051: * cse.c (cse_insn): Remove a STRICT_LOW_PART from the dest rtx ! 2052: before putting it in the hash table. ! 2053: ! 2054: * symout.c (symout_block): Fix the args to `symout_block_symbols'. ! 2055: ! 2056: Sat Feb 20 00:07:52 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2057: ! 2058: Start of changes for inline functions. ! 2059: Changes received from Tiemann, then slightly rearranged for simplicity. ! 2060: ! 2061: * integrate.c: New file (Tiemann's rtl2.c). ! 2062: * integrate.c (function_cannot_integrate_p): ! 2063: New fn, only checks whether current fn is safe and good to inline. ! 2064: Returns an error message string if not. ! 2065: ! 2066: * expr.c (current_args_size): Var made static. ! 2067: (store_expr): Fn no longer static. ! 2068: (stack_pointer_rtx): Use this var for all refs to the stack pointer. ! 2069: (struct_value_rtx, static_chain_rtx): Likewise ! 2070: ! 2071: * expr.c (expand_call): Detect calls to integrable functions ! 2072: and integrate them. ! 2073: **If fn is not named "alloca" then assume it is not `alloca'. ** ! 2074: ! 2075: * emit-rtl.c (max_label_num): New fn, returns number for next label. ! 2076: (get_first_label_num): New fn, returns first label of current fn. ! 2077: (init_emit): Save first label number of this fn. ! 2078: ! 2079: * emit-rtl.c (gen_inline_header_rtx): New fn, make an INLINE_HEADER. ! 2080: ! 2081: * emit-rtl.c (emit_declaration): New fn to emit new kind of NOTE. ! 2082: ! 2083: * emit-rtl.c (init_emit_once): New fn. ! 2084: Move inits of unique rtl objects here, from init_emit. ! 2085: ! 2086: * decl.c (finish_compilation): New fn to compile separately ! 2087: any nonglobal inline functions that need to be addressable. ! 2088: ! 2089: * decl.c (grokdeclarator): Handle `inline' kwd among the declspecs. ! 2090: Set TREE_INLINE if it's safe. ! 2091: ! 2092: * decl.c (finish_function): If fn was inlined, don't clear ! 2093: the DECL_ARGUMENTS or DECL_RESULT or DECL_INITIAL. ! 2094: ! 2095: * gen*.c: Provide rtl_obstack, not current_obstack. ! 2096: ! 2097: * rtl.c (rtl_obstack): Variable: ptr to obstack to use for making rtl. ! 2098: * rtl.c (rtx_alloc, rtvec_alloc): Use that obstack. ! 2099: * rtl.c (copy_rtx): Copy the `integrated' flag. ! 2100: * rtl.c (print_rtx): Print that flag as `/i'. ! 2101: ! 2102: * rtl.def: New rtx code INLINE_HEADER. ! 2103: ! 2104: * rtl.h (struct rtx_def): Add `integrated' field. ! 2105: * rtl.h: Define macros for fields in an inline_header rtx. ! 2106: ! 2107: * stmt.c (max_parm_reg_num, get_first_function_insn): ! 2108: New fns, return info on parm regs and the insns that init them. ! 2109: ! 2110: * stmt.c (expand_decl): Simplify with new local `type'. ! 2111: ! 2112: * stmt.c (stack_pointer_rtx): Replace all refs to stack pointer ! 2113: with this shared rtx. ! 2114: * stmt.c (struct_value_rtx): Likewise. ! 2115: ! 2116: * stmt.c (expand_start_function): Call init_pending_stack_adjust ! 2117: instead of clear_pending_stack_adjust. ! 2118: If not using a return-label, set `return_label' to 0. ! 2119: ! 2120: * stmt.c (expand_null_return, expand_end_function): ! 2121: Call clear_pending_stack_adjust unconditionally. ! 2122: ! 2123: * expr.c (clear_pending_stack_adjust): Move the conditionals here. ! 2124: For now, this fn is a no-op, since it's not safe in an inline fn ! 2125: and the stack adjusts are deleted by jump.c in if optimizing. ! 2126: ! 2127: * expr.c (init_pending_stack_adjust): New fn. ! 2128: ! 2129: Fri Feb 19 14:30:13 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2130: ! 2131: * toplev.c (main): Decode -finline-functions, -fkeep-inline-functions. ! 2132: ! 2133: * toplev.c (rest_of_compilation): ! 2134: At start, save the rtl if function should be inline. ! 2135: For inline function, if we don't yet know whether it should be ! 2136: compiled on its own, don't do so. ! 2137: ! 2138: * toplev.c (compile_file): Clear, and later print, `integration_time'. ! 2139: Call `init_emit_rtl' when starting. ! 2140: Call `finish_compilation' at the end. ! 2141: ! 2142: [Add an extra arg to the error and warning functions?] ! 2143: ! 2144: * tree.c ({push,pop,clear}_momentary): ! 2145: Change momentary_stack from a char ** to a struct momentary_level *. ! 2146: ! 2147: * tree.c (build_pointer_type): Put temporary type in `saveable_obstack' ! 2148: * tree.c (build_type_variant): Likewise. ! 2149: * tree.c (make_node): Likewise. Also put decls and LET_STMTs there. ! 2150: * tree.c (type_hash_canon): Free a temporary type in `saveable_obstack' ! 2151: ! 2152: * tree.c (perm_tree_cons): Like `tree_cons' but on perm. obstack. ! 2153: ! 2154: * tree.c (init_tree, {{end_,}temporary,permanent}_allocation): ! 2155: Handle `maybepermanent_obstack' and `saveable_obstack' and ! 2156: `rtl_obstack'. ! 2157: ! 2158: * tree.h (TREE_INLINE): New attribute macro. ! 2159: * tree.h (DECL_SAVED_INSNS, DECL_FRAME_SIZE): ! 2160: New components in a FUNCTION_DECL. ! 2161: Delete the `unused` slot in a `struct tree_decl'. ! 2162: ! 2163: * typecheck.c (mark_addressable): Set TREE_ADDRESSABLE ! 2164: even in FUNCTION_DECLs. ! 2165: ! 2166: * typecheck.c (build_function_call): ! 2167: If function is a FUNCTION_DECL, avoid setting TREE_ADDRESSABLE ! 2168: when taking its address. ! 2169: ! 2170: * parse.h: Define RID_INLINE. ! 2171: * parse.y: Define keyword `inline'; set up ridpointers for it. ! 2172: (yylex): Don't recognize `inline' of -fno-asm or -ftraditional. ! 2173: ! 2174: * flags.h: New vars flag_inline_functions ! 2175: and flag_keep_inline_functions. ! 2176: ! 2177: End of changes for inline functions. ! 2178: ! 2179: * tree.c (convert): If EXPR's type is an error_mark, return error_mark. ! 2180: ! 2181: * Makefile (install): Don't strip the executables. ! 2182: ! 2183: * jump.c (delete_insn): Deleting a label's target ! 2184: can delete either NEXT and PREV! So must search for a ! 2185: following nondeleted insn to return. ! 2186: ! 2187: * typecheck.c (build_function_call): Typo in validating ! 2188: data type of function. ! 2189: ! 2190: * genoutput.c (gen_expand): Must create a `struct data' even ! 2191: for a define_expand, so we can output the proper insn_gen_function ! 2192: and leave zeros in the other tables. ! 2193: ! 2194: * loop.c (scan_loop): Replace the code for handling zero-extends ! 2195: with unconditional code that checks for a pair of insns. ! 2196: ! 2197: * m68k.md: Do zero-extend using define_expand to generate ! 2198: a pair of insns, to set all to zero and then copy the low part. ! 2199: ! 2200: Thu Feb 18 15:54:00 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2201: ! 2202: * emit-rtl.c (emit_insn): If arg is a SEQUENCE, emit several insns. ! 2203: * emit-rtl.c (classify_insn): Given an RTX, return the rtx-code for ! 2204: an insn containing it: CODE_LABEL, INSN, JUMP_INSN or CALL_INSN. ! 2205: ! 2206: * rtl.def: New RTX types DEFINE_EXPAND and SEQUENCE. ! 2207: * gen*.c: Handle DEFINE_EXPAND. Only genemit.c does real work. ! 2208: ! 2209: * make.com, make-cc1.com, make-cccp.com: New, VMS command files. ! 2210: ! 2211: * tm-vms.h: New file, used as tm.h to generate VMS code. ! 2212: ! 2213: * tm-vax.h (FUNCTION_PROLOGUE): Turn off no bits in the mask; ! 2214: let call_used_registers alone control this. ! 2215: Call MAYBE_VMS_FUNCTION_PROLOGUE, and define that as no-op. ! 2216: ! 2217: * tm-vax.h (TARGET_VAXC_ALIGNMENT): New target-flag bit. ! 2218: BIGGEST_ALIGNMENT, EMPTY_FIELD_BOUNDARY and POINTER_BOUNDARY use it. ! 2219: ! 2220: * varasm.c (assemble_function): Use ASM_DECLARE_FUNCTION_NAME ! 2221: if it is defined. ! 2222: ! 2223: * varasm.c (assemble_variable): On an external, ! 2224: use ASM_OUTPUT_EXTERNAL if defined. Default is do nothing, as before. ! 2225: ! 2226: * toplev.c: ! 2227: Use FATAL_EXIT_CODE and SUCCESS_EXIT_CODE. ! 2228: Don't include time.h and resource.h on VMS. ! 2229: (main) Define __VERSION__ if not already defined. ! 2230: Conditionalize setrlimit on RLIMIT_STACK. ! 2231: Test __GNUC__, not __GNU__. ! 2232: Don't do `ps v' on VMS. ! 2233: (gettime): Conditional code for VMS. ! 2234: ! 2235: * gcc.c: Define __GNUC__ as well as __GNU__. ! 2236: __GNU__ will be deleted in a future version. ! 2237: ! 2238: * symout.c (symout_finish) [VMS]: Don't refer to `getwd' on VMS. ! 2239: * symout.c (symout_init) [VMS]: Fatal error; GDB syms not supported. ! 2240: ! 2241: * parse.y (yylex): Handle DOLLARS_IN_IDENTIFIERS. ! 2242: ! 2243: * genoutput.c (gen_insn): Workaround for VMS printf %s bug. ! 2244: ! 2245: * gen*.c: Include config.h. Whenever exiting, use ! 2246: SUCCESS_EXIT_CODE or FATAL_EXIT_CODE. ! 2247: ! 2248: * config-*.h: Define SUCCESS_EXIT_CODE and FATAL_EXIT_CODE. ! 2249: * config-vms.h: New file, mostly like config-vax.h. ! 2250: ! 2251: Wed Feb 17 13:35:34 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2252: ! 2253: * cccp.c: VMS support from Kashtan. ! 2254: Some #include files are conditional. ! 2255: Use file_size_and_mode instead of fstat. ! 2256: When reading file contents, the size we get from that ! 2257: is just an upper bound; don't assume it must match. ! 2258: Replacement definitions of read and write for VMS. ! 2259: Different default include directories. ! 2260: Conditionalize the setrlimit code on RLIMIT_STACK. ! 2261: Use SUCCESS_EXIT_CODE when exiting if no errors; ! 2262: both that and FATAL_EXIT_CODE are not #defined if already defined. ! 2263: ! 2264: Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS. ! 2265: Rename the `delete' function as `delete_macro' ! 2266: to avoid VMS name conflict. ! 2267: ! 2268: * cexp.y: Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS. ! 2269: ! 2270: * stmt.c (fixup_memory_offset): Do big-endian compensation ! 2271: only within a word, not for DImode vs SImode. ! 2272: ! 2273: * stmt.c (fixup_var_refs): Don't fix up the insn to load the var ! 2274: from its own stack slot; delete it instead. ! 2275: ! 2276: * tm-ns32k.h (MODES_TIEABLE_P): DImode is like DFmode. ! 2277: ! 2278: * tree.c (MAX_HASH_TABLE): 1009 (more prime) instead of 1008. ! 2279: ! 2280: * decl.c (duplicate_decls): If merged type is OLD's type, ! 2281: keep OLD's DECL_SIZE and DECL_SIZE_UNIT. ! 2282: ! 2283: * gen*.c (xmalloc, xrealloc): Call `fatal' if memory is full. ! 2284: ! 2285: * reload1.c (choose_reload_targets): If a mode doesn't fit the ! 2286: reload register, and the insn is an ASM_OPERANDS, ignore the reload. ! 2287: Otherwise, final would crash. ! 2288: ! 2289: * expmed.c (expand_shift): Two new strategies for lshr on short/char: ! 2290: widen and do ashr, or widen and do extzv. ! 2291: ! 2292: * vax.md (peepholes): Use dead_or_set_p to check for eliminable ! 2293: intermediate result, rather than requiring a match with final result. ! 2294: ! 2295: * local-alloc.c (block_alloc): Testing frame_pointer_needed is ! 2296: enough; no need to test FRAME_POINTER_REQUIRED, etc. ! 2297: * global-alloc.c (find_reg): Likewise. ! 2298: * reload1.c (reload): Likewise for flag_omit_frame_pointer ! 2299: ! 2300: * jump.c (delete_insn): If not `optimize', don't complain ! 2301: about finding an already-deleted insn in the chain. ! 2302: ! 2303: Tue Feb 16 17:14:54 1988 Richard Stallman (rms at wheaties.ai.mit.edu) ! 2304: ! 2305: * final.c: Don't define N_SOL and N_SLINE if already defined. ! 2306: ! 2307: * final.c (output_source_line): ! 2308: Typo calling ASM_OUTPUT_SOURCE_FILENAME. ! 2309: ! 2310: * flow.c (INSN_VOLATILE): fix a typo. ! 2311: ! 2312: Fri Feb 12 16:48:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2313: ! 2314: * final.c (final): for `asm' without operands, output literally. ! 2315: ! 2316: Thu Feb 11 12:44:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2317: ! 2318: * symout.c (symout_record_fields): Handle nameless fields. ! 2319: * symout.c (symout_record_field_names): Likewise. ! 2320: ! 2321: * typecheck.c (require_complete_type): `void' is a complete type. ! 2322: * typecheck.c (build_function_call): Don't complain if result is void. ! 2323: ! 2324: * tm-hp9k320.h: Change definition of ASM_SPEC to +X, not -X. ! 2325: ! 2326: * cccp.c (main): Expected object file name for foo.cc is foo.o. ! 2327: ! 2328: Wed Feb 10 16:04:58 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2329: ! 2330: * reload1.c (reload): Initialize `regmask' to zero. ! 2331: Class number is in I, not in CLASS, when setting its elements. ! 2332: Don't let J+K be too large. ! 2333: ! 2334: * reload1.c (potential_reload_regs): Make it a `short' ! 2335: since that can't be unsigned. ! 2336: ! 2337: * cccp.c (warning): New function, called like `error'. ! 2338: * cccp.c (do_define): Make redefinition just a warning. ! 2339: ! 2340: Tue Feb 9 13:28:00 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2341: ! 2342: * decl.c (grokdeclarator): Don't be fooled by ERROR_MARK as a declspec. ! 2343: ! 2344: * toplev.c (compile_file): Strip final .c or .co from .sym file name. ! 2345: ! 2346: * gcc.c: When running `as', specify the .sym file if -gg. ! 2347: ! 2348: Mon Feb 8 11:26:26 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2349: ! 2350: * expmed.c (store_fixed_bit_field): Don't try gen_lowpart on VALUE ! 2351: if it's a subreg since it might lose; use convert_to_mode instead. ! 2352: ! 2353: * tm-hp9k320.h: Define TARGET_MEM_FUNCTIONS. ! 2354: * expr.c (emit_block_move, emit_push_insn, clear_storage): ! 2355: If TARGET_MEM_FUNCTIONS, generate calls to memcpy and memset ! 2356: instead of bcopy and bzero. ! 2357: * optabs.c (emit_cmp_insn): Likewise for memcmp vs bcmp. ! 2358: ! 2359: * stmt.c (expand_goto): New temp var to avoid RT/PC compiler bug. ! 2360: ! 2361: Sun Feb 7 12:20:23 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2362: ! 2363: * flow.c (mark_used_regs, mark_set_regs): ! 2364: Handle hard regs in multiword modes: set the bits for each ! 2365: distinct register-number that makes up the multiword mode. ! 2366: Necessary because function arg registers can inevitably ! 2367: live across basic blocks. ! 2368: ! 2369: * cse.c (canon_hash): Function arg and value registers no longer ! 2370: considered volatile, because flow should now handle the code that ! 2371: can result from cse'ing them. ! 2372: ! 2373: * cse.c (make_regs_eqv): Abort if OLD is invalid. ! 2374: * cse.c (reg_invalidate): Abort if reg already invalid has eqvs. ! 2375: ! 2376: Sat Feb 6 16:25:32 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2377: ! 2378: * gcc.c (main): Specific error msg if no input files. ! 2379: ! 2380: Fri Feb 5 17:56:00 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2381: ! 2382: * stmt.c (expand_decl, put_var_into_stack, assign_parms): ! 2383: Set in_struct on a MEM if the variable is an aggregate or union. ! 2384: * varasm.c (assemble_variable): Set in_struct on aggregate vars. ! 2385: ! 2386: Thu Feb 4 11:52:30 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2387: ! 2388: * m68k.md (movsf): Correct two fmove.x to fmove.s. ! 2389: ! 2390: * expmed.c (extract_fixed_bit_field): ! 2391: Must always generate an `and' to mask the bitfield ! 2392: unless its width is the same as the output machine mode. ! 2393: ! 2394: * version 1.18 released. ! 2395: ! 2396: Wed Feb 3 08:41:20 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2397: ! 2398: * fold-const.c (fold): Convert EXPR's operands before returning them. ! 2399: ! 2400: Tue Feb 2 15:35:18 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2401: ! 2402: * reload.c (find_reloads_address_1): ! 2403: ! 2404: * typecheck.c (default_conversion): Handle COMPOUND_EXPR arrays. ! 2405: ! 2406: Mon Feb 1 18:53:05 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2407: ! 2408: * ns32k.md: operand 0 of all unsigned divide/modulus insns ! 2409: is now register_operand. ! 2410: ! 2411: * stdarg.h: Make va_list be char *, not char *[1]. ! 2412: Latest draft doesn't say it must be an array type. ! 2413: ! 2414: Sun Jan 31 11:14:07 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2415: ! 2416: * flow.c (find_basic_blocks): Add temp var to avoid Sequent ! 2417: compiler bug. ! 2418: ! 2419: * tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Don't allow pushes or pops ! 2420: since there are special insn patterns for them. ! 2421: Resubroutinize and add temp vars to make expressions smaller. ! 2422: * ns32k.md: Add a few more special stack insns; now there are enough. ! 2423: ! 2424: * tm-sequent.h: Definitions of DBX_NO_XREFS and DBX_CONTIN_LENGTH. ! 2425: ! 2426: * reload1.c (choose_reload_targets): Handling of reload_strict_low ! 2427: is needed for input reloads as well as output, since a strict_low_part ! 2428: operand is normally a read-write operand. ! 2429: ! 2430: * reload1.c (reload): The mode a reload needs is the wider of ! 2431: the input and output modes--just as it is in choose_reload_targets. ! 2432: ! 2433: * reload.c (find_dummy_reload): If IN and OUT have different widths ! 2434: and one of them exceeds a word, don't find any dummy reload. ! 2435: ! 2436: * toplev.c (compile_file): Allocate enough space for .jump2 filename. ! 2437: ! 2438: Sat Jan 30 10:35:46 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2439: ! 2440: * output-ns32k.c (print_operand_address): ! 2441: Print addresses of the form C1+(N*REG+C2) which currently ! 2442: are accepted as legitimate memory addresses. ! 2443: ! 2444: * tm-sequent.h: Simple bugs in PRINT_OPERAND, TARGET_DEFAULT ! 2445: and SEQUENT_ADDRESS_BUG. ! 2446: ! 2447: * gen*.c: Must explicitly exit; returning from `main' fails ! 2448: to indicate nonzero status due to bug in Unix. ! 2449: ! 2450: * parse.y (check_line_number): Ignore entire line of unrecognized ! 2451: #-directive; no error if it is `pragma'. ! 2452: ! 2453: Fri Jan 29 06:46:01 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2454: ! 2455: * genrecog.c, genextract.c, genoutput.c: Define bcopy and/or bzero. ! 2456: ! 2457: * cccp.c (do_define): Make defn->argnames long enough in no-args case. ! 2458: ! 2459: * reload1.c (reload): Make basic_block_needs 0 until after the ! 2460: frame pointer reg is spilled, so that ALL pseudos in it are spilled. ! 2461: ! 2462: * typecheck.c (truthvalue_conversion): ! 2463: Strip a NOP_EXPR only if it extends, not if it truncates. ! 2464: (build_unary_op): For TRUTH_NOT_EXPR, call invert_truthvalue ! 2465: to simplify. ! 2466: ! 2467: * Fixes for HPUX support from cph: ! 2468: * tm-hp9k320.h: Correct names of floating-point registers. ! 2469: Fix typos in ASM_OUTPUT_OPCODE; also convert `fmove' to `fmov'. ! 2470: * Makefile (comments for HPUX): ! 2471: cph says -Wd,-X isn't needed in CFLAGS, nor -lBSD in CLIB. ! 2472: Also that -g can't be used in CFLAGS with HP's pcc. ! 2473: * conf-hp9k320.h: New file, like config-m68k.h but with ! 2474: #defines for the bstring functions. ! 2475: * m68k.md: Add else-clauses to the HPUX_ASM conditionals on cmp insns. ! 2476: Reinsert mistakenly-deleted MOTOROLA conditionals around ! 2477: some OUTPUT_JUMPs. ! 2478: ! 2479: Thu Jan 28 09:51:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2480: ! 2481: * jump.c (jump_back_p): If TARGET is unconditional, return 0. ! 2482: ! 2483: Wed Jan 27 04:18:29 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2484: ! 2485: * combine.c (subst): Simplify (plus (plus x c1) c2). ! 2486: ! 2487: * expr.c (emit_push_insn): Don't use small-block push-insns for BLKmode ! 2488: when one of them would be affected by PUSH_ROUNDING. ! 2489: Instead, make all the space and then copy. ! 2490: * expr.c (expand_call): Don't apply PUSH_ROUNDING if BLKmode. ! 2491: ! 2492: * Allow `asm' with operands to be marked volatile. ! 2493: * cse.c (canon_hash): Don't record ASM_OPERANDS that has `volatil'. ! 2494: * loop.c (invariant_p): ASM_OPERANDS with `volatil' can't be invariant. ! 2495: * flow.c (volatile_refs_p): Note ASM_OPERANDS that are volatile. ! 2496: * stmt.c (expand_asm_operands): New arg VOL; mark ASM_OPERANDS as vol. ! 2497: * typecheck.c (c_expand_asm_operands): New arg VOL. ! 2498: * parse.y: allow a TYPE_QUAL after ASM. ! 2499: ! 2500: * Make cse handle `asm' with operands: ! 2501: * cse.c (canon_hash): Hash string operands by contents, not address. ! 2502: * cse.c (exp_equiv_p): Compare string operands with strcmp. ! 2503: * rtl.c (rtx_equal_p): Compare string operands with strcmp. ! 2504: ! 2505: * decl.c (init_decl_processing): Once sizetype is set, ! 2506: correct the type of the sizes of types already made. ! 2507: ! 2508: * cccp.c (do_defines): Don't reject #define foo{a}. ! 2509: ! 2510: Tue Jan 26 04:53:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2511: ! 2512: * reload.c (find_reloads): Now that `asm' is limited to ! 2513: MAX_RECOG_OPERANDS, eliminate dynamic allocation of `constraints' ! 2514: and `constraints1', and go back to `recog_operand' instead of ! 2515: `operands'. ! 2516: ! 2517: * typecheck.c (c_expand_asm_operands): New fn to handle `asm' for C. ! 2518: Calls expand_asm_operands, and handles output operands that ! 2519: the other function cannot handle. ! 2520: ! 2521: * parse.y: Call that function. ! 2522: ! 2523: * stmt.c (expand_asm_operands): Error if too many operands. ! 2524: #include insn-config.h to get MAX_RECOG_OPERANDS. ! 2525: ! 2526: * expr.c (expand_assignment): Use store_field to handle ! 2527: structure fields and array elements. ! 2528: ! 2529: * output-m68k.c (output_move_double): PUSHOP and POPOP were swapped. ! 2530: Handle insns that push an sp-relative address onto sp; ! 2531: these can arise with -fomit-frame-pointer. ! 2532: BUG? Do unoffsetable mem refs using sp and fp lose? ! 2533: ! 2534: * m68k.md (movdi,movdf): Allow unoffsetable mem refs ! 2535: only if the other operand is a register. ! 2536: ! 2537: * m68k.md (zero_extendqisi2): SGS conditionals deleted. ! 2538: Supposedly the MOTOROLA syntax works for those addresses. ! 2539: ! 2540: * typecheck.c (default_conversion): ! 2541: If flag_traditional, preserve unsignedness when promoting ints, ! 2542: and promote float to double. ! 2543: ! 2544: * typecheck.c (build_binary_op_nodefault): ! 2545: Allow comparisons between pointers and ints. ! 2546: If not -traditional, warn about them. ! 2547: ! 2548: Mon Jan 25 02:11:18 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2549: ! 2550: * expmed.c ({extract,store}_split_bit_field): ! 2551: Functions {extract,store}_split_reg_bit_field now work for memory ! 2552: also, and therefore are renamed. ! 2553: * ({extract,store}_fixed_bit_field): Call those fns when a field ! 2554: is split across two words. ! 2555: Also, preserve the `volatil' bit on memory refs. ! 2556: ! 2557: * output-m68k.c (output_move_double): Handle nonoffsetable mem refs. ! 2558: * m68k.md: Relax constraints on movdi, movdf. ! 2559: ! 2560: * decl.c (init_decl_processing): Define `int' and `char' first. ! 2561: Set `sizetype' explicitly. ! 2562: ! 2563: * stmt.c (fixup_var_refs_1): May not just return when a SET ! 2564: doesn't have VAR as its src or dest. ! 2565: ! 2566: * varasm.c: Don't include c-tree.h. ! 2567: ! 2568: * decl.c (build_struct): Split this function into three: ! 2569: `xref_tag', `start_struct' and `finish_struct'. ! 2570: `xref_tag' subsumes `xref_enum'. ! 2571: ! 2572: * parse.y (structsp): When parsing `struct foo {...}', define the tag ! 2573: as a cross-ref before parsing the components. Use the three new fns. ! 2574: ! 2575: * regclass.c (regclass): Recognize new-format ASM_OPERANDS insns ! 2576: with `asm_noperands', and scan their operands as usual. ! 2577: ! 2578: * cse.c: In numerous functions such as canon_hash, rtx_cost, etc. ! 2579: that do tree-walk on rtx, handle vectors of subexpressions. ! 2580: ! 2581: * loop.c (invariant_p): Likewise. ! 2582: ! 2583: * jump.c (delete_insn): Two bugs: ! 2584: If insn already deleted, return the first following nondeleted. ! 2585: Deleting a jump's label can delete NEXT. Make sure return value ! 2586: is always the first insn following INSN and not yet deleted. ! 2587: ! 2588: Sun Jan 24 02:27:49 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2589: ! 2590: * rtl.def (ASM_OPERANDS): Change the rtl expression of an ! 2591: `asm' with operands so it looks like this for one output operand: ! 2592: (set OUTPUT (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT ! 2593: 0 INPUTS INPUTCONSTRAINTS)). ! 2594: and like this for multiple outputs: ! 2595: (PARALLEL [ ! 2596: (set OUTPUT0 (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT ! 2597: 0 INPUTS INPUTCONSTRAINTS)). ! 2598: (set OUTPUT1 (asm_operands:OUTPUTMODE1 INSNSTRING OUTPUTCONSTRAINT1 ! 2599: 1 INPUTS INPUTCONSTRAINTS))]) ! 2600: ! 2601: * parse.y: Change parsing of `asm' to distinguish input and output ! 2602: operands. Separate them with colon; separate the string with colon. ! 2603: ! 2604: * stmt.c (expand_asm_operands): Receive inputs and outputs separately. ! 2605: Generate the new rtl format. ! 2606: ! 2607: * recog.c (asm_noperands, decode_asm_operands): New fns ! 2608: for extracting the operands and constraints from these insns. ! 2609: ! 2610: * final.c (final): Recognize and output the new rtl format ! 2611: using those new functions. ! 2612: ! 2613: * reload.c (find_reloads): Recognize and get constraints ! 2614: from the new rtl format using those new functions. ! 2615: New variable `operand_modes' holds the machine modes of the ! 2616: operands, obtained one way for ASM_OPERANDS insns and another ! 2617: for other insns. ! 2618: ! 2619: * rtl.c (note_stores): Calling convention ! 2620: is changed: the first arg FUNCTION now receives as its 2nd arg ! 2621: 1 if clobbering, 0 if setting. Used to be the CLOBBER or SET rtx. ! 2622: ! 2623: * local-alloc.c (reg_is_set): This fn is called from note_stores; ! 2624: change its arguments. ! 2625: ! 2626: * tm-m68k.h (FIXUP_FRAME_POINTER_ADDRESSES): ! 2627: Use frame_pointer_rtx to recognize intended frame-pointer refs ! 2628: and not recognize pseudo-regs that were allocated to the frame ! 2629: pointer register. ! 2630: ! 2631: * emit-rtl.c: All refs to frame pointer use a single rtx, in ! 2632: frame_pointer_rtx. Likewise arg_pointer_rtx for the arg pointer. ! 2633: If they are the same register, these are the same rtx. ! 2634: Initialize them in init_emit. ! 2635: * rtl.h: Declare these vars. ! 2636: ! 2637: * stmt.c (assign_parms, assign_stack_local): Use those rtx's. ! 2638: ! 2639: Sat Jan 23 00:32:10 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu) ! 2640: ! 2641: * reload.c (find_reloads): Don't combine_reloads if `&' constraint ! 2642: was used. ! 2643: ! 2644: * parse.y: Parse `asm' with operands. ! 2645: * stmt.c (expand_asm_params): New fn: generate an ASM_OPERANDS for ! 2646: `asm' with operands. ! 2647: * final.c (final): Output an ASM_OPERANDS insn-body. ! 2648: * regclass.c (regclass): Ignore ASM_OPERANDS, like ASM_INPUT. ! 2649: ! 2650: * reload.c (find_reloads): Handle reloading of ASM_OPERANDS. ! 2651: The number of operands can no longer be bounded. ! 2652: For example we can't always put the operands in recog_operands. ! 2653: ! 2654: New locals OPERANDS and OPERAND_LOCS point to alloca'd vectors of ! 2655: operands and their locations. New locals CONSTRAINTS and CONSTRAINTS1 ! 2656: hold alloca'd vectors of constraints. ! 2657: ! 2658: Unfortunately this isn't enough; every vector with length ! 2659: MAX_RECOG_OPERANDS needs to be dynamically allocated. ! 2660: Would this be too slow? For now, a cheap "solution" is to delete ! 2661: any insn that has too many operands. ! 2662: ! 2663: * rtl.def: Delete VOLATILE, UNCHANGING and UNDESCRIBED. ! 2664: Add ASM_OPERANDS. ! 2665: ! 2666: * regclass.c (reg_class_record): Delete ref to UNCHANGING. ! 2667: * loop.c (invariant_p): ! 2668: * rtl.c (rtx_varies_p): ! 2669: ! 2670: * cccp.c: Define __VERSION__. ! 2671: ! 2672: * decl.c (shadow_tag): TYPE_NAME doesn't work to get the tag-name ! 2673: of a struct, so use new function lookup_tag_reverse. ! 2674: * decl.c (lookup_tag_reverse): Given a type, return its tag name. ! 2675: ! 2676: * symout.c (symout_source_file): Output one `struct source'. ! 2677: * symout.c (symout_lines): Output all of them, and the sourcevector. ! 2678: * gdbfiles.h: New file for communication between final.c and symout.c. ! 2679: ! 2680: * final.c (output_source_line): New arg WRITE_SYMBOLS says write ! 2681: new GDB-format linenumber info. Assigns a filenum to each source ! 2682: file name and keeps track of the correspondence. ! 2683: ! 2684: * cccp.c (do_include): Output the -M info after searching the dirs; ! 2685: include the actual dir name. Don't generate "./" for current dir. ! 2686: ! 2687: Fri Jan 22 04:10:10 1988 Richard Stallman (rms at frosted-flakes) ! 2688: ! 2689: * tm-news800.h: Delete override of INDIRECTABLE_1_ADDRESS. ! 2690: Output is faster if it doesn't use 32-bit displacements. ! 2691: ! 2692: * reload.c (combine_reloads): New function. ! 2693: If possible, find an input reload ! 2694: and an output reload that can be turned into one input-output reload. ! 2695: The old output-reload is marked as inoperative: reload_out ! 2696: and reload_in both zero. This is called from find_reloads. ! 2697: ! 2698: * reload1.c (reload, choose_reload_targets): Ignore inoperative ! 2699: reloads. ! 2700: ! 2701: * Print warnings for variables that could be clobbered by `longjmp'. ! 2702: * expr.c (expand_call): Generate a NOTE_INSN_SETJMP whenever ! 2703: `setjmp' or `_setjmp' is called. ! 2704: * flow.c (propagate_block): When NOTE_INSN_SETJMP is seen, ! 2705: record the live regs in `regs_live_at_setjmp'. ! 2706: * stmt.c (uninitialized_vars_warning): Warn about vars that have regs ! 2707: that are set more than once and are marked in `regs_live_at_setjmp'. ! 2708: Works through function `regno_clobbered_by_longjmp'. ! 2709: * rtl.h: Define NOTE_INSN_SETJMP. ! 2710: ! 2711: * genrecog.c (try_merge_2): When enforce_modes, keep all the ! 2712: alternatives segregated by modes and keep the modes in numerical order. ! 2713: * genrecog.c (write_tree): Make conditions for switch-on-modes ! 2714: know what difference enforce_mode makes. ! 2715: ! 2716: Thu Jan 21 00:12:35 1988 Richard Stallman (rms at frosted-flakes) ! 2717: ! 2718: * tm-ns32k.h: Use Stein's definitions of PRINT_OPERAND{,_ADDRESS}; ! 2719: move the Sequent definitions info tm-sequent.h. ! 2720: Handle %$ in both old and new PRINT_OPERAND. ! 2721: Define CPP_PREDEFINES. ! 2722: ! 2723: * ns32k.md: Merge some features from Jan Stein's port: ! 2724: strict_low_part insns, smart output of booleans with small ! 2725: constant args, acbd insns generalized for other increments. ! 2726: Use %$ wherever there is an explicit immediate. ! 2727: Fix shortcomings of adjsp insns: use adjspd in general, ! 2728: and use adjspb in all the cases that allow it. ! 2729: Don't bother explicitly clearing CC_REVERSED. ! 2730: For tstsf/tstdf, output the floating-zero constants ! 2731: using {f,d}const0_rtx. ! 2732: ! 2733: A problem still remains, which is that the Sequent and the ! 2734: other ns32k assembler syntax require different ! 2735: ! 2736: * typecheck.c (unary_complex_value): Use correct datatype for ! 2737: compound-exprs. ! 2738: ! 2739: * gen*.c (main): Use obstack_init instead of obstack_begin. ! 2740: ! 2741: * vax.md: define_peephole for andl3 x,y,z; extzv z,....,z ! 2742: ! 2743: * m68k.md (tstsi): Use cmpw instead of cmpl to test addr reg. ! 2744: ! 2745: * tm-m68k.h: Bugs for 68000 when frame size is over 64k. ! 2746: For FUNCTION_PROLOGUE, just subtract from sp instead of fp. ! 2747: For FUNCTION_EPILOGUE, must put the size into a0 and then ! 2748: all insns must be indexed by a0. And do this even on 68020. ! 2749: ! 2750: * tm-isi68.h: Similar changes. ! 2751: * tm-news800.h, tm-hp9k320.h: Similar changes. ! 2752: ! 2753: Wed Jan 20 04:38:21 1988 Richard Stallman (rms at frosted-flakes) ! 2754: ! 2755: * cccp.c (error_with_line): New function. ! 2756: Use it to report the "unterminated whatever" errors. ! 2757: ! 2758: * typecheck.c (build_unary_op): Recursive call had missing arg. ! 2759: ! 2760: * m68k.md (movhi): If MOTOROLA, the insn that fetches from a ! 2761: case-dispatch table now defines the LI label as .+2. ! 2762: * tm-news800.el, tm-hp9k320.h (PRINT_OPERAND_ADDRESS): ! 2763: Don't subtract 2 when outputting the address in that insn. ! 2764: ! 2765: Tue Jan 19 00:02:33 1988 Richard Stallman (rms at frosted-flakes) ! 2766: ! 2767: * cse.c (cse_basic_block): Abort if more qtys were used than allocated. ! 2768: ! 2769: Mon Jan 18 04:44:28 1988 Richard Stallman (rms at frosted-flakes) ! 2770: ! 2771: * cccp.c (special_symbol): tm_mon is origin-0, not origin-1. ! 2772: ! 2773: * final.c (output_asm_insn): If %LETTER with no digits, ! 2774: pass null pointer as the operand. ! 2775: ! 2776: * output-m68k.c (singlemove_string): Get rid of %e. ! 2777: ! 2778: * stmt.c (fixup_memory_subreg): Convert (SUBREG (MEM a)) to (MEM a'). ! 2779: * stmt.c (fixup_var_ref_1): Use that fn for operands of ! 2780: SIGN_EXTRACT and ZERO_EXTRACT, since (SUBREG:SI (REG:QI...)) ! 2781: could have turned into (SUBREG:SI (MEM:QI...)), which is unsafe. ! 2782: ! 2783: * rtl.c (debug_rtx): Print an rtx on stderr, for debugging. ! 2784: ! 2785: Sun Jan 17 04:37:20 1988 Richard Stallman (rms at frosted-flakes) ! 2786: ! 2787: * gcc.c: options -M* treated like -M. ! 2788: ! 2789: * stmt.c (pushcase): Do nothing if the case index has error_mark type. ! 2790: ! 2791: * expr.c (expand_increment): Don't use queue for post-inc on memory ! 2792: if the add insn requires register args. (Better code for RISCs.) ! 2793: ! 2794: Sat Jan 16 02:10:22 1988 Richard Stallman (rms at frosted-flakes) ! 2795: ! 2796: * ns32k.md: Change register_operand to general_operand. ! 2797: * ns32k.md (udivmoddisi4): Use match_dup where required. ! 2798: Comment it out because it can't accept two independent output args. ! 2799: ! 2800: Fri Jan 15 00:02:35 1988 Richard Stallman (rms at frosted-flakes) ! 2801: ! 2802: * toplev.c: Include sys/time.h only for BSD. For USG, use time.h. ! 2803: This is correct for HPUX; don't know about others. ! 2804: ! 2805: * gcc.c (execute): Eliminate `union wait'. Make `status' an int. ! 2806: * gcc.c (execute) [USG]: Use fork instead of vfork. ! 2807: ! 2808: * final.c (output_source_line): Use ASM_OUTPUT_SOURCE_{FILENAME,LINE} ! 2809: if they are defined. ! 2810: ! 2811: * tm-hp9k320.h: New name for tm-hpux.h. ! 2812: * tm-hp9k320.h (ASM_OUTPUT_LOCAL): Add 3rd arg to `lcomm' statements. ! 2813: * tm-hp9k320.h (ASM_OUTPUT_{DOUBLE,FLOAT}): Use `double' and `float'. ! 2814: * tm-hp9k320.h (CALL_USED_REGISTERS): Don't save any 68881 regs. ! 2815: * tm-hp9k320.h (CPP_PREDEFINES): different names defined. ! 2816: * tm-hp9k320.h (HPUX_ASM, NO_DBX_FORMAT, ASM_SPEC): define these. ! 2817: * tm-hp9k320.h (ASM_OUTPUT_OPCODE): Convert `ftst' to `ftest'. ! 2818: * tm-hp9k320.h: Define ASM_OUTPUT_SOURCE_{FILENAME,LINE}. ! 2819: ! 2820: * m68k.md: Rename `hpux' conditionals to `HPUX_ASM'. ! 2821: * m68k.md: Reverse `fcmp' args if HPUX_ASM. ! 2822: ! 2823: * cccp.c (print_deps): 2 means give all files, 1 means only user files. ! 2824: * cccp.c (do_include): Support that. ! 2825: * cccp.c (main): -MM sets 1, -M alone sets 2. ! 2826: * cccp.c (main): Give fatal error if I/O error in writing. ! 2827: ! 2828: * toplev.c (fatal_io_error): Report I/O error on given filename, ! 2829: and exit. ! 2830: ! 2831: * toplev.c (compile_file): Detect error writing asm_out_file. ! 2832: Always put asm file's name in asm_file_name for err msg. ! 2833: * symout.c (symout_finish): Detect error writing symfile. ! 2834: * symout.c (symout_init): Save filename in symfile_name for err msg. ! 2835: ! 2836: * gen*.c: Return 1 if ferror (stdout)--in case disk is full. ! 2837: ! 2838: * local-alloc.c (block_alloc): Don't crash if 1st rtx ! 2839: in a PARALLEL is not a SET. ! 2840: ! 2841: * tm-m68k.h, tm-news800.h (PRINT_OPERAND). Eliminate code `%e'. ! 2842: * m68k.md: Change `%e' to `e' everywhere. ! 2843: * tm-hpux.h (ASM_OUTPUT_OPCODE): Output `move' as `mov'. ! 2844: ! 2845: * tm-m68k.h, tm-news800.h, tm-hpux.h (PRINT_OPERAND): ! 2846: New code `%!' is output as the name for the cc register. ! 2847: * m68k.md (insns that use andi to ccr): Use `%!' to avoid ! 2848: conditionals. ! 2849: ! 2850: * cse.c: Record in qty_const_insn the insn that stored the ! 2851: constant value of a qty. When making a REG_WAS_0 note, ! 2852: store in it the insn that established the value 0. ! 2853: ! 2854: * vax.md (movsi): When checking a REG_WAS_0 note, ! 2855: verify that the insn it points to hasn't been deleted or made a NOTE. ! 2856: ! 2857: Thu Jan 14 00:01:35 1988 Richard Stallman (rms at frosted-flakes) ! 2858: ! 2859: * toplev.c: Eliminate error_with_line and warning_with_line. ! 2860: * parse.y, decl.c: Change remaining calls to those two. ! 2861: ! 2862: * tree.c (get_unwidened, get_narrower): To see if a COMPONENT_REF ! 2863: is unsigned, look at the FIELD_DECL, not at the COMPONENT_REF. ! 2864: ! 2865: * rtl.c (print_rtx): Print /v for the `volatil' bit. ! 2866: * expr.c (expand_assignment expand_expr): If handling a COMPONENT_REF, ! 2867: note whether it is volatile. ! 2868: ! 2869: * fold-const.c (fold): a call to split_tree missed an argument. ! 2870: ! 2871: * flow.c (volatile_refs_p): Scan an rtx for volatile mem refs. ! 2872: * flow.c (life_analysis): Record in INSN_VOLATILE which insns ! 2873: have any volatile mem refs. ! 2874: * flow.c (mark_used_regs): Always mark an insn with volatile mem refs. ! 2875: Always pass INSN as an arg. New arg FINAL now says whether ! 2876: this is the last time scanning. ! 2877: * flow.c (propagate_block): Don't delete insns with volatile mem refs. ! 2878: ! 2879: * flow.c: Remove all refs to `obey_regdecls'. ! 2880: Calling this with -noreg just doesn't help -W. ! 2881: ! 2882: Wed Jan 13 01:13:07 1988 Richard Stallman (rms at frosted-flakes) ! 2883: ! 2884: * decl.c (finish_decl): Error if auto var's size isn't known. ! 2885: Change type to error_mark_node to avoid crash if the var ! 2886: is used in an expression, since it has no DECL_RTL. ! 2887: ! 2888: * output-m68k.c (output_move_const_single): % -> %% for sprintf. ! 2889: ! 2890: * parse.y (yylex): Store token_buffer properly after ellipsis. ! 2891: ! 2892: * decl.c (duplicate_decls): Don't call layout_decl ! 2893: for FUNCTION_DECL or TYPE_DECL. ! 2894: ! 2895: * toplev.c (warning_with_decl): New warning function with decl as arg. ! 2896: * (error_with_decl): similar. ! 2897: ! 2898: * decl.c: Replace most `yylinerror' calls with `error_with_decl'. ! 2899: ! 2900: * decl.c (build_struct): Reform code to detect erroneous bit-fields. ! 2901: All such errors are now detected here. ! 2902: Promote bit-fields to int if appropriate. ! 2903: If traditional, make all int bit-fields unsigned. ! 2904: Set DECL_ALIGN for members that are not bit-fields. ! 2905: ! 2906: * decl.c (grokfield): Don't set DECL_ALIGN here. ! 2907: ! 2908: * stor-layout.c (layout_decl): Don't promote the type of a bit-field. ! 2909: Use TREE_PACKED to distinguish a bit-field. ! 2910: Don't check the width because build_struct did that. ! 2911: ! 2912: * m68k.md (cmpm): Reject if either operand (address) is a constant. ! 2913: ! 2914: Tue Jan 12 15:11:20 1988 Richard Stallman (rms at frosted-flakes) ! 2915: ! 2916: * cse.c (canon_reg): Never replace ANY hard reg from reg_rtx ! 2917: because that could alter the machine mode. ! 2918: ! 2919: * tm-news800.h: Redefine INDIRECTABLE_1_ADDRESS only if MOTOROLA. ! 2920: ! 2921: Mon Jan 11 13:15:45 1988 Richard Stallman (rms at frosted-flakes) ! 2922: ! 2923: * jump.c (follow_jumps): If we find a cycle, make it a jump to self. ! 2924: ! 2925: * cse.c (predecide_loop_entry): Give up if chase more than 10 jumps. ! 2926: ! 2927: Sun Jan 10 14:52:42 1988 Richard Stallman (rms at frosted-flakes) ! 2928: ! 2929: * reload1.c (reload): basic_block_needs (new vector) gets 1 ! 2930: for each basic block that needs a reload. ! 2931: * reload1.c (spill_hard_reg): Don't spill pseudos that are ! 2932: confined to a basic block which has no need for any reloads. ! 2933: * reload1.c (reload): Each cycle that any element of basic_block_needs ! 2934: changes from 0 to 1, must re-spill all previously spilled regs. ! 2935: ! 2936: * regclass.c (record_address_regs): ! 2937: Skip the charging of ICOST if it is 0. ! 2938: ! 2939: * flags.h, toplev.c: New flag -fvolatile. ! 2940: * typecheck.c (build_indirect_ref): If flag_volatile, ! 2941: every INDIRECT_REF is marked with TREE_THIS_VOLATILE. ! 2942: ! 2943: * fold-const.c (fold): Test in TRUTH_NOT_EXPR case was backward. ! 2944: Also result type is always `int'. ! 2945: ! 2946: Sat Jan 9 04:16:11 1988 Richard Stallman (rms at rice-krispies) ! 2947: ! 2948: * flags.h (flag_traditional): New flag. ! 2949: * toplev.c: recognize -ftraditional and -traditional. ! 2950: * parse.y (yylex): If flag_traditional, don't recognize ! 2951: `signed', `const' or `volatile'. ! 2952: ! 2953: * decl.c (pushdecl): If flag_traditional, any extern decl ! 2954: takes effect at top level. ! 2955: ! 2956: * tree.c (lvalue_or_else): New 2nd arg for use in error message. ! 2957: * typecheck.c: All callers pass 2nd arg. ! 2958: ! 2959: * global-alloc.c: allocno_preferred_reg can specify a preferred ! 2960: hard reg for each allocno. If so, try it first (new call to find_reg). ! 2961: ! 2962: * global-alloc.c (find_reg): New arg PREFREG specifies reg to try ! 2963: first. ! 2964: ! 2965: * decl.c (build_struct): if :0 bit field at the end, round the ! 2966: structure size to multiple of EMPTY_FIELD_BOUNDARY. ! 2967: ! 2968: * cse.c (make_regs_eqv): Was testing for reg_next_eqv[lastr] == 0 ! 2969: and should be == -1. ! 2970: ! 2971: * reload1.c (reload_as_needed): Fix invalid optimization deleting ! 2972: the previous store into a pseudo-reg that feeds an input-reload. ! 2973: It is not safe because a later insn may look in the pseudo's stack ! 2974: slot for the value. Delete the store only if we can eliminate the ! 2975: pseudo entirely or if the current insn stores a new value there. ! 2976: Also verify that reload_in[j] is a REG. ! 2977: ! 2978: * reload1.c (reload_as_needed): When doing an input reload from a ! 2979: pseudo that was stored by the previous insn (not as a reload), ! 2980: redirect the previous insn into the reload register, if this lets ! 2981: us eliminate the pseudo entirely. ! 2982: ! 2983: * reload1.c (reload_as_needed): In both of the above cases, it's ! 2984: impossible to prevent a stack slot since one was already assigned, ! 2985: so don't alter reg_n_refs. Instead, set reg_renumber to record ! 2986: that this pseudo did get a hard reg. ! 2987: ! 2988: * stmt.c: Set `volatil' in pseudo-regs for the user's variables. ! 2989: ! 2990: * jump.c (delete_insn): Do nothing if insn already deleted. ! 2991: ! 2992: * tm-sun{2,3}.h: #define STRUCTURE_SIZE_BOUNDARY 2 ! 2993: for compatibility with Sun PCC. Note that 4.3 vax PCC ! 2994: does not want this. ! 2995: ! 2996: * fold-const.c: Replace truncate_unsigned with force_fit_type ! 2997: which truncates unsigned types and sign-extends signed types. ! 2998: ! 2999: * expr.c (do_jump): emit_queue before outputting the jump insns ! 3000: that use the comparison. ! 3001: ! 3002: * stmt.c: Error message for any goto that jumps into a ! 3003: binding contour that restores a stack level. ! 3004: ! 3005: TREE_PACKED (label) means label was defined inside ! 3006: such a binding contour that is now exited. Using such a label ! 3007: is an error. ! 3008: ! 3009: TREE_ADDRESSABLE (label) means label was used from a place ! 3010: outside all such binding contours. If this is 1 when ! 3011: TREE_PACKED is set to 1, it is an error. ! 3012: ! 3013: Any other invalid goto must have a fixup. fixup_gotos detects ! 3014: such invalid gotos. fixup_gotos takes a second arg, which ! 3015: is the first insn of the contour now being exited. ! 3016: ! 3017: * GNU C version 1.17. ! 3018: ! 3019: Local Variables: ! 3020: mode: indented-text ! 3021: left-margin: 8 ! 3022: fill-column: 76 ! 3023: version-control: never ! 3024: End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.