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