Home | History | Annotate | Line # | Download | only in config
tc-d30v.c revision 1.1.1.1
      1 /* tc-d30v.c -- Assembler code for the Mitsubishi D30V
      2    Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008
      3    Free Software Foundation, Inc.
      4 
      5    This file is part of GAS, the GNU Assembler.
      6 
      7    GAS is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3, or (at your option)
     10    any later version.
     11 
     12    GAS is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with GAS; see the file COPYING.  If not, write to
     19    the Free Software Foundation, 51 Franklin Street - Fifth Floor,
     20    Boston, MA 02110-1301, USA.  */
     21 
     22 #include "as.h"
     23 #include "safe-ctype.h"
     24 #include "subsegs.h"
     25 #include "opcode/d30v.h"
     26 
     27 const char comment_chars[]        = ";";
     28 const char line_comment_chars[]   = "#";
     29 const char line_separator_chars[] = "";
     30 const char *md_shortopts          = "OnNcC";
     31 const char EXP_CHARS[]            = "eE";
     32 const char FLT_CHARS[]            = "dD";
     33 
     34 #if HAVE_LIMITS_H
     35 #include <limits.h>
     36 #endif
     37 
     38 #ifndef CHAR_BIT
     39 #define CHAR_BIT 8
     40 #endif
     41 
     42 #define NOP_MULTIPLY 1
     43 #define NOP_ALL 2
     44 static int warn_nops = 0;
     45 static int Optimizing = 0;
     46 static int warn_register_name_conflicts = 1;
     47 
     48 #define FORCE_SHORT	1
     49 #define FORCE_LONG	2
     50 
     51 /* EXEC types.  */
     52 typedef enum _exec_type
     53 {
     54   EXEC_UNKNOWN,			/* No order specified.  */
     55   EXEC_PARALLEL,		/* Done in parallel (FM=00).  */
     56   EXEC_SEQ,			/* Sequential (FM=01).  */
     57   EXEC_REVSEQ			/* Reverse sequential (FM=10).  */
     58 } exec_type_enum;
     59 
     60 /* Fixups.  */
     61 #define MAX_INSN_FIXUPS  5
     62 
     63 struct d30v_fixup
     64 {
     65   expressionS exp;
     66   int operand;
     67   int pcrel;
     68   int size;
     69   bfd_reloc_code_real_type reloc;
     70 };
     71 
     72 typedef struct _fixups
     73 {
     74   int fc;
     75   struct d30v_fixup fix[MAX_INSN_FIXUPS];
     76   struct _fixups *next;
     77 } Fixups;
     78 
     79 static Fixups FixUps[2];
     80 static Fixups *fixups;
     81 
     82 /* Whether current and previous instruction are word multiply insns.  */
     83 static int cur_mul32_p = 0;
     84 static int prev_mul32_p = 0;
     85 
     86 /*  The flag_explicitly_parallel is true iff the instruction being assembled
     87     has been explicitly written as a parallel short-instruction pair by the
     88     human programmer.  It is used in parallel_ok () to distinguish between
     89     those dangerous parallelizations attempted by the human, which are to be
     90     allowed, and those attempted by the assembler, which are not.  It is set
     91     from md_assemble ().  */
     92 static int flag_explicitly_parallel = 0;
     93 static int flag_xp_state = 0;
     94 
     95 /* Whether current and previous left sub-instruction disables
     96    execution of right sub-instruction.  */
     97 static int cur_left_kills_right_p = 0;
     98 static int prev_left_kills_right_p = 0;
     99 
    100 /* The known current alignment of the current section.  */
    101 static int d30v_current_align;
    102 static segT d30v_current_align_seg;
    103 
    104 /* The last seen label in the current section.  This is used to auto-align
    105    labels preceding instructions.  */
    106 static symbolS *d30v_last_label;
    107 
    108 /* Two nops.  */
    109 #define NOP_LEFT   ((long long) NOP << 32)
    110 #define NOP_RIGHT  ((long long) NOP)
    111 #define NOP2 (FM00 | NOP_LEFT | NOP_RIGHT)
    112 
    113 struct option md_longopts[] =
    114 {
    115   {NULL, no_argument, NULL, 0}
    116 };
    117 
    118 size_t md_longopts_size = sizeof (md_longopts);
    119 
    120 /* Opcode hash table.  */
    121 static struct hash_control *d30v_hash;
    122 
    123 /* Do a binary search of the pre_defined_registers array to see if
    124    NAME is a valid regiter name.  Return the register number from the
    125    array on success, or -1 on failure.  */
    126 
    127 static int
    128 reg_name_search (char *name)
    129 {
    130   int middle, low, high;
    131   int cmp;
    132 
    133   low = 0;
    134   high = reg_name_cnt () - 1;
    135 
    136   do
    137     {
    138       middle = (low + high) / 2;
    139       cmp = strcasecmp (name, pre_defined_registers[middle].name);
    140       if (cmp < 0)
    141 	high = middle - 1;
    142       else if (cmp > 0)
    143 	low = middle + 1;
    144       else
    145 	{
    146 	  if (symbol_find (name) != NULL)
    147 	    {
    148 	      if (warn_register_name_conflicts)
    149 		as_warn (_("Register name %s conflicts with symbol of the same name"),
    150 			 name);
    151 	    }
    152 
    153 	  return pre_defined_registers[middle].value;
    154 	}
    155     }
    156   while (low <= high);
    157 
    158   return -1;
    159 }
    160 
    161 /* Check the string at input_line_pointer to see if it is a valid
    162    register name.  */
    163 
    164 static int
    165 register_name (expressionS *expressionP)
    166 {
    167   int reg_number;
    168   char c, *p = input_line_pointer;
    169 
    170   while (*p && *p != '\n' && *p != '\r' && *p != ',' && *p != ' ' && *p != ')')
    171     p++;
    172 
    173   c = *p;
    174   if (c)
    175     *p++ = 0;
    176 
    177   /* Look to see if it's in the register table.  */
    178   reg_number = reg_name_search (input_line_pointer);
    179   if (reg_number >= 0)
    180     {
    181       expressionP->X_op = O_register;
    182       /* Temporarily store a pointer to the string here.  */
    183       expressionP->X_op_symbol = (symbolS *) input_line_pointer;
    184       expressionP->X_add_number = reg_number;
    185       input_line_pointer = p;
    186       return 1;
    187     }
    188   if (c)
    189     *(p - 1) = c;
    190   return 0;
    191 }
    192 
    193 static int
    194 check_range (unsigned long num, int bits, int flags)
    195 {
    196   long min, max;
    197 
    198   /* Don't bother checking 32-bit values.  */
    199   if (bits == 32)
    200     {
    201       if (sizeof (unsigned long) * CHAR_BIT == 32)
    202 	return 0;
    203 
    204       /* We don't record signed or unsigned for 32-bit quantities.
    205 	 Allow either.  */
    206       min = -((unsigned long) 1 << (bits - 1));
    207       max = ((unsigned long) 1 << bits) - 1;
    208       return (long) num < min || (long) num > max;
    209     }
    210 
    211   if (flags & OPERAND_SHIFT)
    212     {
    213       /* We know that all shifts are right by three bits.  */
    214       num >>= 3;
    215 
    216       if (flags & OPERAND_SIGNED)
    217 	{
    218 	  unsigned long sign_bit = ((unsigned long) -1L >> 4) + 1;
    219 	  num = (num ^ sign_bit) - sign_bit;
    220 	}
    221     }
    222 
    223   if (flags & OPERAND_SIGNED)
    224     {
    225       max = ((unsigned long) 1 << (bits - 1)) - 1;
    226       min = - ((unsigned long) 1 << (bits - 1));
    227       return (long) num > max || (long) num < min;
    228     }
    229   else
    230     {
    231       max = ((unsigned long) 1 << bits) - 1;
    232       return num > (unsigned long) max;
    233     }
    234 }
    235 
    236 void
    237 md_show_usage (FILE *stream)
    238 {
    239   fprintf (stream, _("\nD30V options:\n\
    240 -O                      Make adjacent short instructions parallel if possible.\n\
    241 -n                      Warn about all NOPs inserted by the assembler.\n\
    242 -N			Warn about NOPs inserted after word multiplies.\n\
    243 -c                      Warn about symbols whoes names match register names.\n\
    244 -C                      Opposite of -C.  -c is the default.\n"));
    245 }
    246 
    247 int
    248 md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
    249 {
    250   switch (c)
    251     {
    252       /* Optimize.  Will attempt to parallelize operations.  */
    253     case 'O':
    254       Optimizing = 1;
    255       break;
    256 
    257       /* Warn about all NOPS that the assembler inserts.  */
    258     case 'n':
    259       warn_nops = NOP_ALL;
    260       break;
    261 
    262       /* Warn about the NOPS that the assembler inserts because of the
    263 	 multiply hazard.  */
    264     case 'N':
    265       warn_nops = NOP_MULTIPLY;
    266       break;
    267 
    268     case 'c':
    269       warn_register_name_conflicts = 1;
    270       break;
    271 
    272     case 'C':
    273       warn_register_name_conflicts = 0;
    274       break;
    275 
    276     default:
    277       return 0;
    278     }
    279   return 1;
    280 }
    281 
    282 symbolS *
    283 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
    284 {
    285   return 0;
    286 }
    287 
    288 char *
    289 md_atof (int type, char *litP, int *sizeP)
    290 {
    291   return ieee_md_atof (type, litP, sizeP, TRUE);
    292 }
    293 
    294 void
    295 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
    296 		 asection *sec ATTRIBUTE_UNUSED,
    297 		 fragS *fragP ATTRIBUTE_UNUSED)
    298 {
    299   abort ();
    300 }
    301 
    302 valueT
    303 md_section_align (asection *seg, valueT addr)
    304 {
    305   int align = bfd_get_section_alignment (stdoutput, seg);
    306   return ((addr + (1 << align) - 1) & (-1 << align));
    307 }
    308 
    309 void
    310 md_begin (void)
    311 {
    312   struct d30v_opcode *opcode;
    313   d30v_hash = hash_new ();
    314 
    315   /* Insert opcode names into a hash table.  */
    316   for (opcode = (struct d30v_opcode *) d30v_opcode_table; opcode->name; opcode++)
    317       hash_insert (d30v_hash, opcode->name, (char *) opcode);
    318 
    319   fixups = &FixUps[0];
    320   FixUps[0].next = &FixUps[1];
    321   FixUps[1].next = &FixUps[0];
    322 
    323   d30v_current_align_seg = now_seg;
    324 }
    325 
    326 /* Remove the postincrement or postdecrement operator ( '+' or '-' )
    327    from an expression.  */
    328 
    329 static int
    330 postfix (char *p)
    331 {
    332   while (*p != '-' && *p != '+')
    333     {
    334       if (*p == 0 || *p == '\n' || *p == '\r' || *p == ' ' || *p == ',')
    335 	break;
    336       p++;
    337     }
    338 
    339   if (*p == '-')
    340     {
    341       *p = ' ';
    342       return -1;
    343     }
    344 
    345   if (*p == '+')
    346     {
    347       *p = ' ';
    348       return 1;
    349     }
    350 
    351   return 0;
    352 }
    353 
    354 static bfd_reloc_code_real_type
    355 get_reloc (const struct d30v_operand *op, int rel_flag)
    356 {
    357   switch (op->bits)
    358     {
    359     case 6:
    360       if (op->flags & OPERAND_SHIFT)
    361 	return BFD_RELOC_D30V_9_PCREL;
    362       else
    363 	return BFD_RELOC_D30V_6;
    364       break;
    365     case 12:
    366       if (!(op->flags & OPERAND_SHIFT))
    367 	as_warn (_("unexpected 12-bit reloc type"));
    368       if (rel_flag == RELOC_PCREL)
    369 	return BFD_RELOC_D30V_15_PCREL;
    370       else
    371 	return BFD_RELOC_D30V_15;
    372     case 18:
    373       if (!(op->flags & OPERAND_SHIFT))
    374 	as_warn (_("unexpected 18-bit reloc type"));
    375       if (rel_flag == RELOC_PCREL)
    376 	return BFD_RELOC_D30V_21_PCREL;
    377       else
    378 	return BFD_RELOC_D30V_21;
    379     case 32:
    380       if (rel_flag == RELOC_PCREL)
    381 	return BFD_RELOC_D30V_32_PCREL;
    382       else
    383 	return BFD_RELOC_D30V_32;
    384     default:
    385       return 0;
    386     }
    387 }
    388 
    389 /* Parse a string of operands and return an array of expressions.  */
    390 
    391 static int
    392 get_operands (expressionS exp[], int cmp_hack)
    393 {
    394   char *p = input_line_pointer;
    395   int numops = 0;
    396   int post = 0;
    397 
    398   if (cmp_hack)
    399     {
    400       exp[numops].X_op = O_absent;
    401       exp[numops++].X_add_number = cmp_hack - 1;
    402     }
    403 
    404   while (*p)
    405     {
    406       while (*p == ' ' || *p == '\t' || *p == ',')
    407 	p++;
    408 
    409       if (*p == 0 || *p == '\n' || *p == '\r')
    410 	break;
    411 
    412       if (*p == '@')
    413 	{
    414 	  p++;
    415 	  exp[numops].X_op = O_absent;
    416 	  if (*p == '(')
    417 	    {
    418 	      p++;
    419 	      exp[numops].X_add_number = OPERAND_ATPAR;
    420 	      post = postfix (p);
    421 	    }
    422 	  else if (*p == '-')
    423 	    {
    424 	      p++;
    425 	      exp[numops].X_add_number = OPERAND_ATMINUS;
    426 	    }
    427 	  else
    428 	    {
    429 	      exp[numops].X_add_number = OPERAND_ATSIGN;
    430 	      post = postfix (p);
    431 	    }
    432 	  numops++;
    433 	  continue;
    434 	}
    435 
    436       if (*p == ')')
    437 	{
    438 	  /* Just skip the trailing paren.  */
    439 	  p++;
    440 	  continue;
    441 	}
    442 
    443       input_line_pointer = p;
    444 
    445       /* Check to see if it might be a register name.  */
    446       if (!register_name (&exp[numops]))
    447 	{
    448 	  /* Parse as an expression.  */
    449 	  expression (&exp[numops]);
    450 	}
    451 
    452       if (exp[numops].X_op == O_illegal)
    453 	as_bad (_("illegal operand"));
    454       else if (exp[numops].X_op == O_absent)
    455 	as_bad (_("missing operand"));
    456 
    457       numops++;
    458       p = input_line_pointer;
    459 
    460       switch (post)
    461 	{
    462 	case -1:
    463 	  /* Postdecrement mode.  */
    464 	  exp[numops].X_op = O_absent;
    465 	  exp[numops++].X_add_number = OPERAND_MINUS;
    466 	  break;
    467 	case 1:
    468 	  /* Postincrement mode.  */
    469 	  exp[numops].X_op = O_absent;
    470 	  exp[numops++].X_add_number = OPERAND_PLUS;
    471 	  break;
    472 	}
    473       post = 0;
    474     }
    475 
    476   exp[numops].X_op = 0;
    477 
    478   return numops;
    479 }
    480 
    481 /* Generate the instruction.
    482    It does everything but write the FM bits.  */
    483 
    484 static long long
    485 build_insn (struct d30v_insn *opcode, expressionS *opers)
    486 {
    487   int i, length, bits, shift, flags;
    488   unsigned long number, id = 0;
    489   long long insn;
    490   struct d30v_opcode *op = opcode->op;
    491   struct d30v_format *form = opcode->form;
    492 
    493   insn =
    494     opcode->ecc << 28 | op->op1 << 25 | op->op2 << 20 | form->modifier << 18;
    495 
    496   for (i = 0; form->operands[i]; i++)
    497     {
    498       flags = d30v_operand_table[form->operands[i]].flags;
    499 
    500       /* Must be a register or number.  */
    501       if (!(flags & OPERAND_REG) && !(flags & OPERAND_NUM)
    502 	  && !(flags & OPERAND_NAME) && !(flags & OPERAND_SPECIAL))
    503 	continue;
    504 
    505       bits = d30v_operand_table[form->operands[i]].bits;
    506       if (flags & OPERAND_SHIFT)
    507 	bits += 3;
    508 
    509       length = d30v_operand_table[form->operands[i]].length;
    510       shift = 12 - d30v_operand_table[form->operands[i]].position;
    511       if (opers[i].X_op != O_symbol)
    512 	number = opers[i].X_add_number;
    513       else
    514 	number = 0;
    515       if (flags & OPERAND_REG)
    516 	{
    517 	  /* Check for mvfsys or mvtsys control registers.  */
    518 	  if (flags & OPERAND_CONTROL && (number & 0x7f) > MAX_CONTROL_REG)
    519 	    {
    520 	      /* PSWL or PSWH.  */
    521 	      id = (number & 0x7f) - MAX_CONTROL_REG;
    522 	      number = 0;
    523 	    }
    524 	  else if (number & OPERAND_FLAG)
    525 	    /* NUMBER is a flag register.  */
    526 	    id = 3;
    527 
    528 	  number &= 0x7F;
    529 	}
    530       else if (flags & OPERAND_SPECIAL)
    531 	number = id;
    532 
    533       if (opers[i].X_op != O_register && opers[i].X_op != O_constant
    534 	  && !(flags & OPERAND_NAME))
    535 	{
    536 	  /* Now create a fixup.  */
    537 	  if (fixups->fc >= MAX_INSN_FIXUPS)
    538 	    as_fatal (_("too many fixups"));
    539 
    540 	  fixups->fix[fixups->fc].reloc =
    541 	    get_reloc (d30v_operand_table + form->operands[i], op->reloc_flag);
    542 	  fixups->fix[fixups->fc].size = 4;
    543 	  fixups->fix[fixups->fc].exp = opers[i];
    544 	  fixups->fix[fixups->fc].operand = form->operands[i];
    545 	  if (fixups->fix[fixups->fc].reloc == BFD_RELOC_D30V_9_PCREL)
    546 	    fixups->fix[fixups->fc].pcrel = RELOC_PCREL;
    547 	  else
    548 	    fixups->fix[fixups->fc].pcrel = op->reloc_flag;
    549 	  (fixups->fc)++;
    550 	}
    551 
    552       /* Truncate to the proper number of bits.  */
    553       if ((opers[i].X_op == O_constant) && check_range (number, bits, flags))
    554 	as_bad (_("operand out of range: %ld"), number);
    555       if (bits < 31)
    556 	number &= 0x7FFFFFFF >> (31 - bits);
    557       if (flags & OPERAND_SHIFT)
    558 	number >>= 3;
    559       if (bits == 32)
    560 	{
    561 	  /* It's a LONG instruction.  */
    562 	  insn |= ((number & 0xffffffff) >> 26);	/* Top 6 bits.  */
    563 	  insn <<= 32;			/* Shift the first word over.  */
    564 	  insn |= ((number & 0x03FC0000) << 2);		/* Next 8 bits.  */
    565 	  insn |= number & 0x0003FFFF;			/* Bottom 18 bits.  */
    566 	}
    567       else
    568 	insn |= number << shift;
    569     }
    570 
    571   return insn;
    572 }
    573 
    574 static void
    575 d30v_number_to_chars (char *buf,	/* Return 'nbytes' of chars here.  */
    576 		      long long value,	/* The value of the bits.  */
    577 		      int n)		/* Number of bytes in the output.  */
    578 {
    579   while (n--)
    580     {
    581       buf[n] = value & 0xff;
    582       value >>= 8;
    583     }
    584 }
    585 
    586 /* Write out a long form instruction.  */
    587 
    588 static void
    589 write_long (struct d30v_insn *opcode ATTRIBUTE_UNUSED,
    590 	    long long insn,
    591 	    Fixups *fx)
    592 {
    593   int i, where;
    594   char *f = frag_more (8);
    595 
    596   insn |= FM11;
    597   d30v_number_to_chars (f, insn, 8);
    598 
    599   for (i = 0; i < fx->fc; i++)
    600     {
    601       if (fx->fix[i].reloc)
    602 	{
    603 	  where = f - frag_now->fr_literal;
    604 	  fix_new_exp (frag_now, where, fx->fix[i].size, &(fx->fix[i].exp),
    605 		       fx->fix[i].pcrel, fx->fix[i].reloc);
    606 	}
    607     }
    608 
    609   fx->fc = 0;
    610 }
    611 
    612 /* Write out a short form instruction by itself.  */
    613 
    614 static void
    615 write_1_short (struct d30v_insn *opcode,
    616 	       long long insn,
    617 	       Fixups *fx,
    618 	       int use_sequential)
    619 {
    620   char *f = frag_more (8);
    621   int i, where;
    622 
    623   if (warn_nops == NOP_ALL)
    624     as_warn (_("%s NOP inserted"), use_sequential ?
    625 	     _("sequential") : _("parallel"));
    626 
    627   /* The other container needs to be NOP.  */
    628   if (use_sequential)
    629     {
    630       /* Use a sequential NOP rather than a parallel one,
    631 	 as the current instruction is a FLAG_MUL32 type one
    632 	 and the next instruction is a load.  */
    633 
    634       /* According to 4.3.1: for FM=01, sub-instructions performed
    635 	 only by IU cannot be encoded in L-container.  */
    636       if (opcode->op->unit == IU)
    637 	/* Right then left.  */
    638 	insn |= FM10 | NOP_LEFT;
    639       else
    640 	/* Left then right.  */
    641 	insn = FM01 | (insn << 32) | NOP_RIGHT;
    642     }
    643   else
    644     {
    645       /* According to 4.3.1: for FM=00, sub-instructions performed
    646 	 only by IU cannot be encoded in L-container.  */
    647       if (opcode->op->unit == IU)
    648 	/* Right container.  */
    649 	insn |= FM00 | NOP_LEFT;
    650       else
    651 	/* Left container.  */
    652 	insn = FM00 | (insn << 32) | NOP_RIGHT;
    653     }
    654 
    655   d30v_number_to_chars (f, insn, 8);
    656 
    657   for (i = 0; i < fx->fc; i++)
    658     {
    659       if (fx->fix[i].reloc)
    660 	{
    661 	  where = f - frag_now->fr_literal;
    662 	  fix_new_exp (frag_now,
    663 		       where,
    664 		       fx->fix[i].size,
    665 		       &(fx->fix[i].exp),
    666 		       fx->fix[i].pcrel,
    667 		       fx->fix[i].reloc);
    668 	}
    669     }
    670 
    671   fx->fc = 0;
    672 }
    673 
    674 /* Check 2 instructions and determine if they can be safely
    675    executed in parallel.  Return 1 if they can be.  */
    676 
    677 static int
    678 parallel_ok (struct d30v_insn *op1,
    679 	     unsigned long insn1,
    680 	     struct d30v_insn *op2,
    681 	     unsigned long insn2,
    682 	     exec_type_enum exec_type)
    683 {
    684   int i, j, shift, regno, bits, ecc;
    685   unsigned long flags, mask, flags_set1, flags_set2, flags_used1, flags_used2;
    686   unsigned long ins, mod_reg[2][3], used_reg[2][3], flag_reg[2];
    687   struct d30v_format *f;
    688   struct d30v_opcode *op;
    689 
    690   /* Section 4.3: Both instructions must not be IU or MU only.  */
    691   if ((op1->op->unit == IU && op2->op->unit == IU)
    692       || (op1->op->unit == MU && op2->op->unit == MU))
    693     return 0;
    694 
    695   /* First instruction must not be a jump to safely optimize, unless this
    696      is an explicit parallel operation.  */
    697   if (exec_type != EXEC_PARALLEL
    698       && (op1->op->flags_used & (FLAG_JMP | FLAG_JSR)))
    699     return 0;
    700 
    701   /* If one instruction is /TX or /XT and the other is /FX or /XF respectively,
    702      then it is safe to allow the two to be done as parallel ops, since only
    703      one will ever be executed at a time.  */
    704   if ((op1->ecc == ECC_TX && op2->ecc == ECC_FX)
    705       || (op1->ecc == ECC_FX && op2->ecc == ECC_TX)
    706       || (op1->ecc == ECC_XT && op2->ecc == ECC_XF)
    707       || (op1->ecc == ECC_XF && op2->ecc == ECC_XT))
    708     return 1;
    709 
    710   /* [0] r0-r31
    711      [1] r32-r63
    712      [2] a0, a1, flag registers.  */
    713   for (j = 0; j < 2; j++)
    714     {
    715       if (j == 0)
    716 	{
    717 	  f = op1->form;
    718 	  op = op1->op;
    719 	  ecc = op1->ecc;
    720 	  ins = insn1;
    721 	}
    722       else
    723 	{
    724 	  f = op2->form;
    725 	  op = op2->op;
    726 	  ecc = op2->ecc;
    727 	  ins = insn2;
    728 	}
    729 
    730       flag_reg[j] = 0;
    731       mod_reg[j][0] = mod_reg[j][1] = 0;
    732       used_reg[j][0] = used_reg[j][1] = 0;
    733 
    734       if (flag_explicitly_parallel)
    735 	{
    736 	  /* For human specified parallel instructions we have been asked
    737 	     to ignore the possibility that both instructions could modify
    738 	     bits in the PSW, so we initialise the mod & used arrays to 0.
    739 	     We have been asked, however, to refuse to allow parallel
    740 	     instructions which explicitly set the same flag register,
    741 	     eg "cmpne f0,r1,0x10 || cmpeq f0, r5, 0x2", so further on we test
    742 	     for the use of a flag register and set a bit in the mod or used
    743 	     array appropriately.  */
    744 	  mod_reg[j][2]  = 0;
    745 	  used_reg[j][2] = 0;
    746 	}
    747       else
    748 	{
    749 	  mod_reg[j][2] = (op->flags_set & FLAG_ALL);
    750 	  used_reg[j][2] = (op->flags_used & FLAG_ALL);
    751 	}
    752 
    753       /* BSR/JSR always sets R62.  */
    754       if (op->flags_used & FLAG_JSR)
    755 	mod_reg[j][1] = (1L << (62 - 32));
    756 
    757       /* Conditional execution affects the flags_used.  */
    758       switch (ecc)
    759 	{
    760 	case ECC_TX:
    761 	case ECC_FX:
    762 	  used_reg[j][2] |= flag_reg[j] = FLAG_0;
    763 	  break;
    764 
    765 	case ECC_XT:
    766 	case ECC_XF:
    767 	  used_reg[j][2] |= flag_reg[j] = FLAG_1;
    768 	  break;
    769 
    770 	case ECC_TT:
    771 	case ECC_TF:
    772 	  used_reg[j][2] |= flag_reg[j] = (FLAG_0 | FLAG_1);
    773 	  break;
    774 	}
    775 
    776       for (i = 0; f->operands[i]; i++)
    777 	{
    778 	  flags = d30v_operand_table[f->operands[i]].flags;
    779 	  shift = 12 - d30v_operand_table[f->operands[i]].position;
    780 	  bits = d30v_operand_table[f->operands[i]].bits;
    781 	  if (bits == 32)
    782 	    mask = 0xffffffff;
    783 	  else
    784 	    mask = 0x7FFFFFFF >> (31 - bits);
    785 
    786 	  if ((flags & OPERAND_PLUS) || (flags & OPERAND_MINUS))
    787 	    {
    788 	      /* This is a post-increment or post-decrement.
    789 		 The previous register needs to be marked as modified.  */
    790 	      shift = 12 - d30v_operand_table[f->operands[i - 1]].position;
    791 	      regno = (ins >> shift) & 0x3f;
    792 	      if (regno >= 32)
    793 		mod_reg[j][1] |= 1L << (regno - 32);
    794 	      else
    795 		mod_reg[j][0] |= 1L << regno;
    796 	    }
    797 	  else if (flags & OPERAND_REG)
    798 	    {
    799 	      regno = (ins >> shift) & mask;
    800 	      /* The memory write functions don't have a destination
    801                  register.  */
    802 	      if ((flags & OPERAND_DEST) && !(op->flags_set & FLAG_MEM))
    803 		{
    804 		  /* MODIFIED registers and flags.  */
    805 		  if (flags & OPERAND_ACC)
    806 		    {
    807 		      if (regno == 0)
    808 			mod_reg[j][2] |= FLAG_A0;
    809 		      else if (regno == 1)
    810 			mod_reg[j][2] |= FLAG_A1;
    811 		      else
    812 			abort ();
    813 		    }
    814 		  else if (flags & OPERAND_FLAG)
    815 		    mod_reg[j][2] |= 1L << regno;
    816 		  else if (!(flags & OPERAND_CONTROL))
    817 		    {
    818 		      int r, z;
    819 
    820 		      /* Need to check if there are two destination
    821 			 registers, for example ld2w.  */
    822 		      if (flags & OPERAND_2REG)
    823 			z = 1;
    824 		      else
    825 			z = 0;
    826 
    827 		      for (r = regno; r <= regno + z; r++)
    828 			{
    829 			  if (r >= 32)
    830 			    mod_reg[j][1] |= 1L << (r - 32);
    831 			  else
    832 			    mod_reg[j][0] |= 1L << r;
    833 			}
    834 		    }
    835 		}
    836 	      else
    837 		{
    838 		  /* USED, but not modified registers and flags.  */
    839 		  if (flags & OPERAND_ACC)
    840 		    {
    841 		      if (regno == 0)
    842 			used_reg[j][2] |= FLAG_A0;
    843 		      else if (regno == 1)
    844 			used_reg[j][2] |= FLAG_A1;
    845 		      else
    846 			abort ();
    847 		    }
    848 		  else if (flags & OPERAND_FLAG)
    849 		    used_reg[j][2] |= 1L << regno;
    850 		  else if (!(flags & OPERAND_CONTROL))
    851 		    {
    852 		      int r, z;
    853 
    854 		      /* Need to check if there are two source
    855 			 registers, for example st2w.  */
    856 		      if (flags & OPERAND_2REG)
    857 			z = 1;
    858 		      else
    859 			z = 0;
    860 
    861 		      for (r = regno; r <= regno + z; r++)
    862 			{
    863 			  if (r >= 32)
    864 			    used_reg[j][1] |= 1L << (r - 32);
    865 			  else
    866 			    used_reg[j][0] |= 1L << r;
    867 			}
    868 		    }
    869 		}
    870 	    }
    871 	}
    872     }
    873 
    874   flags_set1 = op1->op->flags_set;
    875   flags_set2 = op2->op->flags_set;
    876   flags_used1 = op1->op->flags_used;
    877   flags_used2 = op2->op->flags_used;
    878 
    879   /* Check for illegal combinations with ADDppp/SUBppp.  */
    880   if (((flags_set1 & FLAG_NOT_WITH_ADDSUBppp) != 0
    881        && (flags_used2 & FLAG_ADDSUBppp) != 0)
    882       || ((flags_set2 & FLAG_NOT_WITH_ADDSUBppp) != 0
    883 	  && (flags_used1 & FLAG_ADDSUBppp) != 0))
    884     return 0;
    885 
    886   /* Load instruction combined with half-word multiply is illegal.  */
    887   if (((flags_used1 & FLAG_MEM) != 0 && (flags_used2 & FLAG_MUL16))
    888       || ((flags_used2 & FLAG_MEM) != 0 && (flags_used1 & FLAG_MUL16)))
    889     return 0;
    890 
    891   /* Specifically allow add || add by removing carry, overflow bits dependency.
    892      This is safe, even if an addc follows since the IU takes the argument in
    893      the right container, and it writes its results last.
    894      However, don't paralellize add followed by addc or sub followed by
    895      subb.  */
    896   if (mod_reg[0][2] == FLAG_CVVA && mod_reg[1][2] == FLAG_CVVA
    897       && (used_reg[0][2] & ~flag_reg[0]) == 0
    898       && (used_reg[1][2] & ~flag_reg[1]) == 0
    899       && op1->op->unit == EITHER && op2->op->unit == EITHER)
    900     {
    901       mod_reg[0][2] = mod_reg[1][2] = 0;
    902     }
    903 
    904   for (j = 0; j < 3; j++)
    905     {
    906       /* If the second instruction depends on the first, we obviously
    907 	 cannot parallelize.  Note, the mod flag implies use, so
    908 	 check that as well.  */
    909       /* If flag_explicitly_parallel is set, then the case of the
    910 	 second instruction using a register the first instruction
    911 	 modifies is assumed to be okay; we trust the human.  We
    912 	 don't trust the human if both instructions modify the same
    913 	 register but we do trust the human if they modify the same
    914 	 flags.  */
    915       /* We have now been requested not to trust the human if the
    916 	 instructions modify the same flag registers either.  */
    917       if (flag_explicitly_parallel)
    918 	{
    919 	  if ((mod_reg[0][j] & mod_reg[1][j]) != 0)
    920 	    return 0;
    921 	}
    922       else
    923 	if ((mod_reg[0][j] & (mod_reg[1][j] | used_reg[1][j])) != 0)
    924 	  return 0;
    925     }
    926 
    927   return 1;
    928 }
    929 
    930 /* Write out a short form instruction if possible.
    931    Return number of instructions not written out.  */
    932 
    933 static int
    934 write_2_short (struct d30v_insn *opcode1,
    935 	       long long insn1,
    936 	       struct d30v_insn *opcode2,
    937 	       long long insn2,
    938 	       exec_type_enum exec_type,
    939 	       Fixups *fx)
    940 {
    941   long long insn = NOP2;
    942   char *f;
    943   int i, j, where;
    944 
    945   if (exec_type == EXEC_SEQ
    946       && (opcode1->op->flags_used & (FLAG_JMP | FLAG_JSR))
    947       && ((opcode1->op->flags_used & FLAG_DELAY) == 0)
    948       && ((opcode1->ecc == ECC_AL) || ! Optimizing))
    949     {
    950       /* Unconditional, non-delayed branches kill instructions in
    951 	 the right bin.  Conditional branches don't always but if
    952 	 we are not optimizing, then we have been asked to produce
    953 	 an error about such constructs.  For the purposes of this
    954 	 test, subroutine calls are considered to be branches.  */
    955       write_1_short (opcode1, insn1, fx->next, FALSE);
    956       return 1;
    957     }
    958 
    959   /* Note: we do not have to worry about subroutine calls occurring
    960      in the right hand container.  The return address is always
    961      aligned to the next 64 bit boundary, be that 64 or 32 bit away.  */
    962   switch (exec_type)
    963     {
    964     case EXEC_UNKNOWN:	/* Order not specified.  */
    965       if (Optimizing
    966 	  && parallel_ok (opcode1, insn1, opcode2, insn2, exec_type)
    967 	  && ! (   (opcode1->op->unit == EITHER_BUT_PREFER_MU
    968 		 || opcode1->op->unit == MU)
    969 		&&
    970 		(   opcode2->op->unit == EITHER_BUT_PREFER_MU
    971 		 || opcode2->op->unit == MU)))
    972 	{
    973 	  /* Parallel.  */
    974 	  exec_type = EXEC_PARALLEL;
    975 
    976 	  if (opcode1->op->unit == IU
    977 	      || opcode2->op->unit == MU
    978 	      || opcode2->op->unit == EITHER_BUT_PREFER_MU)
    979 	    insn = FM00 | (insn2 << 32) | insn1;
    980 	  else
    981 	    {
    982 	      insn = FM00 | (insn1 << 32) | insn2;
    983 	      fx = fx->next;
    984 	    }
    985 	}
    986       else if ((opcode1->op->flags_used & (FLAG_JMP | FLAG_JSR)
    987 		&& ((opcode1->op->flags_used & FLAG_DELAY) == 0))
    988 	       || opcode1->op->flags_used & FLAG_RP)
    989 	{
    990 	  /* We must emit (non-delayed) branch type instructions
    991 	     on their own with nothing in the right container.  */
    992 	  /* We must treat repeat instructions likewise, since the
    993 	     following instruction has to be separate from the repeat
    994 	     in order to be repeated.  */
    995 	  write_1_short (opcode1, insn1, fx->next, FALSE);
    996 	  return 1;
    997 	}
    998       else if (prev_left_kills_right_p)
    999 	{
   1000 	  /* The left instruction kils the right slot, so we
   1001 	     must leave it empty.  */
   1002 	  write_1_short (opcode1, insn1, fx->next, FALSE);
   1003 	  return 1;
   1004 	}
   1005       else if (opcode1->op->unit == IU)
   1006 	{
   1007 	  if (opcode2->op->unit == EITHER_BUT_PREFER_MU)
   1008 	    {
   1009 	      /* Case 103810 is a request from Mitsubishi that opcodes
   1010 		 with EITHER_BUT_PREFER_MU should not be executed in
   1011 		 reverse sequential order.  */
   1012 	      write_1_short (opcode1, insn1, fx->next, FALSE);
   1013 	      return 1;
   1014 	    }
   1015 
   1016 	  /* Reverse sequential.  */
   1017 	  insn = FM10 | (insn2 << 32) | insn1;
   1018 	  exec_type = EXEC_REVSEQ;
   1019 	}
   1020       else
   1021 	{
   1022 	  /* Sequential.  */
   1023 	  insn = FM01 | (insn1 << 32) | insn2;
   1024 	  fx = fx->next;
   1025 	  exec_type = EXEC_SEQ;
   1026 	}
   1027       break;
   1028 
   1029     case EXEC_PARALLEL:	/* Parallel.  */
   1030       flag_explicitly_parallel = flag_xp_state;
   1031       if (! parallel_ok (opcode1, insn1, opcode2, insn2, exec_type))
   1032 	as_bad (_("Instructions may not be executed in parallel"));
   1033       else if (opcode1->op->unit == IU)
   1034 	{
   1035 	  if (opcode2->op->unit == IU)
   1036 	    as_bad (_("Two IU instructions may not be executed in parallel"));
   1037 	  as_warn (_("Swapping instruction order"));
   1038 	  insn = FM00 | (insn2 << 32) | insn1;
   1039 	}
   1040       else if (opcode2->op->unit == MU)
   1041 	{
   1042 	  if (opcode1->op->unit == MU)
   1043 	    as_bad (_("Two MU instructions may not be executed in parallel"));
   1044 	  else if (opcode1->op->unit == EITHER_BUT_PREFER_MU)
   1045 	    as_warn (_("Executing %s in IU may not work"), opcode1->op->name);
   1046 	  as_warn (_("Swapping instruction order"));
   1047 	  insn = FM00 | (insn2 << 32) | insn1;
   1048 	}
   1049       else
   1050 	{
   1051 	  if (opcode2->op->unit == EITHER_BUT_PREFER_MU)
   1052 	    as_warn (_("Executing %s in IU may not work in parallel execution"),
   1053 		     opcode2->op->name);
   1054 
   1055 	  insn = FM00 | (insn1 << 32) | insn2;
   1056 	  fx = fx->next;
   1057 	}
   1058       flag_explicitly_parallel = 0;
   1059       break;
   1060 
   1061     case EXEC_SEQ:	/* Sequential.  */
   1062       if (opcode1->op->unit == IU)
   1063 	as_bad (_("IU instruction may not be in the left container"));
   1064       if (prev_left_kills_right_p)
   1065 	as_bad (_("special left instruction `%s' kills instruction "
   1066 		  "`%s' in right container"),
   1067 		opcode1->op->name, opcode2->op->name);
   1068       insn = FM01 | (insn1 << 32) | insn2;
   1069       fx = fx->next;
   1070       break;
   1071 
   1072     case EXEC_REVSEQ:	/* Reverse sequential.  */
   1073       if (opcode2->op->unit == MU)
   1074 	as_bad (_("MU instruction may not be in the right container"));
   1075       if (opcode1->op->unit == EITHER_BUT_PREFER_MU)
   1076 	as_warn (_("Executing %s in reverse serial with %s may not work"),
   1077 		 opcode1->op->name, opcode2->op->name);
   1078       else if (opcode2->op->unit == EITHER_BUT_PREFER_MU)
   1079 	as_warn (_("Executing %s in IU in reverse serial may not work"),
   1080 		 opcode2->op->name);
   1081       insn = FM10 | (insn1 << 32) | insn2;
   1082       fx = fx->next;
   1083       break;
   1084 
   1085     default:
   1086       as_fatal (_("unknown execution type passed to write_2_short()"));
   1087     }
   1088 
   1089   f = frag_more (8);
   1090   d30v_number_to_chars (f, insn, 8);
   1091 
   1092   /* If the previous instruction was a 32-bit multiply but it is put into a
   1093      parallel container, mark the current instruction as being a 32-bit
   1094      multiply.  */
   1095   if (prev_mul32_p && exec_type == EXEC_PARALLEL)
   1096     cur_mul32_p = 1;
   1097 
   1098   for (j = 0; j < 2; j++)
   1099     {
   1100       for (i = 0; i < fx->fc; i++)
   1101 	{
   1102 	  if (fx->fix[i].reloc)
   1103 	    {
   1104 	      where = (f - frag_now->fr_literal) + 4 * j;
   1105 
   1106 	      fix_new_exp (frag_now,
   1107 			   where,
   1108 			   fx->fix[i].size,
   1109 			   &(fx->fix[i].exp),
   1110 			   fx->fix[i].pcrel,
   1111 			   fx->fix[i].reloc);
   1112 	    }
   1113 	}
   1114 
   1115       fx->fc = 0;
   1116       fx = fx->next;
   1117     }
   1118 
   1119   return 0;
   1120 }
   1121 
   1122 /* Get a pointer to an entry in the format table.
   1123    It must look at all formats for an opcode and use the operands
   1124    to choose the correct one.  Return NULL on error.  */
   1125 
   1126 static struct d30v_format *
   1127 find_format (struct d30v_opcode *opcode,
   1128 	     expressionS myops[],
   1129 	     int fsize,
   1130 	     int cmp_hack)
   1131 {
   1132   int numops, match, index, i = 0, j, k;
   1133   struct d30v_format *fm;
   1134 
   1135   if (opcode == NULL)
   1136     return NULL;
   1137 
   1138   /* Get all the operands and save them as expressions.  */
   1139   numops = get_operands (myops, cmp_hack);
   1140 
   1141   while ((index = opcode->format[i++]) != 0)
   1142     {
   1143       if (fsize == FORCE_SHORT && index >= LONG)
   1144 	continue;
   1145 
   1146       if (fsize == FORCE_LONG && index < LONG)
   1147 	continue;
   1148 
   1149       fm = (struct d30v_format *) &d30v_format_table[index];
   1150       k = index;
   1151       while (fm->form == index)
   1152 	{
   1153 	  match = 1;
   1154 	  /* Now check the operands for compatibility.  */
   1155 	  for (j = 0; match && fm->operands[j]; j++)
   1156 	    {
   1157 	      int flags = d30v_operand_table[fm->operands[j]].flags;
   1158 	      int bits = d30v_operand_table[fm->operands[j]].bits;
   1159 	      int X_op = myops[j].X_op;
   1160 	      int num = myops[j].X_add_number;
   1161 
   1162 	      if (flags & OPERAND_SPECIAL)
   1163 		break;
   1164 	      else if (X_op == O_illegal)
   1165 		match = 0;
   1166 	      else if (flags & OPERAND_REG)
   1167 		{
   1168 		  if (X_op != O_register
   1169 		      || ((flags & OPERAND_ACC) && !(num & OPERAND_ACC))
   1170 		      || (!(flags & OPERAND_ACC) && (num & OPERAND_ACC))
   1171 		      || ((flags & OPERAND_FLAG) && !(num & OPERAND_FLAG))
   1172 		      || (!(flags & (OPERAND_FLAG | OPERAND_CONTROL)) && (num & OPERAND_FLAG))
   1173 		      || ((flags & OPERAND_CONTROL)
   1174 			  && !(num & (OPERAND_CONTROL | OPERAND_FLAG))))
   1175 		    match = 0;
   1176 		}
   1177 	      else if (((flags & OPERAND_MINUS)
   1178 			&& (X_op != O_absent || num != OPERAND_MINUS))
   1179 		       || ((flags & OPERAND_PLUS)
   1180 			   && (X_op != O_absent || num != OPERAND_PLUS))
   1181 		       || ((flags & OPERAND_ATMINUS)
   1182 			   && (X_op != O_absent || num != OPERAND_ATMINUS))
   1183 		       || ((flags & OPERAND_ATPAR)
   1184 			   && (X_op != O_absent || num != OPERAND_ATPAR))
   1185 		       || ((flags & OPERAND_ATSIGN)
   1186 			   && (X_op != O_absent || num != OPERAND_ATSIGN)))
   1187 		match = 0;
   1188 	      else if (flags & OPERAND_NUM)
   1189 		{
   1190 		  /* A number can be a constant or symbol expression.  */
   1191 
   1192 		  /* If we have found a register name, but that name
   1193 		     also matches a symbol, then re-parse the name as
   1194 		     an expression.  */
   1195 		  if (X_op == O_register
   1196 		      && symbol_find ((char *) myops[j].X_op_symbol))
   1197 		    {
   1198 		      input_line_pointer = (char *) myops[j].X_op_symbol;
   1199 		      expression (&myops[j]);
   1200 		    }
   1201 
   1202 		  /* Turn an expression into a symbol for later resolution.  */
   1203 		  if (X_op != O_absent && X_op != O_constant
   1204 		      && X_op != O_symbol && X_op != O_register
   1205 		      && X_op != O_big)
   1206 		    {
   1207 		      symbolS *sym = make_expr_symbol (&myops[j]);
   1208 		      myops[j].X_op = X_op = O_symbol;
   1209 		      myops[j].X_add_symbol = sym;
   1210 		      myops[j].X_add_number = num = 0;
   1211 		    }
   1212 
   1213 		  if (fm->form >= LONG)
   1214 		    {
   1215 		      /* If we're testing for a LONG format, either fits.  */
   1216 		      if (X_op != O_constant && X_op != O_symbol)
   1217 			match = 0;
   1218 		    }
   1219 		  else if (fm->form < LONG
   1220 			   && ((fsize == FORCE_SHORT && X_op == O_symbol)
   1221 			       || (fm->form == SHORT_D2 && j == 0)))
   1222 		    match = 1;
   1223 
   1224 		  /* This is the tricky part.  Will the constant or symbol
   1225 		     fit into the space in the current format?  */
   1226 		  else if (X_op == O_constant)
   1227 		    {
   1228 		      if (check_range (num, bits, flags))
   1229 			match = 0;
   1230 		    }
   1231 		  else if (X_op == O_symbol
   1232 			   && S_IS_DEFINED (myops[j].X_add_symbol)
   1233 			   && S_GET_SEGMENT (myops[j].X_add_symbol) == now_seg
   1234 			   && opcode->reloc_flag == RELOC_PCREL)
   1235 		    {
   1236 		      /* If the symbol is defined, see if the value will fit
   1237 			 into the form we're considering.  */
   1238 		      fragS *f;
   1239 		      long value;
   1240 
   1241 		      /* Calculate the current address by running through the
   1242 			 previous frags and adding our current offset.  */
   1243 		      value = 0;
   1244 		      for (f = frchain_now->frch_root; f; f = f->fr_next)
   1245 			value += f->fr_fix + f->fr_offset;
   1246 		      value = (S_GET_VALUE (myops[j].X_add_symbol) - value
   1247 			       - (obstack_next_free (&frchain_now->frch_obstack)
   1248 				  - frag_now->fr_literal));
   1249 		      if (check_range (value, bits, flags))
   1250 			match = 0;
   1251 		    }
   1252 		  else
   1253 		    match = 0;
   1254 		}
   1255 	    }
   1256 	  /* We're only done if the operands matched so far AND there
   1257 	     are no more to check.  */
   1258 	  if (match && myops[j].X_op == 0)
   1259 	    {
   1260 	      /* Final check - issue a warning if an odd numbered register
   1261 		 is used as the first register in an instruction that reads
   1262 		 or writes 2 registers.  */
   1263 
   1264 	      for (j = 0; fm->operands[j]; j++)
   1265 		if (myops[j].X_op == O_register
   1266 		    && (myops[j].X_add_number & 1)
   1267 		    && (d30v_operand_table[fm->operands[j]].flags & OPERAND_2REG))
   1268 		  as_warn (_("Odd numbered register used as target of multi-register instruction"));
   1269 
   1270 	      return fm;
   1271 	    }
   1272 	  fm = (struct d30v_format *) &d30v_format_table[++k];
   1273 	}
   1274     }
   1275   return NULL;
   1276 }
   1277 
   1278 /* Assemble a single instruction and return an opcode.
   1279    Return -1 (an invalid opcode) on error.  */
   1280 
   1281 #define NAME_BUF_LEN	20
   1282 
   1283 static long long
   1284 do_assemble (char *str,
   1285 	     struct d30v_insn *opcode,
   1286 	     int shortp,
   1287 	     int is_parallel)
   1288 {
   1289   char *op_start;
   1290   char *save;
   1291   char *op_end;
   1292   char           name[NAME_BUF_LEN];
   1293   int            cmp_hack;
   1294   int            nlen = 0;
   1295   int            fsize = (shortp ? FORCE_SHORT : 0);
   1296   expressionS    myops[6];
   1297   long long      insn;
   1298 
   1299   /* Drop leading whitespace.  */
   1300   while (*str == ' ')
   1301     str++;
   1302 
   1303   /* Find the opcode end.  */
   1304   for (op_start = op_end = str;
   1305        *op_end
   1306        && nlen < (NAME_BUF_LEN - 1)
   1307        && *op_end != '/'
   1308        && !is_end_of_line[(unsigned char) *op_end] && *op_end != ' ';
   1309        op_end++)
   1310     {
   1311       name[nlen] = TOLOWER (op_start[nlen]);
   1312       nlen++;
   1313     }
   1314 
   1315   if (nlen == 0)
   1316     return -1;
   1317 
   1318   name[nlen] = 0;
   1319 
   1320   /* If there is an execution condition code, handle it.  */
   1321   if (*op_end == '/')
   1322     {
   1323       int i = 0;
   1324       while ((i < ECC_MAX) && strncasecmp (d30v_ecc_names[i], op_end + 1, 2))
   1325 	i++;
   1326 
   1327       if (i == ECC_MAX)
   1328 	{
   1329 	  char tmp[4];
   1330 	  strncpy (tmp, op_end + 1, 2);
   1331 	  tmp[2] = 0;
   1332 	  as_bad (_("unknown condition code: %s"), tmp);
   1333 	  return -1;
   1334 	}
   1335       opcode->ecc = i;
   1336       op_end += 3;
   1337     }
   1338   else
   1339     opcode->ecc = ECC_AL;
   1340 
   1341   /* CMP and CMPU change their name based on condition codes.  */
   1342   if (!strncmp (name, "cmp", 3))
   1343     {
   1344       int p, i;
   1345       char **str = (char **) d30v_cc_names;
   1346       if (name[3] == 'u')
   1347 	p = 4;
   1348       else
   1349 	p = 3;
   1350 
   1351       for (i = 1; *str && strncmp (*str, &name[p], 2); i++, str++)
   1352 	;
   1353 
   1354       /* cmpu only supports some condition codes.  */
   1355       if (p == 4)
   1356 	{
   1357 	  if (i < 3 || i > 6)
   1358 	    {
   1359 	      name[p + 2] = 0;
   1360 	      as_bad (_("cmpu doesn't support condition code %s"), &name[p]);
   1361 	    }
   1362 	}
   1363 
   1364       if (!*str)
   1365 	{
   1366 	  name[p + 2] = 0;
   1367 	  as_bad (_("unknown condition code: %s"), &name[p]);
   1368 	}
   1369 
   1370       cmp_hack = i;
   1371       name[p] = 0;
   1372     }
   1373   else
   1374     cmp_hack = 0;
   1375 
   1376   /* Need to look for .s or .l.  */
   1377   if (name[nlen - 2] == '.')
   1378     {
   1379       switch (name[nlen - 1])
   1380 	{
   1381 	case 's':
   1382 	  fsize = FORCE_SHORT;
   1383 	  break;
   1384 	case 'l':
   1385 	  fsize = FORCE_LONG;
   1386 	  break;
   1387 	}
   1388       name[nlen - 2] = 0;
   1389     }
   1390 
   1391   /* Find the first opcode with the proper name.  */
   1392   opcode->op = (struct d30v_opcode *) hash_find (d30v_hash, name);
   1393   if (opcode->op == NULL)
   1394     {
   1395       as_bad (_("unknown opcode: %s"), name);
   1396       return -1;
   1397     }
   1398 
   1399   save = input_line_pointer;
   1400   input_line_pointer = op_end;
   1401   while (!(opcode->form = find_format (opcode->op, myops, fsize, cmp_hack)))
   1402     {
   1403       opcode->op++;
   1404       if (opcode->op->name == NULL || strcmp (opcode->op->name, name))
   1405 	{
   1406 	  as_bad (_("operands for opcode `%s' do not match any valid format"),
   1407 		  name);
   1408 	  return -1;
   1409 	}
   1410     }
   1411   input_line_pointer = save;
   1412 
   1413   insn = build_insn (opcode, myops);
   1414 
   1415   /* Propagate multiply status.  */
   1416   if (insn != -1)
   1417     {
   1418       if (is_parallel && prev_mul32_p)
   1419 	cur_mul32_p = 1;
   1420       else
   1421 	{
   1422 	  prev_mul32_p = cur_mul32_p;
   1423 	  cur_mul32_p  = (opcode->op->flags_used & FLAG_MUL32) != 0;
   1424 	}
   1425     }
   1426 
   1427   /* Propagate left_kills_right status.  */
   1428   if (insn != -1)
   1429     {
   1430       prev_left_kills_right_p = cur_left_kills_right_p;
   1431 
   1432       if (opcode->op->flags_set & FLAG_LKR)
   1433 	{
   1434 	  cur_left_kills_right_p = 1;
   1435 
   1436 	  if (strcmp (opcode->op->name, "mvtsys") == 0)
   1437 	    {
   1438 	      /* Left kills right for only mvtsys only for
   1439                  PSW/PSWH/PSWL/flags target.  */
   1440 	      if ((myops[0].X_op == O_register) &&
   1441 		  ((myops[0].X_add_number == OPERAND_CONTROL) || /* psw */
   1442 		   (myops[0].X_add_number == OPERAND_CONTROL+MAX_CONTROL_REG+2) || /* pswh */
   1443 		   (myops[0].X_add_number == OPERAND_CONTROL+MAX_CONTROL_REG+1) || /* pswl */
   1444 		   (myops[0].X_add_number == OPERAND_FLAG+0) || /* f0 */
   1445 		   (myops[0].X_add_number == OPERAND_FLAG+1) || /* f1 */
   1446 		   (myops[0].X_add_number == OPERAND_FLAG+2) || /* f2 */
   1447 		   (myops[0].X_add_number == OPERAND_FLAG+3) || /* f3 */
   1448 		   (myops[0].X_add_number == OPERAND_FLAG+4) || /* f4 */
   1449 		   (myops[0].X_add_number == OPERAND_FLAG+5) || /* f5 */
   1450 		   (myops[0].X_add_number == OPERAND_FLAG+6) || /* f6 */
   1451 		   (myops[0].X_add_number == OPERAND_FLAG+7))) /* f7 */
   1452 		{
   1453 		  cur_left_kills_right_p = 1;
   1454 		}
   1455 	      else
   1456 		{
   1457 		  /* Other mvtsys target registers don't kill right
   1458                      instruction.  */
   1459 		  cur_left_kills_right_p = 0;
   1460 		}
   1461 	    } /* mvtsys */
   1462 	}
   1463       else
   1464 	cur_left_kills_right_p = 0;
   1465     }
   1466 
   1467   return insn;
   1468 }
   1469 
   1470 /* Called internally to handle all alignment needs.  This takes care
   1471    of eliding calls to frag_align if'n the cached current alignment
   1472    says we've already got it, as well as taking care of the auto-aligning
   1473    labels wrt code.  */
   1474 
   1475 static void
   1476 d30v_align (int n, char *pfill, symbolS *label)
   1477 {
   1478   /* The front end is prone to changing segments out from under us
   1479      temporarily when -g is in effect.  */
   1480   int switched_seg_p = (d30v_current_align_seg != now_seg);
   1481 
   1482   /* Do not assume that if 'd30v_current_align >= n' and
   1483      '! switched_seg_p' that it is safe to avoid performing
   1484      this alignment request.  The alignment of the current frag
   1485      can be changed under our feet, for example by a .ascii
   1486      directive in the source code.  cf testsuite/gas/d30v/reloc.s  */
   1487   d30v_cleanup (FALSE);
   1488 
   1489   if (pfill == NULL)
   1490     {
   1491       if (n > 2
   1492 	  && (bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0)
   1493 	{
   1494 	  static char const nop[4] = { 0x00, 0xf0, 0x00, 0x00 };
   1495 
   1496 	  /* First, make sure we're on a four-byte boundary, in case
   1497 	     someone has been putting .byte values the text section.  */
   1498 	  if (d30v_current_align < 2 || switched_seg_p)
   1499 	    frag_align (2, 0, 0);
   1500 	  frag_align_pattern (n, nop, sizeof nop, 0);
   1501 	}
   1502       else
   1503 	frag_align (n, 0, 0);
   1504     }
   1505   else
   1506     frag_align (n, *pfill, 0);
   1507 
   1508   if (!switched_seg_p)
   1509     d30v_current_align = n;
   1510 
   1511   if (label != NULL)
   1512     {
   1513       symbolS     *sym;
   1514       int          label_seen = FALSE;
   1515       struct frag *old_frag;
   1516       valueT       old_value;
   1517       valueT       new_value;
   1518 
   1519       assert (S_GET_SEGMENT (label) == now_seg);
   1520 
   1521       old_frag  = symbol_get_frag (label);
   1522       old_value = S_GET_VALUE (label);
   1523       new_value = (valueT) frag_now_fix ();
   1524 
   1525       /* It is possible to have more than one label at a particular
   1526 	 address, especially if debugging is enabled, so we must
   1527 	 take care to adjust all the labels at this address in this
   1528 	 fragment.  To save time we search from the end of the symbol
   1529 	 list, backwards, since the symbols we are interested in are
   1530 	 almost certainly the ones that were most recently added.
   1531 	 Also to save time we stop searching once we have seen at least
   1532 	 one matching label, and we encounter a label that is no longer
   1533 	 in the target fragment.  Note, this search is guaranteed to
   1534 	 find at least one match when sym == label, so no special case
   1535 	 code is necessary.  */
   1536       for (sym = symbol_lastP; sym != NULL; sym = symbol_previous (sym))
   1537 	{
   1538 	  if (symbol_get_frag (sym) == old_frag
   1539 	      && S_GET_VALUE (sym) == old_value)
   1540 	    {
   1541 	      label_seen = TRUE;
   1542 	      symbol_set_frag (sym, frag_now);
   1543 	      S_SET_VALUE (sym, new_value);
   1544 	    }
   1545 	  else if (label_seen && symbol_get_frag (sym) != old_frag)
   1546 	    break;
   1547 	}
   1548     }
   1549 
   1550   record_alignment (now_seg, n);
   1551 }
   1552 
   1553 /* This is the main entry point for the machine-dependent assembler.
   1554    STR points to a machine-dependent instruction.  This function is
   1555    supposed to emit the frags/bytes it assembles to.  For the D30V, it
   1556    mostly handles the special VLIW parsing and packing and leaves the
   1557    difficult stuff to do_assemble ().  */
   1558 
   1559 static long long prev_insn = -1;
   1560 static struct d30v_insn prev_opcode;
   1561 static subsegT prev_subseg;
   1562 static segT prev_seg = 0;
   1563 
   1564 void
   1565 md_assemble (char *str)
   1566 {
   1567   struct d30v_insn opcode;
   1568   long long insn;
   1569   /* Execution type; parallel, etc.  */
   1570   exec_type_enum extype = EXEC_UNKNOWN;
   1571   /* Saved extype.  Used for multiline instructions.  */
   1572   static exec_type_enum etype = EXEC_UNKNOWN;
   1573   char *str2;
   1574 
   1575   if ((prev_insn != -1) && prev_seg
   1576       && ((prev_seg != now_seg) || (prev_subseg != now_subseg)))
   1577     d30v_cleanup (FALSE);
   1578 
   1579   if (d30v_current_align < 3)
   1580     d30v_align (3, NULL, d30v_last_label);
   1581   else if (d30v_current_align > 3)
   1582     d30v_current_align = 3;
   1583   d30v_last_label = NULL;
   1584 
   1585   flag_explicitly_parallel = 0;
   1586   flag_xp_state = 0;
   1587   if (etype == EXEC_UNKNOWN)
   1588     {
   1589       /* Look for the special multiple instruction separators.  */
   1590       str2 = strstr (str, "||");
   1591       if (str2)
   1592 	{
   1593 	  extype = EXEC_PARALLEL;
   1594 	  flag_xp_state = 1;
   1595 	}
   1596       else
   1597 	{
   1598 	  str2 = strstr (str, "->");
   1599 	  if (str2)
   1600 	    extype = EXEC_SEQ;
   1601 	  else
   1602 	    {
   1603 	      str2 = strstr (str, "<-");
   1604 	      if (str2)
   1605 		extype = EXEC_REVSEQ;
   1606 	    }
   1607 	}
   1608 
   1609       /* STR2 points to the separator, if one.  */
   1610       if (str2)
   1611 	{
   1612 	  *str2 = 0;
   1613 
   1614 	  /* If two instructions are present and we already have one saved,
   1615 	     then first write it out.  */
   1616 	  d30v_cleanup (FALSE);
   1617 
   1618 	  /* Assemble first instruction and save it.  */
   1619 	  prev_insn = do_assemble (str, &prev_opcode, 1, 0);
   1620 	  if (prev_insn == -1)
   1621 	    as_bad (_("Cannot assemble instruction"));
   1622 	  if (prev_opcode.form != NULL && prev_opcode.form->form >= LONG)
   1623 	    as_bad (_("First opcode is long.  Unable to mix instructions as specified."));
   1624 	  fixups = fixups->next;
   1625 	  str = str2 + 2;
   1626 	  prev_seg = now_seg;
   1627 	  prev_subseg = now_subseg;
   1628 	}
   1629     }
   1630 
   1631   insn = do_assemble (str, &opcode,
   1632 		      (extype != EXEC_UNKNOWN || etype != EXEC_UNKNOWN),
   1633 		      extype == EXEC_PARALLEL);
   1634   if (insn == -1)
   1635     {
   1636       if (extype != EXEC_UNKNOWN)
   1637 	etype = extype;
   1638       as_bad (_("Cannot assemble instruction"));
   1639       return;
   1640     }
   1641 
   1642   if (etype != EXEC_UNKNOWN)
   1643     {
   1644       extype = etype;
   1645       etype = EXEC_UNKNOWN;
   1646     }
   1647 
   1648   /* Word multiply instructions must not be followed by either a load or a
   1649      16-bit multiply instruction in the next cycle.  */
   1650   if (   (extype != EXEC_REVSEQ)
   1651       && prev_mul32_p
   1652       && (opcode.op->flags_used & (FLAG_MEM | FLAG_MUL16)))
   1653     {
   1654       /* However, load and multiply should able to be combined in a parallel
   1655 	 operation, so check for that first.  */
   1656       if (prev_insn != -1
   1657 	  && (opcode.op->flags_used & FLAG_MEM)
   1658 	  && opcode.form->form < LONG
   1659 	  && (extype == EXEC_PARALLEL || (Optimizing && extype == EXEC_UNKNOWN))
   1660 	  && parallel_ok (&prev_opcode, (long) prev_insn,
   1661 			  &opcode, (long) insn, extype)
   1662 	  && write_2_short (&prev_opcode, (long) prev_insn,
   1663 			    &opcode, (long) insn, extype, fixups) == 0)
   1664 	{
   1665 	  /* No instructions saved.  */
   1666 	  prev_insn = -1;
   1667 	  return;
   1668 	}
   1669       else
   1670 	{
   1671 	  /* Can't parallelize, flush previous instruction and emit a
   1672 	     word of NOPS, unless the previous instruction is a NOP,
   1673 	     in which case just flush it, as this will generate a word
   1674 	     of NOPs for us.  */
   1675 
   1676 	  if (prev_insn != -1 && (strcmp (prev_opcode.op->name, "nop") == 0))
   1677 	    d30v_cleanup (FALSE);
   1678 	  else
   1679 	    {
   1680 	      char *f;
   1681 
   1682 	      if (prev_insn != -1)
   1683 		d30v_cleanup (TRUE);
   1684 	      else
   1685 		{
   1686 		  f = frag_more (8);
   1687 		  d30v_number_to_chars (f, NOP2, 8);
   1688 
   1689 		  if (warn_nops == NOP_ALL || warn_nops == NOP_MULTIPLY)
   1690 		    {
   1691 		      if (opcode.op->flags_used & FLAG_MEM)
   1692 			as_warn (_("word of NOPs added between word multiply and load"));
   1693 		      else
   1694 			as_warn (_("word of NOPs added between word multiply and 16-bit multiply"));
   1695 		    }
   1696 		}
   1697 	    }
   1698 
   1699 	  extype = EXEC_UNKNOWN;
   1700 	}
   1701     }
   1702   else if (   (extype == EXEC_REVSEQ)
   1703 	   && cur_mul32_p
   1704 	   && (prev_opcode.op->flags_used & (FLAG_MEM | FLAG_MUL16)))
   1705     {
   1706       /* Can't parallelize, flush current instruction and add a
   1707          sequential NOP.  */
   1708       write_1_short (&opcode, (long) insn, fixups->next->next, TRUE);
   1709 
   1710       /* Make the previous instruction the current one.  */
   1711       extype = EXEC_UNKNOWN;
   1712       insn = prev_insn;
   1713       now_seg = prev_seg;
   1714       now_subseg = prev_subseg;
   1715       prev_insn = -1;
   1716       cur_mul32_p = prev_mul32_p;
   1717       prev_mul32_p = 0;
   1718       memcpy (&opcode, &prev_opcode, sizeof (prev_opcode));
   1719     }
   1720 
   1721   /* If this is a long instruction, write it and any previous short
   1722      instruction.  */
   1723   if (opcode.form->form >= LONG)
   1724     {
   1725       if (extype != EXEC_UNKNOWN)
   1726 	as_bad (_("Instruction uses long version, so it cannot be mixed as specified"));
   1727       d30v_cleanup (FALSE);
   1728       write_long (&opcode, insn, fixups);
   1729       prev_insn = -1;
   1730     }
   1731   else if ((prev_insn != -1)
   1732 	   && (write_2_short
   1733 	       (&prev_opcode, (long) prev_insn, &opcode,
   1734 		(long) insn, extype, fixups) == 0))
   1735     {
   1736       /* No instructions saved.  */
   1737       prev_insn = -1;
   1738     }
   1739   else
   1740     {
   1741       if (extype != EXEC_UNKNOWN)
   1742 	as_bad (_("Unable to mix instructions as specified"));
   1743 
   1744       /* Save off last instruction so it may be packed on next pass.  */
   1745       memcpy (&prev_opcode, &opcode, sizeof (prev_opcode));
   1746       prev_insn = insn;
   1747       prev_seg = now_seg;
   1748       prev_subseg = now_subseg;
   1749       fixups = fixups->next;
   1750       prev_mul32_p = cur_mul32_p;
   1751     }
   1752 }
   1753 
   1754 /* If while processing a fixup, a reloc really needs to be created,
   1755    then it is done here.  */
   1756 
   1757 arelent *
   1758 tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
   1759 {
   1760   arelent *reloc;
   1761   reloc = xmalloc (sizeof (arelent));
   1762   reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
   1763   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
   1764   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
   1765   reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
   1766   if (reloc->howto == NULL)
   1767     {
   1768       as_bad_where (fixp->fx_file, fixp->fx_line,
   1769 		    _("reloc %d not supported by object file format"),
   1770 		    (int) fixp->fx_r_type);
   1771       return NULL;
   1772     }
   1773 
   1774   reloc->addend = 0;
   1775   return reloc;
   1776 }
   1777 
   1778 int
   1779 md_estimate_size_before_relax (fragS *fragp ATTRIBUTE_UNUSED,
   1780 			       asection *seg ATTRIBUTE_UNUSED)
   1781 {
   1782   abort ();
   1783   return 0;
   1784 }
   1785 
   1786 long
   1787 md_pcrel_from_section (fixS *fixp, segT sec)
   1788 {
   1789   if (fixp->fx_addsy != (symbolS *) NULL
   1790       && (!S_IS_DEFINED (fixp->fx_addsy)
   1791 	  || (S_GET_SEGMENT (fixp->fx_addsy) != sec)))
   1792     return 0;
   1793   return fixp->fx_frag->fr_address + fixp->fx_where;
   1794 }
   1795 
   1796 /* Called after the assembler has finished parsing the input file or
   1797    after a label is defined.  Because the D30V assembler sometimes
   1798    saves short instructions to see if it can package them with the
   1799    next instruction, there may be a short instruction that still needs
   1800    written.  */
   1801 
   1802 int
   1803 d30v_cleanup (int use_sequential)
   1804 {
   1805   segT seg;
   1806   subsegT subseg;
   1807 
   1808   if (prev_insn != -1)
   1809     {
   1810       seg = now_seg;
   1811       subseg = now_subseg;
   1812       subseg_set (prev_seg, prev_subseg);
   1813       write_1_short (&prev_opcode, (long) prev_insn, fixups->next,
   1814 		     use_sequential);
   1815       subseg_set (seg, subseg);
   1816       prev_insn = -1;
   1817       if (use_sequential)
   1818 	prev_mul32_p = FALSE;
   1819     }
   1820 
   1821   return 1;
   1822 }
   1823 
   1824 /* This function is called at the start of every line.  It checks to
   1825    see if the first character is a '.', which indicates the start of a
   1826    pseudo-op.  If it is, then write out any unwritten instructions.  */
   1827 
   1828 void
   1829 d30v_start_line (void)
   1830 {
   1831   char *c = input_line_pointer;
   1832 
   1833   while (ISSPACE (*c))
   1834     c++;
   1835 
   1836   if (*c == '.')
   1837     d30v_cleanup (FALSE);
   1838 }
   1839 
   1840 static void
   1841 check_size (long value, int bits, char *file, int line)
   1842 {
   1843   int tmp, max;
   1844 
   1845   if (value < 0)
   1846     tmp = ~value;
   1847   else
   1848     tmp = value;
   1849 
   1850   max = (1 << (bits - 1)) - 1;
   1851 
   1852   if (tmp > max)
   1853     as_bad_where (file, line, _("value too large to fit in %d bits"), bits);
   1854 }
   1855 
   1856 /* d30v_frob_label() is called when after a label is recognized.  */
   1857 
   1858 void
   1859 d30v_frob_label (symbolS *lab)
   1860 {
   1861   /* Emit any pending instructions.  */
   1862   d30v_cleanup (FALSE);
   1863 
   1864   /* Update the label's address with the current output pointer.  */
   1865   symbol_set_frag (lab, frag_now);
   1866   S_SET_VALUE (lab, (valueT) frag_now_fix ());
   1867 
   1868   /* Record this label for future adjustment after we find out what
   1869      kind of data it references, and the required alignment therewith.  */
   1870   d30v_last_label = lab;
   1871 }
   1872 
   1873 /* Hook into cons for capturing alignment changes.  */
   1874 
   1875 void
   1876 d30v_cons_align (int size)
   1877 {
   1878   int log_size;
   1879 
   1880   log_size = 0;
   1881   while ((size >>= 1) != 0)
   1882     ++log_size;
   1883 
   1884   if (d30v_current_align < log_size)
   1885     d30v_align (log_size, (char *) NULL, NULL);
   1886   else if (d30v_current_align > log_size)
   1887     d30v_current_align = log_size;
   1888   d30v_last_label = NULL;
   1889 }
   1890 
   1891 void
   1892 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
   1893 {
   1894   char *where;
   1895   unsigned long insn, insn2;
   1896   long value = *valP;
   1897 
   1898   if (fixP->fx_addsy == (symbolS *) NULL)
   1899     fixP->fx_done = 1;
   1900 
   1901   /* We don't support subtracting a symbol.  */
   1902   if (fixP->fx_subsy != (symbolS *) NULL)
   1903     as_bad_where (fixP->fx_file, fixP->fx_line, _("expression too complex"));
   1904 
   1905   /* Fetch the instruction, insert the fully resolved operand
   1906      value, and stuff the instruction back again.  */
   1907   where = fixP->fx_frag->fr_literal + fixP->fx_where;
   1908   insn = bfd_getb32 ((unsigned char *) where);
   1909 
   1910   switch (fixP->fx_r_type)
   1911     {
   1912     case BFD_RELOC_8:  /* Check for a bad .byte directive.  */
   1913       if (fixP->fx_addsy != NULL)
   1914 	as_bad (_("line %d: unable to place address of symbol '%s' into a byte"),
   1915 		fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
   1916       else if (((unsigned)value) > 0xff)
   1917 	as_bad (_("line %d: unable to place value %lx into a byte"),
   1918 		fixP->fx_line, value);
   1919       else
   1920 	*(unsigned char *) where = value;
   1921       break;
   1922 
   1923     case BFD_RELOC_16:  /* Check for a bad .short directive.  */
   1924       if (fixP->fx_addsy != NULL)
   1925 	as_bad (_("line %d: unable to place address of symbol '%s' into a short"),
   1926 		fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
   1927       else if (((unsigned)value) > 0xffff)
   1928 	as_bad (_("line %d: unable to place value %lx into a short"),
   1929 		fixP->fx_line, value);
   1930       else
   1931 	bfd_putb16 ((bfd_vma) value, (unsigned char *) where);
   1932       break;
   1933 
   1934     case BFD_RELOC_64:  /* Check for a bad .quad directive.  */
   1935       if (fixP->fx_addsy != NULL)
   1936 	as_bad (_("line %d: unable to place address of symbol '%s' into a quad"),
   1937 		fixP->fx_line, S_GET_NAME (fixP->fx_addsy));
   1938       else
   1939 	{
   1940 	  bfd_putb32 ((bfd_vma) value, (unsigned char *) where);
   1941 	  bfd_putb32 (0, ((unsigned char *) where) + 4);
   1942 	}
   1943       break;
   1944 
   1945     case BFD_RELOC_D30V_6:
   1946       check_size (value, 6, fixP->fx_file, fixP->fx_line);
   1947       insn |= value & 0x3F;
   1948       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   1949       break;
   1950 
   1951     case BFD_RELOC_D30V_9_PCREL:
   1952       if (fixP->fx_where & 0x7)
   1953 	{
   1954 	  if (fixP->fx_done)
   1955 	    value += 4;
   1956 	  else
   1957 	    fixP->fx_r_type = BFD_RELOC_D30V_9_PCREL_R;
   1958 	}
   1959       check_size (value, 9, fixP->fx_file, fixP->fx_line);
   1960       insn |= ((value >> 3) & 0x3F) << 12;
   1961       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   1962       break;
   1963 
   1964     case BFD_RELOC_D30V_15:
   1965       check_size (value, 15, fixP->fx_file, fixP->fx_line);
   1966       insn |= (value >> 3) & 0xFFF;
   1967       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   1968       break;
   1969 
   1970     case BFD_RELOC_D30V_15_PCREL:
   1971       if (fixP->fx_where & 0x7)
   1972 	{
   1973 	  if (fixP->fx_done)
   1974 	    value += 4;
   1975 	  else
   1976 	    fixP->fx_r_type = BFD_RELOC_D30V_15_PCREL_R;
   1977 	}
   1978       check_size (value, 15, fixP->fx_file, fixP->fx_line);
   1979       insn |= (value >> 3) & 0xFFF;
   1980       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   1981       break;
   1982 
   1983     case BFD_RELOC_D30V_21:
   1984       check_size (value, 21, fixP->fx_file, fixP->fx_line);
   1985       insn |= (value >> 3) & 0x3FFFF;
   1986       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   1987       break;
   1988 
   1989     case BFD_RELOC_D30V_21_PCREL:
   1990       if (fixP->fx_where & 0x7)
   1991 	{
   1992 	  if (fixP->fx_done)
   1993 	    value += 4;
   1994 	  else
   1995 	    fixP->fx_r_type = BFD_RELOC_D30V_21_PCREL_R;
   1996 	}
   1997       check_size (value, 21, fixP->fx_file, fixP->fx_line);
   1998       insn |= (value >> 3) & 0x3FFFF;
   1999       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   2000       break;
   2001 
   2002     case BFD_RELOC_D30V_32:
   2003       insn2 = bfd_getb32 ((unsigned char *) where + 4);
   2004       insn |= (value >> 26) & 0x3F;		/* Top 6 bits.  */
   2005       insn2 |= ((value & 0x03FC0000) << 2);	/* Next 8 bits.  */
   2006       insn2 |= value & 0x0003FFFF;		/* Bottom 18 bits.  */
   2007       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   2008       bfd_putb32 ((bfd_vma) insn2, (unsigned char *) where + 4);
   2009       break;
   2010 
   2011     case BFD_RELOC_D30V_32_PCREL:
   2012       insn2 = bfd_getb32 ((unsigned char *) where + 4);
   2013       insn |= (value >> 26) & 0x3F;		/* Top 6 bits.  */
   2014       insn2 |= ((value & 0x03FC0000) << 2);	/* Next 8 bits.  */
   2015       insn2 |= value & 0x0003FFFF;		/* Bottom 18 bits.  */
   2016       bfd_putb32 ((bfd_vma) insn, (unsigned char *) where);
   2017       bfd_putb32 ((bfd_vma) insn2, (unsigned char *) where + 4);
   2018       break;
   2019 
   2020     case BFD_RELOC_32:
   2021       bfd_putb32 ((bfd_vma) value, (unsigned char *) where);
   2022       break;
   2023 
   2024     default:
   2025       as_bad (_("line %d: unknown relocation type: 0x%x"),
   2026 	      fixP->fx_line, fixP->fx_r_type);
   2027     }
   2028 }
   2029 
   2030 /* Handle the .align pseudo-op.  This aligns to a power of two.  We
   2031    hook here to latch the current alignment.  */
   2032 
   2033 static void
   2034 s_d30v_align (int ignore ATTRIBUTE_UNUSED)
   2035 {
   2036   int align;
   2037   char fill, *pfill = NULL;
   2038   long max_alignment = 15;
   2039 
   2040   align = get_absolute_expression ();
   2041   if (align > max_alignment)
   2042     {
   2043       align = max_alignment;
   2044       as_warn (_("Alignment too large: %d assumed"), align);
   2045     }
   2046   else if (align < 0)
   2047     {
   2048       as_warn (_("Alignment negative: 0 assumed"));
   2049       align = 0;
   2050     }
   2051 
   2052   if (*input_line_pointer == ',')
   2053     {
   2054       input_line_pointer++;
   2055       fill = get_absolute_expression ();
   2056       pfill = &fill;
   2057     }
   2058 
   2059   d30v_last_label = NULL;
   2060   d30v_align (align, pfill, NULL);
   2061 
   2062   demand_empty_rest_of_line ();
   2063 }
   2064 
   2065 /* Handle the .text pseudo-op.  This is like the usual one, but it
   2066    clears the saved last label and resets known alignment.  */
   2067 
   2068 static void
   2069 s_d30v_text (int i)
   2070 
   2071 {
   2072   s_text (i);
   2073   d30v_last_label = NULL;
   2074   d30v_current_align = 0;
   2075   d30v_current_align_seg = now_seg;
   2076 }
   2077 
   2078 /* Handle the .data pseudo-op.  This is like the usual one, but it
   2079    clears the saved last label and resets known alignment.  */
   2080 
   2081 static void
   2082 s_d30v_data (int i)
   2083 {
   2084   s_data (i);
   2085   d30v_last_label = NULL;
   2086   d30v_current_align = 0;
   2087   d30v_current_align_seg = now_seg;
   2088 }
   2089 
   2090 /* Handle the .section pseudo-op.  This is like the usual one, but it
   2091    clears the saved last label and resets known alignment.  */
   2092 
   2093 static void
   2094 s_d30v_section (int ignore)
   2095 {
   2096   obj_elf_section (ignore);
   2097   d30v_last_label = NULL;
   2098   d30v_current_align = 0;
   2099   d30v_current_align_seg = now_seg;
   2100 }
   2101 
   2102 /* The target specific pseudo-ops which we support.  */
   2103 const pseudo_typeS md_pseudo_table[] =
   2104 {
   2105   { "word", cons, 4 },
   2106   { "hword", cons, 2 },
   2107   { "align", s_d30v_align, 0 },
   2108   { "text", s_d30v_text, 0 },
   2109   { "data", s_d30v_data, 0 },
   2110   { "section", s_d30v_section, 0 },
   2111   { "section.s", s_d30v_section, 0 },
   2112   { "sect", s_d30v_section, 0 },
   2113   { "sect.s", s_d30v_section, 0 },
   2114   { NULL, NULL, 0 }
   2115 };
   2116 
   2117