• Home
  • Raw
  • Download

Lines Matching refs:fragP

3751 is_next_frag_target (const fragS *fragP, const fragS *target)  in is_next_frag_target()  argument
3753 if (fragP == NULL) in is_next_frag_target()
3756 for (; fragP; fragP = fragP->fr_next) in is_next_frag_target()
3758 if (fragP == target) in is_next_frag_target()
3760 if (fragP->fr_fix != 0) in is_next_frag_target()
3762 if (fragP->fr_type == rs_fill && fragP->fr_offset != 0) in is_next_frag_target()
3764 if ((fragP->fr_type == rs_align || fragP->fr_type == rs_align_code) in is_next_frag_target()
3765 && ((fragP->fr_address % (1 << fragP->fr_offset)) != 0)) in is_next_frag_target()
3767 if (fragP->fr_type == rs_space) in is_next_frag_target()
3775 is_branch_jmp_to_next (TInsn *insn, fragS *fragP) in is_branch_jmp_to_next() argument
3816 if (is_next_frag_target (fragP->fr_next, target_frag) in is_branch_jmp_to_next()
4221 fragS *fragP, in xg_add_opcode_fix() argument
4235 if (fragP->tc_frag_data.use_absolute_literals) in xg_add_opcode_fix()
4287 the_fix = fix_new_exp (fragP, offset, fmt_length, exp, in xg_add_opcode_fix()
4301 fragS *fragP, in xg_emit_insn_to_buf() argument
4321 if (!xg_add_opcode_fix (tinsn, opnum, fmt, slot, exp, fragP, offset)) in xg_emit_insn_to_buf()
4324 fragP->tc_frag_data.is_insn = TRUE; in xg_emit_insn_to_buf()
4453 next_non_empty_frag (const fragS *fragP) in next_non_empty_frag() argument
4455 fragS *next_fragP = fragP->fr_next; in next_non_empty_frag()
4470 next_frag_opcode_is_loop (const fragS *fragP, xtensa_opcode *opcode) in next_frag_opcode_is_loop() argument
4473 const fragS *next_fragP = next_non_empty_frag (fragP); in next_frag_opcode_is_loop()
4489 frag_format_size (const fragS *fragP) in frag_format_size() argument
4499 if (fragP == NULL) in frag_format_size()
4503 (unsigned char *) fragP->fr_literal, 0); in frag_format_size()
4512 if (fragP->fr_opcode != fragP->fr_literal) in frag_format_size()
4527 if (fragP->fr_type != rs_machine_dependent) in frag_format_size()
4529 if (fragP->fr_subtype != RELAX_SLOTS) in frag_format_size()
4533 if (fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP1 in frag_format_size()
4534 || fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP2 in frag_format_size()
4535 || fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED_STEP3) in frag_format_size()
4552 int relaxed_size = fmt_size + fragP->tc_frag_data.text_expansion[0]; in frag_format_size()
4563 if (fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW) in frag_format_size()
4564 return 2 + fragP->tc_frag_data.text_expansion[0]; in frag_format_size()
4571 next_frag_format_size (const fragS *fragP) in next_frag_format_size() argument
4573 const fragS *next_fragP = next_non_empty_frag (fragP); in next_frag_format_size()
4602 update_next_frag_state (fragS *fragP) in update_next_frag_state() argument
4604 fragS *next_fragP = fragP->fr_next; in update_next_frag_state()
4646 next_frag_is_branch_target (const fragS *fragP) in next_frag_is_branch_target() argument
4650 for (fragP = fragP->fr_next; fragP; fragP = fragP->fr_next) in next_frag_is_branch_target()
4652 if (fragP->tc_frag_data.is_branch_target) in next_frag_is_branch_target()
4654 if (fragP->fr_fix != 0) in next_frag_is_branch_target()
4662 next_frag_is_loop_target (const fragS *fragP) in next_frag_is_loop_target() argument
4666 for (fragP = fragP->fr_next; fragP; fragP = fragP->fr_next) in next_frag_is_loop_target()
4668 if (fragP->tc_frag_data.is_loop_target) in next_frag_is_loop_target()
4670 if (fragP->fr_fix != 0) in next_frag_is_loop_target()
4850 xtensa_set_frag_assembly_state (fragS *fragP) in xtensa_set_frag_assembly_state() argument
4853 fragP->tc_frag_data.is_no_density = TRUE; in xtensa_set_frag_assembly_state()
4859 fragP->tc_frag_data.is_no_transform = TRUE; in xtensa_set_frag_assembly_state()
4861 fragP->tc_frag_data.use_longcalls = TRUE; in xtensa_set_frag_assembly_state()
4862 fragP->tc_frag_data.use_absolute_literals = in xtensa_set_frag_assembly_state()
4864 fragP->tc_frag_data.is_assembly_state_set = TRUE; in xtensa_set_frag_assembly_state()
4894 fragS *fragP; in xtensa_mark_frags_for_org() local
4906 for (fragP = seginfo->frchainP->frch_root; fragP; in xtensa_mark_frags_for_org()
4907 fragP = fragP->fr_next) in xtensa_mark_frags_for_org()
4911 if (fragP->fr_subtype == RELAX_ORG) in xtensa_mark_frags_for_org()
4913 while (last_fragP != fragP->fr_next) in xtensa_mark_frags_for_org()
4939 fragS *fragP; in xtensa_find_unmarked_state_frags() local
4951 for (fragP = seginfo->frchainP->frch_root; fragP; in xtensa_find_unmarked_state_frags()
4952 fragP = fragP->fr_next) in xtensa_find_unmarked_state_frags()
4954 if (fragP->fr_fix != 0 in xtensa_find_unmarked_state_frags()
4955 && !fragP->tc_frag_data.is_assembly_state_set) in xtensa_find_unmarked_state_frags()
4959 as_warn_where (fragP->fr_file, fragP->fr_line, in xtensa_find_unmarked_state_frags()
4965 fragP->tc_frag_data.is_assembly_state_set = TRUE; in xtensa_find_unmarked_state_frags()
4966 fragP->tc_frag_data.is_no_density = in xtensa_find_unmarked_state_frags()
4968 fragP->tc_frag_data.is_no_transform = in xtensa_find_unmarked_state_frags()
4970 fragP->tc_frag_data.use_longcalls = in xtensa_find_unmarked_state_frags()
4972 fragP->tc_frag_data.use_absolute_literals = in xtensa_find_unmarked_state_frags()
4976 if (fragP->tc_frag_data.is_assembly_state_set) in xtensa_find_unmarked_state_frags()
4977 last_fragP = fragP; in xtensa_find_unmarked_state_frags()
5606 xtensa_handle_align (fragS *fragP) in xtensa_handle_align() argument
5609 && ! fragP->tc_frag_data.is_literal in xtensa_handle_align()
5610 && (fragP->fr_type == rs_align in xtensa_handle_align()
5611 || fragP->fr_type == rs_align_code) in xtensa_handle_align()
5612 && fragP->fr_offset > 0 in xtensa_handle_align()
5615 fragP->tc_frag_data.is_align = TRUE; in xtensa_handle_align()
5616 fragP->tc_frag_data.alignment = fragP->fr_offset; in xtensa_handle_align()
5619 if (fragP->fr_type == rs_align_test) in xtensa_handle_align()
5622 count = fragP->fr_next->fr_address - fragP->fr_address - fragP->fr_fix; in xtensa_handle_align()
5624 as_bad_where (fragP->fr_file, fragP->fr_line, in xtensa_handle_align()
5628 if (linkrelax && fragP->fr_type == rs_org) in xtensa_handle_align()
5629 fragP->fr_subtype = RELAX_ORG; in xtensa_handle_align()
5996 md_estimate_size_before_relax (fragS *fragP, segT seg ATTRIBUTE_UNUSED) in md_estimate_size_before_relax() argument
5998 return total_frag_text_expansion (fragP); in md_estimate_size_before_relax()
6920 total_frag_text_expansion (fragS *fragP) in total_frag_text_expansion() argument
6926 total_expansion += fragP->tc_frag_data.text_expansion[slot]; in total_frag_text_expansion()
7264 fragS *fragP; member
7336 fragS *fragP; in xtensa_create_trampoline_frag() local
7357 fragP = (fragS *)(varP - SIZEOF_STRUCT_FRAG); in xtensa_create_trampoline_frag()
7367 tf->fragP = fragP; in xtensa_create_trampoline_frag()
7404 if (tf->fragP == NULL) in dump_trampolines()
7407 (int)tf->fragP->fr_address, (int)tf->fragP->fr_fix, in dump_trampolines()
7422 fragS *fragP; in xtensa_cleanup_align_frags() local
7424 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_cleanup_align_frags()
7426 if ((fragP->fr_type == rs_align in xtensa_cleanup_align_frags()
7427 || fragP->fr_type == rs_align_code in xtensa_cleanup_align_frags()
7428 || (fragP->fr_type == rs_machine_dependent in xtensa_cleanup_align_frags()
7429 && (fragP->fr_subtype == RELAX_DESIRE_ALIGN in xtensa_cleanup_align_frags()
7430 || fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET))) in xtensa_cleanup_align_frags()
7431 && fragP->fr_fix == 0) in xtensa_cleanup_align_frags()
7433 fragS *next = fragP->fr_next; in xtensa_cleanup_align_frags()
7446 if (fragP->tc_frag_data.is_branch_target in xtensa_cleanup_align_frags()
7447 && fragP->fr_opcode == fragP->fr_literal in xtensa_cleanup_align_frags()
7448 && fragP->fr_type == rs_machine_dependent in xtensa_cleanup_align_frags()
7449 && fragP->fr_subtype == RELAX_SLOTS in xtensa_cleanup_align_frags()
7450 && fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW) in xtensa_cleanup_align_frags()
7451 frag_wane (fragP); in xtensa_cleanup_align_frags()
7452 if (fragP->fr_type == rs_machine_dependent in xtensa_cleanup_align_frags()
7453 && fragP->fr_subtype == RELAX_UNREACHABLE) in xtensa_cleanup_align_frags()
7454 fragP->tc_frag_data.is_unreachable = TRUE; in xtensa_cleanup_align_frags()
7476 fragS *fragP; in xtensa_fix_target_frags() local
7479 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_fix_target_frags()
7481 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_target_frags()
7482 && fragP->fr_subtype == RELAX_DESIRE_ALIGN_IF_TARGET) in xtensa_fix_target_frags()
7484 if (next_frag_is_branch_target (fragP)) in xtensa_fix_target_frags()
7485 fragP->fr_subtype = RELAX_DESIRE_ALIGN; in xtensa_fix_target_frags()
7487 frag_wane (fragP); in xtensa_fix_target_frags()
7505 fragS *fragP; in xtensa_mark_narrow_branches() local
7507 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_mark_narrow_branches()
7509 if (fragP->fr_type == rs_machine_dependent in xtensa_mark_narrow_branches()
7510 && fragP->fr_subtype == RELAX_SLOTS in xtensa_mark_narrow_branches()
7511 && fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED) in xtensa_mark_narrow_branches()
7515 vinsn_from_chars (&vinsn, fragP->fr_opcode); in xtensa_mark_narrow_branches()
7516 tinsn_immed_from_frag (&vinsn.slots[0], fragP, 0); in xtensa_mark_narrow_branches()
7522 && is_narrow_branch_guaranteed_in_range (fragP, in xtensa_mark_narrow_branches()
7525 fragP->fr_subtype = RELAX_SLOTS; in xtensa_mark_narrow_branches()
7526 fragP->tc_frag_data.slot_subtypes[0] = RELAX_NARROW; in xtensa_mark_narrow_branches()
7527 fragP->tc_frag_data.is_aligning_branch = 1; in xtensa_mark_narrow_branches()
7554 is_narrow_branch_guaranteed_in_range (fragS *fragP, TInsn *tinsn) in is_narrow_branch_guaranteed_in_range() argument
7567 if (is_branch_jmp_to_next (tinsn, fragP)) in is_narrow_branch_guaranteed_in_range()
7572 fragP = fragP->fr_next; in is_narrow_branch_guaranteed_in_range()
7573 while (fragP != NULL && fragP != target_frag && max_distance <= MAX_IMMED6) in is_narrow_branch_guaranteed_in_range()
7575 max_distance += unrelaxed_frag_max_size (fragP); in is_narrow_branch_guaranteed_in_range()
7576 fragP = fragP->fr_next; in is_narrow_branch_guaranteed_in_range()
7578 if (max_distance <= MAX_IMMED6 && fragP == target_frag) in is_narrow_branch_guaranteed_in_range()
7593 fragS *fragP; in xtensa_mark_zcl_first_insns() local
7595 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_mark_zcl_first_insns()
7597 if (fragP->fr_type == rs_machine_dependent in xtensa_mark_zcl_first_insns()
7598 && (fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE in xtensa_mark_zcl_first_insns()
7599 || fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE)) in xtensa_mark_zcl_first_insns()
7602 fragS *loop_frag = next_non_empty_frag (fragP); in xtensa_mark_zcl_first_insns()
7654 if (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE) in xtensa_mark_zcl_first_insns()
7655 frag_wane (fragP); in xtensa_mark_zcl_first_insns()
7738 fragS *fragP; in xtensa_fix_a0_b_retw_frags() local
7741 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_fix_a0_b_retw_frags()
7743 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_a0_b_retw_frags()
7744 && fragP->fr_subtype == RELAX_ADD_NOP_IF_A0_B_RETW) in xtensa_fix_a0_b_retw_frags()
7746 if (next_instrs_are_b_retw (fragP)) in xtensa_fix_a0_b_retw_frags()
7748 if (fragP->tc_frag_data.is_no_transform) in xtensa_fix_a0_b_retw_frags()
7751 relax_frag_add_nop (fragP); in xtensa_fix_a0_b_retw_frags()
7753 frag_wane (fragP); in xtensa_fix_a0_b_retw_frags()
7761 next_instrs_are_b_retw (fragS *fragP) in next_instrs_are_b_retw() argument
7765 const fragS *next_fragP = next_non_empty_frag (fragP); in next_instrs_are_b_retw()
7850 fragS *fragP; in xtensa_fix_b_j_loop_end_frags() local
7853 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_fix_b_j_loop_end_frags()
7855 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_b_j_loop_end_frags()
7856 && fragP->fr_subtype == RELAX_ADD_NOP_IF_PRE_LOOP_END) in xtensa_fix_b_j_loop_end_frags()
7858 if (next_instr_is_loop_end (fragP)) in xtensa_fix_b_j_loop_end_frags()
7860 if (fragP->tc_frag_data.is_no_transform) in xtensa_fix_b_j_loop_end_frags()
7863 relax_frag_add_nop (fragP); in xtensa_fix_b_j_loop_end_frags()
7865 frag_wane (fragP); in xtensa_fix_b_j_loop_end_frags()
7873 next_instr_is_loop_end (fragS *fragP) in next_instr_is_loop_end() argument
7877 if (next_frag_is_loop_target (fragP)) in next_instr_is_loop_end()
7880 next_fragP = next_non_empty_frag (fragP); in next_instr_is_loop_end()
7916 fragS *fragP; in xtensa_fix_close_loop_end_frags() local
7921 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_fix_close_loop_end_frags()
7923 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_close_loop_end_frags()
7924 && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE) in xtensa_fix_close_loop_end_frags()
7925 || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE))) in xtensa_fix_close_loop_end_frags()
7926 current_target = symbol_get_frag (fragP->fr_symbol); in xtensa_fix_close_loop_end_frags()
7929 && fragP->fr_type == rs_machine_dependent in xtensa_fix_close_loop_end_frags()
7930 && fragP->fr_subtype == RELAX_ADD_NOP_IF_CLOSE_LOOP_END) in xtensa_fix_close_loop_end_frags()
7938 (fragP->fr_next, current_target, REQUIRED_LOOP_DIVIDING_BYTES); in xtensa_fix_close_loop_end_frags()
7942 if (fragP->tc_frag_data.is_no_transform) in xtensa_fix_close_loop_end_frags()
7951 if (fragP->fr_var < length) in xtensa_fix_close_loop_end_frags()
7953 (long) fragP->fr_var, length); in xtensa_fix_close_loop_end_frags()
7957 fragP->fr_literal + fragP->fr_fix); in xtensa_fix_close_loop_end_frags()
7958 fragP->fr_fix += length; in xtensa_fix_close_loop_end_frags()
7959 fragP->fr_var -= length; in xtensa_fix_close_loop_end_frags()
7965 frag_wane (fragP); in xtensa_fix_close_loop_end_frags()
7967 gas_assert (fragP->fr_type != rs_machine_dependent in xtensa_fix_close_loop_end_frags()
7968 || fragP->fr_subtype != RELAX_ADD_NOP_IF_CLOSE_LOOP_END); in xtensa_fix_close_loop_end_frags()
7977 min_bytes_to_other_loop_end (fragS *fragP, in min_bytes_to_other_loop_end() argument
7984 for (current_fragP = fragP; in min_bytes_to_other_loop_end()
8002 unrelaxed_frag_min_size (fragS *fragP) in unrelaxed_frag_min_size() argument
8004 offsetT size = fragP->fr_fix; in unrelaxed_frag_min_size()
8007 if (fragP->fr_type == rs_fill) in unrelaxed_frag_min_size()
8008 size += fragP->fr_offset; in unrelaxed_frag_min_size()
8015 unrelaxed_frag_max_size (fragS *fragP) in unrelaxed_frag_max_size() argument
8017 offsetT size = fragP->fr_fix; in unrelaxed_frag_max_size()
8018 switch (fragP->fr_type) in unrelaxed_frag_max_size()
8027 size += fragP->fr_offset; in unrelaxed_frag_max_size()
8038 if (fragP->fr_subtype != RELAX_DESIRE_ALIGN) in unrelaxed_frag_max_size()
8039 size += fragP->fr_var; in unrelaxed_frag_max_size()
8081 fragS *fragP; in xtensa_fix_short_loop_frags() local
8085 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_fix_short_loop_frags()
8087 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_short_loop_frags()
8088 && ((fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE) in xtensa_fix_short_loop_frags()
8089 || (fragP->fr_subtype == RELAX_CHECK_ALIGN_NEXT_OPCODE))) in xtensa_fix_short_loop_frags()
8092 fragS *loop_frag = next_non_empty_frag (fragP); in xtensa_fix_short_loop_frags()
8099 if (fragP->fr_type == rs_machine_dependent in xtensa_fix_short_loop_frags()
8100 && fragP->fr_subtype == RELAX_ADD_NOP_IF_SHORT_LOOP) in xtensa_fix_short_loop_frags()
8102 if (count_insns_to_loop_end (fragP->fr_next, TRUE, 3) < 3 in xtensa_fix_short_loop_frags()
8103 && (branch_before_loop_end (fragP->fr_next) in xtensa_fix_short_loop_frags()
8108 if (fragP->tc_frag_data.is_no_transform) in xtensa_fix_short_loop_frags()
8111 relax_frag_add_nop (fragP); in xtensa_fix_short_loop_frags()
8113 frag_wane (fragP); in xtensa_fix_short_loop_frags()
8127 fragS *fragP = NULL; in count_insns_to_loop_end() local
8130 fragP = base_fragP; in count_insns_to_loop_end()
8132 for (; fragP && !fragP->tc_frag_data.is_loop_target; fragP = fragP->fr_next) in count_insns_to_loop_end()
8134 insn_count += unrelaxed_frag_min_insn_count (fragP); in count_insns_to_loop_end()
8140 if (fragP->fr_type == rs_machine_dependent in count_insns_to_loop_end()
8141 && fragP->fr_subtype == RELAX_ADD_NOP_IF_SHORT_LOOP) in count_insns_to_loop_end()
8157 unrelaxed_frag_min_insn_count (fragS *fragP) in unrelaxed_frag_min_insn_count() argument
8164 if (!fragP->tc_frag_data.is_insn) in unrelaxed_frag_min_insn_count()
8171 while (offset < fragP->fr_fix) in unrelaxed_frag_min_insn_count()
8176 (isa, insnbuf, (unsigned char *) fragP->fr_literal + offset, 0); in unrelaxed_frag_min_insn_count()
8197 fragS *fragP; in branch_before_loop_end() local
8199 for (fragP = base_fragP; in branch_before_loop_end()
8200 fragP && !fragP->tc_frag_data.is_loop_target; in branch_before_loop_end()
8201 fragP = fragP->fr_next) in branch_before_loop_end()
8203 if (unrelaxed_frag_has_b_j (fragP)) in branch_before_loop_end()
8211 unrelaxed_frag_has_b_j (fragS *fragP) in unrelaxed_frag_has_b_j() argument
8217 if (!fragP->tc_frag_data.is_insn) in unrelaxed_frag_has_b_j()
8224 while (offset < fragP->fr_fix) in unrelaxed_frag_has_b_j()
8230 (isa, insnbuf, (unsigned char *) fragP->fr_literal + offset, 0); in unrelaxed_frag_has_b_j()
8238 get_opcode_from_buf (fragP->fr_literal + offset, slot); in unrelaxed_frag_has_b_j()
8266 fragS *fragP; in xtensa_sanity_check() local
8269 for (fragP = frchP->frch_root; fragP; fragP = fragP->fr_next) in xtensa_sanity_check()
8271 if (fragP->fr_type == rs_machine_dependent in xtensa_sanity_check()
8272 && fragP->fr_subtype == RELAX_SLOTS in xtensa_sanity_check()
8273 && fragP->tc_frag_data.slot_subtypes[0] == RELAX_IMMED) in xtensa_sanity_check()
8278 if (fragP->fr_opcode != NULL) in xtensa_sanity_check()
8282 tinsn_from_chars (&t_insn, fragP->fr_opcode, 0); in xtensa_sanity_check()
8283 tinsn_immed_from_frag (&t_insn, fragP, 0); in xtensa_sanity_check()
8288 if (is_empty_loop (&t_insn, fragP)) in xtensa_sanity_check()
8290 new_logical_line (fragP->fr_file, fragP->fr_line); in xtensa_sanity_check()
8293 if (!is_local_forward_loop (&t_insn, fragP)) in xtensa_sanity_check()
8295 new_logical_line (fragP->fr_file, fragP->fr_line); in xtensa_sanity_check()
8313 is_empty_loop (const TInsn *insn, fragS *fragP) in is_empty_loop() argument
8346 for (next_fragP = fragP->fr_next; in is_empty_loop()
8360 is_local_forward_loop (const TInsn *insn, fragS *fragP) in is_local_forward_loop() argument
8390 for (next_fragP = fragP->fr_next; in is_local_forward_loop()
8632 get_noop_aligned_address (fragS *fragP, addressT address) in get_noop_aligned_address() argument
8657 gas_assert (fragP->fr_type == rs_machine_dependent); in get_noop_aligned_address()
8658 gas_assert (fragP->fr_subtype == RELAX_ALIGN_NEXT_OPCODE); in get_noop_aligned_address()
8661 first_insn = next_non_empty_frag (fragP); in get_noop_aligned_address()
8665 is_loop = next_frag_opcode_is_loop (fragP, &opcode); in get_noop_aligned_address()
8669 pre_opcode_bytes = next_frag_pre_opcode_bytes (fragP); in get_noop_aligned_address()
8686 fragP->tc_frag_data.is_no_density); in get_noop_aligned_address()
8710 get_aligned_diff (fragS *fragP, addressT address, offsetT *max_diff) in get_aligned_diff() argument
8721 gas_assert (fragP->fr_type == rs_machine_dependent); in get_aligned_diff()
8722 switch (fragP->fr_subtype) in get_aligned_diff()
8725 target_size = next_frag_format_size (fragP); in get_aligned_diff()
8746 loop_frag = next_non_empty_frag (fragP); in get_aligned_diff()
8749 is_loop = next_frag_opcode_is_loop (fragP, &loop_opcode); in get_aligned_diff()
8793 xtensa_relax_frag (fragS *fragP, long stretch, int *stretched_p) in xtensa_relax_frag() argument
8796 int unreported = fragP->tc_frag_data.unreported_expansion; in xtensa_relax_frag()
8806 new_logical_line (fragP->fr_file, fragP->fr_line); in xtensa_relax_frag()
8808 fragP->tc_frag_data.unreported_expansion = 0; in xtensa_relax_frag()
8810 switch (fragP->fr_subtype) in xtensa_relax_frag()
8814 if (fragP->tc_frag_data.relax_seen) in xtensa_relax_frag()
8815 new_stretch = relax_frag_loop_align (fragP, stretch); in xtensa_relax_frag()
8824 new_stretch = relax_frag_add_nop (fragP); in xtensa_relax_frag()
8825 frag_wane (fragP); in xtensa_relax_frag()
8839 fragP->fr_subtype = RELAX_LITERAL_FINAL; in xtensa_relax_frag()
8841 memset (&fragP->fr_literal[fragP->fr_fix], 0, 4); in xtensa_relax_frag()
8842 fragP->fr_var -= lit_size; in xtensa_relax_frag()
8843 fragP->fr_fix += lit_size; in xtensa_relax_frag()
8852 (isa, vbuf, (unsigned char *) fragP->fr_opcode, 0); in xtensa_relax_frag()
8858 switch (fragP->tc_frag_data.slot_subtypes[slot]) in xtensa_relax_frag()
8861 if (fragP->tc_frag_data.relax_seen) in xtensa_relax_frag()
8862 new_stretch += relax_frag_for_align (fragP, stretch); in xtensa_relax_frag()
8871 (now_seg, fragP, stretch, in xtensa_relax_frag()
8872 fragP->tc_frag_data.slot_subtypes[slot] - RELAX_IMMED, in xtensa_relax_frag()
8892 if (fragP->tc_frag_data.relax_seen) in xtensa_relax_frag()
8893 new_stretch += relax_frag_for_align (fragP, stretch); in xtensa_relax_frag()
8897 if (fragP->tc_frag_data.relax_seen) in xtensa_relax_frag()
8944 int this_addr = tf->fragP->fr_address + tf->fragP->fr_fix; in xtensa_relax_frag()
8945 int next_addr = (tf->next) ? tf->next->fragP->fr_address + tf->next->fragP->fr_fix : 0 ; in xtensa_relax_frag()
8968 int this_addr = tf->fragP->fr_address + tf->fragP->fr_fix; in xtensa_relax_frag()
8979 if (tf->fragP == fragP) in xtensa_relax_frag()
8981 int trampaddr = fragP->fr_address + fragP->fr_fix; in xtensa_relax_frag()
8991 offset = fragP->fr_fix; /* Where to assemble the j insn. */ in xtensa_relax_frag()
8992 lsym = fragP->fr_symbol; in xtensa_relax_frag()
9003 xtensa_insnbuf_to_chars (isa, trampoline_buf, (unsigned char *)fragP->fr_literal + offset, 3); in xtensa_relax_frag()
9004 fragP->fr_fix += 3; in xtensa_relax_frag()
9005 fragP->fr_var -= 3; in xtensa_relax_frag()
9007 …newfixP = fix_new (fP, fixP->fx_where, fixP->fx_size, lsym, fragP->fr_fix - 3, TRUE, fixP->fx_r_ty… in xtensa_relax_frag()
9013 fixP->fx_frag = fragP; in xtensa_relax_frag()
9014 fixP->fx_where = fragP->fr_fix - 3; in xtensa_relax_frag()
9022 fragP->tc_frag_data.relax_seen = FALSE; /* Need another pass. */ in xtensa_relax_frag()
9024 if (fragP->fr_var < 3) in xtensa_relax_frag()
9026 frag_wane (fragP); in xtensa_relax_frag()
9027 fragP->fr_subtype = 0; in xtensa_relax_frag()
9044 if (! fragP->tc_frag_data.relax_seen) in xtensa_relax_frag()
9046 fragP->tc_frag_data.relax_seen = TRUE; in xtensa_relax_frag()
9056 relax_frag_loop_align (fragS *fragP, long stretch) in relax_frag_loop_align() argument
9067 old_address = fragP->fr_address - stretch; in relax_frag_loop_align()
9068 old_next_address = (fragP->fr_address - stretch + fragP->fr_fix + in relax_frag_loop_align()
9069 fragP->tc_frag_data.text_expansion[0]); in relax_frag_loop_align()
9073 new_address = fragP->fr_address; in relax_frag_loop_align()
9075 get_noop_aligned_address (fragP, fragP->fr_address + fragP->fr_fix); in relax_frag_loop_align()
9081 fragP->tc_frag_data.text_expansion[0] += growth; in relax_frag_loop_align()
9089 relax_frag_add_nop (fragS *fragP) in relax_frag_add_nop() argument
9091 char *nop_buf = fragP->fr_literal + fragP->fr_fix; in relax_frag_add_nop()
9092 int length = fragP->tc_frag_data.is_no_density ? 3 : 2; in relax_frag_add_nop()
9094 fragP->tc_frag_data.is_insn = TRUE; in relax_frag_add_nop()
9096 if (fragP->fr_var < length) in relax_frag_add_nop()
9098 as_fatal (_("fr_var (%ld) < length (%d)"), (long) fragP->fr_var, length); in relax_frag_add_nop()
9102 fragP->fr_fix += length; in relax_frag_add_nop()
9103 fragP->fr_var -= length; in relax_frag_add_nop()
9111 relax_frag_for_align (fragS *fragP, long stretch) in relax_frag_for_align() argument
9121 gas_assert (fragP->fr_subtype == RELAX_FILL_NOP in relax_frag_for_align()
9122 || fragP->fr_subtype == RELAX_UNREACHABLE in relax_frag_for_align()
9123 || (fragP->fr_subtype == RELAX_SLOTS in relax_frag_for_align()
9124 && fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW)); in relax_frag_for_align()
9126 stretch_me = future_alignment_required (fragP, stretch); in relax_frag_for_align()
9127 diff = stretch_me - fragP->tc_frag_data.text_expansion[0]; in relax_frag_for_align()
9134 long shrink = fragP->tc_frag_data.text_expansion[0] - stretch_me; in relax_frag_for_align()
9137 fragP->tc_frag_data.text_expansion[0] = stretch_me; in relax_frag_for_align()
9144 fragP->tc_frag_data.text_expansion[0] = stretch_me; in relax_frag_for_align()
9171 fragS *fragP = *fragPP; in find_address_of_next_align_frag() local
9172 addressT address = fragP->fr_address; in find_address_of_next_align_frag()
9176 while (fragP) in find_address_of_next_align_frag()
9181 *fragPP = fragP; in find_address_of_next_align_frag()
9184 address += fragP->fr_fix; in find_address_of_next_align_frag()
9186 if (fragP->fr_type == rs_fill) in find_address_of_next_align_frag()
9187 address += fragP->fr_offset * fragP->fr_var; in find_address_of_next_align_frag()
9188 else if (fragP->fr_type == rs_machine_dependent) in find_address_of_next_align_frag()
9190 switch (fragP->fr_subtype) in find_address_of_next_align_frag()
9198 if (!fragP->tc_frag_data.is_no_density) in find_address_of_next_align_frag()
9203 if (fragP->tc_frag_data.slot_subtypes[0] == RELAX_NARROW) in find_address_of_next_align_frag()
9208 address += total_frag_text_expansion (fragP); in find_address_of_next_align_frag()
9212 address += fragP->tc_frag_data.text_expansion[0]; in find_address_of_next_align_frag()
9217 *fragPP = fragP; in find_address_of_next_align_frag()
9227 *fragPP = fragP; in find_address_of_next_align_frag()
9234 *fragPP = fragP; in find_address_of_next_align_frag()
9237 fragP = fragP->fr_next; in find_address_of_next_align_frag()
9240 *fragPP = fragP; in find_address_of_next_align_frag()
9248 future_alignment_required (fragS *fragP, long stretch ATTRIBUTE_UNUSED) in future_alignment_required() argument
9250 fragS *this_frag = fragP; in future_alignment_required()
9264 (&fragP, &wide_nops, &narrow_nops, &num_widens, &paddable); in future_alignment_required()
9275 local_opt_diff = get_aligned_diff (fragP, address, &max_diff); in future_alignment_required()
9282 if (fragP) in future_alignment_required()
9283 fragP = fragP->fr_next; in future_alignment_required()
9285 while (fragP && opt_diff < max_diff && address) in future_alignment_required()
9295 (&fragP, &glob_widens, &dnn, &dw, &glob_pad); in future_alignment_required()
9318 next_o_diff = get_aligned_diff (fragP, address, &next_m_diff); in future_alignment_required()
9327 fragP = fragP->fr_next; in future_alignment_required()
9478 search_trampolines (TInsn *tinsn, fragS *fragP, bfd_boolean unreachable_only) in search_trampolines() argument
9487 offsetT addr = fragP->fr_address; in search_trampolines()
9502 int next_addr = (tf->next) ? tf->next->fragP->fr_address + tf->next->fragP->fr_fix : 0; in search_trampolines()
9504 this_addr = tf->fragP->fr_address + tf->fragP->fr_fix; in search_trampolines()
9525 this_addr = tf->fragP->fr_address + tf->fragP->fr_fix; in search_trampolines()
9548 get_best_trampoline (TInsn *tinsn, fragS *fragP) in get_best_trampoline() argument
9552 tf = search_trampolines (tinsn, fragP, TRUE); /* Try unreachable first. */ in get_best_trampoline()
9555 tf = search_trampolines (tinsn, fragP, FALSE); /* Try ones needing a jump-around, too. */ in get_best_trampoline()
9570 if (tf->fragP->fr_var < 3) in check_and_update_trampolines()
9572 frag_wane (tf->fragP); in check_and_update_trampolines()
9574 tf->fragP = NULL; in check_and_update_trampolines()
9583 fragS *fp = trampP->fragP; in init_trampoline_frag()
9628 fragS *tramp = trampP->fragP; in add_jump_to_trampoline()
9673 fragS *fragP, in relax_frag_immed() argument
9693 gas_assert (fragP->fr_opcode != NULL); in relax_frag_immed()
9696 vinsn_from_chars (&cur_vinsn, fragP->fr_opcode); in relax_frag_immed()
9701 tinsn_immed_from_frag (&tinsn, fragP, slot); in relax_frag_immed()
9706 if (workaround_b_j_loop_end && ! fragP->tc_frag_data.is_no_transform) in relax_frag_immed()
9707 branch_jmp_to_next = is_branch_jmp_to_next (&tinsn, fragP); in relax_frag_immed()
9719 && !next_frag_is_loop_target (fragP)) in relax_frag_immed()
9726 frag_offset = fragP->fr_opcode - fragP->fr_literal; in relax_frag_immed()
9728 num_steps = xg_assembly_relax (&istack, &tinsn, segP, fragP, frag_offset, in relax_frag_immed()
9732 fragP->tc_frag_data.slot_subtypes[slot] = (int) RELAX_IMMED + num_steps; in relax_frag_immed()
9737 = num_literal_bytes - fragP->tc_frag_data.literal_expansion[slot]; in relax_frag_immed()
9756 num_steps = xg_assembly_relax (&istack, &tinsn, segP, fragP, in relax_frag_immed()
9761 fragP->tc_frag_data.slot_subtypes[slot] in relax_frag_immed()
9766 = num_literal_bytes - fragP->tc_frag_data.literal_expansion[slot]; in relax_frag_immed()
9773 this_text_diff = total_text_diff - fragP->tc_frag_data.text_expansion[slot]; in relax_frag_immed()
9780 fragP->tc_frag_data.text_expansion[slot] = total_text_diff; in relax_frag_immed()
9781 fragP->tc_frag_data.literal_expansion[slot] = num_literal_bytes; in relax_frag_immed()
9782 gas_assert (fragP->tc_frag_data.text_expansion[slot] >= 0); in relax_frag_immed()
9783 gas_assert (fragP->tc_frag_data.literal_expansion[slot] >= 0); in relax_frag_immed()
9788 fragS *lit_fragP = fragP->tc_frag_data.literal_frags[slot]; in relax_frag_immed()
9807 update_next_frag_state (fragP); in relax_frag_immed()
9817 if (!xg_symbolic_immeds_fit (jinsn, segP, fragP, fragP->fr_offset, total_text_diff)) in relax_frag_immed()
9819 struct trampoline_frag *tf = get_best_trampoline (jinsn, fragP); in relax_frag_immed()
9824 this_text_diff += add_jump_to_trampoline (tf, fragP); in relax_frag_immed()
9833 as_bad_where (fragP->fr_file, fragP->fr_line, in relax_frag_immed()
10000 convert_frag_narrow (segT segP, fragS *fragP, xtensa_format fmt, int slot) in convert_frag_narrow() argument
10007 tinsn_from_chars (&tinsn, fragP->fr_opcode, 0); in convert_frag_narrow()
10009 if (fragP->tc_frag_data.is_aligning_branch == 1) in convert_frag_narrow()
10011 gas_assert (fragP->tc_frag_data.text_expansion[0] == 1 in convert_frag_narrow()
10012 || fragP->tc_frag_data.text_expansion[0] == 0); in convert_frag_narrow()
10013 convert_frag_immed (segP, fragP, fragP->tc_frag_data.text_expansion[0], in convert_frag_narrow()
10018 if (fragP->tc_frag_data.text_expansion[0] == 0) in convert_frag_narrow()
10021 fragP->fr_var = 0; in convert_frag_narrow()
10025 gas_assert (fragP->fr_opcode != NULL); in convert_frag_narrow()
10029 tinsn_immed_from_frag (&tinsn, fragP, 0); in convert_frag_narrow()
10036 frag_offset = fragP->fr_opcode - fragP->fr_literal; in convert_frag_narrow()
10045 xg_emit_insn_to_buf (&single_target, fragP->fr_opcode, fragP, in convert_frag_narrow()
10050 gas_assert (diff <= fragP->fr_var); in convert_frag_narrow()
10051 fragP->fr_var -= diff; in convert_frag_narrow()
10052 fragP->fr_fix += diff; in convert_frag_narrow()
10055 fragP->fr_var = 0; in convert_frag_narrow()
10060 convert_frag_fill_nop (fragS *fragP) in convert_frag_fill_nop() argument
10062 char *loc = &fragP->fr_literal[fragP->fr_fix]; in convert_frag_fill_nop()
10063 int size = fragP->tc_frag_data.text_expansion[0]; in convert_frag_fill_nop()
10064 gas_assert ((unsigned) size == (fragP->fr_next->fr_address in convert_frag_fill_nop()
10065 - fragP->fr_address - fragP->fr_fix)); in convert_frag_fill_nop()
10069 fragP->fr_var = 0; in convert_frag_fill_nop()
10073 fragP->tc_frag_data.is_insn = TRUE; in convert_frag_fill_nop()
10074 fragP->fr_var -= size; in convert_frag_fill_nop()
10075 fragP->fr_fix += size; in convert_frag_fill_nop()
10076 frag_wane (fragP); in convert_frag_fill_nop()
10087 fragS *fragP, in convert_frag_immed() argument
10092 char *immed_instr = fragP->fr_opcode; in convert_frag_immed()
10096 char *fr_opcode = fragP->fr_opcode; in convert_frag_immed()
10111 tinsn_immed_from_frag (&orig_tinsn, fragP, slot); in convert_frag_immed()
10115 if (workaround_b_j_loop_end && ! fragP->tc_frag_data.is_no_transform) in convert_frag_immed()
10116 branch_jmp_to_next = is_branch_jmp_to_next (&orig_tinsn, fragP); in convert_frag_immed()
10118 if (branch_jmp_to_next && !next_frag_is_loop_target (fragP)) in convert_frag_immed()
10130 bytes += fragP->tc_frag_data.text_expansion[0]; in convert_frag_immed()
10133 fragP->fr_fix += fragP->tc_frag_data.text_expansion[0]; in convert_frag_immed()
10138 fragP->fr_var = 0; in convert_frag_immed()
10159 frag_offset = fr_opcode - fragP->fr_literal; in convert_frag_immed()
10162 segP, fragP, frag_offset, min_steps, 0); in convert_frag_immed()
10181 lit_frag = fragP->tc_frag_data.literal_frags[slot]; in convert_frag_immed()
10194 fragS *unreach = fragP->fr_next; in convert_frag_immed()
10210 fr_opcode - fragP->fr_literal in convert_frag_immed()
10211 + target_offset, fragP); in convert_frag_immed()
10241 lit_frag = fragP->tc_frag_data.literal_frags[slot]; in convert_frag_immed()
10273 vinsn_to_insnbuf (&cur_vinsn, immed_instr, fragP, TRUE); in convert_frag_immed()
10276 fragP->tc_frag_data.is_insn = TRUE; in convert_frag_immed()
10281 (tinsn, immed_instr + size, fragP, in convert_frag_immed()
10282 immed_instr - fragP->fr_literal + size, TRUE); in convert_frag_immed()
10289 xg_emit_insn_to_buf (tinsn, immed_instr, fragP, in convert_frag_immed()
10290 immed_instr - fragP->fr_literal, TRUE); in convert_frag_immed()
10302 gas_assert (diff <= fragP->fr_var); in convert_frag_immed()
10303 fragP->fr_var -= diff; in convert_frag_immed()
10304 fragP->fr_fix += diff; in convert_frag_immed()
10326 convert_frag_immed_finish_loop (segP, fragP, &orig_tinsn); in convert_frag_immed()
10331 fix_new_exp_in_seg (now_seg, 0, fragP, fr_opcode - fragP->fr_literal, 4, in convert_frag_immed()
10382 convert_frag_immed_finish_loop (segT segP, fragS *fragP, TInsn *tinsn) in convert_frag_immed_finish_loop() argument
10406 tinsn_from_chars (&loop_insn, fragP->fr_opcode + loop_offset, 0); in convert_frag_immed_finish_loop()
10407 tinsn_immed_from_frag (&loop_insn, fragP, 0); in convert_frag_immed_finish_loop()
10430 loop_length = target - (fragP->fr_address + fragP->fr_fix); in convert_frag_immed_finish_loop()
10442 as_bad_where (fragP->fr_file, fragP->fr_line, in convert_frag_immed_finish_loop()
10445 tinsn_from_chars (&addi_insn, fragP->fr_opcode + addi_offset, 0); in convert_frag_immed_finish_loop()
10448 tinsn_from_chars (&addmi_insn, fragP->fr_opcode + addmi_offset, 0); in convert_frag_immed_finish_loop()
10454 fragP->tc_frag_data.is_insn = TRUE; in convert_frag_immed_finish_loop()
10456 (isa, insnbuf, (unsigned char *) fragP->fr_opcode + addi_offset, 0); in convert_frag_immed_finish_loop()
10461 (isa, insnbuf, (unsigned char *) fragP->fr_opcode + addmi_offset, 0); in convert_frag_immed_finish_loop()
10469 for (next_fragP = fragP; next_fragP != NULL; in convert_frag_immed_finish_loop()
11090 get_frag_is_literal (const fragS *fragP) in get_frag_is_literal() argument
11092 gas_assert (fragP != NULL); in get_frag_is_literal()
11093 return fragP->tc_frag_data.is_literal; in get_frag_is_literal()
11322 fragS *fragP; in section_has_property() local
11326 for (fragP = seginfo->frchainP->frch_root; fragP; fragP = fragP->fr_next) in section_has_property()
11328 if (property_function (fragP) in section_has_property()
11329 && (fragP->fr_type != rs_fill || fragP->fr_fix != 0)) in section_has_property()
11341 fragS *fragP; in section_has_xproperty() local
11345 for (fragP = seginfo->frchainP->frch_root; fragP; fragP = fragP->fr_next) in section_has_xproperty()
11348 property_function (fragP, &prop_flags); in section_has_xproperty()
11365 fragS *fragP; in add_xt_block_frags() local
11375 for (fragP = seg_info (sec)->frchainP->frch_root; in add_xt_block_frags()
11376 fragP; in add_xt_block_frags()
11377 fragP = fragP->fr_next) in add_xt_block_frags()
11379 if (property_function (fragP) in add_xt_block_frags()
11380 && (fragP->fr_type != rs_fill || fragP->fr_fix != 0)) in add_xt_block_frags()
11385 == fragP->fr_address) in add_xt_block_frags()
11386 (*xt_block)->size += fragP->fr_fix; in add_xt_block_frags()
11395 new_block->offset = fragP->fr_address; in add_xt_block_frags()
11396 new_block->size = fragP->fr_fix; in add_xt_block_frags()
11402 && end_property_function (fragP)) in add_xt_block_frags()
11434 get_frag_property_flags (const fragS *fragP, frag_flags *prop_flags) in get_frag_property_flags() argument
11437 if (fragP->tc_frag_data.is_literal) in get_frag_property_flags()
11439 if (fragP->tc_frag_data.is_specific_opcode in get_frag_property_flags()
11440 || fragP->tc_frag_data.is_no_transform) in get_frag_property_flags()
11446 if (fragP->tc_frag_data.is_unreachable) in get_frag_property_flags()
11448 else if (fragP->tc_frag_data.is_insn) in get_frag_property_flags()
11451 if (fragP->tc_frag_data.is_loop_target) in get_frag_property_flags()
11453 if (fragP->tc_frag_data.is_branch_target) in get_frag_property_flags()
11455 if (fragP->tc_frag_data.is_no_density) in get_frag_property_flags()
11457 if (fragP->tc_frag_data.use_absolute_literals) in get_frag_property_flags()
11460 if (fragP->tc_frag_data.is_align) in get_frag_property_flags()
11463 prop_flags->alignment = fragP->tc_frag_data.alignment; in get_frag_property_flags()
11619 fragS *fragP; in add_xt_prop_frags() local
11631 for (fragP = seg_info (sec)->frchainP->frch_root; fragP; in add_xt_prop_frags()
11632 fragP = fragP->fr_next) in add_xt_prop_frags()
11636 tmp_block.offset = fragP->fr_address; in add_xt_prop_frags()
11637 tmp_block.size = fragP->fr_fix; in add_xt_prop_frags()
11639 property_function (fragP, &tmp_block.flags); in add_xt_prop_frags()
12171 tinsn_immed_from_frag (TInsn *tinsn, fragS *fragP, int slot) in tinsn_immed_from_frag() argument
12176 if (fragP->tc_frag_data.slot_symbols[slot]) in tinsn_immed_from_frag()
12181 fragP->tc_frag_data.slot_symbols[slot], in tinsn_immed_from_frag()
12182 fragP->tc_frag_data.slot_offsets[slot]); in tinsn_immed_from_frag()
12184 tinsn->extra_arg = fragP->tc_frag_data.free_reg[slot]; in tinsn_immed_from_frag()
12303 fragS *fragP, in vinsn_to_insnbuf() argument
12335 fix_new (fragP, frag_offset - fragP->fr_literal, in vinsn_to_insnbuf()
12365 xg_add_opcode_fix (tinsn, i, fmt, slot, exp, fragP, in vinsn_to_insnbuf()
12366 frag_offset - fragP->fr_literal); in vinsn_to_insnbuf()