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