diff options
Diffstat (limited to 'gcc/ChangeLog')
-rw-r--r-- | gcc/ChangeLog | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3af3e093d34..ed7b8551fc8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2000-10-01 Andrew MacLeod <amacleod@redhat.com> + + * dwarf2out.c (loc_descriptor): use SUBREG_REG to get the register. + * emit-rtl.c (gen_lowpart_common, gen_imagpart): Spacing nits. + (gen_highpart, constant_subword, operand_subword): Spacing nits. + * function.c (purge_single_hard_subreg_set): Correct last change, find + correct offsets for subreg. + * reload.c (push_reload): Replace missing clause. + 2000-09-30 Andrew MacLeod <amacleod@redhat.com> * function.c (purge_single_hard_subreg_set): Dont use SUBREG_WORD. @@ -7,6 +16,323 @@ * config/i960/i960.md (zero_extendqihi2): SUBREG's are byte offsets. * config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Don't use SUBREG_WORD. +2000-05-04 Jakub Jelinek <jakub@redhat.com> + + * emit-rtl.c (gen_lowpart_common): Return inner SUBREG + if it is lowpart SUBREG, not when SUBREG_BYTE is 0. + + * flow.c (mark_set_1): Remove ALTER_HARD_SUBREG. Use + SUBREG_REGNO_OFFSET instead. + * config/d30v/d30v.c (d30v_split_double): Use SUBREG_REGNO_OFFSET + instead of SUBREG_WORD. + (d30v_print_operand_memory_reference): Likewise. + + * ssa.c (coalesce_regs_in_copies): Use ! subreg_lowpart_p instead of + checking SUBREG_WORD != 0. + + * cse.c (remove_invalid_subreg_refs): Change offset argument type to + unsigned int. + * ssa.c (rename_insn_1): Use subreg_lowpart_p instead of checking + SUBREG_WORD == 0. + (rename_equivalent_regs_in_insn): Likewise. + * rtl.h (SUBREG_BYTE): Change to XCUINT from XCINT. + * emit-rtl.c (subreg_hard_regno): Make byte_offset, base_regno and + final_regno unsigned. + (subreg_lowpart_p): Likewise with offset. + (operand_subword): Likewise for partwords. + + * config/sparc/sparc.md (cmp_siqi_trunc, cmp_siqi_trunc_set, + cmp_diqi_trunc, cmp_diqi_trunc_set, lshrdi3_v8plus+1, + lshrdi3_v8plus+2, lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper + SUBREG_BYTE offset for non-paradoxical subregs in patterns. + + * emit-rtl.c (gen_lowpart_SUBREG): New function. + * rtl.h (gen_lowpart_SUBREG): Add prototype. + * calls.c (precompute_arguments): Use it. + * expr.c (store_expr, expand_expr): Likewise. + * regmove.c (optimize_reg_copy_3): Likewise. + * reload1.c (emit_reload_insns): Likewise. + * stmt.c (expand_anon_union_decl): Likewise. + + * rtl.texi: Remove all traces of SUBREG_WORD. + * reload.c (push_reload): Fix test for the new SUBREG_BYTE semantics. + * config/sparc/sparc.md (zero_extendhidi2, extendqidi2, extendhidi2): + Compute SUBREG_BYTE offset based on DImode, not SImode. + + * function.c (assign_params): Mark arguments SUBREG_PROMOTED_VAR_P + if they are actually promoted by the caller and + PROMOTE_FOR_CALLS_ONLY is true. Otherwise combiner will not know + that their bits are already guaranteed to be zero or sign copies. + + * emit-rtl.c (constant_subword): Don't abort if + float bitsize is larger than 64 bits on 64bit host. + + * config/sparc/sparc.h (REG_SIZE): For SUBREG check float mode on + SUBREG_REG's mode. + * combine.c (simplify_rtx): For two nested SUBREGs if the mode of + the inner SUBREG is larger than both other modes we cannot simply + add both SUBREG_BYTEs on big endian. + (make_extraction): If BYTES_BIG_ENDIAN take the last few bytes + of the register, not first. + * calls.c (expand_call): For non-paradoxical SUBREG take endianess + into account. + + * config/alpha/alpha.c (print_operand_address): Fix typo. + * config/mips/mips.c (mips_move_1word, mips_move_2words, + mips_secondary_reload_class): SUBREG_REGNO_OFFSET macro + requires four arguments. + * config/pyr/pyr.c (consecutive_operands): Likewise. + * config/sh/sh.c (regs_used, machine_dependent_reorg): Likewise. + + * java/javaop.h: Default int32 to int, not long. Fix comment. + * emit-rtl.c (subreg_hard_regno): Till we remove the extensive + checks in subreg_hard_regno, propagate info on whether + HARD_REGNO_MODE_OK is allowed to fail. + * combine.c (simplify_rtx): Don't abort if SUBREG has + incompatible modes outside and inside. + * caller-save.c (mark_set_regs): Change callers of subreg_hard_regno + to pass new argument. + * final.c (alter_subreg): Likewise. + * local-alloc.c (reg_is_born): Likewise. + * rtl.h (subreg_hard_regno): Update prototype. + + * config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE + instead of SUBREG_WORD. + * config/ns32k/ns32k.md (udivmoddihi4): Fix explicit subregs in + rtl to use byte offsets. + * config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE, not + SUBREG_WORD. + * config/sparc/sparc.h (REG_SIZE): Handle SUBREG arguments. + * emit-rtl.c (subreg_realpart_p): Changed to use SUBREG_BYTE. + * integrate.c (copy_rtx_and_substitute): Use byte SUBREG offsets + in CONCAT handling. + * reload.c (find_reloads_subreg_address): Use SUBREG_BYTE. Remove + byte endian corrections when fixing up MEM subregs. + * resource.c (update_live_status): Use SUBREG_REGNO. + +1998-10-03 David S. Miller <davem@pierdol.cobaltmicro.com> + + Use byte offsets in SUBREGs instead of words. + * rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE. + (SUBREG_REGNO_OFFSET, SUBREG_REGNO): New macros. + (subreg_hard_regno, constant_subword, gen_rtx_SUBREG): New + functions. + * gengenrtl.c (special_rtx): Add SUBREG. + * regs.h (REG_SIZE): Allow target to override. + (REGMODE_NATURAL_SIZE): New macro which target can override. + * tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead. + * rtl.texi (subreg): Update to reflect new byte offset + representation. Add mentioning of the effect that + BYTES_BIG_ENDIAN has on subregs now. + * final.c (alter_subreg) [REG]: Remove ALTER_HARD_SUBREG + commentary and usage. Use subreg_hard_regno instead. + [MEM]: Remove endianness corrections and use SUBREG_BYTE. + Check for bogus SUBREG_BYTE values. + * emit-rtl.c (gen_rtx_SUBREG): New function, used to verify + certain invariants about SUBREGs the compiler creates. + (subreg_hard_regno): New function. + (gen_lowpart_common): Adjust offset for BYTES_BIG_ENDIAN too. + [SUBREG]: When combining two subregs, make sure final offset is a + multiple of the SUBREG's mode. + [REG]: Remove sparc64 hard regno wordaround. Simplify rest of the + code and use SUBREG_REGNO_OFFSET. + [CONST_INT, CONST_DOUBLE]: Call constant_subword. + (subreg_realpart_p): Use SUBREG_BYTE. + (gen_lowpart): Pretty. + (gen_highpart) [MEM]: Pretty. + [SUBREG]: Use SUBREG_BYTE. + [REG]: Remove sparc64 hard regno hacks. Adjust offset for + BYTES_BIG_ENDIAN too. Use SUBREG_REGNO_OFFSET for hard regs. + (subreg_lowpart_p): Always compute endian corrected goal offset, + even at the byte level, then compare against that. + (constant_subword): New function, pulled out all constant cases + from operand_subword and changed second argument name to offset. + (operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early + and call constant_subword to do the work. + [REG]: Use SUBREG_REGNO_OFFSET for hard regnos. + [SUBREG]: When combining two subregs, make sure final offset is a + multiple of the SUBREG's mode. + (operand_subword_force): Change second arg name to offset. Abort + early if reload is done and this is called. + * cse.c (mention_regs): Use SUBREG_BYTE. + (remove_invalid_subreg_refs): Second arg now named offset and is a + byte offset as per SUBREG_BYTE. Rework to use byte ranges and + comparison checks. + (canon_hash): Use SUBREG_BYTE. + (fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to + operand_subword. + (gen_lowpart_if_possible): Pretty. + (cse_insn): Fix conditional formatting. + * dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos + correctly. + * expmed.c (store_big_field): Use SUBREG_BYTE. + (extract_bit_field): Likewise. + (extract_split_bit_field): Likewise. + (expand_shift): Likewise. + * flow.c (life_analysis_1): Likewise. + * global.c (mark_reg_store): Remove word local and commented out + code which used it. + (mark_reg_clobber): Likewise. + (set_preference): Rework to use SUBREG_REGNO_OFFSET, + REGMODE_NATURAL_SIZE and SUBREG_BYTE where appropriate. + * combine.c (try_combine): Replace explicit XEXP with SUBREG_REG. + (simplify_rtx): Do not fixup byte endianness of subregs, the + SUBREG_BYTE contains the correct offset. When substituting two + subregs into each other still compare against word equality for + the fast case, but otherwise make the final offset congruent to + the mode of the subreg. Also use subreg_hard_regno to compute the + hard regno of a subreg. Rework the rest to use SUBREG_BYTE. This + function is too large. + (simplify_set): Rework to use SUBREG_BYTE, also fixup another + explicit XEXP into a SUBREG_REG. + (expand_field_assignment): Use SUBREG_BYTE. + (make_extraction): Likewise. + (apply_distributive_law): Likewise and fixup subreg comments. + (gen_lowpart_for_combine): Compute full byte offset. + * dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG + (mem_loc_descriptor): Likewise. + (loc_descriptor): Likewise. + * dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG + (output_mem_loc_descriptor): Likewise. + (output_loc_descriptor): Likewise. This and the previous file + have a lot of common duplicated code. + * caller-save.c (set_reg_live): Use subreg_hard_regno and tweak. + * jump.c (rtx_renumbered_equal_p): Use new subreg byte offsets, + and SUBREG_REGNO_OFFSET where appropriate. Also fix bug where + reg_y was not subreg correctified for the subreg case. + (true_regnum): Use SUBREG_REGNO_OFFSET. + * function.c (fixup_var_refs_1): Fixup explicit XEXP into + a SUBREG_REG. + (fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian + correction code. + (optimize_bit_field): Use SUBREG_BYTE. + * haifa-sched.c (print_value): Likewise. + * integrate.c (copy_rtx_and_substitute): Likewise and make sure + final byte offset is congruent to subreg's mode size. + (subst_constants): Use SUBREG_BYTE. + (mark_stores): Use SUBREG_REGNO_OFFSET for hard regs. + * local-alloc.c (combine_regs): Rework to use SUBREG_REGNO_OFFSET, + SUBREG_BYTE and REGMODE_NATURAL_SIZE. + (reg_is_born): Use subreg_hard_regno. + * recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte + endian correction code. + (indirect_operand): Likewise. + (general_operand): Remove dead mode_altering_drug code. + (constrain_operands): Use SUBREG_REGNO_OFFSET. + * reg-stack.c (mark_regs_pat): Use SUBREG_REGNO. Abort if we see + a pseudo reg here. + (get_true_reg): Use SUBREG_REGNO_OFFSET. + * regmove.c (regmove_optimize): Use SUBREG_BYTE. + * reload.c (push_reload): Use SUBREG_BYTE in comments and code. + Also use SUBREG_REGNO_OFFSET and SUBREG_REGNO where appropriate. + (find_dummy_reload): Use SUBREG_REGNO_OFFSET. Only adjust offsets + for hard registers inside subregs. + (operands_match_p): Likewise. + (find_reloads): Only advance offset for subregs containing hard + regs. Remove "can work with subregging" final condition when + setting force_reload, it no longer makes sense with byte + offsettable subregs. Fix another XEXP into a SUBREG_REG. + (find_reload_toplev): Use SUBREG_BYTE. Remove byte endian + corrections when fixing up MEM subregs. + (find_reloads_addres_1): Use SUBREG_BYTE, SUBREG_REGNO, and + SUBREG_REGNO_OFFSET where appropriate. + (subst_reloads): When combining two subregs, make sure final + offset is congruent to subreg's mode size. + (find_replacement): Likewise, also use SUBREG_BYTE and + SUBREG_REGNO_OFFSET where appropriate. + (refers_to_regno_for_reload_p): Use SUBREG_REGNO. + (reg_overlap_mentioned_for_reload_p): Use SUBREG_REGNO_OFFSET. + * reload1.c (eliminate_regs) [SUBREG]: Use SUBREG_BYTE, fixup + another explicit XEXP into a SUBREG_REG. Remove byte endian + correction code for memory subreg fixups. + (forget_old_reload_1): Use SUBREG_REGNO_OFFSET. + (choose_reload_regs): Use SUBREG_REGNO. + (emit_reload_insns): Use SUBREG_BYTE. + (reload_combine_note_store): Use SUBREG_REGNO_OFFSET. + (move2add_note_store): Use SUBREG_REGNO_OFFSET. + * reorg.c (mark_referenced_resources): Use SUBREG_REGNO. + * rtlanal.c (refers_to_regno_p): Use SUBREG_REGNO. + (reg_overlap_mentioned_p): Likewise. + (replace_regs); Make sure final offset of combined subreg is + congruent to size of subreg's mode. + * sdbout.c (sdbout_symbol): Compute offset using alter_subreg. + + Target changes for new subregging representation. + * config/a29k/a29k.c (gpc_reg_operand): Use SUBREG_REGNO. + (a29k_get_reloaded_address): Use SUBREG_BYTE. + (print_operand): Use SUBREG_BYTE. + * config/alpha/alpha.c (get_aligned_mem): Use SUBREG_BYTE and + remove byte endianness corrections. + (get_unaligned_address): Likewise. + * config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix + SUBREG creation to use byte offset. + * config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit + inverted load insns): Fix explicit rtl subregs to use byte + offsets. + * config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3, + udivsi3, umodsi3): Generate SUBREGs with byte offsets. + * config/i386/i386.md (HImode zero extend split): Use + SUBREG_BYTE. + * config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE. + * config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl + to use byte offsets. + (unnamed fmlow.dd insn): Likewise. + * config/i960/i960.md (extendhisi2): Generate SUBREGs with byte + offsets, also make sure it is congruent to SUBREG's mode size. + (extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2, + unnamed ldob insn): Likewise. + * config/m32r/m32r.md (extendqihi2, extendqisi2, extendhisi2): + Likewise. + * config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2, + zero-extendqisi2): Likewise. + (umulsidi3, mulsidi3, subreghi1ashrdi_const32, + subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit + surbegs in rtl to use byte offsets. + * config/m88k/m88k.md (extendsidi2): Likewise. + * config/mips/mips.c (mips_move_1word): Use SUBREG_REGNO_OFFSET. + (mips_move_2words, mips_secondary_reload_class): Likewise. + * config/mips/mips.md (DImode plus, minus, move, and logical op + splits): Fixup explicit subregs in rtl to use byte offsets. + * config/mn10200/mn10200.c (print_operand) [SUBREG]: Use + SUBREG_REGNO and fix a reg_names indice bug. + * config/mn10300/mn10300.c (print_operand) [SUBREG]: Likewise. + * config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in + rtl to use byte offsets. + * config/pa/pa.md (floatunssisf2, floatunssidf2): Likewise. + (mulsi3): Make subregs with byte offsets. + * config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1): + Fixup explicit subregs in rtl to use byte offsets. + * config/pyr/pyr.c (subreg_overlap_mentioned_p): Use SUBREG_REGNO. + (consecutive_operands): Use SUBREG_REGNO_OFFSET. + * config/pyr/pyr.md (extendsidi2): Fixup explicit subregs in rtl + to use byte offsets. + * config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE + and remove byte endian correction code. + * config/rs6000/rs6000.md (DImode const splits): Generate SUBREGs + with byte offsets. + * config/sh/sh.c (output_movedouble): Use SUBREG_REGNO. + (gen_ashift_hi): Use SUBREG_BYTE. + (regs_used): Use SUBREG_REGNO_OFFSET. + (machine_dependent_reorg): Likewise. + * config/sh/sh.md (DImode and DFmode move splits): Use + SUBREG_REGNO. + * config/sparc/sparc.md (TFmode move splits): Generate SUBREGs + with byte offsets. + (zero_extendhisi2, zero_extendqidi2_insn, extendhisi2, + extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn, + extendqidi2): Generate SUBREGs with byte offsets, also make sure + it is congruent to SUBREG's mode size. + (smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte + offsets. + * config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE. + * config/sparc/sparc.h (ALTER_HARD_SUBREG): Die forever... + (REG_SIZE, REGMODE_NATURAL_SIZE): Override. + * config/spur/spur.md (movqi, zero_extendhisi2, extendhisi2, + extendqihi2, extendqisi2): Generate SUBREGs with byte offsets. + * config/v850/v850.c (print_operand): Use SUBREG_REGNO. + (v850_reorg): Use SUBREG_REGNO_OFFSET. + + Sun Sep 24 09:15:48 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * expr.c (store_field): If BITSIZE is negative, use size of type. |