Upload Tizen:Base source
[external/binutils.git] / gas / config / tc-cris.c
1 /* tc-cris.c -- Assembler code for the CRIS CPU core.
2    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4
5    Contributed by Axis Communications AB, Lund, Sweden.
6    Originally written for GAS 1.38.1 by Mikael Asker.
7    Updates, BFDizing, GNUifying and ELF support by Hans-Peter Nilsson.
8
9    This file is part of GAS, the GNU Assembler.
10
11    GAS is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3, or (at your option)
14    any later version.
15
16    GAS is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with GAS; see the file COPYING.  If not, write to the
23    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
24    MA 02110-1301, USA.  */
25
26 #include "as.h"
27 #include "safe-ctype.h"
28 #include "subsegs.h"
29 #include "opcode/cris.h"
30 #include "dwarf2dbg.h"
31
32 /* Conventions used here:
33    Generally speaking, pointers to binutils types such as "fragS" and
34    "expressionS" get parameter and variable names ending in "P", such as
35    "fragP", to harmonize with the rest of the binutils code.  Other
36    pointers get a "p" suffix, such as "bufp".  Any function or type-name
37    that could clash with a current or future binutils or GAS function get
38    a "cris_" prefix.  */
39
40 #define SYNTAX_RELAX_REG_PREFIX "no_register_prefix"
41 #define SYNTAX_ENFORCE_REG_PREFIX "register_prefix"
42 #define SYNTAX_USER_SYM_LEADING_UNDERSCORE "leading_underscore"
43 #define SYNTAX_USER_SYM_NO_LEADING_UNDERSCORE "no_leading_underscore"
44 #define REGISTER_PREFIX_CHAR '$'
45
46 /* True for expressions where getting X_add_symbol and X_add_number is
47    enough to get the "base" and "offset"; no need to make_expr_symbol.
48    It's not enough to check if X_op_symbol is NULL; that misses unary
49    operations like O_uminus.  */
50 #define SIMPLE_EXPR(EXP) \
51  ((EXP)->X_op == O_constant || (EXP)->X_op == O_symbol)
52
53 /* Like in ":GOT", ":GOTOFF" etc.  Other ports use '@', but that's in
54    line_separator_chars for CRIS, so we avoid it.  */
55 #define RELOC_SUFFIX_CHAR ':'
56
57 /* This might be CRIS_INSN_NONE if we're assembling a prefix-insn only.
58    Note that some prefix-insns might be assembled as CRIS_INSN_NORMAL.  */
59 enum cris_insn_kind
60 {
61   CRIS_INSN_NORMAL, CRIS_INSN_NONE, CRIS_INSN_BRANCH, CRIS_INSN_MUL
62 };
63
64 /* An instruction will have one of these prefixes.
65    Although the same bit-pattern, we handle BDAP with an immediate
66    expression (eventually quick or [pc+]) different from when we only have
67    register expressions.  */
68 enum prefix_kind
69 {
70   PREFIX_NONE, PREFIX_BDAP_IMM, PREFIX_BDAP, PREFIX_BIAP, PREFIX_DIP,
71   PREFIX_PUSH
72 };
73
74 /* The prefix for an instruction.  */
75 struct cris_prefix
76 {
77   enum prefix_kind kind;
78   int base_reg_number;
79   unsigned int opcode;
80
81   /* There might be an expression to be evaluated, like I in [rN+I].  */
82   expressionS expr;
83
84   /* If there's an expression, we might need a relocation.  Here's the
85      type of what relocation to start relaxaton with.
86      The relocation is assumed to start immediately after the prefix insn,
87      so we don't provide an offset.  */
88   enum bfd_reloc_code_real reloc;
89 };
90
91 /* The description of the instruction being assembled.  */
92 struct cris_instruction
93 {
94   /* If CRIS_INSN_NONE, then this insn is of zero length.  */
95   enum cris_insn_kind insn_type;
96
97   /* If a special register was mentioned, this is its description, else
98      it is NULL.  */
99   const struct cris_spec_reg *spec_reg;
100
101   unsigned int opcode;
102
103   /* An insn may have at most one expression; theoretically there could be
104      another in its prefix (but I don't see how that could happen).  */
105   expressionS expr;
106
107   /* The expression might need a relocation.  Here's one to start
108      relaxation with.  */
109   enum bfd_reloc_code_real reloc;
110
111   /* The size in bytes of an immediate expression, or zero if
112      nonapplicable.  */
113   int imm_oprnd_size;
114 };
115
116 enum cris_archs
117 {
118   arch_cris_unknown,
119   arch_crisv0, arch_crisv3, arch_crisv8, arch_crisv10,
120   arch_cris_any_v0_v10, arch_crisv32, arch_cris_common_v10_v32
121 };
122
123 static enum cris_archs cris_arch_from_string (char **);
124 static int cris_insn_ver_valid_for_arch (enum cris_insn_version_usage,
125                                          enum cris_archs);
126
127 static void cris_process_instruction (char *, struct cris_instruction *,
128                                       struct cris_prefix *);
129 static int get_bwd_size_modifier (char **, int *);
130 static int get_bw_size_modifier (char **, int *);
131 static int get_gen_reg (char **, int *);
132 static int get_spec_reg (char **, const struct cris_spec_reg **);
133 static int get_sup_reg (char **, int *);
134 static int get_autoinc_prefix_or_indir_op (char **, struct cris_prefix *,
135                                            int *, int *, int *,
136                                            expressionS *);
137 static int get_3op_or_dip_prefix_op (char **, struct cris_prefix *);
138 static int cris_get_expression (char **, expressionS *);
139 static int get_flags (char **, int *);
140 static void gen_bdap (int, expressionS *);
141 static int branch_disp (int);
142 static void gen_cond_branch_32 (char *, char *, fragS *, symbolS *, symbolS *,
143                                 long int);
144 static void cris_number_to_imm (char *, long, int, fixS *, segT);
145 static void s_syntax (int);
146 static void s_cris_file (int);
147 static void s_cris_loc (int);
148 static void s_cris_arch (int);
149 static void s_cris_dtpoff (int);
150
151 /* Get ":GOT", ":GOTOFF", ":PLT" etc. suffixes.  */
152 static void cris_get_reloc_suffix (char **, bfd_reloc_code_real_type *,
153                                    expressionS *);
154 static unsigned int cris_get_specified_reloc_size (bfd_reloc_code_real_type);
155
156 /* All the .syntax functions.  */
157 static void cris_force_reg_prefix (void);
158 static void cris_relax_reg_prefix (void);
159 static void cris_sym_leading_underscore (void);
160 static void cris_sym_no_leading_underscore (void);
161 static char *cris_insn_first_word_frag (void);
162
163 /* Handle to the opcode hash table.  */
164 static struct hash_control *op_hash = NULL;
165
166 /* If we target cris-axis-linux-gnu (as opposed to generic cris-axis-elf),
167    we default to no underscore and required register-prefixes.  The
168    difference is in the default values.  */
169 #ifdef TE_LINUX
170 #define DEFAULT_CRIS_AXIS_LINUX_GNU TRUE
171 #else
172 #define DEFAULT_CRIS_AXIS_LINUX_GNU FALSE
173 #endif
174
175 /* Whether we demand that registers have a `$' prefix.  Default here.  */
176 static bfd_boolean demand_register_prefix = DEFAULT_CRIS_AXIS_LINUX_GNU;
177
178 /* Whether global user symbols have a leading underscore.  Default here.  */
179 static bfd_boolean symbols_have_leading_underscore
180   = !DEFAULT_CRIS_AXIS_LINUX_GNU;
181
182 /* Whether or not we allow PIC, and expand to PIC-friendly constructs.  */
183 static bfd_boolean pic = FALSE;
184
185 /* Whether or not we allow TLS suffixes.  For the moment, we always do.  */
186 static const bfd_boolean tls = TRUE;
187
188 /* If we're configured for "cris", default to allow all v0..v10
189    instructions and register names.  */
190 #ifndef DEFAULT_CRIS_ARCH
191 #define DEFAULT_CRIS_ARCH cris_any_v0_v10
192 #endif
193
194 /* No whitespace in the CONCAT2 parameter list.  */
195 static enum cris_archs cris_arch = XCONCAT2 (arch_,DEFAULT_CRIS_ARCH);
196
197 const pseudo_typeS md_pseudo_table[] =
198 {
199   {"dword", cons, 4},
200   {"dtpoffd", s_cris_dtpoff, 4},
201   {"syntax", s_syntax, 0},
202   {"file", s_cris_file, 0},
203   {"loc", s_cris_loc, 0},
204   {"arch", s_cris_arch, 0},
205   {NULL, 0, 0}
206 };
207
208 static int warn_for_branch_expansion = 0;
209
210 /* Whether to emit error when a MULS/MULU could be located last on a
211    cache-line.  */
212 static int err_for_dangerous_mul_placement
213  = (XCONCAT2 (arch_,DEFAULT_CRIS_ARCH) != arch_crisv32);
214
215 const char cris_comment_chars[] = ";";
216
217 /* This array holds the chars that only start a comment at the beginning of
218    a line.  If the line seems to have the form '# 123 filename'
219    .line and .file directives will appear in the pre-processed output.  */
220 /* Note that input_file.c hand-checks for '#' at the beginning of the
221    first line of the input file.  This is because the compiler outputs
222    #NO_APP at the beginning of its output.  */
223 /* Also note that slash-star will always start a comment.  */
224 const char line_comment_chars[] = "#";
225 const char line_separator_chars[] = "@";
226
227 /* Now all floating point support is shut off.  See md_atof.  */
228 const char EXP_CHARS[] = "";
229 const char FLT_CHARS[] = "";
230
231 /* For CRIS, we encode the relax_substateTs (in e.g. fr_substate) as:
232                        2                 1                 0
233       ---/ /--+-----------------+-----------------+-----------------+
234               |  what state ?   |            how long ?             |
235       ---/ /--+-----------------+-----------------+-----------------+
236
237    The "how long" bits are 00 = byte, 01 = word, 10 = dword (long).
238    Not all lengths are legit for a given value of (what state).
239
240    Groups for CRIS address relaxing:
241
242    1. Bcc (pre-V32)
243       length: byte, word, 10-byte expansion
244
245    2. BDAP
246       length: byte, word, dword
247
248    3. MULS/MULU
249       Not really a relaxation (no infrastructure to get delay-slots
250       right), just an alignment and placement checker for the v10
251       multiply/cache-bug.
252
253    4. Bcc (V32 and later)
254       length: byte, word, 14-byte expansion
255
256    5. Bcc (V10+V32)
257       length: byte, word, error
258
259    6. BA (V32)
260       length: byte, word, dword
261
262    7. LAPC (V32)
263       length: byte, dword
264   */
265
266 #define STATE_COND_BRANCH           (1)
267 #define STATE_BASE_PLUS_DISP_PREFIX (2)
268 #define STATE_MUL                   (3)
269 #define STATE_COND_BRANCH_V32       (4)
270 #define STATE_COND_BRANCH_COMMON    (5)
271 #define STATE_ABS_BRANCH_V32        (6)
272 #define STATE_LAPC                  (7)
273 #define STATE_COND_BRANCH_PIC       (8)
274
275 #define STATE_LENGTH_MASK           (3)
276 #define STATE_BYTE                  (0)
277 #define STATE_WORD                  (1)
278 #define STATE_DWORD                 (2)
279 /* Symbol undefined.  */
280 #define STATE_UNDF                  (3)
281 #define STATE_MAX_LENGTH            (3)
282
283 /* These displacements are relative to the address following the opcode
284    word of the instruction.  The first letter is Byte, Word.  The 2nd
285    letter is Forward, Backward.  */
286
287 #define BRANCH_BF ( 254)
288 #define BRANCH_BB (-256)
289 #define BRANCH_BF_V32 ( 252)
290 #define BRANCH_BB_V32 (-258)
291 #define BRANCH_WF (2 +  32767)
292 #define BRANCH_WB (2 + -32768)
293 #define BRANCH_WF_V32 (-2 + 32767)
294 #define BRANCH_WB_V32 (-2 + -32768)
295
296 #define BDAP_BF   ( 127)
297 #define BDAP_BB   (-128)
298 #define BDAP_WF   ( 32767)
299 #define BDAP_WB   (-32768)
300
301 #define ENCODE_RELAX(what, length) (((what) << 2) + (length))
302
303 const relax_typeS md_cris_relax_table[] =
304 {
305   /* Error sentinel (0, 0).  */
306   {1,         1,         0,  0},
307
308   /* Unused (0, 1).  */
309   {1,         1,         0,  0},
310
311   /* Unused (0, 2).  */
312   {1,         1,         0,  0},
313
314   /* Unused (0, 3).  */
315   {1,         1,         0,  0},
316
317   /* Bcc o (1, 0).  */
318   {BRANCH_BF, BRANCH_BB, 0,  ENCODE_RELAX (1, 1)},
319
320   /* Bcc [PC+] (1, 1).  */
321   {BRANCH_WF, BRANCH_WB, 2,  ENCODE_RELAX (1, 2)},
322
323   /* BEXT/BWF, BA, JUMP (external), JUMP (always), Bnot_cc, JUMP (default)
324      (1, 2).  */
325   {0,         0,         10, 0},
326
327   /* Unused (1, 3).  */
328   {1,         1,         0,  0},
329
330   /* BDAP o (2, 0).  */
331   {BDAP_BF,   BDAP_BB,   0,  ENCODE_RELAX (2, 1)},
332
333   /* BDAP.[bw] [PC+] (2, 1).  */
334   {BDAP_WF,   BDAP_WB,   2,  ENCODE_RELAX (2, 2)},
335
336   /* BDAP.d [PC+] (2, 2).  */
337   {0,         0,         4,  0},
338
339   /* Unused (2, 3).  */
340   {1,         1,         0,  0},
341
342   /* MULS/MULU (3, 0).  Positions (3, 1..3) are unused.  */
343   {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0},
344
345   /* V32: Bcc o (4, 0).  */
346   {BRANCH_BF_V32, BRANCH_BB_V32, 0,  ENCODE_RELAX (4, 1)},
347
348   /* V32: Bcc [PC+] (4, 1).  */
349   {BRANCH_WF_V32, BRANCH_WB_V32, 2,  ENCODE_RELAX (4, 2)},
350
351   /* V32: BA .+12; NOP; BA32 target; NOP; Bcc .-6  (4, 2).  */
352   {0,         0,         12, 0},
353
354   /* Unused (4, 3).  */
355   {1,         1,         0,  0},
356
357   /* COMMON: Bcc o (5, 0).  The offsets are calculated as for v32.  Code
358      should contain two nop insns (or four if offset size is large or
359      unknown) after every label.  */
360   {BRANCH_BF_V32, BRANCH_BB_V32, 0,  ENCODE_RELAX (5, 1)},
361
362   /* COMMON: Bcc [PC+] (5, 1).  */
363   {BRANCH_WF_V32, BRANCH_WB_V32, 2,  ENCODE_RELAX (5, 2)},
364
365   /* COMMON: FIXME: ???.  Treat as error currently.  */
366   {0,         0,         12, 0},
367
368   /* Unused (5, 3).  */
369   {1,         1,         0,  0},
370
371   /* V32: BA o (6, 0).  */
372   {BRANCH_BF_V32, BRANCH_BB_V32, 0,  ENCODE_RELAX (6, 1)},
373
374   /* V32: BA.W (6, 1).  */
375   {BRANCH_WF_V32, BRANCH_WB_V32, 2,  ENCODE_RELAX (6, 2)},
376
377   /* V32: BA.D (6, 2).  */
378   {0,         0,         4, 0},
379
380   /* Unused (6, 3).  */
381   {1,         1,         0,  0},
382
383   /* LAPC: LAPCQ .+0..15*2,Rn  (7, 0).  */
384   {14*2,   -1*2,         0,  ENCODE_RELAX (7, 2)},
385
386   /* Unused (7, 1).
387      While there's a shorter sequence, e.g. LAPCQ + an ADDQ or SUBQ,
388      that would affect flags, so we can't do that as it wouldn't be a
389      proper insn expansion of LAPCQ.  This row is associated with a
390      2-byte expansion, so it's unused rather than the next.  */
391   {1,         1,         0,  0},
392
393   /* LAPC: LAPC.D (7, 2).  */
394   {0,         0,         4, 0},
395
396   /* Unused (7, 3).  */
397   {1,         1,         0,  0},
398
399   /* PIC for pre-v32: Bcc o (8, 0).  */
400   {BRANCH_BF, BRANCH_BB, 0,  ENCODE_RELAX (STATE_COND_BRANCH_PIC, 1)},
401
402   /* Bcc [PC+] (8, 1).  */
403   {BRANCH_WF, BRANCH_WB, 2,  ENCODE_RELAX (STATE_COND_BRANCH_PIC, 2)},
404
405   /* 32-bit expansion, PIC (8, 2).  */
406   {0,         0,         12, 0},
407
408   /* Unused (8, 3).  */
409   {1,         1,         0,  0}
410 };
411
412 #undef BDAP_BF
413 #undef BDAP_BB
414 #undef BDAP_WF
415 #undef BDAP_WB
416
417 /* Target-specific multicharacter options, not const-declared.  */
418 struct option md_longopts[] =
419 {
420 #define OPTION_NO_US (OPTION_MD_BASE + 0)
421   {"no-underscore", no_argument, NULL, OPTION_NO_US},
422 #define OPTION_US (OPTION_MD_BASE + 1)
423   {"underscore", no_argument, NULL, OPTION_US},
424 #define OPTION_PIC (OPTION_US + 1)
425   {"pic", no_argument, NULL, OPTION_PIC},
426 #define OPTION_MULBUG_ABORT_ON (OPTION_PIC + 1)
427   {"mul-bug-abort", no_argument, NULL, OPTION_MULBUG_ABORT_ON},
428 #define OPTION_MULBUG_ABORT_OFF (OPTION_MULBUG_ABORT_ON + 1)
429   {"no-mul-bug-abort", no_argument, NULL, OPTION_MULBUG_ABORT_OFF},
430 #define OPTION_ARCH (OPTION_MULBUG_ABORT_OFF + 1)
431   {"march", required_argument, NULL, OPTION_ARCH},
432   {NULL, no_argument, NULL, 0}
433 };
434
435 /* Not const-declared.  */
436 size_t md_longopts_size = sizeof (md_longopts);
437 const char *md_shortopts = "hHN";
438
439 /* At first glance, this may seems wrong and should be 4 (ba + nop); but
440    since a short_jump must skip a *number* of long jumps, it must also be
441    a long jump.  Here, we hope to make it a "ba [16bit_offs]" and a "nop"
442    for the delay slot and hope that the jump table at most needs
443    32767/4=8191 long-jumps.  A branch is better than a jump, since it is
444    relative; we will not have a reloc to fix up somewhere.
445
446    Note that we can't add relocs, because relaxation uses these fixed
447    numbers, and md_create_short_jump is called after relaxation.  */
448
449 int md_short_jump_size = 6;
450
451 /* The v32 version has a delay-slot, hence two bytes longer.
452    The pre-v32 PIC version uses a prefixed insn.  */
453 #define cris_any_v0_v10_long_jump_size 6
454 #define cris_any_v0_v10_long_jump_size_pic 8
455 #define crisv32_long_jump_size 8
456
457 int md_long_jump_size = XCONCAT2 (DEFAULT_CRIS_ARCH,_long_jump_size);
458
459 /* Report output format.  Small changes in output format (like elf
460    variants below) can happen until all options are parsed, but after
461    that, the output format must remain fixed.  */
462
463 const char *
464 cris_target_format (void)
465 {
466   switch (OUTPUT_FLAVOR)
467     {
468     case bfd_target_aout_flavour:
469       return "a.out-cris";
470
471     case bfd_target_elf_flavour:
472       if (symbols_have_leading_underscore)
473         return "elf32-us-cris";
474       return "elf32-cris";
475
476     default:
477       abort ();
478       return NULL;
479     }
480 }
481
482 /* Return a bfd_mach_cris... value corresponding to the value of
483    cris_arch.  */
484
485 unsigned int
486 cris_mach (void)
487 {
488   unsigned int retval = 0;
489
490   switch (cris_arch)
491     {
492     case arch_cris_common_v10_v32:
493       retval = bfd_mach_cris_v10_v32;
494       break;
495
496     case arch_crisv32:
497       retval = bfd_mach_cris_v32;
498       break;
499
500     case arch_crisv10:
501     case arch_cris_any_v0_v10:
502       retval = bfd_mach_cris_v0_v10;
503       break;
504
505     default:
506       BAD_CASE (cris_arch);
507     }
508
509   return retval;
510 }
511
512 /* We need a port-specific relaxation function to cope with sym2 - sym1
513    relative expressions with both symbols in the same segment (but not
514    necessarily in the same frag as this insn), for example:
515      move.d [pc+sym2-(sym1-2)],r10
516     sym1:
517    The offset can be 8, 16 or 32 bits long.  */
518
519 long
520 cris_relax_frag (segT seg ATTRIBUTE_UNUSED, fragS *fragP,
521                  long stretch ATTRIBUTE_UNUSED)
522 {
523   long growth;
524   offsetT aim = 0;
525   symbolS *symbolP;
526   const relax_typeS *this_type;
527   const relax_typeS *start_type;
528   relax_substateT next_state;
529   relax_substateT this_state;
530   const relax_typeS *table = TC_GENERIC_RELAX_TABLE;
531
532   /* We only have to cope with frags as prepared by
533      md_estimate_size_before_relax.  The dword cases may get here
534      because of the different reasons that they aren't relaxable.  */
535   switch (fragP->fr_subtype)
536     {
537     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_DWORD):
538     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_DWORD):
539     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_DWORD):
540     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_DWORD):
541     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_DWORD):
542     case ENCODE_RELAX (STATE_LAPC, STATE_DWORD):
543     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD):
544       /* When we get to these states, the frag won't grow any more.  */
545       return 0;
546
547     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_WORD):
548     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_BYTE):
549       if (fragP->fr_symbol == NULL
550           || S_GET_SEGMENT (fragP->fr_symbol) != absolute_section)
551         as_fatal (_("internal inconsistency problem in %s: fr_symbol %lx"),
552                   __FUNCTION__, (long) fragP->fr_symbol);
553       symbolP = fragP->fr_symbol;
554       if (symbol_resolved_p (symbolP))
555         as_fatal (_("internal inconsistency problem in %s: resolved symbol"),
556                   __FUNCTION__);
557       aim = S_GET_VALUE (symbolP);
558       break;
559
560     case ENCODE_RELAX (STATE_MUL, STATE_BYTE):
561       /* Nothing to do here.  */
562       return 0;
563
564     default:
565       as_fatal (_("internal inconsistency problem in %s: fr_subtype %d"),
566                   __FUNCTION__, fragP->fr_subtype);
567     }
568
569   /* The rest is stolen from relax_frag.  There's no obvious way to
570      share the code, but fortunately no requirement to keep in sync as
571      long as fragP->fr_symbol does not have its segment changed.  */
572
573   this_state = fragP->fr_subtype;
574   start_type = this_type = table + this_state;
575
576   if (aim < 0)
577     {
578       /* Look backwards.  */
579       for (next_state = this_type->rlx_more; next_state;)
580         if (aim >= this_type->rlx_backward)
581           next_state = 0;
582         else
583           {
584             /* Grow to next state.  */
585             this_state = next_state;
586             this_type = table + this_state;
587             next_state = this_type->rlx_more;
588           }
589     }
590   else
591     {
592       /* Look forwards.  */
593       for (next_state = this_type->rlx_more; next_state;)
594         if (aim <= this_type->rlx_forward)
595           next_state = 0;
596         else
597           {
598             /* Grow to next state.  */
599             this_state = next_state;
600             this_type = table + this_state;
601             next_state = this_type->rlx_more;
602           }
603     }
604
605   growth = this_type->rlx_length - start_type->rlx_length;
606   if (growth != 0)
607     fragP->fr_subtype = this_state;
608   return growth;
609 }
610
611 /* Prepare machine-dependent frags for relaxation.
612
613    Called just before relaxation starts. Any symbol that is now undefined
614    will not become defined.
615
616    Return the correct fr_subtype in the frag.
617
618    Return the initial "guess for fr_var" to caller.  The guess for fr_var
619    is *actually* the growth beyond fr_fix. Whatever we do to grow fr_fix
620    or fr_var contributes to our returned value.
621
622    Although it may not be explicit in the frag, pretend
623    fr_var starts with a value.  */
624
625 int
626 md_estimate_size_before_relax (fragS *fragP, segT segment_type)
627 {
628   int old_fr_fix;
629   symbolS *symbolP = fragP->fr_symbol;
630
631 #define HANDLE_RELAXABLE(state)                                         \
632     case ENCODE_RELAX (state, STATE_UNDF):                              \
633       if (symbolP != NULL                                               \
634           && S_GET_SEGMENT (symbolP) == segment_type                    \
635           && !S_IS_WEAK (symbolP))                                      \
636         /* The symbol lies in the same segment - a relaxable            \
637            case.  */                                                    \
638         fragP->fr_subtype                                               \
639           = ENCODE_RELAX (state, STATE_BYTE);                           \
640       else                                                              \
641         /* Unknown or not the same segment, so not relaxable.  */       \
642         fragP->fr_subtype                                               \
643           = ENCODE_RELAX (state, STATE_DWORD);                          \
644       fragP->fr_var                                                     \
645         = md_cris_relax_table[fragP->fr_subtype].rlx_length;            \
646       break
647
648   old_fr_fix = fragP->fr_fix;
649
650   switch (fragP->fr_subtype)
651     {
652       HANDLE_RELAXABLE (STATE_COND_BRANCH);
653       HANDLE_RELAXABLE (STATE_COND_BRANCH_V32);
654       HANDLE_RELAXABLE (STATE_COND_BRANCH_COMMON);
655       HANDLE_RELAXABLE (STATE_COND_BRANCH_PIC);
656       HANDLE_RELAXABLE (STATE_ABS_BRANCH_V32);
657
658     case ENCODE_RELAX (STATE_LAPC, STATE_UNDF):
659       if (symbolP != NULL
660           && S_GET_SEGMENT (symbolP) == segment_type
661           && !S_IS_WEAK (symbolP))
662         {
663           /* The symbol lies in the same segment - a relaxable case.
664              Check if we currently have an odd offset; we can't code
665              that into the instruction.  Relaxing presumably only cause
666              multiple-of-two changes, so we should only need to adjust
667              for that here.  */
668           bfd_vma target_address
669             = (symbolP
670                ? S_GET_VALUE (symbolP)
671                : 0) + fragP->fr_offset;
672           bfd_vma var_part_offset = fragP->fr_fix;
673           bfd_vma address_of_var_part = fragP->fr_address + var_part_offset;
674           long offset = target_address - (address_of_var_part - 2);
675
676           fragP->fr_subtype
677             = (offset & 1)
678             ? ENCODE_RELAX (STATE_LAPC, STATE_DWORD)
679             : ENCODE_RELAX (STATE_LAPC, STATE_BYTE);
680         }
681       else
682         /* Unknown or not the same segment, so not relaxable.  */
683         fragP->fr_subtype
684           = ENCODE_RELAX (STATE_LAPC, STATE_DWORD);
685       fragP->fr_var
686         = md_cris_relax_table[fragP->fr_subtype].rlx_length;
687       break;
688
689     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_UNDF):
690       /* Note that we can not do anything sane with relaxing
691          [rX + a_known_symbol_in_text], it will have to be a 32-bit
692          value.
693
694          We could play tricks with managing a constant pool and make
695          a_known_symbol_in_text a "bdap [pc + offset]" pointing there
696          (like the GOT for ELF shared libraries), but that's no use, it
697          would in general be no shorter or faster code, only more
698          complicated.  */
699
700       if (S_GET_SEGMENT (symbolP) != absolute_section)
701         {
702           /* Go for dword if not absolute or same segment.  */
703           fragP->fr_subtype
704             = ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD);
705           fragP->fr_var = md_cris_relax_table[fragP->fr_subtype].rlx_length;
706         }
707       else if (!symbol_resolved_p (fragP->fr_symbol))
708         {
709           /* The symbol will eventually be completely resolved as an
710              absolute expression, but right now it depends on the result
711              of relaxation and we don't know anything else about the
712              value.  We start relaxation with the assumption that it'll
713              fit in a byte.  */
714           fragP->fr_subtype
715             = ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_BYTE);
716           fragP->fr_var = md_cris_relax_table[fragP->fr_subtype].rlx_length;
717         }
718       else
719         {
720           /* Absolute expression.  */
721           long int value;
722           value = (symbolP != NULL
723                    ? S_GET_VALUE (symbolP) : 0) + fragP->fr_offset;
724
725           if (value >= -128 && value <= 127)
726             {
727               /* Byte displacement.  */
728               (fragP->fr_opcode)[0] = value;
729             }
730           else
731             {
732               /* Word or dword displacement.  */
733               int pow2_of_size = 1;
734               char *writep;
735
736               if (value < -32768 || value > 32767)
737                 {
738                   /* Outside word range, make it a dword.  */
739                   pow2_of_size = 2;
740                 }
741
742               /* Modify the byte-offset BDAP into a word or dword offset
743                  BDAP.  Or really, a BDAP rX,8bit into a
744                  BDAP.[wd] rX,[PC+] followed by a word or dword.  */
745               (fragP->fr_opcode)[0] = BDAP_PC_LOW + pow2_of_size * 16;
746
747               /* Keep the register number in the highest four bits.  */
748               (fragP->fr_opcode)[1] &= 0xF0;
749               (fragP->fr_opcode)[1] |= BDAP_INCR_HIGH;
750
751               /* It grew by two or four bytes.  */
752               fragP->fr_fix += 1 << pow2_of_size;
753               writep = fragP->fr_literal + old_fr_fix;
754               md_number_to_chars (writep, value, 1 << pow2_of_size);
755             }
756           frag_wane (fragP);
757         }
758       break;
759
760     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_BYTE):
761     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_WORD):
762     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_DWORD):
763     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_BYTE):
764     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_WORD):
765     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_DWORD):
766     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_BYTE):
767     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_WORD):
768     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_DWORD):
769     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_BYTE):
770     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_WORD):
771     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_DWORD):
772     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_BYTE):
773     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_WORD):
774     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_DWORD):
775     case ENCODE_RELAX (STATE_LAPC, STATE_BYTE):
776     case ENCODE_RELAX (STATE_LAPC, STATE_DWORD):
777     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_BYTE):
778     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_WORD):
779     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD):
780       /* When relaxing a section for the second time, we don't need to
781          do anything except making sure that fr_var is set right.  */
782       fragP->fr_var = md_cris_relax_table[fragP->fr_subtype].rlx_length;
783       break;
784
785     case ENCODE_RELAX (STATE_MUL, STATE_BYTE):
786       /* Nothing to do here.  */
787       break;
788
789     default:
790       BAD_CASE (fragP->fr_subtype);
791     }
792
793   return fragP->fr_var + (fragP->fr_fix - old_fr_fix);
794 }
795
796 /* Perform post-processing of machine-dependent frags after relaxation.
797    Called after relaxation is finished.
798    In:  Address of frag.
799         fr_type == rs_machine_dependent.
800         fr_subtype is what the address relaxed to.
801
802    Out: Any fixS:s and constants are set up.
803
804    The caller will turn the frag into a ".space 0".  */
805
806 void
807 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED,
808                  fragS *fragP)
809 {
810   /* Pointer to first byte in variable-sized part of the frag.  */
811   char *var_partp;
812
813   /* Pointer to first opcode byte in frag.  */
814   char *opcodep;
815
816   /* Used to check integrity of the relaxation.
817      One of 2 = long, 1 = word, or 0 = byte.  */
818   int length_code;
819
820   /* Size in bytes of variable-sized part of frag.  */
821   int var_part_size = 0;
822
823   /* This is part of *fragP.  It contains all information about addresses
824      and offsets to varying parts.  */
825   symbolS *symbolP;
826   unsigned long var_part_offset;
827
828   /* Where, in file space, is _var of *fragP?  */
829   unsigned long address_of_var_part = 0;
830
831   /* Where, in file space, does addr point?  */
832   unsigned long target_address;
833
834   know (fragP->fr_type == rs_machine_dependent);
835
836   length_code = fragP->fr_subtype & STATE_LENGTH_MASK;
837   know (length_code >= 0 && length_code < STATE_MAX_LENGTH);
838
839   var_part_offset = fragP->fr_fix;
840   var_partp = fragP->fr_literal + var_part_offset;
841   opcodep = fragP->fr_opcode;
842
843   symbolP = fragP->fr_symbol;
844   target_address = (symbolP ? S_GET_VALUE (symbolP) : 0) + fragP->fr_offset;
845   address_of_var_part = fragP->fr_address + var_part_offset;
846
847   switch (fragP->fr_subtype)
848     {
849     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_BYTE):
850     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_BYTE):
851     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_BYTE):
852     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_BYTE):
853     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_BYTE):
854       opcodep[0] = branch_disp ((target_address - address_of_var_part));
855       var_part_size = 0;
856       break;
857
858     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_WORD):
859     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_WORD):
860     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_WORD):
861     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_WORD):
862     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_WORD):
863       /* We had a quick immediate branch, now turn it into a word one i.e. a
864          PC autoincrement.  */
865       opcodep[0] = BRANCH_PC_LOW;
866       opcodep[1] &= 0xF0;
867       opcodep[1] |= BRANCH_INCR_HIGH;
868       md_number_to_chars (var_partp,
869                           (long)
870                           (target_address
871                            - (address_of_var_part
872                               + (cris_arch == arch_crisv32
873                                  || cris_arch == arch_cris_common_v10_v32
874                                  ? -2 : 2))),
875                           2);
876       var_part_size = 2;
877       break;
878
879     case ENCODE_RELAX (STATE_COND_BRANCH, STATE_DWORD):
880       gen_cond_branch_32 (fragP->fr_opcode, var_partp, fragP,
881                           fragP->fr_symbol, (symbolS *) NULL,
882                           fragP->fr_offset);
883       /* Ten bytes added: a branch, nop and a jump.  */
884       var_part_size = 2 + 2 + 4 + 2;
885       break;
886
887     case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_DWORD):
888       gen_cond_branch_32 (fragP->fr_opcode, var_partp, fragP,
889                           fragP->fr_symbol, (symbolS *) NULL,
890                           fragP->fr_offset);
891       /* Twelve bytes added: a branch, nop and a pic-branch-32.  */
892       var_part_size = 2 + 2 + 4 + 2 + 2;
893       break;
894
895     case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_DWORD):
896       gen_cond_branch_32 (fragP->fr_opcode, var_partp, fragP,
897                           fragP->fr_symbol, (symbolS *) NULL,
898                           fragP->fr_offset);
899       /* Twelve bytes added: a branch, nop and another branch and nop.  */
900       var_part_size = 2 + 2 + 2 + 4 + 2;
901       break;
902
903     case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_DWORD):
904       as_bad_where (fragP->fr_file, fragP->fr_line,
905                     _("Relaxation to long branches for .arch common_v10_v32\
906  not implemented"));
907       /* Pretend we have twelve bytes for sake of quelling further
908          errors.  */
909       var_part_size = 2 + 2 + 2 + 4 + 2;
910       break;
911
912     case ENCODE_RELAX (STATE_ABS_BRANCH_V32, STATE_DWORD):
913       /* We had a quick immediate branch or a word immediate ba.  Now
914          turn it into a dword one.  */
915       opcodep[0] = BA_DWORD_OPCODE & 255;
916       opcodep[1] = (BA_DWORD_OPCODE >> 8) & 255;
917       fix_new (fragP, var_partp - fragP->fr_literal, 4, symbolP,
918                fragP->fr_offset + 6, 1, BFD_RELOC_32_PCREL);
919       var_part_size = 4;
920       break;
921
922     case ENCODE_RELAX (STATE_LAPC, STATE_BYTE):
923       {
924         long offset = target_address - (address_of_var_part - 2);
925
926         /* This is mostly a sanity check; useful occurrences (if there
927            really are any) should have been caught in
928            md_estimate_size_before_relax.  We can (at least
929            theoretically) stumble over invalid code with odd sizes and
930            .p2aligns within the code, so emit an error if that happens.
931            (The generic relaxation machinery is not fit to check this.)  */
932
933         if (offset & 1)
934           as_bad_where (fragP->fr_file, fragP->fr_line,
935                     _("Complicated LAPC target operand is not\
936  a multiple of two.  Use LAPC.D"));
937
938         /* FIXME: This *is* a sanity check.  Remove when done with.  */
939         if (offset > 15*2 || offset < 0)
940           as_fatal (_("Internal error found in md_convert_frag: offset %ld.\
941   Please report this."),
942                     offset);
943
944         opcodep[0] |= (offset / 2) & 0xf;
945         var_part_size = 0;
946       }
947       break;
948
949     case ENCODE_RELAX (STATE_LAPC, STATE_DWORD):
950       {
951         md_number_to_chars (opcodep,
952                             LAPC_DWORD_OPCODE + (opcodep[1] & 0xf0) * 256,
953                             2);
954         /* Remember that the reloc is against the position *after* the
955            relocated contents, so we need to adjust to the start of
956            the insn.  */
957         fix_new (fragP, var_partp - fragP->fr_literal, 4, fragP->fr_symbol,
958                  fragP->fr_offset + 6, 1, BFD_RELOC_32_PCREL);
959         var_part_size = 4;
960       }
961       break;
962
963     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_BYTE):
964       if (symbolP == NULL)
965         as_fatal (_("internal inconsistency in %s: bdapq no symbol"),
966                     __FUNCTION__);
967       opcodep[0] = S_GET_VALUE (symbolP);
968       var_part_size = 0;
969       break;
970
971     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_WORD):
972       /* We had a BDAP 8-bit "quick immediate", now turn it into a 16-bit
973          one that uses PC autoincrement.  */
974       opcodep[0] = BDAP_PC_LOW + (1 << 4);
975       opcodep[1] &= 0xF0;
976       opcodep[1] |= BDAP_INCR_HIGH;
977       if (symbolP == NULL)
978         as_fatal (_("internal inconsistency in %s: bdap.w with no symbol"),
979                   __FUNCTION__);
980       md_number_to_chars (var_partp, S_GET_VALUE (symbolP), 2);
981       var_part_size = 2;
982       break;
983
984     case ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_DWORD):
985       /* We had a BDAP 16-bit "word", change the offset to a dword.  */
986       opcodep[0] = BDAP_PC_LOW + (2 << 4);
987       opcodep[1] &= 0xF0;
988       opcodep[1] |= BDAP_INCR_HIGH;
989       if (fragP->fr_symbol == NULL)
990         md_number_to_chars (var_partp, fragP->fr_offset, 4);
991       else
992         fix_new (fragP, var_partp - fragP->fr_literal, 4, fragP->fr_symbol,
993                  fragP->fr_offset, 0, BFD_RELOC_32);
994       var_part_size = 4;
995       break;
996
997     case ENCODE_RELAX (STATE_MUL, STATE_BYTE):
998       /* This is the only time we check position and alignment of the
999          placement-tracking frag.  */
1000       if (sec->alignment_power < 2)
1001         as_bad_where (fragP->fr_file, fragP->fr_line,
1002                       _("section alignment must be >= 4 bytes to check MULS/MULU safeness"));
1003       else
1004         {
1005           /* If the address after the MULS/MULU has alignment which is
1006              that of the section and may be that of a cache-size of the
1007              buggy versions, then the MULS/MULU can be placed badly.  */
1008           if ((address_of_var_part
1009                & ((1 << sec->alignment_power) - 1) & 31) == 0)
1010             as_bad_where (fragP->fr_file, fragP->fr_line,
1011                           _("dangerous MULS/MULU location; give it higher alignment"));
1012         }
1013       break;
1014
1015     default:
1016       BAD_CASE (fragP->fr_subtype);
1017       break;
1018     }
1019
1020   fragP->fr_fix += var_part_size;
1021 }
1022
1023 /* Generate a short jump around a secondary jump table.
1024    Also called from md_create_long_jump, when sufficient.  */
1025
1026 void
1027 md_create_short_jump (char *storep, addressT from_addr, addressT to_addr,
1028                         fragS *fragP ATTRIBUTE_UNUSED,
1029                         symbolS *to_symbol ATTRIBUTE_UNUSED)
1030 {
1031   long int distance;
1032
1033   /* See md_create_long_jump about the comment on the "+ 2".  */
1034   long int max_minimal_minus_distance;
1035   long int max_minimal_plus_distance;
1036   long int max_minus_distance;
1037   long int max_plus_distance;
1038   int nop_opcode;
1039
1040   if (cris_arch == arch_crisv32)
1041     {
1042       max_minimal_minus_distance = BRANCH_BB_V32 + 2;
1043       max_minimal_plus_distance = BRANCH_BF_V32 + 2;
1044       max_minus_distance = BRANCH_WB_V32 + 2;
1045       max_plus_distance = BRANCH_WF_V32 + 2;
1046       nop_opcode = NOP_OPCODE_V32;
1047     }
1048   else if (cris_arch == arch_cris_common_v10_v32)
1049     /* Bail out for compatibility mode.  (It seems it can be implemented,
1050        perhaps with a 10-byte sequence: "move.d NNNN,$pc/$acr", "jump
1051        $acr", "nop"; but doesn't seem worth it at the moment.)  */
1052     as_fatal (_("Out-of-range .word offset handling\
1053  is not implemented for .arch common_v10_v32"));
1054   else
1055     {
1056       max_minimal_minus_distance = BRANCH_BB + 2;
1057       max_minimal_plus_distance = BRANCH_BF + 2;
1058       max_minus_distance = BRANCH_WB + 2;
1059       max_plus_distance = BRANCH_WF + 2;
1060       nop_opcode = NOP_OPCODE;
1061     }
1062
1063   distance = to_addr - from_addr;
1064
1065   if (max_minimal_minus_distance <= distance
1066       && distance <= max_minimal_plus_distance)
1067     {
1068       /* Create a "short" short jump: "BA distance - 2".  */
1069       storep[0] = branch_disp (distance - 2);
1070       storep[1] = BA_QUICK_HIGH;
1071
1072       /* A nop for the delay slot.  */
1073       md_number_to_chars (storep + 2, nop_opcode, 2);
1074
1075       /* The extra word should be filled with something sane too.  Make it
1076          a nop to keep disassembly sane.  */
1077       md_number_to_chars (storep + 4, nop_opcode, 2);
1078     }
1079   else if (max_minus_distance <= distance
1080            && distance <= max_plus_distance)
1081     {
1082       /* Make it a "long" short jump: "BA (PC+)".  */
1083       md_number_to_chars (storep, BA_PC_INCR_OPCODE, 2);
1084
1085       /* ".WORD distance - 4".  */
1086       md_number_to_chars (storep + 2,
1087                           (long) (distance - 4
1088                                   - (cris_arch == arch_crisv32
1089                                      ? -4 : 0)),
1090                           2);
1091
1092       /* A nop for the delay slot.  */
1093       md_number_to_chars (storep + 4, nop_opcode, 2);
1094     }
1095   else
1096     as_bad_where (fragP->fr_file, fragP->fr_line,
1097                   _(".word case-table handling failed: table too large"));
1098 }
1099
1100 /* Generate a long jump in a secondary jump table.
1101
1102    storep  Where to store the jump instruction.
1103    from_addr  Address of the jump instruction.
1104    to_addr    Destination address of the jump.
1105    fragP      Which frag the destination address operand
1106               lies in.
1107    to_symbol  Destination symbol.  */
1108
1109 void
1110 md_create_long_jump (char *storep, addressT from_addr, addressT to_addr,
1111                      fragS *fragP, symbolS *to_symbol)
1112 {
1113   long int distance;
1114
1115   /* FIXME: What's that "+ 3"?  It comes from the magic numbers that
1116      used to be here, it's just translated to the limit macros used in
1117      the relax table.  But why + 3?  */
1118   long int max_short_minus_distance
1119     = cris_arch != arch_crisv32 ? BRANCH_WB + 3 : BRANCH_WB_V32 + 3;
1120
1121   long int max_short_plus_distance
1122     = cris_arch != arch_crisv32 ? BRANCH_WF + 3 : BRANCH_WF_V32 + 3;
1123
1124   distance = to_addr - from_addr;
1125
1126   if (max_short_minus_distance <= distance
1127       && distance <= max_short_plus_distance)
1128     /* Then make it a "short" long jump.  */
1129     md_create_short_jump (storep, from_addr, to_addr, fragP,
1130                             to_symbol);
1131   else
1132     {
1133       /* We have a "long" long jump: "JUMP [PC+]".  If CRISv32, always
1134          make it a BA.  Else make it an "MOVE [PC=PC+N],P0" if we're supposed
1135          to emit PIC code.  */
1136       md_number_to_chars (storep,
1137                           cris_arch == arch_crisv32
1138                           ? BA_DWORD_OPCODE
1139                           : (pic ? MOVE_PC_INCR_OPCODE_PREFIX
1140                              : JUMP_PC_INCR_OPCODE),
1141                           2);
1142
1143       /* Follow with a ".DWORD to_addr", PC-relative for PIC.  */
1144       fix_new (fragP, storep + 2 - fragP->fr_literal, 4, to_symbol,
1145                cris_arch == arch_crisv32 ? 6 : 0,
1146                cris_arch == arch_crisv32 || pic ? 1 : 0,
1147                cris_arch == arch_crisv32 || pic
1148                ? BFD_RELOC_32_PCREL : BFD_RELOC_32);
1149
1150       /* Follow it with a "NOP" for CRISv32.  */
1151       if (cris_arch == arch_crisv32)
1152         md_number_to_chars (storep + 6, NOP_OPCODE_V32, 2);
1153       else if (pic)
1154         /* ...and the rest of the move-opcode for pre-v32 PIC.  */
1155         md_number_to_chars (storep + 6, MOVE_PC_INCR_OPCODE_SUFFIX, 2);
1156     }
1157 }
1158
1159 /* Allocate space for the first piece of an insn, and mark it as the
1160    start of the insn for debug-format use.  */
1161
1162 static char *
1163 cris_insn_first_word_frag (void)
1164 {
1165   char *insnp = frag_more (2);
1166
1167   /* We need to mark the start of the insn by passing dwarf2_emit_insn
1168      the offset from the current fragment position.  This must be done
1169      after the first fragment is created but before any other fragments
1170      (fixed or varying) are created.  Note that the offset only
1171      corresponds to the "size" of the insn for a fixed-size,
1172      non-expanded insn.  */
1173   if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
1174     dwarf2_emit_insn (2);
1175
1176   return insnp;
1177 }
1178
1179 /* Port-specific assembler initialization.  */
1180
1181 void
1182 md_begin (void)
1183 {
1184   const char *hashret = NULL;
1185   int i = 0;
1186
1187   /* Set up a hash table for the instructions.  */
1188   op_hash = hash_new ();
1189   if (op_hash == NULL)
1190     as_fatal (_("Virtual memory exhausted"));
1191
1192   /* Enable use of ".if ..asm.arch.cris.v32"
1193      and ".if ..asm.arch.cris.common_v10_v32" and a few others.  */
1194   symbol_table_insert (symbol_new ("..asm.arch.cris.v32", absolute_section,
1195                                    (cris_arch == arch_crisv32),
1196                                    &zero_address_frag));
1197   symbol_table_insert (symbol_new ("..asm.arch.cris.v10", absolute_section,
1198                                    (cris_arch == arch_crisv10),
1199                                    &zero_address_frag));
1200   symbol_table_insert (symbol_new ("..asm.arch.cris.common_v10_v32",
1201                                    absolute_section,
1202                                    (cris_arch == arch_cris_common_v10_v32),
1203                                    &zero_address_frag));
1204   symbol_table_insert (symbol_new ("..asm.arch.cris.any_v0_v10",
1205                                    absolute_section,
1206                                    (cris_arch == arch_cris_any_v0_v10),
1207                                    &zero_address_frag));
1208
1209   while (cris_opcodes[i].name != NULL)
1210     {
1211       const char *name = cris_opcodes[i].name;
1212
1213       if (! cris_insn_ver_valid_for_arch (cris_opcodes[i].applicable_version,
1214                                           cris_arch))
1215         {
1216           i++;
1217           continue;
1218         }
1219
1220       /* Need to cast to get rid of "const".  FIXME: Fix hash_insert instead.  */
1221       hashret = hash_insert (op_hash, name, (void *) &cris_opcodes[i]);
1222
1223       if (hashret != NULL && *hashret != '\0')
1224         as_fatal (_("Can't hash `%s': %s\n"), cris_opcodes[i].name,
1225                   *hashret == 0 ? _("(unknown reason)") : hashret);
1226       do
1227         {
1228           if (cris_opcodes[i].match & cris_opcodes[i].lose)
1229             as_fatal (_("Buggy opcode: `%s' \"%s\"\n"), cris_opcodes[i].name,
1230                       cris_opcodes[i].args);
1231
1232           ++i;
1233         }
1234       while (cris_opcodes[i].name != NULL
1235              && strcmp (cris_opcodes[i].name, name) == 0);
1236     }
1237 }
1238
1239 /* Assemble a source line.  */
1240
1241 void
1242 md_assemble (char *str)
1243 {
1244   struct cris_instruction output_instruction;
1245   struct cris_prefix prefix;
1246   char *opcodep;
1247   char *p;
1248
1249   know (str);
1250
1251   /* Do the low-level grunt - assemble to bits and split up into a prefix
1252      and ordinary insn.  */
1253   cris_process_instruction (str, &output_instruction, &prefix);
1254
1255   /* Handle any prefixes to the instruction.  */
1256   switch (prefix.kind)
1257     {
1258     case PREFIX_NONE:
1259       break;
1260
1261       /* When the expression is unknown for a BDAP, it can need 0, 2 or 4
1262          extra bytes, so we handle it separately.  */
1263     case PREFIX_BDAP_IMM:
1264       /* We only do it if the relocation is unspecified, i.e. not a PIC or TLS
1265          relocation.  */
1266       if (prefix.reloc == BFD_RELOC_NONE)
1267         {
1268           gen_bdap (prefix.base_reg_number, &prefix.expr);
1269           break;
1270         }
1271       /* Fall through.  */
1272     case PREFIX_BDAP:
1273     case PREFIX_BIAP:
1274     case PREFIX_DIP:
1275       opcodep = cris_insn_first_word_frag ();
1276
1277       /* Output the prefix opcode.  */
1278       md_number_to_chars (opcodep, (long) prefix.opcode, 2);
1279
1280       /* Having a specified reloc only happens for DIP and for BDAP with
1281          PIC or TLS operands, but it is ok to drop through here for the other
1282          prefixes as they can have no relocs specified.  */
1283       if (prefix.reloc != BFD_RELOC_NONE)
1284         {
1285           unsigned int relocsize
1286             = (prefix.kind == PREFIX_DIP
1287                ? 4 : cris_get_specified_reloc_size (prefix.reloc));
1288
1289           p = frag_more (relocsize);
1290           fix_new_exp (frag_now, (p - frag_now->fr_literal), relocsize,
1291                        &prefix.expr, 0, prefix.reloc);
1292         }
1293       break;
1294
1295     case PREFIX_PUSH:
1296       opcodep = cris_insn_first_word_frag ();
1297
1298       /* Output the prefix opcode.  Being a "push", we add the negative
1299          size of the register to "sp".  */
1300       if (output_instruction.spec_reg != NULL)
1301         {
1302           /* Special register.  */
1303           opcodep[0] = -output_instruction.spec_reg->reg_size;
1304         }
1305       else
1306         {
1307           /* General register.  */
1308           opcodep[0] = -4;
1309         }
1310       opcodep[1] = (REG_SP << 4) + (BDAP_QUICK_OPCODE >> 8);
1311       break;
1312
1313     default:
1314       BAD_CASE (prefix.kind);
1315     }
1316
1317   /* If we only had a prefix insn, we're done.  */
1318   if (output_instruction.insn_type == CRIS_INSN_NONE)
1319     return;
1320
1321   /* Done with the prefix.  Continue with the main instruction.  */
1322   if (prefix.kind == PREFIX_NONE)
1323     opcodep = cris_insn_first_word_frag ();
1324   else
1325     opcodep = frag_more (2);
1326
1327   /* Output the instruction opcode.  */
1328   md_number_to_chars (opcodep, (long) (output_instruction.opcode), 2);
1329
1330   /* Output the symbol-dependent instruction stuff.  */
1331   if (output_instruction.insn_type == CRIS_INSN_BRANCH)
1332     {
1333       segT to_seg = absolute_section;
1334       int is_undefined = 0;
1335       int length_code;
1336
1337       if (output_instruction.expr.X_op != O_constant)
1338         {
1339           to_seg = S_GET_SEGMENT (output_instruction.expr.X_add_symbol);
1340
1341           if (to_seg == undefined_section)
1342             is_undefined = 1;
1343         }
1344
1345       if (to_seg == now_seg || is_undefined
1346           /* In CRISv32, there *is* a 32-bit absolute branch, so don't
1347              emit the 12-byte sequence for known symbols in other
1348              segments.  */
1349           || (cris_arch == arch_crisv32
1350               && output_instruction.opcode == BA_QUICK_OPCODE))
1351         {
1352           /* Handle complex expressions.  */
1353           valueT addvalue
1354             = (SIMPLE_EXPR (&output_instruction.expr)
1355                ? output_instruction.expr.X_add_number
1356                : 0);
1357           symbolS *sym
1358             = (SIMPLE_EXPR (&output_instruction.expr)
1359                ? output_instruction.expr.X_add_symbol
1360                : make_expr_symbol (&output_instruction.expr));
1361
1362           /* If is_undefined, the expression may still become now_seg.
1363              That case is handled by md_estimate_size_before_relax.  */
1364           length_code = to_seg == now_seg ? STATE_BYTE : STATE_UNDF;
1365
1366           /* Make room for max twelve bytes of variable length for v32 mode
1367              or PIC, ten for v10 and older.  */
1368           frag_var (rs_machine_dependent,
1369                     (cris_arch == arch_crisv32
1370                      || cris_arch == arch_cris_common_v10_v32
1371                      || pic) ? 12 : 10, 0,
1372                     ENCODE_RELAX (cris_arch == arch_crisv32
1373                                   ? (output_instruction.opcode
1374                                      == BA_QUICK_OPCODE
1375                                      ? STATE_ABS_BRANCH_V32
1376                                      : STATE_COND_BRANCH_V32)
1377                                   : (cris_arch == arch_cris_common_v10_v32
1378                                      ? STATE_COND_BRANCH_COMMON
1379                                      : (pic ? STATE_COND_BRANCH_PIC
1380                                         : STATE_COND_BRANCH)),
1381                                   length_code),
1382                     sym, addvalue, opcodep);
1383         }
1384       else
1385         {
1386           /* We have: to_seg != now_seg && to_seg != undefined_section.
1387              This means it is a branch to a known symbol in another
1388              section, perhaps an absolute address.  Emit a 32-bit branch.  */
1389           char *cond_jump
1390             = frag_more ((cris_arch == arch_crisv32
1391                           || cris_arch == arch_cris_common_v10_v32
1392                           || pic)
1393                          ? 12 : 10);
1394
1395           gen_cond_branch_32 (opcodep, cond_jump, frag_now,
1396                               output_instruction.expr.X_add_symbol,
1397                               (symbolS *) NULL,
1398                               output_instruction.expr.X_add_number);
1399         }
1400     }
1401   else if (output_instruction.insn_type == CRIS_INSN_MUL
1402            && err_for_dangerous_mul_placement)
1403     /* Create a frag which which we track the location of the mul insn
1404        (in the last two bytes before the mul-frag).  */
1405     frag_variant (rs_machine_dependent, 0, 0,
1406                   ENCODE_RELAX (STATE_MUL, STATE_BYTE),
1407                   NULL, 0, opcodep);
1408   else
1409     {
1410       if (output_instruction.imm_oprnd_size > 0)
1411         {
1412           /* The instruction has an immediate operand.  */
1413           enum bfd_reloc_code_real reloc = BFD_RELOC_NONE;
1414
1415           switch (output_instruction.imm_oprnd_size)
1416             {
1417               /* Any byte-size immediate constants are treated as
1418                  word-size.  FIXME: Thus overflow check does not work
1419                  correctly.  */
1420
1421             case 2:
1422               /* Note that size-check for the explicit reloc has already
1423                  been done when we get here.  */
1424               if (output_instruction.reloc != BFD_RELOC_NONE)
1425                 reloc = output_instruction.reloc;
1426               else
1427                 reloc = BFD_RELOC_16;
1428               break;
1429
1430             case 4:
1431               /* Allow a relocation specified in the operand.  */
1432               if (output_instruction.reloc != BFD_RELOC_NONE)
1433                 reloc = output_instruction.reloc;
1434               else
1435                 reloc = BFD_RELOC_32;
1436               break;
1437
1438             default:
1439               BAD_CASE (output_instruction.imm_oprnd_size);
1440             }
1441
1442           p = frag_more (output_instruction.imm_oprnd_size);
1443           fix_new_exp (frag_now, (p - frag_now->fr_literal),
1444                        output_instruction.imm_oprnd_size,
1445                        &output_instruction.expr,
1446                        reloc == BFD_RELOC_32_PCREL
1447                        || reloc == BFD_RELOC_16_PCREL
1448                        || reloc == BFD_RELOC_8_PCREL, reloc);
1449         }
1450       else if (output_instruction.reloc == BFD_RELOC_CRIS_LAPCQ_OFFSET
1451                && output_instruction.expr.X_md != 0)
1452         {
1453           /* Handle complex expressions.  */
1454           valueT addvalue
1455             = (output_instruction.expr.X_op_symbol != NULL
1456                ? 0 : output_instruction.expr.X_add_number);
1457           symbolS *sym
1458             = (output_instruction.expr.X_op_symbol != NULL
1459                ? make_expr_symbol (&output_instruction.expr)
1460                : output_instruction.expr.X_add_symbol);
1461
1462           /* This is a relaxing construct, so we need a frag_var rather
1463              than the fix_new_exp call below.  */
1464           frag_var (rs_machine_dependent,
1465                     4, 0,
1466                     ENCODE_RELAX (STATE_LAPC, STATE_UNDF),
1467                     sym, addvalue, opcodep);
1468         }
1469       else if (output_instruction.reloc != BFD_RELOC_NONE)
1470         {
1471           /* An immediate operand that has a relocation and needs to be
1472              processed further.  */
1473
1474           /* It is important to use fix_new_exp here and everywhere else
1475              (and not fix_new), as fix_new_exp can handle "difference
1476              expressions" - where the expression contains a difference of
1477              two symbols in the same segment.  */
1478           fix_new_exp (frag_now, (opcodep - frag_now->fr_literal), 2,
1479                        &output_instruction.expr,
1480                        output_instruction.reloc == BFD_RELOC_32_PCREL
1481                        || output_instruction.reloc == BFD_RELOC_16_PCREL
1482                        || output_instruction.reloc == BFD_RELOC_8_PCREL
1483                        || (output_instruction.reloc
1484                            == BFD_RELOC_CRIS_LAPCQ_OFFSET),
1485                        output_instruction.reloc);
1486         }
1487     }
1488 }
1489
1490 /* Low level text-to-bits assembly.  */
1491
1492 static void
1493 cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp,
1494                           struct cris_prefix *prefixp)
1495 {
1496   char *s;
1497   char modified_char = 0;
1498   const char *args;
1499   struct cris_opcode *instruction;
1500   char *operands;
1501   int match = 0;
1502   int mode;
1503   int regno;
1504   int size_bits;
1505
1506   /* Reset these fields to a harmless state in case we need to return in
1507      error.  */
1508   prefixp->kind = PREFIX_NONE;
1509   prefixp->reloc = BFD_RELOC_NONE;
1510   out_insnp->insn_type = CRIS_INSN_NONE;
1511   out_insnp->imm_oprnd_size = 0;
1512
1513   /* Find the end of the opcode mnemonic.  We assume (true in 2.9.1)
1514      that the caller has translated the opcode to lower-case, up to the
1515      first non-letter.  */
1516   for (operands = insn_text; ISLOWER (*operands); ++operands)
1517     ;
1518
1519   /* Terminate the opcode after letters, but save the character there if
1520      it was of significance.  */
1521   switch (*operands)
1522     {
1523     case '\0':
1524       break;
1525
1526     case '.':
1527       /* Put back the modified character later.  */
1528       modified_char = *operands;
1529       /* Fall through.  */
1530
1531     case ' ':
1532       /* Consume the character after the mnemonic
1533          and replace it with '\0'.  */
1534       *operands++ = '\0';
1535       break;
1536
1537     default:
1538       as_bad (_("Unknown opcode: `%s'"), insn_text);
1539       return;
1540     }
1541
1542   /* Find the instruction.  */
1543   instruction = (struct cris_opcode *) hash_find (op_hash, insn_text);
1544   if (instruction == NULL)
1545     {
1546       as_bad (_("Unknown opcode: `%s'"), insn_text);
1547       return;
1548     }
1549
1550   /* Put back the modified character.  */
1551   switch (modified_char)
1552     {
1553     case 0:
1554       break;
1555
1556     default:
1557       *--operands = modified_char;
1558     }
1559
1560   /* Try to match an opcode table slot.  */
1561   for (s = operands;;)
1562     {
1563       int imm_expr_found;
1564
1565       /* Initialize *prefixp, perhaps after being modified for a
1566          "near match".  */
1567       prefixp->kind = PREFIX_NONE;
1568       prefixp->reloc = BFD_RELOC_NONE;
1569
1570       /* Initialize *out_insnp.  */
1571       memset (out_insnp, 0, sizeof (*out_insnp));
1572       out_insnp->opcode = instruction->match;
1573       out_insnp->reloc = BFD_RELOC_NONE;
1574       out_insnp->insn_type = CRIS_INSN_NORMAL;
1575       out_insnp->imm_oprnd_size = 0;
1576
1577       imm_expr_found = 0;
1578
1579       /* Build the opcode, checking as we go to make sure that the
1580          operands match.  */
1581       for (args = instruction->args;; ++args)
1582         {
1583           switch (*args)
1584             {
1585             case '\0':
1586               /* If we've come to the end of arguments, we're done.  */
1587               if (*s == '\0')
1588                 match = 1;
1589               break;
1590
1591             case '!':
1592               /* Non-matcher character for disassembly.
1593                  Ignore it here.  */
1594               continue;
1595
1596             case '[':
1597             case ']':
1598             case ',':
1599             case ' ':
1600               /* These must match exactly.  */
1601               if (*s++ == *args)
1602                 continue;
1603               break;
1604
1605             case 'A':
1606               /* "ACR", case-insensitive.
1607                  Handle a sometimes-mandatory dollar sign as register
1608                  prefix.  */
1609               if (*s == REGISTER_PREFIX_CHAR)
1610                 s++;
1611               else if (demand_register_prefix)
1612                 break;
1613
1614               if ((*s++ != 'a' && s[-1] != 'A')
1615                   || (*s++ != 'c' && s[-1] != 'C')
1616                   || (*s++ != 'r' && s[-1] != 'R'))
1617                 break;
1618               continue;
1619
1620             case 'B':
1621               /* This is not really an operand, but causes a "BDAP
1622                  -size,SP" prefix to be output, for PUSH instructions.  */
1623               prefixp->kind = PREFIX_PUSH;
1624               continue;
1625
1626             case 'b':
1627               /* This letter marks an operand that should not be matched
1628                  in the assembler. It is a branch with 16-bit
1629                  displacement.  The assembler will create them from the
1630                  8-bit flavor when necessary.  The assembler does not
1631                  support the [rN+] operand, as the [r15+] that is
1632                  generated for 16-bit displacements.  */
1633               break;
1634
1635             case 'c':
1636               /* A 5-bit unsigned immediate in bits <4:0>.  */
1637               if (! cris_get_expression (&s, &out_insnp->expr))
1638                 break;
1639               else
1640                 {
1641                   if (out_insnp->expr.X_op == O_constant
1642                       && (out_insnp->expr.X_add_number < 0
1643                           || out_insnp->expr.X_add_number > 31))
1644                     as_bad (_("Immediate value not in 5 bit unsigned range: %ld"),
1645                             out_insnp->expr.X_add_number);
1646
1647                   out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_5;
1648                   continue;
1649                 }
1650
1651             case 'C':
1652               /* A 4-bit unsigned immediate in bits <3:0>.  */
1653               if (! cris_get_expression (&s, &out_insnp->expr))
1654                 break;
1655               else
1656                 {
1657                   if (out_insnp->expr.X_op == O_constant
1658                       && (out_insnp->expr.X_add_number < 0
1659                           || out_insnp->expr.X_add_number > 15))
1660                     as_bad (_("Immediate value not in 4 bit unsigned range: %ld"),
1661                             out_insnp->expr.X_add_number);
1662
1663                   out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_4;
1664                   continue;
1665                 }
1666
1667               /* For 'd', check for an optional ".d" or ".D" at the
1668                  start of the operands, followed by a space character.  */
1669             case 'd':
1670               if (modified_char == '.' && *s == '.')
1671                 {
1672                   if ((s[1] != 'd' && s[1] == 'D')
1673                       || ! ISSPACE (s[2]))
1674                     break;
1675                   s += 2;
1676                   continue;
1677                 }
1678               continue;
1679
1680             case 'D':
1681               /* General register in bits <15:12> and <3:0>.  */
1682               if (! get_gen_reg (&s, &regno))
1683                 break;
1684               else
1685                 {
1686                   out_insnp->opcode |= regno /* << 0 */;
1687                   out_insnp->opcode |= regno << 12;
1688                   continue;
1689                 }
1690
1691             case 'f':
1692               /* Flags from the condition code register.  */
1693               {
1694                 int flags = 0;
1695
1696                 if (! get_flags (&s, &flags))
1697                   break;
1698
1699                 out_insnp->opcode |= ((flags & 0xf0) << 8) | (flags & 0xf);
1700                 continue;
1701               }
1702
1703             case 'i':
1704               /* A 6-bit signed immediate in bits <5:0>.  */
1705               if (! cris_get_expression (&s, &out_insnp->expr))
1706                 break;
1707               else
1708                 {
1709                   if (out_insnp->expr.X_op == O_constant
1710                       && (out_insnp->expr.X_add_number < -32
1711                           || out_insnp->expr.X_add_number > 31))
1712                     as_bad (_("Immediate value not in 6 bit range: %ld"),
1713                             out_insnp->expr.X_add_number);
1714                   out_insnp->reloc = BFD_RELOC_CRIS_SIGNED_6;
1715                   continue;
1716                 }
1717
1718             case 'I':
1719               /* A 6-bit unsigned immediate in bits <5:0>.  */
1720               if (! cris_get_expression (&s, &out_insnp->expr))
1721                 break;
1722               else
1723                 {
1724                   if (out_insnp->expr.X_op == O_constant
1725                       && (out_insnp->expr.X_add_number < 0
1726                           || out_insnp->expr.X_add_number > 63))
1727                     as_bad (_("Immediate value not in 6 bit unsigned range: %ld"),
1728                             out_insnp->expr.X_add_number);
1729                   out_insnp->reloc = BFD_RELOC_CRIS_UNSIGNED_6;
1730                   continue;
1731                 }
1732
1733             case 'M':
1734               /* A size modifier, B, W or D, to be put in a bit position
1735                  suitable for CLEAR instructions (i.e. reflecting a zero
1736                  register).  */
1737               if (! get_bwd_size_modifier (&s, &size_bits))
1738                 break;
1739               else
1740                 {
1741                   switch (size_bits)
1742                     {
1743                     case 0:
1744                       out_insnp->opcode |= 0 << 12;
1745                       break;
1746
1747                     case 1:
1748                       out_insnp->opcode |= 4 << 12;
1749                       break;
1750
1751                     case 2:
1752                       out_insnp->opcode |= 8 << 12;
1753                       break;
1754                     }
1755                   continue;
1756                 }
1757
1758             case 'm':
1759               /* A size modifier, B, W or D, to be put in bits <5:4>.  */
1760               if (modified_char != '.'
1761                   || ! get_bwd_size_modifier (&s, &size_bits))
1762                 break;
1763               else
1764                 {
1765                   out_insnp->opcode |= size_bits << 4;
1766                   continue;
1767                 }
1768
1769             case 'o':
1770               /* A branch expression.  */
1771               if (! cris_get_expression (&s, &out_insnp->expr))
1772                 break;
1773               else
1774                 {
1775                   out_insnp->insn_type = CRIS_INSN_BRANCH;
1776                   continue;
1777                 }
1778
1779             case 'Q':
1780               /* A 8-bit quick BDAP expression, "expr,R".  */
1781               if (! cris_get_expression (&s, &out_insnp->expr))
1782                 break;
1783
1784               if (*s != ',')
1785                 break;
1786
1787               s++;
1788
1789               if (!get_gen_reg (&s, &regno))
1790                 break;
1791
1792               out_insnp->opcode |= regno << 12;
1793               out_insnp->reloc = BFD_RELOC_CRIS_SIGNED_8;
1794               continue;
1795               
1796             case 'O':
1797               /* A BDAP expression for any size, "expr,R".  */
1798               if (! cris_get_expression (&s, &prefixp->expr))
1799                 break;
1800               else
1801                 {
1802                   if (*s != ',')
1803                     break;
1804
1805                   s++;
1806
1807                   if (!get_gen_reg (&s, &prefixp->base_reg_number))
1808                     break;
1809
1810                   /* Since 'O' is used with an explicit bdap, we have no
1811                      "real" instruction.  */
1812                   prefixp->kind = PREFIX_BDAP_IMM;
1813                   prefixp->opcode
1814                     = BDAP_QUICK_OPCODE | (prefixp->base_reg_number << 12);
1815
1816                   out_insnp->insn_type = CRIS_INSN_NONE;
1817                   continue;
1818                 }
1819
1820             case 'P':
1821               /* Special register in bits <15:12>.  */
1822               if (! get_spec_reg (&s, &out_insnp->spec_reg))
1823                 break;
1824               else
1825                 {
1826                   /* Use of some special register names come with a
1827                      specific warning.  Note that we have no ".cpu type"
1828                      pseudo yet, so some of this is just unused
1829                      framework.  */
1830                   if (out_insnp->spec_reg->warning)
1831                     as_warn ("%s", out_insnp->spec_reg->warning);
1832                   else if (out_insnp->spec_reg->applicable_version
1833                            == cris_ver_warning)
1834                     /* Others have a generic warning.  */
1835                     as_warn (_("Unimplemented register `%s' specified"),
1836                              out_insnp->spec_reg->name);
1837
1838                   out_insnp->opcode
1839                     |= out_insnp->spec_reg->number << 12;
1840                   continue;
1841                 }
1842
1843             case 'p':
1844               /* This character is used in the disassembler to
1845                  recognize a prefix instruction to fold into the
1846                  addressing mode for the next instruction.  It is
1847                  ignored here.  */
1848               continue;
1849
1850             case 'R':
1851               /* General register in bits <15:12>.  */
1852               if (! get_gen_reg (&s, &regno))
1853                 break;
1854               else
1855                 {
1856                   out_insnp->opcode |= regno << 12;
1857                   continue;
1858                 }
1859
1860             case 'r':
1861               /* General register in bits <3:0>.  */
1862               if (! get_gen_reg (&s, &regno))
1863                 break;
1864               else
1865                 {
1866                   out_insnp->opcode |= regno /* << 0 */;
1867                   continue;
1868                 }
1869
1870             case 'S':
1871               /* Source operand in bit <10> and a prefix; a 3-operand
1872                  prefix.  */
1873               if (! get_3op_or_dip_prefix_op (&s, prefixp))
1874                 break;
1875               else
1876                 continue;
1877
1878             case 's':
1879               /* Source operand in bits <10>, <3:0> and optionally a
1880                  prefix; i.e. an indirect operand or an side-effect
1881                  prefix (where valid).  */
1882               if (! get_autoinc_prefix_or_indir_op (&s, prefixp, &mode,
1883                                                     &regno,
1884                                                     &imm_expr_found,
1885                                                     &out_insnp->expr))
1886                 break;
1887               else
1888                 {
1889                   if (prefixp->kind != PREFIX_NONE)
1890                     {
1891                       /* A prefix, so it has the autoincrement bit
1892                          set.  */
1893                       out_insnp->opcode |= (AUTOINCR_BIT << 8);
1894                     }
1895                   else
1896                     {
1897                       /* No prefix.  The "mode" variable contains bits like
1898                          whether or not this is autoincrement mode.  */
1899                       out_insnp->opcode |= (mode << 10);
1900
1901                       /* If there was a reloc specifier, then it was
1902                          attached to the prefix.  Note that we can't check
1903                          that the reloc size matches, since we don't have
1904                          all the operands yet in all cases.  */
1905                       if (prefixp->reloc != BFD_RELOC_NONE)
1906                         out_insnp->reloc = prefixp->reloc;
1907                     }
1908
1909                   out_insnp->opcode |= regno /* << 0 */ ;
1910                   continue;
1911                 }
1912
1913             case 'N':
1914             case 'Y':
1915               /* Like 's', but immediate operand only.  Also do not
1916                  modify insn.  There are no insns where an explicit reloc
1917                  specifier makes sense.  */
1918               if (cris_get_expression (&s, &out_insnp->expr))
1919                 {
1920                   imm_expr_found = 1;
1921                   continue;
1922                 }
1923               break;
1924
1925             case 'n':
1926               /* Like 'N', but PC-relative to the start of the insn.
1927                  There might be a :PLT to request a PLT entry.  */
1928               if (cris_get_expression (&s, &out_insnp->expr))
1929                 {
1930                   imm_expr_found = 1;
1931                   out_insnp->reloc = BFD_RELOC_32_PCREL;
1932
1933                   /* We have to adjust the expression, because that
1934                      relocation is to the location *after* the
1935                      relocation.  So add 2 for the insn and 4 for the
1936                      relocation.  */
1937                   out_insnp->expr.X_add_number += 6;
1938
1939                   /* TLS specifiers do not make sense here.  */
1940                   if (pic && *s == RELOC_SUFFIX_CHAR)
1941                     cris_get_reloc_suffix (&s, &out_insnp->reloc,
1942                                            &out_insnp->expr);
1943
1944                   continue;
1945                 }
1946               break;
1947
1948             case 'U':
1949               /* Maybe 'u', maybe 'n'.  Only for LAPC/LAPCQ.  */
1950               if (cris_get_expression (&s, &out_insnp->expr))
1951                 {
1952                   out_insnp->reloc = BFD_RELOC_CRIS_LAPCQ_OFFSET;
1953
1954                   /* Define 1 as relaxing.  */
1955                   out_insnp->expr.X_md = 1;
1956                   continue;
1957                 }
1958               break;
1959
1960             case 'u':
1961               /* Four PC-relative bits in <3:0> representing <4:1>:0 of
1962                  an offset relative to the beginning of the current
1963                  insn.  */
1964               if (cris_get_expression (&s, &out_insnp->expr))
1965                 {
1966                   out_insnp->reloc = BFD_RELOC_CRIS_LAPCQ_OFFSET;
1967
1968                   /* Define 0 as non-relaxing.  */
1969                   out_insnp->expr.X_md = 0;
1970
1971                   /* We have to adjust the expression, because that
1972                      relocation is to the location *after* the
1973                      insn.  So add 2 for the insn.  */
1974                   out_insnp->expr.X_add_number += 2;
1975                   continue;
1976                 }
1977               break;
1978
1979             case 'x':
1980               /* Rs.m in bits <15:12> and <5:4>.  */
1981               if (! get_gen_reg (&s, &regno)
1982                   || ! get_bwd_size_modifier (&s, &size_bits))
1983                 break;
1984               else
1985                 {
1986                   out_insnp->opcode |= (regno << 12) | (size_bits << 4);
1987                   continue;
1988                 }
1989
1990             case 'y':
1991               /* Source operand in bits <10>, <3:0> and optionally a
1992                  prefix; i.e. an indirect operand or an side-effect
1993                  prefix.
1994
1995                  The difference to 's' is that this does not allow an
1996                  "immediate" expression.  */
1997               if (! get_autoinc_prefix_or_indir_op (&s, prefixp,
1998                                                     &mode, &regno,
1999                                                     &imm_expr_found,
2000                                                     &out_insnp->expr)
2001                   || imm_expr_found)
2002                 break;
2003               else
2004                 {
2005                   if (prefixp->kind != PREFIX_NONE)
2006                     {
2007                       /* A prefix, and those matched here always have
2008                          side-effects (see 's' case).  */
2009                       out_insnp->opcode |= (AUTOINCR_BIT << 8);
2010                     }
2011                   else
2012                     {
2013                       /* No prefix.  The "mode" variable contains bits
2014                          like whether or not this is autoincrement
2015                          mode.  */
2016                       out_insnp->opcode |= (mode << 10);
2017                     }
2018
2019                   out_insnp->opcode |= regno /* << 0 */;
2020                   continue;
2021                 }
2022
2023             case 'z':
2024               /* Size modifier (B or W) in bit <4>.  */
2025               if (! get_bw_size_modifier (&s, &size_bits))
2026                 break;
2027               else
2028                 {
2029                   out_insnp->opcode |= size_bits << 4;
2030                   continue;
2031                 }
2032
2033             case 'T':
2034               if (cris_arch == arch_crisv32
2035                   && get_sup_reg (&s, &regno))
2036                 {
2037                   out_insnp->opcode |= regno << 12;
2038                   continue;
2039                 }
2040               break;
2041
2042             default:
2043               BAD_CASE (*args);
2044             }
2045
2046           /* We get here when we fail a match above or we found a
2047              complete match.  Break out of this loop.  */
2048           break;
2049         }
2050
2051       /* Was it a match or a miss?  */
2052       if (match == 0)
2053         {
2054           /* If it's just that the args don't match, maybe the next
2055              item in the table is the same opcode but with
2056              matching operands.  First skip any invalid ones.  */
2057           while (instruction[1].name != NULL
2058                  && strcmp (instruction->name, instruction[1].name) == 0
2059                  && ! cris_insn_ver_valid_for_arch (instruction[1]
2060                                                     .applicable_version,
2061                                                     cris_arch))
2062             ++instruction;
2063
2064           if (instruction[1].name != NULL
2065               && strcmp (instruction->name, instruction[1].name) == 0
2066               && cris_insn_ver_valid_for_arch (instruction[1]
2067                                                .applicable_version,
2068                                                cris_arch))
2069             {
2070               /* Yep.  Restart and try that one instead.  */
2071               ++instruction;
2072               s = operands;
2073               continue;
2074             }
2075           else
2076             {
2077               /* We've come to the end of instructions with this
2078                  opcode, so it must be an error.  */
2079               as_bad (_("Illegal operands"));
2080
2081               /* As discard_rest_of_line, but without continuing to the
2082                  next line.  */
2083               while (!is_end_of_line[(unsigned char) *input_line_pointer])
2084                 input_line_pointer++;
2085               return;
2086             }
2087         }
2088       else
2089         {
2090           /* We have a match.  Check if there's anything more to do.  */
2091           if (imm_expr_found)
2092             {
2093               /* There was an immediate mode operand, so we must check
2094                  that it has an appropriate size.  */
2095               switch (instruction->imm_oprnd_size)
2096                 {
2097                 default:
2098                 case SIZE_NONE:
2099                   /* Shouldn't happen; this one does not have immediate
2100                      operands with different sizes.  */
2101                   BAD_CASE (instruction->imm_oprnd_size);
2102                   break;
2103
2104                 case SIZE_FIX_32:
2105                   out_insnp->imm_oprnd_size = 4;
2106                   break;
2107
2108                 case SIZE_SPEC_REG:
2109                   if (cris_arch == arch_crisv32)
2110                     /* All immediate loads of special registers are
2111                        32-bit on CRISv32.  */
2112                     out_insnp->imm_oprnd_size = 4;
2113                   else
2114                     switch (out_insnp->spec_reg->reg_size)
2115                       {
2116                       case 1:
2117                         if (out_insnp->expr.X_op == O_constant
2118                             && (out_insnp->expr.X_add_number < -128
2119                                 || out_insnp->expr.X_add_number > 255))
2120                           as_bad (_("Immediate value not in 8 bit range: %ld"),
2121                                   out_insnp->expr.X_add_number);
2122                         /* Fall through.  */
2123                       case 2:
2124                         /* FIXME:  We need an indicator in the instruction
2125                            table to pass on, to indicate if we need to check
2126                            overflow for a signed or unsigned number.  */
2127                         if (out_insnp->expr.X_op == O_constant
2128                             && (out_insnp->expr.X_add_number < -32768
2129                                 || out_insnp->expr.X_add_number > 65535))
2130                           as_bad (_("Immediate value not in 16 bit range: %ld"),
2131                                   out_insnp->expr.X_add_number);
2132                         out_insnp->imm_oprnd_size = 2;
2133                         break;
2134
2135                       case 4:
2136                         out_insnp->imm_oprnd_size = 4;
2137                         break;
2138
2139                       default:
2140                         BAD_CASE (out_insnp->spec_reg->reg_size);
2141                       }
2142                   break;
2143
2144                 case SIZE_FIELD:
2145                 case SIZE_FIELD_SIGNED:
2146                 case SIZE_FIELD_UNSIGNED:
2147                   switch (size_bits)
2148                     {
2149                       /* FIXME: Find way to pass un/signedness to
2150                          caller, and set reloc type instead, postponing
2151                          this check until cris_number_to_imm.  That
2152                          necessarily corrects the reloc type for the
2153                          byte case, maybe requiring further changes.  */
2154                     case 0:
2155                       if (out_insnp->expr.X_op == O_constant)
2156                         {
2157                           if (instruction->imm_oprnd_size == SIZE_FIELD
2158                               && (out_insnp->expr.X_add_number < -128
2159                                   || out_insnp->expr.X_add_number > 255))
2160                             as_bad (_("Immediate value not in 8 bit range: %ld"),
2161                                     out_insnp->expr.X_add_number);
2162                           else if (instruction->imm_oprnd_size == SIZE_FIELD_SIGNED
2163                               && (out_insnp->expr.X_add_number < -128
2164                                   || out_insnp->expr.X_add_number > 127))
2165                             as_bad (_("Immediate value not in 8 bit signed range: %ld"),
2166                                     out_insnp->expr.X_add_number);
2167                           else if (instruction->imm_oprnd_size == SIZE_FIELD_UNSIGNED
2168                                    && (out_insnp->expr.X_add_number < 0
2169                                        || out_insnp->expr.X_add_number > 255))
2170                             as_bad (_("Immediate value not in 8 bit unsigned range: %ld"),
2171                                     out_insnp->expr.X_add_number);
2172                         }
2173
2174                       /* Fall through.  */
2175                     case 1:
2176                       if (out_insnp->expr.X_op == O_constant)
2177                         {
2178                           if (instruction->imm_oprnd_size == SIZE_FIELD
2179                               && (out_insnp->expr.X_add_number < -32768
2180                                   || out_insnp->expr.X_add_number > 65535))
2181                             as_bad (_("Immediate value not in 16 bit range: %ld"),
2182                                     out_insnp->expr.X_add_number);
2183                           else if (instruction->imm_oprnd_size == SIZE_FIELD_SIGNED
2184                               && (out_insnp->expr.X_add_number < -32768
2185                                   || out_insnp->expr.X_add_number > 32767))
2186                             as_bad (_("Immediate value not in 16 bit signed range: %ld"),
2187                                     out_insnp->expr.X_add_number);
2188                           else if (instruction->imm_oprnd_size == SIZE_FIELD_UNSIGNED
2189                               && (out_insnp->expr.X_add_number < 0
2190                                   || out_insnp->expr.X_add_number > 65535))
2191                             as_bad (_("Immediate value not in 16 bit unsigned range: %ld"),
2192                                     out_insnp->expr.X_add_number);
2193                         }
2194                       out_insnp->imm_oprnd_size = 2;
2195                       break;
2196
2197                     case 2:
2198                       out_insnp->imm_oprnd_size = 4;
2199                       break;
2200
2201                     default:
2202                       BAD_CASE (out_insnp->spec_reg->reg_size);
2203                     }
2204                 }
2205
2206               /* If there was a relocation specified for the immediate
2207                  expression (i.e. it had a PIC or TLS modifier) check that the
2208                  size of the relocation matches the size specified by
2209                  the opcode.  */
2210               if (out_insnp->reloc != BFD_RELOC_NONE
2211                   && (cris_get_specified_reloc_size (out_insnp->reloc)
2212                       != (unsigned int) out_insnp->imm_oprnd_size))
2213                 as_bad (out_insnp->reloc == BFD_RELOC_CRIS_32_GD
2214                         || out_insnp->reloc == BFD_RELOC_CRIS_32_TPREL
2215                         || out_insnp->reloc == BFD_RELOC_CRIS_16_TPREL
2216                         || out_insnp->reloc == BFD_RELOC_CRIS_32_IE
2217                         ? _("TLS relocation size does not match operand size")
2218                         : _("PIC relocation size does not match operand size"));
2219             }
2220           else if (instruction->op == cris_muls_op
2221                    || instruction->op == cris_mulu_op)
2222             out_insnp->insn_type = CRIS_INSN_MUL;
2223         }
2224       break;
2225     }
2226 }
2227
2228 /* Get a B, W, or D size modifier from the string pointed out by *cPP,
2229    which must point to a '.' in front of the modifier.  On successful
2230    return, *cPP is advanced to the character following the size
2231    modifier, and is undefined otherwise.
2232
2233    cPP          Pointer to pointer to string starting
2234                 with the size modifier.
2235
2236    size_bitsp   Pointer to variable to contain the size bits on
2237                 successful return.
2238
2239    Return 1 iff a correct size modifier is found, else 0.  */
2240
2241 static int
2242 get_bwd_size_modifier (char **cPP, int *size_bitsp)
2243 {
2244   if (**cPP != '.')
2245     return 0;
2246   else
2247     {
2248       /* Consume the '.'.  */
2249       (*cPP)++;
2250
2251       switch (**cPP)
2252         {
2253         case 'B':
2254         case 'b':
2255           *size_bitsp = 0;
2256           break;
2257
2258         case 'W':
2259         case 'w':
2260           *size_bitsp = 1;
2261           break;
2262
2263         case 'D':
2264         case 'd':
2265           *size_bitsp = 2;
2266           break;
2267
2268         default:
2269           return 0;
2270         }
2271
2272       /* Consume the size letter.  */
2273       (*cPP)++;
2274       return 1;
2275     }
2276 }
2277
2278 /* Get a B or W size modifier from the string pointed out by *cPP,
2279    which must point to a '.' in front of the modifier.  On successful
2280    return, *cPP is advanced to the character following the size
2281    modifier, and is undefined otherwise.
2282
2283    cPP          Pointer to pointer to string starting
2284                 with the size modifier.
2285
2286    size_bitsp   Pointer to variable to contain the size bits on
2287                 successful return.
2288
2289    Return 1 iff a correct size modifier is found, else 0.  */
2290
2291 static int
2292 get_bw_size_modifier (char **cPP, int *size_bitsp)
2293 {
2294   if (**cPP != '.')
2295     return 0;
2296   else
2297     {
2298       /* Consume the '.'.  */
2299       (*cPP)++;
2300
2301       switch (**cPP)
2302         {
2303         case 'B':
2304         case 'b':
2305           *size_bitsp = 0;
2306           break;
2307
2308         case 'W':
2309         case 'w':
2310           *size_bitsp = 1;
2311           break;
2312
2313         default:
2314           return 0;
2315         }
2316
2317       /* Consume the size letter.  */
2318       (*cPP)++;
2319       return 1;
2320     }
2321 }
2322
2323 /* Get a general register from the string pointed out by *cPP.  The
2324    variable *cPP is advanced to the character following the general
2325    register name on a successful return, and has its initial position
2326    otherwise.
2327
2328    cPP      Pointer to pointer to string, beginning with a general
2329             register name.
2330
2331    regnop   Pointer to int containing the register number.
2332
2333    Return 1 iff a correct general register designator is found,
2334             else 0.  */
2335
2336 static int
2337 get_gen_reg (char **cPP, int *regnop)
2338 {
2339   char *oldp;
2340   oldp = *cPP;
2341
2342   /* Handle a sometimes-mandatory dollar sign as register prefix.  */
2343   if (**cPP == REGISTER_PREFIX_CHAR)
2344     (*cPP)++;
2345   else if (demand_register_prefix)
2346     return 0;
2347
2348   switch (**cPP)
2349     {
2350     case 'P':
2351     case 'p':
2352       /* "P" as in "PC"?  Consume the "P".  */
2353       (*cPP)++;
2354
2355       if ((**cPP == 'C' || **cPP == 'c')
2356           && ! ISALNUM ((*cPP)[1])
2357           /* Here's a little twist: For v32 and the compatibility mode,
2358              we only recognize PC as a register number if there's '+]'
2359              after.  We don't consume that, but the presence can only be
2360              valid after a register in a post-increment context, which
2361              is also the only valid context for PC as a register for
2362              v32.  Not that it's used very often, but saying "MOVE.D
2363              [PC+],R5" should remain valid.  It's not supported for
2364              jump-type insns or other insns with no [Rn+] mode, though.  */
2365           && ((cris_arch != arch_crisv32
2366                && cris_arch != arch_cris_common_v10_v32)
2367               || ((*cPP)[1] == '+' && (*cPP)[2] == ']')))
2368         {
2369           /* It's "PC": consume the "c" and we're done.  */
2370           (*cPP)++;
2371           *regnop = REG_PC;
2372           return 1;
2373         }
2374       break;
2375
2376       /* Like with PC, we recognize ACR, but only if it's *not* followed
2377          by '+', and only for v32.  */
2378     case 'A':
2379     case 'a':
2380       if (cris_arch != arch_crisv32
2381           || ((*cPP)[1] != 'c' && (*cPP)[1] != 'C')
2382           || ((*cPP)[2] != 'r' && (*cPP)[2] != 'R')
2383           || ISALNUM ((*cPP)[3])
2384           || (*cPP)[3] == '+')
2385         break;
2386       (*cPP) += 3;
2387       *regnop = 15;
2388       return 1;
2389
2390     case 'R':
2391     case 'r':
2392       /* Hopefully r[0-9] or r1[0-5].  Consume 'R' or 'r'.  */
2393       (*cPP)++;
2394
2395       if (ISDIGIT (**cPP))
2396         {
2397           /* It's r[0-9].  Consume and check the next digit.  */
2398           *regnop = **cPP - '0';
2399           (*cPP)++;
2400
2401           if (! ISALNUM (**cPP))
2402             {
2403               /* No more digits, we're done.  */
2404               return 1;
2405             }
2406           else
2407             {
2408               /* One more digit.  Consume and add.  */
2409               *regnop = *regnop * 10 + (**cPP - '0');
2410
2411               /* We need to check for a valid register number; Rn,
2412                  0 <= n <= MAX_REG.  */
2413               if (*regnop <= MAX_REG)
2414                 {
2415                   /* Consume second digit.  */
2416                   (*cPP)++;
2417                   return 1;
2418                 }
2419             }
2420         }
2421       break;
2422
2423     case 'S':
2424     case 's':
2425       /* "S" as in "SP"?  Consume the "S".  */
2426       (*cPP)++;
2427       if (**cPP == 'P' || **cPP == 'p')
2428         {
2429           /* It's "SP": consume the "p" and we're done.  */
2430           (*cPP)++;
2431           *regnop = REG_SP;
2432           return 1;
2433         }
2434       break;
2435
2436     default:
2437       /* Just here to silence compilation warnings.  */
2438       ;
2439     }
2440
2441   /* We get here if we fail.  Restore the pointer.  */
2442   *cPP = oldp;
2443   return 0;
2444 }
2445
2446 /* Get a special register from the string pointed out by *cPP. The
2447    variable *cPP is advanced to the character following the special
2448    register name if one is found, and retains its original position
2449    otherwise.
2450
2451    cPP      Pointer to pointer to string starting with a special register
2452             name.
2453
2454    sregpp   Pointer to Pointer to struct spec_reg, where a pointer to the
2455             register description will be stored.
2456
2457    Return 1 iff a correct special register name is found.  */
2458
2459 static int
2460 get_spec_reg (char **cPP, const struct cris_spec_reg **sregpp)
2461 {
2462   char *s1;
2463   const char *s2;
2464   char *name_begin = *cPP;
2465
2466   const struct cris_spec_reg *sregp;
2467
2468   /* Handle a sometimes-mandatory dollar sign as register prefix.  */
2469   if (*name_begin == REGISTER_PREFIX_CHAR)
2470     name_begin++;
2471   else if (demand_register_prefix)
2472     return 0;
2473
2474   /* Loop over all special registers.  */
2475   for (sregp = cris_spec_regs; sregp->name != NULL; sregp++)
2476     {
2477       /* Start over from beginning of the supposed name.  */
2478       s1 = name_begin;
2479       s2 = sregp->name;
2480
2481       while (*s2 != '\0' && TOLOWER (*s1) == *s2)
2482         {
2483           s1++;
2484           s2++;
2485         }
2486
2487       /* For a match, we must have consumed the name in the table, and we
2488          must be outside what could be part of a name.  Assume here that a
2489          test for alphanumerics is sufficient for a name test.  */
2490       if (*s2 == 0 && ! ISALNUM (*s1)
2491           && cris_insn_ver_valid_for_arch (sregp->applicable_version,
2492                                            cris_arch))
2493         {
2494           /* We have a match.  Update the pointer and be done.  */
2495           *cPP = s1;
2496           *sregpp = sregp;
2497           return 1;
2498         }
2499     }
2500
2501   /* If we got here, we did not find any name.  */
2502   return 0;
2503 }
2504
2505 /* Get a support register from the string pointed out by *cPP. The
2506    variable *cPP is advanced to the character following the support-
2507    register name if one is found, and retains its original position
2508    otherwise.
2509
2510    cPP      Pointer to pointer to string starting with a support-register
2511             name.
2512
2513    sregpp   Pointer to int containing the register number.
2514
2515    Return 1 iff a correct support-register name is found.  */
2516
2517 static int
2518 get_sup_reg (char **cPP, int *regnop)
2519 {
2520   char *s1;
2521   const char *s2;
2522   char *name_begin = *cPP;
2523
2524   const struct cris_support_reg *sregp;
2525
2526   /* Handle a sometimes-mandatory dollar sign as register prefix.  */
2527   if (*name_begin == REGISTER_PREFIX_CHAR)
2528     name_begin++;
2529   else if (demand_register_prefix)
2530     return 0;
2531
2532   /* Loop over all support-registers.  */
2533   for (sregp = cris_support_regs; sregp->name != NULL; sregp++)
2534     {
2535       /* Start over from beginning of the supposed name.  */
2536       s1 = name_begin;
2537       s2 = sregp->name;
2538
2539       while (*s2 != '\0' && TOLOWER (*s1) == *s2)
2540         {
2541           s1++;
2542           s2++;
2543         }
2544
2545       /* For a match, we must have consumed the name in the table, and we
2546          must be outside what could be part of a name.  Assume here that a
2547          test for alphanumerics is sufficient for a name test.  */
2548       if (*s2 == 0 && ! ISALNUM (*s1))
2549         {
2550           /* We have a match.  Update the pointer and be done.  */
2551           *cPP = s1;
2552           *regnop = sregp->number;
2553           return 1;
2554         }
2555     }
2556
2557   /* If we got here, we did not find any name.  */
2558   return 0;
2559 }
2560
2561 /* Get an unprefixed or side-effect-prefix operand from the string pointed
2562    out by *cPP.  The pointer *cPP is advanced to the character following
2563    the indirect operand if we have success, else it contains an undefined
2564    value.
2565
2566    cPP           Pointer to pointer to string beginning with the first
2567                  character of the supposed operand.
2568
2569    prefixp       Pointer to structure containing an optional instruction
2570                  prefix.
2571
2572    is_autoincp   Pointer to int indicating the indirect or autoincrement
2573                  bits.
2574
2575    src_regnop    Pointer to int containing the source register number in
2576                  the instruction.
2577
2578    imm_foundp    Pointer to an int indicating if an immediate expression
2579                  is found.
2580
2581    imm_exprP     Pointer to a structure containing an immediate
2582                  expression, if success and if *imm_foundp is nonzero.
2583
2584    Return 1 iff a correct indirect operand is found.  */
2585
2586 static int
2587 get_autoinc_prefix_or_indir_op (char **cPP, struct cris_prefix *prefixp,
2588                                 int *is_autoincp, int *src_regnop,
2589                                 int *imm_foundp, expressionS *imm_exprP)
2590 {
2591   /* Assume there was no immediate mode expression.  */
2592   *imm_foundp = 0;
2593
2594   if (**cPP == '[')
2595     {
2596       /* So this operand is one of:
2597          Indirect: [rN]
2598          Autoincrement: [rN+]
2599          Indexed with assign: [rN=rM+rO.S]
2600          Offset with assign: [rN=rM+I], [rN=rM+[rO].s], [rN=rM+[rO+].s]
2601
2602          Either way, consume the '['.  */
2603       (*cPP)++;
2604
2605       /* Get the rN register.  */
2606       if (! get_gen_reg (cPP, src_regnop))
2607         /* If there was no register, then this cannot match.  */
2608         return 0;
2609       else
2610         {
2611           /* We got the register, now check the next character.  */
2612           switch (**cPP)
2613             {
2614             case ']':
2615               /* Indirect mode.  We're done here.  */
2616               prefixp->kind = PREFIX_NONE;
2617               *is_autoincp = 0;
2618               break;
2619
2620             case '+':
2621               /* This must be an auto-increment mode, if there's a
2622                  match.  */
2623               prefixp->kind = PREFIX_NONE;
2624               *is_autoincp = 1;
2625
2626               /* We consume this character and break out to check the
2627                  closing ']'.  */
2628               (*cPP)++;
2629               break;
2630
2631             case '=':
2632               /* This must be indexed with assign, or offset with assign
2633                  to match.  Not supported for crisv32 or in
2634                  compatibility mode.  */
2635               if (cris_arch == arch_crisv32
2636                   || cris_arch == arch_cris_common_v10_v32)
2637                 return 0;
2638
2639               (*cPP)++;
2640
2641               /* Either way, the next thing must be a register.  */
2642               if (! get_gen_reg (cPP, &prefixp->base_reg_number))
2643                 /* No register, no match.  */
2644                 return 0;
2645               else
2646                 {
2647                   /* We've consumed "[rN=rM", so we must be looking at
2648                      "+rO.s]" or "+I]", or "-I]", or "+[rO].s]" or
2649                      "+[rO+].s]".  */
2650                   if (**cPP == '+')
2651                     {
2652                       int index_reg_number;
2653                       (*cPP)++;
2654
2655                       if (**cPP == '[')
2656                         {
2657                           int size_bits;
2658                           /* This must be [rx=ry+[rz].s] or
2659                              [rx=ry+[rz+].s] or no match.  We must be
2660                              looking at rz after consuming the '['.  */
2661                           (*cPP)++;
2662
2663                           if (!get_gen_reg (cPP, &index_reg_number))
2664                             return 0;
2665
2666                           prefixp->kind = PREFIX_BDAP;
2667                           prefixp->opcode
2668                             = (BDAP_INDIR_OPCODE
2669                                + (prefixp->base_reg_number << 12)
2670                                + index_reg_number);
2671
2672                           if (**cPP == '+')
2673                             {
2674                               /* We've seen "[rx=ry+[rz+" here, so now we
2675                                  know that there must be "].s]" left to
2676                                  check.  */
2677                               (*cPP)++;
2678                               prefixp->opcode |= AUTOINCR_BIT << 8;
2679                             }
2680
2681                           /* If it wasn't autoincrement, we don't need to
2682                              add anything.  */
2683
2684                           /* Check the next-to-last ']'.  */
2685                           if (**cPP != ']')
2686                             return 0;
2687
2688                           (*cPP)++;
2689
2690                           /* Check the ".s" modifier.  */
2691                           if (! get_bwd_size_modifier (cPP, &size_bits))
2692                             return 0;
2693
2694                           prefixp->opcode |= size_bits << 4;
2695
2696                           /* Now we got [rx=ry+[rz+].s or [rx=ry+[rz].s.
2697                              We break out to check the final ']'.  */
2698                           break;
2699                         }
2700                       /* It wasn't an indirection.  Check if it's a
2701                          register.  */
2702                       else if (get_gen_reg (cPP, &index_reg_number))
2703                         {
2704                           int size_bits;
2705
2706                           /* Indexed with assign mode: "[rN+rM.S]".  */
2707                           prefixp->kind = PREFIX_BIAP;
2708                           prefixp->opcode
2709                             = (BIAP_OPCODE + (index_reg_number << 12)
2710                                + prefixp->base_reg_number /* << 0 */);
2711
2712                           if (! get_bwd_size_modifier (cPP, &size_bits))
2713                             /* Size missing, this isn't a match.  */
2714                             return 0;
2715                           else
2716                             {
2717                               /* Size found, break out to check the
2718                                  final ']'.  */
2719                               prefixp->opcode |= size_bits << 4;
2720                               break;
2721                             }
2722                         }
2723                       /* Not a register.  Then this must be "[rN+I]".  */
2724                       else if (cris_get_expression (cPP, &prefixp->expr))
2725                         {
2726                           /* We've got offset with assign mode.  Fill
2727                              in the blanks and break out to match the
2728                              final ']'.  */
2729                           prefixp->kind = PREFIX_BDAP_IMM;
2730
2731                           /* We tentatively put an opcode corresponding to
2732                              a 32-bit operand here, although it may be
2733                              relaxed when there's no relocation
2734                              specifier for the operand.  */
2735                           prefixp->opcode
2736                             = (BDAP_INDIR_OPCODE
2737                                | (prefixp->base_reg_number << 12)
2738                                | (AUTOINCR_BIT << 8)
2739                                | (2 << 4)
2740                                | REG_PC /* << 0 */);
2741
2742                           /* This can have a PIC suffix, specifying reloc
2743                              type to use.  */
2744                           if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR)
2745                             {
2746                               unsigned int relocsize;
2747
2748                               cris_get_reloc_suffix (cPP, &prefixp->reloc,
2749                                                      &prefixp->expr);
2750
2751                               /* Tweak the size of the immediate operand
2752                                  in the prefix opcode if it isn't what we
2753                                  set.  */
2754                               relocsize
2755                                 = cris_get_specified_reloc_size (prefixp->reloc);
2756                               if (relocsize != 4)
2757                                 prefixp->opcode
2758                                   = ((prefixp->opcode & ~(3 << 4))
2759                                      | ((relocsize >> 1) << 4));
2760                             }
2761                           break;
2762                         }
2763                       else
2764                         /* Neither register nor expression found, so
2765                            this can't be a match.  */
2766                         return 0;
2767                     }
2768                   /* Not "[rN+" but perhaps "[rN-"?  */
2769                   else if (**cPP == '-')
2770                     {
2771                       /* We must have an offset with assign mode.  */
2772                       if (! cris_get_expression (cPP, &prefixp->expr))
2773                         /* No expression, no match.  */
2774                         return 0;
2775                       else
2776                         {
2777                           /* We've got offset with assign mode.  Fill
2778                              in the blanks and break out to match the
2779                              final ']'.
2780
2781                              Note that we don't allow a relocation
2782                              suffix for an operand with a minus
2783                              sign.  */
2784                           prefixp->kind = PREFIX_BDAP_IMM;
2785                           break;
2786                         }
2787                     }
2788                   else
2789                     /* Neither '+' nor '-' after "[rN=rM".  Lose.  */
2790                     return 0;
2791                 }
2792             default:
2793               /* Neither ']' nor '+' nor '=' after "[rN".  Lose.  */
2794               return 0;
2795             }
2796         }
2797
2798       /* When we get here, we have a match and will just check the closing
2799          ']'.  We can still fail though.  */
2800       if (**cPP != ']')
2801         return 0;
2802       else
2803         {
2804           /* Don't forget to consume the final ']'.
2805              Then return in glory.  */
2806           (*cPP)++;
2807           return 1;
2808         }
2809     }
2810   /* No indirection.  Perhaps a constant?  */
2811   else if (cris_get_expression (cPP, imm_exprP))
2812     {
2813       /* Expression found, this is immediate mode.  */
2814       prefixp->kind = PREFIX_NONE;
2815       *is_autoincp = 1;
2816       *src_regnop = REG_PC;
2817       *imm_foundp = 1;
2818
2819       /* This can have a PIC suffix, specifying reloc type to use.  The
2820          caller must check that the reloc size matches the operand size.  */
2821       if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR)
2822         cris_get_reloc_suffix (cPP, &prefixp->reloc, imm_exprP);
2823
2824       return 1;
2825     }
2826
2827   /* No luck today.  */
2828   return 0;
2829 }
2830
2831 /* This function gets an indirect operand in a three-address operand
2832    combination from the string pointed out by *cPP.  The pointer *cPP is
2833    advanced to the character following the indirect operand on success, or
2834    has an unspecified value on failure.
2835
2836    cPP       Pointer to pointer to string beginning
2837              with the operand
2838
2839    prefixp   Pointer to structure containing an
2840              instruction prefix
2841
2842    Returns 1 iff a correct indirect operand is found.  */
2843
2844 static int
2845 get_3op_or_dip_prefix_op (char **cPP, struct cris_prefix *prefixp)
2846 {
2847   int reg_number;
2848
2849   if (**cPP != '[')
2850     /* We must have a '[' or it's a clean failure.  */
2851     return 0;
2852
2853   /* Eat the first '['.  */
2854   (*cPP)++;
2855
2856   if (**cPP == '[')
2857     {
2858       /* A second '[', so this must be double-indirect mode.  */
2859       (*cPP)++;
2860       prefixp->kind = PREFIX_DIP;
2861       prefixp->opcode = DIP_OPCODE;
2862
2863       /* Get the register or fail entirely.  */
2864       if (! get_gen_reg (cPP, &reg_number))
2865         return 0;
2866       else
2867         {
2868           prefixp->opcode |= reg_number /* << 0 */ ;
2869           if (**cPP == '+')
2870             {
2871               /* Since we found a '+', this must be double-indirect
2872                  autoincrement mode.  */
2873               (*cPP)++;
2874               prefixp->opcode |= AUTOINCR_BIT << 8;
2875             }
2876
2877           /* There's nothing particular to do, if this was a
2878              double-indirect *without* autoincrement.  */
2879         }
2880
2881       /* Check the first ']'.  The second one is checked at the end.  */
2882       if (**cPP != ']')
2883         return 0;
2884
2885       /* Eat the first ']', so we'll be looking at a second ']'.  */
2886       (*cPP)++;
2887     }
2888   /* No second '['.  Then we should have a register here, making
2889      it "[rN".  */
2890   else if (get_gen_reg (cPP, &prefixp->base_reg_number))
2891     {
2892       /* This must be indexed or offset mode: "[rN+I]" or
2893          "[rN+rM.S]" or "[rN+[rM].S]" or "[rN+[rM+].S]".  */
2894       if (**cPP == '+')
2895         {
2896           int index_reg_number;
2897
2898           (*cPP)++;
2899
2900           if (**cPP == '[')
2901             {
2902               /* This is "[rx+["...  Expect a register next.  */
2903               int size_bits;
2904               (*cPP)++;
2905
2906               if (!get_gen_reg (cPP, &index_reg_number))
2907                 return 0;
2908
2909               prefixp->kind = PREFIX_BDAP;
2910               prefixp->opcode
2911                 = (BDAP_INDIR_OPCODE
2912                    + (prefixp->base_reg_number << 12)
2913                    + index_reg_number);
2914
2915               /* We've seen "[rx+[ry", so check if this is
2916                  autoincrement.  */
2917               if (**cPP == '+')
2918                 {
2919                   /* Yep, now at "[rx+[ry+".  */
2920                   (*cPP)++;
2921                   prefixp->opcode |= AUTOINCR_BIT << 8;
2922                 }
2923               /* If it wasn't autoincrement, we don't need to
2924                  add anything.  */
2925
2926               /* Check a first closing ']': "[rx+[ry]" or
2927                  "[rx+[ry+]".  */
2928               if (**cPP != ']')
2929                 return 0;
2930               (*cPP)++;
2931
2932               /* Now expect a size modifier ".S".  */
2933               if (! get_bwd_size_modifier (cPP, &size_bits))
2934                 return 0;
2935
2936               prefixp->opcode |= size_bits << 4;
2937
2938               /* Ok, all interesting stuff has been seen:
2939                  "[rx+[ry+].S" or "[rx+[ry].S".  We only need to
2940                  expect a final ']', which we'll do in a common
2941                  closing session.  */
2942             }
2943           /* Seen "[rN+", but not a '[', so check if we have a
2944              register.  */
2945           else if (get_gen_reg (cPP, &index_reg_number))
2946             {
2947               /* This is indexed mode: "[rN+rM.S]" or
2948                  "[rN+rM.S+]".  */
2949               int size_bits;
2950               prefixp->kind = PREFIX_BIAP;
2951               prefixp->opcode
2952                 = (BIAP_OPCODE
2953                    | prefixp->base_reg_number /* << 0 */
2954                    | (index_reg_number << 12));
2955
2956               /* Consume the ".S".  */
2957               if (! get_bwd_size_modifier (cPP, &size_bits))
2958                 /* Missing size, so fail.  */
2959                 return 0;
2960               else
2961                 /* Size found.  Add that piece and drop down to
2962                    the common checking of the closing ']'.  */
2963                 prefixp->opcode |= size_bits << 4;
2964             }
2965           /* Seen "[rN+", but not a '[' or a register, so then
2966              it must be a constant "I".
2967
2968              As a quality of implementation improvement, we check for a
2969              closing ']', like in an erroneous "[rN+]".  If we don't,
2970              the expression parser will emit a confusing "bad
2971              expression" when it sees the ']', probably because it
2972              doesn't like seeing no expression.  */
2973           else if (**cPP != ']' && cris_get_expression (cPP, &prefixp->expr))
2974             {
2975               /* Expression found, so fill in the bits of offset
2976                  mode and drop down to check the closing ']'.  */
2977               prefixp->kind = PREFIX_BDAP_IMM;
2978
2979               /* We tentatively put an opcode corresponding to a 32-bit
2980                  operand here, although it may be relaxed when there's no
2981                  PIC specifier for the operand.  */
2982               prefixp->opcode
2983                 = (BDAP_INDIR_OPCODE
2984                    | (prefixp->base_reg_number << 12)
2985                    | (AUTOINCR_BIT << 8)
2986                    | (2 << 4)
2987                    | REG_PC /* << 0 */);
2988
2989               /* This can have a PIC suffix, specifying reloc type to use.  */
2990               if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR)
2991                 {
2992                   unsigned int relocsize;
2993
2994                   cris_get_reloc_suffix (cPP, &prefixp->reloc, &prefixp->expr);
2995
2996                   /* Tweak the size of the immediate operand in the prefix
2997                      opcode if it isn't what we set.  */
2998                   relocsize = cris_get_specified_reloc_size (prefixp->reloc);
2999                   if (relocsize != 4)
3000                     prefixp->opcode
3001                       = ((prefixp->opcode & ~(3 << 4))
3002                          | ((relocsize >> 1) << 4));
3003                 }
3004             }
3005           else
3006             /* Nothing valid here: lose.  */
3007             return 0;
3008         }
3009       /* Seen "[rN" but no '+', so check if it's a '-'.  */
3010       else if (**cPP == '-')
3011         {
3012           /* Yep, we must have offset mode.  */
3013           if (! cris_get_expression (cPP, &prefixp->expr))
3014             /* No expression, so we lose.  */
3015             return 0;
3016           else
3017             {
3018               /* Expression found to make this offset mode, so
3019                  fill those bits and drop down to check the
3020                  closing ']'.
3021
3022                  Note that we don't allow a PIC suffix for
3023                  an operand with a minus sign like this.  */
3024               prefixp->kind = PREFIX_BDAP_IMM;
3025             }
3026         }
3027       else
3028         {
3029           /* We've seen "[rN", but not '+' or '-'; rather a ']'.
3030              Hmm.  Normally this is a simple indirect mode that we
3031              shouldn't match, but if we expect ']', then we have a
3032              zero offset, so it can be a three-address-operand,
3033              like "[rN],rO,rP", thus offset mode.
3034
3035              Don't eat the ']', that will be done in the closing
3036              ceremony.  */
3037           prefixp->expr.X_op = O_constant;
3038           prefixp->expr.X_add_number = 0;
3039           prefixp->expr.X_add_symbol = NULL;
3040           prefixp->expr.X_op_symbol = NULL;
3041           prefixp->kind = PREFIX_BDAP_IMM;
3042         }
3043     }
3044   /* A '[', but no second '[', and no register.  Check if we
3045      have an expression, making this "[I]" for a double-indirect
3046      prefix.  */
3047   else if (cris_get_expression (cPP, &prefixp->expr))
3048     {
3049       /* Expression found, the so called absolute mode for a
3050          double-indirect prefix on PC.  */
3051       prefixp->kind = PREFIX_DIP;
3052       prefixp->opcode = DIP_OPCODE | (AUTOINCR_BIT << 8) | REG_PC;
3053       prefixp->reloc = BFD_RELOC_32;
3054
3055       /* For :GD and :IE, it makes sense to have TLS specifiers here.  */
3056       if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR)
3057         cris_get_reloc_suffix (cPP, &prefixp->reloc, &prefixp->expr);
3058     }
3059   else
3060     /* Neither '[' nor register nor expression.  We lose.  */
3061     return 0;
3062
3063   /* We get here as a closing ceremony to a successful match.  We just
3064      need to check the closing ']'.  */
3065   if (**cPP != ']')
3066     /* Oops.  Close but no air-polluter.  */
3067     return 0;
3068
3069   /* Don't forget to consume that ']', before returning in glory.  */
3070   (*cPP)++;
3071   return 1;
3072 }
3073
3074 /* Get an expression from the string pointed out by *cPP.
3075    The pointer *cPP is advanced to the character following the expression
3076    on a success, or retains its original value otherwise.
3077
3078    cPP     Pointer to pointer to string beginning with the expression.
3079
3080    exprP   Pointer to structure containing the expression.
3081
3082    Return 1 iff a correct expression is found.  */
3083
3084 static int
3085 cris_get_expression (char **cPP, expressionS *exprP)
3086 {
3087   char *saved_input_line_pointer;
3088
3089   /* The "expression" function expects to find an expression at the
3090      global variable input_line_pointer, so we have to save it to give
3091      the impression that we don't fiddle with global variables.  */
3092   saved_input_line_pointer = input_line_pointer;
3093   input_line_pointer = *cPP;
3094
3095   /* Avoid a common error, confusing addressing modes.  Beware that the
3096      call to expression below does not signal that error; it treats []
3097      as parentheses, unless #define NEED_INDEX_OPERATOR in which case it
3098      gives them other confusing semantics rather than plain outlawing
3099      them, which is what we want.  */
3100   if (*input_line_pointer == '[')
3101     {
3102       input_line_pointer = saved_input_line_pointer;
3103       return 0;
3104     }
3105
3106   expression (exprP);
3107   if (exprP->X_op == O_illegal || exprP->X_op == O_absent)
3108     {
3109       input_line_pointer = saved_input_line_pointer;
3110       return 0;
3111     }
3112
3113   /* Everything seems to be fine, just restore the global
3114      input_line_pointer and say we're successful.  */
3115   *cPP = input_line_pointer;
3116   input_line_pointer = saved_input_line_pointer;
3117   return 1;
3118 }
3119
3120 /* Get a sequence of flag characters from *spp.  The pointer *cPP is
3121    advanced to the character following the expression.  The flag
3122    characters are consecutive, no commas or spaces.
3123
3124    cPP       Pointer to pointer to string beginning with the expression.
3125
3126    flagp     Pointer to int to return the flags expression.
3127
3128    Return 1 iff a correct flags expression is found.  */
3129
3130 static int
3131 get_flags (char **cPP, int *flagsp)
3132 {
3133   for (;;)
3134     {
3135       switch (**cPP)
3136         {
3137         case 'd':
3138         case 'D':
3139           if (! cris_insn_ver_valid_for_arch (cris_ver_v0_3,
3140                                               cris_arch))
3141             return 0;
3142           *flagsp |= 0x80;
3143           break;
3144
3145         case 'm':
3146         case 'M':
3147           if (! cris_insn_ver_valid_for_arch (cris_ver_v8_10,
3148                                               cris_arch))
3149             return 0;
3150           *flagsp |= 0x80;
3151           break;
3152
3153         case 'e':
3154         case 'E':
3155           if (! cris_insn_ver_valid_for_arch (cris_ver_v0_3,
3156                                               cris_arch))
3157             return 0;
3158           *flagsp |= 0x40;
3159           break;
3160
3161         case 'b':
3162         case 'B':
3163           if (! cris_insn_ver_valid_for_arch (cris_ver_v8_10,
3164                                               cris_arch))
3165             return 0;
3166           *flagsp |= 0x40;
3167           break;
3168
3169         case 'p':
3170         case 'P':
3171           if (! cris_insn_ver_valid_for_arch (cris_ver_v32p,
3172                                               cris_arch))
3173             return 0;
3174           *flagsp |= 0x80;
3175           break;
3176
3177         case 'u':
3178         case 'U':
3179           if (! cris_insn_ver_valid_for_arch (cris_ver_v32p,
3180                                               cris_arch))
3181             return 0;
3182           *flagsp |= 0x40;
3183           break;
3184
3185         case 'i':
3186         case 'I':
3187           *flagsp |= 0x20;
3188           break;
3189
3190         case 'x':
3191         case 'X':
3192           *flagsp |= 0x10;
3193           break;
3194
3195         case 'n':
3196         case 'N':
3197           *flagsp |= 0x8;
3198           break;
3199
3200         case 'z':
3201         case 'Z':
3202           *flagsp |= 0x4;
3203           break;
3204
3205         case 'v':
3206         case 'V':
3207           *flagsp |= 0x2;
3208           break;
3209
3210         case 'c':
3211         case 'C':
3212           *flagsp |= 1;
3213           break;
3214
3215         default:
3216           /* We consider this successful if we stop at a comma or
3217              whitespace.  Anything else, and we consider it a failure.  */
3218           if (**cPP != ','
3219               && **cPP != 0
3220               && ! ISSPACE (**cPP))
3221             return 0;
3222           else
3223             return 1;
3224         }
3225
3226       /* Don't forget to consume each flag character.  */
3227       (*cPP)++;
3228     }
3229 }
3230
3231 /* Generate code and fixes for a BDAP prefix.
3232    For v32, this handles ADDOQ because thankfully the opcodes are the
3233    same.
3234
3235    base_regno   Int containing the base register number.
3236
3237    exprP        Pointer to structure containing the offset expression.  */
3238
3239 static void
3240 gen_bdap (int base_regno, expressionS *exprP)
3241 {
3242   unsigned int opcode;
3243   char *opcodep;
3244
3245   /* Put out the prefix opcode; assume quick immediate mode at first.  */
3246   opcode = BDAP_QUICK_OPCODE | (base_regno << 12);
3247   opcodep = cris_insn_first_word_frag ();
3248   md_number_to_chars (opcodep, opcode, 2);
3249
3250   if (exprP->X_op == O_constant)
3251     {
3252       /* We have an absolute expression that we know the size of right
3253          now.  */
3254       long int value;
3255       int size;
3256
3257       value = exprP->X_add_number;
3258       if (value < -32768 || value > 32767)
3259         /* Outside range for a "word", make it a dword.  */
3260         size = 2;
3261       else
3262         /* Assume "word" size.  */
3263         size = 1;
3264
3265       /* If this is a signed-byte value, we can fit it into the prefix
3266          insn itself.  */
3267       if (value >= -128 && value <= 127)
3268         opcodep[0] = value;
3269       else
3270         {
3271           /* This is a word or dword displacement, which will be put in a
3272              word or dword after the prefix.  */
3273           char *p;
3274
3275           opcodep[0] = BDAP_PC_LOW + (size << 4);
3276           opcodep[1] &= 0xF0;
3277           opcodep[1] |= BDAP_INCR_HIGH;
3278           p = frag_more (1 << size);
3279           md_number_to_chars (p, value, 1 << size);
3280         }
3281     }
3282   else
3283     {
3284       /* Handle complex expressions.  */
3285       valueT addvalue
3286         = SIMPLE_EXPR (exprP) ? exprP->X_add_number : 0;
3287       symbolS *sym
3288         = (SIMPLE_EXPR (exprP)
3289            ? exprP->X_add_symbol : make_expr_symbol (exprP));
3290
3291       /* The expression is not defined yet but may become absolute.  We
3292          make it a relocation to be relaxed.  */
3293       frag_var (rs_machine_dependent, 4, 0,
3294                 ENCODE_RELAX (STATE_BASE_PLUS_DISP_PREFIX, STATE_UNDF),
3295                 sym, addvalue, opcodep);
3296     }
3297 }
3298
3299 /* Encode a branch displacement in the range -256..254 into the form used
3300    by CRIS conditional branch instructions.
3301
3302    offset  The displacement value in bytes.  */
3303
3304 static int
3305 branch_disp (int offset)
3306 {
3307   int disp;
3308
3309   /* Adjust all short branch offsets here.  */
3310   if (cris_arch == arch_crisv32 || cris_arch == arch_cris_common_v10_v32)
3311     offset += 2;
3312
3313   disp = offset & 0xFE;
3314
3315   if (offset < 0)
3316     disp |= 1;
3317
3318   return disp;
3319 }
3320
3321 /* Generate code and fixes for a 32-bit conditional branch instruction
3322    created by "extending" an existing 8-bit branch instruction.
3323
3324    opcodep    Pointer to the word containing the original 8-bit branch
3325               instruction.
3326
3327    writep     Pointer to "extension area" following the first instruction
3328               word.
3329
3330    fragP      Pointer to the frag containing the instruction.
3331
3332    add_symP,  Parts of the destination address expression.
3333    sub_symP,
3334    add_num.  */
3335
3336 static void
3337 gen_cond_branch_32 (char *opcodep, char *writep, fragS *fragP,
3338                     symbolS *add_symP, symbolS *sub_symP, long int add_num)
3339 {
3340   int nop_opcode;
3341   int opc_offset;
3342   int branch_offset;
3343
3344   if (cris_arch == arch_crisv32)
3345     {
3346       nop_opcode = NOP_OPCODE_V32;
3347       opc_offset = 10;
3348       branch_offset = -2 - 8;
3349     }
3350   else if (pic)
3351     {
3352       nop_opcode = NOP_OPCODE;
3353       opc_offset = 10;
3354       branch_offset = -2 - 8;
3355     }
3356   else
3357     {
3358       nop_opcode = NOP_OPCODE;
3359       opc_offset = 8;
3360       branch_offset = -2 - 6;
3361     }
3362
3363   /* We should never get here for compatibility mode.  */
3364   if (cris_arch == arch_cris_common_v10_v32)
3365     as_fatal (_("Calling gen_cond_branch_32 for .arch common_v10_v32\n"));
3366
3367   if (warn_for_branch_expansion)
3368     as_warn_where (fragP->fr_file, fragP->fr_line,
3369                    _("32-bit conditional branch generated"));
3370
3371   /* Here, writep points to what will be opcodep + 2.  First, we change
3372      the actual branch in opcodep[0] and opcodep[1], so that in the
3373      final insn, it will look like:
3374        opcodep+10: Bcc .-6
3375
3376      This means we don't have to worry about changing the opcode or
3377      messing with the delay-slot instruction.  So, we move it to last in
3378      the "extended" branch, and just change the displacement.  Admittedly,
3379      it's not the optimal extended construct, but we should get this
3380      rarely enough that it shouldn't matter.  */
3381
3382   writep[opc_offset] = branch_disp (branch_offset);
3383   writep[opc_offset + 1] = opcodep[1];
3384
3385   /* Then, we change the branch to an unconditional branch over the
3386      extended part, to the new location of the Bcc:
3387        opcodep:   BA .+10
3388        opcodep+2: NOP
3389
3390      Note that these two writes are to currently different locations,
3391      merged later.  */
3392
3393   md_number_to_chars (opcodep, BA_QUICK_OPCODE
3394                       + (cris_arch == arch_crisv32 ? 12 : (pic ? 10 : 8)),
3395                       2);
3396   md_number_to_chars (writep, nop_opcode, 2);
3397
3398   /* Then the extended thing, the 32-bit jump insn.
3399        opcodep+4: JUMP [PC+]
3400      or, in the PIC case,
3401        opcodep+4: MOVE [PC=PC+N],P0.  */
3402
3403   md_number_to_chars (writep + 2,
3404                       cris_arch == arch_crisv32
3405                       ? BA_DWORD_OPCODE
3406                       : (pic ? MOVE_PC_INCR_OPCODE_PREFIX
3407                          : JUMP_PC_INCR_OPCODE), 2);
3408
3409   /* We have to fill in the actual value too.
3410        opcodep+6: .DWORD
3411      This is most probably an expression, but we can cope with an absolute
3412      value too.  FIXME: Testcase needed with and without pic.  */
3413
3414   if (add_symP == NULL && sub_symP == NULL)
3415     {
3416       /* An absolute address.  */
3417       if (pic || cris_arch == arch_crisv32)
3418         fix_new (fragP, writep + 4 - fragP->fr_literal, 4,
3419                  section_symbol (absolute_section),
3420                  add_num
3421                  + (cris_arch == arch_crisv32 ? 6 : 0),
3422                  1, BFD_RELOC_32_PCREL);
3423       else
3424         md_number_to_chars (writep + 4, add_num, 4);
3425     }
3426   else
3427     {
3428       if (sub_symP != NULL)
3429         as_bad_where (fragP->fr_file, fragP->fr_line,
3430                       _("Complex expression not supported"));
3431
3432       /* Not absolute, we have to make it a frag for later evaluation.  */
3433       fix_new (fragP, writep + 4 - fragP->fr_literal, 4, add_symP,
3434                add_num + (cris_arch == arch_crisv32 ? 6 : 0),
3435                pic || cris_arch == arch_crisv32 ? 1 : 0,
3436                pic || cris_arch == arch_crisv32
3437                ? BFD_RELOC_32_PCREL : BFD_RELOC_32);
3438     }
3439
3440   if (cris_arch == arch_crisv32)
3441     /* Follow it with a "NOP" for CRISv32.  */
3442     md_number_to_chars (writep + 8, NOP_OPCODE_V32, 2);
3443   else if (pic)
3444     /* ...and the rest of the move-opcode for pre-v32 PIC.  */
3445     md_number_to_chars (writep + 8, MOVE_PC_INCR_OPCODE_SUFFIX, 2);
3446 }
3447
3448 /* Get the size of an immediate-reloc in bytes.  Only valid for
3449    specified relocs (TLS, PIC).  */
3450
3451 static unsigned int
3452 cris_get_specified_reloc_size (bfd_reloc_code_real_type reloc)
3453 {
3454   return
3455     reloc == BFD_RELOC_CRIS_16_GOTPLT
3456     || reloc == BFD_RELOC_CRIS_16_GOT
3457     || reloc == BFD_RELOC_CRIS_16_GOT_GD
3458     || reloc == BFD_RELOC_CRIS_16_DTPREL
3459     || reloc == BFD_RELOC_CRIS_16_GOT_TPREL
3460     || reloc == BFD_RELOC_CRIS_16_TPREL
3461     ? 2 : 4;
3462 }
3463
3464 /* Store a reloc type at *RELOCP corresponding to the PIC suffix at *CPP.
3465    Adjust *EXPRP with any addend found after the PIC suffix.  */
3466
3467 static void
3468 cris_get_reloc_suffix (char **cPP, bfd_reloc_code_real_type *relocp,
3469                        expressionS *exprP)
3470 {
3471   char *s = *cPP;
3472   unsigned int i;
3473   expressionS const_expr;
3474
3475   const struct pic_suffixes_struct
3476   {
3477     const char *const suffix;
3478     unsigned int len;
3479     bfd_reloc_code_real_type reloc;
3480     bfd_boolean pic_p;
3481     bfd_boolean tls_p;
3482   } pic_suffixes[] =
3483     {
3484 #undef PICMAP
3485 #define PICMAP(s, r) {s, sizeof (s) - 1, r, TRUE, FALSE}
3486 #define PICTLSMAP(s, r) {s, sizeof (s) - 1, r, TRUE, TRUE}
3487 #define TLSMAP(s, r) {s, sizeof (s) - 1, r, FALSE, TRUE}
3488       /* Keep this in order with longest unambiguous prefix first.  */
3489       PICMAP ("GOTPLT16", BFD_RELOC_CRIS_16_GOTPLT),
3490       PICMAP ("GOTPLT", BFD_RELOC_CRIS_32_GOTPLT),
3491       PICMAP ("PLTG", BFD_RELOC_CRIS_32_PLT_GOTREL),
3492       PICMAP ("PLT", BFD_RELOC_CRIS_32_PLT_PCREL),
3493       PICMAP ("GOTOFF", BFD_RELOC_CRIS_32_GOTREL),
3494       PICMAP ("GOT16", BFD_RELOC_CRIS_16_GOT),
3495       PICMAP ("GOT", BFD_RELOC_CRIS_32_GOT),
3496       PICTLSMAP ("GDGOTREL16", BFD_RELOC_CRIS_16_GOT_GD),
3497       PICTLSMAP ("GDGOTREL", BFD_RELOC_CRIS_32_GOT_GD),
3498       TLSMAP ("GD", BFD_RELOC_CRIS_32_GD),
3499       PICTLSMAP ("DTPREL16", BFD_RELOC_CRIS_16_DTPREL),
3500       PICTLSMAP ("DTPREL", BFD_RELOC_CRIS_32_DTPREL),
3501       TLSMAP ("IE", BFD_RELOC_CRIS_32_IE),
3502       PICTLSMAP ("TPOFFGOT16", BFD_RELOC_CRIS_16_GOT_TPREL),
3503       PICTLSMAP ("TPOFFGOT", BFD_RELOC_CRIS_32_GOT_TPREL),
3504       TLSMAP ("TPOFF16", BFD_RELOC_CRIS_16_TPREL),
3505       TLSMAP ("TPOFF", BFD_RELOC_CRIS_32_TPREL)
3506     };
3507
3508   /* We've already seen the ':', so consume it.  */
3509   s++;
3510
3511   for (i = 0; i < sizeof (pic_suffixes)/sizeof (pic_suffixes[0]); i++)
3512     {
3513       if (strncmp (s, pic_suffixes[i].suffix, pic_suffixes[i].len) == 0
3514           && ! is_part_of_name (s[pic_suffixes[i].len])
3515           /* PIC and non-PIC relocations are exclusive.  */
3516           && (pic != 0) == (pic_suffixes[i].pic_p != 0)
3517           /* But TLS can be active for non-TLS relocations too.  */
3518           && (pic_suffixes[i].tls_p == 0 || tls))
3519         {
3520           /* We have a match.  Consume the suffix and set the relocation
3521              type.   */
3522           s += pic_suffixes[i].len;
3523
3524           /* There can be a constant term appended.  If so, we will add it
3525              to *EXPRP.  */
3526           if (*s == '+' || *s == '-')
3527             {
3528               if (! cris_get_expression (&s, &const_expr))
3529                 /* There was some kind of syntax error.  Bail out.  */
3530                 break;
3531
3532               /* Allow complex expressions as the constant part.  It still
3533                  has to be an assembly-time constant or there will be an
3534                  error emitting the reloc.  This makes the PIC qualifiers
3535                  idempotent; foo:GOTOFF+32 == foo+32:GOTOFF.  The former we
3536                  recognize here; the latter is parsed in the incoming
3537                  expression.  */
3538               exprP->X_add_symbol = make_expr_symbol (exprP);
3539               exprP->X_op = O_add;
3540               exprP->X_add_number = 0;
3541               exprP->X_op_symbol = make_expr_symbol (&const_expr);
3542             }
3543
3544           *relocp = pic_suffixes[i].reloc;
3545           *cPP = s;
3546           return;
3547         }
3548     }
3549
3550   /* No match.  Don't consume anything; fall back and there will be a
3551      syntax error.  */
3552 }
3553
3554 /* This *could* have been:
3555
3556    Turn a string in input_line_pointer into a floating point constant
3557    of type TYPE, and store the appropriate bytes in *LITP.  The number
3558    of LITTLENUMS emitted is stored in *SIZEP.
3559
3560    type   A character from FLTCHARS that describes what kind of
3561           floating-point number is wanted.
3562
3563    litp   A pointer to an array that the result should be stored in.
3564
3565    sizep  A pointer to an integer where the size of the result is stored.
3566
3567    But we don't support floating point constants in assembly code *at all*,
3568    since it's suboptimal and just opens up bug opportunities.  GCC emits
3569    the bit patterns as hex.  All we could do here is to emit what GCC
3570    would have done in the first place.  *Nobody* writes floating-point
3571    code as assembly code, but if they do, they should be able enough to
3572    find out the correct bit patterns and use them.  */
3573
3574 char *
3575 md_atof (int type ATTRIBUTE_UNUSED, char *litp ATTRIBUTE_UNUSED,
3576          int *sizep ATTRIBUTE_UNUSED)
3577 {
3578   /* FIXME:  Is this function mentioned in the internals.texi manual?  If
3579      not, add it.  */
3580   return  _("Bad call to md_atof () - floating point formats are not supported");
3581 }
3582
3583 /* Turn a number as a fixS * into a series of bytes that represents the
3584    number on the target machine.  The purpose of this procedure is the
3585    same as that of md_number_to_chars but this procedure is supposed to
3586    handle general bit field fixes and machine-dependent fixups.
3587
3588    bufp        Pointer to an array where the result should be stored.
3589
3590    val        The value to store.
3591
3592    n          The number of bytes in "val" that should be stored.
3593
3594    fixP       The fix to be applied to the bit field starting at bufp.
3595
3596    seg        The segment containing this number.  */
3597
3598 static void
3599 cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
3600 {
3601   segT sym_seg;
3602
3603   know (n <= 4);
3604   know (fixP);
3605
3606   /* We put the relative "vma" for the other segment for inter-segment
3607      relocations in the object data to stay binary "compatible" (with an
3608      uninteresting old version) for the relocation.
3609      Maybe delete some day.  */
3610   if (fixP->fx_addsy
3611       && (sym_seg = S_GET_SEGMENT (fixP->fx_addsy)) != seg)
3612     val += sym_seg->vma;
3613
3614   if (fixP->fx_addsy != NULL || fixP->fx_pcrel)
3615     switch (fixP->fx_r_type)
3616       {
3617         /* These must be fully resolved when getting here.  */
3618       case BFD_RELOC_16_PCREL:
3619       case BFD_RELOC_8_PCREL:
3620         as_bad_where (fixP->fx_file, fixP->fx_line,
3621                       _("PC-relative relocation must be trivially resolved"));
3622       default:
3623         ;
3624       }
3625
3626   /* Only use the computed value for old-arch binaries.  For all
3627      others, where we're going to output a relocation, put 0 in the
3628      code.  */
3629   if (cris_arch != arch_cris_any_v0_v10
3630       && (fixP->fx_addsy != NULL || fixP->fx_pcrel))
3631     val = 0;
3632
3633   switch (fixP->fx_r_type)
3634     {
3635       /* Ditto here, we put the addend into the object code as
3636          well as the reloc addend.  Keep it that way for now, to simplify
3637          regression tests on the object file contents.  FIXME:  Seems
3638          uninteresting now that we have a test suite.  */
3639
3640     case BFD_RELOC_CRIS_32_GOT_GD:
3641     case BFD_RELOC_CRIS_16_GOT_GD:
3642     case BFD_RELOC_CRIS_32_GD:
3643     case BFD_RELOC_CRIS_32_IE:
3644     case BFD_RELOC_CRIS_32_DTPREL:
3645     case BFD_RELOC_CRIS_16_DTPREL:
3646     case BFD_RELOC_CRIS_32_GOT_TPREL:
3647     case BFD_RELOC_CRIS_16_GOT_TPREL:
3648     case BFD_RELOC_CRIS_32_TPREL:
3649     case BFD_RELOC_CRIS_16_TPREL:
3650 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3651       if (IS_ELF && fixP->fx_addsy != NULL)
3652         S_SET_THREAD_LOCAL (fixP->fx_addsy);
3653 #endif
3654       /* Fall through.  */
3655
3656     case BFD_RELOC_CRIS_16_GOT:
3657     case BFD_RELOC_CRIS_32_GOT:
3658     case BFD_RELOC_CRIS_32_GOTREL:
3659     case BFD_RELOC_CRIS_16_GOTPLT:
3660     case BFD_RELOC_CRIS_32_GOTPLT:
3661     case BFD_RELOC_CRIS_32_PLT_GOTREL:
3662     case BFD_RELOC_CRIS_32_PLT_PCREL:
3663       /* We don't want to put in any kind of non-zero bits in the data
3664          being relocated for these.  */
3665       md_number_to_chars (bufp, 0, n);
3666       break;
3667
3668     case BFD_RELOC_32_PCREL:
3669       /* If this one isn't fully resolved, we don't want to put non-zero
3670          in the object.  */
3671       if (fixP->fx_addsy != NULL || fixP->fx_pcrel)
3672         val = 0;
3673
3674       /* Fall through.  */
3675     case BFD_RELOC_32:
3676       /* No use having warnings here, since most hosts have a 32-bit type
3677          for "long" (which will probably change soon, now that I wrote
3678          this).  */
3679       bufp[3] = (val >> 24) & 0xFF;
3680       bufp[2] = (val >> 16) & 0xFF;
3681       bufp[1] = (val >> 8) & 0xFF;
3682       bufp[0] = val & 0xFF;
3683       break;
3684
3685       /* FIXME: The 16 and 8-bit cases should have a way to check
3686          whether a signed or unsigned (or any signedness) number is
3687          accepted.  */
3688
3689     case BFD_RELOC_16:
3690     case BFD_RELOC_16_PCREL:
3691       if (val > 0xffff || val < -32768)
3692         as_bad_where (fixP->fx_file, fixP->fx_line,
3693                       _("Value not in 16 bit range: %ld"), val);
3694       bufp[1] = (val >> 8) & 0xFF;
3695       bufp[0] = val & 0xFF;
3696       break;
3697
3698     case BFD_RELOC_CRIS_SIGNED_16:
3699       if (val > 32767 || val < -32768)
3700         as_bad_where (fixP->fx_file, fixP->fx_line,
3701                       _("Value not in 16 bit signed range: %ld"), val);
3702       bufp[1] = (val >> 8) & 0xFF;
3703       bufp[0] = val & 0xFF;
3704       break;
3705
3706     case BFD_RELOC_8:
3707     case BFD_RELOC_8_PCREL:
3708       if (val > 255 || val < -128)
3709         as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 8 bit range: %ld"), val);
3710       bufp[0] = val & 0xFF;
3711       break;
3712
3713     case BFD_RELOC_CRIS_SIGNED_8:
3714       if (val > 127 || val < -128)
3715         as_bad_where (fixP->fx_file, fixP->fx_line,
3716                       _("Value not in 8 bit signed range: %ld"), val);
3717       bufp[0] = val & 0xFF;
3718       break;
3719
3720     case BFD_RELOC_CRIS_LAPCQ_OFFSET:
3721       /* FIXME: Test-cases for out-of-range values.  Probably also need
3722          to use as_bad_where.  */
3723     case BFD_RELOC_CRIS_UNSIGNED_4:
3724       if (val > 15 || val < 0)
3725         as_bad_where (fixP->fx_file, fixP->fx_line,
3726                       _("Value not in 4 bit unsigned range: %ld"), val);
3727       bufp[0] |= val & 0x0F;
3728       break;
3729
3730     case BFD_RELOC_CRIS_UNSIGNED_5:
3731       if (val > 31 || val < 0)
3732         as_bad_where (fixP->fx_file, fixP->fx_line,
3733                       _("Value not in 5 bit unsigned range: %ld"), val);
3734       bufp[0] |= val & 0x1F;
3735       break;
3736
3737     case BFD_RELOC_CRIS_SIGNED_6:
3738       if (val > 31 || val < -32)
3739         as_bad_where (fixP->fx_file, fixP->fx_line,
3740                       _("Value not in 6 bit range: %ld"), val);
3741       bufp[0] |= val & 0x3F;
3742       break;
3743
3744     case BFD_RELOC_CRIS_UNSIGNED_6:
3745       if (val > 63 || val < 0)
3746         as_bad_where (fixP->fx_file, fixP->fx_line,
3747                       _("Value not in 6 bit unsigned range: %ld"), val);
3748       bufp[0] |= val & 0x3F;
3749       break;
3750
3751     case BFD_RELOC_CRIS_BDISP8:
3752       bufp[0] = branch_disp (val);
3753       break;
3754
3755     case BFD_RELOC_NONE:
3756       /* May actually happen automatically.  For example at broken
3757          words, if the word turns out not to be broken.
3758          FIXME: When?  Which testcase?  */
3759       if (! fixP->fx_addsy)
3760         md_number_to_chars (bufp, val, n);
3761       break;
3762
3763     case BFD_RELOC_VTABLE_INHERIT:
3764       /* This borrowed from tc-ppc.c on a whim.  */
3765       if (fixP->fx_addsy
3766           && !S_IS_DEFINED (fixP->fx_addsy)
3767           && !S_IS_WEAK (fixP->fx_addsy))
3768         S_SET_WEAK (fixP->fx_addsy);
3769       /* Fall through.  */
3770
3771     case BFD_RELOC_VTABLE_ENTRY:
3772       fixP->fx_done = 0;
3773       break;
3774
3775     default:
3776       BAD_CASE (fixP->fx_r_type);
3777     }
3778 }
3779
3780 /* Processes machine-dependent command line options.  Called once for
3781    each option on the command line that the machine-independent part of
3782    GAS does not understand.  */
3783
3784 int
3785 md_parse_option (int arg, char *argp ATTRIBUTE_UNUSED)
3786 {
3787   switch (arg)
3788     {
3789     case 'H':
3790     case 'h':
3791       printf (_("Please use --help to see usage and options for this assembler.\n"));
3792       md_show_usage (stdout);
3793       exit (EXIT_SUCCESS);
3794
3795     case 'N':
3796       warn_for_branch_expansion = 1;
3797       break;
3798
3799     case OPTION_NO_US:
3800       demand_register_prefix = TRUE;
3801
3802       if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
3803         as_bad (_("--no-underscore is invalid with a.out format"));
3804       else
3805         symbols_have_leading_underscore = FALSE;
3806       break;
3807
3808     case OPTION_US:
3809       demand_register_prefix = FALSE;
3810       symbols_have_leading_underscore = TRUE;
3811       break;
3812
3813     case OPTION_PIC:
3814       pic = TRUE;
3815       if (cris_arch != arch_crisv32)
3816         md_long_jump_size = cris_any_v0_v10_long_jump_size_pic;
3817       else
3818         md_long_jump_size = crisv32_long_jump_size;
3819       break;
3820
3821     case OPTION_ARCH:
3822       {
3823         char *str = argp;
3824         enum cris_archs argarch = cris_arch_from_string (&str);
3825
3826         if (argarch == arch_cris_unknown)
3827             as_bad (_("invalid <arch> in --march=<arch>: %s"), argp);
3828         else
3829           cris_arch = argarch;
3830
3831         if (argarch == arch_crisv32)
3832           {
3833             err_for_dangerous_mul_placement = 0;
3834             md_long_jump_size = crisv32_long_jump_size;
3835           }
3836         else
3837           {
3838             if (pic)
3839               md_long_jump_size = cris_any_v0_v10_long_jump_size_pic;
3840             else
3841               md_long_jump_size = cris_any_v0_v10_long_jump_size;
3842           }
3843       }
3844       break;
3845
3846     case OPTION_MULBUG_ABORT_OFF:
3847       err_for_dangerous_mul_placement = 0;
3848       break;
3849
3850     case OPTION_MULBUG_ABORT_ON:
3851       err_for_dangerous_mul_placement = 1;
3852       break;
3853
3854     default:
3855       return 0;
3856     }
3857
3858   return 1;
3859 }
3860
3861 /* Round up a section size to the appropriate boundary.  */
3862 valueT
3863 md_section_align (segT segment, valueT size)
3864 {
3865   /* Round all sects to multiple of 4, except the bss section, which
3866      we'll round to word-size.
3867
3868      FIXME: Check if this really matters.  All sections should be
3869      rounded up, and all sections should (optionally) be assumed to be
3870      dword-aligned, it's just that there is actual usage of linking to a
3871      multiple of two.  */
3872   if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
3873     {
3874       if (segment == bss_section)
3875         return (size + 1) & ~1;
3876       return (size + 3) & ~3;
3877     }
3878   else
3879     {
3880       /* FIXME: Is this wanted?  It matches the testsuite, but that's not
3881          really a valid reason.  */
3882       if (segment == text_section)
3883         return (size + 3) & ~3;
3884     }
3885
3886   return size;
3887 }
3888
3889 /* Generate a machine-dependent relocation.  */
3890 arelent *
3891 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
3892 {
3893   arelent *relP;
3894   bfd_reloc_code_real_type code;
3895
3896   switch (fixP->fx_r_type)
3897     {
3898     case BFD_RELOC_CRIS_SIGNED_8:
3899       code = BFD_RELOC_8;
3900       break;
3901
3902     case BFD_RELOC_CRIS_SIGNED_16:
3903       code = BFD_RELOC_16;
3904       break;
3905
3906     case BFD_RELOC_CRIS_16_GOT:
3907     case BFD_RELOC_CRIS_32_GOT:
3908     case BFD_RELOC_CRIS_16_GOTPLT:
3909     case BFD_RELOC_CRIS_32_GOTPLT:
3910     case BFD_RELOC_CRIS_32_GOTREL:
3911     case BFD_RELOC_CRIS_32_PLT_GOTREL:
3912     case BFD_RELOC_CRIS_32_PLT_PCREL:
3913     case BFD_RELOC_32:
3914     case BFD_RELOC_32_PCREL:
3915     case BFD_RELOC_16:
3916     case BFD_RELOC_8:
3917     case BFD_RELOC_VTABLE_INHERIT:
3918     case BFD_RELOC_VTABLE_ENTRY:
3919     case BFD_RELOC_CRIS_UNSIGNED_8:
3920     case BFD_RELOC_CRIS_UNSIGNED_16:
3921     case BFD_RELOC_CRIS_LAPCQ_OFFSET:
3922     case BFD_RELOC_CRIS_32_GOT_GD:
3923     case BFD_RELOC_CRIS_16_GOT_GD:
3924     case BFD_RELOC_CRIS_32_GD:
3925     case BFD_RELOC_CRIS_32_IE:
3926     case BFD_RELOC_CRIS_32_DTPREL:
3927     case BFD_RELOC_CRIS_16_DTPREL:
3928     case BFD_RELOC_CRIS_32_GOT_TPREL:
3929     case BFD_RELOC_CRIS_16_GOT_TPREL:
3930     case BFD_RELOC_CRIS_32_TPREL:
3931     case BFD_RELOC_CRIS_16_TPREL:
3932       code = fixP->fx_r_type;
3933       break;
3934     default:
3935       as_bad_where (fixP->fx_file, fixP->fx_line,
3936                     _("Semantics error.  This type of operand can not be relocated, it must be an assembly-time constant"));
3937       return 0;
3938     }
3939
3940   relP = (arelent *) xmalloc (sizeof (arelent));
3941   gas_assert (relP != 0);
3942   relP->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
3943   *relP->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
3944   relP->address = fixP->fx_frag->fr_address + fixP->fx_where;
3945
3946   relP->addend = fixP->fx_offset;
3947
3948   /* This is the standard place for KLUDGEs to work around bugs in
3949      bfd_install_relocation (first such note in the documentation
3950      appears with binutils-2.8).
3951
3952      That function bfd_install_relocation does the wrong thing with
3953      putting stuff into the addend of a reloc (it should stay out) for a
3954      weak symbol.  The really bad thing is that it adds the
3955      "segment-relative offset" of the symbol into the reloc.  In this
3956      case, the reloc should instead be relative to the symbol with no
3957      other offset than the assembly code shows; and since the symbol is
3958      weak, any local definition should be ignored until link time (or
3959      thereafter).
3960      To wit:  weaksym+42  should be weaksym+42 in the reloc,
3961      not weaksym+(offset_from_segment_of_local_weaksym_definition)
3962
3963      To "work around" this, we subtract the segment-relative offset of
3964      "known" weak symbols.  This evens out the extra offset.
3965
3966      That happens for a.out but not for ELF, since for ELF,
3967      bfd_install_relocation uses the "special function" field of the
3968      howto, and does not execute the code that needs to be undone.  */
3969
3970   if (OUTPUT_FLAVOR == bfd_target_aout_flavour
3971       && fixP->fx_addsy && S_IS_WEAK (fixP->fx_addsy)
3972       && ! bfd_is_und_section (S_GET_SEGMENT (fixP->fx_addsy)))
3973     {
3974       relP->addend -= S_GET_VALUE (fixP->fx_addsy);
3975     }
3976
3977   relP->howto = bfd_reloc_type_lookup (stdoutput, code);
3978   if (! relP->howto)
3979     {
3980       const char *name;
3981
3982       name = S_GET_NAME (fixP->fx_addsy);
3983       if (name == NULL)
3984         name = _("<unknown>");
3985       as_fatal (_("Cannot generate relocation type for symbol %s, code %s"),
3986                 name, bfd_get_reloc_code_name (code));
3987     }
3988
3989   return relP;
3990 }
3991
3992 /* Machine-dependent usage-output.  */
3993
3994 void
3995 md_show_usage (FILE *stream)
3996 {
3997   /* The messages are formatted to line up with the generic options.  */
3998   fprintf (stream, _("CRIS-specific options:\n"));
3999   fprintf (stream, "%s",
4000            _("  -h, -H                  Don't execute, print this help text.  Deprecated.\n"));
4001   fprintf (stream, "%s",
4002            _("  -N                      Warn when branches are expanded to jumps.\n"));
4003   fprintf (stream, "%s",
4004            _("  --underscore            User symbols are normally prepended with underscore.\n"));
4005   fprintf (stream, "%s",
4006            _("                          Registers will not need any prefix.\n"));
4007   fprintf (stream, "%s",
4008            _("  --no-underscore         User symbols do not have any prefix.\n"));
4009   fprintf (stream, "%s",
4010            _("                          Registers will require a `$'-prefix.\n"));
4011   fprintf (stream, "%s",
4012            _("  --pic                   Enable generation of position-independent code.\n"));
4013   fprintf (stream, "%s",
4014            _("  --march=<arch>          Generate code for <arch>.  Valid choices for <arch>\n\
4015                                 are v0_v10, v10, v32 and common_v10_v32.\n"));
4016 }
4017
4018 /* Apply a fixS (fixup of an instruction or data that we didn't have
4019    enough info to complete immediately) to the data in a frag.  */
4020
4021 void
4022 md_apply_fix (fixS *fixP, valueT *valP, segT seg)
4023 {
4024   /* This assignment truncates upper bits if valueT is 64 bits (as with
4025      --enable-64-bit-bfd), which is fine here, though we cast to avoid
4026      any compiler warnings.  */
4027   long val = (long) *valP;
4028   char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
4029
4030   if (fixP->fx_addsy == 0 && !fixP->fx_pcrel)
4031     fixP->fx_done = 1;
4032
4033   if (fixP->fx_bit_fixP || fixP->fx_im_disp != 0)
4034     {
4035       as_bad_where (fixP->fx_file, fixP->fx_line, _("Invalid relocation"));
4036       fixP->fx_done = 1;
4037     }
4038   else
4039     {
4040       /* We can't actually support subtracting a symbol.  */
4041       if (fixP->fx_subsy != (symbolS *) NULL)
4042         as_bad_where (fixP->fx_file, fixP->fx_line,
4043                       _("expression too complex"));
4044
4045       /* This operand-type is scaled.  */
4046       if (fixP->fx_r_type == BFD_RELOC_CRIS_LAPCQ_OFFSET)
4047         val /= 2;
4048       cris_number_to_imm (buf, val, fixP->fx_size, fixP, seg);
4049     }
4050 }
4051
4052 /* All relocations are relative to the location just after the fixup;
4053    the address of the fixup plus its size.  */
4054
4055 long
4056 md_pcrel_from (fixS *fixP)
4057 {
4058   valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
4059
4060   /* FIXME:  We get here only at the end of assembly, when X in ".-X" is
4061      still unknown.  Since we don't have pc-relative relocations in a.out,
4062      this is invalid.  What to do if anything for a.out, is to add
4063      pc-relative relocations everywhere including the elinux program
4064      loader.  For ELF, allow straight-forward PC-relative relocations,
4065      which are always relative to the location after the relocation.  */
4066   if (OUTPUT_FLAVOR != bfd_target_elf_flavour
4067       || (fixP->fx_r_type != BFD_RELOC_8_PCREL
4068           && fixP->fx_r_type != BFD_RELOC_16_PCREL
4069           && fixP->fx_r_type != BFD_RELOC_32_PCREL
4070           && fixP->fx_r_type != BFD_RELOC_CRIS_LAPCQ_OFFSET))
4071     as_bad_where (fixP->fx_file, fixP->fx_line,
4072                   _("Invalid pc-relative relocation"));
4073   return fixP->fx_size + addr;
4074 }
4075
4076 /* We have no need to give defaults for symbol-values.  */
4077 symbolS *
4078 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
4079 {
4080   return 0;
4081 }
4082
4083 /* If this function returns non-zero, it prevents the relocation
4084    against symbol(s) in the FIXP from being replaced with relocations
4085    against section symbols, and guarantees that a relocation will be
4086    emitted even when the value can be resolved locally.  */
4087 int
4088 md_cris_force_relocation (struct fix *fixp)
4089 {
4090   switch (fixp->fx_r_type)
4091     {
4092     case BFD_RELOC_CRIS_16_GOT:
4093     case BFD_RELOC_CRIS_32_GOT:
4094     case BFD_RELOC_CRIS_16_GOTPLT:
4095     case BFD_RELOC_CRIS_32_GOTPLT:
4096     case BFD_RELOC_CRIS_32_GOTREL:
4097     case BFD_RELOC_CRIS_32_PLT_GOTREL:
4098     case BFD_RELOC_CRIS_32_PLT_PCREL:
4099       return 1;
4100     default:
4101       ;
4102     }
4103
4104   return generic_force_reloc (fixp);
4105 }
4106
4107 /* Check and emit error if broken-word handling has failed to fix up a
4108    case-table.  This is called from write.c, after doing everything it
4109    knows about how to handle broken words.  */
4110
4111 void
4112 tc_cris_check_adjusted_broken_word (offsetT new_offset, struct broken_word *brokwP)
4113 {
4114   if (new_offset > 32767 || new_offset < -32768)
4115     /* We really want a genuine error, not a warning, so make it one.  */
4116     as_bad_where (brokwP->frag->fr_file, brokwP->frag->fr_line,
4117                   _("Adjusted signed .word (%ld) overflows: `switch'-statement too large."),
4118                   (long) new_offset);
4119 }
4120
4121 /* Make a leading REGISTER_PREFIX_CHAR mandatory for all registers.  */
4122
4123 static void
4124 cris_force_reg_prefix (void)
4125 {
4126   demand_register_prefix = TRUE;
4127 }
4128
4129 /* Do not demand a leading REGISTER_PREFIX_CHAR for all registers.  */
4130
4131 static void
4132 cris_relax_reg_prefix (void)
4133 {
4134   demand_register_prefix = FALSE;
4135 }
4136
4137 /* Adjust for having a leading '_' on all user symbols.  */
4138
4139 static void
4140 cris_sym_leading_underscore (void)
4141 {
4142   /* We can't really do anything more than assert that what the program
4143      thinks symbol starts with agrees with the command-line options, since
4144      the bfd is already created.  */
4145
4146   if (!symbols_have_leading_underscore)
4147     as_bad (_(".syntax %s requires command-line option `--underscore'"),
4148             SYNTAX_USER_SYM_LEADING_UNDERSCORE);
4149 }
4150
4151 /* Adjust for not having any particular prefix on user symbols.  */
4152
4153 static void cris_sym_no_leading_underscore (void)
4154 {
4155   if (symbols_have_leading_underscore)
4156     as_bad (_(".syntax %s requires command-line option `--no-underscore'"),
4157             SYNTAX_USER_SYM_NO_LEADING_UNDERSCORE);
4158 }
4159
4160 /* Handle the .syntax pseudo, which takes an argument that decides what
4161    syntax the assembly code has.  */
4162
4163 static void
4164 s_syntax (int ignore ATTRIBUTE_UNUSED)
4165 {
4166   static const struct syntaxes
4167   {
4168     const char *const operand;
4169     void (*fn) (void);
4170   } syntax_table[] =
4171     {{SYNTAX_ENFORCE_REG_PREFIX, cris_force_reg_prefix},
4172      {SYNTAX_RELAX_REG_PREFIX, cris_relax_reg_prefix},
4173      {SYNTAX_USER_SYM_LEADING_UNDERSCORE, cris_sym_leading_underscore},
4174      {SYNTAX_USER_SYM_NO_LEADING_UNDERSCORE, cris_sym_no_leading_underscore}};
4175
4176   const struct syntaxes *sp;
4177
4178   for (sp = syntax_table;
4179        sp < syntax_table + sizeof (syntax_table) / sizeof (syntax_table[0]);
4180        sp++)
4181     {
4182       if (strncmp (input_line_pointer, sp->operand,
4183                    strlen (sp->operand)) == 0)
4184         {
4185           (sp->fn) ();
4186
4187           input_line_pointer += strlen (sp->operand);
4188           demand_empty_rest_of_line ();
4189           return;
4190         }
4191     }
4192
4193   as_bad (_("Unknown .syntax operand"));
4194 }
4195
4196 /* Wrapper for dwarf2_directive_file to emit error if this is seen when
4197    not emitting ELF.  */
4198
4199 static void
4200 s_cris_file (int dummy)
4201 {
4202   if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
4203     as_bad (_("Pseudodirective .file is only valid when generating ELF"));
4204   else
4205     dwarf2_directive_file (dummy);
4206 }
4207
4208 /* Wrapper for dwarf2_directive_loc to emit error if this is seen when not
4209    emitting ELF.  */
4210
4211 static void
4212 s_cris_loc (int dummy)
4213 {
4214   if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
4215     as_bad (_("Pseudodirective .loc is only valid when generating ELF"));
4216   else
4217     dwarf2_directive_loc (dummy);
4218 }
4219
4220 /* Worker for .dtpoffd: generate a R_CRIS_32_DTPREL reloc, as for
4221    expr:DTPREL but for use in debug info.  */
4222
4223 static void
4224 s_cris_dtpoff (int bytes)
4225 {
4226   expressionS ex;
4227   char *p;
4228
4229   if (bytes != 4)
4230     as_fatal (_("internal inconsistency problem: %s called for %d bytes"),
4231               __FUNCTION__, bytes);
4232
4233   expression (&ex);
4234
4235   p = frag_more (bytes);
4236   md_number_to_chars (p, 0, bytes);
4237   fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE,
4238                BFD_RELOC_CRIS_32_DTPREL);
4239
4240   demand_empty_rest_of_line ();
4241 }
4242
4243
4244 /* Translate a <arch> string (as common to --march=<arch> and .arch <arch>)
4245    into an enum.  If the string *STR is recognized, *STR is updated to point
4246    to the end of the string.  If the string is not recognized,
4247    arch_cris_unknown is returned.  */
4248
4249 static enum cris_archs
4250 cris_arch_from_string (char **str)
4251 {
4252   static const struct cris_arch_struct
4253   {
4254     const char *const name;
4255     enum cris_archs arch;
4256   } arch_table[] =
4257       /* Keep in order longest-first for choices where one is a prefix
4258          of another.  */
4259     {{"v0_v10", arch_cris_any_v0_v10},
4260      {"v10", arch_crisv10},
4261      {"v32", arch_crisv32},
4262      {"common_v10_v32", arch_cris_common_v10_v32}};
4263
4264   const struct cris_arch_struct *ap;
4265
4266   for (ap = arch_table;
4267        ap < arch_table + sizeof (arch_table) / sizeof (arch_table[0]);
4268        ap++)
4269     {
4270       int len = strlen (ap->name);
4271
4272       if (strncmp (*str, ap->name, len) == 0
4273           && (str[0][len] == 0 || ISSPACE (str[0][len])))
4274         {
4275           *str += strlen (ap->name);
4276           return ap->arch;
4277         }
4278     }
4279
4280   return arch_cris_unknown;
4281 }
4282
4283 /* Return nonzero if architecture version ARCH matches version range in
4284    IVER.  */
4285
4286 static int
4287 cris_insn_ver_valid_for_arch (enum cris_insn_version_usage iver,
4288                               enum cris_archs arch)
4289 {
4290   switch (arch)
4291     {
4292     case arch_cris_any_v0_v10:
4293       return
4294         (iver == cris_ver_version_all
4295          || iver == cris_ver_warning
4296          || iver == cris_ver_v0_3
4297          || iver == cris_ver_v3p
4298          || iver == cris_ver_v0_10
4299          || iver == cris_ver_sim_v0_10
4300          || iver == cris_ver_v3_10
4301          || iver == cris_ver_v8
4302          || iver == cris_ver_v8p
4303          || iver == cris_ver_v8_10
4304          || iver == cris_ver_v10
4305          || iver == cris_ver_v10p);
4306       
4307     case arch_crisv32:
4308       return
4309         (iver == cris_ver_version_all
4310          || iver == cris_ver_v3p
4311          || iver == cris_ver_v8p
4312          || iver == cris_ver_v10p
4313          || iver == cris_ver_v32p);
4314
4315     case arch_cris_common_v10_v32:
4316       return
4317         (iver == cris_ver_version_all
4318          || iver == cris_ver_v3p
4319          || iver == cris_ver_v8p
4320          || iver == cris_ver_v10p);
4321
4322     case arch_crisv0:
4323       return
4324         (iver == cris_ver_version_all
4325          || iver == cris_ver_v0_3
4326          || iver == cris_ver_v0_10
4327          || iver == cris_ver_sim_v0_10);
4328
4329     case arch_crisv3:
4330       return
4331         (iver == cris_ver_version_all
4332          || iver == cris_ver_v0_3
4333          || iver == cris_ver_v3p
4334          || iver == cris_ver_v0_10
4335          || iver == cris_ver_sim_v0_10
4336          || iver == cris_ver_v3_10);
4337
4338     case arch_crisv8:
4339       return
4340         (iver == cris_ver_version_all
4341          || iver == cris_ver_v3p
4342          || iver == cris_ver_v0_10
4343          || iver == cris_ver_sim_v0_10
4344          || iver == cris_ver_v3_10
4345          || iver == cris_ver_v8
4346          || iver == cris_ver_v8p
4347          || iver == cris_ver_v8_10);
4348
4349     case arch_crisv10:
4350       return
4351         (iver == cris_ver_version_all
4352          || iver == cris_ver_v3p
4353          || iver == cris_ver_v0_10
4354          || iver == cris_ver_sim_v0_10
4355          || iver == cris_ver_v3_10
4356          || iver == cris_ver_v8p
4357          || iver == cris_ver_v8_10
4358          || iver == cris_ver_v10
4359          || iver == cris_ver_v10p);
4360
4361     default:
4362       BAD_CASE (arch);
4363    }
4364 }
4365
4366 /* Assert that the .arch ARCHCHOICE1 is compatible with the specified or
4367    default --march=<ARCHCHOICE2> option.  */
4368
4369 static void
4370 s_cris_arch (int dummy ATTRIBUTE_UNUSED)
4371 {
4372   /* Right now we take the easy route and check for sameness.  It's not
4373      obvious that allowing e.g. --march=v32 and .arch common_v0_v32
4374      would be more useful than confusing, implementation-wise and
4375      user-wise.  */
4376
4377   char *str = input_line_pointer;
4378   enum cris_archs arch = cris_arch_from_string (&str);
4379
4380   if (arch == arch_cris_unknown)
4381     {
4382       as_bad (_("unknown operand to .arch"));
4383
4384       /* For this one, str does not reflect the end of the operand,
4385          since there was no matching arch.  Skip it manually; skip
4386          things that can be part of a word (a name).  */
4387       while (is_part_of_name (*str))
4388         str++;
4389     }
4390   else if (arch != cris_arch)
4391     as_bad (_(".arch <arch> requires a matching --march=... option"));
4392
4393   input_line_pointer = str;
4394   demand_empty_rest_of_line ();
4395   return;
4396 }
4397
4398 /*
4399  * Local variables:
4400  * eval: (c-set-style "gnu")
4401  * indent-tabs-mode: t
4402  * End:
4403  */