as_bad ("at %0xlx, displacement overflows 8-bit field",
as_bad ("at 0x%lx, displacement overflows 8-bit field",
md_convert_frag (headers, seg, fragP)     object_headers *headers;     segT seg;     fragS *fragP;{  int donerelax = 0;  switch (fragP->fr_subtype)    {    case C (COND_JUMP, COND8):      subseg_change (seg, 0);      fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,	       1, R_SH_PCDISP8BY2);      fragP->fr_fix += 2;      fragP->fr_var = 0;      break;    case C (UNCOND_JUMP, UNCOND12):      subseg_change (seg, 0);      fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,	       1, R_SH_PCDISP);      fragP->fr_fix += 2;      fragP->fr_var = 0;      break;    case C (UNCOND_JUMP, UNCOND32):    case C (UNCOND_JUMP, UNDEF_WORD_DISP):      if (fragP->fr_symbol == NULL)	as_bad ("at 0x%lx, displacement overflows 12-bit field",		(unsigned long) fragP->fr_address);      else	as_bad ("at 0x%lx, displacement to %sdefined symbol %s overflows 12-bit field",		(unsigned long) fragP->fr_address,				S_IS_DEFINED (fragP->fr_symbol) ? "" : "un",		S_GET_NAME (fragP->fr_symbol));#if 0				/* This code works, but generates poor code and the compiler				   should never produce a sequence that requires it to be used.  */      /* A jump wont fit in 12 bits, make code which looks like	 bra foo	 mov.w @(0, PC), r14	 .long disp	 foo: bra @r14	 */      int t = buffer[0] & 0x10;      buffer[highbyte] = 0xa0;	/* branch over move and disp */      buffer[lowbyte] = 3;      buffer[highbyte+2] = 0xd0 | JREG;	/* Build mov insn */      buffer[lowbyte+2] = 0x00;      buffer[highbyte+4] = 0;	/* space for 32 bit jump disp */      buffer[lowbyte+4] = 0;      buffer[highbyte+6] = 0;      buffer[lowbyte+6] = 0;      buffer[highbyte+8] = 0x40 | JREG;	/* Build jmp @JREG */      buffer[lowbyte+8] = t ? 0xb : 0x2b;      buffer[highbyte+10] = 0x20; /* build nop */      buffer[lowbyte+10] = 0x0b;      /* Make reloc for the long disp */      fix_new (fragP,	       fragP->fr_fix + 4,	       4,	       fragP->fr_symbol,	       fragP->fr_offset,	       0,	       R_SH_IMM32);      fragP->fr_fix += UNCOND32_LENGTH;      fragP->fr_var = 0;      donerelax = 1;#endif      break;    case C (COND_JUMP, COND12):      /* A bcond won't fit, so turn it into a b!cond; bra disp; nop */      {	unsigned char *buffer =	  (unsigned char *) (fragP->fr_fix + fragP->fr_literal);	int highbyte = target_big_endian ? 0 : 1;	int lowbyte = target_big_endian ? 1 : 0;	/* Toggle the true/false bit of the bcond.  */	buffer[highbyte] ^= 0x2;	/* Build a relocation to six bytes farther on.  */	subseg_change (seg, 0);	fix_new (fragP, fragP->fr_fix, 2,		 segment_info[seg].dot,		 fragP->fr_address + fragP->fr_fix + 6,		 1, R_SH_PCDISP8BY2);	/* Set up a jump instruction.  */	buffer[highbyte + 2] = 0xa0;	buffer[lowbyte + 2] = 0;	fix_new (fragP, fragP->fr_fix + 2, 2, fragP->fr_symbol,		 fragP->fr_offset, 1, R_SH_PCDISP);	/* Fill in a NOP instruction.  */	buffer[highbyte + 4] = 0x0;	buffer[lowbyte + 4] = 0x9;	fragP->fr_fix += 6;	fragP->fr_var = 0;	donerelax = 1;      }      break;    case C (COND_JUMP, COND32):    case C (COND_JUMP, UNDEF_WORD_DISP):      if (fragP->fr_symbol == NULL)	as_bad ("at %0xlx, displacement overflows 8-bit field", 		(unsigned long) fragP->fr_address);      else  	as_bad ("at 0x%lx, displacement to %sdefined symbol %s overflows 8-bit field ",		(unsigned long) fragP->fr_address,				S_IS_DEFINED (fragP->fr_symbol) ? "" : "un",		S_GET_NAME (fragP->fr_symbol));#if 0				/* This code works, but generates poor code, and the compiler				   should never produce a sequence that requires it to be used.  */      /* A bcond won't fit and it won't go into a 12 bit	 displacement either, the code sequence looks like:	 b!cond foop	 mov.w @(n, PC), r14	 jmp  @r14	 nop	 .long where	 foop:	 */      buffer[0] ^= 0x2;		/* Toggle T/F bit */#define JREG 14      buffer[1] = 5;		/* branch over mov, jump, nop and ptr */      buffer[2] = 0xd0 | JREG;	/* Build mov insn */      buffer[3] = 0x2;      buffer[4] = 0x40 | JREG;	/* Build jmp @JREG */      buffer[5] = 0x0b;      buffer[6] = 0x20;		/* build nop */      buffer[7] = 0x0b;      buffer[8] = 0;		/* space for 32 bit jump disp */      buffer[9] = 0;      buffer[10] = 0;      buffer[11] = 0;      buffer[12] = 0;      buffer[13] = 0;      /* Make reloc for the long disp */      fix_new (fragP,	       fragP->fr_fix + 8,	       4,	       fragP->fr_symbol,	       fragP->fr_offset,	       0,	       R_SH_IMM32);      fragP->fr_fix += COND32_LENGTH;      fragP->fr_var = 0;      donerelax = 1;#endif      break;    default:      abort ();    }  if (donerelax && !sh_relax)    as_warn ("Offset doesn't fit at 0x%lx, trying to get to %s+0x%lx",	     (unsigned long) fragP->fr_address,	     fragP->fr_symbol ? S_GET_NAME(fragP->fr_symbol): "",	     (unsigned long) fragP->fr_offset);}