* config/tc-m68k.c: Instead of replacing -1 by 64 in assignment to
authorAndreas Schwab <schwab@linux-m68k.org>
Tue, 8 May 2001 18:03:27 +0000 (18:03 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Tue, 8 May 2001 18:03:27 +0000 (18:03 +0000)
fx_pcrel_adjust explicitly sign extend when reading it.

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

index d2c44413d343da996b4c8f3b6a9a0d26e5408496..a441aa8158dd07b3795e147950171c2a35519d55 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-08  Andreas Schwab  <schwab@suse.de>
+
+       * config/tc-m68k.c: Instead of replacing -1 by 64 in assignment to
+       fx_pcrel_adjust explicitly sign extend when reading it.
+
 2001-05-08  Alan Modra  <amodra@one.net.au>
 
        * config/tc-m68k.c (md_estimate_size_before_relax): Set fr_var
index a755285ec4bb059f4fb88cd4b93e99a0c6b8d62c..8451c2f6b494701d61698f7a4857026cabff70f5 100644 (file)
@@ -968,8 +968,9 @@ tc_gen_reloc (section, fixp)
     reloc->addend = fixp->fx_addnumber;
   else
     reloc->addend = (section->vma
-                    + (fixp->fx_pcrel_adjust == 64
-                       ? -1 : fixp->fx_pcrel_adjust)
+                    /* Explicit sign extension in case char is
+                       unsigned.  */
+                    + ((fixp->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80
                     + fixp->fx_addnumber
                     + md_pcrel_from (fixp));
 #endif
@@ -2546,11 +2547,7 @@ m68k_ip (instring)
          switch (s[1])
            {
            case 'B':
-             /* The pc_fix argument winds up in fx_pcrel_adjust,
-                 which is a char, and may therefore be unsigned.  We
-                 want to pass -1, but we pass 64 instead, and convert
-                 back in md_pcrel_from.  */
-             add_fix ('B', &opP->disp, 1, 64);
+             add_fix ('B', &opP->disp, 1, -1);
              break;
            case 'W':
              add_fix ('w', &opP->disp, 1, 0);
@@ -7041,9 +7038,9 @@ md_pcrel_from (fixP)
 {
   int adjust;
 
-  /* Because fx_pcrel_adjust is a char, and may be unsigned, we store
-     -1 as 64.  */
-  adjust = fixP->fx_pcrel_adjust;
+  /* Because fx_pcrel_adjust is a char, and may be unsigned, we explicitly
+     sign extend the value here.  */
+  adjust = ((fixP->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80;
   if (adjust == 64)
     adjust = -1;
   return fixP->fx_where + fixP->fx_frag->fr_address - adjust;