* tc-hppa.c: Add %dp and %rp as synonyms for %r27 and %r2 in the
authorJeff Law <law@redhat.com>
Wed, 3 Nov 1993 06:21:14 +0000 (06:21 +0000)
committerJeff Law <law@redhat.com>
Wed, 3 Nov 1993 06:21:14 +0000 (06:21 +0000)
predefined register table.
(pa_parse_number): Handle %rp in common register shortcut code.
Consistently set return value to -1 for an error.  Clean up error
messages and only print them when "print_errors" is true.  Handle
empty string case like the HP assembler -- assume a value of
zero.

gas/ChangeLog
gas/config/tc-hppa.c

index fca49573779b6a4d43a2e1a5768c7f625f9e41b2..4b238468bb4bd11daf52643c797cef8388878385 100644 (file)
@@ -6,6 +6,14 @@ Tue Nov  2 18:04:11 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
 Tue Nov  2 15:07:07 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
+       * tc-hppa.c: Add %dp and %rp as synonyms for %r27 and %r2 in the
+       predefined register table.
+       (pa_parse_number): Handle %rp in common register shortcut code.
+       Consistently set return value to -1 for an error.  Clean up error
+       messages and only print them when "print_errors" is true.  Handle
+       empty string case like the HP assembler -- assume a value of
+       zero.
        * config/ho-hpux.h: Do not include ho-sysv.h.  Instead include
        standard hpux include files to pick up various function decls.
 
index 8eca5c052ad92a807265d140204b05d755ae8c37..468933fb8b16b7329b153257b16a606085650328 100644 (file)
@@ -832,6 +832,8 @@ static int print_errors = 1;
    %r26 - %r23 have %arg0 - %arg3 as synonyms
    %r28 - %r29 have %ret0 - %ret1 as synonyms
    %r30 has %sp as a synonym
+   %r27 has %dp as a synonym
+   %r2  has %rp as a synonym
 
    Almost every control register has a synonym; they are not listed
    here for brevity.  
@@ -869,6 +871,7 @@ static const struct pd_reg pre_defined_registers[] =
   {"%cr31", 31},
   {"%cr8", 8},
   {"%cr9", 9},
+  {"%dp", 27},
   {"%eiem", 15},
   {"%eirr", 23},
   {"%fr0", 0},
@@ -1028,6 +1031,7 @@ static const struct pd_reg pre_defined_registers[] =
   {"%rctr", 0},
   {"%ret0", 28},
   {"%ret1", 29},
+  {"%rp", 2},
   {"%sar", 11},
   {"%sp", 30},
   {"%sr0", 0},
@@ -3395,8 +3399,17 @@ pa_parse_number (s, result)
              num = *p - '0' + 28;
              p++;
            }
+         else if (*p == 'p')
+           {
+             num = 2;
+             p++;
+           }
          else if (!isdigit (*p))
-           as_bad ("Undefined register: '%s'. ASSUMING 0", name);
+           {
+             if (print_errors)
+               as_bad ("Undefined register: '%s'.", name);
+             num = -1;
+           }
          else
            {
              do
@@ -3419,9 +3432,8 @@ pa_parse_number (s, result)
          else
            {
              if (print_errors)
-               as_bad ("Undefined register: '%s'. ASSUMING 0", name);
-             else
-               num = -1;
+               as_bad ("Undefined register: '%s'.", name);
+             num = -1;
            }
          *p = c;
        }
@@ -3458,17 +3470,24 @@ pa_parse_number (s, result)
          else
            {
              if (print_errors)
-               as_bad ("Non-absolute constant: '%s'. ASSUMING 0", name);
-             else
-               num = -1;
+               as_bad ("Non-absolute symbol: '%s'.", name);
+             num = -1;
            }
        }
       else
        {
-         if (print_errors)
-           as_bad ("Undefined absolute constant: '%s'. ASSUMING 0", name);
+         /* There is where we'd come for an undefined symbol
+            or for an empty string.  For an empty string we
+            will return zero.  That's a concession made for
+            compatability with the braindamaged HP assemblers.  */
+         if (*p == 0)
+           num = 0;
          else
-           num = -1;
+           {
+             if (print_errors)
+               as_bad ("Undefined absolute constant: '%s'.", name);
+             num = -1;
+           }
        }
       *p = c;