* arm-tdep.c (thumb_get_next_pc_raw): Correctly detect TBH
[deliverable/binutils-gdb.git] / gas / cond.c
index 0dd919c32b3d381bcaf2f0beb27a5d6220920d30..bcdc4bfcfc3f2ca595266d6a1d2c4873bf9042e4 100644 (file)
@@ -1,12 +1,12 @@
 /* cond.c - conditional assembly pseudo-ops, and .include
    Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
 /* cond.c - conditional assembly pseudo-ops, and .include
    Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
-   2003 Free Software Foundation, Inc.
+   2003, 2005, 2006, 2007 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,
 
    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.  */
 
 #include "as.h"
 
 #include "as.h"
+#include "sb.h"
 #include "macro.h"
 
 #include "obstack.h"
 #include "macro.h"
 
 #include "obstack.h"
@@ -102,7 +103,7 @@ s_ifdef (int test_defined)
         considered to be undefined.  */
       is_defined =
        symbolP != NULL
         considered to be undefined.  */
       is_defined =
        symbolP != NULL
-       && S_IS_DEFINED (symbolP)
+       && (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
        && S_GET_SEGMENT (symbolP) != reg_section;
 
       cframe.ignoring = ! (test_defined ^ is_defined);
        && S_GET_SEGMENT (symbolP) != reg_section;
 
       cframe.ignoring = ! (test_defined ^ is_defined);
@@ -144,7 +145,7 @@ s_if (int arg)
     }
   else
     {
     }
   else
     {
-      expression (&operand);
+      expression_and_evaluate (&operand);
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".if\" statement"));
     }
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".if\" statement"));
     }
@@ -181,6 +182,40 @@ s_if (int arg)
   demand_empty_rest_of_line ();
 }
 
   demand_empty_rest_of_line ();
 }
 
+/* Performs the .ifb (test_blank == 1) and
+   the .ifnb (test_blank == 0) pseudo op.  */
+
+void
+s_ifb (int test_blank)
+{
+  struct conditional_frame cframe;
+
+  initialize_cframe (&cframe);
+  
+  if (cframe.dead_tree)
+    cframe.ignoring = 1;
+  else
+    {
+      int is_eol;
+
+      SKIP_WHITESPACE ();
+      is_eol = is_end_of_line[(unsigned char) *input_line_pointer];
+      cframe.ignoring = (test_blank == !is_eol);
+    }
+
+  current_cframe = ((struct conditional_frame *)
+                   obstack_copy (&cond_obstack, &cframe,
+                                 sizeof (cframe)));
+
+  if (LISTING_SKIP_COND ()
+      && cframe.ignoring
+      && (cframe.previous_cframe == NULL
+         || ! cframe.previous_cframe->ignoring))
+    listing_list (2);
+
+  ignore_rest_of_line ();
+}
+
 /* Get a string for the MRI IFC or IFNC pseudo-ops.  */
 
 static char *
 /* Get a string for the MRI IFC or IFNC pseudo-ops.  */
 
 static char *
@@ -306,7 +341,7 @@ s_elseif (int arg)
       /* Leading whitespace is part of operand.  */
       SKIP_WHITESPACE ();
 
       /* Leading whitespace is part of operand.  */
       SKIP_WHITESPACE ();
 
-      expression (&operand);
+      expression_and_evaluate (&operand);
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".elseif\" statement"));
 
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".elseif\" statement"));
 
This page took 0.025525 seconds and 4 git commands to generate.