oops - fix up changelog entry
[deliverable/binutils-gdb.git] / gas / expr.h
index d63ab7fa04a749574300b6c33fd725d88a1ad3ad..a270359644d5475cd188336bf364552b058ac51a 100644 (file)
@@ -1,11 +1,11 @@
 /* expr.h -> header file for expr.c
 /* expr.h -> header file for expr.c
-   Copyright (C) 1987, 92-99, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1987-2016 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
@@ -15,8 +15,8 @@
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 /*
  * By popular demand, we define a struct to represent an expression.
 
 /*
  * By popular demand, we define a struct to represent an expression.
@@ -67,23 +67,23 @@ typedef enum {
   O_multiply,
   /* (X_add_symbol / X_op_symbol) + X_add_number.  */
   O_divide,
   O_multiply,
   /* (X_add_symbol / X_op_symbol) + X_add_number.  */
   O_divide,
-  /* X_add_symbol % X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol % X_op_symbol) + X_add_number.  */
   O_modulus,
   O_modulus,
-  /* X_add_symbol << X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol << X_op_symbol) + X_add_number.  */
   O_left_shift,
   O_left_shift,
-  /* X_add_symbol >> X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol >> X_op_symbol) + X_add_number.  */
   O_right_shift,
   O_right_shift,
-  /* X_add_symbol | X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol | X_op_symbol) + X_add_number.  */
   O_bit_inclusive_or,
   O_bit_inclusive_or,
-  /* X_add_symbol |~ X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol |~ X_op_symbol) + X_add_number.  */
   O_bit_or_not,
   O_bit_or_not,
-  /* X_add_symbol ^ X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol ^ X_op_symbol) + X_add_number.  */
   O_bit_exclusive_or,
   O_bit_exclusive_or,
-  /* X_add_symbol & X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol & X_op_symbol) + X_add_number.  */
   O_bit_and,
   O_bit_and,
-  /* X_add_symbol + X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol + X_op_symbol) + X_add_number.  */
   O_add,
   O_add,
-  /* X_add_symbol - X_op_symbol) + X_add_number.  */
+  /* (X_add_symbol - X_op_symbol) + X_add_number.  */
   O_subtract,
   /* (X_add_symbol == X_op_symbol) + X_add_number.  */
   O_eq,
   O_subtract,
   /* (X_add_symbol == X_op_symbol) + X_add_number.  */
   O_eq,
@@ -106,6 +106,8 @@ typedef enum {
   /* machine dependent operators */
   O_md1,  O_md2,  O_md3,  O_md4,  O_md5,  O_md6,  O_md7,  O_md8,
   O_md9,  O_md10, O_md11, O_md12, O_md13, O_md14, O_md15, O_md16,
   /* machine dependent operators */
   O_md1,  O_md2,  O_md3,  O_md4,  O_md5,  O_md6,  O_md7,  O_md8,
   O_md9,  O_md10, O_md11, O_md12, O_md13, O_md14, O_md15, O_md16,
+  O_md17, O_md18, O_md19, O_md20, O_md21, O_md22, O_md23, O_md24,
+  O_md25, O_md26, O_md27, O_md28, O_md29, O_md30, O_md31, O_md32,
   /* this must be the largest value */
   O_max
 } operatorT;
   /* this must be the largest value */
   O_max
 } operatorT;
@@ -133,6 +135,11 @@ typedef struct expressionS {
      when performing arithmetic on these values).
      FIXME: This field is not set very reliably.  */
   unsigned int X_unsigned : 1;
      when performing arithmetic on these values).
      FIXME: This field is not set very reliably.  */
   unsigned int X_unsigned : 1;
+  /* This is used to implement "word size + 1 bit" arithmetic, so that e.g.
+     expressions used with .sleb128 directives can use the full range available
+     for an unsigned word, but can also properly represent all values of a
+     signed word.  */
+  unsigned int X_extrabit : 1;
 
   /* 7 additional bits can be defined if needed.  */
 
 
   /* 7 additional bits can be defined if needed.  */
 
@@ -140,8 +147,17 @@ typedef struct expressionS {
   unsigned short X_md;
 } expressionS;
 
   unsigned short X_md;
 } expressionS;
 
+enum expr_mode
+{
+  expr_evaluate,
+  expr_normal,
+  expr_defer
+};
+
 /* "result" should be type (expressionS *).  */
 /* "result" should be type (expressionS *).  */
-#define expression(result) expr (0, result)
+#define expression(result) expr (0, result, expr_normal)
+#define expression_and_evaluate(result) expr (0, result, expr_evaluate)
+#define deferred_expression(result) expr (0, result, expr_defer)
 
 /* If an expression is O_big, look here for its value. These common
    data may be clobbered whenever expr() is called.  */
 
 /* If an expression is O_big, look here for its value. These common
    data may be clobbered whenever expr() is called.  */
@@ -154,16 +170,20 @@ extern LITTLENUM_TYPE generic_bignum[];
 
 typedef char operator_rankT;
 
 
 typedef char operator_rankT;
 
-extern char get_symbol_end PARAMS ((void));
-extern void expr_begin PARAMS ((void));
-extern void expr_set_precedence PARAMS ((void));
-extern segT expr PARAMS ((int rank, expressionS * resultP));
-extern unsigned int get_single_number PARAMS ((void));
-extern symbolS *make_expr_symbol PARAMS ((expressionS * expressionP));
-extern int expr_symbol_where
-  PARAMS ((symbolS *, char **, unsigned int *));
-
-extern symbolS *expr_build_uconstant PARAMS ((offsetT));
-extern symbolS *expr_build_unary PARAMS ((operatorT, symbolS *));
-extern symbolS *expr_build_binary PARAMS ((operatorT, symbolS *, symbolS *));
-extern symbolS *expr_build_dot PARAMS ((void));
+extern char get_symbol_name (char **);
+extern char restore_line_pointer (char);
+extern void expr_begin (void);
+extern void expr_set_precedence (void);
+extern void expr_set_rank (operatorT, operator_rankT);
+extern void add_to_result (expressionS *, offsetT, int);
+extern void subtract_from_result (expressionS *, offsetT, int);
+extern segT expr (int, expressionS *, enum expr_mode);
+extern unsigned int get_single_number (void);
+extern symbolS *make_expr_symbol (expressionS * expressionP);
+extern int expr_symbol_where (symbolS *, const char **, unsigned int *);
+extern void current_location (expressionS *);
+
+extern symbolS *expr_build_uconstant (offsetT);
+extern symbolS *expr_build_dot (void);
+
+int resolve_expression (expressionS *);
This page took 0.030059 seconds and 4 git commands to generate.