Home | History | Annotate | Download | only in config

Lines Matching refs:fragp

16748 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
16752 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
16760 if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
16762 if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
16765 symsec = S_GET_SEGMENT (fragp->fr_symbol);
16766 type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
16768 if (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
16774 sym_frag = symbol_get_frag (fragp->fr_symbol);
16775 val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16783 if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
16794 && sym_frag->relax_marker != fragp->relax_marker)
16804 for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
16821 addr = fragp->fr_address + fragp->fr_fix;
16835 if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16842 else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
16844 else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
16855 fragp->fr_subtype =
16856 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16874 && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16876 fragp->fr_subtype =
16877 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16886 RELAX_BRANCH_TOOFAR bit accordingly. If FRAGP is NULL, the
16891 relaxed_branch_length (fragS *fragp, asection *sec, int update)
16896 if (fragp
16897 && S_IS_DEFINED (fragp->fr_symbol)
16898 && !S_IS_WEAK (fragp->fr_symbol)
16899 && sec == S_GET_SEGMENT (fragp->fr_symbol))
16904 val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16906 addr = fragp->fr_address + fragp->fr_fix + 4;
16917 if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
16918 fragp->fr_subtype
16919 = RELAX_BRANCH_ENCODE (RELAX_BRANCH_AT (fragp->fr_subtype),
16920 RELAX_BRANCH_UNCOND (fragp->fr_subtype),
16921 RELAX_BRANCH_LIKELY (fragp->fr_subtype),
16922 RELAX_BRANCH_LINK (fragp->fr_subtype),
16928 if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
16941 if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
16949 RELAX_MICROMIPS_TOOFAR32 bit accordingly. If FRAGP is NULL, the
16955 relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
16960 if (fragp
16961 && S_IS_DEFINED (fragp->fr_symbol)
16962 && !S_IS_WEAK (fragp->fr_symbol)
16963 && sec == S_GET_SEGMENT (fragp->fr_symbol))
16968 val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16974 addr = fragp->fr_address + fragp->fr_fix + 4;
16985 if (fragp && update
16986 && toofar != RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16987 fragp->fr_subtype = (toofar
16988 ? RELAX_MICROMIPS_MARK_TOOFAR32 (fragp->fr_subtype)
16989 : RELAX_MICROMIPS_CLEAR_TOOFAR32 (fragp->fr_subtype));
16994 bfd_boolean compact_known = fragp != NULL;
16999 compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
17000 if (fragp)
17001 uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
17048 relaxed_micromips_16bit_branch_length (fragS *fragp, asection *sec, int update)
17052 if (fragp
17053 && S_IS_DEFINED (fragp->fr_symbol)
17054 && !S_IS_WEAK (fragp->fr_symbol)
17055 && sec == S_GET_SEGMENT (fragp->fr_symbol))
17061 val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17068 addr = fragp->fr_address + fragp->fr_fix + 2;
17075 type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17088 if (fragp && update
17089 && toofar != RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17090 fragp->fr_subtype
17091 = toofar ? RELAX_MICROMIPS_MARK_TOOFAR16 (fragp->fr_subtype)
17092 : RELAX_MICROMIPS_CLEAR_TOOFAR16 (fragp->fr_subtype);
17106 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
17110 if (RELAX_BRANCH_P (fragp->fr_subtype))
17113 fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
17115 return fragp->fr_var;
17118 if (RELAX_MIPS16_P (fragp->fr_subtype))
17121 return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
17123 if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17127 if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17128 length = relaxed_micromips_16bit_branch_length (fragp, segtype, FALSE);
17129 if (length == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17130 length = relaxed_micromips_32bit_branch_length (fragp, segtype, FALSE);
17131 fragp->fr_var = length;
17137 change = nopic_need_relax (fragp->fr_symbol, 0);
17139 change = pic_need_relax (fragp->fr_symbol, segtype);
17148 fragp->fr_subtype |= RELAX_USE_SECOND;
17149 return -RELAX_FIRST (fragp->fr_subtype);
17152 return -RELAX_SECOND (fragp->fr_subtype);
17344 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
17346 if (RELAX_BRANCH_P (fragp->fr_subtype))
17348 offsetT old_var = fragp->fr_var;
17350 fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
17352 return fragp->fr_var - old_var;
17355 if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17357 offsetT old_var = fragp->fr_var;
17360 if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17361 new_var = relaxed_micromips_16bit_branch_length (fragp, sec, TRUE);
17362 if (new_var == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17363 new_var = relaxed_micromips_32bit_branch_length (fragp, sec, TRUE);
17364 fragp->fr_var = new_var;
17369 if (! RELAX_MIPS16_P (fragp->fr_subtype))
17372 if (mips16_extended_frag (fragp, sec, stretch))
17374 if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17376 fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
17381 if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17383 fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
17393 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
17395 if (RELAX_BRANCH_P (fragp->fr_subtype))
17402 buf = fragp->fr_literal + fragp->fr_fix;
17405 if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
17411 exp.X_add_symbol = fragp->fr_symbol;
17412 exp.X_add_number = fragp->fr_offset;
17414 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17416 fixp->fx_file = fragp->fr_file;
17417 fixp->fx_line = fragp->fr_line;
17425 as_warn_where (fragp->fr_file, fragp->fr_line,
17428 if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
17431 if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17472 if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17485 if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17490 i = buf - fragp->fr_literal - fragp->fr_fix;
17492 i = fragp->fr_var - i;
17505 if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17512 i = buf - fragp->fr_literal - fragp->fr_fix;
17514 i = fragp->fr_var - i;
17529 insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
17532 exp.X_add_symbol = fragp->fr_symbol;
17533 exp.X_add_number = fragp->fr_offset;
17535 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17537 fixp->fx_file = fragp->fr_file;
17538 fixp->fx_line = fragp->fr_line;
17544 unsigned long at = RELAX_BRANCH_AT (fragp->fr_subtype);
17550 exp.X_add_symbol = fragp->fr_symbol;
17551 exp.X_add_number = fragp->fr_offset;
17553 if (fragp->fr_offset)
17559 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17561 fixp->fx_file = fragp->fr_file;
17562 fixp->fx_line = fragp->fr_line;
17574 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17576 fixp->fx_file = fragp->fr_file;
17577 fixp->fx_line = fragp->fr_line;
17582 if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17592 fragp->fr_fix += fragp->fr_var;
17593 gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17598 if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17600 char *buf = fragp->fr_literal + fragp->fr_fix;
17601 bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
17602 bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
17603 int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17610 exp.X_add_symbol = fragp->fr_symbol;
17611 exp.X_add_number = fragp->fr_offset;
17613 fragp->fr_fix += fragp->fr_var;
17616 if (type != 0 && !RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17622 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17625 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17630 fixp->fx_file = fragp->fr_file;
17631 fixp->fx_line = fragp->fr_line;
17641 if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17642 || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17647 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17649 fixp->fx_file = fragp->fr_file;
17650 fixp->fx_line = fragp->fr_line;
17676 if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17677 || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17680 gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17688 as_warn_where (fragp->fr_file, fragp->fr_line,
17694 if (!RELAX_MICROMIPS_UNCOND (fragp->fr_subtype))
17737 l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
17742 fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
17744 fixp->fx_file = fragp->fr_file;
17745 fixp->fx_line = fragp->fr_line;
17761 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17763 fixp->fx_file = fragp->fr_file;
17764 fixp->fx_line = fragp->fr_line;
17773 unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
17787 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17789 fixp->fx_file = fragp->fr_file;
17790 fixp->fx_line = fragp->fr_line;
17798 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17800 fixp->fx_file = fragp->fr_file;
17801 fixp->fx_line = fragp->fr_line;
17812 gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17816 if (RELAX_MIPS16_P (fragp->fr_subtype))
17827 type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
17830 ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
17831 val = resolve_symbol_value (fragp->fr_symbol) + fragp->fr_offset;
17838 addr = fragp->fr_address + fragp->fr_fix;
17851 else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
17853 else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
17866 && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
17867 || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
17868 as_warn_where (fragp->fr_file, fragp->fr_line,
17871 buf = fragp->fr_literal + fragp->fr_fix;
17877 if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
17879 else if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
17884 symsec = S_GET_SEGMENT (fragp->fr_symbol);
17885 if (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
17901 as_bad_where (fragp->fr_file, fragp->fr_line,
17910 exp.X_add_symbol = fragp->fr_symbol;
17911 exp.X_add_number = fragp->fr_offset;
17913 fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp,
17916 fixp->fx_file = fragp->fr_file;
17917 fixp->fx_line = fragp->fr_line;
17925 mips16_immed (fragp->fr_file, fragp->fr_line, type,
17931 fragp->fr_fix += length;
17935 relax_substateT subtype = fragp->fr_subtype;
17943 fixp = (fixS *) fragp->fr_opcode;
17958 as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17972 as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17980 && fixp->fx_frag == fragp
17981 && fixp->fx_where < fragp->fr_fix - second)
17991 while (fixp && fixp->fx_frag == fragp)
18005 start = fragp->fr_literal + fragp->fr_fix - first - second;
18007 fragp->fr_fix -= first;
18010 fragp->fr_fix -= second;
18335 mips_handle_align (fragS *fragp)
18342 if (fragp->fr_type != rs_align_code)
18345 p = fragp->fr_literal + fragp->fr_fix;
18364 bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
18372 fragp->fr_fix += excess;
18394 fragp->fr_var = size;
18553 char *fragp;
18568 fragp = frag_more (7 * 4);
18570 md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
18571 md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
18572 md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
18573 md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
18574 md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
18575 md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
18576 md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);