Lines Matching refs:fragP

4901 /* *fragP has been relaxed to its final size, and now needs to have
4906 md_convert_frag_1 (fragS *fragP)
4912 int object_address = fragP->fr_fix + fragP->fr_address;
4917 char *buffer_address = fragP->fr_literal;
4918 buffer_address += fragP->fr_fix;
4922 disp = fragP->fr_symbol ? S_GET_VALUE (fragP->fr_symbol) : 0;
4923 disp = (disp + fragP->fr_offset) - object_address;
4925 switch (fragP->fr_subtype)
4934 as_bad_where (fragP->fr_file, fragP->fr_line,
4936 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
4937 fragP->fr_offset, 1, RELAX_RELOC_PC8);
4945 fragP->fr_opcode[1] = 0x00;
4946 fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
4947 fragP->fr_offset, 1, RELAX_RELOC_PC16);
4948 fragP->fr_fix += 2;
4951 fragP->fr_opcode[1] = (char) 0xFF;
4952 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4953 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4954 fragP->fr_fix += 4;
4959 fragP->fr_opcode[0] = 0x66; /* bne */
4960 fragP->fr_opcode[1] = 0xFF;
4961 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4962 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4963 fixP->fx_file = fragP->fr_file;
4964 fixP->fx_line = fragP->fr_line;
4965 fragP->fr_fix += 4; /* Skip first offset */
4969 fragP->fr_fix += 2; /* Skip second branch opcode */
4970 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4971 fragP->fr_offset, 1, RELAX_RELOC_PC32);
4972 fragP->fr_fix += 4;
4975 if (fragP->fr_opcode[0] == 0x61) /* jbsr */
4978 as_bad_where (fragP->fr_file, fragP->fr_line,
4980 fragP->fr_opcode[0] = 0x4E;
4981 fragP->fr_opcode[1] = (char) 0xB9; /* JSR with ABSL LONG operand. */
4982 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4983 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
4984 fragP->fr_fix += 4;
4986 else if (fragP->fr_opcode[0] == 0x60) /* jbra */
4989 as_bad_where (fragP->fr_file, fragP->fr_line,
4991 fragP->fr_opcode[0] = 0x4E;
4992 fragP->fr_opcode[1] = (char) 0xF9; /* JMP with ABSL LONG operand. */
4993 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
4994 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
4995 fragP->fr_fix += 4;
5006 as_bad_where (fragP->fr_file, fragP->fr_line,
5011 fragP->fr_opcode[0] ^= 0x01; /* Invert bcc. */
5012 fragP->fr_opcode[1] = 0x06; /* Branch offset = 6. */
5019 fragP->fr_fix += 2; /* Account for jmp instruction. */
5020 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
5021 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
5022 fragP->fr_fix += 4;
5025 know ((fragP->fr_opcode[1] & 0x40) == 0);
5026 fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
5027 fragP->fr_offset, 1, RELAX_RELOC_PC16);
5028 fragP->fr_fix += 2;
5031 fragP->fr_opcode[1] |= 0x40; /* Turn on LONG bit. */
5032 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
5033 fragP->fr_offset, 1, RELAX_RELOC_PC32);
5034 fragP->fr_fix += 4;
5038 fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
5039 fragP->fr_offset, 1, RELAX_RELOC_PC16);
5040 fragP->fr_fix += 2;
5053 fragP->fr_fix += 6; /* Account for bra/jmp instructions. */
5054 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
5055 fragP->fr_offset, 1, RELAX_RELOC_PC32);
5056 fragP->fr_fix += 4;
5063 as_bad_where (fragP->fr_file, fragP->fr_line,
5073 fragP->fr_fix += 6; /* Account for bra/jmp instructions. */
5074 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
5075 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
5076 fragP->fr_fix += 4;
5079 fragP->fr_opcode[1] &= ~0x3F;
5080 fragP->fr_opcode[1] |= 0x3A; /* 072 - mode 7.2 */
5081 fixP = fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
5082 fragP->fr_offset, 1, RELAX_RELOC_PC16);
5083 fragP->fr_fix += 2;
5090 fragP->fr_fix += 2;
5091 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
5092 fragP->fr_offset, 1, RELAX_RELOC_PC32);
5094 fragP->fr_fix += 4;
5097 gas_assert (fragP->fr_fix >= 2);
5099 fixP = fix_new (fragP, fragP->fr_fix - 1, 1, fragP->fr_symbol,
5100 fragP->fr_offset, 1, RELAX_RELOC_PC8);
5104 gas_assert (fragP->fr_fix >= 2);
5107 fixP = fix_new (fragP, (int) (fragP->fr_fix), 2, fragP->fr_symbol,
5108 fragP->fr_offset, 1, RELAX_RELOC_PC16);
5110 fragP->fr_fix += 2;
5113 gas_assert (fragP->fr_fix >= 2);
5116 fixP = fix_new (fragP, (int) (fragP->fr_fix), 4, fragP->fr_symbol,
5117 fragP->fr_offset, 1, RELAX_RELOC_PC32);
5119 fragP->fr_fix += 4;
5122 fixP = fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
5123 fragP->fr_offset, 1, RELAX_RELOC_PC16);
5124 fragP->fr_fix += 2;
5128 as_bad_where (fragP->fr_file, fragP->fr_line,
5132 if ((fragP->fr_opcode[1] & 0x3F) != 0x3A)
5134 fragP->fr_opcode[1] &= ~0x3F;
5135 fragP->fr_opcode[1] |= 0x39; /* Mode 7.1 */
5136 fixP = fix_new (fragP, fragP->fr_fix, 4, fragP->fr_symbol,
5137 fragP->fr_offset, 0, RELAX_RELOC_ABS32);
5138 fragP->fr_fix += 4;
5143 fixP->fx_file = fragP->fr_file;
5144 fixP->fx_line = fragP->fr_line;
5151 fragS *fragP)
5153 md_convert_frag_1 (fragP);
5160 md_estimate_size_before_relax (fragS *fragP, segT segment)
5163 switch (fragP->fr_subtype)
5170 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
5171 && relaxable_symbol (fragP->fr_symbol))
5173 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
5178 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
5183 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
5190 if (S_GET_SEGMENT (fragP->fr_symbol) == segment
5191 && relaxable_symbol (fragP->fr_symbol))
5193 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), BYTE);
5198 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
5208 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
5209 && relaxable_symbol (fragP->fr_symbol))
5212 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
5216 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), LONG);
5222 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
5223 && relaxable_symbol (fragP->fr_symbol)))
5225 fragP->fr_subtype = TAB (PCINDEX, BYTE);
5229 fragP->fr_subtype = TAB (PCINDEX, LONG);
5235 if ((S_GET_SEGMENT (fragP->fr_symbol) == segment
5236 && relaxable_symbol (fragP->fr_symbol)))
5238 fragP->fr_subtype = TAB (ABSTOPCREL, SHORT);
5242 fragP->fr_subtype = TAB (ABSTOPCREL, LONG);
5252 switch (fragP->fr_subtype)
5263 if (fragP->fr_symbol)
5267 sym_frag = symbol_get_frag (fragP->fr_symbol);
5268 if (S_GET_VALUE (fragP->fr_symbol) == sym_frag->fr_address)
5272 for (l = fragP->fr_next; l && l != sym_frag; l = l->fr_next)
5276 fragP->fr_subtype = TAB (TABTYPE (fragP->fr_subtype), SHORT);
5283 return md_relax_table[fragP->fr_subtype].rlx_length;