Home | History | Annotate | Line # | Download | only in config
tc-vax.c revision 1.23
      1 /* tc-vax.c - vax-specific -
      2    Copyright (C) 1987-2026 Free Software Foundation, Inc.
      3 
      4    This file is part of GAS, the GNU Assembler.
      5 
      6    GAS is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3, or (at your option)
      9    any later version.
     10 
     11    GAS is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with GAS; see the file COPYING.  If not, write to the Free
     18    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
     19    02110-1301, USA.  */
     20 
     21 #include "as.h"
     22 
     23 #include "vax-inst.h"
     24 #include "obstack.h"		/* For FRAG_APPEND_1_CHAR macro in "frags.h" */
     25 #include "dw2gencfi.h"
     26 #include "subsegs.h"
     27 #include "safe-ctype.h"
     28 
     29 #ifdef OBJ_ELF
     30 #include "elf/vax.h"
     31 #endif
     32 
     33 /* These chars start a comment anywhere in a source file (except inside
     34    another comment */
     35 const char comment_chars[] = "#";
     36 
     37 /* These chars only start a comment at the beginning of a line.  */
     38 /* Note that for the VAX the are the same as comment_chars above.  */
     39 const char line_comment_chars[] = "#";
     40 
     41 const char line_separator_chars[] = ";";
     42 
     43 /* Chars that can be used to separate mant from exp in floating point nums.  */
     44 const char EXP_CHARS[] = "eE";
     45 
     46 /* Chars that mean this number is a floating point constant
     47    as in 0f123.456
     48    or    0H1.234E-12 (see exp chars above).  */
     49 const char FLT_CHARS[] = "dDfFgGhH";
     50 
     51 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
     52    changed in read.c .  Ideally it shouldn't have to know about it at all,
     53    but nothing is ideal around here.  */
     54 
     55 /* Hold details of an operand expression.  */
     56 static expressionS exp_of_operand[VIT_MAX_OPERANDS];
     57 static segT seg_of_operand[VIT_MAX_OPERANDS];
     58 
     59 /* A vax instruction after decoding.  */
     60 static struct vit v;
     61 
     62 /* Hold details of big operands.  */
     63 LITTLENUM_TYPE big_operand_bits[VIT_MAX_OPERANDS][SIZE_OF_LARGE_NUMBER];
     64 FLONUM_TYPE float_operand[VIT_MAX_OPERANDS];
     65 /* Above is made to point into big_operand_bits by md_begin().  */
     66 
     67 #ifdef OBJ_ELF
     68 #define GLOBAL_OFFSET_TABLE_NAME	"_GLOBAL_OFFSET_TABLE_"
     69 #define PROCEDURE_LINKAGE_TABLE_NAME	"_PROCEDURE_LINKAGE_TABLE_"
     70 symbolS *GOT_symbol;		/* Pre-defined "_GLOBAL_OFFSET_TABLE_".  */
     71 symbolS *PLT_symbol;		/* Pre-defined "_PROCEDURE_LINKAGE_TABLE_".  */
     72 #endif
     73 
     74 int flag_hash_long_names;	/* -+ */
     75 int flag_one;			/* -1 */
     76 int flag_show_after_trunc;	/* -H */
     77 int flag_no_hash_mixed_case;	/* -h NUM */
     78 #ifdef OBJ_ELF
     79 int flag_want_pic;		/* -k */
     80 #endif
     81 
     82 /* For VAX, relative addresses of "just the right length" are easy.
     84    The branch displacement is always the last operand, even in
     85    synthetic instructions.
     86    For VAX, we encode the relax_substateTs (in e.g. fr_substate) as:
     87 
     88   		    4       3       2       1       0	     bit number
     89   	---/ /--+-------+-------+-------+-------+-------+
     90   		|     what state ?	|  how long ?	|
     91   	---/ /--+-------+-------+-------+-------+-------+
     92 
     93    The "how long" bits are 00=byte, 01=word, 10=long.
     94    This is a Un*x convention.
     95    Not all lengths are legit for a given value of (what state).
     96    The "how long" refers merely to the displacement length.
     97    The address usually has some constant bytes in it as well.
     98 
     99  groups for VAX address relaxing.
    100 
    101  1.	"foo" pc-relative.
    102  length of byte, word, long
    103 
    104  2a.	J<cond> where <cond> is a simple flag test.
    105  length of byte, word, long.
    106  VAX opcodes are:	(Hex)
    107  bneq/bnequ	12
    108  beql/beqlu	13
    109  bgtr		14
    110  bleq		15
    111  bgeq		18
    112  blss		19
    113  bgtru		1a
    114  blequ		1b
    115  bvc		1c
    116  bvs		1d
    117  bgequ/bcc	1e
    118  blssu/bcs	1f
    119  Always, you complement 0th bit to reverse condition.
    120  Always, 1-byte opcode, then 1-byte displacement.
    121 
    122  2b.	J<cond> where cond tests a memory bit.
    123  length of byte, word, long.
    124  Vax opcodes are:	(Hex)
    125  bbs		e0
    126  bbc		e1
    127  bbss		e2
    128  bbcs		e3
    129  bbsc		e4
    130  bbcc		e5
    131  Always, you complement 0th bit to reverse condition.
    132  Always, 1-byte opcode, longword-address, byte-address, 1-byte-displacement
    133 
    134  2c.	J<cond> where cond tests low-order memory bit
    135  length of byte,word,long.
    136  Vax opcodes are:	(Hex)
    137  blbs		e8
    138  blbc		e9
    139  Always, you complement 0th bit to reverse condition.
    140  Always, 1-byte opcode, longword-address, 1-byte displacement.
    141 
    142  3.	Jbs/Jbr.
    143  length of byte,word,long.
    144  Vax opcodes are:	(Hex)
    145  bsbb		10
    146  brb		11
    147  These are like (2) but there is no condition to reverse.
    148  Always, 1 byte opcode, then displacement/absolute.
    149 
    150  4a.	JacbX
    151  length of word, long.
    152  Vax opcodes are:	(Hex)
    153  acbw		3d
    154  acbf		4f
    155  acbd		6f
    156  abcb		9d
    157  acbl		f1
    158  acbg	      4ffd
    159  acbh	      6ffd
    160  Always, we cannot reverse the sense of the branch; we have a word
    161  displacement.
    162  The double-byte op-codes don't hurt: we never want to modify the
    163  opcode, so we don't care how many bytes are between the opcode and
    164  the operand.
    165 
    166  4b.	JXobXXX
    167  length of long, long, byte.
    168  Vax opcodes are:	(Hex)
    169  aoblss		f2
    170  aobleq		f3
    171  sobgeq		f4
    172  sobgtr		f5
    173  Always, we cannot reverse the sense of the branch; we have a byte
    174  displacement.
    175 
    176  The only time we need to modify the opcode is for class 2 instructions.
    177  After relax() we may complement the lowest order bit of such instruction
    178  to reverse sense of branch.
    179 
    180  For class 2 instructions, we store context of "where is the opcode literal".
    181  We can change an opcode's lowest order bit without breaking anything else.
    182 
    183  We sometimes store context in the operand literal. This way we can figure out
    184  after relax() what the original addressing mode was.  */
    185 
    186 /* These displacements are relative to the start address of the
    188    displacement.  The first letter is Byte, Word.  2nd letter is
    189    Forward, Backward.  */
    190 #define BF (1+ 127)
    191 #define BB (1+-128)
    192 #define WF (2+ 32767)
    193 #define WB (2+-32768)
    194 /* Don't need LF, LB because they always reach. [They are coded as 0.]  */
    195 
    196 #define C(a,b) ENCODE_RELAX(a,b)
    197 /* This macro has no side-effects.  */
    198 #define ENCODE_RELAX(what,length) (((what) << 2) + (length))
    199 #define RELAX_STATE(s) ((s) >> 2)
    200 #define RELAX_LENGTH(s) ((s) & 3)
    201 
    202 const relax_typeS md_relax_table[] =
    203 {
    204   {1, 1, 0, 0},			/* error sentinel   0,0	*/
    205   {1, 1, 0, 0},			/* unused	    0,1	*/
    206   {1, 1, 0, 0},			/* unused	    0,2	*/
    207   {1, 1, 0, 0},			/* unused	    0,3	*/
    208 
    209   {BF + 1, BB + 1, 2, C (1, 1)},/* B^"foo"	    1,0 */
    210   {WF + 1, WB + 1, 3, C (1, 2)},/* W^"foo"	    1,1 */
    211   {0, 0, 5, 0},			/* L^"foo"	    1,2 */
    212   {1, 1, 0, 0},			/* unused	    1,3 */
    213 
    214   {BF, BB, 1, C (2, 1)},	/* b<cond> B^"foo"  2,0 */
    215   {WF + 2, WB + 2, 4, C (2, 2)},/* br.+? brw X	    2,1 */
    216   {0, 0, 7, 0},			/* br.+? jmp X	    2,2 */
    217   {1, 1, 0, 0},			/* unused	    2,3 */
    218 
    219   {BF, BB, 1, C (3, 1)},	/* brb B^foo	    3,0 */
    220   {WF, WB, 2, C (3, 2)},	/* brw W^foo	    3,1 */
    221   {0, 0, 5, 0},			/* Jmp L^foo	    3,2 */
    222   {1, 1, 0, 0},			/* unused	    3,3 */
    223 
    224   {1, 1, 0, 0},			/* unused	    4,0 */
    225   {WF, WB, 2, C (4, 2)},	/* acb_ ^Wfoo	    4,1 */
    226   {0, 0, 10, 0},		/* acb_,br,jmp L^foo4,2 */
    227   {1, 1, 0, 0},			/* unused	    4,3 */
    228 
    229   {BF, BB, 1, C (5, 1)},	/* Xob___,,foo      5,0 */
    230   {WF + 4, WB + 4, 6, C (5, 2)},/* Xob.+2,brb.+3,brw5,1 */
    231   {0, 0, 9, 0},			/* Xob.+2,brb.+6,jmp5,2 */
    232   {1, 1, 0, 0},			/* unused	    5,3 */
    233 };
    234 
    235 #undef C
    236 #undef BF
    237 #undef BB
    238 #undef WF
    239 #undef WB
    240 
    241 void float_cons (int);
    242 int flonum_gen2vax (int, FLONUM_TYPE *, LITTLENUM_TYPE *);
    243 
    244 const pseudo_typeS md_pseudo_table[] =
    245 {
    246   {"dfloat", float_cons, 'd'},
    247   {"ffloat", float_cons, 'f'},
    248   {"gfloat", float_cons, 'g'},
    249   {"hfloat", float_cons, 'h'},
    250   {"d_floating", float_cons, 'd'},
    251   {"f_floating", float_cons, 'f'},
    252   {"g_floating", float_cons, 'g'},
    253   {"h_floating", float_cons, 'h'},
    254   {NULL, NULL, 0},
    255 };
    256 
    257 #define STATE_PC_RELATIVE		(1)
    258 #define STATE_CONDITIONAL_BRANCH	(2)
    259 #define STATE_ALWAYS_BRANCH		(3)	/* includes BSB...  */
    260 #define STATE_COMPLEX_BRANCH	        (4)
    261 #define STATE_COMPLEX_HOP		(5)
    262 
    263 #define STATE_BYTE			(0)
    264 #define STATE_WORD			(1)
    265 #define STATE_LONG			(2)
    266 #define STATE_UNDF			(3)	/* Symbol undefined in pass1.  */
    267 
    268 #define min(a, b)	((a) < (b) ? (a) : (b))
    269 
    270 void
    272 md_number_to_chars (char con[], valueT value, int nbytes)
    273 {
    274   number_to_chars_littleendian (con, value, nbytes);
    275 }
    276 
    277 /* Fix up some data or instructions after we find out the value of a symbol
    278    that they reference.  */
    279 
    280 void				/* Knows about order of bytes in address.  */
    281 md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED)
    282 {
    283   valueT value = * valueP;
    284 
    285   if (fixP->fx_subsy != NULL)
    286     as_bad_subtract (fixP);
    287 
    288   if (fixP->fx_pcrel)
    289     {
    290       switch (fixP->fx_r_type)
    291 	{
    292 	case BFD_RELOC_32:
    293 	  /* change the relocation type to 32 bit PC-relative */
    294 	  fixP->fx_r_type = BFD_RELOC_32_PCREL;
    295 	  if (fixP->fx_addsy != NULL)
    296 	    {
    297 	      /* Hack around bfd_install_relocation brain damage.  */
    298 	      value += fixP->fx_frag->fr_address + fixP->fx_where;
    299 	    }
    300 	  if (fixP->fx_addsy == abs_section_sym)
    301 	    fixP->fx_done = 1;
    302 	  break;
    303 	default:
    304 	  break;
    305 	}
    306     }
    307 
    308   /*
    309    * Common code for pc-relative and non-pc-relative cases
    310    */
    311   if (fixP->fx_addsy == NULL)
    312     fixP->fx_done = 1;
    313 
    314   if (fixP->fx_done)
    315     number_to_chars_littleendian (fixP->fx_where + fixP->fx_frag->fr_literal,
    316 				  value, fixP->fx_size);
    317   else
    318     /* Initialise the part of an instruction frag covered by the
    319        relocation.  (Many occurrences of frag_more followed by fix_new
    320        lack any init of the frag.)  Since VAX uses RELA relocs the
    321        value we write into this field doesn't really matter.  */
    322     memset (fixP->fx_where + fixP->fx_frag->fr_literal, 0, fixP->fx_size);
    323 }
    324 
    325 /* Convert a number from VAX byte order (little endian)
    326    into host byte order.
    327    con		is the buffer to convert,
    328    nbytes	is the length of the given buffer.  */
    329 static long
    330 md_chars_to_number (unsigned char con[], int nbytes)
    331 {
    332   long retval;
    333 
    334   for (retval = 0, con += nbytes - 1; nbytes--; con--)
    335     {
    336       retval <<= BITS_PER_CHAR;
    337       retval |= *con;
    338     }
    339   return retval;
    340 }
    341 
    342 /* Copy a bignum from in to out.
    343    If the output is shorter than the input, copy lower-order
    344    littlenums.  Return 0 or the number of significant littlenums
    345    dropped.  Assumes littlenum arrays are densely packed: no unused
    346    chars between the littlenums. Uses memcpy() to move littlenums, and
    347    wants to know length (in chars) of the input bignum.  */
    348 
    349 static int
    350 bignum_copy (LITTLENUM_TYPE *in,
    351 	     int in_length,	/* in sizeof(littlenum)s */
    352 	     LITTLENUM_TYPE *out,
    353 	     int out_length	/* in sizeof(littlenum)s */)
    354 {
    355   int significant_littlenums_dropped;
    356 
    357   if (out_length < in_length)
    358     {
    359       LITTLENUM_TYPE *p;	/* -> most significant (non-zero) input
    360 				      littlenum.  */
    361 
    362       memcpy (out, in, (unsigned int) out_length << LITTLENUM_SHIFT);
    363       for (p = in + in_length - 1; p >= in; --p)
    364 	{
    365 	  if (*p)
    366 	    break;
    367 	}
    368       significant_littlenums_dropped = p - in - in_length + 1;
    369 
    370       if (significant_littlenums_dropped < 0)
    371 	significant_littlenums_dropped = 0;
    372     }
    373   else
    374     {
    375       memcpy (out, in, (unsigned int) in_length << LITTLENUM_SHIFT);
    376 
    377       if (out_length > in_length)
    378 	memset (out + in_length, 0,
    379 		(unsigned int) (out_length - in_length) << LITTLENUM_SHIFT);
    380 
    381       significant_littlenums_dropped = 0;
    382     }
    383 
    384   return significant_littlenums_dropped;
    385 }
    386 
    387 /* md_estimate_size_before_relax(), called just before relax().
    389    Any symbol that is now undefined will not become defined.
    390    Return the correct fr_subtype in the frag and the growth beyond
    391    fr_fix.  */
    392 int
    393 md_estimate_size_before_relax (fragS *fragP, segT segment)
    394 {
    395   if (RELAX_LENGTH (fragP->fr_subtype) == STATE_UNDF)
    396     {
    397       if (S_GET_SEGMENT (fragP->fr_symbol) != segment
    398 #ifdef OBJ_ELF
    399 	  || S_IS_WEAK (fragP->fr_symbol)
    400 	  || S_IS_EXTERNAL (fragP->fr_symbol)
    401 #endif
    402 	  )
    403 	{
    404 	  /* Non-relaxable cases.  */
    405 	  int reloc_type = NO_RELOC;
    406 	  char *p;
    407 	  int old_fr_fix;
    408 
    409 	  old_fr_fix = fragP->fr_fix;
    410 	  p = &fragP->fr_literal[0] + old_fr_fix;
    411 #ifdef OBJ_ELF
    412 	  /* If this is to an undefined symbol, then if it's an indirect
    413 	     reference indicate that is can mutated into a GLOB_DAT or
    414 	     JUMP_SLOT by the loader.  We restrict ourselves to no offset
    415 	     due to a limitation in the NetBSD linker.  */
    416 
    417 	  if (GOT_symbol == NULL)
    418 	    GOT_symbol = symbol_find (GLOBAL_OFFSET_TABLE_NAME);
    419 	  if (PLT_symbol == NULL)
    420 	    PLT_symbol = symbol_find (PROCEDURE_LINKAGE_TABLE_NAME);
    421 	  if ((GOT_symbol == NULL || fragP->fr_symbol != GOT_symbol)
    422 	      && (PLT_symbol == NULL || fragP->fr_symbol != PLT_symbol)
    423 	      && fragP->fr_symbol != NULL
    424 	      && flag_want_pic
    425 #ifdef OBJ_ELF
    426 	      && ELF_ST_VISIBILITY (S_GET_OTHER (fragP->fr_symbol)) != STV_HIDDEN
    427 #endif
    428 	      && (!S_IS_DEFINED (fragP->fr_symbol)
    429 	          || S_IS_WEAK (fragP->fr_symbol)
    430 	          || S_IS_EXTERNAL (fragP->fr_symbol)))
    431 	    {
    432 	      /* Indirect references cannot go through the GOT or PLT,
    433 	         let's hope they'll become local in the final link.  */
    434 	      if ((ELF_ST_VISIBILITY (S_GET_OTHER (fragP->fr_symbol))
    435 		   != STV_DEFAULT)
    436 		  || (p[0] & 0x10))
    437 		reloc_type = BFD_RELOC_32_PCREL;
    438 	      else if (((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLS
    439 		       || ((unsigned char *) fragP->fr_opcode)[0] == VAX_CALLG
    440 		       || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JSB
    441 		       || ((unsigned char *) fragP->fr_opcode)[0] == VAX_JMP
    442 #if 0 /* port-vax/59326 */
    443 		       || S_IS_FUNCTION (fragP->fr_symbol)
    444 #endif
    445 	              )
    446 		reloc_type = BFD_RELOC_32_PLT_PCREL;
    447 	      else
    448 		reloc_type = BFD_RELOC_32_GOT_PCREL;
    449 	    }
    450 #endif
    451 	  switch (RELAX_STATE (fragP->fr_subtype))
    452 	    {
    453 	    case STATE_PC_RELATIVE:
    454 	      p[0] |= VAX_PC_RELATIVE_MODE;	/* Preserve @ bit.  */
    455 	      fragP->fr_fix += 1 + 4;
    456 	      fix_new (fragP, old_fr_fix + 1, 4, fragP->fr_symbol,
    457 		       fragP->fr_offset, 1, reloc_type);
    458 	      break;
    459 
    460 	    case STATE_CONDITIONAL_BRANCH:
    461 	      *fragP->fr_opcode ^= 1;		/* Reverse sense of branch.  */
    462 	      p[0] = 6;
    463 	      p[1] = VAX_JMP;
    464 	      p[2] = VAX_PC_RELATIVE_MODE;	/* ...(PC) */
    465 	      fragP->fr_fix += 1 + 1 + 1 + 4;
    466 	      fix_new (fragP, old_fr_fix + 3, 4, fragP->fr_symbol,
    467 		       fragP->fr_offset, 1, NO_RELOC);
    468 	      break;
    469 
    470 	    case STATE_COMPLEX_BRANCH:
    471 	      p[0] = 2;
    472 	      p[1] = 0;
    473 	      p[2] = VAX_BRB;
    474 	      p[3] = 6;
    475 	      p[4] = VAX_JMP;
    476 	      p[5] = VAX_PC_RELATIVE_MODE;	/* ...(pc) */
    477 	      fragP->fr_fix += 2 + 2 + 1 + 1 + 4;
    478 	      fix_new (fragP, old_fr_fix + 6, 4, fragP->fr_symbol,
    479 		       fragP->fr_offset, 1, NO_RELOC);
    480 	      break;
    481 
    482 	    case STATE_COMPLEX_HOP:
    483 	      p[0] = 2;
    484 	      p[1] = VAX_BRB;
    485 	      p[2] = 6;
    486 	      p[3] = VAX_JMP;
    487 	      p[4] = VAX_PC_RELATIVE_MODE;	/* ...(pc) */
    488 	      fragP->fr_fix += 1 + 2 + 1 + 1 + 4;
    489 	      fix_new (fragP, old_fr_fix + 5, 4, fragP->fr_symbol,
    490 		       fragP->fr_offset, 1, NO_RELOC);
    491 	      break;
    492 
    493 	    case STATE_ALWAYS_BRANCH:
    494 	      *fragP->fr_opcode += VAX_WIDEN_LONG;
    495 	      p[0] = VAX_PC_RELATIVE_MODE;	/* ...(PC) */
    496 	      fragP->fr_fix += 1 + 4;
    497 	      fix_new (fragP, old_fr_fix + 1, 4, fragP->fr_symbol,
    498 		       fragP->fr_offset, 1, NO_RELOC);
    499 	      break;
    500 
    501 	    default:
    502 	      abort ();
    503 	    }
    504 	  frag_wane (fragP);
    505 
    506 	  /* Return the growth in the fixed part of the frag.  */
    507 	  return fragP->fr_fix - old_fr_fix;
    508 	}
    509 
    510       /* Relaxable cases.  Set up the initial guess for the variable
    511 	 part of the frag.  */
    512       switch (RELAX_STATE (fragP->fr_subtype))
    513 	{
    514 	case STATE_PC_RELATIVE:
    515 	  fragP->fr_subtype = ENCODE_RELAX (STATE_PC_RELATIVE, STATE_BYTE);
    516 	  break;
    517 	case STATE_CONDITIONAL_BRANCH:
    518 	  fragP->fr_subtype = ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE);
    519 	  break;
    520 	case STATE_COMPLEX_BRANCH:
    521 	  fragP->fr_subtype = ENCODE_RELAX (STATE_COMPLEX_BRANCH, STATE_WORD);
    522 	  break;
    523 	case STATE_COMPLEX_HOP:
    524 	  fragP->fr_subtype = ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_BYTE);
    525 	  break;
    526 	case STATE_ALWAYS_BRANCH:
    527 	  fragP->fr_subtype = ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_BYTE);
    528 	  break;
    529 	}
    530     }
    531 
    532   if (fragP->fr_subtype >= sizeof (md_relax_table) / sizeof (md_relax_table[0]))
    533     abort ();
    534 
    535   /* Return the size of the variable part of the frag.  */
    536   return md_relax_table[fragP->fr_subtype].rlx_length;
    537 }
    538 
    539 /* Called after relax() is finished.
    541    In:	Address of frag.
    542   	fr_type == rs_machine_dependent.
    543   	fr_subtype is what the address relaxed to.
    544 
    545    Out:	Any fixSs and constants are set up.
    546   	Caller will turn frag into a ".space 0".  */
    547 void
    548 md_convert_frag (bfd *headers ATTRIBUTE_UNUSED,
    549 		 segT seg ATTRIBUTE_UNUSED,
    550 		 fragS *fragP)
    551 {
    552   char *addressP;		/* -> _var to change.  */
    553   char *opcodeP;		/* -> opcode char(s) to change.  */
    554   short int extension = 0;	/* Size of relaxed address.  */
    555   /* Added to fr_fix: incl. ALL var chars.  */
    556   symbolS *symbolP;
    557   long where;
    558 
    559   know (fragP->fr_type == rs_machine_dependent);
    560   where = fragP->fr_fix;
    561   addressP = &fragP->fr_literal[0] + where;
    562   opcodeP = fragP->fr_opcode;
    563   symbolP = fragP->fr_symbol;
    564   know (symbolP);
    565 
    566   switch (fragP->fr_subtype)
    567     {
    568     case ENCODE_RELAX (STATE_PC_RELATIVE, STATE_BYTE):
    569       know (*addressP == 0 || *addressP == 0x10);	/* '@' bit.  */
    570       addressP[0] |= 0xAF;	/* Byte displacement. */
    571       fix_new (fragP, fragP->fr_fix + 1, 1, fragP->fr_symbol,
    572 	       fragP->fr_offset, 1, NO_RELOC);
    573       extension = 2;
    574       break;
    575 
    576     case ENCODE_RELAX (STATE_PC_RELATIVE, STATE_WORD):
    577       know (*addressP == 0 || *addressP == 0x10);	/* '@' bit.  */
    578       addressP[0] |= 0xCF;	/* Word displacement. */
    579       fix_new (fragP, fragP->fr_fix + 1, 2, fragP->fr_symbol,
    580 	       fragP->fr_offset, 1, NO_RELOC);
    581       extension = 3;
    582       break;
    583 
    584     case ENCODE_RELAX (STATE_PC_RELATIVE, STATE_LONG):
    585       know (*addressP == 0 || *addressP == 0x10);	/* '@' bit.  */
    586       addressP[0] |= 0xEF;	/* Long word displacement. */
    587       fix_new (fragP, fragP->fr_fix + 1, 4, fragP->fr_symbol,
    588 	       fragP->fr_offset, 1, NO_RELOC);
    589       extension = 5;
    590       break;
    591 
    592     case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_BYTE):
    593       fix_new (fragP, fragP->fr_fix, 1, fragP->fr_symbol,
    594 	       fragP->fr_offset, 1, NO_RELOC);
    595       extension = 1;
    596       break;
    597 
    598     case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_WORD):
    599       opcodeP[0] ^= 1;		/* Reverse sense of test.  */
    600       addressP[0] = 3;
    601       addressP[1] = VAX_BRW;
    602       fix_new (fragP, fragP->fr_fix + 2, 2, fragP->fr_symbol,
    603 	       fragP->fr_offset, 1, NO_RELOC);
    604       extension = 4;
    605       break;
    606 
    607     case ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, STATE_LONG):
    608       opcodeP[0] ^= 1;		/* Reverse sense of test.  */
    609       addressP[0] = 6;
    610       addressP[1] = VAX_JMP;
    611       addressP[2] = VAX_PC_RELATIVE_MODE;
    612       fix_new (fragP, fragP->fr_fix + 3, 4, fragP->fr_symbol,
    613 	       fragP->fr_offset, 1, NO_RELOC);
    614       extension = 7;
    615       break;
    616 
    617     case ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_BYTE):
    618       fix_new (fragP, fragP->fr_fix, 1, fragP->fr_symbol,
    619 	       fragP->fr_offset, 1, NO_RELOC);
    620       extension = 1;
    621       break;
    622 
    623     case ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_WORD):
    624       opcodeP[0] += VAX_WIDEN_WORD;	/* brb -> brw, bsbb -> bsbw */
    625       fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol, fragP->fr_offset,
    626 	       1, NO_RELOC);
    627       extension = 2;
    628       break;
    629 
    630     case ENCODE_RELAX (STATE_ALWAYS_BRANCH, STATE_LONG):
    631       opcodeP[0] += VAX_WIDEN_LONG;	/* brb -> jmp, bsbb -> jsb */
    632       addressP[0] = VAX_PC_RELATIVE_MODE;
    633       fix_new (fragP, fragP->fr_fix + 1, 4, fragP->fr_symbol,
    634 	       fragP->fr_offset, 1, NO_RELOC);
    635       extension = 5;
    636       break;
    637 
    638     case ENCODE_RELAX (STATE_COMPLEX_BRANCH, STATE_WORD):
    639       fix_new (fragP, fragP->fr_fix, 2, fragP->fr_symbol,
    640 	       fragP->fr_offset, 1, NO_RELOC);
    641       extension = 2;
    642       break;
    643 
    644     case ENCODE_RELAX (STATE_COMPLEX_BRANCH, STATE_LONG):
    645       addressP[0] = 2;
    646       addressP[1] = 0;
    647       addressP[2] = VAX_BRB;
    648       addressP[3] = 6;
    649       addressP[4] = VAX_JMP;
    650       addressP[5] = VAX_PC_RELATIVE_MODE;
    651       fix_new (fragP, fragP->fr_fix + 6, 4, fragP->fr_symbol,
    652 	       fragP->fr_offset, 1, NO_RELOC);
    653       extension = 10;
    654       break;
    655 
    656     case ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_BYTE):
    657       fix_new (fragP, fragP->fr_fix, 1, fragP->fr_symbol,
    658 	       fragP->fr_offset, 1, NO_RELOC);
    659       extension = 1;
    660       break;
    661 
    662     case ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_WORD):
    663       addressP[0] = 2;
    664       addressP[1] = VAX_BRB;
    665       addressP[2] = 3;
    666       addressP[3] = VAX_BRW;
    667       fix_new (fragP, fragP->fr_fix + 4, 2, fragP->fr_symbol,
    668 	       fragP->fr_offset, 1, NO_RELOC);
    669       extension = 6;
    670       break;
    671 
    672     case ENCODE_RELAX (STATE_COMPLEX_HOP, STATE_LONG):
    673       addressP[0] = 2;
    674       addressP[1] = VAX_BRB;
    675       addressP[2] = 6;
    676       addressP[3] = VAX_JMP;
    677       addressP[4] = VAX_PC_RELATIVE_MODE;
    678       fix_new (fragP, fragP->fr_fix + 5, 4, fragP->fr_symbol,
    679 	       fragP->fr_offset, 1, NO_RELOC);
    680       extension = 9;
    681       break;
    682 
    683     default:
    684       BAD_CASE (fragP->fr_subtype);
    685       break;
    686     }
    687   fragP->fr_fix += extension;
    688 }
    689 
    690 /* Translate internal format of relocation info into target format.
    691 
    692    On vax: first 4 bytes are normal unsigned long, next three bytes
    693    are symbolnum, least sig. byte first.  Last byte is broken up with
    694    the upper nibble as nuthin, bit 3 as extern, bits 2 & 1 as length, and
    695    bit 0 as pcrel.  */
    696 #ifdef comment
    697 void
    698 md_ri_to_chars (char *the_bytes, struct reloc_info_generic ri)
    699 {
    700   /* This is easy.  */
    701   md_number_to_chars (the_bytes, ri.r_address, sizeof (ri.r_address));
    702   /* Now the fun stuff.  */
    703   the_bytes[6] = (ri.r_symbolnum >> 16) & 0x0ff;
    704   the_bytes[5] = (ri.r_symbolnum >> 8) & 0x0ff;
    705   the_bytes[4] = ri.r_symbolnum & 0x0ff;
    706   the_bytes[7] = (((ri.r_extern << 3) & 0x08) | ((ri.r_length << 1) & 0x06)
    707 		  | ((ri.r_pcrel << 0) & 0x01)) & 0x0F;
    708 }
    709 
    710 #endif /* comment */
    711 
    712 /*       BUGS, GRIPES,  APOLOGIA, etc.
    713 
    714    The opcode table 'votstrs' needs to be sorted on opcode frequency.
    715    That is, AFTER we hash it with hash_...(), we want most-used opcodes
    716    to come out of the hash table faster.
    717 
    718    I am sorry to inflict yet another VAX assembler on the world, but
    719    RMS says we must do everything from scratch, to prevent pin-heads
    720    restricting this software.
    721 
    722    This is a vaguely modular set of routines in C to parse VAX
    723    assembly code using DEC mnemonics. It is NOT un*x specific.
    724 
    725    The idea here is that the assembler has taken care of all:
    726      labels
    727      macros
    728      listing
    729      pseudo-ops
    730      line continuation
    731      comments
    732      condensing any whitespace down to exactly one space
    733    and all we have to do is parse 1 line into a vax instruction
    734    partially formed. We will accept a line, and deliver:
    735      an error message (hopefully empty)
    736      a skeleton VAX instruction (tree structure)
    737      textual pointers to all the operand expressions
    738      a warning message that notes a silly operand (hopefully empty)
    739 
    740   		E D I T   H I S T O R Y
    741 
    742    17may86 Dean Elsner. Bug if line ends immediately after opcode.
    743    30apr86 Dean Elsner. New vip_op() uses arg block so change call.
    744     6jan86 Dean Elsner. Crock vip_begin() to call vip_op_defaults().
    745     2jan86 Dean Elsner. Invent synthetic opcodes.
    746   	Widen vax_opcodeT to 32 bits. Use a bit for VIT_OPCODE_SYNTHETIC,
    747   	which means this is not a real opcode, it is like a macro; it will
    748   	be relax()ed into 1 or more instructions.
    749   	Use another bit for VIT_OPCODE_SPECIAL if the op-code is not optimised
    750   	like a regular branch instruction. Option added to vip_begin():
    751   	exclude	synthetic opcodes. Invent synthetic_votstrs[].
    752    31dec85 Dean Elsner. Invent vit_opcode_nbytes.
    753   	Also make vit_opcode into a char[]. We now have n-byte vax opcodes,
    754   	so caller's don't have to know the difference between a 1-byte & a
    755   	2-byte op-code. Still need vax_opcodeT concept, so we know how
    756   	big an object must be to hold an op.code.
    757    30dec85 Dean Elsner. Widen typedef vax_opcodeT in "vax-inst.h"
    758   	because vax opcodes may be 16 bits. Our crufty C compiler was
    759   	happily initialising 8-bit vot_codes with 16-bit numbers!
    760   	(Wouldn't the 'phone company like to compress data so easily!)
    761    29dec85 Dean Elsner. New static table vax_operand_width_size[].
    762   	Invented so we know hw many bytes a "I^#42" needs in its immediate
    763   	operand. Revised struct vop in "vax-inst.h": explicitly include
    764   	byte length of each operand, and it's letter-code datum type.
    765    17nov85 Dean Elsner. Name Change.
    766   	Due to ar(1) truncating names, we learned the hard way that
    767   	"vax-inst-parse.c" -> "vax-inst-parse." dropping the "o" off
    768   	the archived object name. SO... we shortened the name of this
    769   	source file, and changed the makefile.  */
    770 
    771 /* Handle of the OPCODE hash table.  */
    772 static htab_t op_hash;
    773 
    774 /* In:	1 character, from "bdfghloqpw" being the data-type of an operand
    775   	of a vax instruction.
    776 
    777    Out:	the length of an operand of that type, in bytes.
    778   	Special branch operands types "-?!" have length 0.  */
    779 
    780 static const short int vax_operand_width_size[256] =
    781 {
    782   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    783   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    784   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    785   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    786   0, 0, 1, 0, 8, 0, 4, 8, 16, 0, 0, 0, 4, 0, 0,16,	/* ..b.d.fgh...l..o  */
    787   0, 8, 0, 0, 0, 0, 0, 2,  0, 0, 0, 0, 0, 0, 0, 0,	/* .q.....w........  */
    788   0, 0, 1, 0, 8, 0, 4, 8, 16, 0, 0, 0, 4, 0, 0,16,	/* ..b.d.fgh...l..o  */
    789   0, 8, 0, 0, 0, 0, 0, 2,  0, 0, 0, 0, 0, 0, 0, 0,	/* .q.....w........  */
    790   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    791   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    792   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    793   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    794   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    795   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    796   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    797   0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,
    798 };
    799 
    800 /* This perversion encodes all the vax opcodes as a bunch of strings.
    802    RMS says we should build our hash-table at run-time. Hmm.
    803    Please would someone arrange these in decreasing frequency of opcode?
    804    Because of the way hash_...() works, the most frequently used opcode
    805    should be textually first and so on.
    806 
    807    Input for this table was 'vax.opcodes', awk(1)ed by 'vax.opcodes.c.awk' .
    808    So change 'vax.opcodes', then re-generate this table.  */
    809 
    810 #include "opcode/vax.h"
    811 
    812 /* This is a table of optional op-codes. All of them represent
    814    'synthetic' instructions that seem popular.
    815 
    816    Here we make some pseudo op-codes. Every code has a bit set to say
    817    it is synthetic. This lets you catch them if you want to
    818    ban these opcodes. They are mnemonics for "elastic" instructions
    819    that are supposed to assemble into the fewest bytes needed to do a
    820    branch, or to do a conditional branch, or whatever.
    821 
    822    The opcode is in the usual place [low-order n*8 bits]. This means
    823    that if you mask off the bucky bits, the usual rules apply about
    824    how long the opcode is.
    825 
    826    All VAX branch displacements come at the end of the instruction.
    827    For simple branches (1-byte opcode + 1-byte displacement) the last
    828    operand is coded 'b?' where the "data type" '?' is a clue that we
    829    may reverse the sense of the branch (complement lowest order bit)
    830    and branch around a jump. This is by far the most common case.
    831    That is why the VIT_OPCODE_SYNTHETIC bit is set: it says this is
    832    a 0-byte op-code followed by 2 or more bytes of operand address.
    833 
    834    If the op-code has VIT_OPCODE_SPECIAL set, then we have a more unusual
    835    case.
    836 
    837    For JBSB & JBR the treatment is the similar, except (1) we have a 'bw'
    838    option before (2) we can directly JSB/JMP because there is no condition.
    839    These operands have 'b-' as their access/data type.
    840 
    841    That leaves a bunch of random opcodes: JACBx, JxOBxxx. In these
    842    cases, we do the same idea. JACBxxx are all marked with a 'b!'
    843    JAOBxxx & JSOBxxx are marked with a 'b:'.  */
    844 #if (VIT_OPCODE_SYNTHETIC != 0x80000000)
    845 #error "You have just broken the encoding below, which assumes the sign bit means 'I am an imaginary instruction'."
    846 #endif
    847 
    848 #if (VIT_OPCODE_SPECIAL != 0x40000000)
    849 #error "You have just broken the encoding below, which assumes the 0x40 M bit means 'I am not to be "optimised" the way normal branches are'."
    850 #endif
    851 
    852 static const struct vot
    853   synthetic_votstrs[] =
    854 {
    855   {"jbsb",	{"b-", 0xC0000010}},		/* BSD 4.2 */
    856 /* jsb used already */
    857   {"jbr",	{"b-", 0xC0000011}},		/* BSD 4.2 */
    858   {"jr",	{"b-", 0xC0000011}},		/* consistent */
    859   {"jneq",	{"b?", 0x80000012}},
    860   {"jnequ",	{"b?", 0x80000012}},
    861   {"jeql",	{"b?", 0x80000013}},
    862   {"jeqlu",	{"b?", 0x80000013}},
    863   {"jgtr",	{"b?", 0x80000014}},
    864   {"jleq",	{"b?", 0x80000015}},
    865 /* un-used opcodes here */
    866   {"jgeq",	{"b?", 0x80000018}},
    867   {"jlss",	{"b?", 0x80000019}},
    868   {"jgtru",	{"b?", 0x8000001a}},
    869   {"jlequ",	{"b?", 0x8000001b}},
    870   {"jvc",	{"b?", 0x8000001c}},
    871   {"jvs",	{"b?", 0x8000001d}},
    872   {"jgequ",	{"b?", 0x8000001e}},
    873   {"jcc",	{"b?", 0x8000001e}},
    874   {"jlssu",	{"b?", 0x8000001f}},
    875   {"jcs",	{"b?", 0x8000001f}},
    876 
    877   {"jacbw",	{"rwrwmwb!", 0xC000003d}},
    878   {"jacbf",	{"rfrfmfb!", 0xC000004f}},
    879   {"jacbd",	{"rdrdmdb!", 0xC000006f}},
    880   {"jacbb",	{"rbrbmbb!", 0xC000009d}},
    881   {"jacbl",	{"rlrlmlb!", 0xC00000f1}},
    882   {"jacbg",	{"rgrgmgb!", 0xC0004ffd}},
    883   {"jacbh",	{"rhrhmhb!", 0xC0006ffd}},
    884 
    885   {"jbs",	{"rlvbb?", 0x800000e0}},
    886   {"jbc",	{"rlvbb?", 0x800000e1}},
    887   {"jbss",	{"rlvbb?", 0x800000e2}},
    888   {"jbcs",	{"rlvbb?", 0x800000e3}},
    889   {"jbsc",	{"rlvbb?", 0x800000e4}},
    890   {"jbcc",	{"rlvbb?", 0x800000e5}},
    891   {"jbssi",	{"rlvbb?", 0x800000e6}},
    892   {"jbcci",	{"rlvbb?", 0x800000e7}},
    893   {"jlbs",	{"rlb?", 0x800000e8}},
    894   {"jlbc",	{"rlb?", 0x800000e9}},
    895 
    896   {"jaoblss",	{"rlmlb:", 0xC00000f2}},
    897   {"jaobleq",	{"rlmlb:", 0xC00000f3}},
    898   {"jsobgeq",	{"mlb:", 0xC00000f4}},
    899   {"jsobgtr",	{"mlb:", 0xC00000f5}},
    900 
    901 /* CASEx has no branch addresses in our conception of it.  */
    902 /* You should use ".word ..." statements after the "case ...".  */
    903 
    904   {"",		{"", 0}}	/* Empty is end sentinel.  */
    905 };
    906 
    907 /* Because this module is useful for both VMS and UN*X style assemblers
    909    and because of the variety of UN*X assemblers we must recognise
    910    the different conventions for assembler operand notation. For example
    911    VMS says "#42" for immediate mode, while most UN*X say "$42".
    912    We permit arbitrary sets of (single) characters to represent the
    913    3 concepts that DEC writes '#', '@', '^'.  */
    914 
    915 /* Character tests.  */
    916 #define VIP_IMMEDIATE 01	/* Character is like DEC # */
    917 #define VIP_INDIRECT  02	/* Char is like DEC @ */
    918 #define VIP_DISPLEN   04	/* Char is like DEC ^ */
    919 
    920 #define IMMEDIATEP(c)	(vip_metacharacters [(c) & 0xff] & VIP_IMMEDIATE)
    921 #define INDIRECTP(c)	(vip_metacharacters [(c) & 0xff] & VIP_INDIRECT)
    922 #define DISPLENP(c)	(vip_metacharacters [(c) & 0xff] & VIP_DISPLEN)
    923 
    924 /* We assume 8 bits per byte. Use vip_op_defaults() to set these up BEFORE we
    925    are ever called.  */
    926 
    927 #if defined(CONST_TABLE)
    928 #define _ 0,
    929 #define I VIP_IMMEDIATE,
    930 #define S VIP_INDIRECT,
    931 #define D VIP_DISPLEN,
    932 static const char
    933 vip_metacharacters[256] =
    934 {
    935   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/* ^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O*/
    936   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/* ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_ */
    937   _ _ _ _ I _ _ _ _ _ S _ _ _ _ _	/* sp !  "  #  $  %  & '  (  )  *  +  ,  -  .  / */
    938   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/*0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?*/
    939   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/*@  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O*/
    940   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/*P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _*/
    941   D _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/*`  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o*/
    942   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _	/*p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~  ^?*/
    943 
    944   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    945   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    946   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    947   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    948   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    949   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    950   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    951   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    952 };
    953 #undef _
    954 #undef I
    955 #undef S
    956 #undef D
    957 
    958 #else
    959 
    960 static char vip_metacharacters[256];
    961 
    962 static void
    963 vip_op_1 (int bit, const char *syms)
    964 {
    965   unsigned char t;
    966 
    967   while ((t = *syms++) != 0)
    968     vip_metacharacters[t] |= bit;
    969 }
    970 
    971 /* Can be called any time.  More arguments may appear in future.  */
    972 static void
    973 vip_op_defaults (const char *immediate, const char *indirect, const char *displen)
    974 {
    975   vip_op_1 (VIP_IMMEDIATE, immediate);
    976   vip_op_1 (VIP_INDIRECT, indirect);
    977   vip_op_1 (VIP_DISPLEN, displen);
    978 }
    979 
    980 #endif
    981 
    982 /* Call me once before you decode any lines.
    983    I decode votstrs into a hash table at op_hash (which I create).
    984    I return an error text or null.
    985    If you want, I will include the 'synthetic' jXXX instructions in the
    986    instruction table.
    987    You must nominate metacharacters for eg DEC's "#", "@", "^".  */
    988 
    989 static void
    990 vip_begin (int synthetic_too,		/* 1 means include jXXX op-codes.  */
    991 	   const char *immediate,
    992 	   const char *indirect,
    993 	   const char *displen)
    994 {
    995   const struct vot *vP;		/* scan votstrs */
    996 
    997   op_hash = str_htab_create ();
    998 
    999   for (vP = votstrs; *vP->vot_name; vP++)
   1000     if (str_hash_insert (op_hash, vP->vot_name, &vP->vot_detail, 0) != NULL)
   1001       as_fatal (_("duplicate %s"), vP->vot_name);
   1002 
   1003   if (synthetic_too)
   1004     for (vP = synthetic_votstrs; *vP->vot_name; vP++)
   1005       if (str_hash_insert (op_hash, vP->vot_name, &vP->vot_detail, 0) != NULL)
   1006 	as_fatal (_("duplicate %s"), vP->vot_name);
   1007 
   1008 #ifndef CONST_TABLE
   1009   vip_op_defaults (immediate, indirect, displen);
   1010 #endif
   1011 }
   1012 
   1013 /* Take 3 char.s, the last of which may be `\0` (non-existent)
   1014    and return the VAX register number that they represent.
   1015 
   1016    Return -1 if they don't form a register name. Good names return
   1017    a number from 0:15 inclusive.
   1018 
   1019    Case is not important in a name.
   1020 
   1021    Register names understood are:
   1022 
   1023   	R0
   1024   	R1
   1025   	R2
   1026   	R3
   1027   	R4
   1028   	R5
   1029   	R6
   1030    	R7
   1031   	R8
   1032   	R9
   1033   	R10
   1034   	R11
   1035   	R12	AP
   1036   	R13	FP
   1037   	R14	SP
   1038   	R15	PC  */
   1039 
   1040 #define AP 12
   1041 #define FP 13
   1042 #define SP 14
   1043 #define PC 15
   1044 
   1045 /* Returns the register number of something like '%r15' or 'ap', supplied
   1046    in four single chars. Returns -1 if the register isn't recognized,
   1047    0..15 otherwise.  */
   1048 static int
   1049 vax_reg_parse (char c1, char c2, char c3, char c4)
   1050 {
   1051   int retval = -1;
   1052 
   1053 #ifdef OBJ_ELF
   1054   if (c1 != '%')	/* Register prefixes are mandatory for ELF.  */
   1055     return retval;
   1056   c1 = c2;
   1057   c2 = c3;
   1058   c3 = c4;
   1059 #endif
   1060 #ifdef OBJ_AOUT
   1061   if (c1 == '%')	/* Register prefixes are optional under a.out.  */
   1062     {
   1063       c1 = c2;
   1064       c2 = c3;
   1065       c3 = c4;
   1066     }
   1067   else if (c3 && c4)	/* Can't be 4 characters long.  */
   1068     return retval;
   1069 #endif
   1070 
   1071   c1 = TOLOWER (c1);
   1072   c2 = TOLOWER (c2);
   1073   if (ISDIGIT (c2) && c1 == 'r')
   1074     {
   1075       retval = c2 - '0';
   1076       if (ISDIGIT (c3))
   1077 	{
   1078 	  retval = retval * 10 + c3 - '0';
   1079 	  retval = (retval > 15) ? -1 : retval;
   1080 	  /* clamp the register value to 1 hex digit */
   1081 	}
   1082       else if (c3)
   1083 	retval = -1;		/* c3 must be '\0' or a digit.  */
   1084     }
   1085   else if (c3)			/* There are no three letter regs.  */
   1086     retval = -1;
   1087   else if (c2 == 'p')
   1088     {
   1089       switch (c1)
   1090 	{
   1091 	case 's':
   1092 	  retval = SP;
   1093 	  break;
   1094 	case 'f':
   1095 	  retval = FP;
   1096 	  break;
   1097 	case 'a':
   1098 	  retval = AP;
   1099 	  break;
   1100 	default:
   1101 	  retval = -1;
   1102 	}
   1103     }
   1104   else if (c1 == 'p' && c2 == 'c')
   1105     retval = PC;
   1106   else
   1107     retval = -1;
   1108   return retval;
   1109 }
   1110 
   1111 #ifdef OBJ_AOUT
   1112 #ifndef BFD_ASSEMBLER
   1113 void
   1114 tc_aout_fix_to_chars (where, fixP, segment_address_in_file)
   1115      char *where;
   1116      fixS *fixP;
   1117      relax_addressT segment_address_in_file;
   1118 {
   1119   /*
   1120    * In: length of relocation (or of address) in chars: 1, 2 or 4.
   1121    * Out: GNU LD relocation length code: 0, 1, or 2.
   1122    */
   1123 
   1124   static const unsigned char nbytes_r_length[] = {42, 0, 1, 42, 2};
   1125   int r_symbolnum;
   1126   int r_flags;
   1127 
   1128   know (fixP->fx_addsy != NULL);
   1129 
   1130   md_number_to_chars (where,
   1131        fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file,
   1132 		      4);
   1133 
   1134   r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
   1135 		 ? S_GET_TYPE (fixP->fx_addsy)
   1136 		 : fixP->fx_addsy->sy_number);
   1137   r_flags = (fixP->fx_pcrel ? 1 : 0)
   1138       | (!S_IS_DEFINED (fixP->fx_addsy) ? 8 : 0)	/* extern */
   1139       | ((nbytes_r_length[fixP->fx_size] & 3) << 1);
   1140 
   1141   switch (fixP->fx_r_type) {
   1142 	case NO_RELOC:
   1143 		break;
   1144 	case NO_RELOC2:
   1145 		if (r_flags & 8)
   1146 		    r_flags |= 0x80;		/* setting the copy bit */
   1147 						/*   says we can convert */
   1148 						/*   to gotslot if needed */
   1149 		break;
   1150 	case RELOC_32:
   1151 		if (flag_want_pic && S_IS_EXTERNAL(fixP->fx_addsy)) {
   1152 			r_symbolnum = fixP->fx_addsy->sy_number;
   1153 			r_flags |= 8;		/* set extern bit */
   1154 		}
   1155 		break;
   1156 	case RELOC_JMP_SLOT:
   1157 		if (flag_want_pic) {
   1158 			r_flags |= 0x20;	/* set jmptable */
   1159 			r_flags &= ~0x08;	/* clear extern bit */
   1160 		}
   1161 		break;
   1162 	case RELOC_JMP_TBL:
   1163 		if (flag_want_pic) {
   1164 			r_flags |= 0x20;	/* set jmptable */
   1165 			r_flags |= 0x08;	/* set extern bit */
   1166 		}
   1167 		break;
   1168 	case RELOC_GLOB_DAT:
   1169 		if (flag_want_pic) {
   1170 			r_flags |= 0x10;	/* set baserel bit */
   1171 			r_symbolnum = fixP->fx_addsy->sy_number;
   1172 			if (S_IS_EXTERNAL(fixP->fx_addsy))
   1173 				r_flags |= 8;	/* set extern bit */
   1174 		}
   1175 		break;
   1176   }
   1177 
   1178   where[4] = (r_symbolnum >>  0) & 0xff;
   1179   where[5] = (r_symbolnum >>  8) & 0xff;
   1180   where[6] = (r_symbolnum >> 16) & 0xff;
   1181   where[7] = r_flags;
   1182 }
   1183 #endif /* !BFD_ASSEMBLER */
   1184 #endif /* OBJ_AOUT */
   1185 
   1186 /* Parse a vax operand in DEC assembler notation.
   1187    For speed, expect a string of whitespace to be reduced to a single ' '.
   1188    This is the case for GNU AS, and is easy for other DEC-compatible
   1189    assemblers.
   1190 
   1191    Knowledge about DEC VAX assembler operand notation lives here.
   1192    This doesn't even know what a register name is, except it believes
   1193    all register names are 2 or 3 characters, and lets vax_reg_parse() say
   1194    what number each name represents.
   1195    It does, however, know that PC, SP etc are special registers so it can
   1196    detect addressing modes that are silly for those registers.
   1197 
   1198    Where possible, it delivers 1 fatal or 1 warning message if the operand
   1199    is suspect. Exactly what we test for is still evolving.
   1200 
   1201    ---
   1202   	Arg block.
   1203 
   1204    There were a number of 'mismatched argument type' bugs to vip_op.
   1205    The most general solution is to typedef each (of many) arguments.
   1206    We used instead a typedef'd argument block. This is less modular
   1207    than using separate return pointers for each result, but runs faster
   1208    on most engines, and seems to keep programmers happy. It will have
   1209    to be done properly if we ever want to use vip_op as a general-purpose
   1210    module (it was designed to be).
   1211 
   1212  	G^
   1213 
   1214    Doesn't support DEC "G^" format operands. These always take 5 bytes
   1215    to express, and code as modes 8F or 9F. Reason: "G^" deprives you of
   1216    optimising to (say) a "B^" if you are lucky in the way you link.
   1217    When someone builds a linker smart enough to convert "G^" to "B^", "W^"
   1218    whenever possible, then we should implement it.
   1219    If there is some other use for "G^", feel free to code it in!
   1220 
   1221   	speed
   1222 
   1223    If I nested if()s more, I could avoid testing (*err) which would save
   1224    time, space and page faults. I didn't nest all those if()s for clarity
   1225    and because I think the mode testing can be re-arranged 1st to test the
   1226    commoner constructs 1st. Does anybody have statistics on this?
   1227 
   1228   	error messages
   1229 
   1230    In future, we should be able to 'compose' error messages in a scratch area
   1231    and give the user MUCH more informative error messages. Although this takes
   1232    a little more code at run-time, it will make this module much more self-
   1233    documenting. As an example of what sucks now: most error messages have
   1234    hardwired into them the DEC VAX metacharacters "#^@" which are nothing like
   1235    the Un*x characters "$`*", that most users will expect from this AS.
   1236 
   1237    ----
   1238 
   1239    The input is a string, ending with '\0'.
   1240 
   1241    We also require a 'hint' of what kind of operand is expected: so
   1242    we can remind caller not to write into literals for instance.
   1243 
   1244    The output is a skeletal instruction.
   1245 
   1246    The algorithm has two parts.
   1247    1. extract the syntactic features (parse off all the @^#-()+[] mode crud);
   1248    2. express the @^#-()+[] as some parameters suited to further analysis.
   1249 
   1250    2nd step is where we detect the googles of possible invalid combinations
   1251    a human (or compiler) might write. Note that if we do a half-way
   1252    decent assembler, we don't know how long to make (eg) displacement
   1253    fields when we first meet them (because they may not have defined values).
   1254    So we must wait until we know how many bits are needed for each address,
   1255    then we can know both length and opcodes of instructions.
   1256    For reason(s) above, we will pass to our caller a 'broken' instruction
   1257    of these major components, from which our caller can generate instructions:
   1258     -  displacement length      I^ S^ L^ B^ W^ unspecified
   1259     -  mode                     (many)
   1260     -  register                 R0-R15 or absent
   1261     -  index register           R0-R15 or absent
   1262     -  expression text          what we don't parse
   1263     -  error text(s)            why we couldn't understand the operand
   1264 
   1265    ----
   1266 
   1267    To decode output of this, test errtxt. If errtxt[0] == '\0', then
   1268    we had no errors that prevented parsing. Also, if we ever report
   1269    an internal bug, errtxt[0] is set non-zero. So one test tells you
   1270    if the other outputs are to be taken seriously.
   1271 
   1272    ----
   1273 
   1274    Dec defines the semantics of address modes (and values)
   1275    by a two-letter code, explained here.
   1276 
   1277      letter 1:   access type
   1278 
   1279        a         address calculation - no data access, registers forbidden
   1280        b         branch displacement
   1281        m         read - let go of bus - write back    "modify"
   1282        r         read
   1283        v         bit field address: like 'a' but registers are OK
   1284        w         write
   1285        space	 no operator (eg ".long foo") [our convention]
   1286 
   1287      letter 2:   data type (i.e. width, alignment)
   1288 
   1289        b         byte
   1290        d         double precision floating point (D format)
   1291        f         single precision floating point (F format)
   1292        g         G format floating
   1293        h         H format floating
   1294        l         longword
   1295        o         octaword
   1296        q         quadword
   1297        w         word
   1298        ?	 simple synthetic branch operand
   1299        -	 unconditional synthetic JSB/JSR operand
   1300        !	 complex synthetic branch operand
   1301 
   1302    The '-?!' letter 2's are not for external consumption. They are used
   1303    for various assemblers. Generally, all unknown widths are assumed 0.
   1304    We don't limit your choice of width character.
   1305 
   1306    DEC operands are hard work to parse. For example, '@' as the first
   1307    character means indirect (deferred) mode but elsewhere it is a shift
   1308    operator.
   1309    The long-winded explanation of how this is supposed to work is
   1310    cancelled. Read a DEC vax manual.
   1311    We try hard not to parse anything that MIGHT be part of the expression
   1312    buried in that syntax. For example if we see @...(Rn) we don't check
   1313    for '-' before the '(' because mode @-(Rn) does not exist.
   1314 
   1315    After parsing we have:
   1316 
   1317    at                     1 if leading '@' (or Un*x '*')
   1318    len                    takes one value from " bilsw". eg B^ -> 'b'.
   1319    hash                   1 if leading '#' (or Un*x '$')
   1320    expr_begin, expr_end   the expression we did not parse
   1321                           even though we don't interpret it, we make use
   1322                           of its presence or absence.
   1323    sign                   -1: -(Rn)    0: absent    +1: (Rn)+
   1324    paren                  1 if () are around register
   1325    reg                    major register number 0:15    -1 means absent
   1326    ndx                    index register number 0:15    -1 means absent
   1327 
   1328    Again, I dare not explain it: just trace ALL the code!
   1329 
   1330    Summary of vip_op outputs.
   1331 
   1332   mode	reg	len	ndx
   1333   (Rn) => @Rn
   1334   {@}Rn			5+@	n	' '	optional
   1335   branch operand		0	-1	' '	-1
   1336   S^#foo			0	-1	's'	-1
   1337   -(Rn)			7	n	' '	optional
   1338   {@}(Rn)+		8+@	n	' '	optional
   1339   {@}#foo, no S^		8+@	PC	" i"	optional
   1340   {@}{q^}{(Rn)}		10+@+q	option	" bwl"	optional  */
   1341 
   1342 /* Dissect user-input 'optext' (which is something like "@B^foo@bar(AP)[FP]:")
   1343    using the vop in vopP. vopP's vop_access and vop_width. We fill _ndx, _reg,
   1344    _mode, _short, _warn, _error, _expr_begin, _expr_end and _nbytes.  */
   1345 
   1346 static void
   1347 vip_op (char *optext, struct vop *vopP)
   1348 {
   1349   /* Track operand text forward.  */
   1350   char *p;
   1351   /* Track operand text backward.  */
   1352   char *q;
   1353   /* 1 if leading '@' ('*') seen.  */
   1354   int at;
   1355   /* one of " bilsw" */
   1356   char len;
   1357   /* 1 if leading '#' ('$') seen.  */
   1358   int hash;
   1359   /* -1, 0 or +1.  */
   1360   int sign = 0;
   1361   /* 1 if () surround register.  */
   1362   int paren = 0;
   1363   /* Register number, -1:absent.  */
   1364   int reg = 0;
   1365   /* Index register number -1:absent.  */
   1366   int ndx = 0;
   1367   /* Report illegal operand, ""==OK.  */
   1368   /* " " is a FAKE error: means we won.  */
   1369   /* ANY err that begins with ' ' is a fake.  */
   1370   /* " " is converted to "" before return.  */
   1371   const char *err;
   1372   /* Warn about weird modes pf address.  */
   1373   const char *wrn;
   1374   /* Preserve q in case we backup.  */
   1375   char *oldq = NULL;
   1376   /* Build up 4-bit operand mode here.  */
   1377   /* Note: index mode is in ndx, this is.  */
   1378   /* The major mode of operand address.  */
   1379   int mode = 0;
   1380   /* Notice how we move wrong-arg-type bugs INSIDE this module: if we
   1381      get the types wrong below, we lose at compile time rather than at
   1382      lint or run time.  */
   1383   char access_mode;		/* vop_access.  */
   1384 
   1385   access_mode = vopP->vop_access;
   1386   /* None of our code bugs (yet), no user text errors, no warnings
   1387      even.  */
   1388   err = wrn = 0;
   1389 
   1390   p = optext;
   1391 
   1392   if (is_whitespace (*p))
   1393     p++;			/* skip over whitespace */
   1394 
   1395   if ((at = INDIRECTP (*p)) != 0)
   1396     {				/* 1 if *p=='@'(or '*' for Un*x) */
   1397       p++;			/* at is determined */
   1398       if (is_whitespace (*p))
   1399 	p++;			/* skip over whitespace */
   1400     }
   1401 
   1402   /* This code is subtle. It tries to detect all legal (letter)'^'
   1403      but it doesn't waste time explicitly testing for premature '\0' because
   1404      this case is rejected as a mismatch against either (letter) or '^'.  */
   1405   {
   1406     char c;
   1407 
   1408     c = *p;
   1409     c = TOLOWER (c);
   1410     if (DISPLENP (p[1]) && strchr ("bilws", len = c))
   1411       p += 2;			/* Skip (letter) '^'.  */
   1412     else			/* No (letter) '^' seen.  */
   1413       len = ' ';		/* Len is determined.  */
   1414   }
   1415 
   1416   if (is_whitespace (*p))
   1417     p++;
   1418 
   1419   if ((hash = IMMEDIATEP (*p)) != 0)	/* 1 if *p=='#' ('$' for Un*x) */
   1420     p++;			/* Hash is determined.  */
   1421 
   1422   /* p points to what may be the beginning of an expression.
   1423      We have peeled off the front all that is peelable.
   1424      We know at, len, hash.
   1425 
   1426      Lets point q at the end of the text and parse that (backwards).  */
   1427 
   1428   for (q = p; *q; q++)
   1429     ;
   1430   q--;				/* Now q points at last char of text.  */
   1431 
   1432   if (is_whitespace (*q) && q >= p)
   1433     q--;
   1434 
   1435   /* Reverse over whitespace, but don't.  */
   1436   /* Run back over *p.  */
   1437 
   1438   /* As a matter of policy here, we look for [Rn], although both Rn and S^#
   1439      forbid [Rn]. This is because it is easy, and because only a sick
   1440      cyborg would have [...] trailing an expression in a VAX-like assembler.
   1441      A meticulous parser would first check for Rn followed by '(' or '['
   1442      and not parse a trailing ']' if it found another. We just ban expressions
   1443      ending in ']'.  */
   1444   if (*q == ']')
   1445     {
   1446       while (q >= p && *q != '[')
   1447 	q--;
   1448       /* Either q<p or we got matching '['.  */
   1449       if (q < p)
   1450 	err = _("no '[' to match ']'");
   1451       else
   1452 	{
   1453 	  /* Confusers like "[]" will eventually lose with a bad register
   1454 	   * name error. So again we don't need to check for early '\0'.  */
   1455 	  if (q[3] == ']')
   1456 	    ndx = vax_reg_parse (q[1], q[2], 0, 0);
   1457 	  else if (q[4] == ']')
   1458 	    ndx = vax_reg_parse (q[1], q[2], q[3], 0);
   1459 	  else if (q[5] == ']')
   1460 	    ndx = vax_reg_parse (q[1], q[2], q[3], q[4]);
   1461 	  else
   1462 	    ndx = -1;
   1463 	  /* Since we saw a ']' we will demand a register name in the [].
   1464 	   * If luser hasn't given us one: be rude.  */
   1465 	  if (ndx < 0)
   1466 	    err = _("bad register in []");
   1467 	  else if (ndx == PC)
   1468 	    err = _("[PC] index banned");
   1469 	  else
   1470 	    /* Point q just before "[...]".  */
   1471 	    q--;
   1472 	}
   1473     }
   1474   else
   1475     /* No ']', so no iNDeX register.  */
   1476     ndx = -1;
   1477 
   1478   /* If err = "..." then we lost: run away.
   1479      Otherwise ndx == -1 if there was no "[...]".
   1480      Otherwise, ndx is index register number, and q points before "[...]".  */
   1481 
   1482   if (is_whitespace (*q) && q >= p)
   1483     q--;
   1484   /* Reverse over whitespace, but don't.  */
   1485   /* Run back over *p.  */
   1486   if (!err || !*err)
   1487     {
   1488       /* no ()+ or -() seen yet */
   1489       sign = 0;
   1490 
   1491       if (q > p + 3 && *q == '+' && q[-1] == ')')
   1492 	{
   1493 	  sign = 1;		/* we saw a ")+" */
   1494 	  q--;			/* q points to ')' */
   1495 	}
   1496 
   1497       if (*q == ')' && q > p + 2)
   1498 	{
   1499 	  paren = 1;		/* assume we have "(...)" */
   1500 	  while (q >= p && *q != '(')
   1501 	    q--;
   1502 	  /* either q<p or we got matching '(' */
   1503 	  if (q < p)
   1504 	    err = _("no '(' to match ')'");
   1505 	  else
   1506 	    {
   1507 	      /* Confusers like "()" will eventually lose with a bad register
   1508 	         name error. So again we don't need to check for early '\0'.  */
   1509 	      if (q[3] == ')')
   1510 		reg = vax_reg_parse (q[1], q[2], 0, 0);
   1511 	      else if (q[4] == ')')
   1512 		reg = vax_reg_parse (q[1], q[2], q[3], 0);
   1513 	      else if (q[5] == ')')
   1514 		reg = vax_reg_parse (q[1], q[2], q[3], q[4]);
   1515 	      else
   1516 		reg = -1;
   1517 	      /* Since we saw a ')' we will demand a register name in the ')'.
   1518 	         This is nasty: why can't our hypothetical assembler permit
   1519 	         parenthesised expressions? BECAUSE I AM LAZY! That is why.
   1520 	         Abuse luser if we didn't spy a register name.  */
   1521 	      if (reg < 0)
   1522 		{
   1523 		  /* JF allow parenthesized expressions.  I hope this works.  */
   1524 		  paren = 0;
   1525 		  while (*q != ')')
   1526 		    q++;
   1527 		  /* err = "unknown register in ()"; */
   1528 		}
   1529 	      else
   1530 		q--;		/* point just before '(' of "(...)" */
   1531 	      /* If err == "..." then we lost. Run away.
   1532 	         Otherwise if reg >= 0 then we saw (Rn).  */
   1533 	    }
   1534 	  /* If err == "..." then we lost.
   1535 	     Otherwise paren==1 and reg = register in "()".  */
   1536 	}
   1537       else
   1538 	paren = 0;
   1539       /* If err == "..." then we lost.
   1540          Otherwise, q points just before "(Rn)", if any.
   1541          If there was a "(...)" then paren==1, and reg is the register.  */
   1542 
   1543       /* We should only seek '-' of "-(...)" if:
   1544            we saw "(...)"                    paren == 1
   1545            we have no errors so far          ! *err
   1546            we did not see '+' of "(...)+"    sign < 1
   1547          We don't check len. We want a specific error message later if
   1548          user tries "x^...-(Rn)". This is a feature not a bug.  */
   1549       if (!err || !*err)
   1550 	{
   1551 	  if (paren && sign < 1)/* !sign is adequate test */
   1552 	    {
   1553 	      if (*q == '-')
   1554 		{
   1555 		  sign = -1;
   1556 		  q--;
   1557 		}
   1558 	    }
   1559 	  /* We have back-tracked over most
   1560 	     of the crud at the end of an operand.
   1561 	     Unless err, we know: sign, paren. If paren, we know reg.
   1562 	     The last case is of an expression "Rn".
   1563 	     This is worth hunting for if !err, !paren.
   1564 	     We wouldn't be here if err.
   1565 	     We remember to save q, in case we didn't want "Rn" anyway.  */
   1566 	  if (!paren)
   1567 	    {
   1568 	      if (is_whitespace (*q) && q >= p)
   1569 		q--;
   1570 	      /* Reverse over whitespace, but don't.  */
   1571 	      /* Run back over *p.  */
   1572 	      /* Room for Rn or Rnn (include prefix) exactly?  */
   1573 	      if (q > p && q < p + 4)
   1574 		reg = vax_reg_parse (p[0], p[1],
   1575 		  q < p + 2 ? 0 : p[2],
   1576 		  q < p + 3 ? 0 : p[3]);
   1577 	      else
   1578 		reg = -1;	/* Always comes here if no register at all.  */
   1579 	      /* Here with a definitive reg value.  */
   1580 	      if (reg >= 0)
   1581 		{
   1582 		  oldq = q;
   1583 		  q = p - 1;
   1584 		}
   1585 	    }
   1586 	}
   1587     }
   1588   /* have reg. -1:absent; else 0:15.  */
   1589 
   1590   /* We have:  err, at, len, hash, ndx, sign, paren, reg.
   1591      Also, any remaining expression is from *p through *q inclusive.
   1592      Should there be no expression, q==p-1. So expression length = q-p+1.
   1593      This completes the first part: parsing the operand text.  */
   1594 
   1595   /* We now want to boil the data down, checking consistency on the way.
   1597      We want:  len, mode, reg, ndx, err, p, q, wrn, bug.
   1598      We will deliver a 4-bit reg, and a 4-bit mode.  */
   1599 
   1600   /* Case of branch operand. Different. No L^B^W^I^S^ allowed for instance.
   1601 
   1602      in:  at	?
   1603           len	?
   1604           hash	?
   1605           p:q	?
   1606           sign  ?
   1607           paren	?
   1608           reg   ?
   1609           ndx   ?
   1610 
   1611      out: mode  0
   1612           reg   -1
   1613           len	' '
   1614           p:q	whatever was input
   1615           ndx	-1
   1616           err	" "		 or error message, and other outputs trashed.  */
   1617   /* Branch operands have restricted forms.  */
   1618   if ((!err || !*err) && access_mode == 'b')
   1619     {
   1620       if (at || hash || sign || paren || ndx >= 0 || reg >= 0 || len != ' ')
   1621 	err = _("invalid branch operand");
   1622       else
   1623 	err = " ";
   1624     }
   1625 
   1626   /* Since nobody seems to use it: comment this 'feature'(?) out for now.  */
   1627 #ifdef NEVER
   1628   /* Case of stand-alone operand. e.g. ".long foo"
   1629 
   1630      in:  at	?
   1631           len	?
   1632           hash	?
   1633           p:q	?
   1634           sign  ?
   1635           paren	?
   1636           reg   ?
   1637           ndx   ?
   1638 
   1639      out: mode  0
   1640           reg   -1
   1641           len	' '
   1642           p:q	whatever was input
   1643           ndx	-1
   1644           err	" "		 or error message, and other outputs trashed.  */
   1645   if ((!err || !*err) && access_mode == ' ')
   1646     {
   1647       if (at)
   1648 	err = _("address prohibits @");
   1649       else if (hash)
   1650 	err = _("address prohibits #");
   1651       else if (sign)
   1652 	{
   1653 	  if (sign < 0)
   1654 	    err = _("address prohibits -()");
   1655 	  else
   1656 	    err = _("address prohibits ()+");
   1657 	}
   1658       else if (paren)
   1659 	err = _("address prohibits ()");
   1660       else if (ndx >= 0)
   1661 	err = _("address prohibits []");
   1662       else if (reg >= 0)
   1663 	err = _("address prohibits register");
   1664       else if (len != ' ')
   1665 	err = _("address prohibits displacement length specifier");
   1666       else
   1667 	{
   1668 	  err = " ";	/* succeed */
   1669 	  mode = 0;
   1670 	}
   1671     }
   1672 #endif
   1673 
   1674   /* Case of S^#.
   1675 
   1676      in:  at       0
   1677           len      's'               definition
   1678           hash     1              demand
   1679           p:q                        demand not empty
   1680           sign     0                 by paren==0
   1681           paren    0             by "()" scan logic because "S^" seen
   1682           reg      -1                or nn by mistake
   1683           ndx      -1
   1684 
   1685      out: mode     0
   1686           reg      -1
   1687           len      's'
   1688           exp
   1689           ndx      -1  */
   1690   if ((!err || !*err) && len == 's')
   1691     {
   1692       if (!hash || paren || at || ndx >= 0)
   1693 	err = _("invalid operand of S^#");
   1694       else
   1695 	{
   1696 	  if (reg >= 0)
   1697 	    {
   1698 	      /* Darn! we saw S^#Rnn ! put the Rnn back in
   1699 	         expression. KLUDGE! Use oldq so we don't
   1700 	         need to know exact length of reg name.  */
   1701 	      q = oldq;
   1702 	      reg = 0;
   1703 	    }
   1704 	  /* We have all the expression we will ever get.  */
   1705 	  if (p > q)
   1706 	    err = _("S^# needs expression");
   1707 	  else if (access_mode == 'r')
   1708 	    {
   1709 	      err = " ";	/* WIN! */
   1710 	      mode = 0;
   1711 	    }
   1712 	  else
   1713 	    err = _("S^# may only read-access");
   1714 	}
   1715     }
   1716 
   1717   /* Case of -(Rn), which is weird case.
   1718 
   1719      in:  at       0
   1720           len      '
   1721           hash     0
   1722           p:q      q<p
   1723           sign     -1                by definition
   1724           paren    1              by definition
   1725           reg      present           by definition
   1726           ndx      optional
   1727 
   1728      out: mode     7
   1729           reg      present
   1730           len      ' '
   1731           exp      ""                enforce empty expression
   1732           ndx      optional          warn if same as reg.  */
   1733   if ((!err || !*err) && sign < 0)
   1734     {
   1735       if (len != ' ' || hash || at || p <= q)
   1736 	err = _("invalid operand of -()");
   1737       else
   1738 	{
   1739 	  err = " ";		/* win */
   1740 	  mode = 7;
   1741 	  if (reg == PC)
   1742 	    wrn = _("-(PC) unpredictable");
   1743 	  else if (reg == ndx)
   1744 	    wrn = _("[]index same as -()register: unpredictable");
   1745 	}
   1746     }
   1747 
   1748   /* We convert "(Rn)" to "@Rn" for our convenience.
   1749      (I hope this is convenient: has someone got a better way to parse this?)
   1750      A side-effect of this is that "@Rn" is a valid operand.  */
   1751   if (paren && !sign && !hash && !at && len == ' ' && p > q)
   1752     {
   1753       at = 1;
   1754       paren = 0;
   1755     }
   1756 
   1757   /* Case of (Rn)+, which is slightly different.
   1758 
   1759      in:  at
   1760           len      ' '
   1761           hash     0
   1762           p:q      q<p
   1763           sign     +1                by definition
   1764           paren    1              by definition
   1765           reg      present           by definition
   1766           ndx      optional
   1767 
   1768      out: mode     8+@
   1769           reg      present
   1770           len      ' '
   1771           exp      ""                enforce empty expression
   1772           ndx      optional          warn if same as reg.  */
   1773   if ((!err || !*err) && sign > 0)
   1774     {
   1775       if (len != ' ' || hash || p <= q)
   1776 	err = _("invalid operand of ()+");
   1777       else
   1778 	{
   1779 	  err = " ";		/* win */
   1780 	  mode = 8 + (at ? 1 : 0);
   1781 	  if (reg == PC)
   1782 	    wrn = _("(PC)+ unpredictable");
   1783 	  else if (reg == ndx)
   1784 	    wrn = _("[]index same as ()+register: unpredictable");
   1785 	}
   1786     }
   1787 
   1788   /* Case of #, without S^.
   1789 
   1790      in:  at
   1791           len      ' ' or 'i'
   1792           hash     1              by definition
   1793           p:q
   1794           sign     0
   1795           paren    0
   1796           reg      absent
   1797           ndx      optional
   1798 
   1799      out: mode     8+@
   1800           reg      PC
   1801           len      ' ' or 'i'
   1802           exp
   1803           ndx      optional.  */
   1804   if ((!err || !*err) && hash)
   1805     {
   1806       if (len != 'i' && len != ' ')
   1807 	err = _("# conflicts length");
   1808       else if (paren)
   1809 	err = _("# bars register");
   1810       else
   1811 	{
   1812 	  if (reg >= 0)
   1813 	    {
   1814 	      /* Darn! we saw #Rnn! Put the Rnn back into the expression.
   1815 	         By using oldq, we don't need to know how long Rnn was.
   1816 	         KLUDGE!  */
   1817 	      q = oldq;
   1818 	      reg = -1;		/* No register any more.  */
   1819 	    }
   1820 	  err = " ";		/* Win.  */
   1821 
   1822 	  /* JF a bugfix, I think!  */
   1823 	  if (at && access_mode == 'a')
   1824 	    vopP->vop_nbytes = 4;
   1825 
   1826 	  mode = (at ? 9 : 8);
   1827 	  reg = PC;
   1828 	  if ((access_mode == 'm' || access_mode == 'w') && !at)
   1829 	    wrn = _("writing or modifying # is unpredictable");
   1830 	}
   1831     }
   1832   /* If !*err, then       sign == 0
   1833                           hash == 0 */
   1834 
   1835   /* Case of Rn. We separate this one because it has a few special
   1836      errors the remaining modes lack.
   1837 
   1838      in:  at       optional
   1839           len      ' '
   1840           hash     0             by program logic
   1841           p:q      empty
   1842           sign     0                 by program logic
   1843           paren    0             by definition
   1844           reg      present           by definition
   1845           ndx      optional
   1846 
   1847      out: mode     5+@
   1848           reg      present
   1849           len      ' '               enforce no length
   1850           exp      ""                enforce empty expression
   1851           ndx      optional          warn if same as reg.  */
   1852   if ((!err || !*err) && !paren && reg >= 0)
   1853     {
   1854       if (len != ' ')
   1855 	err = _("length not needed");
   1856       else if (at)
   1857 	{
   1858 	  err = " ";		/* win */
   1859 	  mode = 6;		/* @Rn */
   1860 	}
   1861       else if (ndx >= 0)
   1862 	err = _("can't []index a register, because it has no address");
   1863       else if (access_mode == 'a')
   1864 	err = _("a register has no address");
   1865       else
   1866 	{
   1867 	  /* Idea here is to detect from length of datum
   1868 	     and from register number if we will touch PC.
   1869 	     Warn if we do.
   1870 	     vop_nbytes is number of bytes in operand.
   1871 	     Compute highest byte affected, compare to PC0.  */
   1872 	  if ((vopP->vop_nbytes + reg * 4) > 60)
   1873 	    wrn = _("PC part of operand unpredictable");
   1874 	  err = " ";		/* win */
   1875 	  mode = 5;		/* Rn */
   1876 	}
   1877     }
   1878   /* If !*err,        sign  == 0
   1879                       hash  == 0
   1880                       paren == 1  OR reg==-1  */
   1881 
   1882   /* Rest of cases fit into one bunch.
   1883 
   1884      in:  at       optional
   1885           len      ' ' or 'b' or 'w' or 'l'
   1886           hash     0             by program logic
   1887           p:q      expected          (empty is not an error)
   1888           sign     0                 by program logic
   1889           paren    optional
   1890           reg      optional
   1891           ndx      optional
   1892 
   1893      out: mode     10 + @ + len
   1894           reg      optional
   1895           len      ' ' or 'b' or 'w' or 'l'
   1896           exp                        maybe empty
   1897           ndx      optional          warn if same as reg.  */
   1898   if (!err || !*err)
   1899     {
   1900       err = " ";		/* win (always) */
   1901       mode = 10 + (at ? 1 : 0);
   1902       switch (len)
   1903 	{
   1904 	case 'l':
   1905 	  mode += 2;
   1906 	  /* Fall through.  */
   1907 	case 'w':
   1908 	  mode += 2;
   1909 	  /* Fall through.  */
   1910 	case ' ':	/* Assumed B^ until our caller changes it.  */
   1911 	case 'b':
   1912 	  break;
   1913 	}
   1914     }
   1915 
   1916   /* here with completely specified     mode
   1917     					len
   1918     					reg
   1919     					expression   p,q
   1920     					ndx.  */
   1921 
   1922   if (*err == ' ')
   1923     err = 0;			/* " " is no longer an error.  */
   1924 
   1925   vopP->vop_mode = mode;
   1926   vopP->vop_reg = reg;
   1927   vopP->vop_short = len;
   1928   vopP->vop_expr_begin = p;
   1929   vopP->vop_expr_end = q;
   1930   vopP->vop_ndx = ndx;
   1931   vopP->vop_error = err;
   1932   vopP->vop_warn = wrn;
   1933 }
   1934 
   1935 /* This converts a string into a vax instruction.
   1936    The string must be a bare single instruction in dec-vax (with BSD4 frobs)
   1937    format.
   1938    It provides some error messages: at most one fatal error message (which
   1939    stops the scan) and at most one warning message for each operand.
   1940    The vax instruction is returned in exploded form, since we have no
   1941    knowledge of how you parse (or evaluate) your expressions.
   1942    We do however strip off and decode addressing modes and operation
   1943    mnemonic.
   1944 
   1945    The exploded instruction is returned to a struct vit of your choice.
   1946    #include "vax-inst.h" to know what a struct vit is.
   1947 
   1948    This function's value is a string. If it is not "" then an internal
   1949    logic error was found: read this code to assign meaning to the string.
   1950    No argument string should generate such an error string:
   1951    it means a bug in our code, not in the user's text.
   1952 
   1953    You MUST have called vip_begin() once before using this function.  */
   1954 
   1955 static void
   1956 vip (struct vit *vitP,		/* We build an exploded instruction here.  */
   1957      char *instring)		/* Text of a vax instruction: we modify.  */
   1958 {
   1959   /* How to bit-encode this opcode.  */
   1960   struct vot_wot *vwP;
   1961   /* 1/skip whitespace.2/scan vot_how */
   1962   char *p;
   1963   char *q;
   1964   /* counts number of operands seen */
   1965   unsigned char count;
   1966   /* scan operands in struct vit */
   1967   struct vop *operandp;
   1968   /* error over all operands */
   1969   const char *alloperr;
   1970   /* Remember char, (we clobber it with '\0' temporarily).  */
   1971   char c;
   1972   /* Op-code of this instruction.  */
   1973   vax_opcodeT oc;
   1974 
   1975   if (is_whitespace (*instring))
   1976     ++instring;
   1977 
   1978   /* MUST end in end-of-string or exactly 1 space.  */
   1979   for (p = instring; *p && !is_whitespace (*p); p++)
   1980     ;
   1981 
   1982   /* Scanned up to end of operation-code.  */
   1983   /* Operation-code is ended with whitespace.  */
   1984   if (p - instring == 0)
   1985     {
   1986       vitP->vit_error = _("No operator");
   1987       count = 0;
   1988       memset (vitP->vit_opcode, '\0', sizeof (vitP->vit_opcode));
   1989     }
   1990   else
   1991     {
   1992       c = *p;
   1993       *p = '\0';
   1994       /* Here with instring pointing to what better be an op-name, and p
   1995          pointing to character just past that.
   1996          We trust instring points to an op-name, with no whitespace.  */
   1997       vwP = str_hash_find (op_hash, instring);
   1998       /* Restore char after op-code.  */
   1999       *p = c;
   2000       if (vwP == 0)
   2001 	{
   2002 	  vitP->vit_error = _("Unknown operator");
   2003 	  count = 0;
   2004 	  memset (vitP->vit_opcode, '\0', sizeof (vitP->vit_opcode));
   2005 	}
   2006       else
   2007 	{
   2008 	  /* We found a match! So let's pick up as many operands as the
   2009 	     instruction wants, and even gripe if there are too many.
   2010 	     We expect comma to separate each operand.
   2011 	     We let instring track the text, while p tracks a part of the
   2012 	     struct vot.  */
   2013 	  const char *howp;
   2014 	  /* The lines below know about 2-byte opcodes starting FD,FE or FF.
   2015 	     They also understand synthetic opcodes. Note:
   2016 	     we return 32 bits of opcode, including bucky bits, BUT
   2017 	     an opcode length is either 8 or 16 bits for vit_opcode_nbytes.  */
   2018 	  oc = vwP->vot_code;	/* The op-code.  */
   2019 	  vitP->vit_opcode_nbytes = (oc & 0xFF) >= 0xFD ? 2 : 1;
   2020 	  md_number_to_chars (vitP->vit_opcode, oc, 4);
   2021 	  count = 0;		/* No operands seen yet.  */
   2022 	  instring = p;		/* Point just past operation code.  */
   2023 	  alloperr = "";
   2024 	  for (howp = vwP->vot_how, operandp = vitP->vit_operand;
   2025 	       !(alloperr && *alloperr) && *howp;
   2026 	       operandp++, howp += 2)
   2027 	    {
   2028 	      /* Here to parse one operand. Leave instring pointing just
   2029 	         past any one ',' that marks the end of this operand.  */
   2030 	      if (!howp[1])
   2031 		as_fatal (_("odd number of bytes in operand description"));
   2032 	      else if (*instring)
   2033 		{
   2034 		  for (q = instring; (c = *q) && c != ','; q++)
   2035 		    ;
   2036 		  /* Q points to ',' or '\0' that ends argument. C is that
   2037 		     character.  */
   2038 		  *q = 0;
   2039 		  operandp->vop_width = howp[1];
   2040 		  operandp->vop_nbytes = vax_operand_width_size[(unsigned) howp[1]];
   2041 		  operandp->vop_access = howp[0];
   2042 		  vip_op (instring, operandp);
   2043 		  *q = c;	/* Restore input text.  */
   2044 		  if (operandp->vop_error)
   2045 		    alloperr = _("Bad operand");
   2046 		  instring = q + (c ? 1 : 0);	/* Next operand (if any).  */
   2047 		  count++;	/*  Won another argument, may have an operr.  */
   2048 		}
   2049 	      else
   2050 		alloperr = _("Not enough operands");
   2051 	    }
   2052 	  if (!*alloperr)
   2053 	    {
   2054 	      if (is_whitespace (*instring))
   2055 		instring++;
   2056 	      if (*instring)
   2057 		alloperr = _("Too many operands");
   2058 	    }
   2059 	  vitP->vit_error = alloperr;
   2060 	}
   2061     }
   2062   vitP->vit_operands = count;
   2063 }
   2064 
   2065 #ifdef test
   2067 
   2068 /* Test program for above.  */
   2069 
   2070 struct vit myvit;		/* Build an exploded vax instruction here.  */
   2071 char answer[100];		/* Human types a line of vax assembler here.  */
   2072 char *mybug;			/* "" or an internal logic diagnostic.  */
   2073 int mycount;			/* Number of operands.  */
   2074 struct vop *myvop;		/* Scan operands from myvit.  */
   2075 int mysynth;			/* 1 means want synthetic opcodes.  */
   2076 char my_immediate[200];
   2077 char my_indirect[200];
   2078 char my_displen[200];
   2079 
   2080 int
   2081 main (void)
   2082 {
   2083   char *p;
   2084 
   2085   printf ("0 means no synthetic instructions.   ");
   2086   printf ("Value for vip_begin?  ");
   2087   gets (answer);
   2088   sscanf (answer, "%d", &mysynth);
   2089   printf ("Synthetic opcodes %s be included.\n", mysynth ? "will" : "will not");
   2090   printf ("enter immediate symbols eg enter #   ");
   2091   gets (my_immediate);
   2092   printf ("enter indirect symbols  eg enter @   ");
   2093   gets (my_indirect);
   2094   printf ("enter displen symbols   eg enter ^   ");
   2095   gets (my_displen);
   2096 
   2097   vip_begin (mysynth, my_immediate, my_indirect, my_displen)
   2098 
   2099   printf ("An empty input line will quit you from the vax instruction parser\n");
   2100   for (;;)
   2101     {
   2102       printf ("vax instruction: ");
   2103       fflush (stdout);
   2104       gets (answer);
   2105       if (!*answer)
   2106 	break;		/* Out of for each input text loop.  */
   2107 
   2108       vip (& myvit, answer);
   2109       if (*myvit.vit_error)
   2110 	printf ("ERR:\"%s\"\n", myvit.vit_error);
   2111 
   2112       printf ("opcode=");
   2113       for (mycount = myvit.vit_opcode_nbytes, p = myvit.vit_opcode;
   2114 	   mycount;
   2115 	   mycount--, p++)
   2116 	printf ("%02x ", *p & 0xFF);
   2117 
   2118       printf ("   operand count=%d.\n", mycount = myvit.vit_operands);
   2119       for (myvop = myvit.vit_operand; mycount; mycount--, myvop++)
   2120 	{
   2121 	  printf ("mode=%xx reg=%xx ndx=%xx len='%c'=%c%c%d. expr=\"",
   2122 		  myvop->vop_mode, myvop->vop_reg, myvop->vop_ndx,
   2123 		  myvop->vop_short, myvop->vop_access, myvop->vop_width,
   2124 		  myvop->vop_nbytes);
   2125 	  for (p = myvop->vop_expr_begin; p <= myvop->vop_expr_end; p++)
   2126 	    putchar (*p);
   2127 
   2128 	  printf ("\"\n");
   2129 	  if (myvop->vop_error)
   2130 	    printf ("  err:\"%s\"\n", myvop->vop_error);
   2131 
   2132 	  if (myvop->vop_warn)
   2133 	    printf ("  wrn:\"%s\"\n", myvop->vop_warn);
   2134 	}
   2135     }
   2136   vip_end ();
   2137   exit (EXIT_SUCCESS);
   2138 }
   2139 
   2140 #endif
   2141 
   2142 #ifdef TEST			/* #Define to use this testbed.  */
   2144 
   2145 /* Follows a test program for this function.
   2146    We declare arrays non-local in case some of our tiny-minded machines
   2147    default to small stacks. Also, helps with some debuggers.  */
   2148 
   2149 char answer[100];		/* Human types into here.  */
   2150 char *p;			/*  */
   2151 char *myerr;
   2152 char *mywrn;
   2153 char *mybug;
   2154 char myaccess;
   2155 char mywidth;
   2156 char mymode;
   2157 char myreg;
   2158 char mylen;
   2159 char *myleft;
   2160 char *myright;
   2161 char myndx;
   2162 int my_operand_length;
   2163 char my_immediate[200];
   2164 char my_indirect[200];
   2165 char my_displen[200];
   2166 
   2167 int
   2168 main (void)
   2169 {
   2170   printf ("enter immediate symbols eg enter #   ");
   2171   gets (my_immediate);
   2172   printf ("enter indirect symbols  eg enter @   ");
   2173   gets (my_indirect);
   2174   printf ("enter displen symbols   eg enter ^   ");
   2175   gets (my_displen);
   2176   vip_op_defaults (my_immediate, my_indirect, my_displen);
   2177 
   2178   for (;;)
   2179     {
   2180       printf ("access,width (eg 'ab' or 'wh') [empty line to quit] :  ");
   2181       fflush (stdout);
   2182       gets (answer);
   2183       if (!answer[0])
   2184 	exit (EXIT_SUCCESS);
   2185       myaccess = answer[0];
   2186       mywidth = answer[1];
   2187       switch (mywidth)
   2188 	{
   2189 	case 'b':
   2190 	  my_operand_length = 1;
   2191 	  break;
   2192 	case 'd':
   2193 	  my_operand_length = 8;
   2194 	  break;
   2195 	case 'f':
   2196 	  my_operand_length = 4;
   2197 	  break;
   2198 	case 'g':
   2199 	  my_operand_length = 16;
   2200 	  break;
   2201 	case 'h':
   2202 	  my_operand_length = 32;
   2203 	  break;
   2204 	case 'l':
   2205 	  my_operand_length = 4;
   2206 	  break;
   2207 	case 'o':
   2208 	  my_operand_length = 16;
   2209 	  break;
   2210 	case 'q':
   2211 	  my_operand_length = 8;
   2212 	  break;
   2213 	case 'w':
   2214 	  my_operand_length = 2;
   2215 	  break;
   2216 	case '!':
   2217 	case '?':
   2218 	case '-':
   2219 	  my_operand_length = 0;
   2220 	  break;
   2221 
   2222 	default:
   2223 	  my_operand_length = 2;
   2224 	  printf ("I don't understand access width %c\n", mywidth);
   2225 	  break;
   2226 	}
   2227       printf ("VAX assembler instruction operand: ");
   2228       fflush (stdout);
   2229       gets (answer);
   2230       mybug = vip_op (answer, myaccess, mywidth, my_operand_length,
   2231 		      &mymode, &myreg, &mylen, &myleft, &myright, &myndx,
   2232 		      &myerr, &mywrn);
   2233       if (*myerr)
   2234 	{
   2235 	  printf ("error: \"%s\"\n", myerr);
   2236 	  if (*mybug)
   2237 	    printf (" bug: \"%s\"\n", mybug);
   2238 	}
   2239       else
   2240 	{
   2241 	  if (*mywrn)
   2242 	    printf ("warning: \"%s\"\n", mywrn);
   2243 	  mumble ("mode", mymode);
   2244 	  mumble ("register", myreg);
   2245 	  mumble ("index", myndx);
   2246 	  printf ("width:'%c'  ", mylen);
   2247 	  printf ("expression: \"");
   2248 	  while (myleft <= myright)
   2249 	    putchar (*myleft++);
   2250 	  printf ("\"\n");
   2251 	}
   2252     }
   2253 }
   2254 
   2255 void
   2256 mumble (char *text, int value)
   2257 {
   2258   printf ("%s:", text);
   2259   if (value >= 0)
   2260     printf ("%xx", value);
   2261   else
   2262     printf ("ABSENT");
   2263   printf ("  ");
   2264 }
   2265 
   2266 #endif
   2267 
   2268 int md_short_jump_size = 3;
   2269 int md_long_jump_size = 6;
   2270 
   2271 void
   2272 md_create_short_jump (char *ptr,
   2273 		      addressT from_addr,
   2274 		      addressT to_addr ATTRIBUTE_UNUSED,
   2275 		      fragS *frag ATTRIBUTE_UNUSED,
   2276 		      symbolS *to_symbol ATTRIBUTE_UNUSED)
   2277 {
   2278   valueT offset;
   2279 
   2280   /* This former calculation was off by two:
   2281       offset = to_addr - (from_addr + 1);
   2282      We need to account for the one byte instruction and also its
   2283      two byte operand.  */
   2284   offset = to_addr - (from_addr + 1 + 2);
   2285   *ptr++ = VAX_BRW;		/* Branch with word (16 bit) offset.  */
   2286   md_number_to_chars (ptr, offset, 2);
   2287 }
   2288 
   2289 void
   2290 md_create_long_jump (char *ptr,
   2291 		     addressT from_addr,
   2292 		     addressT to_addr,
   2293 		     fragS *frag ATTRIBUTE_UNUSED,
   2294 		     symbolS *to_symbol ATTRIBUTE_UNUSED)
   2295 {
   2296   valueT offset;
   2297 
   2298   /* Account for 1 byte instruction, 1 byte of address specifier and
   2299      4 bytes of offset from PC.  */
   2300   offset = to_addr - (from_addr + 1 + 1 + 4);
   2301   *ptr++ = VAX_JMP;
   2302   *ptr++ = VAX_PC_RELATIVE_MODE;
   2303   md_number_to_chars (ptr, offset, 4);
   2304 }
   2305 
   2306 #ifdef OBJ_ELF
   2308 const char md_shortopts[] = "d:STt:VkQ:";
   2309 #else
   2310 const char md_shortopts[] = "d:STt:V";
   2311 #endif
   2312 const struct option md_longopts[] =
   2313 {
   2314 #ifdef OBJ_ELF
   2315   { "pic", no_argument, NULL, 'k' },
   2316 #endif
   2317   { NULL, no_argument, NULL, 0 }
   2318 };
   2319 const size_t md_longopts_size = sizeof (md_longopts);
   2320 
   2321 int
   2322 md_parse_option (int c, const char *arg)
   2323 {
   2324   switch (c)
   2325     {
   2326     case 'S':
   2327       as_warn (_("SYMBOL TABLE not implemented"));
   2328       break;
   2329 
   2330     case 'T':
   2331       as_warn (_("TOKEN TRACE not implemented"));
   2332       break;
   2333 
   2334     case 'd':
   2335       as_warn (_("Displacement length %s ignored!"), arg);
   2336       break;
   2337 
   2338     case 't':
   2339       as_warn (_("I don't need or use temp. file \"%s\"."), arg);
   2340       break;
   2341 
   2342     case 'V':
   2343       as_warn (_("I don't use an interpass file! -V ignored"));
   2344       break;
   2345 
   2346 #ifdef OBJ_ELF
   2347     case 'k':
   2348       flag_want_pic = 1;
   2349       break;			/* -pic, Position Independent Code.  */
   2350 
   2351      /* -Qy, -Qn: SVR4 arguments controlling whether a .comment
   2352 	section should be emitted or not.  FIXME: Not implemented.  */
   2353     case 'Q':
   2354       break;
   2355 #endif
   2356 
   2357     default:
   2358       return 0;
   2359     }
   2360 
   2361   return 1;
   2362 }
   2363 
   2364 void
   2365 md_show_usage (FILE *stream)
   2366 {
   2367   fprintf (stream, _("\
   2368 VAX options:\n\
   2369 -d LENGTH		ignored\n\
   2370 -J			ignored\n\
   2371 -S			ignored\n\
   2372 -t FILE			ignored\n\
   2373 -T			ignored\n\
   2374 -V			ignored\n"));
   2375 #ifdef OBJ_ELF
   2376   fprintf (stream, _("\
   2377 ELF options:\n\
   2378 -k -pic			enable PIC mode\n\
   2379 -Q[y|n]			ignored\n"));
   2380 #endif
   2381 }
   2382 
   2383 /* We have no need to default values of symbols.  */
   2385 
   2386 symbolS *
   2387 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
   2388 {
   2389   return NULL;
   2390 }
   2391 
   2392 /* Round up a section size to the appropriate boundary.  */
   2393 valueT
   2394 md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
   2395 {
   2396   /* Byte alignment is fine */
   2397   return size;
   2398 }
   2399 
   2400 /* Exactly what point is a PC-relative offset relative TO?
   2401    On the vax, they're relative to the address of the offset, plus
   2402    its size. */
   2403 long
   2404 md_pcrel_from (fixS *fixP)
   2405 {
   2406   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
   2407 }
   2408 
   2409 arelent *
   2410 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
   2411 {
   2412   arelent *reloc;
   2413   bfd_reloc_code_real_type code;
   2414 
   2415   if (fixp->fx_tcbit)
   2416     abort ();
   2417 
   2418   if (fixp->fx_r_type != NO_RELOC)
   2419     {
   2420       code = fixp->fx_r_type;
   2421 
   2422       if (fixp->fx_pcrel)
   2423 	{
   2424 	  switch (code)
   2425 	    {
   2426 	    case BFD_RELOC_8_PCREL:
   2427 	    case BFD_RELOC_16_PCREL:
   2428 	    case BFD_RELOC_32_PCREL:
   2429 #ifdef OBJ_ELF
   2430 	    case BFD_RELOC_8_GOT_PCREL:
   2431 	    case BFD_RELOC_16_GOT_PCREL:
   2432 	    case BFD_RELOC_32_GOT_PCREL:
   2433 	    case BFD_RELOC_8_PLT_PCREL:
   2434 	    case BFD_RELOC_16_PLT_PCREL:
   2435 	    case BFD_RELOC_32_PLT_PCREL:
   2436 #endif
   2437 	      break;
   2438 	    default:
   2439 	      as_bad_where (fixp->fx_file, fixp->fx_line,
   2440 			    _("Cannot make %s relocation PC relative"),
   2441 			    bfd_get_reloc_code_name (code));
   2442 	    }
   2443 	}
   2444     }
   2445   else
   2446     {
   2447 #define F(SZ,PCREL)		(((SZ) << 1) + (PCREL))
   2448       switch (F (fixp->fx_size, fixp->fx_pcrel))
   2449 	{
   2450 #define MAP(SZ,PCREL,TYPE)	case F(SZ,PCREL): code = (TYPE); break
   2451 	  MAP (1, 0, BFD_RELOC_8);
   2452 	  MAP (2, 0, BFD_RELOC_16);
   2453 	  MAP (4, 0, BFD_RELOC_32);
   2454 	  MAP (1, 1, BFD_RELOC_8_PCREL);
   2455 	  MAP (2, 1, BFD_RELOC_16_PCREL);
   2456 	  MAP (4, 1, BFD_RELOC_32_PCREL);
   2457 	default:
   2458 	  abort ();
   2459 	}
   2460     }
   2461 #undef F
   2462 #undef MAP
   2463 
   2464   reloc = notes_alloc (sizeof (arelent));
   2465   reloc->sym_ptr_ptr = notes_alloc (sizeof (asymbol *));
   2466   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
   2467   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
   2468 #ifndef OBJ_ELF
   2469   if (fixp->fx_pcrel)
   2470     reloc->addend = fixp->fx_addnumber;
   2471   else
   2472     reloc->addend = 0;
   2473 #else
   2474   reloc->addend = fixp->fx_offset;
   2475 #endif
   2476 
   2477   reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
   2478   gas_assert (reloc->howto != 0);
   2479 
   2480   return reloc;
   2481 }
   2482 
   2483 /* vax:md_assemble() emit frags for 1 instruction given in textual form.  */
   2484 void
   2485 md_assemble (char *instruction_string)
   2486 {
   2487   /* Non-zero if operand expression's segment is not known yet.  */
   2488   int is_undefined;
   2489   /* Non-zero if operand expression's segment is absolute.  */
   2490   int is_absolute;
   2491   int length_code;
   2492   char *p;
   2493   /* An operand. Scans all operands.  */
   2494   struct vop *operandP;
   2495   char *save_input_line_pointer;
   2496 			/* What used to live after an expression.  */
   2497   char c_save;
   2498   /* 1: instruction_string bad for all passes.  */
   2499   int goofed;
   2500   /* Points to slot just after last operand.  */
   2501   struct vop *end_operandP;
   2502   /* Points to expression values for this operand.  */
   2503   expressionS *expP;
   2504   segT *segP;
   2505 
   2506   /* These refer to an instruction operand expression.  */
   2507   /* Target segment of the address.	 */
   2508   segT to_seg;
   2509   valueT this_add_number;
   2510   /* Positive (minuend) symbol.  */
   2511   symbolS *this_add_symbol;
   2512   /* As a number.  */
   2513   long opcode_as_number;
   2514   /* Least significant byte 1st.  */
   2515   char *opcode_as_chars;
   2516   /* As an array of characters.  */
   2517   /* Least significant byte 1st */
   2518   char *opcode_low_byteP;
   2519   /* length (bytes) meant by vop_short.  */
   2520   int length;
   2521   /* 0, or 1 if '@' is in addressing mode.  */
   2522   int at;
   2523   /* From vop_nbytes: vax_operand_width (in bytes) */
   2524   int nbytes;
   2525   FLONUM_TYPE *floatP;
   2526   LITTLENUM_TYPE literal_float[8];
   2527   /* Big enough for any floating point literal.  */
   2528 
   2529   vip (&v, instruction_string);
   2530 
   2531   /* Now we try to find as many as_warn()s as we can. If we do any as_warn()s
   2532      then goofed=1. Notice that we don't make any frags yet.
   2533      Should goofed be 1, then this instruction will wedge in any pass,
   2534      and we can safely flush it, without causing interpass symbol phase
   2535      errors. That is, without changing label values in different passes.  */
   2536   if ((goofed = (*v.vit_error)) != 0)
   2537     {
   2538       as_fatal (_("Ignoring statement due to \"%s\""), v.vit_error);
   2539     }
   2540   /* We need to use expression() and friends, which require us to diddle
   2541      input_line_pointer. So we save it and restore it later.  */
   2542   save_input_line_pointer = input_line_pointer;
   2543   for (operandP = v.vit_operand,
   2544        expP = exp_of_operand,
   2545        segP = seg_of_operand,
   2546        floatP = float_operand,
   2547        end_operandP = v.vit_operand + v.vit_operands;
   2548 
   2549        operandP < end_operandP;
   2550 
   2551        operandP++, expP++, segP++, floatP++)
   2552     {
   2553       if (operandP->vop_error)
   2554 	{
   2555 	  as_fatal (_("Aborting because statement has \"%s\""), operandP->vop_error);
   2556 	  goofed = 1;
   2557 	}
   2558       else
   2559 	{
   2560 	  /* Statement has no syntax goofs: let's sniff the expression.  */
   2561 	  int can_be_short = 0;	/* 1 if a bignum can be reduced to a short literal.  */
   2562 
   2563 	  input_line_pointer = operandP->vop_expr_begin;
   2564 	  c_save = operandP->vop_expr_end[1];
   2565 	  operandP->vop_expr_end[1] = '\0';
   2566 	  /* If to_seg == SEG_PASS1, expression() will have set need_pass_2 = 1.  */
   2567 	  *segP = expression (expP);
   2568 	  switch (expP->X_op)
   2569 	    {
   2570 	    case O_absent:
   2571 	      /* for BSD4.2 compatibility, missing expression is absolute 0 */
   2572 	      expP->X_op = O_constant;
   2573 	      expP->X_add_number = 0;
   2574 	      /* For SEG_ABSOLUTE, we shouldn't need to set X_op_symbol,
   2575 		 X_add_symbol to any particular value.  But, we will program
   2576 		 defensively. Since this situation occurs rarely so it costs
   2577 		 us little to do, and stops Dean worrying about the origin of
   2578 		 random bits in expressionS's.  */
   2579 	      expP->X_add_symbol = NULL;
   2580 	      expP->X_op_symbol = NULL;
   2581 	      break;
   2582 
   2583 	    case O_symbol:
   2584 	    case O_constant:
   2585 	      break;
   2586 
   2587 	    default:
   2588 	      /* Major bug. We can't handle the case of a
   2589 	         SEG_OP expression in a VIT_OPCODE_SYNTHETIC
   2590 	         variable-length instruction.
   2591 	         We don't have a frag type that is smart enough to
   2592 	         relax a SEG_OP, and so we just force all
   2593 	         SEG_OPs to behave like SEG_PASS1s.
   2594 	         Clearly, if there is a demand we can invent a new or
   2595 	         modified frag type and then coding up a frag for this
   2596 	         case will be easy. SEG_OP was invented for the
   2597 	         .words after a CASE opcode, and was never intended for
   2598 	         instruction operands.  */
   2599 	      need_pass_2 = 1;
   2600 	      as_fatal (_("Can't relocate expression"));
   2601 	      break;
   2602 
   2603 	    case O_big:
   2604 	      /* Preserve the bits.  */
   2605 	      if (expP->X_add_number > 0)
   2606 		{
   2607 		  bignum_copy (generic_bignum, expP->X_add_number,
   2608 			       floatP->low, SIZE_OF_LARGE_NUMBER);
   2609 		}
   2610 	      else
   2611 		{
   2612 		  know (expP->X_add_number < 0);
   2613 		  flonum_copy (&generic_floating_point_number,
   2614 			       floatP);
   2615 		  if (strchr ("s i", operandP->vop_short))
   2616 		    {
   2617 		      /* Could possibly become S^# */
   2618 		      flonum_gen2vax (-expP->X_add_number, floatP, literal_float);
   2619 		      switch (-expP->X_add_number)
   2620 			{
   2621 			case 'f':
   2622 			  can_be_short =
   2623 			    (literal_float[0] & 0xFC0F) == 0x4000
   2624 			    && literal_float[1] == 0;
   2625 			  break;
   2626 
   2627 			case 'd':
   2628 			  can_be_short =
   2629 			    (literal_float[0] & 0xFC0F) == 0x4000
   2630 			    && literal_float[1] == 0
   2631 			    && literal_float[2] == 0
   2632 			    && literal_float[3] == 0;
   2633 			  break;
   2634 
   2635 			case 'g':
   2636 			  can_be_short =
   2637 			    (literal_float[0] & 0xFF81) == 0x4000
   2638 			    && literal_float[1] == 0
   2639 			    && literal_float[2] == 0
   2640 			    && literal_float[3] == 0;
   2641 			  break;
   2642 
   2643 			case 'h':
   2644 			  can_be_short = ((literal_float[0] & 0xFFF8) == 0x4000
   2645 					  && (literal_float[1] & 0xE000) == 0
   2646 					  && literal_float[2] == 0
   2647 					  && literal_float[3] == 0
   2648 					  && literal_float[4] == 0
   2649 					  && literal_float[5] == 0
   2650 					  && literal_float[6] == 0
   2651 					  && literal_float[7] == 0);
   2652 			  break;
   2653 
   2654 			default:
   2655 			  BAD_CASE (-expP->X_add_number);
   2656 			  break;
   2657 			}
   2658 		    }
   2659 		}
   2660 
   2661 	      if (operandP->vop_short == 's'
   2662 		  || operandP->vop_short == 'i'
   2663 		  || (operandP->vop_short == ' '
   2664 		      && operandP->vop_reg == 0xF
   2665 		      && (operandP->vop_mode & 0xE) == 0x8))
   2666 		{
   2667 		  /* Saw a '#'.  */
   2668 		  if (operandP->vop_short == ' ')
   2669 		    {
   2670 		      /* We must chose S^ or I^.  */
   2671 		      if (expP->X_add_number > 0)
   2672 			{
   2673 			  /* Bignum: Short literal impossible.  */
   2674 			  operandP->vop_short = 'i';
   2675 			  operandP->vop_mode = 8;
   2676 			  operandP->vop_reg = 0xF;	/* VAX PC.  */
   2677 			}
   2678 		      else
   2679 			{
   2680 			  /* Flonum: Try to do it.  */
   2681 			  if (can_be_short)
   2682 			    {
   2683 			      operandP->vop_short = 's';
   2684 			      operandP->vop_mode = 0;
   2685 			      operandP->vop_ndx = -1;
   2686 			      operandP->vop_reg = -1;
   2687 			      expP->X_op = O_constant;
   2688 			    }
   2689 			  else
   2690 			    {
   2691 			      operandP->vop_short = 'i';
   2692 			      operandP->vop_mode = 8;
   2693 			      operandP->vop_reg = 0xF;	/* VAX PC */
   2694 			    }
   2695 			}	/* bignum or flonum ? */
   2696 		    }		/*  if #, but no S^ or I^ seen.  */
   2697 		  /* No more ' ' case: either 's' or 'i'.  */
   2698 		  if (operandP->vop_short == 's')
   2699 		    {
   2700 		      /* Wants to be a short literal.  */
   2701 		      if (expP->X_add_number > 0)
   2702 			{
   2703 			  as_warn (_("Bignum not permitted in short literal. Immediate mode assumed."));
   2704 			  operandP->vop_short = 'i';
   2705 			  operandP->vop_mode = 8;
   2706 			  operandP->vop_reg = 0xF;	/* VAX PC.  */
   2707 			}
   2708 		      else
   2709 			{
   2710 			  if (!can_be_short)
   2711 			    {
   2712 			      as_warn (_("Can't do flonum short literal: immediate mode used."));
   2713 			      operandP->vop_short = 'i';
   2714 			      operandP->vop_mode = 8;
   2715 			      operandP->vop_reg = 0xF;	/* VAX PC.  */
   2716 			    }
   2717 			  else
   2718 			    {
   2719 			      /* Encode short literal now.  */
   2720 			      int temp = 0;
   2721 
   2722 			      switch (-expP->X_add_number)
   2723 				{
   2724 				case 'f':
   2725 				case 'd':
   2726 				  temp = literal_float[0] >> 4;
   2727 				  break;
   2728 
   2729 				case 'g':
   2730 				  temp = literal_float[0] >> 1;
   2731 				  break;
   2732 
   2733 				case 'h':
   2734 				  temp = ((literal_float[0] << 3) & 070)
   2735 				    | ((literal_float[1] >> 13) & 07);
   2736 				  break;
   2737 
   2738 				default:
   2739 				  BAD_CASE (-expP->X_add_number);
   2740 				  break;
   2741 				}
   2742 
   2743 			      floatP->low[0] = temp & 077;
   2744 			      floatP->low[1] = 0;
   2745 			    }
   2746 			}
   2747 		    }
   2748 		  else
   2749 		    {
   2750 		      /* I^# seen: set it up if float.  */
   2751 		      if (expP->X_add_number < 0)
   2752 			{
   2753 			  memcpy (floatP->low, literal_float, sizeof (literal_float));
   2754 			}
   2755 		    }		/* if S^# seen.  */
   2756 		}
   2757 	      else
   2758 		{
   2759 		  as_warn (_("A bignum/flonum may not be a displacement: 0x%"
   2760 			     PRIx64 " used"),
   2761 			   (uint64_t) (expP->X_add_number = 0x80000000L));
   2762 		  /* Chosen so luser gets the most offset bits to patch later.  */
   2763 		}
   2764 	      expP->X_add_number = floatP->low[0]
   2765 		| ((LITTLENUM_MASK & (floatP->low[1])) << LITTLENUM_NUMBER_OF_BITS);
   2766 
   2767 	      /* For the O_big case we have:
   2768 	         If vop_short == 's' then a short floating literal is in the
   2769 	        	lowest 6 bits of floatP -> low [0], which is
   2770 	        	big_operand_bits [---] [0].
   2771 	         If vop_short == 'i' then the appropriate number of elements
   2772 	        	of big_operand_bits [---] [...] are set up with the correct
   2773 	        	bits.
   2774 	         Also, just in case width is byte word or long, we copy the lowest
   2775 	         32 bits of the number to X_add_number.  */
   2776 	      break;
   2777 	    }
   2778 	  if (input_line_pointer != operandP->vop_expr_end + 1)
   2779 	    {
   2780 	      as_fatal ("Junk at end of expression \"%s\"", input_line_pointer);
   2781 	      goofed = 1;
   2782 	    }
   2783 	  operandP->vop_expr_end[1] = c_save;
   2784 	}
   2785     }
   2786 
   2787   input_line_pointer = save_input_line_pointer;
   2788 
   2789   if (need_pass_2 || goofed)
   2790     return;
   2791 
   2792   dwarf2_emit_insn (0);
   2793   /* Emit op-code.  */
   2794   /* Remember where it is, in case we want to modify the op-code later.  */
   2795   opcode_low_byteP = frag_more (v.vit_opcode_nbytes);
   2796   memcpy (opcode_low_byteP, v.vit_opcode, v.vit_opcode_nbytes);
   2797   opcode_as_chars = v.vit_opcode;
   2798   opcode_as_number = md_chars_to_number ((unsigned char *) opcode_as_chars, 4);
   2799   for (operandP = v.vit_operand,
   2800        expP = exp_of_operand,
   2801        segP = seg_of_operand,
   2802        floatP = float_operand,
   2803        end_operandP = v.vit_operand + v.vit_operands;
   2804 
   2805        operandP < end_operandP;
   2806 
   2807        operandP++,
   2808        floatP++,
   2809        segP++,
   2810        expP++)
   2811     {
   2812       if (operandP->vop_ndx >= 0)
   2813 	{
   2814 	  /* Indexed addressing byte.  */
   2815 	  /* Legality of indexed mode already checked: it is OK.  */
   2816 	  FRAG_APPEND_1_CHAR (0x40 + operandP->vop_ndx);
   2817 	}			/* if(vop_ndx>=0) */
   2818 
   2819       /* Here to make main operand frag(s).  */
   2820       this_add_number = expP->X_add_number;
   2821       this_add_symbol = expP->X_add_symbol;
   2822       to_seg = *segP;
   2823       is_undefined = (to_seg == undefined_section);
   2824       is_absolute = (to_seg == absolute_section);
   2825       at = operandP->vop_mode & 1;
   2826       length = (operandP->vop_short == 'b'
   2827 		? 1 : (operandP->vop_short == 'w'
   2828 		       ? 2 : (operandP->vop_short == 'l'
   2829 			      ? 4 : 0)));
   2830       nbytes = operandP->vop_nbytes;
   2831       if (operandP->vop_access == 'b')
   2832 	{
   2833 	  if (to_seg == now_seg || is_undefined)
   2834 	    {
   2835 	      /* If is_undefined, then it might BECOME now_seg.  */
   2836 	      if (nbytes)
   2837 		{
   2838 		  p = frag_more (nbytes);
   2839 		  fix_new (frag_now, p - frag_now->fr_literal, nbytes,
   2840 			   this_add_symbol, this_add_number, 1, NO_RELOC);
   2841 		}
   2842 	      else
   2843 		{
   2844 		  /* to_seg==now_seg || to_seg == SEG_UNKNOWN */
   2845 		  /* nbytes==0 */
   2846 		  length_code = is_undefined ? STATE_UNDF : STATE_BYTE;
   2847 		  if (opcode_as_number & VIT_OPCODE_SPECIAL)
   2848 		    {
   2849 		      if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
   2850 			{
   2851 			  /* br or jsb */
   2852 			  frag_var (rs_machine_dependent, 5, 1,
   2853 			    ENCODE_RELAX (STATE_ALWAYS_BRANCH, length_code),
   2854 				    this_add_symbol, this_add_number,
   2855 				    opcode_low_byteP);
   2856 			}
   2857 		      else
   2858 			{
   2859 			  if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
   2860 			    {
   2861 			      length_code = STATE_WORD;
   2862 			      /* JF: There is no state_byte for this one! */
   2863 			      frag_var (rs_machine_dependent, 10, 2,
   2864 					ENCODE_RELAX (STATE_COMPLEX_BRANCH, length_code),
   2865 					this_add_symbol, this_add_number,
   2866 					opcode_low_byteP);
   2867 			    }
   2868 			  else
   2869 			    {
   2870 			      know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
   2871 			      frag_var (rs_machine_dependent, 9, 1,
   2872 			      ENCODE_RELAX (STATE_COMPLEX_HOP, length_code),
   2873 					this_add_symbol, this_add_number,
   2874 					opcode_low_byteP);
   2875 			    }
   2876 			}
   2877 		    }
   2878 		  else
   2879 		    {
   2880 		      know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
   2881 		      frag_var (rs_machine_dependent, 7, 1,
   2882 		       ENCODE_RELAX (STATE_CONDITIONAL_BRANCH, length_code),
   2883 				this_add_symbol, this_add_number,
   2884 				opcode_low_byteP);
   2885 		    }
   2886 		}
   2887 	    }
   2888 	  else
   2889 	    {
   2890 	      /* to_seg != now_seg && to_seg != SEG_UNKNOWN */
   2891 	      /* --- SEG FLOAT MAY APPEAR HERE ---  */
   2892 	      if (is_absolute)
   2893 		{
   2894 		  if (nbytes)
   2895 		    {
   2896 		      know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
   2897 		      p = frag_more (nbytes);
   2898 		      /* Conventional relocation.  */
   2899 		      fix_new (frag_now, p - frag_now->fr_literal, nbytes,
   2900 			       section_symbol (absolute_section),
   2901 			       this_add_number, 1, NO_RELOC);
   2902 		    }
   2903 		  else
   2904 		    {
   2905 		      know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
   2906 		      if (opcode_as_number & VIT_OPCODE_SPECIAL)
   2907 			{
   2908 			  if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
   2909 			    {
   2910 			      /* br or jsb */
   2911 			      *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
   2912 			      know (opcode_as_chars[1] == 0);
   2913 			      p = frag_more (5);
   2914 			      p[0] = VAX_ABSOLUTE_MODE;	/* @#...  */
   2915 			      md_number_to_chars (p + 1, this_add_number, 4);
   2916 			      /* Now (eg) JMP @#foo or JSB @#foo.  */
   2917 			    }
   2918 			  else
   2919 			    {
   2920 			      if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
   2921 				{
   2922 				  p = frag_more (10);
   2923 				  p[0] = 2;
   2924 				  p[1] = 0;
   2925 				  p[2] = VAX_BRB;
   2926 				  p[3] = 6;
   2927 				  p[4] = VAX_JMP;
   2928 				  p[5] = VAX_ABSOLUTE_MODE;	/* @#...  */
   2929 				  md_number_to_chars (p + 6, this_add_number, 4);
   2930 				  /* Now (eg)	ACBx	1f
   2931 				    		BRB	2f
   2932 				    	1:	JMP	@#foo
   2933 				    	2:  */
   2934 				}
   2935 			      else
   2936 				{
   2937 				  know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
   2938 				  p = frag_more (9);
   2939 				  p[0] = 2;
   2940 				  p[1] = VAX_BRB;
   2941 				  p[2] = 6;
   2942 				  p[3] = VAX_JMP;
   2943                                   p[4] = VAX_ABSOLUTE_MODE;     /* @#...  */
   2944 				  md_number_to_chars (p + 5, this_add_number, 4);
   2945 				  /* Now (eg)	xOBxxx	1f
   2946 				   		BRB	2f
   2947 				   	1:	JMP	@#foo
   2948 				   	2:  */
   2949 				}
   2950 			    }
   2951 			}
   2952 		      else
   2953 			{
   2954 			  /* b<cond> */
   2955 			  *opcode_low_byteP ^= 1;
   2956 			  /* To reverse the condition in a VAX branch,
   2957 			     complement the lowest order bit.  */
   2958 			  p = frag_more (7);
   2959 			  p[0] = 6;
   2960 			  p[1] = VAX_JMP;
   2961 			  p[2] = VAX_ABSOLUTE_MODE;	/* @#...  */
   2962 			  md_number_to_chars (p + 3, this_add_number, 4);
   2963 			  /* Now (eg)	BLEQ	1f
   2964 			   		JMP	@#foo
   2965 			   	1:  */
   2966 			}
   2967 		    }
   2968 		}
   2969 	      else
   2970 		{
   2971 		  /* to_seg != now_seg && !is_undefinfed && !is_absolute */
   2972 		  if (nbytes > 0)
   2973 		    {
   2974 		      /* Pc-relative. Conventional relocation.  */
   2975 		      know (!(opcode_as_number & VIT_OPCODE_SYNTHETIC));
   2976 		      p = frag_more (nbytes);
   2977 		      fix_new (frag_now, p - frag_now->fr_literal, nbytes,
   2978 			       section_symbol (absolute_section),
   2979 			       this_add_number, 1, NO_RELOC);
   2980 		    }
   2981 		  else
   2982 		    {
   2983 		      know (opcode_as_number & VIT_OPCODE_SYNTHETIC);
   2984 		      if (opcode_as_number & VIT_OPCODE_SPECIAL)
   2985 			{
   2986 			  if (operandP->vop_width == VAX_WIDTH_UNCONDITIONAL_JUMP)
   2987 			    {
   2988 			      /* br or jsb */
   2989 			      know (opcode_as_chars[1] == 0);
   2990 			      *opcode_low_byteP = opcode_as_chars[0] + VAX_WIDEN_LONG;
   2991 			      p = frag_more (5);
   2992 			      p[0] = VAX_PC_RELATIVE_MODE;
   2993 			      fix_new (frag_now,
   2994 				       p + 1 - frag_now->fr_literal, 4,
   2995 				       this_add_symbol,
   2996 				       this_add_number, 1, NO_RELOC);
   2997 			      /* Now eg JMP foo or JSB foo.  */
   2998 			    }
   2999 			  else
   3000 			    {
   3001 			      if (operandP->vop_width == VAX_WIDTH_WORD_JUMP)
   3002 				{
   3003 				  p = frag_more (10);
   3004 				  p[0] = 0;
   3005 				  p[1] = 2;
   3006 				  p[2] = VAX_BRB;
   3007 				  p[3] = 6;
   3008 				  p[4] = VAX_JMP;
   3009 				  p[5] = VAX_PC_RELATIVE_MODE;
   3010 				  fix_new (frag_now,
   3011 					   p + 6 - frag_now->fr_literal, 4,
   3012 					   this_add_symbol,
   3013 					   this_add_number, 1, NO_RELOC);
   3014 				  /* Now (eg)	ACBx	1f
   3015 				   		BRB	2f
   3016 				   	1:	JMP	foo
   3017 				   	2:  */
   3018 				}
   3019 			      else
   3020 				{
   3021 				  know (operandP->vop_width == VAX_WIDTH_BYTE_JUMP);
   3022 				  p = frag_more (10);
   3023 				  p[0] = 2;
   3024 				  p[1] = VAX_BRB;
   3025 				  p[2] = 6;
   3026 				  p[3] = VAX_JMP;
   3027 				  p[4] = VAX_PC_RELATIVE_MODE;
   3028 				  fix_new (frag_now,
   3029 					   p + 5 - frag_now->fr_literal,
   3030 					   4, this_add_symbol,
   3031 					   this_add_number, 1, NO_RELOC);
   3032 				  /* Now (eg)	xOBxxx	1f
   3033 				   		BRB	2f
   3034 				   	1:	JMP	foo
   3035 				   	2:  */
   3036 				}
   3037 			    }
   3038 			}
   3039 		      else
   3040 			{
   3041 			  know (operandP->vop_width == VAX_WIDTH_CONDITIONAL_JUMP);
   3042 			  *opcode_low_byteP ^= 1;	/* Reverse branch condition.  */
   3043 			  p = frag_more (7);
   3044 			  p[0] = 6;
   3045 			  p[1] = VAX_JMP;
   3046 			  p[2] = VAX_PC_RELATIVE_MODE;
   3047 			  fix_new (frag_now, p + 3 - frag_now->fr_literal,
   3048 				   4, this_add_symbol,
   3049 				   this_add_number, 1, NO_RELOC);
   3050 			}
   3051 		    }
   3052 		}
   3053 	    }
   3054 	}
   3055       else
   3056 	{
   3057 	  /* So it is ordinary operand.  */
   3058 	  know (operandP->vop_access != 'b');
   3059 	  /* ' ' target-independent: elsewhere.  */
   3060 	  know (operandP->vop_access != ' ');
   3061 	  know (operandP->vop_access == 'a'
   3062 		|| operandP->vop_access == 'm'
   3063 		|| operandP->vop_access == 'r'
   3064 		|| operandP->vop_access == 'v'
   3065 		|| operandP->vop_access == 'w');
   3066 	  if (operandP->vop_short == 's')
   3067 	    {
   3068 	      if (is_absolute)
   3069 		{
   3070 		  if (this_add_number >= 64)
   3071 		    {
   3072 		      as_warn (_("Short literal overflow(%ld.), immediate mode assumed."),
   3073 			       (long) this_add_number);
   3074 		      operandP->vop_short = 'i';
   3075 		      operandP->vop_mode = 8;
   3076 		      operandP->vop_reg = 0xF;
   3077 		    }
   3078 		}
   3079 	      else
   3080 		{
   3081 		  as_warn (_("Forced short literal to immediate mode. now_seg=%s to_seg=%s"),
   3082 			   segment_name (now_seg), segment_name (to_seg));
   3083 		  operandP->vop_short = 'i';
   3084 		  operandP->vop_mode = 8;
   3085 		  operandP->vop_reg = 0xF;
   3086 		}
   3087 	    }
   3088 	  if (operandP->vop_reg >= 0 && (operandP->vop_mode < 8
   3089 		  || (operandP->vop_reg != 0xF && operandP->vop_mode < 10)))
   3090 	    {
   3091 	      /* One byte operand.  */
   3092 	      know (operandP->vop_mode > 3);
   3093 	      FRAG_APPEND_1_CHAR (operandP->vop_mode << 4 | operandP->vop_reg);
   3094 	      /* All 1-bytes except S^# happen here.  */
   3095 	    }
   3096 	  else
   3097 	    {
   3098 	      /* {@}{q^}foo{(Rn)} or S^#foo */
   3099 	      if (operandP->vop_reg == -1 && operandP->vop_short != 's')
   3100 		{
   3101 		  /* "{@}{q^}foo" */
   3102 		  if (to_seg == now_seg)
   3103 		    {
   3104 		      if (length == 0)
   3105 			{
   3106 			  know (operandP->vop_short == ' ');
   3107 			  length_code = STATE_BYTE;
   3108 #ifdef OBJ_ELF
   3109 			  if (S_IS_EXTERNAL (this_add_symbol)
   3110 			      || S_IS_WEAK (this_add_symbol))
   3111 			    length_code = STATE_UNDF;
   3112 #endif
   3113 			  p = frag_var (rs_machine_dependent, 10, 2,
   3114 			       ENCODE_RELAX (STATE_PC_RELATIVE, length_code),
   3115 					this_add_symbol, this_add_number,
   3116 					opcode_low_byteP);
   3117 			  know (operandP->vop_mode == 10 + at);
   3118 			  *p = at << 4;
   3119 			  /* At is the only context we need to carry
   3120 			     to other side of relax() process.  Must
   3121 			     be in the correct bit position of VAX
   3122 			     operand spec. byte.  */
   3123 			}
   3124 		      else
   3125 			{
   3126 			  know (length);
   3127 			  know (operandP->vop_short != ' ');
   3128 			  p = frag_more (length + 1);
   3129 			  p[0] = 0xF | ((at + "?\12\14?\16"[length]) << 4);
   3130 			  fix_new (frag_now, p + 1 - frag_now->fr_literal,
   3131 				   length, this_add_symbol,
   3132 				   this_add_number, 1, NO_RELOC);
   3133 			}
   3134 		    }
   3135 		  else
   3136 		    {
   3137 		      /* to_seg != now_seg */
   3138 		      if (this_add_symbol == NULL)
   3139 			{
   3140 			  know (is_absolute);
   3141 			  /* Do @#foo: simpler relocation than foo-.(pc) anyway.  */
   3142 			  p = frag_more (5);
   3143 			  p[0] = VAX_ABSOLUTE_MODE;	/* @#...  */
   3144 			  md_number_to_chars (p + 1, this_add_number, 4);
   3145 			  if (length && length != 4)
   3146 			    as_warn (_("Length specification ignored. Address mode 9F used"));
   3147 			}
   3148 		      else
   3149 			{
   3150 			  /* {@}{q^}other_seg */
   3151 			  know ((length == 0 && operandP->vop_short == ' ')
   3152 			     || (length > 0 && operandP->vop_short != ' '));
   3153 			  if (is_undefined
   3154 #ifdef OBJ_ELF
   3155 			      || S_IS_WEAK(this_add_symbol)
   3156 			      || S_IS_EXTERNAL(this_add_symbol)
   3157 #endif
   3158 			      )
   3159 			    {
   3160 			      switch (length)
   3161 				{
   3162 				default: length_code = STATE_UNDF; break;
   3163 				case 1: length_code = STATE_BYTE; break;
   3164 				case 2: length_code = STATE_WORD; break;
   3165 				case 4: length_code = STATE_LONG; break;
   3166 				}
   3167 			      /* We have a SEG_UNKNOWN symbol. It might
   3168 			         turn out to be in the same segment as
   3169 			         the instruction, permitting relaxation.  */
   3170 			      p = frag_var (rs_machine_dependent, 5, 2,
   3171 			       ENCODE_RELAX (STATE_PC_RELATIVE, length_code),
   3172 					    this_add_symbol, this_add_number,
   3173 					    opcode_low_byteP);
   3174 			      p[0] = at << 4;
   3175 			    }
   3176 			  else
   3177 			    {
   3178 			      if (length == 0)
   3179 				{
   3180 				  know (operandP->vop_short == ' ');
   3181 				  length = 4;	/* Longest possible.  */
   3182 				}
   3183 			      p = frag_more (length + 1);
   3184 			      p[0] = 0xF | ((at + "?\12\14?\16"[length]) << 4);
   3185 			      md_number_to_chars (p + 1, this_add_number, length);
   3186 			      fix_new (frag_now,
   3187 				       p + 1 - frag_now->fr_literal,
   3188 				       length, this_add_symbol,
   3189 				       this_add_number, 1, NO_RELOC);
   3190 			    }
   3191 			}
   3192 		    }
   3193 		}
   3194 	      else
   3195 		{
   3196 		  /* {@}{q^}foo(Rn) or S^# or I^# or # */
   3197 		  if (operandP->vop_mode < 0xA)
   3198 		    {
   3199 		      /* # or S^# or I^# */
   3200 		      if (operandP->vop_access == 'v'
   3201 			  || operandP->vop_access == 'a')
   3202 			{
   3203 			  if (operandP->vop_access == 'v')
   3204 			    as_warn (_("Invalid operand: immediate value used as base address."));
   3205 			  else
   3206 			    as_warn (_("Invalid operand: immediate value used as address."));
   3207 			  /* gcc 2.6.3 is known to generate these in at least
   3208 			     one case.  */
   3209 			}
   3210 		      if (length == 0
   3211 			  && is_absolute && (expP->X_op != O_big)
   3212 			  && operandP->vop_mode == 8	/* No '@'.  */
   3213 			  && this_add_number < 64)
   3214 			{
   3215 			  operandP->vop_short = 's';
   3216 			}
   3217 		      if (operandP->vop_short == 's')
   3218 			{
   3219 			  FRAG_APPEND_1_CHAR (this_add_number);
   3220 			}
   3221 		      else
   3222 			{
   3223 			  /* I^#...  */
   3224 			  know (nbytes);
   3225 			  p = frag_more (nbytes + 1);
   3226 			  know (operandP->vop_reg == 0xF);
   3227 #ifdef OBJ_ELF
   3228 			  if (flag_want_pic && operandP->vop_mode == 8
   3229 				&& this_add_symbol != NULL)
   3230 			    {
   3231 			      as_warn (_("Symbol '%s' used as immediate operand in PIC mode."),
   3232 				       S_GET_NAME (this_add_symbol));
   3233 			    }
   3234 #endif
   3235 			  p[0] = (operandP->vop_mode << 4) | 0xF;
   3236 			  if ((is_absolute) && (expP->X_op != O_big))
   3237 			    {
   3238 			      /* If nbytes > 4, then we are scrod. We
   3239 			         don't know if the high order bytes
   3240 			         are to be 0xFF or 0x00.  BSD4.2 & RMS
   3241 			         say use 0x00. OK --- but this
   3242 			         assembler needs ANOTHER rewrite to
   3243 			         cope properly with this bug.  */
   3244 			      md_number_to_chars (p + 1, this_add_number,
   3245 						  min (sizeof (valueT),
   3246 						       (size_t) nbytes));
   3247 			      if ((size_t) nbytes > sizeof (valueT))
   3248 				memset (p + 1 + sizeof (valueT),
   3249 				        '\0', nbytes - sizeof (valueT));
   3250 			    }
   3251 			  else
   3252 			    {
   3253 			      if (expP->X_op == O_big)
   3254 				{
   3255 				  /* Problem here is to get the bytes
   3256 				     in the right order.  We stored
   3257 				     our constant as LITTLENUMs, not
   3258 				     bytes.  */
   3259 				  LITTLENUM_TYPE *lP;
   3260 
   3261 				  lP = floatP->low;
   3262 				  if (nbytes & 1)
   3263 				    {
   3264 				      know (nbytes == 1);
   3265 				      p[1] = *lP;
   3266 				    }
   3267 				  else
   3268 				    {
   3269 				      for (p++; nbytes; nbytes -= 2, p += 2, lP++)
   3270 					md_number_to_chars (p, *lP, 2);
   3271 				    }
   3272 				}
   3273 			      else
   3274 				{
   3275 				  fix_new (frag_now, p + 1 - frag_now->fr_literal,
   3276 					   nbytes, this_add_symbol,
   3277 					   this_add_number, 0, NO_RELOC);
   3278 				}
   3279 			    }
   3280 			}
   3281 		    }
   3282 		  else
   3283 		    {
   3284 		      /* {@}{q^}foo(Rn) */
   3285 		      know ((length == 0 && operandP->vop_short == ' ')
   3286 			    || (length > 0 && operandP->vop_short != ' '));
   3287 		      if (length == 0)
   3288 			{
   3289 			  if (is_absolute)
   3290 			    {
   3291 			      long test;
   3292 
   3293 			      test = this_add_number;
   3294 
   3295 			      if (test < 0)
   3296 				test = ~test;
   3297 
   3298 			      length = test & 0xffff8000 ? 4
   3299 				: test & 0xffffff80 ? 2
   3300 				: 1;
   3301 			    }
   3302 			  else
   3303 			    {
   3304 			      length = 4;
   3305 			    }
   3306 			}
   3307 #ifdef OBJ_ELF
   3308 		      if (flag_want_pic && this_add_symbol != NULL)
   3309 		        {
   3310 			  as_warn (_("Symbol '%s' used as displacement in PIC mode."),
   3311 			       S_GET_NAME (this_add_symbol));
   3312 		        }
   3313 #endif
   3314 		      p = frag_more (1 + length);
   3315 		      know (operandP->vop_reg != 0xf);
   3316 		      know (operandP->vop_reg >= 0);
   3317 		      p[0] = operandP->vop_reg
   3318 			| ((at | "?\12\14?\16"[length]) << 4);
   3319 		      if (is_absolute)
   3320 			{
   3321 			  md_number_to_chars (p + 1, this_add_number, length);
   3322 			}
   3323 		      else
   3324 			{
   3325 			  fix_new (frag_now, p + 1 - frag_now->fr_literal,
   3326 				   length, this_add_symbol,
   3327 				   this_add_number, 0, NO_RELOC);
   3328 			}
   3329 		    }
   3330 		}
   3331 	    }
   3332 	}
   3333     }
   3334 }
   3335 
   3336 void
   3337 md_begin (void)
   3338 {
   3339   FLONUM_TYPE *fP;
   3340   int i;
   3341 
   3342   vip_begin (1, "$", "*", "`");
   3343 
   3344   for (i = 0, fP = float_operand;
   3345        fP < float_operand + VIT_MAX_OPERANDS;
   3346        i++, fP++)
   3347     {
   3348       fP->low = &big_operand_bits[i][0];
   3349       fP->high = &big_operand_bits[i][SIZE_OF_LARGE_NUMBER - 1];
   3350     }
   3351 }
   3352 
   3353 bfd_reloc_code_real_type
   3354 vax_cons (expressionS *exp, int size)
   3355 {
   3356   char *save;
   3357   const char *vax_cons_special_reloc;
   3358 
   3359   SKIP_WHITESPACE ();
   3360   vax_cons_special_reloc = NULL;
   3361   save = input_line_pointer;
   3362   if (input_line_pointer[0] == '%')
   3363     {
   3364       if (startswith (input_line_pointer + 1, "pcrel"))
   3365 	{
   3366 	  input_line_pointer += 6;
   3367 	  vax_cons_special_reloc = "pcrel";
   3368 	}
   3369       if (vax_cons_special_reloc)
   3370 	{
   3371 	  int bad = 0;
   3372 
   3373 	  switch (size)
   3374 	    {
   3375 	    case 1:
   3376 	      if (*input_line_pointer != '8')
   3377 		bad = 1;
   3378 	      input_line_pointer--;
   3379 	      break;
   3380 	    case 2:
   3381 	      if (input_line_pointer[0] != '1' || input_line_pointer[1] != '6')
   3382 		bad = 1;
   3383 	      break;
   3384 	    case 4:
   3385 	      if (input_line_pointer[0] != '3' || input_line_pointer[1] != '2')
   3386 		bad = 1;
   3387 	      break;
   3388 	    default:
   3389 	      bad = 1;
   3390 	      break;
   3391 	    }
   3392 
   3393 	  if (bad)
   3394 	    {
   3395 	      as_bad (_("Illegal operands: Only %%r_%s%d allowed in %d-byte data fields"),
   3396 		      vax_cons_special_reloc, size * 8, size);
   3397 	    }
   3398 	  else
   3399 	    {
   3400 	      input_line_pointer += 2;
   3401 	      if (*input_line_pointer != '(')
   3402 		{
   3403 		  as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
   3404 			  vax_cons_special_reloc, size * 8);
   3405 		  bad = 1;
   3406 		}
   3407 	    }
   3408 
   3409 	  if (bad)
   3410 	    {
   3411 	      input_line_pointer = save;
   3412 	      vax_cons_special_reloc = NULL;
   3413 	    }
   3414 	  else
   3415 	    {
   3416 	      int c;
   3417 	      char *end = ++input_line_pointer;
   3418 	      int npar = 0;
   3419 
   3420 	      while (! is_end_of_stmt (c = *end))
   3421 		{
   3422 		  if (c == '(')
   3423 	  	    npar++;
   3424 		  else if (c == ')')
   3425 	  	    {
   3426 		      if (!npar)
   3427 	      		break;
   3428 		      npar--;
   3429 		    }
   3430 	    	  end++;
   3431 		}
   3432 
   3433 	      if (c != ')')
   3434 		as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
   3435 			vax_cons_special_reloc, size * 8);
   3436 	      else
   3437 		{
   3438 		  *end = '\0';
   3439 		  expression (exp);
   3440 		  *end = c;
   3441 		  if (input_line_pointer != end)
   3442 		    {
   3443 		      as_bad (_("Illegal operands: %%r_%s%d requires arguments in ()"),
   3444 			      vax_cons_special_reloc, size * 8);
   3445 		    }
   3446 		  else
   3447 		    {
   3448 		      input_line_pointer++;
   3449 		      SKIP_WHITESPACE ();
   3450 		      c = *input_line_pointer;
   3451 		      if (! is_end_of_stmt (c) && c != ',')
   3452 			as_bad (_("Illegal operands: garbage after %%r_%s%d()"),
   3453 			        vax_cons_special_reloc, size * 8);
   3454 		    }
   3455 		}
   3456 	    }
   3457 	}
   3458     }
   3459   if (vax_cons_special_reloc == NULL)
   3460     expression (exp);
   3461   else
   3462     switch (size)
   3463       {
   3464       case 1: return BFD_RELOC_8_PCREL;
   3465       case 2: return BFD_RELOC_16_PCREL;
   3466       case 4: return BFD_RELOC_32_PCREL;
   3467       }
   3468   return NO_RELOC;
   3469 }
   3470 
   3471 /* This is called by emit_expr via TC_CONS_FIX_NEW when creating a
   3472    reloc for a cons.  */
   3473 
   3474 void
   3475 vax_cons_fix_new (fragS *frag, int where, unsigned int nbytes, expressionS *exp,
   3476 		  bfd_reloc_code_real_type r)
   3477 {
   3478   int pcrel;
   3479   // fix PC relative frags too ...
   3480   switch (r)
   3481     {
   3482     case BFD_RELOC_8_PCREL:
   3483     case BFD_RELOC_16_PCREL:
   3484     case BFD_RELOC_32_PCREL:
   3485       pcrel = 1;
   3486       /*
   3487        * Displacement mode addressing (of which PC relative is one
   3488        * type) uses the updated contents of the register as the base
   3489        * address.  VARM, Leonard 1987, pp34
   3490        */
   3491       switch (exp->X_op)
   3492 	{
   3493 	case O_constant:
   3494 	case O_symbol:
   3495 	  exp->X_add_number += nbytes;
   3496 	  break;
   3497 	}
   3498       break;
   3499     case NO_RELOC:
   3500     r = (nbytes == 1 ? BFD_RELOC_8
   3501 	 : nbytes == 2 ? BFD_RELOC_16
   3502 	 : BFD_RELOC_32);
   3503       pcrel = 0;
   3504       break;
   3505     default:
   3506       pcrel = 0;
   3507       break;
   3508     }
   3509 
   3510   fix_new_exp (frag, where, nbytes, exp, pcrel, r);
   3511 }
   3512 
   3513 const char *
   3514 md_atof (int type, char * litP, int * sizeP)
   3515 {
   3516   return vax_md_atof (type, litP, sizeP);
   3517 }
   3518 
   3519 void
   3520 vax_cfi_frame_initial_instructions (void)
   3521 {
   3522   cfi_add_CFA_def_cfa (14, 0);
   3523 }
   3524 
   3525 int
   3526 tc_vax_regname_to_dw2regnum (char *regname)
   3527 {
   3528   unsigned int i;
   3529   static const struct { char *name; int dw2regnum; } regnames[] =
   3530     {
   3531       { "r0",   0 }, { "r1",  1 }, { "r2",   2 }, { "r3",   3 },
   3532       { "r4",   4 }, { "r5",  5 }, { "r6",   6 }, { "r7",   7 },
   3533       { "r8",   8 }, { "r9",  9 }, { "r10", 10 }, { "r11", 11 },
   3534       { "ap",  12 }, { "fp", 13 }, { "sp",  14 }, { "pc",  15 },
   3535       { "psw", 16 },
   3536     };
   3537 
   3538   for (i = 0; i < ARRAY_SIZE (regnames); ++i)
   3539     if (strcmp (regnames[i].name, regname) == 0)
   3540       return regnames[i].dw2regnum;
   3541 
   3542   return -1;
   3543 }
   3544 
   3545 void
   3546 vax_cfi_emit_pcrel_expr (expressionS *expP, unsigned int nbytes)
   3547 {
   3548   expressionS tmp = *expP;
   3549 
   3550   tmp.X_op = O_subtract;
   3551   tmp.X_op_symbol = symbol_temp_new_now ();
   3552   expP = &tmp;
   3553   expP->X_add_number += nbytes;
   3554   emit_expr (expP, nbytes);
   3555 }
   3556