Fix copyright notices
[external/binutils.git] / gas / config / tc-i960.c
1 /* tc-i960.c - All the i80960-specific stuff
2    Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001
4    Free Software Foundation, Inc.
5
6    This file is part of GAS.
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 2, 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, 59 Temple Place - Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 /* See comment on md_parse_option for 80960-specific invocation options.  */
24
25 /* There are 4 different lengths of (potentially) symbol-based displacements
26    in the 80960 instruction set, each of which could require address fix-ups
27    and (in the case of external symbols) emission of relocation directives:
28
29    32-bit (MEMB)
30         This is a standard length for the base assembler and requires no
31         special action.
32
33    13-bit (COBR)
34         This is a non-standard length, but the base assembler has a
35         hook for bit field address fixups: the fixS structure can
36         point to a descriptor of the field, in which case our
37         md_number_to_field() routine gets called to process it.
38
39         I made the hook a little cleaner by having fix_new() (in the base
40         assembler) return a pointer to the fixS in question.  And I made it a
41         little simpler by storing the field size (in this case 13) instead of
42         of a pointer to another structure:  80960 displacements are ALWAYS
43         stored in the low-order bits of a 4-byte word.
44
45         Since the target of a COBR cannot be external, no relocation
46         directives for this size displacement have to be generated.
47         But the base assembler had to be modified to issue error
48         messages if the symbol did turn out to be external.
49
50    24-bit (CTRL)
51         Fixups are handled as for the 13-bit case (except that 24 is stored
52         in the fixS).
53
54         The relocation directive generated is the same as that for the 32-bit
55         displacement, except that it's PC-relative (the 32-bit displacement
56         never is).   The i80960 version of the linker needs a mod to
57         distinguish and handle the 24-bit case.
58
59    12-bit (MEMA)
60         MEMA formats are always promoted to MEMB (32-bit) if the displacement
61         is based on a symbol, because it could be relocated at link time.
62         The only time we use the 12-bit format is if an absolute value of
63         less than 4096 is specified, in which case we need neither a fixup nor
64         a relocation directive.  */
65
66 #include <stdio.h>
67 #include <ctype.h>
68
69 #include "as.h"
70
71 #include "obstack.h"
72
73 #include "opcode/i960.h"
74
75 #if defined (OBJ_AOUT) || defined (OBJ_BOUT)
76
77 #define TC_S_IS_SYSPROC(s)      ((1<=S_GET_OTHER(s)) && (S_GET_OTHER(s)<=32))
78 #define TC_S_IS_BALNAME(s)      (S_GET_OTHER(s) == N_BALNAME)
79 #define TC_S_IS_CALLNAME(s)     (S_GET_OTHER(s) == N_CALLNAME)
80 #define TC_S_IS_BADPROC(s)      ((S_GET_OTHER(s) != 0) && !TC_S_IS_CALLNAME(s) && !TC_S_IS_BALNAME(s) && !TC_S_IS_SYSPROC(s))
81
82 #define TC_S_SET_SYSPROC(s, p)  (S_SET_OTHER((s), (p)+1))
83 #define TC_S_GET_SYSPROC(s)     (S_GET_OTHER(s)-1)
84
85 #define TC_S_FORCE_TO_BALNAME(s)        (S_SET_OTHER((s), N_BALNAME))
86 #define TC_S_FORCE_TO_CALLNAME(s)       (S_SET_OTHER((s), N_CALLNAME))
87 #define TC_S_FORCE_TO_SYSPROC(s)        {;}
88
89 #else /* ! OBJ_A/BOUT */
90 #ifdef OBJ_COFF
91
92 #define TC_S_IS_SYSPROC(s)      (S_GET_STORAGE_CLASS(s) == C_SCALL)
93 #define TC_S_IS_BALNAME(s)      (SF_GET_BALNAME(s))
94 #define TC_S_IS_CALLNAME(s)     (SF_GET_CALLNAME(s))
95 #define TC_S_IS_BADPROC(s)      (TC_S_IS_SYSPROC(s) && TC_S_GET_SYSPROC(s) < 0 && 31 < TC_S_GET_SYSPROC(s))
96
97 #define TC_S_SET_SYSPROC(s, p)  ((s)->sy_symbol.ost_auxent[1].x_sc.x_stindx = (p))
98 #define TC_S_GET_SYSPROC(s)     ((s)->sy_symbol.ost_auxent[1].x_sc.x_stindx)
99
100 #define TC_S_FORCE_TO_BALNAME(s)        (SF_SET_BALNAME(s))
101 #define TC_S_FORCE_TO_CALLNAME(s)       (SF_SET_CALLNAME(s))
102 #define TC_S_FORCE_TO_SYSPROC(s)        (S_SET_STORAGE_CLASS((s), C_SCALL))
103
104 #else /* ! OBJ_COFF */
105 #ifdef OBJ_ELF
106 #define TC_S_IS_SYSPROC(s)      0
107
108 #define TC_S_IS_BALNAME(s)      0
109 #define TC_S_IS_CALLNAME(s)     0
110 #define TC_S_IS_BADPROC(s)      0
111
112 #define TC_S_SET_SYSPROC(s, p)
113 #define TC_S_GET_SYSPROC(s) 0
114
115 #define TC_S_FORCE_TO_BALNAME(s)
116 #define TC_S_FORCE_TO_CALLNAME(s)
117 #define TC_S_FORCE_TO_SYSPROC(s)
118 #else
119  #error COFF, a.out, b.out, and ELF are the only supported formats.
120 #endif /* ! OBJ_ELF */
121 #endif /* ! OBJ_COFF */
122 #endif /* ! OBJ_A/BOUT */
123
124 extern char *input_line_pointer;
125
126 #if !defined (BFD_ASSEMBLER) && !defined (BFD)
127 #ifdef OBJ_COFF
128 const int md_reloc_size = sizeof (struct reloc);
129 #else /* OBJ_COFF */
130 const int md_reloc_size = sizeof (struct relocation_info);
131 #endif /* OBJ_COFF */
132 #endif
133
134 /* Local i80960 routines.  */
135
136 static void brcnt_emit ();      /* Emit branch-prediction instrumentation code */
137 static char *brlab_next ();     /* Return next branch local label */
138 void brtab_emit ();             /* Emit br-predict instrumentation table */
139 static void cobr_fmt ();        /* Generate COBR instruction */
140 static void ctrl_fmt ();        /* Generate CTRL instruction */
141 static char *emit ();           /* Emit (internally) binary */
142 static int get_args ();         /* Break arguments out of comma-separated list */
143 static void get_cdisp ();       /* Handle COBR or CTRL displacement */
144 static char *get_ispec ();      /* Find index specification string */
145 static int get_regnum ();       /* Translate text to register number */
146 static int i_scan ();           /* Lexical scan of instruction source */
147 static void mem_fmt ();         /* Generate MEMA or MEMB instruction */
148 static void mema_to_memb ();    /* Convert MEMA instruction to MEMB format */
149 static void parse_expr ();      /* Parse an expression */
150 static int parse_ldconst ();    /* Parse and replace a 'ldconst' pseudo-op */
151 static void parse_memop ();     /* Parse a memory operand */
152 static void parse_po ();        /* Parse machine-dependent pseudo-op */
153 static void parse_regop ();     /* Parse a register operand */
154 static void reg_fmt ();         /* Generate a REG format instruction */
155 void reloc_callj ();            /* Relocate a 'callj' instruction */
156 static void relax_cobr ();      /* "De-optimize" cobr into compare/branch */
157 static void s_leafproc ();      /* Process '.leafproc' pseudo-op */
158 static void s_sysproc ();       /* Process '.sysproc' pseudo-op */
159 static int shift_ok ();         /* Will a 'shlo' substiture for a 'ldconst'? */
160 static void syntax ();          /* Give syntax error */
161 static int targ_has_sfr ();     /* Target chip supports spec-func register? */
162 static int targ_has_iclass ();  /* Target chip supports instruction set? */
163
164 /* See md_parse_option() for meanings of these options */
165 static char norelax;            /* True if -norelax switch seen */
166 static char instrument_branches;        /* True if -b switch seen */
167
168 /* Characters that always start a comment.
169    If the pre-processor is disabled, these aren't very useful.
170  */
171 const char comment_chars[] = "#";
172
173 /* Characters that only start a comment at the beginning of
174    a line.  If the line seems to have the form '# 123 filename'
175    .line and .file directives will appear in the pre-processed output.
176
177    Note that input_file.c hand checks for '#' at the beginning of the
178    first line of the input file.  This is because the compiler outputs
179    #NO_APP at the beginning of its output.
180  */
181
182 /* Also note that comments started like this one will always work.  */
183
184 const char line_comment_chars[] = "";
185
186 const char line_separator_chars[] = ";";
187
188 /* Chars that can be used to separate mant from exp in floating point nums */
189 const char EXP_CHARS[] = "eE";
190
191 /* Chars that mean this number is a floating point constant,
192    as in 0f12.456 or 0d1.2345e12
193  */
194 const char FLT_CHARS[] = "fFdDtT";
195
196 /* Table used by base assembler to relax addresses based on varying length
197    instructions.  The fields are:
198      1) most positive reach of this state,
199      2) most negative reach of this state,
200      3) how many bytes this mode will add to the size of the current frag
201      4) which index into the table to try if we can't fit into this one.
202
203    For i80960, the only application is the (de-)optimization of cobr
204    instructions into separate compare and branch instructions when a 13-bit
205    displacement won't hack it.
206  */
207 const relax_typeS md_relax_table[] =
208 {
209   {0, 0, 0, 0},                 /* State 0 => no more relaxation possible */
210   {4088, -4096, 0, 2},          /* State 1: conditional branch (cobr) */
211   {0x800000 - 8, -0x800000, 4, 0},      /* State 2: compare (reg) & branch (ctrl) */
212 };
213
214 static void s_endian PARAMS ((int));
215
216 /* These are the machine dependent pseudo-ops.
217
218    This table describes all the machine specific pseudo-ops the assembler
219    has to support.  The fields are:
220         pseudo-op name without dot
221         function to call to execute this pseudo-op
222         integer arg to pass to the function
223  */
224 #define S_LEAFPROC      1
225 #define S_SYSPROC       2
226
227 const pseudo_typeS md_pseudo_table[] =
228 {
229   {"bss", s_lcomm, 1},
230   {"endian", s_endian, 0},
231   {"extended", float_cons, 't'},
232   {"leafproc", parse_po, S_LEAFPROC},
233   {"sysproc", parse_po, S_SYSPROC},
234
235   {"word", cons, 4},
236   {"quad", cons, 16},
237
238   {0, 0, 0}
239 };
240 \f
241 /* Macros to extract info from an 'expressionS' structure 'e' */
242 #define adds(e) e.X_add_symbol
243 #define offs(e) e.X_add_number
244
245 /* Branch-prediction bits for CTRL/COBR format opcodes */
246 #define BP_MASK         0x00000002      /* Mask for branch-prediction bit */
247 #define BP_TAKEN        0x00000000      /* Value to OR in to predict branch */
248 #define BP_NOT_TAKEN    0x00000002      /* Value to OR in to predict no branch */
249
250 /* Some instruction opcodes that we need explicitly */
251 #define BE      0x12000000
252 #define BG      0x11000000
253 #define BGE     0x13000000
254 #define BL      0x14000000
255 #define BLE     0x16000000
256 #define BNE     0x15000000
257 #define BNO     0x10000000
258 #define BO      0x17000000
259 #define CHKBIT  0x5a002700
260 #define CMPI    0x5a002080
261 #define CMPO    0x5a002000
262
263 #define B       0x08000000
264 #define BAL     0x0b000000
265 #define CALL    0x09000000
266 #define CALLS   0x66003800
267 #define RET     0x0a000000
268
269 /* These masks are used to build up a set of MEMB mode bits.  */
270 #define A_BIT           0x0400
271 #define I_BIT           0x0800
272 #define MEMB_BIT        0x1000
273 #define D_BIT           0x2000
274
275 /* Mask for the only mode bit in a MEMA instruction (if set, abase reg is
276    used).  */
277 #define MEMA_ABASE      0x2000
278
279 /* Info from which a MEMA or MEMB format instruction can be generated */
280 typedef struct
281   {
282     /* (First) 32 bits of instruction */
283     long opcode;
284     /* 0-(none), 12- or, 32-bit displacement needed */
285     int disp;
286     /* The expression in the source instruction from which the
287        displacement should be determined.  */
288     char *e;
289   }
290
291 memS;
292
293 /* The two pieces of info we need to generate a register operand */
294 struct regop
295   {
296     int mode;                   /* 0 =>local/global/spec reg; 1=> literal or fp reg */
297     int special;                /* 0 =>not a sfr;  1=> is a sfr (not valid w/mode=0) */
298     int n;                      /* Register number or literal value */
299   };
300
301 /* Number and assembler mnemonic for all registers that can appear in
302    operands.  */
303 static const struct
304   {
305     char *reg_name;
306     int reg_num;
307   }
308 regnames[] =
309 {
310   { "pfp", 0 },
311   { "sp", 1 },
312   { "rip", 2 },
313   { "r3", 3 },
314   { "r4", 4 },
315   { "r5", 5 },
316   { "r6", 6 },
317   { "r7", 7 },
318   { "r8", 8 },
319   { "r9", 9 },
320   { "r10", 10 },
321   { "r11", 11 },
322   { "r12", 12 },
323   { "r13", 13 },
324   { "r14", 14 },
325   { "r15", 15 },
326   { "g0", 16 },
327   { "g1", 17 },
328   { "g2", 18 },
329   { "g3", 19 },
330   { "g4", 20 },
331   { "g5", 21 },
332   { "g6", 22 },
333   { "g7", 23 },
334   { "g8", 24 },
335   { "g9", 25 },
336   { "g10", 26 },
337   { "g11", 27 },
338   { "g12", 28 },
339   { "g13", 29 },
340   { "g14", 30 },
341   { "fp", 31 },
342
343   /* Numbers for special-function registers are for assembler internal
344      use only: they are scaled back to range [0-31] for binary output.  */
345 #define SF0     32
346
347   { "sf0", 32 },
348   { "sf1", 33 },
349   { "sf2", 34 },
350   { "sf3", 35 },
351   { "sf4", 36 },
352   { "sf5", 37 },
353   { "sf6", 38 },
354   { "sf7", 39 },
355   { "sf8", 40 },
356   { "sf9", 41 },
357   { "sf10", 42 },
358   { "sf11", 43 },
359   { "sf12", 44 },
360   { "sf13", 45 },
361   { "sf14", 46 },
362   { "sf15", 47 },
363   { "sf16", 48 },
364   { "sf17", 49 },
365   { "sf18", 50 },
366   { "sf19", 51 },
367   { "sf20", 52 },
368   { "sf21", 53 },
369   { "sf22", 54 },
370   { "sf23", 55 },
371   { "sf24", 56 },
372   { "sf25", 57 },
373   { "sf26", 58 },
374   { "sf27", 59 },
375   { "sf28", 60 },
376   { "sf29", 61 },
377   { "sf30", 62 },
378   { "sf31", 63 },
379
380   /* Numbers for floating point registers are for assembler internal
381      use only: they are scaled back to [0-3] for binary output.  */
382 #define FP0     64
383
384   { "fp0", 64 },
385   { "fp1", 65 },
386   { "fp2", 66 },
387   { "fp3", 67 },
388
389   { NULL, 0 },                          /* END OF LIST */
390 };
391
392 #define IS_RG_REG(n)    ((0 <= (n)) && ((n) < SF0))
393 #define IS_SF_REG(n)    ((SF0 <= (n)) && ((n) < FP0))
394 #define IS_FP_REG(n)    ((n) >= FP0)
395
396 /* Number and assembler mnemonic for all registers that can appear as
397    'abase' (indirect addressing) registers.  */
398 static const struct
399   {
400     char *areg_name;
401     int areg_num;
402   }
403 aregs[] =
404 {
405   { "(pfp)", 0 },
406   { "(sp)", 1 },
407   { "(rip)", 2 },
408   { "(r3)", 3 },
409   { "(r4)", 4 },
410   { "(r5)", 5 },
411   { "(r6)", 6 },
412   { "(r7)", 7 },
413   { "(r8)", 8 },
414   { "(r9)", 9 },
415   { "(r10)", 10 },
416   { "(r11)", 11 },
417   { "(r12)", 12 },
418   { "(r13)", 13 },
419   { "(r14)", 14 },
420   { "(r15)", 15 },
421   { "(g0)", 16 },
422   { "(g1)", 17 },
423   { "(g2)", 18 },
424   { "(g3)", 19 },
425   { "(g4)", 20 },
426   { "(g5)", 21 },
427   { "(g6)", 22 },
428   { "(g7)", 23 },
429   { "(g8)", 24 },
430   { "(g9)", 25 },
431   { "(g10)", 26 },
432   { "(g11)", 27 },
433   { "(g12)", 28 },
434   { "(g13)", 29 },
435   { "(g14)", 30 },
436   { "(fp)", 31 },
437
438 #define IPREL   32
439   /* For assembler internal use only: this number never appears in binary
440      output.  */
441   { "(ip)", IPREL },
442
443   { NULL, 0 },                          /* END OF LIST */
444 };
445
446 /* Hash tables */
447 static struct hash_control *op_hash;    /* Opcode mnemonics */
448 static struct hash_control *reg_hash;   /* Register name hash table */
449 static struct hash_control *areg_hash;  /* Abase register hash table */
450
451 /* Architecture for which we are assembling */
452 #define ARCH_ANY        0       /* Default: no architecture checking done */
453 #define ARCH_KA         1
454 #define ARCH_KB         2
455 #define ARCH_MC         3
456 #define ARCH_CA         4
457 #define ARCH_JX         5
458 #define ARCH_HX         6
459 int architecture = ARCH_ANY;    /* Architecture requested on invocation line */
460 int iclasses_seen;              /* OR of instruction classes (I_* constants)
461                                  *    for which we've actually assembled
462                                  *      instructions.
463                                  */
464
465 /* BRANCH-PREDICTION INSTRUMENTATION
466
467         The following supports generation of branch-prediction instrumentation
468         (turned on by -b switch).  The instrumentation collects counts
469         of branches taken/not-taken for later input to a utility that will
470         set the branch prediction bits of the instructions in accordance with
471         the behavior observed.  (Note that the KX series does not have
472         brach-prediction.)
473
474         The instrumentation consists of:
475
476         (1) before and after each conditional branch, a call to an external
477             routine that increments and steps over an inline counter.  The
478             counter itself, initialized to 0, immediately follows the call
479             instruction.  For each branch, the counter following the branch
480             is the number of times the branch was not taken, and the difference
481             between the counters is the number of times it was taken.  An
482             example of an instrumented conditional branch:
483
484                                 call    BR_CNT_FUNC
485                                 .word   0
486                 LBRANCH23:      be      label
487                                 call    BR_CNT_FUNC
488                                 .word   0
489
490         (2) a table of pointers to the instrumented branches, so that an
491             external postprocessing routine can locate all of the counters.
492             the table begins with a 2-word header: a pointer to the next in
493             a linked list of such tables (initialized to 0);  and a count
494             of the number of entries in the table (exclusive of the header.
495
496             Note that input source code is expected to already contain calls
497             an external routine that will link the branch local table into a
498             list of such tables.
499  */
500
501 /* Number of branches instrumented so far.  Also used to generate
502    unique local labels for each instrumented branch.  */
503 static int br_cnt;
504
505 #define BR_LABEL_BASE   "LBRANCH"
506 /* Basename of local labels on instrumented branches, to avoid
507    conflict with compiler- generated local labels.  */
508
509 #define BR_CNT_FUNC     "__inc_branch"
510 /* Name of the external routine that will increment (and step over) an
511    inline counter.  */
512
513 #define BR_TAB_NAME     "__BRANCH_TABLE__"
514 /* Name of the table of pointers to branches.  A local (i.e.,
515    non-external) symbol.  */
516 \f
517 /*****************************************************************************
518    md_begin:  One-time initialization.
519
520         Set up hash tables.
521
522   *************************************************************************** */
523 void
524 md_begin ()
525 {
526   int i;                        /* Loop counter */
527   const struct i960_opcode *oP; /* Pointer into opcode table */
528   const char *retval;           /* Value returned by hash functions */
529
530   op_hash = hash_new ();
531   reg_hash = hash_new ();
532   areg_hash = hash_new ();
533
534   /* For some reason, the base assembler uses an empty string for "no
535      error message", instead of a NULL pointer.  */
536   retval = 0;
537
538   for (oP = i960_opcodes; oP->name && !retval; oP++)
539     retval = hash_insert (op_hash, oP->name, (PTR) oP);
540
541   for (i = 0; regnames[i].reg_name && !retval; i++)
542     retval = hash_insert (reg_hash, regnames[i].reg_name,
543                           (char *) &regnames[i].reg_num);
544
545   for (i = 0; aregs[i].areg_name && !retval; i++)
546     retval = hash_insert (areg_hash, aregs[i].areg_name,
547                           (char *) &aregs[i].areg_num);
548
549   if (retval)
550     as_fatal (_("Hashing returned \"%s\"."), retval);
551 }
552
553 /*****************************************************************************
554    md_assemble:  Assemble an instruction
555
556    Assumptions about the passed-in text:
557         - all comments, labels removed
558         - text is an instruction
559         - all white space compressed to single blanks
560         - all character constants have been replaced with decimal
561
562   *************************************************************************** */
563 void
564 md_assemble (textP)
565      char *textP;               /* Source text of instruction */
566 {
567   /* Parsed instruction text, containing NO whitespace: arg[0]->opcode
568      mnemonic arg[1-3]->operands, with char constants replaced by
569      decimal numbers.  */
570   char *args[4];
571
572   int n_ops;                    /* Number of instruction operands */
573   /* Pointer to instruction description */
574   struct i960_opcode *oP;
575   /* TRUE iff opcode mnemonic included branch-prediction suffix (".f"
576      or ".t").  */
577   int branch_predict;
578   /* Setting of branch-prediction bit(s) to be OR'd into instruction
579      opcode of CTRL/COBR format instructions.  */
580   long bp_bits;
581
582   int n;                        /* Offset of last character in opcode mnemonic */
583
584   const char *bp_error_msg = _("branch prediction invalid on this opcode");
585
586   /* Parse instruction into opcode and operands */
587   memset (args, '\0', sizeof (args));
588   n_ops = i_scan (textP, args);
589   if (n_ops == -1)
590     {
591       return;                   /* Error message already issued */
592     }
593
594   /* Do "macro substitution" (sort of) on 'ldconst' pseudo-instruction */
595   if (!strcmp (args[0], "ldconst"))
596     {
597       n_ops = parse_ldconst (args);
598       if (n_ops == -1)
599         {
600           return;
601         }
602     }
603
604   /* Check for branch-prediction suffix on opcode mnemonic, strip it off */
605   n = strlen (args[0]) - 1;
606   branch_predict = 0;
607   bp_bits = 0;
608   if (args[0][n - 1] == '.' && (args[0][n] == 't' || args[0][n] == 'f'))
609     {
610       /* We could check here to see if the target architecture
611          supports branch prediction, but why bother?  The bit will
612          just be ignored by processors that don't use it.  */
613       branch_predict = 1;
614       bp_bits = (args[0][n] == 't') ? BP_TAKEN : BP_NOT_TAKEN;
615       args[0][n - 1] = '\0';    /* Strip suffix from opcode mnemonic */
616     }
617
618   /* Look up opcode mnemonic in table and check number of operands.
619      Check that opcode is legal for the target architecture.  If all
620      looks good, assemble instruction.  */
621   oP = (struct i960_opcode *) hash_find (op_hash, args[0]);
622   if (!oP || !targ_has_iclass (oP->iclass))
623     {
624       as_bad (_("invalid opcode, \"%s\"."), args[0]);
625
626     }
627   else if (n_ops != oP->num_ops)
628     {
629       as_bad (_("improper number of operands.  expecting %d, got %d"),
630               oP->num_ops, n_ops);
631     }
632   else
633     {
634       switch (oP->format)
635         {
636         case FBRA:
637         case CTRL:
638           ctrl_fmt (args[1], oP->opcode | bp_bits, oP->num_ops);
639           if (oP->format == FBRA)
640             {
641               /* Now generate a 'bno' to same arg */
642               ctrl_fmt (args[1], BNO | bp_bits, 1);
643             }
644           break;
645         case COBR:
646         case COJ:
647           cobr_fmt (args, oP->opcode | bp_bits, oP);
648           break;
649         case REG:
650           if (branch_predict)
651             {
652               as_warn (bp_error_msg);
653             }
654           reg_fmt (args, oP);
655           break;
656         case MEM1:
657           if (args[0][0] == 'c' && args[0][1] == 'a')
658             {
659               if (branch_predict)
660                 {
661                   as_warn (bp_error_msg);
662                 }
663               mem_fmt (args, oP, 1);
664               break;
665             }
666         case MEM2:
667         case MEM4:
668         case MEM8:
669         case MEM12:
670         case MEM16:
671           if (branch_predict)
672             {
673               as_warn (bp_error_msg);
674             }
675           mem_fmt (args, oP, 0);
676           break;
677         case CALLJ:
678           if (branch_predict)
679             {
680               as_warn (bp_error_msg);
681             }
682           /* Output opcode & set up "fixup" (relocation); flag
683              relocation as 'callj' type.  */
684           know (oP->num_ops == 1);
685           get_cdisp (args[1], "CTRL", oP->opcode, 24, 0, 1);
686           break;
687         default:
688           BAD_CASE (oP->format);
689           break;
690         }
691     }
692 }                               /* md_assemble() */
693
694 /*****************************************************************************
695    md_number_to_chars:  convert a number to target byte order
696
697   *************************************************************************** */
698 void
699 md_number_to_chars (buf, value, n)
700      char *buf;
701      valueT value;
702      int n;
703 {
704   number_to_chars_littleendian (buf, value, n);
705 }
706
707 /*****************************************************************************
708    md_chars_to_number:  convert from target byte order to host byte order.
709
710   *************************************************************************** */
711 int
712 md_chars_to_number (val, n)
713      unsigned char *val;        /* Value in target byte order */
714      int n;                     /* Number of bytes in the input */
715 {
716   int retval;
717
718   for (retval = 0; n--;)
719     {
720       retval <<= 8;
721       retval |= val[n];
722     }
723   return retval;
724 }
725
726 #define MAX_LITTLENUMS  6
727 #define LNUM_SIZE       sizeof (LITTLENUM_TYPE)
728
729 /*****************************************************************************
730    md_atof:     convert ascii to floating point
731
732    Turn a string at input_line_pointer into a floating point constant of type
733    'type', and store the appropriate bytes at *litP.  The number of LITTLENUMS
734    emitted is returned at 'sizeP'.  An error message is returned, or a pointer
735    to an empty message if OK.
736
737    Note we call the i386 floating point routine, rather than complicating
738    things with more files or symbolic links.
739
740   *************************************************************************** */
741 char *
742 md_atof (type, litP, sizeP)
743      int type;
744      char *litP;
745      int *sizeP;
746 {
747   LITTLENUM_TYPE words[MAX_LITTLENUMS];
748   LITTLENUM_TYPE *wordP;
749   int prec;
750   char *t;
751   char *atof_ieee ();
752
753   switch (type)
754     {
755     case 'f':
756     case 'F':
757       prec = 2;
758       break;
759
760     case 'd':
761     case 'D':
762       prec = 4;
763       break;
764
765     case 't':
766     case 'T':
767       prec = 5;
768       type = 'x';               /* That's what atof_ieee() understands */
769       break;
770
771     default:
772       *sizeP = 0;
773       return _("Bad call to md_atof()");
774     }
775
776   t = atof_ieee (input_line_pointer, type, words);
777   if (t)
778     {
779       input_line_pointer = t;
780     }
781
782   *sizeP = prec * LNUM_SIZE;
783
784   /* Output the LITTLENUMs in REVERSE order in accord with i80960
785      word-order.  (Dunno why atof_ieee doesn't do it in the right
786      order in the first place -- probably because it's a hack of
787      atof_m68k.)  */
788
789   for (wordP = words + prec - 1; prec--;)
790     {
791       md_number_to_chars (litP, (long) (*wordP--), LNUM_SIZE);
792       litP += sizeof (LITTLENUM_TYPE);
793     }
794
795   return 0;
796 }
797
798 /*****************************************************************************
799    md_number_to_imm
800
801   *************************************************************************** */
802 void
803 md_number_to_imm (buf, val, n)
804      char *buf;
805      long val;
806      int n;
807 {
808   md_number_to_chars (buf, val, n);
809 }
810
811 /*****************************************************************************
812    md_number_to_disp
813
814   *************************************************************************** */
815 void
816 md_number_to_disp (buf, val, n)
817      char *buf;
818      long val;
819      int n;
820 {
821   md_number_to_chars (buf, val, n);
822 }
823
824 /*****************************************************************************
825    md_number_to_field:
826
827         Stick a value (an address fixup) into a bit field of
828         previously-generated instruction.
829
830   *************************************************************************** */
831 void
832 md_number_to_field (instrP, val, bfixP)
833      char *instrP;              /* Pointer to instruction to be fixed */
834      long val;                  /* Address fixup value */
835      bit_fixS *bfixP;           /* Description of bit field to be fixed up */
836 {
837   int numbits;                  /* Length of bit field to be fixed */
838   long instr;                   /* 32-bit instruction to be fixed-up */
839   long sign;                    /* 0 or -1, according to sign bit of 'val' */
840
841   /* Convert instruction back to host byte order.  */
842   instr = md_chars_to_number (instrP, 4);
843
844   /* Surprise! -- we stored the number of bits to be modified rather
845      than a pointer to a structure.  */
846   numbits = (int) bfixP;
847   if (numbits == 1)
848     {
849       /* This is a no-op, stuck here by reloc_callj() */
850       return;
851     }
852
853   know ((numbits == 13) || (numbits == 24));
854
855   /* Propagate sign bit of 'val' for the given number of bits.  Result
856      should be all 0 or all 1.  */
857   sign = val >> ((int) numbits - 1);
858   if (((val < 0) && (sign != -1))
859       || ((val > 0) && (sign != 0)))
860     {
861       as_bad (_("Fixup of %ld too large for field width of %d"),
862               val, numbits);
863     }
864   else
865     {
866       /* Put bit field into instruction and write back in target
867          * byte order.
868        */
869       val &= ~(-1 << (int) numbits);    /* Clear unused sign bits */
870       instr |= val;
871       md_number_to_chars (instrP, instr, 4);
872     }
873 }                               /* md_number_to_field() */
874 \f
875
876 /*****************************************************************************
877    md_parse_option
878         Invocation line includes a switch not recognized by the base assembler.
879         See if it's a processor-specific option.  For the 960, these are:
880
881         -norelax:
882                 Conditional branch instructions that require displacements
883                 greater than 13 bits (or that have external targets) should
884                 generate errors.  The default is to replace each such
885                 instruction with the corresponding compare (or chkbit) and
886                 branch instructions.  Note that the Intel "j" cobr directives
887                 are ALWAYS "de-optimized" in this way when necessary,
888                 regardless of the setting of this option.
889
890         -b:
891                 Add code to collect information about branches taken, for
892                 later optimization of branch prediction bits by a separate
893                 tool.  COBR and CNTL format instructions have branch
894                 prediction bits (in the CX architecture);  if "BR" represents
895                 an instruction in one of these classes, the following rep-
896                 resents the code generated by the assembler:
897
898                         call    <increment routine>
899                         .word   0       # pre-counter
900                 Label:  BR
901                         call    <increment routine>
902                         .word   0       # post-counter
903
904                 A table of all such "Labels" is also generated.
905
906         -AKA, -AKB, -AKC, -ASA, -ASB, -AMC, -ACA:
907                 Select the 80960 architecture.  Instructions or features not
908                 supported by the selected architecture cause fatal errors.
909                 The default is to generate code for any instruction or feature
910                 that is supported by SOME version of the 960 (even if this
911                 means mixing architectures!).
912
913   ****************************************************************************/
914
915 CONST char *md_shortopts = "A:b";
916 struct option md_longopts[] =
917 {
918 #define OPTION_LINKRELAX (OPTION_MD_BASE)
919   {"linkrelax", no_argument, NULL, OPTION_LINKRELAX},
920   {"link-relax", no_argument, NULL, OPTION_LINKRELAX},
921 #define OPTION_NORELAX (OPTION_MD_BASE + 1)
922   {"norelax", no_argument, NULL, OPTION_NORELAX},
923   {"no-relax", no_argument, NULL, OPTION_NORELAX},
924   {NULL, no_argument, NULL, 0}
925 };
926 size_t md_longopts_size = sizeof (md_longopts);
927
928 struct tabentry
929   {
930     char *flag;
931     int arch;
932   };
933 static const struct tabentry arch_tab[] =
934 {
935   {"KA", ARCH_KA},
936   {"KB", ARCH_KB},
937   {"SA", ARCH_KA},              /* Synonym for KA */
938   {"SB", ARCH_KB},              /* Synonym for KB */
939   {"KC", ARCH_MC},              /* Synonym for MC */
940   {"MC", ARCH_MC},
941   {"CA", ARCH_CA},
942   {"JX", ARCH_JX},
943   {"HX", ARCH_HX},
944   {NULL, 0}
945 };
946
947 int
948 md_parse_option (c, arg)
949      int c;
950      char *arg;
951 {
952   switch (c)
953     {
954     case OPTION_LINKRELAX:
955       linkrelax = 1;
956       flag_keep_locals = 1;
957       break;
958
959     case OPTION_NORELAX:
960       norelax = 1;
961       break;
962
963     case 'b':
964       instrument_branches = 1;
965       break;
966
967     case 'A':
968       {
969         const struct tabentry *tp;
970         char *p = arg;
971
972         for (tp = arch_tab; tp->flag != NULL; tp++)
973           if (!strcmp (p, tp->flag))
974             break;
975
976         if (tp->flag == NULL)
977           {
978             as_bad (_("invalid architecture %s"), p);
979             return 0;
980           }
981         else
982           architecture = tp->arch;
983       }
984       break;
985
986     default:
987       return 0;
988     }
989
990   return 1;
991 }
992
993 void
994 md_show_usage (stream)
995      FILE *stream;
996 {
997   int i;
998   fprintf (stream, _("I960 options:\n"));
999   for (i = 0; arch_tab[i].flag; i++)
1000     fprintf (stream, "%s-A%s", i ? " | " : "", arch_tab[i].flag);
1001   fprintf (stream, _("\n\
1002                         specify variant of 960 architecture\n\
1003 -b                      add code to collect statistics about branches taken\n\
1004 -link-relax             preserve individual alignment directives so linker\n\
1005                         can do relaxing (b.out format only)\n\
1006 -no-relax               don't alter compare-and-branch instructions for\n\
1007                         long displacements\n"));
1008 }
1009 \f
1010
1011 /*****************************************************************************
1012    md_convert_frag:
1013         Called by base assembler after address relaxation is finished:  modify
1014         variable fragments according to how much relaxation was done.
1015
1016         If the fragment substate is still 1, a 13-bit displacement was enough
1017         to reach the symbol in question.  Set up an address fixup, but otherwise
1018         leave the cobr instruction alone.
1019
1020         If the fragment substate is 2, a 13-bit displacement was not enough.
1021         Replace the cobr with a two instructions (a compare and a branch).
1022
1023   *************************************************************************** */
1024 #ifndef BFD_ASSEMBLER
1025 void
1026 md_convert_frag (headers, seg, fragP)
1027      object_headers *headers;
1028      segT seg;
1029      fragS *fragP;
1030 #else
1031 void
1032 md_convert_frag (abfd, sec, fragP)
1033      bfd *abfd;
1034      segT sec;
1035      fragS *fragP;
1036 #endif
1037 {
1038   fixS *fixP;                   /* Structure describing needed address fix */
1039
1040   switch (fragP->fr_subtype)
1041     {
1042     case 1:
1043       /* LEAVE SINGLE COBR INSTRUCTION */
1044       fixP = fix_new (fragP,
1045                       fragP->fr_opcode - fragP->fr_literal,
1046                       4,
1047                       fragP->fr_symbol,
1048                       fragP->fr_offset,
1049                       1,
1050                       NO_RELOC);
1051
1052       fixP->fx_bit_fixP = (bit_fixS *) 13;      /* size of bit field */
1053       break;
1054     case 2:
1055       /* REPLACE COBR WITH COMPARE/BRANCH INSTRUCTIONS */
1056       relax_cobr (fragP);
1057       break;
1058     default:
1059       BAD_CASE (fragP->fr_subtype);
1060       break;
1061     }
1062 }
1063
1064 /*****************************************************************************
1065    md_estimate_size_before_relax:  How much does it look like *fragP will grow?
1066
1067         Called by base assembler just before address relaxation.
1068         Return the amount by which the fragment will grow.
1069
1070         Any symbol that is now undefined will not become defined; cobr's
1071         based on undefined symbols will have to be replaced with a compare
1072         instruction and a branch instruction, and the code fragment will grow
1073         by 4 bytes.
1074
1075   *************************************************************************** */
1076 int
1077 md_estimate_size_before_relax (fragP, segment_type)
1078      register fragS *fragP;
1079      register segT segment_type;
1080 {
1081   /* If symbol is undefined in this segment, go to "relaxed" state
1082      (compare and branch instructions instead of cobr) right now.  */
1083   if (S_GET_SEGMENT (fragP->fr_symbol) != segment_type)
1084     {
1085       relax_cobr (fragP);
1086       return 4;
1087     }
1088   return 0;
1089 }                               /* md_estimate_size_before_relax() */
1090
1091 #if defined(OBJ_AOUT) | defined(OBJ_BOUT)
1092
1093 /*****************************************************************************
1094    md_ri_to_chars:
1095         This routine exists in order to overcome machine byte-order problems
1096         when dealing with bit-field entries in the relocation_info struct.
1097
1098         But relocation info will be used on the host machine only (only
1099         executable code is actually downloaded to the i80960).  Therefore,
1100         we leave it in host byte order.
1101
1102         The above comment is no longer true.  This routine now really
1103         does do the reordering (Ian Taylor 28 Aug 92).
1104
1105   *************************************************************************** */
1106
1107 static void
1108 md_ri_to_chars (where, ri)
1109      char *where;
1110      struct relocation_info *ri;
1111 {
1112   md_number_to_chars (where, ri->r_address,
1113                       sizeof (ri->r_address));
1114   where[4] = ri->r_index & 0x0ff;
1115   where[5] = (ri->r_index >> 8) & 0x0ff;
1116   where[6] = (ri->r_index >> 16) & 0x0ff;
1117   where[7] = ((ri->r_pcrel << 0)
1118               | (ri->r_length << 1)
1119               | (ri->r_extern << 3)
1120               | (ri->r_bsr << 4)
1121               | (ri->r_disp << 5)
1122               | (ri->r_callj << 6));
1123 }
1124
1125 #endif /* defined(OBJ_AOUT) | defined(OBJ_BOUT) */
1126
1127 \f
1128 /* FOLLOWING ARE THE LOCAL ROUTINES, IN ALPHABETICAL ORDER  */
1129
1130 /*****************************************************************************
1131    brcnt_emit:  Emit code to increment inline branch counter.
1132
1133         See the comments above the declaration of 'br_cnt' for details on
1134         branch-prediction instrumentation.
1135   *************************************************************************** */
1136 static void
1137 brcnt_emit ()
1138 {
1139   ctrl_fmt (BR_CNT_FUNC, CALL, 1);      /* Emit call to "increment" routine */
1140   emit (0);                     /* Emit inline counter to be incremented */
1141 }
1142
1143 /*****************************************************************************
1144    brlab_next:  generate the next branch local label
1145
1146         See the comments above the declaration of 'br_cnt' for details on
1147         branch-prediction instrumentation.
1148   *************************************************************************** */
1149 static char *
1150 brlab_next ()
1151 {
1152   static char buf[20];
1153
1154   sprintf (buf, "%s%d", BR_LABEL_BASE, br_cnt++);
1155   return buf;
1156 }
1157
1158 /*****************************************************************************
1159    brtab_emit:  generate the fetch-prediction branch table.
1160
1161         See the comments above the declaration of 'br_cnt' for details on
1162         branch-prediction instrumentation.
1163
1164         The code emitted here would be functionally equivalent to the following
1165         example assembler source.
1166
1167                         .data
1168                         .align  2
1169            BR_TAB_NAME:
1170                         .word   0               # link to next table
1171                         .word   3               # length of table
1172                         .word   LBRANCH0        # 1st entry in table proper
1173                         .word   LBRANCH1
1174                         .word   LBRANCH2
1175   **************************************************************************** */
1176 void
1177 brtab_emit ()
1178 {
1179   int i;
1180   char buf[20];
1181   char *p;                      /* Where the binary was output to */
1182   /* Pointer to description of deferred address fixup.  */
1183   fixS *fixP;
1184
1185   if (!instrument_branches)
1186     {
1187       return;
1188     }
1189
1190   subseg_set (data_section, 0); /*      .data */
1191   frag_align (2, 0, 0);         /*      .align 2 */
1192   record_alignment (now_seg, 2);
1193   colon (BR_TAB_NAME);          /* BR_TAB_NAME: */
1194   emit (0);                     /*      .word 0 #link to next table */
1195   emit (br_cnt);                /*      .word n #length of table */
1196
1197   for (i = 0; i < br_cnt; i++)
1198     {
1199       sprintf (buf, "%s%d", BR_LABEL_BASE, i);
1200       p = emit (0);
1201       fixP = fix_new (frag_now,
1202                       p - frag_now->fr_literal,
1203                       4,
1204                       symbol_find (buf),
1205                       0,
1206                       0,
1207                       NO_RELOC);
1208     }
1209 }
1210
1211 /*****************************************************************************
1212    cobr_fmt:    generate a COBR-format instruction
1213
1214   *************************************************************************** */
1215 static
1216 void
1217 cobr_fmt (arg, opcode, oP)
1218      /* arg[0]->opcode mnemonic, arg[1-3]->operands (ascii) */
1219      char *arg[];
1220      /* Opcode, with branch-prediction bits already set if necessary.  */
1221      long opcode;
1222      /* Pointer to description of instruction.  */
1223      struct i960_opcode *oP;
1224 {
1225   long instr;                   /* 32-bit instruction */
1226   struct regop regop;           /* Description of register operand */
1227   int n;                        /* Number of operands */
1228   int var_frag;                 /* 1 if varying length code fragment should
1229                                  *    be emitted;  0 if an address fix
1230                                  *      should be emitted.
1231                                  */
1232
1233   instr = opcode;
1234   n = oP->num_ops;
1235
1236   if (n >= 1)
1237     {
1238       /* First operand (if any) of a COBR is always a register
1239          operand.  Parse it.  */
1240       parse_regop (&regop, arg[1], oP->operand[0]);
1241       instr |= (regop.n << 19) | (regop.mode << 13);
1242     }
1243   if (n >= 2)
1244     {
1245       /* Second operand (if any) of a COBR is always a register
1246          operand.  Parse it.  */
1247     parse_regop (&regop, arg[2], oP->operand[1]);
1248       instr |= (regop.n << 14) | regop.special;
1249     }
1250
1251   if (n < 3)
1252     {
1253       emit (instr);
1254
1255     }
1256   else
1257     {
1258       if (instrument_branches)
1259         {
1260           brcnt_emit ();
1261           colon (brlab_next ());
1262         }
1263
1264       /* A third operand to a COBR is always a displacement.  Parse
1265          it; if it's relaxable (a cobr "j" directive, or any cobr
1266          other than bbs/bbc when the "-norelax" option is not in use)
1267          set up a variable code fragment; otherwise set up an address
1268          fix.  */
1269       var_frag = !norelax || (oP->format == COJ);       /* TRUE or FALSE */
1270       get_cdisp (arg[3], "COBR", instr, 13, var_frag, 0);
1271
1272       if (instrument_branches)
1273         {
1274           brcnt_emit ();
1275         }
1276     }
1277 }                               /* cobr_fmt() */
1278
1279 /*****************************************************************************
1280    ctrl_fmt:    generate a CTRL-format instruction
1281
1282   *************************************************************************** */
1283 static
1284 void
1285 ctrl_fmt (targP, opcode, num_ops)
1286      char *targP;               /* Pointer to text of lone operand (if any) */
1287      long opcode;               /* Template of instruction */
1288      int num_ops;               /* Number of operands */
1289 {
1290   int instrument;               /* TRUE iff we should add instrumentation to track
1291                                    * how often the branch is taken
1292                                  */
1293
1294   if (num_ops == 0)
1295     {
1296       emit (opcode);            /* Output opcode */
1297     }
1298   else
1299     {
1300
1301       instrument = instrument_branches && (opcode != CALL)
1302         && (opcode != B) && (opcode != RET) && (opcode != BAL);
1303
1304       if (instrument)
1305         {
1306           brcnt_emit ();
1307           colon (brlab_next ());
1308         }
1309
1310       /* The operand MUST be an ip-relative displacment. Parse it
1311          * and set up address fix for the instruction we just output.
1312        */
1313       get_cdisp (targP, "CTRL", opcode, 24, 0, 0);
1314
1315       if (instrument)
1316         {
1317           brcnt_emit ();
1318         }
1319     }
1320
1321 }
1322
1323 /*****************************************************************************
1324    emit:        output instruction binary
1325
1326         Output instruction binary, in target byte order, 4 bytes at a time.
1327         Return pointer to where it was placed.
1328
1329   *************************************************************************** */
1330 static
1331 char *
1332 emit (instr)
1333      long instr;                /* Word to be output, host byte order */
1334 {
1335   char *toP;                    /* Where to output it */
1336
1337   toP = frag_more (4);          /* Allocate storage */
1338   md_number_to_chars (toP, instr, 4);   /* Convert to target byte order */
1339   return toP;
1340 }
1341
1342 /*****************************************************************************
1343    get_args:    break individual arguments out of comma-separated list
1344
1345    Input assumptions:
1346         - all comments and labels have been removed
1347         - all strings of whitespace have been collapsed to a single blank.
1348         - all character constants ('x') have been replaced with decimal
1349
1350    Output:
1351         args[0] is untouched. args[1] points to first operand, etc. All args:
1352         - are NULL-terminated
1353         - contain no whitespace
1354
1355    Return value:
1356         Number of operands (0,1,2, or 3) or -1 on error.
1357
1358   *************************************************************************** */
1359 static int
1360 get_args (p, args)
1361      /* Pointer to comma-separated operands; MUCKED BY US */
1362      register char *p;
1363      /* Output arg: pointers to operands placed in args[1-3].  MUST
1364         ACCOMMODATE 4 ENTRIES (args[0-3]).  */
1365      char *args[];
1366 {
1367   register int n;               /* Number of operands */
1368   register char *to;
1369
1370   /* Skip lead white space */
1371   while (*p == ' ')
1372     {
1373       p++;
1374     }
1375
1376   if (*p == '\0')
1377     {
1378       return 0;
1379     }
1380
1381   n = 1;
1382   args[1] = p;
1383
1384   /* Squeze blanks out by moving non-blanks toward start of string.
1385      * Isolate operands, whenever comma is found.
1386    */
1387   to = p;
1388   while (*p != '\0')
1389     {
1390
1391       if (*p == ' '
1392           && (! isalnum ((unsigned char) p[1])
1393               || ! isalnum ((unsigned char) p[-1])))
1394         {
1395           p++;
1396
1397         }
1398       else if (*p == ',')
1399         {
1400
1401           /* Start of operand */
1402           if (n == 3)
1403             {
1404               as_bad (_("too many operands"));
1405               return -1;
1406             }
1407           *to++ = '\0';         /* Terminate argument */
1408           args[++n] = to;       /* Start next argument */
1409           p++;
1410
1411         }
1412       else
1413         {
1414           *to++ = *p++;
1415         }
1416     }
1417   *to = '\0';
1418   return n;
1419 }
1420
1421 /*****************************************************************************
1422    get_cdisp:   handle displacement for a COBR or CTRL instruction.
1423
1424         Parse displacement for a COBR or CTRL instruction.
1425
1426         If successful, output the instruction opcode and set up for it,
1427         depending on the arg 'var_frag', either:
1428             o an address fixup to be done when all symbol values are known, or
1429             o a varying length code fragment, with address fixup info.  This
1430                 will be done for cobr instructions that may have to be relaxed
1431                 in to compare/branch instructions (8 bytes) if the final
1432                 address displacement is greater than 13 bits.
1433
1434   ****************************************************************************/
1435 static
1436 void
1437 get_cdisp (dispP, ifmtP, instr, numbits, var_frag, callj)
1438      /* displacement as specified in source instruction */
1439      char *dispP;
1440      /* "COBR" or "CTRL" (for use in error message) */
1441      char *ifmtP;
1442      /* Instruction needing the displacement */
1443      long instr;
1444      /* # bits of displacement (13 for COBR, 24 for CTRL) */
1445      int numbits;
1446      /* 1 if varying length code fragment should be emitted;
1447       *       0 if an address fix should be emitted.
1448       */
1449      int var_frag;
1450      /* 1 if callj relocation should be done; else 0 */
1451      int callj;
1452 {
1453   expressionS e;                /* Parsed expression */
1454   fixS *fixP;                   /* Structure describing needed address fix */
1455   char *outP;                   /* Where instruction binary is output to */
1456
1457   fixP = NULL;
1458
1459   parse_expr (dispP, &e);
1460   switch (e.X_op)
1461     {
1462     case O_illegal:
1463       as_bad (_("expression syntax error"));
1464
1465     case O_symbol:
1466       if (S_GET_SEGMENT (e.X_add_symbol) == now_seg
1467           || S_GET_SEGMENT (e.X_add_symbol) == undefined_section)
1468         {
1469           if (var_frag)
1470             {
1471               outP = frag_more (8);     /* Allocate worst-case storage */
1472               md_number_to_chars (outP, instr, 4);
1473               frag_variant (rs_machine_dependent, 4, 4, 1,
1474                             adds (e), offs (e), outP);
1475             }
1476           else
1477             {
1478               /* Set up a new fix structure, so address can be updated
1479                * when all symbol values are known.
1480                */
1481               outP = emit (instr);
1482               fixP = fix_new (frag_now,
1483                               outP - frag_now->fr_literal,
1484                               4,
1485                               adds (e),
1486                               offs (e),
1487                               1,
1488                               NO_RELOC);
1489
1490               fixP->fx_tcbit = callj;
1491
1492               /* We want to modify a bit field when the address is
1493                * known.  But we don't need all the garbage in the
1494                * bit_fix structure.  So we're going to lie and store
1495                * the number of bits affected instead of a pointer.
1496                */
1497               fixP->fx_bit_fixP = (bit_fixS *) numbits;
1498             }
1499         }
1500       else
1501         as_bad (_("attempt to branch into different segment"));
1502       break;
1503
1504     default:
1505       as_bad (_("target of %s instruction must be a label"), ifmtP);
1506       break;
1507     }
1508 }
1509
1510 /*****************************************************************************
1511    get_ispec:   parse a memory operand for an index specification
1512
1513         Here, an "index specification" is taken to be anything surrounded
1514         by square brackets and NOT followed by anything else.
1515
1516         If it's found, detach it from the input string, remove the surrounding
1517         square brackets, and return a pointer to it.  Otherwise, return NULL.
1518
1519   *************************************************************************** */
1520 static
1521 char *
1522 get_ispec (textP)
1523      /* Pointer to memory operand from source instruction, no white space.  */
1524      char *textP;
1525 {
1526   /* Points to start of index specification.  */
1527   char *start;
1528   /* Points to end of index specification.  */
1529   char *end;
1530
1531   /* Find opening square bracket, if any.  */
1532   start = strchr (textP, '[');
1533
1534   if (start != NULL)
1535     {
1536
1537       /* Eliminate '[', detach from rest of operand */
1538       *start++ = '\0';
1539
1540       end = strchr (start, ']');
1541
1542       if (end == NULL)
1543         {
1544           as_bad (_("unmatched '['"));
1545
1546         }
1547       else
1548         {
1549           /* Eliminate ']' and make sure it was the last thing
1550              * in the string.
1551            */
1552           *end = '\0';
1553           if (*(end + 1) != '\0')
1554             {
1555               as_bad (_("garbage after index spec ignored"));
1556             }
1557         }
1558     }
1559   return start;
1560 }
1561
1562 /*****************************************************************************
1563    get_regnum:
1564
1565         Look up a (suspected) register name in the register table and return the
1566         associated register number (or -1 if not found).
1567
1568   *************************************************************************** */
1569 static
1570 int
1571 get_regnum (regname)
1572      char *regname;             /* Suspected register name */
1573 {
1574   int *rP;
1575
1576   rP = (int *) hash_find (reg_hash, regname);
1577   return (rP == NULL) ? -1 : *rP;
1578 }
1579
1580 /*****************************************************************************
1581    i_scan:      perform lexical scan of ascii assembler instruction.
1582
1583    Input assumptions:
1584         - input string is an i80960 instruction (not a pseudo-op)
1585         - all comments and labels have been removed
1586         - all strings of whitespace have been collapsed to a single blank.
1587
1588    Output:
1589         args[0] points to opcode, other entries point to operands. All strings:
1590         - are NULL-terminated
1591         - contain no whitespace
1592         - have character constants ('x') replaced with a decimal number
1593
1594    Return value:
1595         Number of operands (0,1,2, or 3) or -1 on error.
1596
1597   *************************************************************************** */
1598 static int
1599 i_scan (iP, args)
1600      /* Pointer to ascii instruction;  MUCKED BY US.  */
1601      register char *iP;
1602      /* Output arg: pointers to opcode and operands placed here.  MUST
1603         ACCOMMODATE 4 ENTRIES.  */
1604      char *args[];
1605 {
1606
1607   /* Isolate opcode */
1608   if (*(iP) == ' ')
1609     {
1610       iP++;
1611     }                           /* Skip lead space, if any */
1612   args[0] = iP;
1613   for (; *iP != ' '; iP++)
1614     {
1615       if (*iP == '\0')
1616         {
1617           /* There are no operands */
1618           if (args[0] == iP)
1619             {
1620               /* We never moved: there was no opcode either! */
1621               as_bad (_("missing opcode"));
1622               return -1;
1623             }
1624           return 0;
1625         }
1626     }
1627   *iP++ = '\0';                 /* Terminate opcode */
1628   return (get_args (iP, args));
1629 }                               /* i_scan() */
1630
1631 /*****************************************************************************
1632    mem_fmt:     generate a MEMA- or MEMB-format instruction
1633
1634   *************************************************************************** */
1635 static void
1636 mem_fmt (args, oP, callx)
1637      char *args[];              /* args[0]->opcode mnemonic, args[1-3]->operands */
1638      struct i960_opcode *oP;    /* Pointer to description of instruction */
1639      int callx;                 /* Is this a callx opcode */
1640 {
1641   int i;                        /* Loop counter */
1642   struct regop regop;           /* Description of register operand */
1643   char opdesc;                  /* Operand descriptor byte */
1644   memS instr;                   /* Description of binary to be output */
1645   char *outP;                   /* Where the binary was output to */
1646   expressionS expr;             /* Parsed expression */
1647   /* ->description of deferred address fixup */
1648   fixS *fixP;
1649
1650 #ifdef OBJ_COFF
1651   /* COFF support isn't in place yet for callx relaxing.  */
1652   callx = 0;
1653 #endif
1654
1655   memset (&instr, '\0', sizeof (memS));
1656   instr.opcode = oP->opcode;
1657
1658   /* Process operands.  */
1659   for (i = 1; i <= oP->num_ops; i++)
1660     {
1661       opdesc = oP->operand[i - 1];
1662
1663       if (MEMOP (opdesc))
1664         {
1665           parse_memop (&instr, args[i], oP->format);
1666         }
1667       else
1668         {
1669           parse_regop (&regop, args[i], opdesc);
1670           instr.opcode |= regop.n << 19;
1671         }
1672     }
1673
1674   /* Parse the displacement; this must be done before emitting the
1675      opcode, in case it is an expression using `.'.  */
1676   parse_expr (instr.e, &expr);
1677
1678   /* Output opcode */
1679   outP = emit (instr.opcode);
1680
1681   if (instr.disp == 0)
1682     {
1683       return;
1684     }
1685
1686   /* Process the displacement */
1687   switch (expr.X_op)
1688     {
1689     case O_illegal:
1690       as_bad (_("expression syntax error"));
1691       break;
1692
1693     case O_constant:
1694       if (instr.disp == 32)
1695         {
1696           (void) emit (offs (expr));    /* Output displacement */
1697         }
1698       else
1699         {
1700           /* 12-bit displacement */
1701           if (offs (expr) & ~0xfff)
1702             {
1703               /* Won't fit in 12 bits: convert already-output
1704                * instruction to MEMB format, output
1705                * displacement.
1706                */
1707               mema_to_memb (outP);
1708               (void) emit (offs (expr));
1709             }
1710           else
1711             {
1712               /* WILL fit in 12 bits:  OR into opcode and
1713                * overwrite the binary we already put out
1714                */
1715               instr.opcode |= offs (expr);
1716               md_number_to_chars (outP, instr.opcode, 4);
1717             }
1718         }
1719       break;
1720
1721     default:
1722       if (instr.disp == 12)
1723         {
1724           /* Displacement is dependent on a symbol, whose value
1725            * may change at link time.  We HAVE to reserve 32 bits.
1726            * Convert already-output opcode to MEMB format.
1727            */
1728           mema_to_memb (outP);
1729         }
1730
1731       /* Output 0 displacement and set up address fixup for when
1732        * this symbol's value becomes known.
1733        */
1734       outP = emit ((long) 0);
1735       fixP = fix_new_exp (frag_now,
1736                           outP - frag_now->fr_literal,
1737                           4,
1738                           &expr,
1739                           0,
1740                           NO_RELOC);
1741       /* Steve's linker relaxing hack.  Mark this 32-bit relocation as
1742          being in the instruction stream, specifically as part of a callx
1743          instruction.  */
1744       fixP->fx_bsr = callx;
1745       break;
1746     }
1747 }                               /* memfmt() */
1748
1749 /*****************************************************************************
1750    mema_to_memb:        convert a MEMA-format opcode to a MEMB-format opcode.
1751
1752    There are 2 possible MEMA formats:
1753         - displacement only
1754         - displacement + abase
1755
1756    They are distinguished by the setting of the MEMA_ABASE bit.
1757
1758   *************************************************************************** */
1759 static void
1760 mema_to_memb (opcodeP)
1761      char *opcodeP;             /* Where to find the opcode, in target byte order */
1762 {
1763   long opcode;                  /* Opcode in host byte order */
1764   long mode;                    /* Mode bits for MEMB instruction */
1765
1766   opcode = md_chars_to_number (opcodeP, 4);
1767   know (!(opcode & MEMB_BIT));
1768
1769   mode = MEMB_BIT | D_BIT;
1770   if (opcode & MEMA_ABASE)
1771     {
1772       mode |= A_BIT;
1773     }
1774
1775   opcode &= 0xffffc000;         /* Clear MEMA offset and mode bits */
1776   opcode |= mode;               /* Set MEMB mode bits */
1777
1778   md_number_to_chars (opcodeP, opcode, 4);
1779 }                               /* mema_to_memb() */
1780
1781 /*****************************************************************************
1782    parse_expr:          parse an expression
1783
1784         Use base assembler's expression parser to parse an expression.
1785         It, unfortunately, runs off a global which we have to save/restore
1786         in order to make it work for us.
1787
1788         An empty expression string is treated as an absolute 0.
1789
1790         Sets O_illegal regardless of expression evaluation if entire input
1791         string is not consumed in the evaluation -- tolerate no dangling junk!
1792
1793   *************************************************************************** */
1794 static void
1795 parse_expr (textP, expP)
1796      char *textP;               /* Text of expression to be parsed */
1797      expressionS *expP;         /* Where to put the results of parsing */
1798 {
1799   char *save_in;                /* Save global here */
1800   symbolS *symP;
1801
1802   know (textP);
1803
1804   if (*textP == '\0')
1805     {
1806       /* Treat empty string as absolute 0 */
1807       expP->X_add_symbol = expP->X_op_symbol = NULL;
1808       expP->X_add_number = 0;
1809       expP->X_op = O_constant;
1810     }
1811   else
1812     {
1813       save_in = input_line_pointer;     /* Save global */
1814       input_line_pointer = textP;       /* Make parser work for us */
1815
1816       (void) expression (expP);
1817       if ((size_t) (input_line_pointer - textP) != strlen (textP))
1818         {
1819           /* Did not consume all of the input */
1820           expP->X_op = O_illegal;
1821         }
1822       symP = expP->X_add_symbol;
1823       if (symP && (hash_find (reg_hash, S_GET_NAME (symP))))
1824         {
1825           /* Register name in an expression */
1826           /* FIXME: this isn't much of a check any more.  */
1827           expP->X_op = O_illegal;
1828         }
1829
1830       input_line_pointer = save_in;     /* Restore global */
1831     }
1832 }
1833
1834 /*****************************************************************************
1835    parse_ldcont:
1836         Parse and replace a 'ldconst' pseudo-instruction with an appropriate
1837         i80960 instruction.
1838
1839         Assumes the input consists of:
1840                 arg[0]  opcode mnemonic ('ldconst')
1841                 arg[1]  first operand (constant)
1842                 arg[2]  name of register to be loaded
1843
1844         Replaces opcode and/or operands as appropriate.
1845
1846         Returns the new number of arguments, or -1 on failure.
1847
1848   *************************************************************************** */
1849 static
1850 int
1851 parse_ldconst (arg)
1852      char *arg[];               /* See above */
1853 {
1854   int n;                        /* Constant to be loaded */
1855   int shift;                    /* Shift count for "shlo" instruction */
1856   static char buf[5];           /* Literal for first operand */
1857   static char buf2[5];          /* Literal for second operand */
1858   expressionS e;                /* Parsed expression */
1859
1860   arg[3] = NULL;                /* So we can tell at the end if it got used or not */
1861
1862   parse_expr (arg[1], &e);
1863   switch (e.X_op)
1864     {
1865     default:
1866       /* We're dependent on one or more symbols -- use "lda" */
1867       arg[0] = "lda";
1868       break;
1869
1870     case O_constant:
1871       /* Try the following mappings:
1872        *      ldconst 0,<reg>  ->mov  0,<reg>
1873        *        ldconst 31,<reg> ->mov  31,<reg>
1874        *        ldconst 32,<reg> ->addo 1,31,<reg>
1875        *        ldconst 62,<reg> ->addo 31,31,<reg>
1876        *        ldconst 64,<reg> ->shlo 8,3,<reg>
1877        *        ldconst -1,<reg> ->subo 1,0,<reg>
1878        *        ldconst -31,<reg>->subo 31,0,<reg>
1879        *
1880        * anthing else becomes:
1881        *        lda xxx,<reg>
1882        */
1883       n = offs (e);
1884       if ((0 <= n) && (n <= 31))
1885         {
1886           arg[0] = "mov";
1887
1888         }
1889       else if ((-31 <= n) && (n <= -1))
1890         {
1891           arg[0] = "subo";
1892           arg[3] = arg[2];
1893           sprintf (buf, "%d", -n);
1894           arg[1] = buf;
1895           arg[2] = "0";
1896
1897         }
1898       else if ((32 <= n) && (n <= 62))
1899         {
1900           arg[0] = "addo";
1901           arg[3] = arg[2];
1902           arg[1] = "31";
1903           sprintf (buf, "%d", n - 31);
1904           arg[2] = buf;
1905
1906         }
1907       else if ((shift = shift_ok (n)) != 0)
1908         {
1909           arg[0] = "shlo";
1910           arg[3] = arg[2];
1911           sprintf (buf, "%d", shift);
1912           arg[1] = buf;
1913           sprintf (buf2, "%d", n >> shift);
1914           arg[2] = buf2;
1915
1916         }
1917       else
1918         {
1919           arg[0] = "lda";
1920         }
1921       break;
1922
1923     case O_illegal:
1924       as_bad (_("invalid constant"));
1925       return -1;
1926       break;
1927     }
1928   return (arg[3] == 0) ? 2 : 3;
1929 }
1930
1931 /*****************************************************************************
1932    parse_memop: parse a memory operand
1933
1934         This routine is based on the observation that the 4 mode bits of the
1935         MEMB format, taken individually, have fairly consistent meaning:
1936
1937                  M3 (bit 13): 1 if displacement is present (D_BIT)
1938                  M2 (bit 12): 1 for MEMB instructions (MEMB_BIT)
1939                  M1 (bit 11): 1 if index is present (I_BIT)
1940                  M0 (bit 10): 1 if abase is present (A_BIT)
1941
1942         So we parse the memory operand and set bits in the mode as we find
1943         things.  Then at the end, if we go to MEMB format, we need only set
1944         the MEMB bit (M2) and our mode is built for us.
1945
1946         Unfortunately, I said "fairly consistent".  The exceptions:
1947
1948                  DBIA
1949                  0100   Would seem illegal, but means "abase-only".
1950
1951                  0101   Would seem to mean "abase-only" -- it means IP-relative.
1952                         Must be converted to 0100.
1953
1954                  0110   Would seem to mean "index-only", but is reserved.
1955                         We turn on the D bit and provide a 0 displacement.
1956
1957         The other thing to observe is that we parse from the right, peeling
1958         things * off as we go:  first any index spec, then any abase, then
1959         the displacement.
1960
1961   *************************************************************************** */
1962 static
1963 void
1964 parse_memop (memP, argP, optype)
1965      memS *memP;                /* Where to put the results */
1966      char *argP;                /* Text of the operand to be parsed */
1967      int optype;                /* MEM1, MEM2, MEM4, MEM8, MEM12, or MEM16 */
1968 {
1969   char *indexP;                 /* Pointer to index specification with "[]" removed */
1970   char *p;                      /* Temp char pointer */
1971   char iprel_flag;              /* True if this is an IP-relative operand */
1972   int regnum;                   /* Register number */
1973   /* Scale factor: 1,2,4,8, or 16.  Later converted to internal format
1974      (0,1,2,3,4 respectively).  */
1975   int scale;
1976   int mode;                     /* MEMB mode bits */
1977   int *intP;                    /* Pointer to register number */
1978
1979   /* The following table contains the default scale factors for each
1980      type of memory instruction.  It is accessed using (optype-MEM1)
1981      as an index -- thus it assumes the 'optype' constants are
1982      assigned consecutive values, in the order they appear in this
1983      table.  */
1984   static const int def_scale[] =
1985   {
1986     1,                          /* MEM1 */
1987     2,                          /* MEM2 */
1988     4,                          /* MEM4 */
1989     8,                          /* MEM8 */
1990     -1,                         /* MEM12 -- no valid default */
1991     16                          /* MEM16 */
1992   };
1993
1994   iprel_flag = mode = 0;
1995
1996   /* Any index present? */
1997   indexP = get_ispec (argP);
1998   if (indexP)
1999     {
2000       p = strchr (indexP, '*');
2001       if (p == NULL)
2002         {
2003           /* No explicit scale -- use default for this instruction
2004              type and assembler mode.  */
2005           if (flag_mri)
2006             scale = 1;
2007           else
2008             /* GNU960 compatibility */
2009             scale = def_scale[optype - MEM1];
2010         }
2011       else
2012         {
2013           *p++ = '\0';          /* Eliminate '*' */
2014
2015           /* Now indexP->a '\0'-terminated register name,
2016              * and p->a scale factor.
2017            */
2018
2019           if (!strcmp (p, "16"))
2020             {
2021               scale = 16;
2022             }
2023           else if (strchr ("1248", *p) && (p[1] == '\0'))
2024             {
2025               scale = *p - '0';
2026             }
2027           else
2028             {
2029               scale = -1;
2030             }
2031         }
2032
2033       regnum = get_regnum (indexP);     /* Get index reg. # */
2034       if (!IS_RG_REG (regnum))
2035         {
2036           as_bad (_("invalid index register"));
2037           return;
2038         }
2039
2040       /* Convert scale to its binary encoding */
2041       switch (scale)
2042         {
2043         case 1:
2044           scale = 0 << 7;
2045           break;
2046         case 2:
2047           scale = 1 << 7;
2048           break;
2049         case 4:
2050           scale = 2 << 7;
2051           break;
2052         case 8:
2053           scale = 3 << 7;
2054           break;
2055         case 16:
2056           scale = 4 << 7;
2057           break;
2058         default:
2059           as_bad (_("invalid scale factor"));
2060           return;
2061         };
2062
2063       memP->opcode |= scale | regnum;   /* Set index bits in opcode */
2064       mode |= I_BIT;            /* Found a valid index spec */
2065     }
2066
2067   /* Any abase (Register Indirect) specification present? */
2068   if ((p = strrchr (argP, '(')) != NULL)
2069     {
2070       /* "(" is there -- does it start a legal abase spec?  If not, it
2071          could be part of a displacement expression.  */
2072       intP = (int *) hash_find (areg_hash, p);
2073       if (intP != NULL)
2074         {
2075           /* Got an abase here */
2076           regnum = *intP;
2077           *p = '\0';            /* discard register spec */
2078           if (regnum == IPREL)
2079             {
2080               /* We have to specialcase ip-rel mode */
2081               iprel_flag = 1;
2082             }
2083           else
2084             {
2085               memP->opcode |= regnum << 14;
2086               mode |= A_BIT;
2087             }
2088         }
2089     }
2090
2091   /* Any expression present? */
2092   memP->e = argP;
2093   if (*argP != '\0')
2094     {
2095       mode |= D_BIT;
2096     }
2097
2098   /* Special-case ip-relative addressing */
2099   if (iprel_flag)
2100     {
2101       if (mode & I_BIT)
2102         {
2103           syntax ();
2104         }
2105       else
2106         {
2107           memP->opcode |= 5 << 10;      /* IP-relative mode */
2108           memP->disp = 32;
2109         }
2110       return;
2111     }
2112
2113   /* Handle all other modes */
2114   switch (mode)
2115     {
2116     case D_BIT | A_BIT:
2117       /* Go with MEMA instruction format for now (grow to MEMB later
2118          if 12 bits is not enough for the displacement).  MEMA format
2119          has a single mode bit: set it to indicate that abase is
2120          present.  */
2121       memP->opcode |= MEMA_ABASE;
2122       memP->disp = 12;
2123       break;
2124
2125     case D_BIT:
2126       /* Go with MEMA instruction format for now (grow to MEMB later
2127          if 12 bits is not enough for the displacement).  */
2128       memP->disp = 12;
2129       break;
2130
2131     case A_BIT:
2132       /* For some reason, the bit string for this mode is not
2133          consistent: it should be 0 (exclusive of the MEMB bit), so we
2134          set it "by hand" here.  */
2135       memP->opcode |= MEMB_BIT;
2136       break;
2137
2138     case A_BIT | I_BIT:
2139       /* set MEMB bit in mode, and OR in mode bits */
2140       memP->opcode |= mode | MEMB_BIT;
2141       break;
2142
2143     case I_BIT:
2144       /* Treat missing displacement as displacement of 0.  */
2145       mode |= D_BIT;
2146       /* Fall into next case.  */
2147     case D_BIT | A_BIT | I_BIT:
2148     case D_BIT | I_BIT:
2149       /* set MEMB bit in mode, and OR in mode bits */
2150       memP->opcode |= mode | MEMB_BIT;
2151       memP->disp = 32;
2152       break;
2153
2154     default:
2155       syntax ();
2156       break;
2157     }
2158 }
2159
2160 /*****************************************************************************
2161    parse_po:    parse machine-dependent pseudo-op
2162
2163         This is a top-level routine for machine-dependent pseudo-ops.  It slurps
2164         up the rest of the input line, breaks out the individual arguments,
2165         and dispatches them to the correct handler.
2166   *************************************************************************** */
2167 static
2168 void
2169 parse_po (po_num)
2170      int po_num;                /* Pseudo-op number:  currently S_LEAFPROC or S_SYSPROC */
2171 {
2172   /* Pointers operands, with no embedded whitespace.
2173      arg[0] unused, arg[1-3]->operands */
2174   char *args[4];
2175   int n_ops;                    /* Number of operands */
2176   char *p;                      /* Pointer to beginning of unparsed argument string */
2177   char eol;                     /* Character that indicated end of line */
2178
2179   extern char is_end_of_line[];
2180
2181   /* Advance input pointer to end of line.  */
2182   p = input_line_pointer;
2183   while (!is_end_of_line[(unsigned char) *input_line_pointer])
2184     {
2185       input_line_pointer++;
2186     }
2187   eol = *input_line_pointer;    /* Save end-of-line char */
2188   *input_line_pointer = '\0';   /* Terminate argument list */
2189
2190   /* Parse out operands */
2191   n_ops = get_args (p, args);
2192   if (n_ops == -1)
2193     {
2194       return;
2195     }
2196
2197   /* Dispatch to correct handler */
2198   switch (po_num)
2199     {
2200     case S_SYSPROC:
2201       s_sysproc (n_ops, args);
2202       break;
2203     case S_LEAFPROC:
2204       s_leafproc (n_ops, args);
2205       break;
2206     default:
2207       BAD_CASE (po_num);
2208       break;
2209     }
2210
2211   /* Restore eol, so line numbers get updated correctly.  Base
2212      assembler assumes we leave input pointer pointing at char
2213      following the eol.  */
2214   *input_line_pointer++ = eol;
2215 }
2216
2217 /*****************************************************************************
2218    parse_regop: parse a register operand.
2219
2220         In case of illegal operand, issue a message and return some valid
2221         information so instruction processing can continue.
2222   *************************************************************************** */
2223 static
2224 void
2225 parse_regop (regopP, optext, opdesc)
2226      struct regop *regopP;      /* Where to put description of register operand */
2227      char *optext;              /* Text of operand */
2228      char opdesc;               /* Descriptor byte:  what's legal for this operand */
2229 {
2230   int n;                        /* Register number */
2231   expressionS e;                /* Parsed expression */
2232
2233   /* See if operand is a register */
2234   n = get_regnum (optext);
2235   if (n >= 0)
2236     {
2237       if (IS_RG_REG (n))
2238         {
2239           /* global or local register */
2240           if (!REG_ALIGN (opdesc, n))
2241             {
2242               as_bad (_("unaligned register"));
2243             }
2244           regopP->n = n;
2245           regopP->mode = 0;
2246           regopP->special = 0;
2247           return;
2248         }
2249       else if (IS_FP_REG (n) && FP_OK (opdesc))
2250         {
2251           /* Floating point register, and it's allowed */
2252           regopP->n = n - FP0;
2253           regopP->mode = 1;
2254           regopP->special = 0;
2255           return;
2256         }
2257       else if (IS_SF_REG (n) && SFR_OK (opdesc))
2258         {
2259           /* Special-function register, and it's allowed */
2260           regopP->n = n - SF0;
2261           regopP->mode = 0;
2262           regopP->special = 1;
2263           if (!targ_has_sfr (regopP->n))
2264             {
2265               as_bad (_("no such sfr in this architecture"));
2266             }
2267           return;
2268         }
2269     }
2270   else if (LIT_OK (opdesc))
2271     {
2272       /* How about a literal?  */
2273       regopP->mode = 1;
2274       regopP->special = 0;
2275       if (FP_OK (opdesc))
2276         {                       /* floating point literal acceptable */
2277           /* Skip over 0f, 0d, or 0e prefix */
2278           if ((optext[0] == '0')
2279               && (optext[1] >= 'd')
2280               && (optext[1] <= 'f'))
2281             {
2282               optext += 2;
2283             }
2284
2285           if (!strcmp (optext, "0.0") || !strcmp (optext, "0"))
2286             {
2287               regopP->n = 0x10;
2288               return;
2289             }
2290           if (!strcmp (optext, "1.0") || !strcmp (optext, "1"))
2291             {
2292               regopP->n = 0x16;
2293               return;
2294             }
2295
2296         }
2297       else
2298         {                       /* fixed point literal acceptable */
2299           parse_expr (optext, &e);
2300           if (e.X_op != O_constant
2301               || (offs (e) < 0) || (offs (e) > 31))
2302             {
2303               as_bad (_("illegal literal"));
2304               offs (e) = 0;
2305             }
2306           regopP->n = offs (e);
2307           return;
2308         }
2309     }
2310
2311   /* Nothing worked */
2312   syntax ();
2313   regopP->mode = 0;             /* Register r0 is always a good one */
2314   regopP->n = 0;
2315   regopP->special = 0;
2316 }                               /* parse_regop() */
2317
2318 /*****************************************************************************
2319    reg_fmt:     generate a REG-format instruction
2320
2321   *************************************************************************** */
2322 static void
2323 reg_fmt (args, oP)
2324      char *args[];              /* args[0]->opcode mnemonic, args[1-3]->operands */
2325      struct i960_opcode *oP;    /* Pointer to description of instruction */
2326 {
2327   long instr;                   /* Binary to be output */
2328   struct regop regop;           /* Description of register operand */
2329   int n_ops;                    /* Number of operands */
2330
2331   instr = oP->opcode;
2332   n_ops = oP->num_ops;
2333
2334   if (n_ops >= 1)
2335     {
2336       parse_regop (&regop, args[1], oP->operand[0]);
2337
2338       if ((n_ops == 1) && !(instr & M3))
2339         {
2340           /* 1-operand instruction in which the dst field should
2341              * be used (instead of src1).
2342            */
2343           regop.n <<= 19;
2344           if (regop.special)
2345             {
2346               regop.mode = regop.special;
2347             }
2348           regop.mode <<= 13;
2349           regop.special = 0;
2350         }
2351       else
2352         {
2353           /* regop.n goes in bit 0, needs no shifting */
2354           regop.mode <<= 11;
2355           regop.special <<= 5;
2356         }
2357       instr |= regop.n | regop.mode | regop.special;
2358     }
2359
2360   if (n_ops >= 2)
2361     {
2362       parse_regop (&regop, args[2], oP->operand[1]);
2363
2364       if ((n_ops == 2) && !(instr & M3))
2365         {
2366           /* 2-operand instruction in which the dst field should
2367              * be used instead of src2).
2368            */
2369           regop.n <<= 19;
2370           if (regop.special)
2371             {
2372               regop.mode = regop.special;
2373             }
2374           regop.mode <<= 13;
2375           regop.special = 0;
2376         }
2377       else
2378         {
2379           regop.n <<= 14;
2380           regop.mode <<= 12;
2381           regop.special <<= 6;
2382         }
2383       instr |= regop.n | regop.mode | regop.special;
2384     }
2385   if (n_ops == 3)
2386     {
2387       parse_regop (&regop, args[3], oP->operand[2]);
2388       if (regop.special)
2389         {
2390           regop.mode = regop.special;
2391         }
2392       instr |= (regop.n <<= 19) | (regop.mode <<= 13);
2393     }
2394   emit (instr);
2395 }
2396
2397 /*****************************************************************************
2398    relax_cobr:
2399         Replace cobr instruction in a code fragment with equivalent branch and
2400         compare instructions, so it can reach beyond a 13-bit displacement.
2401         Set up an address fix/relocation for the new branch instruction.
2402
2403   *************************************************************************** */
2404
2405 /* This "conditional jump" table maps cobr instructions into
2406    equivalent compare and branch opcodes.  */
2407 static const
2408 struct
2409 {
2410   long compare;
2411   long branch;
2412 }
2413
2414 coj[] =
2415 {                               /* COBR OPCODE: */
2416   { CHKBIT, BNO },              /*      0x30 - bbc */
2417   { CMPO, BG },                 /*      0x31 - cmpobg */
2418   { CMPO, BE },                 /*      0x32 - cmpobe */
2419   { CMPO, BGE },                /*      0x33 - cmpobge */
2420   { CMPO, BL },                 /*      0x34 - cmpobl */
2421   { CMPO, BNE },                /*      0x35 - cmpobne */
2422   { CMPO, BLE },                /*      0x36 - cmpoble */
2423   { CHKBIT, BO },               /*      0x37 - bbs */
2424   { CMPI, BNO },                /*      0x38 - cmpibno */
2425   { CMPI, BG },                 /*      0x39 - cmpibg */
2426   { CMPI, BE },                 /*      0x3a - cmpibe */
2427   { CMPI, BGE },                /*      0x3b - cmpibge */
2428   { CMPI, BL },                 /*      0x3c - cmpibl */
2429   { CMPI, BNE },                /*      0x3d - cmpibne */
2430   { CMPI, BLE },                /*      0x3e - cmpible */
2431   { CMPI, BO },                 /*      0x3f - cmpibo */
2432 };
2433
2434 static
2435 void
2436 relax_cobr (fragP)
2437      register fragS *fragP;     /* fragP->fr_opcode is assumed to point to
2438                                  * the cobr instruction, which comes at the
2439                                  * end of the code fragment.
2440                                  */
2441 {
2442   int opcode, src1, src2, m1, s2;
2443   /* Bit fields from cobr instruction */
2444   long bp_bits;                 /* Branch prediction bits from cobr instruction */
2445   long instr;                   /* A single i960 instruction */
2446   /* ->instruction to be replaced */
2447   char *iP;
2448   fixS *fixP;                   /* Relocation that can be done at assembly time */
2449
2450   /* PICK UP & PARSE COBR INSTRUCTION */
2451   iP = fragP->fr_opcode;
2452   instr = md_chars_to_number (iP, 4);
2453   opcode = ((instr >> 24) & 0xff) - 0x30;       /* "-0x30" for table index */
2454   src1 = (instr >> 19) & 0x1f;
2455   m1 = (instr >> 13) & 1;
2456   s2 = instr & 1;
2457   src2 = (instr >> 14) & 0x1f;
2458   bp_bits = instr & BP_MASK;
2459
2460   /* GENERATE AND OUTPUT COMPARE INSTRUCTION */
2461   instr = coj[opcode].compare
2462     | src1 | (m1 << 11) | (s2 << 6) | (src2 << 14);
2463   md_number_to_chars (iP, instr, 4);
2464
2465   /* OUTPUT BRANCH INSTRUCTION */
2466   md_number_to_chars (iP + 4, coj[opcode].branch | bp_bits, 4);
2467
2468   /* SET UP ADDRESS FIXUP/RELOCATION */
2469   fixP = fix_new (fragP,
2470                   iP + 4 - fragP->fr_literal,
2471                   4,
2472                   fragP->fr_symbol,
2473                   fragP->fr_offset,
2474                   1,
2475                   NO_RELOC);
2476
2477   fixP->fx_bit_fixP = (bit_fixS *) 24;  /* Store size of bit field */
2478
2479   fragP->fr_fix += 4;
2480   frag_wane (fragP);
2481 }
2482
2483 /*****************************************************************************
2484    reloc_callj: Relocate a 'callj' instruction
2485
2486         This is a "non-(GNU)-standard" machine-dependent hook.  The base
2487         assembler calls it when it decides it can relocate an address at
2488         assembly time instead of emitting a relocation directive.
2489
2490         Check to see if the relocation involves a 'callj' instruction to a:
2491             sysproc:    Replace the default 'call' instruction with a 'calls'
2492             leafproc:   Replace the default 'call' instruction with a 'bal'.
2493             other proc: Do nothing.
2494
2495         See b.out.h for details on the 'n_other' field in a symbol structure.
2496
2497    IMPORTANT!:
2498         Assumes the caller has already figured out, in the case of a leafproc,
2499         to use the 'bal' entry point, and has substituted that symbol into the
2500         passed fixup structure.
2501
2502   *************************************************************************** */
2503 void
2504 reloc_callj (fixP)
2505      /* Relocation that can be done at assembly time */
2506      fixS *fixP;
2507 {
2508   /* Points to the binary for the instruction being relocated.  */
2509   char *where;
2510
2511   if (!fixP->fx_tcbit)
2512     {
2513       /* This wasn't a callj instruction in the first place */
2514       return;
2515     }
2516
2517   where = fixP->fx_frag->fr_literal + fixP->fx_where;
2518
2519   if (TC_S_IS_SYSPROC (fixP->fx_addsy))
2520     {
2521       /* Symbol is a .sysproc: replace 'call' with 'calls'.  System
2522          procedure number is (other-1).  */
2523       md_number_to_chars (where, CALLS | TC_S_GET_SYSPROC (fixP->fx_addsy), 4);
2524
2525       /* Nothing else needs to be done for this instruction.  Make
2526          sure 'md_number_to_field()' will perform a no-op.  */
2527       fixP->fx_bit_fixP = (bit_fixS *) 1;
2528
2529     }
2530   else if (TC_S_IS_CALLNAME (fixP->fx_addsy))
2531     {
2532       /* Should not happen: see block comment above */
2533       as_fatal (_("Trying to 'bal' to %s"), S_GET_NAME (fixP->fx_addsy));
2534     }
2535   else if (TC_S_IS_BALNAME (fixP->fx_addsy))
2536     {
2537       /* Replace 'call' with 'bal'; both instructions have the same
2538          format, so calling code should complete relocation as if
2539          nothing happened here.  */
2540       md_number_to_chars (where, BAL, 4);
2541     }
2542   else if (TC_S_IS_BADPROC (fixP->fx_addsy))
2543     {
2544       as_bad (_("Looks like a proc, but can't tell what kind.\n"));
2545     }                           /* switch on proc type */
2546
2547   /* else Symbol is neither a sysproc nor a leafproc */
2548 }
2549
2550 /*****************************************************************************
2551    s_leafproc:  process .leafproc pseudo-op
2552
2553         .leafproc takes two arguments, the second one is optional:
2554                 arg[1]: name of 'call' entry point to leaf procedure
2555                 arg[2]: name of 'bal' entry point to leaf procedure
2556
2557         If the two arguments are identical, or if the second one is missing,
2558         the first argument is taken to be the 'bal' entry point.
2559
2560         If there are 2 distinct arguments, we must make sure that the 'bal'
2561         entry point immediately follows the 'call' entry point in the linked
2562         list of symbols.
2563
2564   *************************************************************************** */
2565 static void
2566 s_leafproc (n_ops, args)
2567      int n_ops;                 /* Number of operands */
2568      char *args[];              /* args[1]->1st operand, args[2]->2nd operand */
2569 {
2570   symbolS *callP;               /* Pointer to leafproc 'call' entry point symbol */
2571   symbolS *balP;                /* Pointer to leafproc 'bal' entry point symbol */
2572
2573   if ((n_ops != 1) && (n_ops != 2))
2574     {
2575       as_bad (_("should have 1 or 2 operands"));
2576       return;
2577     }                           /* Check number of arguments */
2578
2579   /* Find or create symbol for 'call' entry point.  */
2580   callP = symbol_find_or_make (args[1]);
2581
2582   if (TC_S_IS_CALLNAME (callP))
2583     {
2584       as_warn (_("Redefining leafproc %s"), S_GET_NAME (callP));
2585     }                           /* is leafproc */
2586
2587   /* If that was the only argument, use it as the 'bal' entry point.
2588      * Otherwise, mark it as the 'call' entry point and find or create
2589      * another symbol for the 'bal' entry point.
2590    */
2591   if ((n_ops == 1) || !strcmp (args[1], args[2]))
2592     {
2593       TC_S_FORCE_TO_BALNAME (callP);
2594
2595     }
2596   else
2597     {
2598       TC_S_FORCE_TO_CALLNAME (callP);
2599
2600       balP = symbol_find_or_make (args[2]);
2601       if (TC_S_IS_CALLNAME (balP))
2602         {
2603           as_warn (_("Redefining leafproc %s"), S_GET_NAME (balP));
2604         }
2605       TC_S_FORCE_TO_BALNAME (balP);
2606
2607 #ifndef OBJ_ELF
2608       tc_set_bal_of_call (callP, balP);
2609 #endif
2610     }                           /* if only one arg, or the args are the same */
2611 }
2612
2613 /*
2614    s_sysproc: process .sysproc pseudo-op
2615
2616         .sysproc takes two arguments:
2617                 arg[1]: name of entry point to system procedure
2618                 arg[2]: 'entry_num' (index) of system procedure in the range
2619                         [0,31] inclusive.
2620
2621         For [ab].out, we store the 'entrynum' in the 'n_other' field of
2622         the symbol.  Since that entry is normally 0, we bias 'entrynum'
2623         by adding 1 to it.  It must be unbiased before it is used.  */
2624 static void
2625 s_sysproc (n_ops, args)
2626      int n_ops;                 /* Number of operands */
2627      char *args[];              /* args[1]->1st operand, args[2]->2nd operand */
2628 {
2629   expressionS exp;
2630   symbolS *symP;
2631
2632   if (n_ops != 2)
2633     {
2634       as_bad (_("should have two operands"));
2635       return;
2636     }                           /* bad arg count */
2637
2638   /* Parse "entry_num" argument and check it for validity.  */
2639   parse_expr (args[2], &exp);
2640   if (exp.X_op != O_constant
2641       || (offs (exp) < 0)
2642       || (offs (exp) > 31))
2643     {
2644       as_bad (_("'entry_num' must be absolute number in [0,31]"));
2645       return;
2646     }
2647
2648   /* Find/make symbol and stick entry number (biased by +1) into it */
2649   symP = symbol_find_or_make (args[1]);
2650
2651   if (TC_S_IS_SYSPROC (symP))
2652     {
2653       as_warn (_("Redefining entrynum for sysproc %s"), S_GET_NAME (symP));
2654     }                           /* redefining */
2655
2656   TC_S_SET_SYSPROC (symP, offs (exp));  /* encode entry number */
2657   TC_S_FORCE_TO_SYSPROC (symP);
2658 }
2659
2660 /*****************************************************************************
2661    shift_ok:
2662         Determine if a "shlo" instruction can be used to implement a "ldconst".
2663         This means that some number X < 32 can be shifted left to produce the
2664         constant of interest.
2665
2666         Return the shift count, or 0 if we can't do it.
2667         Caller calculates X by shifting original constant right 'shift' places.
2668
2669   *************************************************************************** */
2670 static
2671 int
2672 shift_ok (n)
2673      int n;                     /* The constant of interest */
2674 {
2675   int shift;                    /* The shift count */
2676
2677   if (n <= 0)
2678     {
2679       /* Can't do it for negative numbers */
2680       return 0;
2681     }
2682
2683   /* Shift 'n' right until a 1 is about to be lost */
2684   for (shift = 0; (n & 1) == 0; shift++)
2685     {
2686       n >>= 1;
2687     }
2688
2689   if (n >= 32)
2690     {
2691       return 0;
2692     }
2693   return shift;
2694 }
2695
2696 /* syntax: issue syntax error */
2697
2698 static void
2699 syntax ()
2700 {
2701   as_bad (_("syntax error"));
2702 }                               /* syntax() */
2703
2704 /* targ_has_sfr:
2705
2706    Return TRUE iff the target architecture supports the specified
2707    special-function register (sfr).  */
2708
2709 static
2710 int
2711 targ_has_sfr (n)
2712      int n;                     /* Number (0-31) of sfr */
2713 {
2714   switch (architecture)
2715     {
2716     case ARCH_KA:
2717     case ARCH_KB:
2718     case ARCH_MC:
2719     case ARCH_JX:
2720       return 0;
2721     case ARCH_HX:
2722       return ((0 <= n) && (n <= 4));
2723     case ARCH_CA:
2724     default:
2725       return ((0 <= n) && (n <= 2));
2726     }
2727 }
2728
2729 /* targ_has_iclass:
2730
2731    Return TRUE iff the target architecture supports the indicated
2732    class of instructions.  */
2733 static
2734 int
2735 targ_has_iclass (ic)
2736      /* Instruction class;  one of:
2737         I_BASE, I_CX, I_DEC, I_KX, I_FP, I_MIL, I_CASIM, I_CX2, I_HX, I_HX2
2738       */
2739      int ic;
2740 {
2741   iclasses_seen |= ic;
2742   switch (architecture)
2743     {
2744     case ARCH_KA:
2745       return ic & (I_BASE | I_KX);
2746     case ARCH_KB:
2747       return ic & (I_BASE | I_KX | I_FP | I_DEC);
2748     case ARCH_MC:
2749       return ic & (I_BASE | I_KX | I_FP | I_DEC | I_MIL);
2750     case ARCH_CA:
2751       return ic & (I_BASE | I_CX | I_CX2 | I_CASIM);
2752     case ARCH_JX:
2753       return ic & (I_BASE | I_CX2 | I_JX);
2754     case ARCH_HX:
2755       return ic & (I_BASE | I_CX2 | I_JX | I_HX);
2756     default:
2757       if ((iclasses_seen & (I_KX | I_FP | I_DEC | I_MIL))
2758           && (iclasses_seen & (I_CX | I_CX2)))
2759         {
2760           as_warn (_("architecture of opcode conflicts with that of earlier instruction(s)"));
2761           iclasses_seen &= ~ic;
2762         }
2763       return 1;
2764     }
2765 }
2766
2767 /* Handle the MRI .endian pseudo-op.  */
2768
2769 static void
2770 s_endian (ignore)
2771      int ignore;
2772 {
2773   char *name;
2774   char c;
2775
2776   name = input_line_pointer;
2777   c = get_symbol_end ();
2778   if (strcasecmp (name, "little") == 0)
2779     ;
2780   else if (strcasecmp (name, "big") == 0)
2781     as_bad (_("big endian mode is not supported"));
2782   else
2783     as_warn (_("ignoring unrecognized .endian type `%s'"), name);
2784
2785   *input_line_pointer = c;
2786
2787   demand_empty_rest_of_line ();
2788 }
2789
2790 /* We have no need to default values of symbols.  */
2791
2792 symbolS *
2793 md_undefined_symbol (name)
2794      char *name;
2795 {
2796   return 0;
2797 }
2798
2799 /* Exactly what point is a PC-relative offset relative TO?
2800    On the i960, they're relative to the address of the instruction,
2801    which we have set up as the address of the fixup too.  */
2802 long
2803 md_pcrel_from (fixP)
2804      fixS *fixP;
2805 {
2806   return fixP->fx_where + fixP->fx_frag->fr_address;
2807 }
2808
2809 #ifdef BFD_ASSEMBLER
2810 int
2811 md_apply_fix (fixP, valp)
2812      fixS *fixP;
2813      valueT *valp;
2814 #else
2815 void
2816 md_apply_fix (fixP, val)
2817      fixS *fixP;
2818      long val;
2819 #endif
2820 {
2821 #ifdef BFD_ASSEMBLER
2822   long val = *valp;
2823 #endif
2824   char *place = fixP->fx_where + fixP->fx_frag->fr_literal;
2825
2826   if (!fixP->fx_bit_fixP)
2827     {
2828 #ifndef BFD_ASSEMBLER
2829       /* For callx, we always want to write out zero, and emit a
2830          symbolic relocation.  */
2831       if (fixP->fx_bsr)
2832         val = 0;
2833
2834       fixP->fx_addnumber = val;
2835 #endif
2836
2837       md_number_to_imm (place, val, fixP->fx_size, fixP);
2838     }
2839   else
2840     md_number_to_field (place, val, fixP->fx_bit_fixP);
2841
2842 #ifdef BFD_ASSEMBLER
2843   return 0;
2844 #endif
2845 }
2846
2847 #if defined(OBJ_AOUT) | defined(OBJ_BOUT)
2848 void
2849 tc_bout_fix_to_chars (where, fixP, segment_address_in_file)
2850      char *where;
2851      fixS *fixP;
2852      relax_addressT segment_address_in_file;
2853 {
2854   static const unsigned char nbytes_r_length[] = {42, 0, 1, 42, 2};
2855   struct relocation_info ri;
2856   symbolS *symbolP;
2857
2858   memset ((char *) &ri, '\0', sizeof (ri));
2859   symbolP = fixP->fx_addsy;
2860   know (symbolP != 0 || fixP->fx_r_type != NO_RELOC);
2861   ri.r_bsr = fixP->fx_bsr;      /*SAC LD RELAX HACK */
2862   /* These two 'cuz of NS32K */
2863   ri.r_callj = fixP->fx_tcbit;
2864   if (fixP->fx_bit_fixP)
2865     ri.r_length = 2;
2866   else
2867     ri.r_length = nbytes_r_length[fixP->fx_size];
2868   ri.r_pcrel = fixP->fx_pcrel;
2869   ri.r_address = fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file;
2870
2871   if (fixP->fx_r_type != NO_RELOC)
2872     {
2873       switch (fixP->fx_r_type)
2874         {
2875         case rs_align:
2876           ri.r_index = -2;
2877           ri.r_pcrel = 1;
2878           ri.r_length = fixP->fx_size - 1;
2879           break;
2880         case rs_org:
2881           ri.r_index = -2;
2882           ri.r_pcrel = 0;
2883           break;
2884         case rs_fill:
2885           ri.r_index = -1;
2886           break;
2887         default:
2888           abort ();
2889         }
2890       ri.r_extern = 0;
2891     }
2892   else if (linkrelax || !S_IS_DEFINED (symbolP) || fixP->fx_bsr)
2893     {
2894       ri.r_extern = 1;
2895       ri.r_index = symbolP->sy_number;
2896     }
2897   else
2898     {
2899       ri.r_extern = 0;
2900       ri.r_index = S_GET_TYPE (symbolP);
2901     }
2902
2903   /* Output the relocation information in machine-dependent form.  */
2904   md_ri_to_chars (where, &ri);
2905 }
2906
2907 #endif /* OBJ_AOUT or OBJ_BOUT */
2908
2909 #if defined (OBJ_COFF) && defined (BFD)
2910 short
2911 tc_coff_fix2rtype (fixP)
2912      fixS *fixP;
2913 {
2914   if (fixP->fx_bsr)
2915     abort ();
2916
2917   if (fixP->fx_pcrel == 0 && fixP->fx_size == 4)
2918     return R_RELLONG;
2919
2920   if (fixP->fx_pcrel != 0 && fixP->fx_size == 4)
2921     return R_IPRMED;
2922
2923   abort ();
2924   return 0;
2925 }
2926
2927 int
2928 tc_coff_sizemachdep (frag)
2929      fragS *frag;
2930 {
2931   if (frag->fr_next)
2932     return frag->fr_next->fr_address - frag->fr_address;
2933   else
2934     return 0;
2935 }
2936 #endif
2937
2938 /* Align an address by rounding it up to the specified boundary.  */
2939 valueT
2940 md_section_align (seg, addr)
2941      segT seg;
2942      valueT addr;               /* Address to be rounded up */
2943 {
2944   int align;
2945 #ifdef BFD_ASSEMBLER
2946   align = bfd_get_section_alignment (stdoutput, seg);
2947 #else
2948   align = section_alignment[(int) seg];
2949 #endif
2950   return (addr + (1 << align) - 1) & (-1 << align);
2951 }
2952
2953 extern int coff_flags;
2954
2955 #ifdef OBJ_COFF
2956 void
2957 tc_headers_hook (headers)
2958      object_headers *headers;
2959 {
2960   switch (architecture)
2961     {
2962     case ARCH_KA:
2963       coff_flags |= F_I960KA;
2964       break;
2965
2966     case ARCH_KB:
2967       coff_flags |= F_I960KB;
2968       break;
2969
2970     case ARCH_MC:
2971       coff_flags |= F_I960MC;
2972       break;
2973
2974     case ARCH_CA:
2975       coff_flags |= F_I960CA;
2976       break;
2977
2978     case ARCH_JX:
2979       coff_flags |= F_I960JX;
2980       break;
2981
2982     case ARCH_HX:
2983       coff_flags |= F_I960HX;
2984       break;
2985
2986     default:
2987       if (iclasses_seen == I_BASE)
2988         coff_flags |= F_I960CORE;
2989       else if (iclasses_seen & I_CX)
2990         coff_flags |= F_I960CA;
2991       else if (iclasses_seen & I_HX)
2992         coff_flags |= F_I960HX;
2993       else if (iclasses_seen & I_JX)
2994         coff_flags |= F_I960JX;
2995       else if (iclasses_seen & I_CX2)
2996         coff_flags |= F_I960CA;
2997       else if (iclasses_seen & I_MIL)
2998         coff_flags |= F_I960MC;
2999       else if (iclasses_seen & (I_DEC | I_FP))
3000         coff_flags |= F_I960KB;
3001       else
3002         coff_flags |= F_I960KA;
3003       break;
3004     }
3005
3006   if (flag_readonly_data_in_text)
3007     {
3008       headers->filehdr.f_magic = I960RWMAGIC;
3009       headers->aouthdr.magic = OMAGIC;
3010     }
3011   else
3012     {
3013       headers->filehdr.f_magic = I960ROMAGIC;
3014       headers->aouthdr.magic = NMAGIC;
3015     }                           /* set magic numbers */
3016 }
3017
3018 #endif /* OBJ_COFF */
3019
3020 #ifndef BFD_ASSEMBLER
3021
3022 /* Things going on here:
3023
3024    For bout, We need to assure a couple of simplifying
3025    assumptions about leafprocs for the linker: the leafproc
3026    entry symbols will be defined in the same assembly in
3027    which they're declared with the '.leafproc' directive;
3028    and if a leafproc has both 'call' and 'bal' entry points
3029    they are both global or both local.
3030
3031    For coff, the call symbol has a second aux entry that
3032    contains the bal entry point.  The bal symbol becomes a
3033    label.
3034
3035    For coff representation, the call symbol has a second aux entry that
3036    contains the bal entry point.  The bal symbol becomes a label.  */
3037
3038 void
3039 tc_crawl_symbol_chain (headers)
3040      object_headers *headers;
3041 {
3042   symbolS *symbolP;
3043
3044   for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
3045     {
3046 #ifdef OBJ_COFF
3047       if (TC_S_IS_SYSPROC (symbolP))
3048         {
3049           /* second aux entry already contains the sysproc number */
3050           S_SET_NUMBER_AUXILIARY (symbolP, 2);
3051           S_SET_STORAGE_CLASS (symbolP, C_SCALL);
3052           S_SET_DATA_TYPE (symbolP, S_GET_DATA_TYPE (symbolP) | (DT_FCN << N_BTSHFT));
3053           continue;
3054         }                       /* rewrite sysproc */
3055 #endif /* OBJ_COFF */
3056
3057       if (!TC_S_IS_BALNAME (symbolP) && !TC_S_IS_CALLNAME (symbolP))
3058         {
3059           continue;
3060         }                       /* Not a leafproc symbol */
3061
3062       if (!S_IS_DEFINED (symbolP))
3063         {
3064           as_bad (_("leafproc symbol '%s' undefined"), S_GET_NAME (symbolP));
3065         }                       /* undefined leaf */
3066
3067       if (TC_S_IS_CALLNAME (symbolP))
3068         {
3069           symbolS *balP = tc_get_bal_of_call (symbolP);
3070           if (S_IS_EXTERNAL (symbolP) != S_IS_EXTERNAL (balP))
3071             {
3072               S_SET_EXTERNAL (symbolP);
3073               S_SET_EXTERNAL (balP);
3074               as_warn (_("Warning: making leafproc entries %s and %s both global\n"),
3075                        S_GET_NAME (symbolP), S_GET_NAME (balP));
3076             }                   /* externality mismatch */
3077         }                       /* if callname */
3078     }                           /* walk the symbol chain */
3079 }
3080
3081 #endif /* ! BFD_ASSEMBLER */
3082
3083 /* For aout or bout, the bal immediately follows the call.
3084
3085    For coff, we cheat and store a pointer to the bal symbol in the
3086    second aux entry of the call.  */
3087
3088 #undef OBJ_ABOUT
3089 #ifdef OBJ_AOUT
3090 #define OBJ_ABOUT
3091 #endif
3092 #ifdef OBJ_BOUT
3093 #define OBJ_ABOUT
3094 #endif
3095
3096 void
3097 tc_set_bal_of_call (callP, balP)
3098      symbolS *callP;
3099      symbolS *balP;
3100 {
3101   know (TC_S_IS_CALLNAME (callP));
3102   know (TC_S_IS_BALNAME (balP));
3103
3104 #ifdef OBJ_COFF
3105
3106   callP->sy_tc = balP;
3107   S_SET_NUMBER_AUXILIARY (callP, 2);
3108
3109 #else /* ! OBJ_COFF */
3110 #ifdef OBJ_ABOUT
3111
3112   /* If the 'bal' entry doesn't immediately follow the 'call'
3113      * symbol, unlink it from the symbol list and re-insert it.
3114    */
3115   if (symbol_next (callP) != balP)
3116     {
3117       symbol_remove (balP, &symbol_rootP, &symbol_lastP);
3118       symbol_append (balP, callP, &symbol_rootP, &symbol_lastP);
3119     }                           /* if not in order */
3120
3121 #else /* ! OBJ_ABOUT */
3122   as_fatal ("Only supported for a.out, b.out, or COFF");
3123 #endif /* ! OBJ_ABOUT */
3124 #endif /* ! OBJ_COFF */
3125 }
3126
3127 symbolS *
3128 tc_get_bal_of_call (callP)
3129      symbolS *callP;
3130 {
3131   symbolS *retval;
3132
3133   know (TC_S_IS_CALLNAME (callP));
3134
3135 #ifdef OBJ_COFF
3136   retval = callP->sy_tc;
3137 #else
3138 #ifdef OBJ_ABOUT
3139   retval = symbol_next (callP);
3140 #else
3141   as_fatal ("Only supported for a.out, b.out, or COFF");
3142 #endif /* ! OBJ_ABOUT */
3143 #endif /* ! OBJ_COFF */
3144
3145   know (TC_S_IS_BALNAME (retval));
3146   return retval;
3147 }                               /* _tc_get_bal_of_call() */
3148
3149 void
3150 tc_coff_symbol_emit_hook (symbolP)
3151      symbolS *symbolP;
3152 {
3153   if (TC_S_IS_CALLNAME (symbolP))
3154     {
3155 #ifdef OBJ_COFF
3156       symbolS *balP = tc_get_bal_of_call (symbolP);
3157
3158 #if 0
3159       /* second aux entry contains the bal entry point */
3160       S_SET_NUMBER_AUXILIARY (symbolP, 2);
3161 #endif
3162       symbolP->sy_symbol.ost_auxent[1].x_bal.x_balntry = S_GET_VALUE (balP);
3163       if (S_GET_STORAGE_CLASS (symbolP) == C_EXT)
3164         S_SET_STORAGE_CLASS (symbolP, C_LEAFEXT);
3165       else
3166         S_SET_STORAGE_CLASS (symbolP, C_LEAFSTAT);
3167       S_SET_DATA_TYPE (symbolP, S_GET_DATA_TYPE (symbolP) | (DT_FCN << N_BTSHFT));
3168       /* fix up the bal symbol */
3169       S_SET_STORAGE_CLASS (balP, C_LABEL);
3170 #endif /* OBJ_COFF */
3171     }                           /* only on calls */
3172 }
3173
3174 void
3175 i960_handle_align (fragp)
3176      fragS *fragp;
3177 {
3178   if (!linkrelax)
3179     return;
3180
3181 #ifndef OBJ_BOUT
3182
3183   as_bad (_("option --link-relax is only supported in b.out format"));
3184   linkrelax = 0;
3185   return;
3186
3187 #else
3188
3189   /* The text section "ends" with another alignment reloc, to which we
3190      aren't adding padding.  */
3191   if (fragp->fr_next == text_last_frag
3192       || fragp->fr_next == data_last_frag)
3193     return;
3194
3195   /* alignment directive */
3196   fix_new (fragp, fragp->fr_fix, fragp->fr_offset, 0, 0, 0,
3197            (int) fragp->fr_type);
3198 #endif /* OBJ_BOUT */
3199 }
3200
3201 int
3202 i960_validate_fix (fixP, this_segment_type, add_symbolPP)
3203      fixS *fixP;
3204      segT this_segment_type;
3205      symbolS **add_symbolPP;
3206 {
3207 #define add_symbolP (*add_symbolPP)
3208   if (fixP->fx_tcbit && TC_S_IS_CALLNAME (add_symbolP))
3209     {
3210       /* Relocation should be done via the associated 'bal'
3211          entry point symbol.  */
3212
3213       if (!TC_S_IS_BALNAME (tc_get_bal_of_call (add_symbolP)))
3214         {
3215           as_bad (_("No 'bal' entry point for leafproc %s"),
3216                   S_GET_NAME (add_symbolP));
3217           return 1;
3218         }
3219       fixP->fx_addsy = add_symbolP = tc_get_bal_of_call (add_symbolP);
3220     }
3221 #if 0
3222   /* Still have to work out other conditions for these tests.  */
3223   {
3224     if (fixP->fx_tcbit)
3225       {
3226         as_bad (_("callj to difference of two symbols"));
3227         return 1;
3228       }
3229     reloc_callj (fixP);
3230     if ((int) fixP->fx_bit_fixP == 13)
3231       {
3232         /* This is a COBR instruction.  They have only a 13-bit
3233            displacement and are only to be used for local branches:
3234            flag as error, don't generate relocation.  */
3235         as_bad (_("can't use COBR format with external label"));
3236         fixP->fx_addsy = NULL;  /* No relocations please.  */
3237         return 1;
3238       }
3239   }
3240 #endif
3241 #undef add_symbolP
3242   return 0;
3243 }
3244
3245 #ifdef BFD_ASSEMBLER
3246
3247 /* From cgen.c:  */
3248
3249 static short
3250 tc_bfd_fix2rtype (fixP)
3251      fixS *fixP;
3252 {
3253 #if 0
3254   if (fixP->fx_bsr)
3255     abort ();
3256 #endif
3257
3258   if (fixP->fx_pcrel == 0 && fixP->fx_size == 4)
3259     return BFD_RELOC_32;
3260
3261   if (fixP->fx_pcrel != 0 && fixP->fx_size == 4)
3262     return BFD_RELOC_24_PCREL;
3263
3264   abort ();
3265   return 0;
3266 }
3267
3268 /* Translate internal representation of relocation info to BFD target
3269    format.
3270
3271    FIXME: To what extent can we get all relevant targets to use this?  */
3272
3273 arelent *
3274 tc_gen_reloc (section, fixP)
3275      asection *section;
3276      fixS *fixP;
3277 {
3278   arelent * reloc;
3279
3280   reloc = (arelent *) xmalloc (sizeof (arelent));
3281
3282   /* HACK: Is this right? */
3283   fixP->fx_r_type = tc_bfd_fix2rtype (fixP);
3284
3285   reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
3286   if (reloc->howto == (reloc_howto_type *) NULL)
3287     {
3288       as_bad_where (fixP->fx_file, fixP->fx_line,
3289                     "internal error: can't export reloc type %d (`%s')",
3290                     fixP->fx_r_type,
3291                     bfd_get_reloc_code_name (fixP->fx_r_type));
3292       return NULL;
3293     }
3294
3295   assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
3296
3297   reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
3298   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
3299   reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
3300   reloc->addend = fixP->fx_addnumber;
3301
3302   return reloc;
3303 }
3304
3305 /* end from cgen.c */
3306
3307 #endif /* BFD_ASSEMBLER */
3308
3309 /* end of tc-i960.c */