gas/
authorJan Beulich <jbeulich@novell.com>
Fri, 6 May 2005 06:38:11 +0000 (06:38 +0000)
committerJan Beulich <jbeulich@novell.com>
Fri, 6 May 2005 06:38:11 +0000 (06:38 +0000)
2005-05-06  Jan Beulich  <jbeulich@novell.com>

* cond.c (s_ifb): New.
* read.c (potable): Add s_ifb as handler for .ifb and .ifnb.
* read.h (s_ifb): Prototype.
* doc/as.texinfo: Document .ifb and .ifnb.

gas/testsuite/
2005-05-06  Jan Beulich  <jbeulich@novell.com>

* gas/all/cond.s: Also test .ifb/.ifnb.
* gas/all/cond.d: Adjust.

gas/ChangeLog
gas/cond.c
gas/doc/as.texinfo
gas/read.c
gas/read.h
gas/testsuite/ChangeLog
gas/testsuite/gas/all/cond.d
gas/testsuite/gas/all/cond.s

index 1c082533570e64e26ec21fc2198cae331fe9e374..6da2330e69d85e95f8423436515ed47687e9dac9 100644 (file)
@@ -1,3 +1,10 @@
+2005-05-06  Jan Beulich  <jbeulich@novell.com>
+
+       * cond.c (s_ifb): New.
+       * read.c (potable): Add s_ifb as handler for .ifb and .ifnb.
+       * read.h (s_ifb): Prototype.
+       * doc/as.texinfo: Document .ifb and .ifnb.
+
 2005-05-05  Steve Ellcey  <sje@cup.hp.com>
 
        * config/tc-ia64.c (MIN): Undef.
index 8bea97e412b191b2a6c6311581fe8b1cc5c326f9..8cd98c2a2d291128a65332494ff5bbf2813de23e 100644 (file)
@@ -181,6 +181,40 @@ s_if (int arg)
   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 *
index 7b14c0b22faf130f275d0cbbb3ffd90a547bc6f4..8186aba3887506d09b68167b44c87201fc2f6188 100644 (file)
@@ -4456,6 +4456,10 @@ Assembles the following section of code if the specified @var{symbol}
 has been defined.  Note a symbol which has been referenced but not yet defined
 is considered to be undefined.
 
+@cindex @code{ifb} directive
+@item .ifb @var{text}
+Assembles the following section of code if the operand is blank (empty).
+
 @cindex @code{ifc} directive
 @item .ifc @var{string1},@var{string2}
 Assembles the following section of code if the two strings are the same.  The
@@ -4490,6 +4494,11 @@ to zero.
 @item .iflt @var{absolute expression}
 Assembles the following section of code if the argument is less than zero.
 
+@cindex @code{ifnb} directive
+@item .ifnb @var{text}
+Like @code{.ifb}, but the sense of the test is reversed: this assembles the
+following section of code if the operand is non-blank (non-empty).
+
 @cindex @code{ifnc} directive
 @item .ifnc @var{string1},@var{string2}.
 Like @code{.ifc}, but the sense of the test is reversed: this assembles the
index e173a157b6071d1773332912d5a3e9aa5c81be91..2165edf666a6b9ec14cfe1212d4c2cd44c821cb9 100644 (file)
@@ -343,6 +343,7 @@ static const pseudo_typeS potable[] = {
   {"globl", s_globl, 0},
   {"hword", cons, 2},
   {"if", s_if, (int) O_ne},
+  {"ifb", s_ifb, 1},
   {"ifc", s_ifc, 0},
   {"ifdef", s_ifdef, 0},
   {"ifeq", s_if, (int) O_eq},
@@ -351,6 +352,7 @@ static const pseudo_typeS potable[] = {
   {"ifgt", s_if, (int) O_gt},
   {"ifle", s_if, (int) O_le},
   {"iflt", s_if, (int) O_lt},
+  {"ifnb", s_ifb, 0},
   {"ifnc", s_ifc, 1},
   {"ifndef", s_ifdef, 1},
   {"ifne", s_if, (int) O_ne},
index 28f343831acd1b3855aa3df7b1f7a69439862617..3510945e3276e35c448ff08a4cd98f979bb59cce 100644 (file)
@@ -155,6 +155,7 @@ extern void s_float_space (int mult);
 extern void s_func (int);
 extern void s_globl (int arg);
 extern void s_if (int arg);
+extern void s_ifb (int arg);
 extern void s_ifc (int arg);
 extern void s_ifdef (int arg);
 extern void s_ifeqs (int arg);
index 31e651ee69252698c209c0d989585c09f33e8ee3..d7365b44a2c1ddaa088bea6f4e67b026208ffda6 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-06  Jan Beulich  <jbeulich@novell.com>
+
+       * gas/all/cond.s: Also test .ifb/.ifnb.
+       * gas/all/cond.d: Adjust.
+
 2005-05-06  Jan Beulich  <jbeulich@novell.com>
 
        * gas/macros/dot.s: Don't use pseudo-ops in first column.
index 4d0da366f7f8f5a027ec21799fdb3b7c0764db97..e13ac9047ae10cdd6f854a43febb68a78bf835d3 100644 (file)
   27[  ]+.elseif       1
   29[  ]+.else
   31[  ]+.endif
-  32 000c 00 ?00 ?00 ?00[      ]+.p2align 5,0
-  32[  ]+00 ?00 ?00 ?00 
-  32[  ]+00 ?00 ?00 ?00 
-  32[  ]+00 ?00 ?00 ?00 
-  32[  ]+00 ?00 ?00 ?00 
+[      ]*[1-9][0-9]*[  ]+
+[      ]*[1-9][0-9]*[  ]+\.macro[      ]+m[    ]+x,[   ]*y[    ]*
+#...
+[      ]*[1-9][0-9]*[  ]+\.endm[       ]*
+[      ]*[1-9][0-9]*[  ]+[0-9a-f]+[048c] FF ?FF ?FF ?FF[       ]+m[    ]+,[    ]*
+[      ]*[1-9][0-9]*[  ]+FF ?FF ?FF ?FF[       ]*
+[      ]*[1-9][0-9]*[  ]+[0-9a-f]+[048c] FF ?FF ?FF ?FF[       ]+m[    ]+,[    ]*10[   ]*
+[      ]*[1-9][0-9]*[  ]+0[0A] ?00 ?00 ?0[0A][         ]*
+[      ]*[1-9][0-9]*[  ]+[0-9a-f]+[048c] 0[0B] ?00 ?00 ?0[0B][         ]+m[    ]+11,[  ]*
+[      ]*[1-9][0-9]*[  ]+FF ?FF ?FF ?FF[       ]*
+[      ]*[1-9][0-9]*[  ]+[0-9a-f]+[048c] 0[0C] ?00 ?00 ?0[0C][         ]+m[    ]+12,[  ]*13[   ]*
+[      ]*[1-9][0-9]*[  ]+0[0D] ?00 ?00 ?0[0D][         ]*
+[      ]*[1-9][0-9]*[  ]+
+[      ]*[1-9][0-9]*[  ]+.*\.p2align 5,0
+#pass
index ba4bd6ca612aca66473b0647055b61984142f528..b8136ba224f700b3c8e4d6504715f1408c045f08 100644 (file)
        .else
        .long   9
        .endif
+
+       .macro  m x, y
+       .ifb \x
+       .long   -1
+       .else
+       .long   \x
+       .endif
+       .ifnb \y
+       .long   \y
+       .else
+       .long   -1
+       .endif
+       .endm
+       m       ,
+       m       , 10
+       m       11,
+       m       12, 13
+
        .p2align 5,0