fixP->fx_im_disp = 2;
mem_fmt (args, oP, callx)     char *args[];		/* args[0]->opcode mnemonic, args[1-3]->operands */     struct i960_opcode *oP;	/* Pointer to description of instruction */     int callx;			/* Is this a callx opcode */{  int i;			/* Loop counter */  struct regop regop;		/* Description of register operand */  char opdesc;			/* Operand descriptor byte */  memS instr;			/* Description of binary to be output */  char *outP;			/* Where the binary was output to */  expressionS expr;		/* Parsed expression */  /* ->description of deferred address fixup */  fixS *fixP;#ifdef OBJ_COFF  /* COFF support isn't in place yet for callx relaxing.  */  callx = 0;#endif  memset (&instr, '\0', sizeof (memS));  instr.opcode = oP->opcode;  /* Process operands. */  for (i = 1; i <= oP->num_ops; i++)    {      opdesc = oP->operand[i - 1];      if (MEMOP (opdesc))	{	  parse_memop (&instr, args[i], oP->format);	}      else	{	  parse_regop (&regop, args[i], opdesc);	  instr.opcode |= regop.n << 19;	}    }  /* Output opcode */  outP = emit (instr.opcode);  if (instr.disp == 0)    {      return;    }  /* Parse and process the displacement */  parse_expr (instr.e, &expr);  switch (expr.X_op)    {    case O_illegal:      as_bad ("expression syntax error");      break;    case O_constant:      if (instr.disp == 32)	{	  (void) emit (offs (expr));	/* Output displacement */	}      else	{	  /* 12-bit displacement */	  if (offs (expr) & ~0xfff)	    {	      /* Won't fit in 12 bits: convert already-output	       * instruction to MEMB format, output	       * displacement.	       */	      mema_to_memb (outP);	      (void) emit (offs (expr));	    }	  else	    {	      /* WILL fit in 12 bits:  OR into opcode and	       * overwrite the binary we already put out	       */	      instr.opcode |= offs (expr);	      md_number_to_chars (outP, instr.opcode, 4);	    }	}      break;    default:      if (instr.disp == 12)	{	  /* Displacement is dependent on a symbol, whose value	   * may change at link time.  We HAVE to reserve 32 bits.	   * Convert already-output opcode to MEMB format.	   */	  mema_to_memb (outP);	}      /* Output 0 displacement and set up address fixup for when       * this symbol's value becomes known.       */      outP = emit ((long) 0);      fixP = fix_new_exp (frag_now,			  outP - frag_now->fr_literal,			  4,			  &expr,			  0,			  NO_RELOC);      fixP->fx_im_disp = 2;	/* 32-bit displacement fix */      /* Steve's linker relaxing hack.  Mark this 32-bit relocation as         being in the instruction stream, specifically as part of a callx         instruction.  */      fixP->fx_bsr = callx;      break;    }}				/* memfmt() */