OSDN Git Service

gas/
authorJan Beulich <jbeulich@novell.com>
Wed, 12 Oct 2005 07:51:08 +0000 (07:51 +0000)
committerJan Beulich <jbeulich@novell.com>
Wed, 12 Oct 2005 07:51:08 +0000 (07:51 +0000)
2005-10-12  Jan Beulich  <jbeulich@novell.com>

* config/tc-ia64.c (dot_reg_val): Use expression_and_evaluate.
(dot_pred_rel): Likewise.
(parse_operand): Likewise.
(ia64_unrecognized_line): Likewise.
(md_operand): Likewise.

gas/testsuite/
2005-10-12  Jan Beulich  <jbeulich@novell.com>

* gas/ia64/forward.[sd]: New.
* gas/ia64/ia64.exp: Run new test.

gas/ChangeLog
gas/config/tc-ia64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/ia64/forward.d [new file with mode: 0644]
gas/testsuite/gas/ia64/forward.s [new file with mode: 0644]
gas/testsuite/gas/ia64/ia64.exp

index 16d67b5..cc84d99 100644 (file)
@@ -1,7 +1,15 @@
+2005-10-12  Jan Beulich  <jbeulich@novell.com>
+
+       * config/tc-ia64.c (dot_reg_val): Use expression_and_evaluate.
+       (dot_pred_rel): Likewise.
+       (parse_operand): Likewise.
+       (ia64_unrecognized_line): Likewise.
+       (md_operand): Likewise.
+
 2005-10-11  Jan Beulich  <jbeulich@novell.com>
 
        * expr.h (enum expr_mode): New.
-       (expression): Pass thrid argument to expr.
+       (expression): Pass third argument to expr.
        (expression_and_evaluate): New.
        (deferred_expression): New.
        (expr): Add third parameter.
@@ -23,7 +31,7 @@
        deferred_expression. Pass mode argument to itself and md_parse_name.
        Check mode before trying to evaluate symbol. Call
        symbol_clone_if_forward_ref for both operands.
-       (expr): Add thrid parameter. Pass mode to operand and itself.
+       (expr): Add third parameter. Pass mode to operand and itself.
        Optionally call resolve_expression.
        (resolve_expression): New.
        (get_single_number): Pass second argument to operand.
index 334eb32..19b5769 100644 (file)
@@ -5103,7 +5103,7 @@ dot_reg_val (dummy)
 {
   expressionS reg;
 
-  expression (&reg);
+  expression_and_evaluate (&reg);
   if (reg.X_op != O_register)
     {
       as_bad (_("Register name expected"));
@@ -5275,7 +5275,7 @@ dot_pred_rel (type)
       int regno;
       expressionS pr, *pr1, *pr2;
 
-      expression (&pr);
+      expression_and_evaluate (&pr);
       if (pr.X_op == O_register
          && pr.X_add_number >= REG_P
          && pr.X_add_number <= REG_P + 63)
@@ -6181,7 +6181,7 @@ parse_operand (e, more)
   memset (e, 0, sizeof (*e));
   e->X_op = O_absent;
   SKIP_WHITESPACE ();
-  expression (e);
+  expression_and_evaluate (e);
   sep = *input_line_pointer;
   if (more && (sep == ',' || sep == more))
     ++input_line_pointer;
@@ -7822,7 +7822,7 @@ ia64_unrecognized_line (ch)
   switch (ch)
     {
     case '(':
-      expression (&md.qp);
+      expression_and_evaluate (&md.qp);
       if (*input_line_pointer++ != ')')
        {
          as_bad ("Expected ')'");
@@ -11022,7 +11022,7 @@ md_operand (e)
     {
     case '[':
       ++input_line_pointer;
-      expression (e);
+      expression_and_evaluate (e);
       if (*input_line_pointer != ']')
        {
          as_bad ("Closing bracket missing");
index 5ed3d10..31f56dd 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-12  Jan Beulich  <jbeulich@novell.com>
+
+       * gas/ia64/forward.[sd]: New.
+       * gas/ia64/ia64.exp: Run new test.
+
 2005-10-11  Jan Beulich  <jbeulich@novell.com>
 
        * gas/all/cond.s: Add test for resolution of fully resolvable
diff --git a/gas/testsuite/gas/ia64/forward.d b/gas/testsuite/gas/ia64/forward.d
new file mode 100644 (file)
index 0000000..66aecde
--- /dev/null
@@ -0,0 +1,15 @@
+# as: -xexplicit
+# objdump: -d
+# name ia64 forward references
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+ <_start>:
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+\[MIB\][[:space:]]+alloc r31=ar.pfs,12,6,8
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+[[:space:]]+dep.z r2=1,5,7
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+\(p0?6\)[[:space:]]+br.cond.sptk.few 0+ <_start>;;
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+\[MIB\][[:space:]]+alloc r31=ar.pfs,0,0,0
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+[[:space:]]+dep.z r3=-1,1,1
+[[:space:]]*[[:xdigit:]]*:[[:space:][:xdigit:]]+\(p0?7\)[[:space:]]+br(\.cond)?\.sptk(\.few)? [[:xdigit:]]+0 <.*>;;
diff --git a/gas/testsuite/gas/ia64/forward.s b/gas/testsuite/gas/ia64/forward.s
new file mode 100644 (file)
index 0000000..fc2590b
--- /dev/null
@@ -0,0 +1,27 @@
+two == 2*one
+one = 1
+three == 3*one
+four = 4*one
+
+RA == rA
+rA = r2
+
+PA == pA
+pA = p6
+
+ .text
+_start:
+       alloc   r31 = one + 1, two + 2, three + 3, four + 4
+       dep.z   RA = one, two + 3, three + 4
+(PA)   br.sptk _start
+       ;;
+
+one = -1
+rA = r3
+pA = p7
+
+.L1:
+       alloc   r31 = one + 1, two + 2, three + 3, four - 4
+       dep.z   RA = one, two + 3, three + 4
+(PA)   br.sptk .L1
+       ;;
index 5ecdff3..a6c8646 100644 (file)
@@ -78,6 +78,7 @@ if [istarget "ia64-*"] then {
 
     run_list_test "alloc" ""
     run_dump_test "bundling"
+    run_dump_test "forward"
     run_list_test "label" ""
     run_list_test "last" ""
     run_list_test "no-fit" ""