if (sh_relax && ! seg_info (now_seg)->tc_segment_info_data.in_code) {  fix_new (frag_now, frag_now_fix (), 2, &abs_symbol, 0, 0, R_SH_CODE); seg_info (now_seg)->tc_segment_info_data.in_code = 1; }
md_assemble (str)     char *str;{  unsigned char *op_start;  unsigned char *op_end;  sh_operand_info operand[3];  sh_opcode_info *opcode;  char name[20];  int nlen = 0;  /* Drop leading whitespace */  while (*str == ' ')    str++;  /* find the op code end */  for (op_start = op_end = (unsigned char *) (str);       *op_end       && nlen < 20       && !is_end_of_line[*op_end] && *op_end != ' ';       op_end++)    {      name[nlen] = op_start[nlen];      nlen++;    }  name[nlen] = 0;  if (nlen == 0)    {      as_bad ("can't find opcode ");    }  opcode = (sh_opcode_info *) hash_find (opcode_hash_control, name);  if (opcode == NULL)    {      as_bad ("unknown opcode");      return;    }  if (opcode->arg[0] == A_BDISP12      || opcode->arg[0] == A_BDISP8)    {      parse_exp (op_end + 1);      build_relax (opcode);    }  else    {      if (opcode->arg[0] != A_END)	{	  get_operands (opcode, op_end, operand);	}      opcode = get_specific (opcode, operand);      if (opcode == 0)	{	  /* Couldn't find an opcode which matched the operands */	  char *where = frag_more (2);	  where[0] = 0x0;	  where[1] = 0x0;	  as_bad ("invalid operands for opcode");	  return;	}      build_Mytes (opcode, operand);    }}