gas reloc rewrite.
[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, 2002
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
68 #include "as.h"
69
70 #include "safe-ctype.h"
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 static void relax_cobr ();      /* "De-optimize" cobr into compare/branch */
156 static void s_leafproc ();      /* Process '.leafproc' pseudo-op */
157 static void s_sysproc ();       /* Process '.sysproc' pseudo-op */
158 static int shift_ok ();         /* Will a 'shlo' substiture for a 'ldconst'? */
159 static void syntax ();          /* Give syntax error */
160 static int targ_has_sfr ();     /* Target chip supports spec-func register? */
161 static int targ_has_iclass ();  /* Target chip supports instruction set? */
162
163 /* See md_parse_option() for meanings of these options */
164 static char norelax;            /* True if -norelax switch seen */
165 static char instrument_branches;        /* True if -b switch seen */
166
167 /* Characters that always start a comment.
168    If the pre-processor is disabled, these aren't very useful.
169  */
170 const char comment_chars[] = "#";
171
172 /* Characters that only start a comment at the beginning of
173    a line.  If the line seems to have the form '# 123 filename'
174    .line and .file directives will appear in the pre-processed output.
175
176    Note that input_file.c hand checks for '#' at the beginning of the
177    first line of the input file.  This is because the compiler outputs
178    #NO_APP at the beginning of its output.
179  */
180
181 /* Also note that comments started like this one will always work.  */
182
183 const char line_comment_chars[] = "";
184
185 const char line_separator_chars[] = ";";
186
187 /* Chars that can be used to separate mant from exp in floating point nums */
188 const char EXP_CHARS[] = "eE";
189
190 /* Chars that mean this number is a floating point constant,
191    as in 0f12.456 or 0d1.2345e12
192  */
193 const char FLT_CHARS[] = "fFdDtT";
194
195 /* Table used by base assembler to relax addresses based on varying length
196    instructions.  The fields are:
197      1) most positive reach of this state,
198      2) most negative reach of this state,
199      3) how many bytes this mode will add to the size of the current frag
200      4) which index into the table to try if we can't fit into this one.
201
202    For i80960, the only application is the (de-)optimization of cobr
203    instructions into separate compare and branch instructions when a 13-bit
204    displacement won't hack it.
205  */
206 const relax_typeS md_relax_table[] =
207 {
208   {0, 0, 0, 0},                 /* State 0 => no more relaxation possible */
209   {4088, -4096, 0, 2},          /* State 1: conditional branch (cobr) */
210   {0x800000 - 8, -0x800000, 4, 0},      /* State 2: compare (reg) & branch (ctrl) */
211 };
212
213 static void s_endian PARAMS ((int));
214
215 /* These are the machine dependent pseudo-ops.
216
217    This table describes all the machine specific pseudo-ops the assembler
218    has to support.  The fields are:
219         pseudo-op name without dot
220         function to call to execute this pseudo-op
221         integer arg to pass to the function
222  */
223 #define S_LEAFPROC      1
224 #define S_SYSPROC       2
225
226 const pseudo_typeS md_pseudo_table[] =
227 {
228   {"bss", s_lcomm, 1},
229   {"endian", s_endian, 0},
230   {"extended", float_cons, 't'},
231   {"leafproc", parse_po, S_LEAFPROC},
232   {"sysproc", parse_po, S_SYSPROC},
233
234   {"word", cons, 4},
235   {"quad", cons, 16},
236
237   {0, 0, 0}
238 };
239 \f
240 /* Macros to extract info from an 'expressionS' structure 'e' */
241 #define adds(e) e.X_add_symbol
242 #define offs(e) e.X_add_number
243
244 /* Branch-prediction bits for CTRL/COBR format opcodes */
245 #define BP_MASK         0x00000002      /* Mask for branch-prediction bit */
246 #define BP_TAKEN        0x00000000      /* Value to OR in to predict branch */
247 #define BP_NOT_TAKEN    0x00000002      /* Value to OR in to predict no branch */
248
249 /* Some instruction opcodes that we need explicitly */
250 #define BE      0x12000000
251 #define BG      0x11000000
252 #define BGE     0x13000000
253 #define BL      0x14000000
254 #define BLE     0x16000000
255 #define BNE     0x15000000
256 #define BNO     0x10000000
257 #define BO      0x17000000
258 #define CHKBIT  0x5a002700
259 #define CMPI    0x5a002080
260 #define CMPO    0x5a002000
261
262 #define B       0x08000000
263 #define BAL     0x0b000000
264 #define CALL    0x09000000
265 #define CALLS   0x66003800
266 #define RET     0x0a000000
267
268 /* These masks are used to build up a set of MEMB mode bits.  */
269 #define A_BIT           0x0400
270 #define I_BIT           0x0800
271 #define MEMB_BIT        0x1000
272 #define D_BIT           0x2000
273
274 /* Mask for the only mode bit in a MEMA instruction (if set, abase reg is
275    used).  */
276 #define MEMA_ABASE      0x2000
277
278 /* Info from which a MEMA or MEMB format instruction can be generated */
279 typedef struct
280   {
281     /* (First) 32 bits of instruction */
282     long opcode;
283     /* 0-(none), 12- or, 32-bit displacement needed */
284     int disp;
285     /* The expression in the source instruction from which the
286        displacement should be determined.  */
287     char *e;
288   }
289
290 memS;
291
292 /* The two pieces of info we need to generate a register operand */
293 struct regop
294   {
295     int mode;                   /* 0 =>local/global/spec reg; 1=> literal or fp reg */
296     int special;                /* 0 =>not a sfr;  1=> is a sfr (not valid w/mode=0) */
297     int n;                      /* Register number or literal value */
298   };
299
300 /* Number and assembler mnemonic for all registers that can appear in
301    operands.  */
302 static const struct
303   {
304     char *reg_name;
305     int reg_num;
306   }
307 regnames[] =
308 {
309   { "pfp", 0 },
310   { "sp", 1 },
311   { "rip", 2 },
312   { "r3", 3 },
313   { "r4", 4 },
314   { "r5", 5 },
315   { "r6", 6 },
316   { "r7", 7 },
317   { "r8", 8 },
318   { "r9", 9 },
319   { "r10", 10 },
320   { "r11", 11 },
321   { "r12", 12 },
322   { "r13", 13 },
323   { "r14", 14 },
324   { "r15", 15 },
325   { "g0", 16 },
326   { "g1", 17 },
327   { "g2", 18 },
328   { "g3", 19 },
329   { "g4", 20 },
330   { "g5", 21 },
331   { "g6", 22 },
332   { "g7", 23 },
333   { "g8", 24 },
334   { "g9", 25 },
335   { "g10", 26 },
336   { "g11", 27 },
337   { "g12", 28 },
338   { "g13", 29 },
339   { "g14", 30 },
340   { "fp", 31 },
341
342   /* Numbers for special-function registers are for assembler internal
343      use only: they are scaled back to range [0-31] for binary output.  */
344 #define SF0     32
345
346   { "sf0", 32 },
347   { "sf1", 33 },
348   { "sf2", 34 },
349   { "sf3", 35 },
350   { "sf4", 36 },
351   { "sf5", 37 },
352   { "sf6", 38 },
353   { "sf7", 39 },
354   { "sf8", 40 },
355   { "sf9", 41 },
356   { "sf10", 42 },
357   { "sf11", 43 },
358   { "sf12", 44 },
359   { "sf13", 45 },
360   { "sf14", 46 },
361   { "sf15", 47 },
362   { "sf16", 48 },
363   { "sf17", 49 },
364   { "sf18", 50 },
365   { "sf19", 51 },
366   { "sf20", 52 },
367   { "sf21", 53 },
368   { "sf22", 54 },
369   { "sf23", 55 },
370   { "sf24", 56 },
371   { "sf25", 57 },
372   { "sf26", 58 },
373   { "sf27", 59 },
374   { "sf28", 60 },
375   { "sf29", 61 },
376   { "sf30", 62 },
377   { "sf31", 63 },
378
379   /* Numbers for floating point registers are for assembler internal
380      use only: they are scaled back to [0-3] for binary output.  */
381 #define FP0     64
382
383   { "fp0", 64 },
384   { "fp1", 65 },
385   { "fp2", 66 },
386   { "fp3", 67 },
387
388   { NULL, 0 },                          /* END OF LIST */
389 };
390
391 #define IS_RG_REG(n)    ((0 <= (n)) && ((n) < SF0))
392 #define IS_SF_REG(n)    ((SF0 <= (n)) && ((n) < FP0))
393 #define IS_FP_REG(n)    ((n) >= FP0)
394
395 /* Number and assembler mnemonic for all registers that can appear as
396    'abase' (indirect addressing) registers.  */
397 static const struct
398   {
399     char *areg_name;
400     int areg_num;
401   }
402 aregs[] =
403 {
404   { "(pfp)", 0 },
405   { "(sp)", 1 },
406   { "(rip)", 2 },
407   { "(r3)", 3 },
408   { "(r4)", 4 },
409   { "(r5)", 5 },
410   { "(r6)", 6 },
411   { "(r7)", 7 },
412   { "(r8)", 8 },
413   { "(r9)", 9 },
414   { "(r10)", 10 },
415   { "(r11)", 11 },
416   { "(r12)", 12 },
417   { "(r13)", 13 },
418   { "(r14)", 14 },
419   { "(r15)", 15 },
420   { "(g0)", 16 },
421   { "(g1)", 17 },
422   { "(g2)", 18 },
423   { "(g3)", 19 },
424   { "(g4)", 20 },
425   { "(g5)", 21 },
426   { "(g6)", 22 },
427   { "(g7)", 23 },
428   { "(g8)", 24 },
429   { "(g9)", 25 },
430   { "(g10)", 26 },
431   { "(g11)", 27 },
432   { "(g12)", 28 },
433   { "(g13)", 29 },
434   { "(g14)", 30 },
435   { "(fp)", 31 },
436
437 #define IPREL   32
438   /* For assembler internal use only: this number never appears in binary
439      output.  */
440   { "(ip)", IPREL },
441
442   { NULL, 0 },                          /* END OF LIST */
443 };
444
445 /* Hash tables */
446 static struct hash_control *op_hash;    /* Opcode mnemonics */
447 static struct hash_control *reg_hash;   /* Register name hash table */
448 static struct hash_control *areg_hash;  /* Abase register hash table */
449
450 /* Architecture for which we are assembling */
451 #define ARCH_ANY        0       /* Default: no architecture checking done */
452 #define ARCH_KA         1
453 #define ARCH_KB         2
454 #define ARCH_MC         3
455 #define ARCH_CA         4
456 #define ARCH_JX         5
457 #define ARCH_HX         6
458 int architecture = ARCH_ANY;    /* Architecture requested on invocation line */
459 int iclasses_seen;              /* OR of instruction classes (I_* constants)
460                                  *    for which we've actually assembled
461                                  *      instructions.
462                                  */
463
464 /* BRANCH-PREDICTION INSTRUMENTATION
465
466         The following supports generation of branch-prediction instrumentation
467         (turned on by -b switch).  The instrumentation collects counts
468         of branches taken/not-taken for later input to a utility that will
469         set the branch prediction bits of the instructions in accordance with
470         the behavior observed.  (Note that the KX series does not have
471         brach-prediction.)
472
473         The instrumentation consists of:
474
475         (1) before and after each conditional branch, a call to an external
476             routine that increments and steps over an inline counter.  The
477             counter itself, initialized to 0, immediately follows the call
478             instruction.  For each branch, the counter following the branch
479             is the number of times the branch was not taken, and the difference
480             between the counters is the number of times it was taken.  An
481             example of an instrumented conditional branch:
482
483                                 call    BR_CNT_FUNC
484                                 .word   0
485                 LBRANCH23:      be      label
486                                 call    BR_CNT_FUNC
487                                 .word   0
488
489         (2) a table of pointers to the instrumented branches, so that an
490             external postprocessing routine can locate all of the counters.
491             the table begins with a 2-word header: a pointer to the next in
492             a linked list of such tables (initialized to 0);  and a count
493             of the number of entries in the table (exclusive of the header.
494
495             Note that input source code is expected to already contain calls
496             an external routine that will link the branch local table into a
497             list of such tables.
498  */
499
500 /* Number of branches instrumented so far.  Also used to generate
501    unique local labels for each instrumented branch.  */
502 static int br_cnt;
503
504 #define BR_LABEL_BASE   "LBRANCH"
505 /* Basename of local labels on instrumented branches, to avoid
506    conflict with compiler- generated local labels.  */
507
508 #define BR_CNT_FUNC     "__inc_branch"
509 /* Name of the external routine that will increment (and step over) an
510    inline counter.  */
511
512 #define BR_TAB_NAME     "__BRANCH_TABLE__"
513 /* Name of the table of pointers to branches.  A local (i.e.,
514    non-external) symbol.  */
515 \f
516 /*****************************************************************************
517    md_begin:  One-time initialization.
518
519         Set up hash tables.
520
521   *************************************************************************** */
522 void
523 md_begin ()
524 {
525   int i;                        /* Loop counter */
526   const struct i960_opcode *oP; /* Pointer into opcode table */
527   const char *retval;           /* Value returned by hash functions */
528
529   op_hash = hash_new ();
530   reg_hash = hash_new ();
531   areg_hash = hash_new ();
532
533   /* For some reason, the base assembler uses an empty string for "no
534      error message", instead of a NULL pointer.  */
535   retval = 0;
536
537   for (oP = i960_opcodes; oP->name && !retval; oP++)
538     retval = hash_insert (op_hash, oP->name, (PTR) oP);
539
540   for (i = 0; regnames[i].reg_name && !retval; i++)
541     retval = hash_insert (reg_hash, regnames[i].reg_name,
542                           (char *) &regnames[i].reg_num);
543
544   for (i = 0; aregs[i].areg_name && !retval; i++)
545     retval = hash_insert (areg_hash, aregs[i].areg_name,
546                           (char *) &aregs[i].areg_num);
547
548   if (retval)
549     as_fatal (_("Hashing returned \"%s\"."), retval);
550 }
551
552 /*****************************************************************************
553    md_assemble:  Assemble an instruction
554
555    Assumptions about the passed-in text:
556         - all comments, labels removed
557         - text is an instruction
558         - all white space compressed to single blanks
559         - all character constants have been replaced with decimal
560
561   *************************************************************************** */
562 void
563 md_assemble (textP)
564      char *textP;               /* Source text of instruction */
565 {
566   /* Parsed instruction text, containing NO whitespace: arg[0]->opcode
567      mnemonic arg[1-3]->operands, with char constants replaced by
568      decimal numbers.  */
569   char *args[4];
570
571   int n_ops;                    /* Number of instruction operands */
572   /* Pointer to instruction description */
573   struct i960_opcode *oP;
574   /* TRUE iff opcode mnemonic included branch-prediction suffix (".f"
575      or ".t").  */
576   int branch_predict;
577   /* Setting of branch-prediction bit(s) to be OR'd into instruction
578      opcode of CTRL/COBR format instructions.  */
579   long bp_bits;
580
581   int n;                        /* Offset of last character in opcode mnemonic */
582
583   const char *bp_error_msg = _("branch prediction invalid on this opcode");
584
585   /* Parse instruction into opcode and operands */
586   memset (args, '\0', sizeof (args));
587   n_ops = i_scan (textP, args);
588   if (n_ops == -1)
589     {
590       return;                   /* Error message already issued */
591     }
592
593   /* Do "macro substitution" (sort of) on 'ldconst' pseudo-instruction */
594   if (!strcmp (args[0], "ldconst"))
595     {
596       n_ops = parse_ldconst (args);
597       if (n_ops == -1)
598         {
599           return;
600         }
601     }
602
603   /* Check for branch-prediction suffix on opcode mnemonic, strip it off */
604   n = strlen (args[0]) - 1;
605   branch_predict = 0;
606   bp_bits = 0;
607   if (args[0][n - 1] == '.' && (args[0][n] == 't' || args[0][n] == 'f'))
608     {
609       /* We could check here to see if the target architecture
610          supports branch prediction, but why bother?  The bit will
611          just be ignored by processors that don't use it.  */
612       branch_predict = 1;
613       bp_bits = (args[0][n] == 't') ? BP_TAKEN : BP_NOT_TAKEN;
614       args[0][n - 1] = '\0';    /* Strip suffix from opcode mnemonic */
615     }
616
617   /* Look up opcode mnemonic in table and check number of operands.
618      Check that opcode is legal for the target architecture.  If all
619      looks good, assemble instruction.  */
620   oP = (struct i960_opcode *) hash_find (op_hash, args[0]);
621   if (!oP || !targ_has_iclass (oP->iclass))
622     {
623       as_bad (_("invalid opcode, \"%s\"."), args[0]);
624
625     }
626   else if (n_ops != oP->num_ops)
627     {
628       as_bad (_("improper number of operands.  expecting %d, got %d"),
629               oP->num_ops, n_ops);
630     }
631   else
632     {
633       switch (oP->format)
634         {
635         case FBRA:
636         case CTRL:
637           ctrl_fmt (args[1], oP->opcode | bp_bits, oP->num_ops);
638           if (oP->format == FBRA)
639             {
640               /* Now generate a 'bno' to same arg */
641               ctrl_fmt (args[1], BNO | bp_bits, 1);
642             }
643           break;
644         case COBR:
645         case COJ:
646           cobr_fmt (args, oP->opcode | bp_bits, oP);
647           break;
648         case REG:
649           if (branch_predict)
650             {
651               as_warn (bp_error_msg);
652             }
653           reg_fmt (args, oP);
654           break;
655         case MEM1:
656           if (args[0][0] == 'c' && args[0][1] == 'a')
657             {
658               if (branch_predict)
659                 {
660                   as_warn (bp_error_msg);
661                 }
662               mem_fmt (args, oP, 1);
663               break;
664             }
665         case MEM2:
666         case MEM4:
667         case MEM8:
668         case MEM12:
669         case MEM16:
670           if (branch_predict)
671             {
672               as_warn (bp_error_msg);
673             }
674           mem_fmt (args, oP, 0);
675           break;
676         case CALLJ:
677           if (branch_predict)
678             {
679               as_warn (bp_error_msg);
680             }
681           /* Output opcode & set up "fixup" (relocation); flag
682              relocation as 'callj' type.  */
683           know (oP->num_ops == 1);
684           get_cdisp (args[1], "CTRL", oP->opcode, 24, 0, 1);
685           break;
686         default:
687           BAD_CASE (oP->format);
688           break;
689         }
690     }
691 }                               /* md_assemble() */
692
693 /*****************************************************************************
694    md_number_to_chars:  convert a number to target byte order
695
696   *************************************************************************** */
697 void
698 md_number_to_chars (buf, value, n)
699      char *buf;
700      valueT value;
701      int n;
702 {
703   number_to_chars_littleendian (buf, value, n);
704 }
705
706 /*****************************************************************************
707    md_chars_to_number:  convert from target byte order to host byte order.
708
709   *************************************************************************** */
710 int
711 md_chars_to_number (val, n)
712      unsigned char *val;        /* Value in target byte order */
713      int n;                     /* Number of bytes in the input */
714 {
715   int retval;
716
717   for (retval = 0; n--;)
718     {
719       retval <<= 8;
720       retval |= val[n];
721     }
722   return retval;
723 }
724
725 #define MAX_LITTLENUMS  6
726 #define LNUM_SIZE       sizeof (LITTLENUM_TYPE)
727
728 /*****************************************************************************
729    md_atof:     convert ascii to floating point
730
731    Turn a string at input_line_pointer into a floating point constant of type
732    'type', and store the appropriate bytes at *litP.  The number of LITTLENUMS
733    emitted is returned at 'sizeP'.  An error message is returned, or a pointer
734    to an empty message if OK.
735
736    Note we call the i386 floating point routine, rather than complicating
737    things with more files or symbolic links.
738
739   *************************************************************************** */
740 char *
741 md_atof (type, litP, sizeP)
742      int type;
743      char *litP;
744      int *sizeP;
745 {
746   LITTLENUM_TYPE words[MAX_LITTLENUMS];
747   LITTLENUM_TYPE *wordP;
748   int prec;
749   char *t;
750   char *atof_ieee ();
751
752   switch (type)
753     {
754     case 'f':
755     case 'F':
756       prec = 2;
757       break;
758
759     case 'd':
760     case 'D':
761       prec = 4;
762       break;
763
764     case 't':
765     case 'T':
766       prec = 5;
767       type = 'x';               /* That's what atof_ieee() understands */
768       break;
769
770     default:
771       *sizeP = 0;
772       return _("Bad call to md_atof()");
773     }
774
775   t = atof_ieee (input_line_pointer, type, words);
776   if (t)
777     {
778       input_line_pointer = t;
779     }
780
781   *sizeP = prec * LNUM_SIZE;
782
783   /* Output the LITTLENUMs in REVERSE order in accord with i80960
784      word-order.  (Dunno why atof_ieee doesn't do it in the right
785      order in the first place -- probably because it's a hack of
786      atof_m68k.)  */
787
788   for (wordP = words + prec - 1; prec--;)
789     {
790       md_number_to_chars (litP, (long) (*wordP--), LNUM_SIZE);
791       litP += sizeof (LITTLENUM_TYPE);
792     }
793
794   return 0;
795 }
796
797 /*****************************************************************************
798    md_number_to_imm
799
800   *************************************************************************** */
801 void
802 md_number_to_imm (buf, val, n)
803      char *buf;
804      long val;
805      int n;
806 {
807   md_number_to_chars (buf, val, n);
808 }
809
810 /*****************************************************************************
811    md_number_to_disp
812
813   *************************************************************************** */
814 void
815 md_number_to_disp (buf, val, n)
816      char *buf;
817      long val;
818      int n;
819 {
820   md_number_to_chars (buf, val, n);
821 }
822
823 /*****************************************************************************
824    md_number_to_field:
825
826         Stick a value (an address fixup) into a bit field of
827         previously-generated instruction.
828
829   *************************************************************************** */
830 void
831 md_number_to_field (instrP, val, bfixP)
832      char *instrP;              /* Pointer to instruction to be fixed */
833      long val;                  /* Address fixup value */
834      bit_fixS *bfixP;           /* Description of bit field to be fixed up */
835 {
836   int numbits;                  /* Length of bit field to be fixed */
837   long instr;                   /* 32-bit instruction to be fixed-up */
838   long sign;                    /* 0 or -1, according to sign bit of 'val' */
839
840   /* Convert instruction back to host byte order.  */
841   instr = md_chars_to_number (instrP, 4);
842
843   /* Surprise! -- we stored the number of bits to be modified rather
844      than a pointer to a structure.  */
845   numbits = (int) bfixP;
846   if (numbits == 1)
847     {
848       /* This is a no-op, stuck here by reloc_callj() */
849       return;
850     }
851
852   know ((numbits == 13) || (numbits == 24));
853
854   /* Propagate sign bit of 'val' for the given number of bits.  Result
855      should be all 0 or all 1.  */
856   sign = val >> ((int) numbits - 1);
857   if (((val < 0) && (sign != -1))
858       || ((val > 0) && (sign != 0)))
859     {
860       as_bad (_("Fixup of %ld too large for field width of %d"),
861               val, numbits);
862     }
863   else
864     {
865       /* Put bit field into instruction and write back in target
866          * byte order.
867        */
868       val &= ~(-1 << (int) numbits);    /* Clear unused sign bits */
869       instr |= val;
870       md_number_to_chars (instrP, instr, 4);
871     }
872 }                               /* md_number_to_field() */
873 \f
874
875 /*****************************************************************************
876    md_parse_option
877         Invocation line includes a switch not recognized by the base assembler.
878         See if it's a processor-specific option.  For the 960, these are:
879
880         -norelax:
881                 Conditional branch instructions that require displacements
882                 greater than 13 bits (or that have external targets) should
883                 generate errors.  The default is to replace each such
884                 instruction with the corresponding compare (or chkbit) and
885                 branch instructions.  Note that the Intel "j" cobr directives
886                 are ALWAYS "de-optimized" in this way when necessary,
887                 regardless of the setting of this option.
888
889         -b:
890                 Add code to collect information about branches taken, for
891                 later optimization of branch prediction bits by a separate
892                 tool.  COBR and CNTL format instructions have branch
893                 prediction bits (in the CX architecture);  if "BR" represents
894                 an instruction in one of these classes, the following rep-
895                 resents the code generated by the assembler:
896
897                         call    <increment routine>
898                         .word   0       # pre-counter
899                 Label:  BR
900                         call    <increment routine>
901                         .word   0       # post-counter
902
903                 A table of all such "Labels" is also generated.
904
905         -AKA, -AKB, -AKC, -ASA, -ASB, -AMC, -ACA:
906                 Select the 80960 architecture.  Instructions or features not
907                 supported by the selected architecture cause fatal errors.
908                 The default is to generate code for any instruction or feature
909                 that is supported by SOME version of the 960 (even if this
910                 means mixing architectures!).
911
912   ****************************************************************************/
913
914 const char *md_shortopts = "A:b";
915 struct option md_longopts[] =
916 {
917 #define OPTION_LINKRELAX (OPTION_MD_BASE)
918   {"linkrelax", no_argument, NULL, OPTION_LINKRELAX},
919   {"link-relax", no_argument, NULL, OPTION_LINKRELAX},
920 #define OPTION_NORELAX (OPTION_MD_BASE + 1)
921   {"norelax", no_argument, NULL, OPTION_NORELAX},
922   {"no-relax", no_argument, NULL, OPTION_NORELAX},
923   {NULL, no_argument, NULL, 0}
924 };
925 size_t md_longopts_size = sizeof (md_longopts);
926
927 struct tabentry
928   {
929     char *flag;
930     int arch;
931   };
932 static const struct tabentry arch_tab[] =
933 {
934   {"KA", ARCH_KA},
935   {"KB", ARCH_KB},
936   {"SA", ARCH_KA},              /* Synonym for KA */
937   {"SB", ARCH_KB},              /* Synonym for KB */
938   {"KC", ARCH_MC},              /* Synonym for MC */
939   {"MC", ARCH_MC},
940   {"CA", ARCH_CA},
941   {"JX", ARCH_JX},
942   {"HX", ARCH_HX},
943   {NULL, 0}
944 };
945
946 int
947 md_parse_option (c, arg)
948      int c;
949      char *arg;
950 {
951   switch (c)
952     {
953     case OPTION_LINKRELAX:
954       linkrelax = 1;
955       flag_keep_locals = 1;
956       break;
957
958     case OPTION_NORELAX:
959       norelax = 1;
960       break;
961
962     case 'b':
963       instrument_branches = 1;
964       break;
965
966     case 'A':
967       {
968         const struct tabentry *tp;
969         char *p = arg;
970
971         for (tp = arch_tab; tp->flag != NULL; tp++)
972           if (!strcmp (p, tp->flag))
973             break;
974
975         if (tp->flag == NULL)
976           {
977             as_bad (_("invalid architecture %s"), p);
978             return 0;
979           }
980         else
981           architecture = tp->arch;
982       }
983       break;
984
985     default:
986       return 0;
987     }
988
989   return 1;
990 }
991
992 void
993 md_show_usage (stream)
994      FILE *stream;
995 {
996   int i;
997   fprintf (stream, _("I960 options:\n"));
998   for (i = 0; arch_tab[i].flag; i++)
999     fprintf (stream, "%s-A%s", i ? " | " : "", arch_tab[i].flag);
1000   fprintf (stream, _("\n\
1001                         specify variant of 960 architecture\n\
1002 -b                      add code to collect statistics about branches taken\n\
1003 -link-relax             preserve individual alignment directives so linker\n\
1004                         can do relaxing (b.out format only)\n\
1005 -no-relax               don't alter compare-and-branch instructions for\n\
1006                         long displacements\n"));
1007 }
1008 \f
1009
1010 /*****************************************************************************
1011    md_convert_frag:
1012         Called by base assembler after address relaxation is finished:  modify
1013         variable fragments according to how much relaxation was done.
1014
1015         If the fragment substate is still 1, a 13-bit displacement was enough
1016         to reach the symbol in question.  Set up an address fixup, but otherwise
1017         leave the cobr instruction alone.
1018
1019         If the fragment substate is 2, a 13-bit displacement was not enough.
1020         Replace the cobr with a two instructions (a compare and a branch).
1021
1022   *************************************************************************** */
1023 #ifndef BFD_ASSEMBLER
1024 void
1025 md_convert_frag (headers, seg, fragP)
1026      object_headers *headers;
1027      segT seg;
1028      fragS *fragP;
1029 #else
1030 void
1031 md_convert_frag (abfd, sec, fragP)
1032      bfd *abfd;
1033      segT sec;
1034      fragS *fragP;
1035 #endif
1036 {
1037   fixS *fixP;                   /* Structure describing needed address fix */
1038
1039   switch (fragP->fr_subtype)
1040     {
1041     case 1:
1042       /* LEAVE SINGLE COBR INSTRUCTION */
1043       fixP = fix_new (fragP,
1044                       fragP->fr_opcode - fragP->fr_literal,
1045                       4,
1046                       fragP->fr_symbol,
1047                       fragP->fr_offset,
1048                       1,
1049                       NO_RELOC);
1050
1051       fixP->fx_bit_fixP = (bit_fixS *) 13;      /* size of bit field */
1052       break;
1053     case 2:
1054       /* REPLACE COBR WITH COMPARE/BRANCH INSTRUCTIONS */
1055       relax_cobr (fragP);
1056       break;
1057     default:
1058       BAD_CASE (fragP->fr_subtype);
1059       break;
1060     }
1061 }
1062
1063 /*****************************************************************************
1064    md_estimate_size_before_relax:  How much does it look like *fragP will grow?
1065
1066         Called by base assembler just before address relaxation.
1067         Return the amount by which the fragment will grow.
1068
1069         Any symbol that is now undefined will not become defined; cobr's
1070         based on undefined symbols will have to be replaced with a compare
1071         instruction and a branch instruction, and the code fragment will grow
1072         by 4 bytes.
1073
1074   *************************************************************************** */
1075 int
1076 md_estimate_size_before_relax (fragP, segment_type)
1077      register fragS *fragP;
1078      register segT segment_type;
1079 {
1080   /* If symbol is undefined in this segment, go to "relaxed" state
1081      (compare and branch instructions instead of cobr) right now.  */
1082   if (S_GET_SEGMENT (fragP->fr_symbol) != segment_type)
1083     {
1084       relax_cobr (fragP);
1085       return 4;
1086     }
1087
1088   return md_relax_table[fragP->fr_subtype].rlx_length;
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 (p[1])
1393               || ! ISALNUM (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 int
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 0;
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   else if (TC_S_IS_CALLNAME (fixP->fx_addsy))
2530     {
2531       /* Should not happen: see block comment above */
2532       as_fatal (_("Trying to 'bal' to %s"), S_GET_NAME (fixP->fx_addsy));
2533     }
2534   else if (TC_S_IS_BALNAME (fixP->fx_addsy))
2535     {
2536       /* Replace 'call' with 'bal'; both instructions have the same
2537          format, so calling code should complete relocation as if
2538          nothing happened here.  */
2539       md_number_to_chars (where, BAL, 4);
2540     }
2541   else if (TC_S_IS_BADPROC (fixP->fx_addsy))
2542     {
2543       as_bad (_("Looks like a proc, but can't tell what kind.\n"));
2544     }                           /* switch on proc type */
2545
2546   /* else Symbol is neither a sysproc nor a leafproc */
2547   return 0;
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 void
2810 md_apply_fix3 (fixP, valP, seg)
2811      fixS *fixP;
2812      valueT *valP;
2813      segT seg ATTRIBUTE_UNUSED;
2814 {
2815   long val = *valP;
2816   char *place = fixP->fx_where + fixP->fx_frag->fr_literal;
2817
2818   if (!fixP->fx_bit_fixP)
2819     {
2820 #ifndef BFD_ASSEMBLER
2821       /* For callx, we always want to write out zero, and emit a
2822          symbolic relocation.  */
2823       if (fixP->fx_bsr)
2824         val = 0;
2825
2826       fixP->fx_addnumber = val;
2827 #endif
2828
2829       md_number_to_imm (place, val, fixP->fx_size, fixP);
2830     }
2831   else if ((int) fixP->fx_bit_fixP == 13
2832            && fixP->fx_addsy != NULL
2833            && S_GET_SEGMENT (fixP->fx_addsy) == undefined_section)
2834     {
2835       /* This is a COBR instruction.  They have only a
2836          13-bit displacement and are only to be used
2837          for local branches: flag as error, don't generate
2838          relocation.  */
2839       as_bad_where (fixP->fx_file, fixP->fx_line,
2840                     _("can't use COBR format with external label"));
2841       fixP->fx_addsy = NULL;
2842     }
2843   else
2844     md_number_to_field (place, val, fixP->fx_bit_fixP);
2845
2846   if (fixP->fx_addsy == NULL)
2847     fixP->fx_done = 1;
2848 }
2849
2850 #if defined(OBJ_AOUT) | defined(OBJ_BOUT)
2851 void
2852 tc_bout_fix_to_chars (where, fixP, segment_address_in_file)
2853      char *where;
2854      fixS *fixP;
2855      relax_addressT segment_address_in_file;
2856 {
2857   static const unsigned char nbytes_r_length[] = {42, 0, 1, 42, 2};
2858   struct relocation_info ri;
2859   symbolS *symbolP;
2860
2861   memset ((char *) &ri, '\0', sizeof (ri));
2862   symbolP = fixP->fx_addsy;
2863   know (symbolP != 0 || fixP->fx_r_type != NO_RELOC);
2864   ri.r_bsr = fixP->fx_bsr;      /*SAC LD RELAX HACK */
2865   /* These two 'cuz of NS32K */
2866   ri.r_callj = fixP->fx_tcbit;
2867   if (fixP->fx_bit_fixP)
2868     ri.r_length = 2;
2869   else
2870     ri.r_length = nbytes_r_length[fixP->fx_size];
2871   ri.r_pcrel = fixP->fx_pcrel;
2872   ri.r_address = fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file;
2873
2874   if (fixP->fx_r_type != NO_RELOC)
2875     {
2876       switch (fixP->fx_r_type)
2877         {
2878         case rs_align:
2879           ri.r_index = -2;
2880           ri.r_pcrel = 1;
2881           ri.r_length = fixP->fx_size - 1;
2882           break;
2883         case rs_org:
2884           ri.r_index = -2;
2885           ri.r_pcrel = 0;
2886           break;
2887         case rs_fill:
2888           ri.r_index = -1;
2889           break;
2890         default:
2891           abort ();
2892         }
2893       ri.r_extern = 0;
2894     }
2895   else if (linkrelax || !S_IS_DEFINED (symbolP) || fixP->fx_bsr)
2896     {
2897       ri.r_extern = 1;
2898       ri.r_index = symbolP->sy_number;
2899     }
2900   else
2901     {
2902       ri.r_extern = 0;
2903       ri.r_index = S_GET_TYPE (symbolP);
2904     }
2905
2906   /* Output the relocation information in machine-dependent form.  */
2907   md_ri_to_chars (where, &ri);
2908 }
2909
2910 #endif /* OBJ_AOUT or OBJ_BOUT */
2911
2912 #if defined (OBJ_COFF) && defined (BFD)
2913 short
2914 tc_coff_fix2rtype (fixP)
2915      fixS *fixP;
2916 {
2917   if (fixP->fx_bsr)
2918     abort ();
2919
2920   if (fixP->fx_pcrel == 0 && fixP->fx_size == 4)
2921     return R_RELLONG;
2922
2923   if (fixP->fx_pcrel != 0 && fixP->fx_size == 4)
2924     return R_IPRMED;
2925
2926   abort ();
2927   return 0;
2928 }
2929
2930 int
2931 tc_coff_sizemachdep (frag)
2932      fragS *frag;
2933 {
2934   if (frag->fr_next)
2935     return frag->fr_next->fr_address - frag->fr_address;
2936   else
2937     return 0;
2938 }
2939 #endif
2940
2941 /* Align an address by rounding it up to the specified boundary.  */
2942 valueT
2943 md_section_align (seg, addr)
2944      segT seg;
2945      valueT addr;               /* Address to be rounded up */
2946 {
2947   int align;
2948 #ifdef BFD_ASSEMBLER
2949   align = bfd_get_section_alignment (stdoutput, seg);
2950 #else
2951   align = section_alignment[(int) seg];
2952 #endif
2953   return (addr + (1 << align) - 1) & (-1 << align);
2954 }
2955
2956 extern int coff_flags;
2957
2958 #ifdef OBJ_COFF
2959 void
2960 tc_headers_hook (headers)
2961      object_headers *headers;
2962 {
2963   switch (architecture)
2964     {
2965     case ARCH_KA:
2966       coff_flags |= F_I960KA;
2967       break;
2968
2969     case ARCH_KB:
2970       coff_flags |= F_I960KB;
2971       break;
2972
2973     case ARCH_MC:
2974       coff_flags |= F_I960MC;
2975       break;
2976
2977     case ARCH_CA:
2978       coff_flags |= F_I960CA;
2979       break;
2980
2981     case ARCH_JX:
2982       coff_flags |= F_I960JX;
2983       break;
2984
2985     case ARCH_HX:
2986       coff_flags |= F_I960HX;
2987       break;
2988
2989     default:
2990       if (iclasses_seen == I_BASE)
2991         coff_flags |= F_I960CORE;
2992       else if (iclasses_seen & I_CX)
2993         coff_flags |= F_I960CA;
2994       else if (iclasses_seen & I_HX)
2995         coff_flags |= F_I960HX;
2996       else if (iclasses_seen & I_JX)
2997         coff_flags |= F_I960JX;
2998       else if (iclasses_seen & I_CX2)
2999         coff_flags |= F_I960CA;
3000       else if (iclasses_seen & I_MIL)
3001         coff_flags |= F_I960MC;
3002       else if (iclasses_seen & (I_DEC | I_FP))
3003         coff_flags |= F_I960KB;
3004       else
3005         coff_flags |= F_I960KA;
3006       break;
3007     }
3008
3009   if (flag_readonly_data_in_text)
3010     {
3011       headers->filehdr.f_magic = I960RWMAGIC;
3012       headers->aouthdr.magic = OMAGIC;
3013     }
3014   else
3015     {
3016       headers->filehdr.f_magic = I960ROMAGIC;
3017       headers->aouthdr.magic = NMAGIC;
3018     }                           /* set magic numbers */
3019 }
3020
3021 #endif /* OBJ_COFF */
3022
3023 #ifndef BFD_ASSEMBLER
3024
3025 /* Things going on here:
3026
3027    For bout, We need to assure a couple of simplifying
3028    assumptions about leafprocs for the linker: the leafproc
3029    entry symbols will be defined in the same assembly in
3030    which they're declared with the '.leafproc' directive;
3031    and if a leafproc has both 'call' and 'bal' entry points
3032    they are both global or both local.
3033
3034    For coff, the call symbol has a second aux entry that
3035    contains the bal entry point.  The bal symbol becomes a
3036    label.
3037
3038    For coff representation, the call symbol has a second aux entry that
3039    contains the bal entry point.  The bal symbol becomes a label.  */
3040
3041 void
3042 tc_crawl_symbol_chain (headers)
3043      object_headers *headers;
3044 {
3045   symbolS *symbolP;
3046
3047   for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
3048     {
3049 #ifdef OBJ_COFF
3050       if (TC_S_IS_SYSPROC (symbolP))
3051         {
3052           /* second aux entry already contains the sysproc number */
3053           S_SET_NUMBER_AUXILIARY (symbolP, 2);
3054           S_SET_STORAGE_CLASS (symbolP, C_SCALL);
3055           S_SET_DATA_TYPE (symbolP, S_GET_DATA_TYPE (symbolP) | (DT_FCN << N_BTSHFT));
3056           continue;
3057         }                       /* rewrite sysproc */
3058 #endif /* OBJ_COFF */
3059
3060       if (!TC_S_IS_BALNAME (symbolP) && !TC_S_IS_CALLNAME (symbolP))
3061         {
3062           continue;
3063         }                       /* Not a leafproc symbol */
3064
3065       if (!S_IS_DEFINED (symbolP))
3066         {
3067           as_bad (_("leafproc symbol '%s' undefined"), S_GET_NAME (symbolP));
3068         }                       /* undefined leaf */
3069
3070       if (TC_S_IS_CALLNAME (symbolP))
3071         {
3072           symbolS *balP = tc_get_bal_of_call (symbolP);
3073           if (S_IS_EXTERNAL (symbolP) != S_IS_EXTERNAL (balP))
3074             {
3075               S_SET_EXTERNAL (symbolP);
3076               S_SET_EXTERNAL (balP);
3077               as_warn (_("Warning: making leafproc entries %s and %s both global\n"),
3078                        S_GET_NAME (symbolP), S_GET_NAME (balP));
3079             }                   /* externality mismatch */
3080         }                       /* if callname */
3081     }                           /* walk the symbol chain */
3082 }
3083
3084 #endif /* ! BFD_ASSEMBLER */
3085
3086 /* For aout or bout, the bal immediately follows the call.
3087
3088    For coff, we cheat and store a pointer to the bal symbol in the
3089    second aux entry of the call.  */
3090
3091 #undef OBJ_ABOUT
3092 #ifdef OBJ_AOUT
3093 #define OBJ_ABOUT
3094 #endif
3095 #ifdef OBJ_BOUT
3096 #define OBJ_ABOUT
3097 #endif
3098
3099 void
3100 tc_set_bal_of_call (callP, balP)
3101      symbolS *callP;
3102      symbolS *balP;
3103 {
3104   know (TC_S_IS_CALLNAME (callP));
3105   know (TC_S_IS_BALNAME (balP));
3106
3107 #ifdef OBJ_COFF
3108
3109   callP->sy_tc = balP;
3110   S_SET_NUMBER_AUXILIARY (callP, 2);
3111
3112 #else /* ! OBJ_COFF */
3113 #ifdef OBJ_ABOUT
3114
3115   /* If the 'bal' entry doesn't immediately follow the 'call'
3116      * symbol, unlink it from the symbol list and re-insert it.
3117    */
3118   if (symbol_next (callP) != balP)
3119     {
3120       symbol_remove (balP, &symbol_rootP, &symbol_lastP);
3121       symbol_append (balP, callP, &symbol_rootP, &symbol_lastP);
3122     }                           /* if not in order */
3123
3124 #else /* ! OBJ_ABOUT */
3125   as_fatal ("Only supported for a.out, b.out, or COFF");
3126 #endif /* ! OBJ_ABOUT */
3127 #endif /* ! OBJ_COFF */
3128 }
3129
3130 symbolS *
3131 tc_get_bal_of_call (callP)
3132      symbolS *callP;
3133 {
3134   symbolS *retval;
3135
3136   know (TC_S_IS_CALLNAME (callP));
3137
3138 #ifdef OBJ_COFF
3139   retval = callP->sy_tc;
3140 #else
3141 #ifdef OBJ_ABOUT
3142   retval = symbol_next (callP);
3143 #else
3144   as_fatal ("Only supported for a.out, b.out, or COFF");
3145 #endif /* ! OBJ_ABOUT */
3146 #endif /* ! OBJ_COFF */
3147
3148   know (TC_S_IS_BALNAME (retval));
3149   return retval;
3150 }                               /* _tc_get_bal_of_call() */
3151
3152 void
3153 tc_coff_symbol_emit_hook (symbolP)
3154      symbolS *symbolP;
3155 {
3156   if (TC_S_IS_CALLNAME (symbolP))
3157     {
3158 #ifdef OBJ_COFF
3159       symbolS *balP = tc_get_bal_of_call (symbolP);
3160
3161 #if 0
3162       /* second aux entry contains the bal entry point */
3163       S_SET_NUMBER_AUXILIARY (symbolP, 2);
3164 #endif
3165       symbolP->sy_symbol.ost_auxent[1].x_bal.x_balntry = S_GET_VALUE (balP);
3166       if (S_GET_STORAGE_CLASS (symbolP) == C_EXT)
3167         S_SET_STORAGE_CLASS (symbolP, C_LEAFEXT);
3168       else
3169         S_SET_STORAGE_CLASS (symbolP, C_LEAFSTAT);
3170       S_SET_DATA_TYPE (symbolP, S_GET_DATA_TYPE (symbolP) | (DT_FCN << N_BTSHFT));
3171       /* fix up the bal symbol */
3172       S_SET_STORAGE_CLASS (balP, C_LABEL);
3173 #endif /* OBJ_COFF */
3174     }                           /* only on calls */
3175 }
3176
3177 void
3178 i960_handle_align (fragp)
3179      fragS *fragp;
3180 {
3181   if (!linkrelax)
3182     return;
3183
3184 #ifndef OBJ_BOUT
3185
3186   as_bad (_("option --link-relax is only supported in b.out format"));
3187   linkrelax = 0;
3188   return;
3189
3190 #else
3191
3192   /* The text section "ends" with another alignment reloc, to which we
3193      aren't adding padding.  */
3194   if (fragp->fr_next == text_last_frag
3195       || fragp->fr_next == data_last_frag)
3196     return;
3197
3198   /* alignment directive */
3199   fix_new (fragp, fragp->fr_fix, fragp->fr_offset, 0, 0, 0,
3200            (int) fragp->fr_type);
3201 #endif /* OBJ_BOUT */
3202 }
3203
3204 int
3205 i960_validate_fix (fixP, this_segment_type)
3206      fixS *fixP;
3207      segT this_segment_type;
3208 {
3209   if (fixP->fx_tcbit && TC_S_IS_CALLNAME (fixP->fx_addsy))
3210     {
3211       /* Relocation should be done via the associated 'bal'
3212          entry point symbol.  */
3213
3214       if (!TC_S_IS_BALNAME (tc_get_bal_of_call (fixP->fx_addsy)))
3215         {
3216           as_bad_where (fixP->fx_file, fixP->fx_line,
3217                         _("No 'bal' entry point for leafproc %s"),
3218                         S_GET_NAME (fixP->fx_addsy));
3219           return 0;
3220         }
3221       fixP->fx_addsy = tc_get_bal_of_call (fixP->fx_addsy);
3222     }
3223
3224   return 1;
3225 }
3226
3227 #ifdef BFD_ASSEMBLER
3228
3229 /* From cgen.c:  */
3230
3231 static short
3232 tc_bfd_fix2rtype (fixP)
3233      fixS *fixP;
3234 {
3235 #if 0
3236   if (fixP->fx_bsr)
3237     abort ();
3238 #endif
3239
3240   if (fixP->fx_pcrel == 0 && fixP->fx_size == 4)
3241     return BFD_RELOC_32;
3242
3243   if (fixP->fx_pcrel != 0 && fixP->fx_size == 4)
3244     return BFD_RELOC_24_PCREL;
3245
3246   abort ();
3247   return 0;
3248 }
3249
3250 /* Translate internal representation of relocation info to BFD target
3251    format.
3252
3253    FIXME: To what extent can we get all relevant targets to use this?  */
3254
3255 arelent *
3256 tc_gen_reloc (section, fixP)
3257      asection *section;
3258      fixS *fixP;
3259 {
3260   arelent * reloc;
3261
3262   reloc = (arelent *) xmalloc (sizeof (arelent));
3263
3264   /* HACK: Is this right? */
3265   fixP->fx_r_type = tc_bfd_fix2rtype (fixP);
3266
3267   reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
3268   if (reloc->howto == (reloc_howto_type *) NULL)
3269     {
3270       as_bad_where (fixP->fx_file, fixP->fx_line,
3271                     "internal error: can't export reloc type %d (`%s')",
3272                     fixP->fx_r_type,
3273                     bfd_get_reloc_code_name (fixP->fx_r_type));
3274       return NULL;
3275     }
3276
3277   assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
3278
3279   reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
3280   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
3281   reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
3282   reloc->addend = fixP->fx_addnumber;
3283
3284   return reloc;
3285 }
3286
3287 /* end from cgen.c */
3288
3289 #endif /* BFD_ASSEMBLER */
3290
3291 /* end of tc-i960.c */