]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/binutils/gas/expr.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / binutils / gas / expr.c
1 /* expr.c -operands, expressions-
2    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
4    Free Software Foundation, Inc.
5
6    This file is part of GAS, the GNU Assembler.
7
8    GAS is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2, or (at your option)
11    any later version.
12
13    GAS is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GAS; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 /* This is really a branch office of as-read.c. I split it out to clearly
24    distinguish the world of expressions from the world of statements.
25    (It also gives smaller files to re-compile.)
26    Here, "operand"s are of expressions, not instructions.  */
27
28 #define min(a, b)       ((a) < (b) ? (a) : (b))
29
30 #include "as.h"
31 #include "safe-ctype.h"
32 #include "obstack.h"
33
34 static void floating_constant (expressionS * expressionP);
35 static valueT generic_bignum_to_int32 (void);
36 #ifdef BFD64
37 static valueT generic_bignum_to_int64 (void);
38 #endif
39 static void integer_constant (int radix, expressionS * expressionP);
40 static void mri_char_constant (expressionS *);
41 static void current_location (expressionS *);
42 static void clean_up_expression (expressionS * expressionP);
43 static segT operand (expressionS *, enum expr_mode);
44 static operatorT operator (int *);
45
46 extern const char EXP_CHARS[], FLT_CHARS[];
47
48 /* We keep a mapping of expression symbols to file positions, so that
49    we can provide better error messages.  */
50
51 struct expr_symbol_line {
52   struct expr_symbol_line *next;
53   symbolS *sym;
54   char *file;
55   unsigned int line;
56 };
57
58 static struct expr_symbol_line *expr_symbol_lines;
59 \f
60 /* Build a dummy symbol to hold a complex expression.  This is how we
61    build expressions up out of other expressions.  The symbol is put
62    into the fake section expr_section.  */
63
64 symbolS *
65 make_expr_symbol (expressionS *expressionP)
66 {
67   expressionS zero;
68   symbolS *symbolP;
69   struct expr_symbol_line *n;
70
71   if (expressionP->X_op == O_symbol
72       && expressionP->X_add_number == 0)
73     return expressionP->X_add_symbol;
74
75   if (expressionP->X_op == O_big)
76     {
77       /* This won't work, because the actual value is stored in
78          generic_floating_point_number or generic_bignum, and we are
79          going to lose it if we haven't already.  */
80       if (expressionP->X_add_number > 0)
81         as_bad (_("bignum invalid"));
82       else
83         as_bad (_("floating point number invalid"));
84       zero.X_op = O_constant;
85       zero.X_add_number = 0;
86       zero.X_unsigned = 0;
87       clean_up_expression (&zero);
88       expressionP = &zero;
89     }
90
91   /* Putting constant symbols in absolute_section rather than
92      expr_section is convenient for the old a.out code, for which
93      S_GET_SEGMENT does not always retrieve the value put in by
94      S_SET_SEGMENT.  */
95   symbolP = symbol_create (FAKE_LABEL_NAME,
96                            (expressionP->X_op == O_constant
97                             ? absolute_section
98                             : expr_section),
99                            0, &zero_address_frag);
100   symbol_set_value_expression (symbolP, expressionP);
101
102   if (expressionP->X_op == O_constant)
103     resolve_symbol_value (symbolP);
104
105   n = (struct expr_symbol_line *) xmalloc (sizeof *n);
106   n->sym = symbolP;
107   as_where (&n->file, &n->line);
108   n->next = expr_symbol_lines;
109   expr_symbol_lines = n;
110
111   return symbolP;
112 }
113
114 /* Return the file and line number for an expr symbol.  Return
115    non-zero if something was found, 0 if no information is known for
116    the symbol.  */
117
118 int
119 expr_symbol_where (symbolS *sym, char **pfile, unsigned int *pline)
120 {
121   register struct expr_symbol_line *l;
122
123   for (l = expr_symbol_lines; l != NULL; l = l->next)
124     {
125       if (l->sym == sym)
126         {
127           *pfile = l->file;
128           *pline = l->line;
129           return 1;
130         }
131     }
132
133   return 0;
134 }
135 \f
136 /* Utilities for building expressions.
137    Since complex expressions are recorded as symbols for use in other
138    expressions these return a symbolS * and not an expressionS *.
139    These explicitly do not take an "add_number" argument.  */
140 /* ??? For completeness' sake one might want expr_build_symbol.
141    It would just return its argument.  */
142
143 /* Build an expression for an unsigned constant.
144    The corresponding one for signed constants is missing because
145    there's currently no need for it.  One could add an unsigned_p flag
146    but that seems more clumsy.  */
147
148 symbolS *
149 expr_build_uconstant (offsetT value)
150 {
151   expressionS e;
152
153   e.X_op = O_constant;
154   e.X_add_number = value;
155   e.X_unsigned = 1;
156   return make_expr_symbol (&e);
157 }
158
159 /* Build an expression for the current location ('.').  */
160
161 symbolS *
162 expr_build_dot (void)
163 {
164   expressionS e;
165
166   current_location (&e);
167   return make_expr_symbol (&e);
168 }
169 \f
170 /* Build any floating-point literal here.
171    Also build any bignum literal here.  */
172
173 /* Seems atof_machine can backscan through generic_bignum and hit whatever
174    happens to be loaded before it in memory.  And its way too complicated
175    for me to fix right.  Thus a hack.  JF:  Just make generic_bignum bigger,
176    and never write into the early words, thus they'll always be zero.
177    I hate Dean's floating-point code.  Bleh.  */
178 LITTLENUM_TYPE generic_bignum[SIZE_OF_LARGE_NUMBER + 6];
179
180 FLONUM_TYPE generic_floating_point_number = {
181   &generic_bignum[6],           /* low.  (JF: Was 0)  */
182   &generic_bignum[SIZE_OF_LARGE_NUMBER + 6 - 1], /* high.  JF: (added +6)  */
183   0,                            /* leader.  */
184   0,                            /* exponent.  */
185   0                             /* sign.  */
186 };
187
188 \f
189 static void
190 floating_constant (expressionS *expressionP)
191 {
192   /* input_line_pointer -> floating-point constant.  */
193   int error_code;
194
195   error_code = atof_generic (&input_line_pointer, ".", EXP_CHARS,
196                              &generic_floating_point_number);
197
198   if (error_code)
199     {
200       if (error_code == ERROR_EXPONENT_OVERFLOW)
201         {
202           as_bad (_("bad floating-point constant: exponent overflow"));
203         }
204       else
205         {
206           as_bad (_("bad floating-point constant: unknown error code=%d"),
207                   error_code);
208         }
209     }
210   expressionP->X_op = O_big;
211   /* input_line_pointer -> just after constant, which may point to
212      whitespace.  */
213   expressionP->X_add_number = -1;
214 }
215
216 static valueT
217 generic_bignum_to_int32 (void)
218 {
219   valueT number =
220            ((generic_bignum[1] & LITTLENUM_MASK) << LITTLENUM_NUMBER_OF_BITS)
221            | (generic_bignum[0] & LITTLENUM_MASK);
222   number &= 0xffffffff;
223   return number;
224 }
225
226 #ifdef BFD64
227 static valueT
228 generic_bignum_to_int64 (void)
229 {
230   valueT number =
231     ((((((((valueT) generic_bignum[3] & LITTLENUM_MASK)
232           << LITTLENUM_NUMBER_OF_BITS)
233          | ((valueT) generic_bignum[2] & LITTLENUM_MASK))
234         << LITTLENUM_NUMBER_OF_BITS)
235        | ((valueT) generic_bignum[1] & LITTLENUM_MASK))
236       << LITTLENUM_NUMBER_OF_BITS)
237      | ((valueT) generic_bignum[0] & LITTLENUM_MASK));
238   return number;
239 }
240 #endif
241
242 static void
243 integer_constant (int radix, expressionS *expressionP)
244 {
245   char *start;          /* Start of number.  */
246   char *suffix = NULL;
247   char c;
248   valueT number;        /* Offset or (absolute) value.  */
249   short int digit;      /* Value of next digit in current radix.  */
250   short int maxdig = 0; /* Highest permitted digit value.  */
251   int too_many_digits = 0;      /* If we see >= this number of.  */
252   char *name;           /* Points to name of symbol.  */
253   symbolS *symbolP;     /* Points to symbol.  */
254
255   int small;                    /* True if fits in 32 bits.  */
256
257   /* May be bignum, or may fit in 32 bits.  */
258   /* Most numbers fit into 32 bits, and we want this case to be fast.
259      so we pretend it will fit into 32 bits.  If, after making up a 32
260      bit number, we realise that we have scanned more digits than
261      comfortably fit into 32 bits, we re-scan the digits coding them
262      into a bignum.  For decimal and octal numbers we are
263      conservative: Some numbers may be assumed bignums when in fact
264      they do fit into 32 bits.  Numbers of any radix can have excess
265      leading zeros: We strive to recognise this and cast them back
266      into 32 bits.  We must check that the bignum really is more than
267      32 bits, and change it back to a 32-bit number if it fits.  The
268      number we are looking for is expected to be positive, but if it
269      fits into 32 bits as an unsigned number, we let it be a 32-bit
270      number.  The cavalier approach is for speed in ordinary cases.  */
271   /* This has been extended for 64 bits.  We blindly assume that if
272      you're compiling in 64-bit mode, the target is a 64-bit machine.
273      This should be cleaned up.  */
274
275 #ifdef BFD64
276 #define valuesize 64
277 #else /* includes non-bfd case, mostly */
278 #define valuesize 32
279 #endif
280
281   if ((NUMBERS_WITH_SUFFIX || flag_m68k_mri) && radix == 0)
282     {
283       int flt = 0;
284
285       /* In MRI mode, the number may have a suffix indicating the
286          radix.  For that matter, it might actually be a floating
287          point constant.  */
288       for (suffix = input_line_pointer; ISALNUM (*suffix); suffix++)
289         {
290           if (*suffix == 'e' || *suffix == 'E')
291             flt = 1;
292         }
293
294       if (suffix == input_line_pointer)
295         {
296           radix = 10;
297           suffix = NULL;
298         }
299       else
300         {
301           c = *--suffix;
302           c = TOUPPER (c);
303           /* If we have both NUMBERS_WITH_SUFFIX and LOCAL_LABELS_FB,
304              we distinguish between 'B' and 'b'.  This is the case for
305              Z80.  */
306           if ((NUMBERS_WITH_SUFFIX && LOCAL_LABELS_FB ? *suffix : c) == 'B')
307             radix = 2;
308           else if (c == 'D')
309             radix = 10;
310           else if (c == 'O' || c == 'Q')
311             radix = 8;
312           else if (c == 'H')
313             radix = 16;
314           else if (suffix[1] == '.' || c == 'E' || flt)
315             {
316               floating_constant (expressionP);
317               return;
318             }
319           else
320             {
321               radix = 10;
322               suffix = NULL;
323             }
324         }
325     }
326
327   switch (radix)
328     {
329     case 2:
330       maxdig = 2;
331       too_many_digits = valuesize + 1;
332       break;
333     case 8:
334       maxdig = radix = 8;
335       too_many_digits = (valuesize + 2) / 3 + 1;
336       break;
337     case 16:
338       maxdig = radix = 16;
339       too_many_digits = (valuesize + 3) / 4 + 1;
340       break;
341     case 10:
342       maxdig = radix = 10;
343       too_many_digits = (valuesize + 11) / 4; /* Very rough.  */
344     }
345 #undef valuesize
346   start = input_line_pointer;
347   c = *input_line_pointer++;
348   for (number = 0;
349        (digit = hex_value (c)) < maxdig;
350        c = *input_line_pointer++)
351     {
352       number = number * radix + digit;
353     }
354   /* c contains character after number.  */
355   /* input_line_pointer->char after c.  */
356   small = (input_line_pointer - start - 1) < too_many_digits;
357
358   if (radix == 16 && c == '_')
359     {
360       /* This is literal of the form 0x333_0_12345678_1.
361          This example is equivalent to 0x00000333000000001234567800000001.  */
362
363       int num_little_digits = 0;
364       int i;
365       input_line_pointer = start;       /* -> 1st digit.  */
366
367       know (LITTLENUM_NUMBER_OF_BITS == 16);
368
369       for (c = '_'; c == '_'; num_little_digits += 2)
370         {
371
372           /* Convert one 64-bit word.  */
373           int ndigit = 0;
374           number = 0;
375           for (c = *input_line_pointer++;
376                (digit = hex_value (c)) < maxdig;
377                c = *(input_line_pointer++))
378             {
379               number = number * radix + digit;
380               ndigit++;
381             }
382
383           /* Check for 8 digit per word max.  */
384           if (ndigit > 8)
385             as_bad (_("a bignum with underscores may not have more than 8 hex digits in any word"));
386
387           /* Add this chunk to the bignum.
388              Shift things down 2 little digits.  */
389           know (LITTLENUM_NUMBER_OF_BITS == 16);
390           for (i = min (num_little_digits + 1, SIZE_OF_LARGE_NUMBER - 1);
391                i >= 2;
392                i--)
393             generic_bignum[i] = generic_bignum[i - 2];
394
395           /* Add the new digits as the least significant new ones.  */
396           generic_bignum[0] = number & 0xffffffff;
397           generic_bignum[1] = number >> 16;
398         }
399
400       /* Again, c is char after number, input_line_pointer->after c.  */
401
402       if (num_little_digits > SIZE_OF_LARGE_NUMBER - 1)
403         num_little_digits = SIZE_OF_LARGE_NUMBER - 1;
404
405       assert (num_little_digits >= 4);
406
407       if (num_little_digits != 8)
408         as_bad (_("a bignum with underscores must have exactly 4 words"));
409
410       /* We might have some leading zeros.  These can be trimmed to give
411          us a change to fit this constant into a small number.  */
412       while (generic_bignum[num_little_digits - 1] == 0
413              && num_little_digits > 1)
414         num_little_digits--;
415
416       if (num_little_digits <= 2)
417         {
418           /* will fit into 32 bits.  */
419           number = generic_bignum_to_int32 ();
420           small = 1;
421         }
422 #ifdef BFD64
423       else if (num_little_digits <= 4)
424         {
425           /* Will fit into 64 bits.  */
426           number = generic_bignum_to_int64 ();
427           small = 1;
428         }
429 #endif
430       else
431         {
432           small = 0;
433
434           /* Number of littlenums in the bignum.  */
435           number = num_little_digits;
436         }
437     }
438   else if (!small)
439     {
440       /* We saw a lot of digits. manufacture a bignum the hard way.  */
441       LITTLENUM_TYPE *leader;   /* -> high order littlenum of the bignum.  */
442       LITTLENUM_TYPE *pointer;  /* -> littlenum we are frobbing now.  */
443       long carry;
444
445       leader = generic_bignum;
446       generic_bignum[0] = 0;
447       generic_bignum[1] = 0;
448       generic_bignum[2] = 0;
449       generic_bignum[3] = 0;
450       input_line_pointer = start;       /* -> 1st digit.  */
451       c = *input_line_pointer++;
452       for (; (carry = hex_value (c)) < maxdig; c = *input_line_pointer++)
453         {
454           for (pointer = generic_bignum; pointer <= leader; pointer++)
455             {
456               long work;
457
458               work = carry + radix * *pointer;
459               *pointer = work & LITTLENUM_MASK;
460               carry = work >> LITTLENUM_NUMBER_OF_BITS;
461             }
462           if (carry)
463             {
464               if (leader < generic_bignum + SIZE_OF_LARGE_NUMBER - 1)
465                 {
466                   /* Room to grow a longer bignum.  */
467                   *++leader = carry;
468                 }
469             }
470         }
471       /* Again, c is char after number.  */
472       /* input_line_pointer -> after c.  */
473       know (LITTLENUM_NUMBER_OF_BITS == 16);
474       if (leader < generic_bignum + 2)
475         {
476           /* Will fit into 32 bits.  */
477           number = generic_bignum_to_int32 ();
478           small = 1;
479         }
480 #ifdef BFD64
481       else if (leader < generic_bignum + 4)
482         {
483           /* Will fit into 64 bits.  */
484           number = generic_bignum_to_int64 ();
485           small = 1;
486         }
487 #endif
488       else
489         {
490           /* Number of littlenums in the bignum.  */
491           number = leader - generic_bignum + 1;
492         }
493     }
494
495   if ((NUMBERS_WITH_SUFFIX || flag_m68k_mri)
496       && suffix != NULL
497       && input_line_pointer - 1 == suffix)
498     c = *input_line_pointer++;
499
500   if (small)
501     {
502       /* Here with number, in correct radix. c is the next char.
503          Note that unlike un*x, we allow "011f" "0x9f" to both mean
504          the same as the (conventional) "9f".
505          This is simply easier than checking for strict canonical
506          form.  Syntax sux!  */
507
508       if (LOCAL_LABELS_FB && c == 'b')
509         {
510           /* Backward ref to local label.
511              Because it is backward, expect it to be defined.  */
512           /* Construct a local label.  */
513           name = fb_label_name ((int) number, 0);
514
515           /* Seen before, or symbol is defined: OK.  */
516           symbolP = symbol_find (name);
517           if ((symbolP != NULL) && (S_IS_DEFINED (symbolP)))
518             {
519               /* Local labels are never absolute.  Don't waste time
520                  checking absoluteness.  */
521               know (SEG_NORMAL (S_GET_SEGMENT (symbolP)));
522
523               expressionP->X_op = O_symbol;
524               expressionP->X_add_symbol = symbolP;
525             }
526           else
527             {
528               /* Either not seen or not defined.  */
529               /* @@ Should print out the original string instead of
530                  the parsed number.  */
531               as_bad (_("backward ref to unknown label \"%d:\""),
532                       (int) number);
533               expressionP->X_op = O_constant;
534             }
535
536           expressionP->X_add_number = 0;
537         }                       /* case 'b' */
538       else if (LOCAL_LABELS_FB && c == 'f')
539         {
540           /* Forward reference.  Expect symbol to be undefined or
541              unknown.  undefined: seen it before.  unknown: never seen
542              it before.
543
544              Construct a local label name, then an undefined symbol.
545              Don't create a xseg frag for it: caller may do that.
546              Just return it as never seen before.  */
547           name = fb_label_name ((int) number, 1);
548           symbolP = symbol_find_or_make (name);
549           /* We have no need to check symbol properties.  */
550 #ifndef many_segments
551           /* Since "know" puts its arg into a "string", we
552              can't have newlines in the argument.  */
553           know (S_GET_SEGMENT (symbolP) == undefined_section || S_GET_SEGMENT (symbolP) == text_section || S_GET_SEGMENT (symbolP) == data_section);
554 #endif
555           expressionP->X_op = O_symbol;
556           expressionP->X_add_symbol = symbolP;
557           expressionP->X_add_number = 0;
558         }                       /* case 'f' */
559       else if (LOCAL_LABELS_DOLLAR && c == '$')
560         {
561           /* If the dollar label is *currently* defined, then this is just
562              another reference to it.  If it is not *currently* defined,
563              then this is a fresh instantiation of that number, so create
564              it.  */
565
566           if (dollar_label_defined ((long) number))
567             {
568               name = dollar_label_name ((long) number, 0);
569               symbolP = symbol_find (name);
570               know (symbolP != NULL);
571             }
572           else
573             {
574               name = dollar_label_name ((long) number, 1);
575               symbolP = symbol_find_or_make (name);
576             }
577
578           expressionP->X_op = O_symbol;
579           expressionP->X_add_symbol = symbolP;
580           expressionP->X_add_number = 0;
581         }                       /* case '$' */
582       else
583         {
584           expressionP->X_op = O_constant;
585           expressionP->X_add_number = number;
586           input_line_pointer--; /* Restore following character.  */
587         }                       /* Really just a number.  */
588     }
589   else
590     {
591       /* Not a small number.  */
592       expressionP->X_op = O_big;
593       expressionP->X_add_number = number;       /* Number of littlenums.  */
594       input_line_pointer--;     /* -> char following number.  */
595     }
596 }
597
598 /* Parse an MRI multi character constant.  */
599
600 static void
601 mri_char_constant (expressionS *expressionP)
602 {
603   int i;
604
605   if (*input_line_pointer == '\''
606       && input_line_pointer[1] != '\'')
607     {
608       expressionP->X_op = O_constant;
609       expressionP->X_add_number = 0;
610       return;
611     }
612
613   /* In order to get the correct byte ordering, we must build the
614      number in reverse.  */
615   for (i = SIZE_OF_LARGE_NUMBER - 1; i >= 0; i--)
616     {
617       int j;
618
619       generic_bignum[i] = 0;
620       for (j = 0; j < CHARS_PER_LITTLENUM; j++)
621         {
622           if (*input_line_pointer == '\'')
623             {
624               if (input_line_pointer[1] != '\'')
625                 break;
626               ++input_line_pointer;
627             }
628           generic_bignum[i] <<= 8;
629           generic_bignum[i] += *input_line_pointer;
630           ++input_line_pointer;
631         }
632
633       if (i < SIZE_OF_LARGE_NUMBER - 1)
634         {
635           /* If there is more than one littlenum, left justify the
636              last one to make it match the earlier ones.  If there is
637              only one, we can just use the value directly.  */
638           for (; j < CHARS_PER_LITTLENUM; j++)
639             generic_bignum[i] <<= 8;
640         }
641
642       if (*input_line_pointer == '\''
643           && input_line_pointer[1] != '\'')
644         break;
645     }
646
647   if (i < 0)
648     {
649       as_bad (_("character constant too large"));
650       i = 0;
651     }
652
653   if (i > 0)
654     {
655       int c;
656       int j;
657
658       c = SIZE_OF_LARGE_NUMBER - i;
659       for (j = 0; j < c; j++)
660         generic_bignum[j] = generic_bignum[i + j];
661       i = c;
662     }
663
664   know (LITTLENUM_NUMBER_OF_BITS == 16);
665   if (i > 2)
666     {
667       expressionP->X_op = O_big;
668       expressionP->X_add_number = i;
669     }
670   else
671     {
672       expressionP->X_op = O_constant;
673       if (i < 2)
674         expressionP->X_add_number = generic_bignum[0] & LITTLENUM_MASK;
675       else
676         expressionP->X_add_number =
677           (((generic_bignum[1] & LITTLENUM_MASK)
678             << LITTLENUM_NUMBER_OF_BITS)
679            | (generic_bignum[0] & LITTLENUM_MASK));
680     }
681
682   /* Skip the final closing quote.  */
683   ++input_line_pointer;
684 }
685
686 /* Return an expression representing the current location.  This
687    handles the magic symbol `.'.  */
688
689 static void
690 current_location (expressionS *expressionp)
691 {
692   if (now_seg == absolute_section)
693     {
694       expressionp->X_op = O_constant;
695       expressionp->X_add_number = abs_section_offset;
696     }
697   else
698     {
699       expressionp->X_op = O_symbol;
700       expressionp->X_add_symbol = symbol_temp_new_now ();
701       expressionp->X_add_number = 0;
702     }
703 }
704
705 /* In:  Input_line_pointer points to 1st char of operand, which may
706         be a space.
707
708    Out: An expressionS.
709         The operand may have been empty: in this case X_op == O_absent.
710         Input_line_pointer->(next non-blank) char after operand.  */
711
712 static segT
713 operand (expressionS *expressionP, enum expr_mode mode)
714 {
715   char c;
716   symbolS *symbolP;     /* Points to symbol.  */
717   char *name;           /* Points to name of symbol.  */
718   segT segment;
719
720   /* All integers are regarded as unsigned unless they are negated.
721      This is because the only thing which cares whether a number is
722      unsigned is the code in emit_expr which extends constants into
723      bignums.  It should only sign extend negative numbers, so that
724      something like ``.quad 0x80000000'' is not sign extended even
725      though it appears negative if valueT is 32 bits.  */
726   expressionP->X_unsigned = 1;
727
728   /* Digits, assume it is a bignum.  */
729
730   SKIP_WHITESPACE ();           /* Leading whitespace is part of operand.  */
731   c = *input_line_pointer++;    /* input_line_pointer -> past char in c.  */
732
733   if (is_end_of_line[(unsigned char) c])
734     goto eol;
735
736   switch (c)
737     {
738     case '1':
739     case '2':
740     case '3':
741     case '4':
742     case '5':
743     case '6':
744     case '7':
745     case '8':
746     case '9':
747       input_line_pointer--;
748
749       integer_constant ((NUMBERS_WITH_SUFFIX || flag_m68k_mri)
750                         ? 0 : 10,
751                         expressionP);
752       break;
753
754 #ifdef LITERAL_PREFIXDOLLAR_HEX
755     case '$':
756       /* $L is the start of a local label, not a hex constant.  */
757       if (* input_line_pointer == 'L')
758       goto isname;
759       integer_constant (16, expressionP);
760       break;
761 #endif
762
763 #ifdef LITERAL_PREFIXPERCENT_BIN
764     case '%':
765       integer_constant (2, expressionP);
766       break;
767 #endif
768
769     case '0':
770       /* Non-decimal radix.  */
771
772       if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
773         {
774           char *s;
775
776           /* Check for a hex or float constant.  */
777           for (s = input_line_pointer; hex_p (*s); s++)
778             ;
779           if (*s == 'h' || *s == 'H' || *input_line_pointer == '.')
780             {
781               --input_line_pointer;
782               integer_constant (0, expressionP);
783               break;
784             }
785         }
786       c = *input_line_pointer;
787       switch (c)
788         {
789         case 'o':
790         case 'O':
791         case 'q':
792         case 'Q':
793         case '8':
794         case '9':
795           if (NUMBERS_WITH_SUFFIX || flag_m68k_mri)
796             {
797               integer_constant (0, expressionP);
798               break;
799             }
800           /* Fall through.  */
801         default:
802         default_case:
803           if (c && strchr (FLT_CHARS, c))
804             {
805               input_line_pointer++;
806               floating_constant (expressionP);
807               expressionP->X_add_number = - TOLOWER (c);
808             }
809           else
810             {
811               /* The string was only zero.  */
812               expressionP->X_op = O_constant;
813               expressionP->X_add_number = 0;
814             }
815
816           break;
817
818         case 'x':
819         case 'X':
820           if (flag_m68k_mri)
821             goto default_case;
822           input_line_pointer++;
823           integer_constant (16, expressionP);
824           break;
825
826         case 'b':
827           if (LOCAL_LABELS_FB && ! (flag_m68k_mri || NUMBERS_WITH_SUFFIX))
828             {
829               /* This code used to check for '+' and '-' here, and, in
830                  some conditions, fall through to call
831                  integer_constant.  However, that didn't make sense,
832                  as integer_constant only accepts digits.  */
833               /* Some of our code elsewhere does permit digits greater
834                  than the expected base; for consistency, do the same
835                  here.  */
836               if (input_line_pointer[1] < '0'
837                   || input_line_pointer[1] > '9')
838                 {
839                   /* Parse this as a back reference to label 0.  */
840                   input_line_pointer--;
841                   integer_constant (10, expressionP);
842                   break;
843                 }
844               /* Otherwise, parse this as a binary number.  */
845             }
846           /* Fall through.  */
847         case 'B':
848           input_line_pointer++;
849           if (flag_m68k_mri || NUMBERS_WITH_SUFFIX)
850             goto default_case;
851           integer_constant (2, expressionP);
852           break;
853
854         case '0':
855         case '1':
856         case '2':
857         case '3':
858         case '4':
859         case '5':
860         case '6':
861         case '7':
862           integer_constant ((flag_m68k_mri || NUMBERS_WITH_SUFFIX)
863                             ? 0 : 8,
864                             expressionP);
865           break;
866
867         case 'f':
868           if (LOCAL_LABELS_FB)
869             {
870               /* If it says "0f" and it could possibly be a floating point
871                  number, make it one.  Otherwise, make it a local label,
872                  and try to deal with parsing the rest later.  */
873               if (!input_line_pointer[1]
874                   || (is_end_of_line[0xff & input_line_pointer[1]])
875                   || strchr (FLT_CHARS, 'f') == NULL)
876                 goto is_0f_label;
877               {
878                 char *cp = input_line_pointer + 1;
879                 int r = atof_generic (&cp, ".", EXP_CHARS,
880                                       &generic_floating_point_number);
881                 switch (r)
882                   {
883                   case 0:
884                   case ERROR_EXPONENT_OVERFLOW:
885                     if (*cp == 'f' || *cp == 'b')
886                       /* Looks like a difference expression.  */
887                       goto is_0f_label;
888                     else if (cp == input_line_pointer + 1)
889                       /* No characters has been accepted -- looks like
890                          end of operand.  */
891                       goto is_0f_label;
892                     else
893                       goto is_0f_float;
894                   default:
895                     as_fatal (_("expr.c(operand): bad atof_generic return val %d"),
896                               r);
897                   }
898               }
899
900               /* Okay, now we've sorted it out.  We resume at one of these
901                  two labels, depending on what we've decided we're probably
902                  looking at.  */
903             is_0f_label:
904               input_line_pointer--;
905               integer_constant (10, expressionP);
906               break;
907
908             is_0f_float:
909               /* Fall through.  */
910               ;
911             }
912
913         case 'd':
914         case 'D':
915           if (flag_m68k_mri || NUMBERS_WITH_SUFFIX)
916             {
917               integer_constant (0, expressionP);
918               break;
919             }
920           /* Fall through.  */
921         case 'F':
922         case 'r':
923         case 'e':
924         case 'E':
925         case 'g':
926         case 'G':
927           input_line_pointer++;
928           floating_constant (expressionP);
929           expressionP->X_add_number = - TOLOWER (c);
930           break;
931
932         case '$':
933           if (LOCAL_LABELS_DOLLAR)
934             {
935               integer_constant (10, expressionP);
936               break;
937             }
938           else
939             goto default_case;
940         }
941
942       break;
943
944     case '(':
945 #ifndef NEED_INDEX_OPERATOR
946     case '[':
947 #endif
948       /* Didn't begin with digit & not a name.  */
949       if (mode != expr_defer)
950         segment = expression (expressionP);
951       else
952         segment = deferred_expression (expressionP);
953       /* expression () will pass trailing whitespace.  */
954       if ((c == '(' && *input_line_pointer != ')')
955           || (c == '[' && *input_line_pointer != ']'))
956         as_bad (_("missing '%c'"), c == '(' ? ')' : ']');
957       else
958         input_line_pointer++;
959       SKIP_WHITESPACE ();
960       /* Here with input_line_pointer -> char after "(...)".  */
961       return segment;
962
963 #ifdef TC_M68K
964     case 'E':
965       if (! flag_m68k_mri || *input_line_pointer != '\'')
966         goto de_fault;
967       as_bad (_("EBCDIC constants are not supported"));
968       /* Fall through.  */
969     case 'A':
970       if (! flag_m68k_mri || *input_line_pointer != '\'')
971         goto de_fault;
972       ++input_line_pointer;
973       /* Fall through.  */
974 #endif
975     case '\'':
976       if (! flag_m68k_mri)
977         {
978           /* Warning: to conform to other people's assemblers NO
979              ESCAPEMENT is permitted for a single quote.  The next
980              character, parity errors and all, is taken as the value
981              of the operand.  VERY KINKY.  */
982           expressionP->X_op = O_constant;
983           expressionP->X_add_number = *input_line_pointer++;
984           break;
985         }
986
987       mri_char_constant (expressionP);
988       break;
989
990 #ifdef TC_M68K
991     case '"':
992       /* Double quote is the bitwise not operator in MRI mode.  */
993       if (! flag_m68k_mri)
994         goto de_fault;
995       /* Fall through.  */
996 #endif
997     case '~':
998       /* '~' is permitted to start a label on the Delta.  */
999       if (is_name_beginner (c))
1000         goto isname;
1001     case '!':
1002     case '-':
1003     case '+':
1004       {
1005         operand (expressionP, mode);
1006         if (expressionP->X_op == O_constant)
1007           {
1008             /* input_line_pointer -> char after operand.  */
1009             if (c == '-')
1010               {
1011                 expressionP->X_add_number = - expressionP->X_add_number;
1012                 /* Notice: '-' may overflow: no warning is given.
1013                    This is compatible with other people's
1014                    assemblers.  Sigh.  */
1015                 expressionP->X_unsigned = 0;
1016               }
1017             else if (c == '~' || c == '"')
1018               expressionP->X_add_number = ~ expressionP->X_add_number;
1019             else if (c == '!')
1020               expressionP->X_add_number = ! expressionP->X_add_number;
1021           }
1022         else if (expressionP->X_op == O_big
1023                  && expressionP->X_add_number <= 0
1024                  && c == '-'
1025                  && (generic_floating_point_number.sign == '+'
1026                      || generic_floating_point_number.sign == 'P'))
1027           {
1028             /* Negative flonum (eg, -1.000e0).  */
1029             if (generic_floating_point_number.sign == '+')
1030               generic_floating_point_number.sign = '-';
1031             else
1032               generic_floating_point_number.sign = 'N';
1033           }
1034         else if (expressionP->X_op == O_big
1035                  && expressionP->X_add_number > 0)
1036           {
1037             int i;
1038
1039             if (c == '~' || c == '-')
1040               {
1041                 for (i = 0; i < expressionP->X_add_number; ++i)
1042                   generic_bignum[i] = ~generic_bignum[i];
1043                 if (c == '-')
1044                   for (i = 0; i < expressionP->X_add_number; ++i)
1045                     {
1046                       generic_bignum[i] += 1;
1047                       if (generic_bignum[i])
1048                         break;
1049                     }
1050               }
1051             else if (c == '!')
1052               {
1053                 int nonzero = 0;
1054                 for (i = 0; i < expressionP->X_add_number; ++i)
1055                   {
1056                     if (generic_bignum[i])
1057                       nonzero = 1;
1058                     generic_bignum[i] = 0;
1059                   }
1060                 generic_bignum[0] = nonzero;
1061               }
1062           }
1063         else if (expressionP->X_op != O_illegal
1064                  && expressionP->X_op != O_absent)
1065           {
1066             if (c != '+')
1067               {
1068                 expressionP->X_add_symbol = make_expr_symbol (expressionP);
1069                 if (c == '-')
1070                   expressionP->X_op = O_uminus;
1071                 else if (c == '~' || c == '"')
1072                   expressionP->X_op = O_bit_not;
1073                 else
1074                   expressionP->X_op = O_logical_not;
1075                 expressionP->X_add_number = 0;
1076               }
1077           }
1078         else
1079           as_warn (_("Unary operator %c ignored because bad operand follows"),
1080                    c);
1081       }
1082       break;
1083
1084 #if defined (DOLLAR_DOT) || defined (TC_M68K)
1085     case '$':
1086       /* '$' is the program counter when in MRI mode, or when
1087          DOLLAR_DOT is defined.  */
1088 #ifndef DOLLAR_DOT
1089       if (! flag_m68k_mri)
1090         goto de_fault;
1091 #endif
1092       if (DOLLAR_AMBIGU && hex_p (*input_line_pointer))
1093         {
1094           /* In MRI mode and on Z80, '$' is also used as the prefix
1095              for a hexadecimal constant.  */
1096           integer_constant (16, expressionP);
1097           break;
1098         }
1099
1100       if (is_part_of_name (*input_line_pointer))
1101         goto isname;
1102
1103       current_location (expressionP);
1104       break;
1105 #endif
1106
1107     case '.':
1108       if (!is_part_of_name (*input_line_pointer))
1109         {
1110           current_location (expressionP);
1111           break;
1112         }
1113       else if ((strncasecmp (input_line_pointer, "startof.", 8) == 0
1114                 && ! is_part_of_name (input_line_pointer[8]))
1115                || (strncasecmp (input_line_pointer, "sizeof.", 7) == 0
1116                    && ! is_part_of_name (input_line_pointer[7])))
1117         {
1118           int start;
1119
1120           start = (input_line_pointer[1] == 't'
1121                    || input_line_pointer[1] == 'T');
1122           input_line_pointer += start ? 8 : 7;
1123           SKIP_WHITESPACE ();
1124           if (*input_line_pointer != '(')
1125             as_bad (_("syntax error in .startof. or .sizeof."));
1126           else
1127             {
1128               char *buf;
1129
1130               ++input_line_pointer;
1131               SKIP_WHITESPACE ();
1132               name = input_line_pointer;
1133               c = get_symbol_end ();
1134
1135               buf = (char *) xmalloc (strlen (name) + 10);
1136               if (start)
1137                 sprintf (buf, ".startof.%s", name);
1138               else
1139                 sprintf (buf, ".sizeof.%s", name);
1140               symbolP = symbol_make (buf);
1141               free (buf);
1142
1143               expressionP->X_op = O_symbol;
1144               expressionP->X_add_symbol = symbolP;
1145               expressionP->X_add_number = 0;
1146
1147               *input_line_pointer = c;
1148               SKIP_WHITESPACE ();
1149               if (*input_line_pointer != ')')
1150                 as_bad (_("syntax error in .startof. or .sizeof."));
1151               else
1152                 ++input_line_pointer;
1153             }
1154           break;
1155         }
1156       else
1157         {
1158           goto isname;
1159         }
1160
1161     case ',':
1162     eol:
1163       /* Can't imagine any other kind of operand.  */
1164       expressionP->X_op = O_absent;
1165       input_line_pointer--;
1166       break;
1167
1168 #ifdef TC_M68K
1169     case '%':
1170       if (! flag_m68k_mri)
1171         goto de_fault;
1172       integer_constant (2, expressionP);
1173       break;
1174
1175     case '@':
1176       if (! flag_m68k_mri)
1177         goto de_fault;
1178       integer_constant (8, expressionP);
1179       break;
1180
1181     case ':':
1182       if (! flag_m68k_mri)
1183         goto de_fault;
1184
1185       /* In MRI mode, this is a floating point constant represented
1186          using hexadecimal digits.  */
1187
1188       ++input_line_pointer;
1189       integer_constant (16, expressionP);
1190       break;
1191
1192     case '*':
1193       if (! flag_m68k_mri || is_part_of_name (*input_line_pointer))
1194         goto de_fault;
1195
1196       current_location (expressionP);
1197       break;
1198 #endif
1199
1200     default:
1201 #ifdef TC_M68K
1202     de_fault:
1203 #endif
1204       if (is_name_beginner (c)) /* Here if did not begin with a digit.  */
1205         {
1206           /* Identifier begins here.
1207              This is kludged for speed, so code is repeated.  */
1208         isname:
1209           name = --input_line_pointer;
1210           c = get_symbol_end ();
1211
1212 #ifdef md_parse_name
1213           /* This is a hook for the backend to parse certain names
1214              specially in certain contexts.  If a name always has a
1215              specific value, it can often be handled by simply
1216              entering it in the symbol table.  */
1217           if (md_parse_name (name, expressionP, mode, &c))
1218             {
1219               *input_line_pointer = c;
1220               break;
1221             }
1222 #endif
1223
1224 #ifdef TC_I960
1225           /* The MRI i960 assembler permits
1226                  lda sizeof code,g13
1227              FIXME: This should use md_parse_name.  */
1228           if (flag_mri
1229               && (strcasecmp (name, "sizeof") == 0
1230                   || strcasecmp (name, "startof") == 0))
1231             {
1232               int start;
1233               char *buf;
1234
1235               start = (name[1] == 't'
1236                        || name[1] == 'T');
1237
1238               *input_line_pointer = c;
1239               SKIP_WHITESPACE ();
1240
1241               name = input_line_pointer;
1242               c = get_symbol_end ();
1243
1244               buf = (char *) xmalloc (strlen (name) + 10);
1245               if (start)
1246                 sprintf (buf, ".startof.%s", name);
1247               else
1248                 sprintf (buf, ".sizeof.%s", name);
1249               symbolP = symbol_make (buf);
1250               free (buf);
1251
1252               expressionP->X_op = O_symbol;
1253               expressionP->X_add_symbol = symbolP;
1254               expressionP->X_add_number = 0;
1255
1256               *input_line_pointer = c;
1257               SKIP_WHITESPACE ();
1258
1259               break;
1260             }
1261 #endif
1262
1263           symbolP = symbol_find_or_make (name);
1264
1265           /* If we have an absolute symbol or a reg, then we know its
1266              value now.  */
1267           segment = S_GET_SEGMENT (symbolP);
1268           if (mode != expr_defer && segment == absolute_section)
1269             {
1270               expressionP->X_op = O_constant;
1271               expressionP->X_add_number = S_GET_VALUE (symbolP);
1272             }
1273           else if (mode != expr_defer && segment == reg_section)
1274             {
1275               expressionP->X_op = O_register;
1276               expressionP->X_add_number = S_GET_VALUE (symbolP);
1277             }
1278           else
1279             {
1280               expressionP->X_op = O_symbol;
1281               expressionP->X_add_symbol = symbolP;
1282               expressionP->X_add_number = 0;
1283             }
1284           *input_line_pointer = c;
1285         }
1286       else
1287         {
1288           /* Let the target try to parse it.  Success is indicated by changing
1289              the X_op field to something other than O_absent and pointing
1290              input_line_pointer past the expression.  If it can't parse the
1291              expression, X_op and input_line_pointer should be unchanged.  */
1292           expressionP->X_op = O_absent;
1293           --input_line_pointer;
1294           md_operand (expressionP);
1295           if (expressionP->X_op == O_absent)
1296             {
1297               ++input_line_pointer;
1298               as_bad (_("bad expression"));
1299               expressionP->X_op = O_constant;
1300               expressionP->X_add_number = 0;
1301             }
1302         }
1303       break;
1304     }
1305
1306   /* It is more 'efficient' to clean up the expressionS when they are
1307      created.  Doing it here saves lines of code.  */
1308   clean_up_expression (expressionP);
1309   SKIP_WHITESPACE ();           /* -> 1st char after operand.  */
1310   know (*input_line_pointer != ' ');
1311
1312   /* The PA port needs this information.  */
1313   if (expressionP->X_add_symbol)
1314     symbol_mark_used (expressionP->X_add_symbol);
1315
1316   expressionP->X_add_symbol = symbol_clone_if_forward_ref (expressionP->X_add_symbol);
1317   expressionP->X_op_symbol = symbol_clone_if_forward_ref (expressionP->X_op_symbol);
1318
1319   switch (expressionP->X_op)
1320     {
1321     default:
1322       return absolute_section;
1323     case O_symbol:
1324       return S_GET_SEGMENT (expressionP->X_add_symbol);
1325     case O_register:
1326       return reg_section;
1327     }
1328 }
1329 \f
1330 /* Internal.  Simplify a struct expression for use by expr ().  */
1331
1332 /* In:  address of an expressionS.
1333         The X_op field of the expressionS may only take certain values.
1334         Elsewise we waste time special-case testing. Sigh. Ditto SEG_ABSENT.
1335
1336    Out: expressionS may have been modified:
1337         Unused fields zeroed to help expr ().  */
1338
1339 static void
1340 clean_up_expression (expressionS *expressionP)
1341 {
1342   switch (expressionP->X_op)
1343     {
1344     case O_illegal:
1345     case O_absent:
1346       expressionP->X_add_number = 0;
1347       /* Fall through.  */
1348     case O_big:
1349     case O_constant:
1350     case O_register:
1351       expressionP->X_add_symbol = NULL;
1352       /* Fall through.  */
1353     case O_symbol:
1354     case O_uminus:
1355     case O_bit_not:
1356       expressionP->X_op_symbol = NULL;
1357       break;
1358     default:
1359       break;
1360     }
1361 }
1362 \f
1363 /* Expression parser.  */
1364
1365 /* We allow an empty expression, and just assume (absolute,0) silently.
1366    Unary operators and parenthetical expressions are treated as operands.
1367    As usual, Q==quantity==operand, O==operator, X==expression mnemonics.
1368
1369    We used to do an aho/ullman shift-reduce parser, but the logic got so
1370    warped that I flushed it and wrote a recursive-descent parser instead.
1371    Now things are stable, would anybody like to write a fast parser?
1372    Most expressions are either register (which does not even reach here)
1373    or 1 symbol. Then "symbol+constant" and "symbol-symbol" are common.
1374    So I guess it doesn't really matter how inefficient more complex expressions
1375    are parsed.
1376
1377    After expr(RANK,resultP) input_line_pointer->operator of rank <= RANK.
1378    Also, we have consumed any leading or trailing spaces (operand does that)
1379    and done all intervening operators.
1380
1381    This returns the segment of the result, which will be
1382    absolute_section or the segment of a symbol.  */
1383
1384 #undef __
1385 #define __ O_illegal
1386 #ifndef O_SINGLE_EQ
1387 #define O_SINGLE_EQ O_illegal
1388 #endif
1389
1390 /* Maps ASCII -> operators.  */
1391 static const operatorT op_encoding[256] = {
1392   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1393   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1394
1395   __, O_bit_or_not, __, __, __, O_modulus, O_bit_and, __,
1396   __, __, O_multiply, O_add, __, O_subtract, __, O_divide,
1397   __, __, __, __, __, __, __, __,
1398   __, __, __, __, O_lt, O_SINGLE_EQ, O_gt, __,
1399   __, __, __, __, __, __, __, __,
1400   __, __, __, __, __, __, __, __,
1401   __, __, __, __, __, __, __, __,
1402   __, __, __,
1403 #ifdef NEED_INDEX_OPERATOR
1404   O_index,
1405 #else
1406   __,
1407 #endif
1408   __, __, O_bit_exclusive_or, __,
1409   __, __, __, __, __, __, __, __,
1410   __, __, __, __, __, __, __, __,
1411   __, __, __, __, __, __, __, __,
1412   __, __, __, __, O_bit_inclusive_or, __, __, __,
1413
1414   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1415   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1416   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1417   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1418   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1419   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1420   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
1421   __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __
1422 };
1423
1424 /* Rank Examples
1425    0    operand, (expression)
1426    1    ||
1427    2    &&
1428    3    == <> < <= >= >
1429    4    + -
1430    5    used for * / % in MRI mode
1431    6    & ^ ! |
1432    7    * / % << >>
1433    8    unary - unary ~
1434 */
1435 static operator_rankT op_rank[] = {
1436   0,    /* O_illegal */
1437   0,    /* O_absent */
1438   0,    /* O_constant */
1439   0,    /* O_symbol */
1440   0,    /* O_symbol_rva */
1441   0,    /* O_register */
1442   0,    /* O_big */
1443   9,    /* O_uminus */
1444   9,    /* O_bit_not */
1445   9,    /* O_logical_not */
1446   8,    /* O_multiply */
1447   8,    /* O_divide */
1448   8,    /* O_modulus */
1449   8,    /* O_left_shift */
1450   8,    /* O_right_shift */
1451   7,    /* O_bit_inclusive_or */
1452   7,    /* O_bit_or_not */
1453   7,    /* O_bit_exclusive_or */
1454   7,    /* O_bit_and */
1455   5,    /* O_add */
1456   5,    /* O_subtract */
1457   4,    /* O_eq */
1458   4,    /* O_ne */
1459   4,    /* O_lt */
1460   4,    /* O_le */
1461   4,    /* O_ge */
1462   4,    /* O_gt */
1463   3,    /* O_logical_and */
1464   2,    /* O_logical_or */
1465   1,    /* O_index */
1466   0,    /* O_md1 */
1467   0,    /* O_md2 */
1468   0,    /* O_md3 */
1469   0,    /* O_md4 */
1470   0,    /* O_md5 */
1471   0,    /* O_md6 */
1472   0,    /* O_md7 */
1473   0,    /* O_md8 */
1474   0,    /* O_md9 */
1475   0,    /* O_md10 */
1476   0,    /* O_md11 */
1477   0,    /* O_md12 */
1478   0,    /* O_md13 */
1479   0,    /* O_md14 */
1480   0,    /* O_md15 */
1481   0,    /* O_md16 */
1482 };
1483
1484 /* Unfortunately, in MRI mode for the m68k, multiplication and
1485    division have lower precedence than the bit wise operators.  This
1486    function sets the operator precedences correctly for the current
1487    mode.  Also, MRI uses a different bit_not operator, and this fixes
1488    that as well.  */
1489
1490 #define STANDARD_MUL_PRECEDENCE 8
1491 #define MRI_MUL_PRECEDENCE 6
1492
1493 void
1494 expr_set_precedence (void)
1495 {
1496   if (flag_m68k_mri)
1497     {
1498       op_rank[O_multiply] = MRI_MUL_PRECEDENCE;
1499       op_rank[O_divide] = MRI_MUL_PRECEDENCE;
1500       op_rank[O_modulus] = MRI_MUL_PRECEDENCE;
1501     }
1502   else
1503     {
1504       op_rank[O_multiply] = STANDARD_MUL_PRECEDENCE;
1505       op_rank[O_divide] = STANDARD_MUL_PRECEDENCE;
1506       op_rank[O_modulus] = STANDARD_MUL_PRECEDENCE;
1507     }
1508 }
1509
1510 /* Initialize the expression parser.  */
1511
1512 void
1513 expr_begin (void)
1514 {
1515   expr_set_precedence ();
1516
1517   /* Verify that X_op field is wide enough.  */
1518   {
1519     expressionS e;
1520     e.X_op = O_max;
1521     assert (e.X_op == O_max);
1522   }
1523 }
1524 \f
1525 /* Return the encoding for the operator at INPUT_LINE_POINTER, and
1526    sets NUM_CHARS to the number of characters in the operator.
1527    Does not advance INPUT_LINE_POINTER.  */
1528
1529 static inline operatorT
1530 operator (int *num_chars)
1531 {
1532   int c;
1533   operatorT ret;
1534
1535   c = *input_line_pointer & 0xff;
1536   *num_chars = 1;
1537
1538   if (is_end_of_line[c])
1539     return O_illegal;
1540
1541   switch (c)
1542     {
1543     default:
1544       return op_encoding[c];
1545
1546     case '+':
1547     case '-':
1548       return op_encoding[c];
1549
1550     case '<':
1551       switch (input_line_pointer[1])
1552         {
1553         default:
1554           return op_encoding[c];
1555         case '<':
1556           ret = O_left_shift;
1557           break;
1558         case '>':
1559           ret = O_ne;
1560           break;
1561         case '=':
1562           ret = O_le;
1563           break;
1564         }
1565       *num_chars = 2;
1566       return ret;
1567
1568     case '=':
1569       if (input_line_pointer[1] != '=')
1570         return op_encoding[c];
1571
1572       *num_chars = 2;
1573       return O_eq;
1574
1575     case '>':
1576       switch (input_line_pointer[1])
1577         {
1578         default:
1579           return op_encoding[c];
1580         case '>':
1581           ret = O_right_shift;
1582           break;
1583         case '=':
1584           ret = O_ge;
1585           break;
1586         }
1587       *num_chars = 2;
1588       return ret;
1589
1590     case '!':
1591       switch (input_line_pointer[1])
1592         {
1593         case '!':
1594           /* We accept !! as equivalent to ^ for MRI compatibility. */
1595           *num_chars = 2;
1596           return O_bit_exclusive_or;
1597         case '=':
1598           /* We accept != as equivalent to <>.  */
1599           *num_chars = 2;
1600           return O_ne;
1601         default:
1602           if (flag_m68k_mri)
1603             return O_bit_inclusive_or;
1604           return op_encoding[c];
1605         }
1606
1607     case '|':
1608       if (input_line_pointer[1] != '|')
1609         return op_encoding[c];
1610
1611       *num_chars = 2;
1612       return O_logical_or;
1613
1614     case '&':
1615       if (input_line_pointer[1] != '&')
1616         return op_encoding[c];
1617
1618       *num_chars = 2;
1619       return O_logical_and;
1620     }
1621
1622   /* NOTREACHED  */
1623 }
1624
1625 /* Parse an expression.  */
1626
1627 segT
1628 expr (int rankarg,              /* Larger # is higher rank.  */
1629       expressionS *resultP,     /* Deliver result here.  */
1630       enum expr_mode mode       /* Controls behavior.  */)
1631 {
1632   operator_rankT rank = (operator_rankT) rankarg;
1633   segT retval;
1634   expressionS right;
1635   operatorT op_left;
1636   operatorT op_right;
1637   int op_chars;
1638
1639   know (rankarg >= 0);
1640
1641   /* Save the value of dot for the fixup code.  */
1642   if (rank == 0)
1643     dot_value = frag_now_fix ();
1644
1645   retval = operand (resultP, mode);
1646
1647   /* operand () gobbles spaces.  */
1648   know (*input_line_pointer != ' ');
1649
1650   op_left = operator (&op_chars);
1651   while (op_left != O_illegal && op_rank[(int) op_left] > rank)
1652     {
1653       segT rightseg;
1654       bfd_vma frag_off;
1655
1656       input_line_pointer += op_chars;   /* -> after operator.  */
1657
1658       rightseg = expr (op_rank[(int) op_left], &right, mode);
1659       if (right.X_op == O_absent)
1660         {
1661           as_warn (_("missing operand; zero assumed"));
1662           right.X_op = O_constant;
1663           right.X_add_number = 0;
1664           right.X_add_symbol = NULL;
1665           right.X_op_symbol = NULL;
1666         }
1667
1668       know (*input_line_pointer != ' ');
1669
1670       if (op_left == O_index)
1671         {
1672           if (*input_line_pointer != ']')
1673             as_bad ("missing right bracket");
1674           else
1675             {
1676               ++input_line_pointer;
1677               SKIP_WHITESPACE ();
1678             }
1679         }
1680
1681       op_right = operator (&op_chars);
1682
1683       know (op_right == O_illegal
1684             || op_rank[(int) op_right] <= op_rank[(int) op_left]);
1685       know ((int) op_left >= (int) O_multiply
1686             && (int) op_left <= (int) O_index);
1687
1688       /* input_line_pointer->after right-hand quantity.  */
1689       /* left-hand quantity in resultP.  */
1690       /* right-hand quantity in right.  */
1691       /* operator in op_left.  */
1692
1693       if (resultP->X_op == O_big)
1694         {
1695           if (resultP->X_add_number > 0)
1696             as_warn (_("left operand is a bignum; integer 0 assumed"));
1697           else
1698             as_warn (_("left operand is a float; integer 0 assumed"));
1699           resultP->X_op = O_constant;
1700           resultP->X_add_number = 0;
1701           resultP->X_add_symbol = NULL;
1702           resultP->X_op_symbol = NULL;
1703         }
1704       if (right.X_op == O_big)
1705         {
1706           if (right.X_add_number > 0)
1707             as_warn (_("right operand is a bignum; integer 0 assumed"));
1708           else
1709             as_warn (_("right operand is a float; integer 0 assumed"));
1710           right.X_op = O_constant;
1711           right.X_add_number = 0;
1712           right.X_add_symbol = NULL;
1713           right.X_op_symbol = NULL;
1714         }
1715
1716       /* Optimize common cases.  */
1717 #ifdef md_optimize_expr
1718       if (md_optimize_expr (resultP, op_left, &right))
1719         {
1720           /* Skip.  */
1721           ;
1722         }
1723       else
1724 #endif
1725       if (op_left == O_add && right.X_op == O_constant)
1726         {
1727           /* X + constant.  */
1728           resultP->X_add_number += right.X_add_number;
1729         }
1730       /* This case comes up in PIC code.  */
1731       else if (op_left == O_subtract
1732                && right.X_op == O_symbol
1733                && resultP->X_op == O_symbol
1734                && retval == rightseg
1735                && (SEG_NORMAL (rightseg)
1736                    || right.X_add_symbol == resultP->X_add_symbol)
1737                && frag_offset_fixed_p (symbol_get_frag (resultP->X_add_symbol),
1738                                        symbol_get_frag (right.X_add_symbol),
1739                                        &frag_off))
1740         {
1741           resultP->X_add_number -= right.X_add_number;
1742           resultP->X_add_number -= frag_off / OCTETS_PER_BYTE;
1743           resultP->X_add_number += (S_GET_VALUE (resultP->X_add_symbol)
1744                                     - S_GET_VALUE (right.X_add_symbol));
1745           resultP->X_op = O_constant;
1746           resultP->X_add_symbol = 0;
1747         }
1748       else if (op_left == O_subtract && right.X_op == O_constant)
1749         {
1750           /* X - constant.  */
1751           resultP->X_add_number -= right.X_add_number;
1752         }
1753       else if (op_left == O_add && resultP->X_op == O_constant)
1754         {
1755           /* Constant + X.  */
1756           resultP->X_op = right.X_op;
1757           resultP->X_add_symbol = right.X_add_symbol;
1758           resultP->X_op_symbol = right.X_op_symbol;
1759           resultP->X_add_number += right.X_add_number;
1760           retval = rightseg;
1761         }
1762       else if (resultP->X_op == O_constant && right.X_op == O_constant)
1763         {
1764           /* Constant OP constant.  */
1765           offsetT v = right.X_add_number;
1766           if (v == 0 && (op_left == O_divide || op_left == O_modulus))
1767             {
1768               as_warn (_("division by zero"));
1769               v = 1;
1770             }
1771           switch (op_left)
1772             {
1773             default:                    abort ();
1774             case O_multiply:            resultP->X_add_number *= v; break;
1775             case O_divide:              resultP->X_add_number /= v; break;
1776             case O_modulus:             resultP->X_add_number %= v; break;
1777             case O_left_shift:          resultP->X_add_number <<= v; break;
1778             case O_right_shift:
1779               /* We always use unsigned shifts, to avoid relying on
1780                  characteristics of the compiler used to compile gas.  */
1781               resultP->X_add_number =
1782                 (offsetT) ((valueT) resultP->X_add_number >> (valueT) v);
1783               break;
1784             case O_bit_inclusive_or:    resultP->X_add_number |= v; break;
1785             case O_bit_or_not:          resultP->X_add_number |= ~v; break;
1786             case O_bit_exclusive_or:    resultP->X_add_number ^= v; break;
1787             case O_bit_and:             resultP->X_add_number &= v; break;
1788               /* Constant + constant (O_add) is handled by the
1789                  previous if statement for constant + X, so is omitted
1790                  here.  */
1791             case O_subtract:            resultP->X_add_number -= v; break;
1792             case O_eq:
1793               resultP->X_add_number =
1794                 resultP->X_add_number == v ? ~ (offsetT) 0 : 0;
1795               break;
1796             case O_ne:
1797               resultP->X_add_number =
1798                 resultP->X_add_number != v ? ~ (offsetT) 0 : 0;
1799               break;
1800             case O_lt:
1801               resultP->X_add_number =
1802                 resultP->X_add_number <  v ? ~ (offsetT) 0 : 0;
1803               break;
1804             case O_le:
1805               resultP->X_add_number =
1806                 resultP->X_add_number <= v ? ~ (offsetT) 0 : 0;
1807               break;
1808             case O_ge:
1809               resultP->X_add_number =
1810                 resultP->X_add_number >= v ? ~ (offsetT) 0 : 0;
1811               break;
1812             case O_gt:
1813               resultP->X_add_number =
1814                 resultP->X_add_number >  v ? ~ (offsetT) 0 : 0;
1815               break;
1816             case O_logical_and:
1817               resultP->X_add_number = resultP->X_add_number && v;
1818               break;
1819             case O_logical_or:
1820               resultP->X_add_number = resultP->X_add_number || v;
1821               break;
1822             }
1823         }
1824       else if (resultP->X_op == O_symbol
1825                && right.X_op == O_symbol
1826                && (op_left == O_add
1827                    || op_left == O_subtract
1828                    || (resultP->X_add_number == 0
1829                        && right.X_add_number == 0)))
1830         {
1831           /* Symbol OP symbol.  */
1832           resultP->X_op = op_left;
1833           resultP->X_op_symbol = right.X_add_symbol;
1834           if (op_left == O_add)
1835             resultP->X_add_number += right.X_add_number;
1836           else if (op_left == O_subtract)
1837             {
1838               resultP->X_add_number -= right.X_add_number;
1839               if (retval == rightseg && SEG_NORMAL (retval))
1840                 {
1841                   retval = absolute_section;
1842                   rightseg = absolute_section;
1843                 }
1844             }
1845         }
1846       else
1847         {
1848           /* The general case.  */
1849           resultP->X_add_symbol = make_expr_symbol (resultP);
1850           resultP->X_op_symbol = make_expr_symbol (&right);
1851           resultP->X_op = op_left;
1852           resultP->X_add_number = 0;
1853           resultP->X_unsigned = 1;
1854         }
1855
1856       if (retval != rightseg)
1857         {
1858           if (! SEG_NORMAL (retval))
1859             {
1860               if (retval != undefined_section || SEG_NORMAL (rightseg))
1861                 retval = rightseg;
1862             }
1863           else if (SEG_NORMAL (rightseg)
1864 #ifdef DIFF_EXPR_OK
1865                    && op_left != O_subtract
1866 #endif
1867                    )
1868             as_bad (_("operation combines symbols in different segments"));
1869         }
1870
1871       op_left = op_right;
1872     }                           /* While next operator is >= this rank.  */
1873
1874   /* The PA port needs this information.  */
1875   if (resultP->X_add_symbol)
1876     symbol_mark_used (resultP->X_add_symbol);
1877
1878   if (rank == 0 && mode == expr_evaluate)
1879     resolve_expression (resultP);
1880
1881   return resultP->X_op == O_constant ? absolute_section : retval;
1882 }
1883
1884 /* Resolve an expression without changing any symbols/sub-expressions
1885    used.  */
1886
1887 int
1888 resolve_expression (expressionS *expressionP)
1889 {
1890   /* Help out with CSE.  */
1891   valueT final_val = expressionP->X_add_number;
1892   symbolS *add_symbol = expressionP->X_add_symbol;
1893   symbolS *op_symbol = expressionP->X_op_symbol;
1894   operatorT op = expressionP->X_op;
1895   valueT left, right;
1896   segT seg_left, seg_right;
1897   fragS *frag_left, *frag_right;
1898   bfd_vma frag_off;
1899
1900   switch (op)
1901     {
1902     default:
1903       return 0;
1904
1905     case O_constant:
1906     case O_register:
1907       left = 0;
1908       break;
1909
1910     case O_symbol:
1911     case O_symbol_rva:
1912       if (!snapshot_symbol (&add_symbol, &left, &seg_left, &frag_left))
1913         return 0;
1914
1915       break;
1916
1917     case O_uminus:
1918     case O_bit_not:
1919     case O_logical_not:
1920       if (!snapshot_symbol (&add_symbol, &left, &seg_left, &frag_left))
1921         return 0;
1922
1923       if (seg_left != absolute_section)
1924         return 0;
1925
1926       if (op == O_logical_not)
1927         left = !left;
1928       else if (op == O_uminus)
1929         left = -left;
1930       else
1931         left = ~left;
1932       op = O_constant;
1933       break;
1934
1935     case O_multiply:
1936     case O_divide:
1937     case O_modulus:
1938     case O_left_shift:
1939     case O_right_shift:
1940     case O_bit_inclusive_or:
1941     case O_bit_or_not:
1942     case O_bit_exclusive_or:
1943     case O_bit_and:
1944     case O_add:
1945     case O_subtract:
1946     case O_eq:
1947     case O_ne:
1948     case O_lt:
1949     case O_le:
1950     case O_ge:
1951     case O_gt:
1952     case O_logical_and:
1953     case O_logical_or:
1954       if (!snapshot_symbol (&add_symbol, &left, &seg_left, &frag_left)
1955           || !snapshot_symbol (&op_symbol, &right, &seg_right, &frag_right))
1956         return 0;
1957
1958       /* Simplify addition or subtraction of a constant by folding the
1959          constant into X_add_number.  */
1960       if (op == O_add)
1961         {
1962           if (seg_right == absolute_section)
1963             {
1964               final_val += right;
1965               op = O_symbol;
1966               break;
1967             }
1968           else if (seg_left == absolute_section)
1969             {
1970               final_val += left;
1971               left = right;
1972               seg_left = seg_right;
1973               add_symbol = op_symbol;
1974               op = O_symbol;
1975               break;
1976             }
1977         }
1978       else if (op == O_subtract)
1979         {
1980           if (seg_right == absolute_section)
1981             {
1982               final_val -= right;
1983               op = O_symbol;
1984               break;
1985             }
1986         }
1987
1988       /* Equality and non-equality tests are permitted on anything.
1989          Subtraction, and other comparison operators are permitted if
1990          both operands are in the same section.
1991          Shifts by constant zero are permitted on anything.
1992          Multiplies, bit-ors, and bit-ands with constant zero are
1993          permitted on anything.
1994          Multiplies and divides by constant one are permitted on
1995          anything.
1996          Binary operations with both operands being the same register
1997          or undefined symbol are permitted if the result doesn't depend
1998          on the input value.
1999          Otherwise, both operands must be absolute.  We already handled
2000          the case of addition or subtraction of a constant above.  */
2001       frag_off = 0;
2002       if (!(seg_left == absolute_section
2003                && seg_right == absolute_section)
2004           && !(op == O_eq || op == O_ne)
2005           && !((op == O_subtract
2006                 || op == O_lt || op == O_le || op == O_ge || op == O_gt)
2007                && seg_left == seg_right
2008                && (finalize_syms
2009                    || frag_offset_fixed_p (frag_left, frag_right, &frag_off))
2010                && (seg_left != reg_section || left == right)
2011                && (seg_left != undefined_section || add_symbol == op_symbol)))
2012         {
2013           if ((seg_left == absolute_section && left == 0)
2014               || (seg_right == absolute_section && right == 0))
2015             {
2016               if (op == O_bit_exclusive_or || op == O_bit_inclusive_or)
2017                 {
2018                   if (seg_right != absolute_section || right != 0)
2019                     {
2020                       seg_left = seg_right;
2021                       left = right;
2022                       add_symbol = op_symbol;
2023                     }
2024                   op = O_symbol;
2025                   break;
2026                 }
2027               else if (op == O_left_shift || op == O_right_shift)
2028                 {
2029                   if (seg_left != absolute_section || left != 0)
2030                     {
2031                       op = O_symbol;
2032                       break;
2033                     }
2034                 }
2035               else if (op != O_multiply
2036                        && op != O_bit_or_not && op != O_bit_and)
2037                 return 0;
2038             }
2039           else if (op == O_multiply
2040                    && seg_left == absolute_section && left == 1)
2041             {
2042               seg_left = seg_right;
2043               left = right;
2044               add_symbol = op_symbol;
2045               op = O_symbol;
2046               break;
2047             }
2048           else if ((op == O_multiply || op == O_divide)
2049                    && seg_right == absolute_section && right == 1)
2050             {
2051               op = O_symbol;
2052               break;
2053             }
2054           else if (left != right
2055                    || ((seg_left != reg_section || seg_right != reg_section)
2056                        && (seg_left != undefined_section
2057                            || seg_right != undefined_section
2058                            || add_symbol != op_symbol)))
2059             return 0;
2060           else if (op == O_bit_and || op == O_bit_inclusive_or)
2061             {
2062               op = O_symbol;
2063               break;
2064             }
2065           else if (op != O_bit_exclusive_or && op != O_bit_or_not)
2066             return 0;
2067         }
2068
2069       right += frag_off / OCTETS_PER_BYTE;
2070       switch (op)
2071         {
2072         case O_add:                     left += right; break;
2073         case O_subtract:                left -= right; break;
2074         case O_multiply:                left *= right; break;
2075         case O_divide:
2076           if (right == 0)
2077             return 0;
2078           left = (offsetT) left / (offsetT) right;
2079           break;
2080         case O_modulus:
2081           if (right == 0)
2082             return 0;
2083           left = (offsetT) left % (offsetT) right;
2084           break;
2085         case O_left_shift:              left <<= right; break;
2086         case O_right_shift:             left >>= right; break;
2087         case O_bit_inclusive_or:        left |= right; break;
2088         case O_bit_or_not:              left |= ~right; break;
2089         case O_bit_exclusive_or:        left ^= right; break;
2090         case O_bit_and:                 left &= right; break;
2091         case O_eq:
2092         case O_ne:
2093           left = (left == right
2094                   && seg_left == seg_right
2095                   && (finalize_syms || frag_left == frag_right)
2096                   && (seg_left != undefined_section
2097                       || add_symbol == op_symbol)
2098                   ? ~ (valueT) 0 : 0);
2099           if (op == O_ne)
2100             left = ~left;
2101           break;
2102         case O_lt:
2103           left = (offsetT) left <  (offsetT) right ? ~ (valueT) 0 : 0;
2104           break;
2105         case O_le:
2106           left = (offsetT) left <= (offsetT) right ? ~ (valueT) 0 : 0;
2107           break;
2108         case O_ge:
2109           left = (offsetT) left >= (offsetT) right ? ~ (valueT) 0 : 0;
2110           break;
2111         case O_gt:
2112           left = (offsetT) left >  (offsetT) right ? ~ (valueT) 0 : 0;
2113           break;
2114         case O_logical_and:     left = left && right; break;
2115         case O_logical_or:      left = left || right; break;
2116         default:                abort ();
2117         }
2118
2119       op = O_constant;
2120       break;
2121     }
2122
2123   if (op == O_symbol)
2124     {
2125       if (seg_left == absolute_section)
2126         op = O_constant;
2127       else if (seg_left == reg_section && final_val == 0)
2128         op = O_register;
2129       else if (add_symbol != expressionP->X_add_symbol)
2130         final_val += left;
2131       expressionP->X_add_symbol = add_symbol;
2132     }
2133   expressionP->X_op = op;
2134
2135   if (op == O_constant || op == O_register)
2136     final_val += left;
2137   expressionP->X_add_number = final_val;
2138
2139   return 1;
2140 }
2141 \f
2142 /* This lives here because it belongs equally in expr.c & read.c.
2143    expr.c is just a branch office read.c anyway, and putting it
2144    here lessens the crowd at read.c.
2145
2146    Assume input_line_pointer is at start of symbol name.
2147    Advance input_line_pointer past symbol name.
2148    Turn that character into a '\0', returning its former value.
2149    This allows a string compare (RMS wants symbol names to be strings)
2150    of the symbol name.
2151    There will always be a char following symbol name, because all good
2152    lines end in end-of-line.  */
2153
2154 char
2155 get_symbol_end (void)
2156 {
2157   char c;
2158
2159   /* We accept \001 in a name in case this is being called with a
2160      constructed string.  */
2161   if (is_name_beginner (c = *input_line_pointer++) || c == '\001')
2162     {
2163       while (is_part_of_name (c = *input_line_pointer++)
2164              || c == '\001')
2165         ;
2166       if (is_name_ender (c))
2167         c = *input_line_pointer++;
2168     }
2169   *--input_line_pointer = 0;
2170   return (c);
2171 }
2172
2173 unsigned int
2174 get_single_number (void)
2175 {
2176   expressionS exp;
2177   operand (&exp, expr_normal);
2178   return exp.X_add_number;
2179 }