/* expr.c -operands, expressions-
- Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+ Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
integer_constant (0, expressionP);
break;
}
- if (NUMBERS_WITH_SUFFIX)
- {
- /* Check for a binary constant. */
- for (s = input_line_pointer; *s == '0' || *s == '1'; s++)
- ;
- if (toupper (*s) == 'B')
- {
- integer_constant (0, expressionP);
- break;
- }
- /* Check for an octal constant. */
- for (s = input_line_pointer; *s >= '0' && *s <= '7'; s++)
- ;
- if (toupper (*s) == 'Q')
- {
- integer_constant (0, expressionP);
- break;
- }
- }
}
c = *input_line_pointer;
switch (c)
break;
case 'b':
- if (LOCAL_LABELS_FB && ! flag_m68k_mri && ! NUMBERS_WITH_SUFFIX)
+ if (LOCAL_LABELS_FB && ! (flag_m68k_mri || NUMBERS_WITH_SUFFIX))
{
/* This code used to check for '+' and '-' here, and, in
some conditions, fall through to call
/* Fall through. */
case 'B':
input_line_pointer++;
- if (flag_m68k_mri)
+ if (flag_m68k_mri || NUMBERS_WITH_SUFFIX)
goto default_case;
integer_constant (2, expressionP);
break;
case '5':
case '6':
case '7':
- integer_constant (flag_m68k_mri ? 0 : 8, expressionP);
+ integer_constant ((flag_m68k_mri || NUMBERS_WITH_SUFFIX)
+ ? 0 : 8,
+ expressionP);
break;
case 'f':
number, make it one. Otherwise, make it a local label,
and try to deal with parsing the rest later. */
if (!input_line_pointer[1]
- || (is_end_of_line[0xff & input_line_pointer[1]]))
+ || (is_end_of_line[0xff & input_line_pointer[1]])
+ || strchr (FLT_CHARS, 'f') == NULL)
goto is_0f_label;
{
char *cp = input_line_pointer + 1;
case 'd':
case 'D':
- if (flag_m68k_mri)
+ if (flag_m68k_mri || NUMBERS_WITH_SUFFIX)
{
integer_constant (0, expressionP);
break;
/* here with input_line_pointer->char after "(...)" */
return segment;
+#ifdef TC_M68K
case 'E':
if (! flag_m68k_mri || *input_line_pointer != '\'')
goto de_fault;
goto de_fault;
++input_line_pointer;
/* Fall through. */
+#endif
case '\'':
if (! flag_m68k_mri)
{
(void) operand (expressionP);
break;
+#ifdef TC_M68K
case '"':
/* Double quote is the bitwise not operator in MRI mode. */
if (! flag_m68k_mri)
goto de_fault;
/* Fall through. */
+#endif
case '~':
/* ~ is permitted to start a label on the Delta. */
if (is_name_beginner (c))
}
break;
+#if defined (DOLLAR_DOT) || defined (TC_M68K)
case '$':
/* $ is the program counter when in MRI mode, or when DOLLAR_DOT
is defined. */
current_location (expressionP);
break;
+#endif
case '.':
if (!is_part_of_name (*input_line_pointer))
input_line_pointer--;
break;
+#ifdef TC_M68K
case '%':
if (! flag_m68k_mri)
goto de_fault;
current_location (expressionP);
break;
+#endif
default:
+#ifdef TC_M68K
de_fault:
+#endif
if (is_end_of_line[(unsigned char) c])
goto eol;
if (is_name_beginner (c)) /* here if did not begin with a digit */
}
/* Optimize common cases. */
+#ifdef md_optimize_expr
+ if (md_optimize_expr (resultP, op_left, &right))
+ {
+ /* skip */;
+ }
+ else
+#endif
if (op_left == O_add && right.X_op == O_constant)
{
/* X + constant. */