int *counter;
int *counter ATTRIBUTE_UNUSED;
mips16_macro_build (place, counter, ep, name, fmt, args)     char *place;     int *counter;     expressionS *ep;     const char *name;     const char *fmt;     va_list args;{  struct mips_cl_insn insn;  bfd_reloc_code_real_type r;  r = BFD_RELOC_UNUSED;  insn.insn_mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);  assert (insn.insn_mo);  assert (strcmp (name, insn.insn_mo->name) == 0);  while (strcmp (fmt, insn.insn_mo->args) != 0	 || insn.insn_mo->pinfo == INSN_MACRO)    {      ++insn.insn_mo;      assert (insn.insn_mo->name);      assert (strcmp (name, insn.insn_mo->name) == 0);    }  insn.insn_opcode = insn.insn_mo->match;  insn.use_extend = false;  for (;;)    {      int c;      c = *fmt++;      switch (c)	{	case '\0':	  break;	case ',':	case '(':	case ')':	  continue;	case 'y':	case 'w':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_RY;	  continue;	case 'x':	case 'v':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_RX;	  continue;	case 'z':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_RZ;	  continue;	case 'Z':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_MOVE32Z;	  continue;	case '0':	case 'S':	case 'P':	case 'R':	  continue;	case 'X':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_REGR32;	  continue;	case 'Y':	  {	    int regno;	    regno = va_arg (args, int);	    regno = ((regno & 7) << 2) | ((regno & 0x18) >> 3);	    insn.insn_opcode |= regno << MIPS16OP_SH_REG32R;	  }	  continue;	case '<':	case '>':	case '4':	case '5':	case 'H':	case 'W':	case 'D':	case 'j':	case '8':	case 'V':	case 'C':	case 'U':	case 'k':	case 'K':	case 'p':	case 'q':	  {	    assert (ep != NULL);	    if (ep->X_op != O_constant)	      r = BFD_RELOC_UNUSED + c;	    else	      {		mips16_immed ((char *) NULL, 0, c, ep->X_add_number, false,			      false, false, &insn.insn_opcode,			      &insn.use_extend, &insn.extend);		ep = NULL;		r = BFD_RELOC_UNUSED;	      }	  }	  continue;	case '6':	  insn.insn_opcode |= va_arg (args, int) << MIPS16OP_SH_IMM6;	  continue;	}      break;    }  assert (r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);  append_insn (place, &insn, ep, r, false);}