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